diff options
| author | Joakim Verona | 2015-02-01 00:37:46 +0100 |
|---|---|---|
| committer | Joakim Verona | 2015-02-01 00:37:46 +0100 |
| commit | 69815dfe3704f8a8c733843f1fd04546cbb0f4d0 (patch) | |
| tree | cee6910753a51b9a5ee88e2431c9bcad099e8ba8 | |
| parent | 4edad429cafb2f0b1fda028be58367286ab04f1c (diff) | |
| parent | a2c32b0cfc9f6d3410e2832d8ea0d4f1df576d1e (diff) | |
| download | emacs-69815dfe3704f8a8c733843f1fd04546cbb0f4d0.tar.gz emacs-69815dfe3704f8a8c733843f1fd04546cbb0f4d0.zip | |
Merge branch 'master' into xwidget
95 files changed, 3244 insertions, 1900 deletions
| @@ -1,12 +1,31 @@ | |||
| 1 | 2015-01-28 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | Merge from gnulib and try to repair bad merge | ||
| 4 | This attempts to repair problems introduced by the bad merge | ||
| 5 | 5491fd1098d27b3ba3db054076b9ab60fb3558dc. The easiest way for me | ||
| 6 | to fix the badly-merged gnulib files was to run | ||
| 7 | 'admin/merge-gnulib', so I did that, which also imported the | ||
| 8 | following changes: | ||
| 9 | * build-aux/update-copyright, m4/gnulib.m4: | ||
| 10 | Update from gnulib, incorporating: | ||
| 11 | 2015-01-15 time: port to MinGW32 3.21 | ||
| 12 | 2015-01-15 update-copyright: apply to self | ||
| 13 | 2015-01-11 update-copyright: recognize groff's \(co marker | ||
| 14 | |||
| 15 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 16 | |||
| 17 | * configure.ac (HAVE_W32): Abort with error message if | ||
| 18 | --without-toolkit-scroll-bars was specified. See | ||
| 19 | http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00525.html | ||
| 20 | for the details. | ||
| 21 | |||
| 1 | 2015-01-27 Paul Eggert <eggert@cs.ucla.edu> | 22 | 2015-01-27 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 23 | ||
| 3 | Port autogen.sh hook creation to Apple Git | 24 | Port autogen.sh hook creation to private templates |
| 4 | * autogen.sh: Do not assume that the hook samples exist. | 25 | * autogen.sh: Do not assume that the hook samples exist. |
| 5 | This ports to git version 1.9.3 (Apple Git-50). | 26 | This ports to developers who override templatedir in their Git |
| 6 | For some reason Apple decided to populate the git hooks directory | 27 | configuration. The downside is that patch applications won't be |
| 7 | in a different way from the way that standard Git does it. | 28 | checked, but that's better than autogen.sh failing. |
| 8 | The downside is that patch applications won't be checked on Apple, | ||
| 9 | but that's better than autogen.sh failing. | ||
| 10 | Problem reported by Sam Steingold in: | 29 | Problem reported by Sam Steingold in: |
| 11 | http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html | 30 | http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00898.html |
| 12 | 31 | ||
diff --git a/admin/ChangeLog b/admin/ChangeLog index e692ca0dbfd..ec500569860 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2015-01-28 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * update_autogen (commit): Prepend "# " to commit message. | ||
| 4 | |||
| 1 | 2015-01-24 Paul Eggert <eggert@cs.ucla.edu> | 5 | 2015-01-24 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 6 | ||
| 3 | Fix a couple of AM_V_GEN bugs | 7 | Fix a couple of AM_V_GEN bugs |
diff --git a/admin/update_autogen b/admin/update_autogen index 1a84030a5b0..73e8aebe3d8 100755 --- a/admin/update_autogen +++ b/admin/update_autogen | |||
| @@ -228,7 +228,7 @@ commit () | |||
| 228 | 228 | ||
| 229 | echo "Committing..." | 229 | echo "Committing..." |
| 230 | 230 | ||
| 231 | $vcs commit -m "Auto-commit of $type files." "$@" || return $? | 231 | $vcs commit -m "# Auto-commit of $type files." "$@" || return $? |
| 232 | 232 | ||
| 233 | [ "$vcs" = "git" ] && { | 233 | [ "$vcs" = "git" ] && { |
| 234 | $vcs push || return $? | 234 | $vcs push || return $? |
diff --git a/build-aux/update-copyright b/build-aux/update-copyright index 308fbf17f9b..4eb4b93ea6c 100755 --- a/build-aux/update-copyright +++ b/build-aux/update-copyright | |||
| @@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' | |||
| 3 | if 0; | 3 | if 0; |
| 4 | # Update an FSF copyright year list to include the current year. | 4 | # Update an FSF copyright year list to include the current year. |
| 5 | 5 | ||
| 6 | my $VERSION = '2013-01-03.09:41'; # UTC | 6 | my $VERSION = '2015-01-15.20:53'; # UTC |
| 7 | 7 | ||
| 8 | # Copyright (C) 2009-2015 Free Software Foundation, Inc. | 8 | # Copyright (C) 2009-2015 Free Software Foundation, Inc. |
| 9 | # | 9 | # |
| @@ -124,7 +124,7 @@ use strict; | |||
| 124 | use warnings; | 124 | use warnings; |
| 125 | 125 | ||
| 126 | my $copyright_re = 'Copyright'; | 126 | my $copyright_re = 'Copyright'; |
| 127 | my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; | 127 | my $circle_c_re = '(?:\([cC]\)|@copyright{}|\\\\\(co|©)'; |
| 128 | my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; | 128 | my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; |
| 129 | $holder ||= 'Free Software Foundation, Inc.'; | 129 | $holder ||= 'Free Software Foundation, Inc.'; |
| 130 | my $prefix_max = 5; | 130 | my $prefix_max = 5; |
diff --git a/configure.ac b/configure.ac index 59b16bdb1ed..f4fcf529498 100644 --- a/configure.ac +++ b/configure.ac | |||
| @@ -1940,6 +1940,9 @@ CM_OBJ="cm.o" | |||
| 1940 | XARGS_LIMIT= | 1940 | XARGS_LIMIT= |
| 1941 | if test "${HAVE_W32}" = "yes"; then | 1941 | if test "${HAVE_W32}" = "yes"; then |
| 1942 | AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.]) | 1942 | AC_DEFINE(HAVE_NTGUI, 1, [Define to use native MS Windows GUI.]) |
| 1943 | if test "$with_toolkit_scroll_bars" = "no"; then | ||
| 1944 | AC_MSG_ERROR([Non-toolkit scroll bars are not implemented for w32 build.]) | ||
| 1945 | fi | ||
| 1943 | AC_CHECK_TOOL(WINDRES, [windres], | 1946 | AC_CHECK_TOOL(WINDRES, [windres], |
| 1944 | [AC_MSG_ERROR([No resource compiler found.])]) | 1947 | [AC_MSG_ERROR([No resource compiler found.])]) |
| 1945 | W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o" | 1948 | W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o" |
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index a90c58725f8..1287733b129 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog | |||
| @@ -1,3 +1,15 @@ | |||
| 1 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * cmdargs.texi (Action Arguments): Clarify into which buffer | ||
| 4 | '--insert' inserts. (Bug#19694) | ||
| 5 | |||
| 6 | * programs.texi (Custom C Indent): Fix a typo. (Bug#19647) | ||
| 7 | |||
| 8 | 2015-01-27 Ivan Shmakov <ivan@siamics.net> | ||
| 9 | |||
| 10 | * files.texi (File Archives): Document "I" for tar-new-entry. | ||
| 11 | (Bug#19274) | ||
| 12 | |||
| 1 | 2014-12-31 Paul Eggert <eggert@cs.ucla.edu> | 13 | 2014-12-31 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 14 | ||
| 3 | Less 'make' chatter for Emacs doc | 15 | Less 'make' chatter for Emacs doc |
diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index f724f77e230..42c8e33d5c7 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi | |||
| @@ -165,9 +165,12 @@ Evaluate Lisp expression @var{expression}. | |||
| 165 | @item --insert=@var{file} | 165 | @item --insert=@var{file} |
| 166 | @opindex --insert | 166 | @opindex --insert |
| 167 | @cindex insert file contents, command-line argument | 167 | @cindex insert file contents, command-line argument |
| 168 | Insert the contents of @var{file} into the @file{*scratch*} buffer | 168 | Insert the contents of @var{file} into the buffer that is current when |
| 169 | (@pxref{Lisp Interaction}). This is like what @kbd{M-x insert-file} | 169 | this command-line argument is processed. Usually, this is the |
| 170 | does (@pxref{Misc File Ops}). | 170 | @file{*scratch*} buffer (@pxref{Lisp Interaction}), but if arguments |
| 171 | earlier on the command line visit files or switch buffers, that might | ||
| 172 | be a different buffer. The effect of this command-line argument is | ||
| 173 | like what @kbd{M-x insert-file} does (@pxref{Misc File Ops}). | ||
| 171 | 174 | ||
| 172 | @item --kill | 175 | @item --kill |
| 173 | @opindex --kill | 176 | @opindex --kill |
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 196c6bb0092..b12b28f9c17 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi | |||
| @@ -1689,6 +1689,13 @@ likewise. @kbd{v} extracts a file into a buffer in View mode | |||
| 1689 | another window, so you could edit the file and operate on the archive | 1689 | another window, so you could edit the file and operate on the archive |
| 1690 | simultaneously. | 1690 | simultaneously. |
| 1691 | 1691 | ||
| 1692 | The @kbd{I} key adds a new (regular) file to the archive. The file | ||
| 1693 | is initially empty, but can readily be edited using the commands | ||
| 1694 | above. The command inserts the new file before the current one, so | ||
| 1695 | that using it on the topmost line of the Tar buffer makes the new file | ||
| 1696 | the first one in the archive, and using it at the end of the buffer | ||
| 1697 | makes it the last one. | ||
| 1698 | |||
| 1692 | @kbd{d} marks a file for deletion when you later use @kbd{x}, and | 1699 | @kbd{d} marks a file for deletion when you later use @kbd{x}, and |
| 1693 | @kbd{u} unmarks a file, as in Dired. @kbd{C} copies a file from the | 1700 | @kbd{u} unmarks a file, as in Dired. @kbd{C} copies a file from the |
| 1694 | archive to disk and @kbd{R} renames a file within the archive. | 1701 | archive to disk and @kbd{R} renames a file within the archive. |
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index 8f6111dfa24..609392f6bb7 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi | |||
| @@ -546,7 +546,7 @@ your selected @dfn{style} with the syntactic construct and adds this | |||
| 546 | onto the indentation of the @dfn{anchor statement}. | 546 | onto the indentation of the @dfn{anchor statement}. |
| 547 | 547 | ||
| 548 | @table @kbd | 548 | @table @kbd |
| 549 | @item C-c . @key{RET} @var{style} @key{RET} | 549 | @item C-c . @var{style} @key{RET} |
| 550 | Select a predefined style @var{style} (@code{c-set-style}). | 550 | Select a predefined style @var{style} (@code{c-set-style}). |
| 551 | @end table | 551 | @end table |
| 552 | 552 | ||
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 4c0c116ba5a..2cde2fb6f48 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog | |||
| @@ -1,3 +1,26 @@ | |||
| 1 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * searching.texi (Regexp Search): Add a cross-reference to "Syntax | ||
| 4 | of Regexps". (Bug#19668) | ||
| 5 | |||
| 6 | 2015-01-28 Daniel Koning <dk@danielkoning.com> (tiny change) | ||
| 7 | |||
| 8 | * commands.texi (Drag Events, Motion Events, Event Examples) | ||
| 9 | (Accessing Mouse): Describe actual range of values that mouse | ||
| 10 | position objects can have. | ||
| 11 | |||
| 12 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 13 | |||
| 14 | * display.texi (Manipulating Buttons): Explain more about the | ||
| 15 | 'action' property. (Bug#19628) | ||
| 16 | |||
| 17 | * text.texi (Clickable Text): Improve indexing. (Bug#19629) | ||
| 18 | |||
| 19 | * variables.texi (Creating Buffer-Local): Improve indexing. (Bug#19608) | ||
| 20 | |||
| 21 | * frames.texi (Display Feature Testing): Make the description of | ||
| 22 | x-server-version and x-server-vendor less X-specific. (Bug#19502) | ||
| 23 | |||
| 1 | 2015-01-15 Eli Zaretskii <eliz@gnu.org> | 24 | 2015-01-15 Eli Zaretskii <eliz@gnu.org> |
| 2 | 25 | ||
| 3 | * streams.texi (Input Functions): Document 'set-binary-mode'. | 26 | * streams.texi (Input Functions): Document 'set-binary-mode'. |
diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 36c74450ed4..6fdc8e2ec79 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi | |||
| @@ -1489,8 +1489,10 @@ prefix @samp{drag-}. For example, dragging the mouse with button 2 | |||
| 1489 | held down generates a @code{drag-mouse-2} event. The second and third | 1489 | held down generates a @code{drag-mouse-2} event. The second and third |
| 1490 | elements of the event give the starting and ending position of the | 1490 | elements of the event give the starting and ending position of the |
| 1491 | drag, as mouse position lists (@pxref{Click Events}). You can access | 1491 | drag, as mouse position lists (@pxref{Click Events}). You can access |
| 1492 | the second element of any mouse event in the same way, with no need to | 1492 | the second element of any mouse event in the same way. However, the |
| 1493 | distinguish drag events from others. | 1493 | drag event may end outside the boundaries of the frame that was |
| 1494 | initially selected. In that case, the third element's position list | ||
| 1495 | contains that frame in place of a window. | ||
| 1494 | 1496 | ||
| 1495 | The @samp{drag-} prefix follows the modifier key prefixes such as | 1497 | The @samp{drag-} prefix follows the modifier key prefixes such as |
| 1496 | @samp{C-} and @samp{M-}. | 1498 | @samp{C-} and @samp{M-}. |
| @@ -1635,7 +1637,10 @@ represented by lists that look like this: | |||
| 1635 | 1637 | ||
| 1636 | @noindent | 1638 | @noindent |
| 1637 | @var{position} is a mouse position list (@pxref{Click Events}), | 1639 | @var{position} is a mouse position list (@pxref{Click Events}), |
| 1638 | specifying the current position of the mouse cursor. | 1640 | specifying the current position of the mouse cursor. As with the |
| 1641 | end-position of a drag event, this position list may represent a | ||
| 1642 | location outside the boundaries of the initially selected frame, in | ||
| 1643 | which case the list contains that frame in place of a window. | ||
| 1639 | 1644 | ||
| 1640 | The special form @code{track-mouse} enables generation of motion | 1645 | The special form @code{track-mouse} enables generation of motion |
| 1641 | events within its body. Outside of @code{track-mouse} forms, Emacs | 1646 | events within its body. Outside of @code{track-mouse} forms, Emacs |
| @@ -1850,6 +1855,14 @@ into another window. That produces a pair of events like these: | |||
| 1850 | -453816)) | 1855 | -453816)) |
| 1851 | @end smallexample | 1856 | @end smallexample |
| 1852 | 1857 | ||
| 1858 | The frame with input focus might not take up the entire screen, and | ||
| 1859 | the user might move the mouse outside the scope of the frame. Inside | ||
| 1860 | the @code{track-mouse} special form, that produces an event like this: | ||
| 1861 | |||
| 1862 | @smallexample | ||
| 1863 | (mouse-movement (#<frame *ielm* 0x102849a30> nil (563 . 205) 532301936)) | ||
| 1864 | @end smallexample | ||
| 1865 | |||
| 1853 | To handle a SIGUSR1 signal, define an interactive function, and | 1866 | To handle a SIGUSR1 signal, define an interactive function, and |
| 1854 | bind it to the @code{signal usr1} event sequence: | 1867 | bind it to the @code{signal usr1} event sequence: |
| 1855 | 1868 | ||
| @@ -2014,7 +2027,9 @@ Events}); and @code{nil} otherwise. | |||
| 2014 | various parts of it: | 2027 | various parts of it: |
| 2015 | 2028 | ||
| 2016 | @defun posn-window position | 2029 | @defun posn-window position |
| 2017 | Return the window that @var{position} is in. | 2030 | Return the window that @var{position} is in. If @var{position} |
| 2031 | represents a location outside the frame where the event was initiated, | ||
| 2032 | return that frame instead. | ||
| 2018 | @end defun | 2033 | @end defun |
| 2019 | 2034 | ||
| 2020 | @defun posn-area position | 2035 | @defun posn-area position |
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 1b7f21da282..b09b82a6724 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi | |||
| @@ -5735,10 +5735,12 @@ Set @var{button}'s @var{prop} property to @var{val}. | |||
| 5735 | @end defun | 5735 | @end defun |
| 5736 | 5736 | ||
| 5737 | @defun button-activate button &optional use-mouse-action | 5737 | @defun button-activate button &optional use-mouse-action |
| 5738 | Call @var{button}'s @code{action} property (i.e., invoke it). If | 5738 | Call @var{button}'s @code{action} property (i.e., invoke the function |
| 5739 | @var{use-mouse-action} is non-@code{nil}, try to invoke the button's | 5739 | that is the value of that property, passing it the single argument |
| 5740 | @code{mouse-action} property instead of @code{action}; if the button | 5740 | @var{button}). If @var{use-mouse-action} is non-@code{nil}, try to |
| 5741 | has no @code{mouse-action} property, use @code{action} as normal. | 5741 | invoke the button's @code{mouse-action} property instead of |
| 5742 | @code{action}; if the button has no @code{mouse-action} property, use | ||
| 5743 | @code{action} as normal. | ||
| 5742 | @end defun | 5744 | @end defun |
| 5743 | 5745 | ||
| 5744 | @defun button-label button | 5746 | @defun button-label button |
diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 663207c5253..a6f4081532d 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi | |||
| @@ -2782,20 +2782,26 @@ colors). | |||
| 2782 | This function returns the number of color cells the screen supports. | 2782 | This function returns the number of color cells the screen supports. |
| 2783 | @end defun | 2783 | @end defun |
| 2784 | 2784 | ||
| 2785 | These functions obtain additional information specifically | 2785 | These functions obtain additional information about the window |
| 2786 | about X displays. | 2786 | system in use where Emacs shows the specified @var{display}. (Their |
| 2787 | names begin with @code{x-} for historical reasons.) | ||
| 2787 | 2788 | ||
| 2788 | @defun x-server-version &optional display | 2789 | @defun x-server-version &optional display |
| 2789 | This function returns the list of version numbers of the X server | 2790 | This function returns the list of version numbers of the GUI window |
| 2790 | running the display. The value is a list of three integers: the major | 2791 | system running on @var{display}, such as the X server on GNU and Unix |
| 2791 | and minor version numbers of the X protocol, and the | 2792 | systems. The value is a list of three integers: the major and minor |
| 2792 | distributor-specific release number of the X server software itself. | 2793 | version numbers of the protocol, and the distributor-specific release |
| 2794 | number of the window system software itself. On GNU and Unix systems, | ||
| 2795 | these are normally the version of the X protocol and the | ||
| 2796 | distributor-specific release number of the X server software. On | ||
| 2797 | MS-Windows, this is the version of the Windows OS. | ||
| 2793 | @end defun | 2798 | @end defun |
| 2794 | 2799 | ||
| 2795 | @defun x-server-vendor &optional display | 2800 | @defun x-server-vendor &optional display |
| 2796 | This function returns the ``vendor'' that provided the X server | 2801 | This function returns the ``vendor'' that provided the window system |
| 2797 | software (as a string). Really this means whoever distributes the X | 2802 | software (as a string). On GNU and Unix systems this really means |
| 2798 | server. | 2803 | whoever distributes the X server. On MS-Windows this is the vendor ID |
| 2804 | string of the Windows OS (Microsoft). | ||
| 2799 | 2805 | ||
| 2800 | When the developers of X labeled software distributors as | 2806 | When the developers of X labeled software distributors as |
| 2801 | ``vendors'', they showed their false assumption that no system could | 2807 | ``vendors'', they showed their false assumption that no system could |
diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi index 2032b151d07..61fac78e4a8 100644 --- a/doc/lispref/searching.texi +++ b/doc/lispref/searching.texi | |||
| @@ -988,10 +988,11 @@ list of characters @var{chars}. | |||
| 988 | @cindex searching for regexp | 988 | @cindex searching for regexp |
| 989 | 989 | ||
| 990 | In GNU Emacs, you can search for the next match for a regular | 990 | In GNU Emacs, you can search for the next match for a regular |
| 991 | expression either incrementally or not. For incremental search | 991 | expression (@pxref{Syntax of Regexps}) either incrementally or not. |
| 992 | commands, see @ref{Regexp Search, , Regular Expression Search, emacs, | 992 | For incremental search commands, see @ref{Regexp Search, , Regular |
| 993 | The GNU Emacs Manual}. Here we describe only the search functions | 993 | Expression Search, emacs, The GNU Emacs Manual}. Here we describe |
| 994 | useful in programs. The principal one is @code{re-search-forward}. | 994 | only the search functions useful in programs. The principal one is |
| 995 | @code{re-search-forward}. | ||
| 995 | 996 | ||
| 996 | These search functions convert the regular expression to multibyte if | 997 | These search functions convert the regular expression to multibyte if |
| 997 | the buffer is multibyte; they convert the regular expression to unibyte | 998 | the buffer is multibyte; they convert the regular expression to unibyte |
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index 1b8897f59e7..a7cfb22e889 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi | |||
| @@ -3731,6 +3731,7 @@ clicks on the link quickly without moving the mouse. This behavior is | |||
| 3731 | controlled by the user option @code{mouse-1-click-follows-link}. | 3731 | controlled by the user option @code{mouse-1-click-follows-link}. |
| 3732 | @xref{Mouse References,,, emacs, The GNU Emacs Manual}. | 3732 | @xref{Mouse References,,, emacs, The GNU Emacs Manual}. |
| 3733 | 3733 | ||
| 3734 | @cindex follow-link (text or overlay property) | ||
| 3734 | To set up the link so that it obeys | 3735 | To set up the link so that it obeys |
| 3735 | @code{mouse-1-click-follows-link}, you must either (1) apply a | 3736 | @code{mouse-1-click-follows-link}, you must either (1) apply a |
| 3736 | @code{follow-link} text or overlay property to the link text, or (2) | 3737 | @code{follow-link} text or overlay property to the link text, or (2) |
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index 5d766e4ffa6..27bc0610959 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi | |||
| @@ -1403,6 +1403,7 @@ buffer-local variable interactively, just as it is useful to create | |||
| 1403 | buffer-local variables interactively. | 1403 | buffer-local variables interactively. |
| 1404 | @end deffn | 1404 | @end deffn |
| 1405 | 1405 | ||
| 1406 | @cindex local variables, killed by major mode | ||
| 1406 | @defun kill-all-local-variables | 1407 | @defun kill-all-local-variables |
| 1407 | This function eliminates all the buffer-local variable bindings of the | 1408 | This function eliminates all the buffer-local variable bindings of the |
| 1408 | current buffer except for variables marked as ``permanent'' and local | 1409 | current buffer except for variables marked as ``permanent'' and local |
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi index 8c1865d78a5..fd9f6f543e0 100644 --- a/doc/misc/eww.texi +++ b/doc/misc/eww.texi | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | @copying | 8 | @copying |
| 9 | This file documents the GNU Emacs Web Wowser (EWW) package. | 9 | This file documents the GNU Emacs Web Wowser (EWW) package. |
| 10 | 10 | ||
| 11 | Copyright @copyright{} 2014-2015 Free Software Foundation, Inc. | 11 | Copyright @copyright{} 2014--2015 Free Software Foundation, Inc. |
| 12 | 12 | ||
| 13 | @quotation | 13 | @quotation |
| 14 | Permission is granted to copy, distribute and/or modify this document | 14 | Permission is granted to copy, distribute and/or modify this document |
diff --git a/doc/misc/info.texi b/doc/misc/info.texi index 0e2e64f2356..759956d21dc 100644 --- a/doc/misc/info.texi +++ b/doc/misc/info.texi | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | This file describes how to use Info, the menu-driven GNU | 15 | This file describes how to use Info, the menu-driven GNU |
| 16 | documentation system. | 16 | documentation system. |
| 17 | 17 | ||
| 18 | Copyright @copyright{} 1989, 1992, 1996--2014 Free Software Foundation, Inc. | 18 | Copyright @copyright{} 1989, 1992, 1996--2015 Free Software Foundation, Inc. |
| 19 | 19 | ||
| 20 | @quotation | 20 | @quotation |
| 21 | Permission is granted to copy, distribute and/or modify this document | 21 | Permission is granted to copy, distribute and/or modify this document |
diff --git a/etc/ChangeLog b/etc/ChangeLog index b31e8a99383..8bc1afbef52 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog | |||
| @@ -1,3 +1,18 @@ | |||
| 1 | 2015-01-29 Francesc Rocher <francesc.rocher@gmail.com> | ||
| 2 | |||
| 3 | * images/splash.svg, images/splash.png: | ||
| 4 | * images/splash.pbm, images/splash.xpm, images/README: | ||
| 5 | Splash images refurbished. | ||
| 6 | |||
| 7 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 8 | |||
| 9 | * tutorials/TUTORIAL.he: Use u+05f4 HEBREW PUNCTUATION GERSHAYIM | ||
| 10 | instead of u+0022 QUOTATION MARK in Hebrew acronyms. | ||
| 11 | |||
| 12 | 2015-01-27 Ivan Shmakov <ivan@siamics.net> | ||
| 13 | |||
| 14 | * NEWS: Mention the new tar-new-entry command. (Bug#19274) | ||
| 15 | |||
| 1 | 2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org> | 16 | 2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org> |
| 2 | 17 | ||
| 3 | * NEWS: Document EUDC improvements. | 18 | * NEWS: Document EUDC improvements. |
| @@ -527,6 +527,10 @@ to avoid interfering with the kill ring. | |||
| 527 | allow overriding the regular expression that recognizes the ldapsearch | 527 | allow overriding the regular expression that recognizes the ldapsearch |
| 528 | command line's password prompt. | 528 | command line's password prompt. |
| 529 | 529 | ||
| 530 | +++ | ||
| 531 | ** tar-mode: new `tar-new-entry' command, allowing for new members to | ||
| 532 | be added to the archive. | ||
| 533 | |||
| 530 | ** Obsolete packages | 534 | ** Obsolete packages |
| 531 | 535 | ||
| 532 | --- | 536 | --- |
diff --git a/etc/images/README b/etc/images/README index 486aca94392..005754b0a9e 100644 --- a/etc/images/README +++ b/etc/images/README | |||
| @@ -25,12 +25,12 @@ File: mh-logo.xpm | |||
| 25 | Author: Satyaki Das | 25 | Author: Satyaki Das |
| 26 | Copyright (C) 2003-2015 Free Software Foundation, Inc. | 26 | Copyright (C) 2003-2015 Free Software Foundation, Inc. |
| 27 | 27 | ||
| 28 | Files: splash.pbm, splash.xpm, gnus.pbm | 28 | Files: gnus.pbm |
| 29 | Author: Luis Fernandes <elf@ee.ryerson.ca> | 29 | Author: Luis Fernandes <elf@ee.ryerson.ca> |
| 30 | Copyright (C) 2001-2015 Free Software Foundation, Inc. | 30 | Copyright (C) 2001-2015 Free Software Foundation, Inc. |
| 31 | 31 | ||
| 32 | Files: splash.png, splash.svg | 32 | Files: splash.png, splash.svg, splash.pbm, splash.xpm |
| 33 | Author: Francesc Rocher <rocher@member.fsf.org> | 33 | Author: Francesc Rocher <francesc.rocher@gmail.com> |
| 34 | Copyright (C) 2008-2015 Free Software Foundation, Inc. | 34 | Copyright (C) 2008-2015 Free Software Foundation, Inc. |
| 35 | 35 | ||
| 36 | Files: checked.xpm, unchecked.xpm | 36 | Files: checked.xpm, unchecked.xpm |
diff --git a/etc/images/splash.pbm b/etc/images/splash.pbm index 7f3589512b0..39b69a5a5d5 100644 --- a/etc/images/splash.pbm +++ b/etc/images/splash.pbm | |||
| Binary files differ | |||
diff --git a/etc/images/splash.png b/etc/images/splash.png index a5331f1dc5a..9d0eb37c8ac 100644 --- a/etc/images/splash.png +++ b/etc/images/splash.png | |||
| Binary files differ | |||
diff --git a/etc/images/splash.svg b/etc/images/splash.svg index bdd80bfe17e..54865f590bc 100644 --- a/etc/images/splash.svg +++ b/etc/images/splash.svg | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | Copyright (C) 2008-2015 Free Software Foundation, Inc. | 4 | Copyright (C) 2008-2015 Free Software Foundation, Inc. |
| 5 | 5 | ||
| 6 | Author: Francesc Rocher <f.rocher@members.fsf.org> | 6 | Author: Francesc Rocher <francesc.rocher@gmail.com> |
| 7 | Based on the original work by Luis Fernandes <elf@ee.ryerson.ca> | 7 | Based on the original work by Luis Fernandes <elf@ee.ryerson.ca> |
| 8 | 8 | ||
| 9 | This file is part of GNU Emacs. | 9 | This file is part of GNU Emacs. |
| @@ -29,12 +29,39 @@ | |||
| 29 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | 29 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
| 30 | xmlns:svg="http://www.w3.org/2000/svg" | 30 | xmlns:svg="http://www.w3.org/2000/svg" |
| 31 | xmlns="http://www.w3.org/2000/svg" | 31 | xmlns="http://www.w3.org/2000/svg" |
| 32 | xmlns:xlink="http://www.w3.org/1999/xlink" | 32 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
| 33 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 33 | version="1.0" | 34 | version="1.0" |
| 34 | width="275.96875" | 35 | width="333" |
| 35 | height="190.40625" | 36 | height="233" |
| 36 | id="svg6706" | 37 | id="svg6706" |
| 37 | style="display:inline"> | 38 | style="display:inline" |
| 39 | inkscape:version="0.48.4 r9939" | ||
| 40 | sodipodi:docname="splash.svg" | ||
| 41 | inkscape:export-filename="/opt/src/emacs/etc/images/splash.png" | ||
| 42 | inkscape:export-xdpi="90" | ||
| 43 | inkscape:export-ydpi="90"> | ||
| 44 | <sodipodi:namedview | ||
| 45 | pagecolor="#ffffff" | ||
| 46 | bordercolor="#666666" | ||
| 47 | borderopacity="1" | ||
| 48 | objecttolerance="10" | ||
| 49 | gridtolerance="10" | ||
| 50 | guidetolerance="10" | ||
| 51 | inkscape:pageopacity="1" | ||
| 52 | inkscape:pageshadow="2" | ||
| 53 | inkscape:window-width="1920" | ||
| 54 | inkscape:window-height="1004" | ||
| 55 | id="namedview3107" | ||
| 56 | showgrid="false" | ||
| 57 | inkscape:showpageshadow="false" | ||
| 58 | inkscape:zoom="1" | ||
| 59 | inkscape:cx="-49.78722" | ||
| 60 | inkscape:cy="105.19797" | ||
| 61 | inkscape:window-x="0" | ||
| 62 | inkscape:window-y="24" | ||
| 63 | inkscape:window-maximized="1" | ||
| 64 | inkscape:current-layer="layer1" /> | ||
| 38 | <metadata | 65 | <metadata |
| 39 | id="metadata2314"> | 66 | id="metadata2314"> |
| 40 | <rdf:RDF> | 67 | <rdf:RDF> |
| @@ -43,7 +70,7 @@ | |||
| 43 | <dc:format>image/svg+xml</dc:format> | 70 | <dc:format>image/svg+xml</dc:format> |
| 44 | <dc:type | 71 | <dc:type |
| 45 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | 72 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
| 46 | <dc:title></dc:title> | 73 | <dc:title /> |
| 47 | <dc:date>2008/06/28</dc:date> | 74 | <dc:date>2008/06/28</dc:date> |
| 48 | <dc:creator> | 75 | <dc:creator> |
| 49 | <cc:Agent> | 76 | <cc:Agent> |
| @@ -67,71 +94,28 @@ | |||
| 67 | </rdf:RDF> | 94 | </rdf:RDF> |
| 68 | </metadata> | 95 | </metadata> |
| 69 | <defs | 96 | <defs |
| 70 | id="defs6709"> | 97 | id="defs6709" /> |
| 71 | <linearGradient | ||
| 72 | id="linearGradient2550"> | ||
| 73 | <stop | ||
| 74 | id="stop2552" | ||
| 75 | style="stop-color:#4c94f1;stop-opacity:0.78431374" | ||
| 76 | offset="0" /> | ||
| 77 | <stop | ||
| 78 | id="stop2554" | ||
| 79 | style="stop-color:#4c94f1;stop-opacity:0.78431374" | ||
| 80 | offset="1" /> | ||
| 81 | </linearGradient> | ||
| 82 | <linearGradient | ||
| 83 | id="linearGradient7896"> | ||
| 84 | <stop | ||
| 85 | id="stop7898" | ||
| 86 | style="stop-color:#fc644b;stop-opacity:0.78431374" | ||
| 87 | offset="0" /> | ||
| 88 | <stop | ||
| 89 | id="stop7900" | ||
| 90 | style="stop-color:#fc644b;stop-opacity:0.78431374" | ||
| 91 | offset="1" /> | ||
| 92 | </linearGradient> | ||
| 93 | <linearGradient | ||
| 94 | xlink:href="#linearGradient2550" | ||
| 95 | id="linearGradient2556" | ||
| 96 | x1="147.62743" | ||
| 97 | y1="92.09787" | ||
| 98 | x2="145.82028" | ||
| 99 | y2="203.60176" | ||
| 100 | gradientUnits="userSpaceOnUse" /> | ||
| 101 | <linearGradient | ||
| 102 | xlink:href="#linearGradient7896" | ||
| 103 | id="linearGradient2425" | ||
| 104 | gradientUnits="userSpaceOnUse" | ||
| 105 | gradientTransform="translate(-2.4002643e-7,-2.6398943e-6)" | ||
| 106 | x1="147.52159" | ||
| 107 | y1="0.92070419" | ||
| 108 | x2="147.12886" | ||
| 109 | y2="211.99936" /> | ||
| 110 | </defs> | ||
| 111 | <g | 98 | <g |
| 112 | transform="translate(5.34375,-11.4375)" | 99 | inkscape:groupmode="layer" |
| 113 | id="layer2" | 100 | id="layer1" |
| 101 | inkscape:label="emacs" | ||
| 114 | style="display:inline"> | 102 | style="display:inline"> |
| 115 | <path | 103 | <g |
| 116 | id="bg-emacs" | 104 | style="display:inline" |
| 117 | d="M -0.54734668,196.72853 C -10.238062,181.78405 5.3965305,167.92976 14.809201,161.97512 c 6.963497,-4.40524 14.224571,-9.82272 13.070957,-9.82483 -0.996579,-0.002 -3.28511,-0.79177 -5.085617,-1.75545 -6.217876,-3.328 -7.955628,-16.0503 7.055337,-28.37575 16.709358,-12.01621 42.570706,-26.817295 64.900729,-20.35237 3.972323,1.58882 2.904483,4.42259 -3.766368,9.99493 -5.675178,4.74062 -17.792772,11.85728 -18.753492,11.01391 -0.233326,-0.20481 2.490068,-2.19795 6.051979,-4.42919 3.551812,-2.45188 6.827,-5.57228 6.234589,-9.02517 -1.977492,-3.21848 -14.566202,0.87624 -19.657994,3.11812 -8.980399,3.95401 -30.419617,17.3969 -29.389287,24.77996 0.719552,5.15612 9.095912,7.16542 19.107524,2.72826 7.005023,-3.10464 12.660323,-6.60409 12.285323,-4.56715 -0.365454,1.98509 -12.574667,10.22701 -19.359801,12.99119 -10.773868,4.38916 -18.049435,9.35351 -26.510163,16.40859 -7.801376,6.50528 -6.794788,9.58593 -6.794788,14.18989 0,3.11466 2.974668,5.51843 6.829021,5.51843 7.964514,0 8.895804,0.12074 32.270578,-16.56369 5.162282,-3.68473 10.228089,-7.76323 13.653652,-9.77045 4.326017,-2.53484 9.463124,-4.13198 8.976988,-1.65526 -3.779364,7.61077 -5.74585,10.67934 -9.167556,16.15546 8.11118,-6.33235 15.840916,-14.71763 24.306604,-15.7298 2.101063,-0.25121 7.741174,-0.49516 8.636184,0.99596 0.66736,1.11183 -0.45512,5.1162 -2.21368,8.92266 -0.53908,1.16685 1.05142,0.38368 4.67533,-2.30213 7.4413,-5.51505 14.07911,-8.75072 17.95157,-8.75072 4.57712,0 4.83279,1.74832 1.24097,8.48622 -3.75741,7.04855 -6.75962,17.21422 -4.65148,19.88378 1.46622,1.85669 7.96734,-2.91147 10.3276,-4.31865 2.42293,-1.44454 6.05649,-3.67201 7.44149,-4.72955 10.37298,-7.92039 39.1617,-23.15505 40.99851,-21.53603 0.82449,0.72672 -1.6928,2.43145 -10.4509,7.07749 -14.25554,7.56231 -22.59862,14.9854 -22.60932,20.11619 -0.006,2.71011 4.1743,2.15203 7.26381,1.4275 4.40695,-1.03349 12.41622,-3.9676 -0.1736,3.14023 -13.16001,7.42973 -22.48474,6.17812 -16.63437,-3.95665 l 3.73574,-6.16441 -9.13253,6.55379 c -13.1916,9.46671 -19.35595,10.10807 -22.76505,7.11544 -2.6121,-2.29301 -1.99116,-8.56165 1.43897,-14.5266 2.74703,-4.77707 3.88176,-8.84229 2.46817,-8.84229 -2.38604,0 -7.35931,4.53611 -13.269938,10.69747 -9.974903,10.39803 -8.541011,15.10079 -10.591215,15.36937 -1.2597,0.16503 -6.977484,-1.59412 -4.555892,-8.64067 1.80805,-5.26122 4.692881,-8.68747 6.822262,-11.55279 3.866732,-5.2031 1.480467,-5.97342 -3.790272,-3.77097 -3.05613,1.27704 -5.350157,4.83814 -17.152826,15.01371 -13.804895,11.90177 -18.199091,17.31988 -20.790434,11.99663 -1.273249,-2.61557 1.017602,-5.97434 3.23361,-9.57032 4.367498,-7.21552 10.687821,-13.92473 8.632844,-16.40082 -2.050191,0.66573 -5.701417,3.94706 -7.917424,5.72051 -2.216008,1.77344 -5.216905,3.98662 -6.668674,4.91816 -1.451757,0.93154 -5.757863,3.9162 -9.569125,6.63254 -3.811251,2.71637 -10.546273,6.79489 -14.966706,9.06335 -9.584043,4.91833 -13.8359278,5.33836 -18.57838668,1.83533 z M 159.75643,187.9147 c -4.88506,-3.00364 -1.44968,-15.28517 5.948,-21.2642 3.32796,-2.68976 12.33843,-8.3073 13.32481,-8.3073 0.27463,0 -1.05354,2.61529 -2.9515,5.81174 -5.51025,9.28008 -4.30612,16.29397 2.79731,16.29397 5.95677,0 10.60291,-1.935 15.24759,-9.21089 3.95762,-6.19961 10.07679,-10.04817 15.75277,-13.07984 4.88528,-2.60934 15.49103,-5.23799 19.83723,-4.00272 6.01532,1.70966 5.07061,0.66399 -3.766,4.03459 -9.35359,3.5678 -12.15223,5.23437 -15.80579,9.41222 -4.62835,5.29254 -5.17979,8.5948 -1.91397,11.46168 2.05902,1.80749 3.56776,2.26807 7.41531,2.26374 2.65669,-0.003 5.81168,-1.7253 7.33518,-2.42296 1.52351,-0.69765 3.03519,0.21321 3.03519,0.61971 -5.88638,3.94569 -11.44839,6.45882 -14.00234,7.27145 -2.61375,0.96599 -7.35132,2.03318 -10.23523,1.93803 -5.03631,0.0339 -9.16147,-1.48631 -10.57379,-3.37846 -0.79608,-1.43217 -1.3268,-2.70381 -0.96262,-3.97903 1.0679,-3.73939 0.16517,-2.52343 -4.28527,0.23044 -13.102,8.10733 -21.40719,9.25285 -26.19688,6.30784 z m 75.29251,0.53861 c -1.38501,-0.41487 -3.99134,-0.79396 -5.79185,-0.84243 -5.99934,-0.16153 -3.6372,-2.26466 5.12716,-4.56493 2.24719,-0.58979 2.74693,-0.49039 2.32997,0.46346 -1.0714,2.45099 8.09297,3.14024 13.72804,1.0325 5.4798,-2.04969 7.70684,-5.31293 8.2153,-10.06119 0.16756,-8.34719 -12.6158,-6.31988 -18.32043,-6.36109 -12.98146,-0.0572 -14.34396,-1.01124 -7.14295,-5.00172 9.56822,-5.3023 20.88185,-11.1336 25.8426,-10.44585 5.86061,0.8125 5.42599,3.39743 -0.5575,3.43312 -3.92889,0.0234 -13.80136,5.14348 -14.97622,6.81223 -1.22979,1.74676 2.12319,2.47254 11.4854,2.48607 8.58743,0.0125 9.56792,0.19334 11.8355,2.18392 3.81332,3.3475 3.46341,8.67923 -0.80123,12.20836 -7.5132,6.21743 -19.30064,10.28748 -30.97375,8.65755 z" | 105 | id="g3171" |
| 118 | style="opacity:1;fill:#000000;display:inline" /> | 106 | transform="translate(-0.3199963,-16.05214)"> |
| 119 | <path | 107 | <path |
| 120 | id="bg-gnu" | 108 | inkscape:connector-curvature="0" |
| 121 | d="m 55.834396,197.41294 c 2.448659,-7.38073 7.446723,-16.72109 12.277833,-22.94475 5.710592,-7.35667 7.378339,-9.3856 28.689891,-34.90319 16.87202,-20.20188 19.22296,-23.17964 22.55476,-28.56842 1.5428,-2.49527 3.17766,-4.53686 3.63304,-4.53686 1.18186,0 1.10043,0.30992 -1.63307,6.21531 -1.35357,2.92423 -2.46105,5.64532 -2.46105,6.04685 0,0.40153 -2.97647,4.90375 -6.6144,10.00493 -8.98843,12.60381 -10.76025,14.97182 -13.0823,17.48445 -1.0981,1.18822 -3.8535,4.49366 -6.123108,7.34539 -2.269606,2.85173 -4.587188,5.62332 -5.150194,6.15909 -0.562997,0.53575 -2.795585,3.19769 -4.961309,5.91542 -6.691216,8.39667 -16.095209,19.83397 -17.431654,21.20066 -0.699773,0.71561 -3.044271,3.91702 -5.209995,7.11426 -4.16128,6.14322 -5.795033,7.40513 -4.488444,3.46686 z m 66.481544,-23.7645 c 0.22279,-0.5941 1.5292,-4.28446 2.90315,-8.20081 3.44555,-9.82127 13.66236,-27.15831 19.73886,-33.49506 l 2.48602,-2.59251 2.25191,2.37646 c 2.67739,2.82544 3.88298,2.92759 8.02572,0.68 3.08741,-1.67502 7.69643,-8.22076 20.10229,-28.54928 4.55053,-7.456586 5.01229,-7.939498 5.0346,-5.26516 0.0415,4.9808 -22.21528,41.2544 -29.34472,47.82522 -4.11732,3.7947 -6.18823,4.04757 -8.84718,1.0802 -1.06473,-1.18822 -2.3151,-2.15972 -2.77861,-2.15886 -1.62142,0.003 -12.08302,16.59943 -16.47702,26.13939 -0.82094,1.78235 -1.9443,3.24062 -2.49635,3.24062 -0.55207,0 -0.82147,-0.48609 -0.59867,-1.08021 z m 84.19319,-24.88787 c 0,-7.49007 7.66313,-38.06798 12.33356,-49.21415 3.04458,-7.266009 7.33463,-20.847085 8.32578,-26.356986 0.42748,-2.376449 1.49075,-7.626245 2.36285,-11.666209 0.87207,-4.039964 1.5862,-11.563 1.58694,-16.717855 0.002,-10.935036 -1.20271,-13.589976 -7.10476,-15.663026 -7.62736,-2.67905 -10.16765,-1.47291 -13.00198,6.173428 -1.74243,4.700723 -3.72352,6.856253 -5.44369,5.923006 -1.89626,-1.028794 -1.05403,-4.387566 2.90016,-11.565454 8.13973,-14.77576 14.55936,-18.45654 24.45815,-14.02345 5.65324,2.53175 9.02208,8.60392 9.02208,16.2618 0,9.333563 -7.01946,35.141105 -14.28285,52.511886 -4.47563,10.703728 -11.5668,35.30103 -14.85507,51.5282 -2.1002,10.36421 -3.15113,13.73222 -4.51891,14.48205 -1.5746,0.86323 -1.78226,0.66827 -1.78226,-1.67324 z M 110.03525,94.607887 c -7.1e-4,-8.464568 -0.25892,-9.796146 -2.81265,-14.505144 -2.66535,-4.914782 -7.28206,-9.937882 -9.13385,-9.937882 -0.4676,0 -0.85017,-0.490243 -0.85017,-1.08943 0,-1.557732 8.70129,-12.737188 9.91372,-12.737188 1.73907,0 7.4566,5.456815 9.50728,9.073719 2.60567,4.595744 3.35771,11.337596 2.2795,20.434785 -0.9601,8.100583 -4.13995,15.843563 -7.07234,17.221213 -1.73206,0.81373 -1.83075,0.3578 -1.83149,-8.460073 z m -69.268036,2.283327 c -3.977291,-2.746359 -3.44557,-6.261434 2.439644,-16.127646 4.970535,-8.33282 10.094017,-15.38029 21.43897,-29.489855 6.601357,-8.209992 8.637667,-10.20312 9.579511,-9.376336 0.799394,0.701746 -2.618999,5.390153 -11.474198,15.737111 -16.940162,19.79395 -18.734332,27.221155 -6.575701,27.221155 3.304542,0 6.058837,-0.617002 8.461092,-1.895408 6.360466,-3.38485 18.203678,-11.286415 23.507089,-15.683501 2.848527,-2.361722 5.456729,-4.05036 5.795999,-3.752528 1.04524,0.917548 -4.907057,10.147668 -7.816978,12.121655 -1.511589,1.025416 -5.874113,4.197632 -9.69449,7.049372 -3.820388,2.85174 -8.563965,6.157166 -10.541309,7.345392 -1.977334,1.188224 -4.400156,2.796969 -5.384044,3.574986 -2.248219,1.777799 -11.920783,5.066639 -14.901091,5.066639 -1.232383,0 -3.407898,-0.80597 -4.834494,-1.791036 z M 167.35901,63.639316 c -4.35468,-2.677534 -4.37646,-3.982873 -0.1931,-11.57676 l 3.90554,-7.089571 2.54785,2.658058 c 3.02363,3.154415 6.72598,3.451472 12.70923,1.019721 4.8079,-1.95406 8.30397,-5.194275 11.75211,-10.892036 l 2.61484,-4.320814 -0.49413,3.334678 c -0.73833,4.982504 -10.09007,19.207325 -14.90376,22.669936 -7.26038,5.222576 -13.78694,6.749482 -17.93858,4.196788 z m -32.7125,-5.536491 c -1.89501,-0.888629 -8.4802,-6.332726 -14.63377,-12.09799 -11.53272,-10.804983 -19.30559,-15.591501 -25.31921,-15.591501 -4.300218,0 -9.890682,3.33457 -11.790334,7.032628 -2.74495,5.343604 -3.950075,5.711001 -6.196765,1.88915 -3.156098,-5.368868 -12.746669,-12.378428 -16.936324,-12.378428 -0.628489,0 -6.188212,4.49121 -12.354949,9.980456 -11.483232,10.221671 -16.718945,13.296629 -22.701995,13.33298 -3.490867,0.0212 -7.744061,-2.699113 -10.336357,-6.611093 -1.586521,-2.394192 -1.546221,-2.69169 1.094758,-8.081731 1.508064,-3.077822 3.079193,-6.373792 3.491421,-7.324372 0.652211,-1.50398 0.990788,-1.25829 2.608443,1.8928 1.911186,3.72288 6.321032,7.180923 9.157411,7.180923 4.150835,0 11.504527,-4.724593 21.3988,-13.748293 9.555236,-8.71448 10.829873,-9.58412 14.047538,-9.58412 4.293595,0 9.556372,2.77633 14.656374,7.73182 2.069449,2.0108 3.86226,3.5242 3.984029,3.36311 0.12178,-0.16109 0.945137,-1.31084 1.829667,-2.55499 0.88453,-1.24416 3.685604,-3.3308 6.224606,-4.63699 3.686737,-1.89664 5.463317,-2.29109 8.822097,-1.95876 6.8491,0.67769 15.00978,5.73859 25.22338,15.64246 9.22954,8.949677 17.70147,14.387397 22.41549,14.387397 3.79377,0 9.50175,-3.242454 12.44138,-7.067419 2.42259,-3.152211 2.91825,-3.453173 3.17838,-1.929873 0.1695,0.992615 -1.28406,4.871896 -3.23015,8.620627 -3.35987,6.472087 -6.91202,10.130201 -12.7132,13.092455 -3.04983,1.557333 -10.43785,1.258306 -14.36072,-0.581246 z" | 109 | id="gnu-7-7-5" |
| 122 | style="opacity:1;fill:#000000;display:inline" /> | 110 | d="m 91.501627,223.13422 c 2.44866,-7.38073 7.44672,-16.72109 12.277833,-22.94475 5.71059,-7.35667 7.37834,-9.3856 28.68987,-34.90319 16.87203,-20.20187 19.22297,-23.17963 22.55477,-28.56842 1.5428,-2.49527 3.17766,-4.53686 3.63304,-4.53686 1.18186,0 1.10043,0.30992 -1.63307,6.21531 -1.35357,2.92424 -2.46105,5.64533 -2.46105,6.04686 0,0.40153 -2.97647,4.90375 -6.6144,10.00493 -8.98843,12.6038 -10.76026,14.97181 -13.08231,17.48444 -1.0981,1.18822 -3.8535,4.49366 -6.1231,7.34539 -2.2696,2.85173 -4.58719,5.62332 -5.15019,6.15909 -0.56299,0.53575 -2.79558,3.19769 -4.9613,5.91542 -6.69122,8.39667 -16.09521,19.83397 -17.43166,21.20066 -0.69977,0.71561 -3.044273,3.91702 -5.209993,7.11426 -4.16128,6.14322 -5.79503,7.40513 -4.48844,3.46686 z m 66.481533,-23.7645 c 0.22279,-0.5941 1.5292,-4.28446 2.90315,-8.20081 3.44555,-9.82127 13.66236,-27.15831 19.73886,-33.49505 l 2.48602,-2.59251 2.25191,2.37646 c 2.67739,2.82543 3.88298,2.92758 8.02572,0.68 3.08741,-1.67502 7.69643,-8.22076 20.10229,-28.54929 4.55053,-7.45659 5.01229,-7.9395 5.0346,-5.26516 0.0415,4.9808 -22.21528,41.2544 -29.34472,47.82522 -4.11732,3.7947 -6.18823,4.04757 -8.84718,1.0802 -1.06473,-1.18822 -2.3151,-2.15972 -2.77861,-2.15886 -1.62142,0.003 -12.08302,16.59943 -16.47702,26.13939 -0.82094,1.78235 -1.9443,3.24062 -2.49635,3.24062 -0.55207,0 -0.82147,-0.48609 -0.59867,-1.08021 z m 84.56819,-24.82537 c -2.06645,-0.8019 1.13497,-15.11544 9.38534,-45.76041 8.25036,-30.64496 13.71984,-51.383787 14.84879,-58.25729 1.12895,-6.873503 2.03487,-14.092092 -4.36472,-16.458525 -6.39958,-2.366433 -16.77636,10.967049 -21.18571,12.891935 -1.80822,-0.98102 -3.1468,-0.58863 2.90016,-11.56546 6.04696,-10.97683 17.96376,-16.533598 24.45815,-14.02345 6.49439,2.510148 9.06627,8.870934 9.02208,16.2618 -0.0442,7.390866 -1.34227,9.483254 -10.57054,34.657444 -9.22827,25.174186 -15.27911,53.155486 -18.56738,69.382646 -1.67576,8.37809 -3.60972,13.73571 -5.92617,12.87131 z m -96.84888,-54.21518 c 1.40606,-16.35743 -4.16257,-18.77418 -12.79668,-25.53246 0,-1.55773 8.7013,-12.73719 9.91373,-12.73719 1.73907,0 4.26796,0.851938 9.50728,9.07372 5.23932,8.221782 2.81919,33.478 -4.79284,37.656 -1.73206,0.81373 -1.83075,0.3578 -1.83149,-8.46007 z m -67.235101,2.4601 C 66.149626,114.64118 107.1616,65.642805 109.89257,67.61866 c 1.43393,1.147042 -25.884213,36.7541 -19.110563,41.27888 6.77365,4.52478 36.496453,-21.773029 38.824823,-19.65206 2.32837,2.120969 -42.806145,38.90369 -51.139461,33.54379 z M 203.02623,89.36059 c -4.35468,-2.67753 -4.37646,-3.98287 -0.1931,-11.57676 l 3.90554,-7.08957 2.54785,2.65806 c 3.02363,3.15442 6.72598,3.45147 12.70923,1.01972 4.8079,-1.95406 8.30397,-5.19427 11.75211,-10.89203 l 2.61484,-4.32082 -0.49413,3.33468 c -0.73833,4.9825 -10.09007,19.20733 -14.90376,22.66994 -7.26038,5.22257 -13.78694,6.74948 -17.93858,4.19678 z m -30.4,-8.22399 C 157.50408,77.285901 148.7977,56.570002 130.36074,56.13461 c -4.30021,0 -9.89066,3.33457 -11.79031,7.03263 -2.74495,5.3436 -3.95008,5.711 -6.19677,1.88915 -3.1561,-5.36887 -12.746673,-12.37843 -16.936323,-12.37843 -0.62849,0 -6.18822,4.49121 -12.35495,9.98046 -11.48323,10.22167 -16.71895,13.29663 -22.702,13.33298 -3.49086,0.0212 -7.74406,-2.69911 -10.336349,-6.61109 -1.58653,-2.3942 -1.54623,-2.69169 1.09475,-8.08174 1.508069,-3.07782 3.079199,-6.37379 3.491429,-7.32437 0.65221,-1.50398 0.99078,-1.25829 2.60844,1.8928 1.91118,3.72288 6.32103,7.18093 9.15741,7.18093 4.15083,0 11.50453,-4.7246 21.3988,-13.7483 9.55523,-8.71448 10.82987,-9.58412 14.047543,-9.58412 4.29359,0 9.55637,2.77633 14.65637,7.73182 2.06945,2.0108 3.86226,3.5242 3.98403,3.36311 3.62266,-5.566805 10.90469,-9.699668 16.87635,-9.15074 16.82938,1.857986 31.50411,28.885923 47.63888,30.02986 6.12183,0.0506 13.64798,-10.853925 15.61976,-8.99729 0.1695,0.99261 -1.28406,4.87189 -3.23015,8.62062 -5.69216,10.252657 -13.63209,13.763692 -24.76142,9.82371 z" |
| 123 | </g> | 111 | style="fill:#c64e3b;fill-opacity:1;stroke:#c64e3b;stroke-width:0.9769991;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" |
| 124 | <g | 112 | sodipodi:nodetypes="sssssssssscssssssscssscssssssczzzczzzzccccszcccczzcsscssscsssccssssssssssssscccccc" /> |
| 125 | transform="translate(5.34375,-11.4375)" | 113 | <path |
| 126 | id="layer3" | 114 | sodipodi:nodetypes="cscszzczcsczzzssccssssssssssscssccsssssssssssccssccssssssssccssccccssscssssccsssscsscc" |
| 127 | style="display:inline"> | 115 | inkscape:connector-curvature="0" |
| 128 | <path | 116 | id="emacs-9-4-3" |
| 129 | id="gnu" | 117 | d="m 33.019748,221.94909 c -6.110408,-9.38954 3.380608,-25.48422 15.35655,-34.75342 6.516165,-5.04342 14.224569,-9.82272 13.070959,-9.82483 -0.99658,-0.002 -3.28511,-0.79177 -5.08562,-1.75545 -6.217869,-3.328 -13.320748,-11.33731 7.05534,-28.37574 20.376088,-17.03843 58.074533,-25.26395 64.900723,-20.35237 6.82619,4.91158 -21.13643,22.39146 -22.51985,21.00884 -0.54574,-1.30268 16.61528,-10.7144 12.28657,-13.45436 -4.32871,-2.73996 -49.428283,10.06303 -49.047283,27.89807 0.71955,5.15612 9.09591,7.16542 19.10752,2.72826 7.00502,-3.10464 12.660323,-6.60408 12.285323,-4.56715 -13.758486,12.27671 -39.124345,23.59007 -45.869963,29.39978 -6.745618,5.80971 -7.543869,11.67601 -6.794789,14.18989 0.74908,2.51388 2.060512,5.22647 6.829019,5.51844 4.768507,0.29197 8.89581,0.12074 32.27058,-16.5637 5.16228,-3.68473 10.22809,-7.76323 13.653653,-9.77045 4.32602,-2.53484 10.05688,-4.56948 8.97699,-1.65526 -3.77936,7.61077 -5.74585,10.67934 -9.16756,16.15546 8.11118,-6.33235 15.74717,-14.15513 24.3066,-15.7298 2.0811,-0.38286 6.77241,-1.55766 8.63617,0.99596 0.76447,1.04743 -0.45512,5.1162 -2.21368,8.92266 -0.53908,1.16685 1.05142,0.38368 4.67533,-2.30213 7.44131,-5.51505 14.07912,-8.75072 17.95158,-8.75072 4.57712,0 4.83279,1.74832 1.24097,8.48622 -3.75741,7.04855 -6.75962,17.21422 -4.65148,19.88378 1.46622,1.85669 7.96734,-2.91147 10.3276,-4.31865 2.42293,-1.44454 6.05649,-3.67201 7.44149,-4.72955 10.37298,-7.92039 39.1617,-23.15505 40.99851,-21.53603 0.82449,0.72672 -1.6928,2.43145 -10.4509,7.07749 -14.25554,7.56231 -22.59862,14.9854 -22.60932,20.11619 -0.006,2.71011 4.1743,2.15203 7.26381,1.4275 4.40695,-1.03349 12.41622,-3.9676 -0.1736,3.14023 -13.16001,7.42974 -22.48474,6.17813 -16.63437,-3.95665 l 3.73574,-6.16441 -9.13253,6.55379 c -13.1916,9.46671 -19.35595,10.10807 -22.76505,7.11544 -2.61211,-2.29301 -1.99117,-8.56165 1.43897,-14.5266 2.74703,-4.77707 3.88176,-8.84229 2.46817,-8.84229 -2.38604,0 -7.35932,4.53611 -13.26994,10.69747 -9.97489,10.39803 -8.541,15.10079 -10.5912,15.36938 -1.2597,0.16503 -6.97748,-1.59412 -4.55589,-8.64068 1.80805,-5.26122 4.69288,-8.68747 6.82226,-11.55279 3.86672,-5.2031 1.48047,-5.97342 -3.79027,-3.77097 -3.05613,1.27704 -5.35016,4.83814 -17.152833,15.01371 -13.80489,11.90178 -18.19909,17.31989 -20.79043,11.99664 -1.27325,-2.61557 1.0176,-5.97434 3.23361,-9.57032 4.3675,-7.21553 10.68782,-13.92474 8.63284,-16.40083 -2.05019,0.66573 -5.70142,3.94706 -7.91742,5.72051 -2.21601,1.77344 -5.21691,3.98662 -6.66868,4.91816 -1.45175,0.93154 -5.75786,3.9162 -9.56912,6.63255 -12.148528,7.72218 -28.712254,17.824 -33.545099,10.89873 z m 160.303772,-8.81383 c -4.88506,-3.00364 -1.44968,-15.28518 5.948,-21.26421 3.32796,-2.68976 12.33843,-8.3073 13.32481,-8.3073 0.27463,0 -1.05354,2.61529 -2.9515,5.81174 -5.51025,9.28008 -4.30612,16.29397 2.79731,16.29397 5.95677,0 10.60291,-1.935 15.24759,-9.21089 3.95762,-6.19961 10.07679,-10.04817 15.75277,-13.07984 4.88528,-2.60934 16.10975,-4.00015 19.83723,-4.00272 5.28129,-0.004 5.07061,0.66399 -3.766,4.03459 -5.96006,1.81342 -23.41185,8.68768 -18.33848,20.56454 1.0883,2.49035 5.34941,2.76493 8.03403,2.5731 2.64994,-0.18935 5.81168,-1.7253 7.33518,-2.42296 1.52351,-0.69765 3.03519,0.21321 3.03519,0.61971 -5.88638,3.94569 -11.44839,6.45882 -14.00234,7.27145 -2.61375,0.96599 -7.35132,2.03318 -10.23523,1.93803 -5.03631,0.0339 -9.16147,-1.48631 -10.57379,-3.37846 -0.79608,-1.43217 -1.06163,-2.48284 -0.96262,-3.97903 0.2568,-3.8804 0.16517,-2.52343 -4.28527,0.23044 -13.102,8.10733 -21.40719,9.25285 -26.19688,6.30784 z m 75.29251,0.5386 c -1.38501,-0.41486 -3.99134,-0.79396 -5.79185,-0.84243 -5.99934,-0.16153 -3.6372,-2.26466 5.12716,-4.56493 2.24719,-0.58979 2.74693,-0.49039 2.32997,0.46346 -1.0714,2.45099 8.09297,3.14025 13.72804,1.0325 5.4798,-2.04969 7.70684,-5.31293 8.2153,-10.06119 0.16756,-8.34719 -12.6158,-6.31988 -18.32043,-6.36109 -12.98146,-0.0572 -14.34396,-1.01124 -7.14295,-5.00172 9.56822,-5.3023 20.88185,-11.1336 25.8426,-10.44585 5.86061,0.8125 5.42599,3.39743 -0.5575,3.43312 -3.92889,0.0234 -13.80136,5.14348 -14.97622,6.81223 -1.22979,1.74676 2.12319,2.47254 11.4854,2.48607 8.58743,0.0125 10.7826,1.48644 11.8355,2.18392 2.50203,1.65742 3.46341,8.67923 -0.80123,12.20836 -7.5132,6.21744 -19.30064,10.28748 -30.97375,8.65755 z" |
| 130 | d="m 57.534816,196.31319 c 2.448659,-7.38073 7.446723,-16.72109 12.277833,-22.94475 5.710592,-7.35667 7.378339,-9.3856 28.689891,-34.90319 16.87202,-20.20188 19.22296,-23.17964 22.55476,-28.56842 1.5428,-2.49527 3.17766,-4.53686 3.63304,-4.53686 1.18186,0 1.10043,0.30992 -1.63307,6.21531 -1.35357,2.92423 -2.46105,5.64532 -2.46105,6.04685 0,0.40153 -2.97647,4.90375 -6.6144,10.00493 -8.98843,12.60381 -10.76025,14.97182 -13.0823,17.48445 -1.0981,1.18822 -3.8535,4.49366 -6.123108,7.34539 -2.269606,2.85173 -4.587188,5.62332 -5.150194,6.15909 -0.562997,0.53575 -2.795585,3.19769 -4.961309,5.91542 -6.691216,8.39667 -16.095209,19.83397 -17.431654,21.20066 -0.699773,0.71561 -3.044271,3.91702 -5.209995,7.11426 -4.16128,6.14322 -5.795033,7.40513 -4.488444,3.46686 z m 66.481544,-23.7645 c 0.22279,-0.5941 1.5292,-4.28446 2.90315,-8.20081 3.44555,-9.82127 13.66236,-27.15831 19.73886,-33.49506 l 2.48602,-2.59251 2.25191,2.37646 c 2.67739,2.82544 3.88298,2.92759 8.02572,0.68 3.08741,-1.67502 7.69643,-8.22076 20.10229,-28.54928 4.55053,-7.45659 5.01229,-7.939502 5.0346,-5.26516 0.0415,4.9808 -22.21528,41.2544 -29.34472,47.82522 -4.11732,3.7947 -6.18823,4.04757 -8.84718,1.0802 -1.06473,-1.18822 -2.3151,-2.15972 -2.77861,-2.15886 -1.62142,0.003 -12.08302,16.59943 -16.47702,26.13939 -0.82094,1.78235 -1.9443,3.24062 -2.49635,3.24062 -0.55207,0 -0.82147,-0.48609 -0.59867,-1.08021 z m 84.19319,-24.88787 c 0,-7.49007 7.66313,-38.06798 12.33356,-49.21415 3.04458,-7.266013 7.33463,-20.847089 8.32578,-26.35699 0.42748,-2.376449 1.49075,-7.626245 2.36285,-11.666209 0.87207,-4.039964 1.5862,-11.563 1.58694,-16.717855 0.002,-10.935036 -1.20271,-13.589976 -7.10476,-15.663026 -7.62736,-2.67905 -10.16765,-1.47291 -13.00198,6.173428 -1.74243,4.700723 -3.72352,6.856253 -5.44369,5.923006 -1.89626,-1.028794 -1.05403,-4.387566 2.90016,-11.565454 8.13973,-14.77576 14.55936,-18.45654 24.45815,-14.02345 5.65324,2.53175 9.02208,8.60392 9.02208,16.2618 0,9.333563 -7.01946,35.141105 -14.28285,52.511886 -4.47563,10.703728 -11.5668,35.301034 -14.85507,51.528204 -2.1002,10.36421 -3.15113,13.73222 -4.51891,14.48205 -1.5746,0.86323 -1.78226,0.66827 -1.78226,-1.67324 z M 111.73567,93.508133 c -7.1e-4,-8.464568 -0.25892,-9.796146 -2.81265,-14.505144 -2.66535,-4.914782 -7.28206,-9.937882 -9.13385,-9.937882 -0.4676,0 -0.85017,-0.490243 -0.85017,-1.08943 0,-1.557732 8.70129,-12.737188 9.91372,-12.737188 1.73907,0 7.4566,5.456815 9.50728,9.073719 2.60567,4.595744 3.35771,11.337596 2.2795,20.434785 -0.9601,8.100583 -4.13995,15.843567 -7.07234,17.221217 -1.73206,0.81373 -1.83075,0.3578 -1.83149,-8.460077 z M 42.467634,95.79146 c -3.977291,-2.746359 -3.44557,-6.261434 2.439644,-16.127646 4.970535,-8.33282 10.094017,-15.38029 21.43897,-29.489855 6.601357,-8.209992 8.637667,-10.20312 9.579511,-9.376336 0.799394,0.701746 -2.618999,5.390153 -11.474198,15.737111 -16.940162,19.79395 -18.734332,27.221155 -6.575701,27.221155 3.304542,0 6.058837,-0.617002 8.461092,-1.895408 6.360466,-3.38485 18.203678,-11.286415 23.507089,-15.683501 2.848527,-2.361722 5.456729,-4.05036 5.795999,-3.752528 1.04524,0.917548 -4.907057,10.147668 -7.816978,12.121655 -1.511589,1.025416 -5.874113,4.197632 -9.69449,7.049372 -3.820388,2.85174 -8.563965,6.157166 -10.541309,7.345392 -1.977334,1.188224 -4.400156,2.796969 -5.384044,3.574986 C 59.955,94.293656 50.282436,97.5825 47.302128,97.5825 c -1.232383,0 -3.407898,-0.80597 -4.834494,-1.79104 z M 169.05943,62.539562 c -4.35468,-2.677534 -4.37646,-3.982873 -0.1931,-11.57676 l 3.90554,-7.089571 2.54785,2.658058 c 3.02363,3.154415 6.72598,3.451472 12.70923,1.019721 4.8079,-1.95406 8.30397,-5.194275 11.75211,-10.892036 l 2.61484,-4.320814 -0.49413,3.334678 c -0.73833,4.982504 -10.09007,19.207325 -14.90376,22.669936 -7.26038,5.222576 -13.78694,6.749482 -17.93858,4.196788 z m -32.7125,-5.536491 c -1.89501,-0.888629 -8.4802,-6.332726 -14.63377,-12.09799 C 110.18044,34.100098 102.40757,29.31358 96.39395,29.31358 c -4.300218,0 -9.890682,3.33457 -11.790334,7.032628 -2.74495,5.343604 -3.950075,5.711001 -6.196765,1.88915 C 75.250753,32.86649 65.660182,25.85693 61.470527,25.85693 c -0.628489,0 -6.188212,4.49121 -12.354949,9.980456 -11.483232,10.221671 -16.718945,13.296629 -22.701995,13.33298 -3.490867,0.0212 -7.744061,-2.699113 -10.336357,-6.611093 -1.586521,-2.394192 -1.546221,-2.69169 1.094758,-8.081731 1.508064,-3.077822 3.079193,-6.373792 3.491421,-7.324372 0.652211,-1.50398 0.990788,-1.25829 2.608443,1.8928 1.911186,3.72288 6.321032,7.180923 9.157411,7.180923 4.150835,0 11.504527,-4.724593 21.3988,-13.748293 9.555236,-8.71448 10.829873,-9.58412 14.047538,-9.58412 4.293595,0 9.556372,2.77633 14.656374,7.73182 2.069449,2.0108 3.86226,3.5242 3.984029,3.36311 0.12178,-0.16109 0.945137,-1.31084 1.829667,-2.55499 0.88453,-1.24416 3.685604,-3.3308 6.224606,-4.63699 3.686737,-1.89664 5.463317,-2.29109 8.822097,-1.95876 6.8491,0.67769 15.00978,5.73859 25.22338,15.64246 9.22954,8.949677 17.70147,14.387397 22.41549,14.387397 3.79377,0 9.50175,-3.242454 12.44138,-7.067419 2.42259,-3.152211 2.91825,-3.453173 3.17838,-1.929873 0.1695,0.992615 -1.28406,4.871896 -3.23015,8.620627 -3.35987,6.472087 -6.91202,10.130201 -12.7132,13.092455 -3.04983,1.557333 -10.43785,1.258306 -14.36072,-0.581246 z" | 118 | style="fill:#3c74bd;fill-opacity:1;stroke:#3c74bd;stroke-width:0.99999905;stroke-opacity:1;display:inline" /> |
| 131 | style="fill:url(#linearGradient2425);fill-opacity:1;stroke:#000000;stroke-width:0.97730815" /> | 119 | </g> |
| 132 | <path | ||
| 133 | id="emacs" | ||
| 134 | d="M -0.94705426,195.12806 C -10.63777,180.18357 4.9968228,166.32928 14.409493,160.37464 c 6.963497,-4.40524 14.224571,-9.82272 13.070957,-9.82483 -0.996579,-0.002 -3.28511,-0.79177 -5.085617,-1.75545 -6.217876,-3.328 -7.955628,-16.0503 7.055337,-28.37575 16.709358,-12.01621 42.570706,-26.817291 64.900729,-20.35236 3.972325,1.58882 2.904485,4.42259 -3.766368,9.99492 -5.675178,4.74062 -17.792772,11.85728 -18.753492,11.01391 -0.233326,-0.20481 2.490068,-2.19795 6.051979,-4.42919 3.551812,-2.45188 6.827,-5.57228 6.234589,-9.02516 -1.977492,-3.21848 -14.566202,0.87623 -19.657994,3.11811 -8.980399,3.95401 -30.419617,17.3969 -29.389287,24.77996 0.719552,5.15612 9.095912,7.16542 19.107524,2.72826 7.005023,-3.10464 12.660323,-6.60409 12.285323,-4.56715 -0.365454,1.98509 -12.574667,10.22701 -19.359801,12.99119 -10.773868,4.38916 -18.049435,9.35351 -26.510163,16.40859 -7.801376,6.50528 -6.794788,9.58593 -6.794788,14.18989 0,3.11466 2.974668,5.51844 6.829021,5.51844 7.964514,0 8.895804,0.12074 32.270578,-16.5637 5.162282,-3.68473 10.228089,-7.76323 13.653652,-9.77045 4.326017,-2.53484 9.463124,-4.13198 8.976988,-1.65526 -3.779364,7.61077 -5.74585,10.67934 -9.167556,16.15546 8.11118,-6.33235 15.840916,-14.71763 24.306604,-15.7298 2.101063,-0.25121 7.741176,-0.49516 8.636186,0.99596 0.66736,1.11183 -0.45512,5.1162 -2.21368,8.92266 -0.53908,1.16685 1.05142,0.38368 4.675326,-2.30213 7.4413,-5.51505 14.07911,-8.75072 17.95157,-8.75072 4.57712,0 4.83279,1.74832 1.24097,8.48622 -3.75741,7.04855 -6.75962,17.21422 -4.65148,19.88378 1.46622,1.85669 7.96734,-2.91147 10.3276,-4.31865 2.42293,-1.44454 6.05649,-3.67201 7.44149,-4.72955 10.37298,-7.92039 39.1617,-23.15505 40.99851,-21.53603 0.82449,0.72672 -1.6928,2.43145 -10.4509,7.07749 -14.25554,7.56231 -22.59862,14.9854 -22.60932,20.11619 -0.006,2.71011 4.1743,2.15203 7.26381,1.4275 4.40695,-1.03349 12.41622,-3.9676 -0.1736,3.14023 -13.16001,7.42974 -22.48474,6.17813 -16.63437,-3.95665 l 3.73574,-6.16441 -9.13253,6.55379 c -13.1916,9.46671 -19.35595,10.10807 -22.76505,7.11544 -2.6121,-2.29301 -1.99116,-8.56165 1.43897,-14.5266 2.74703,-4.77707 3.88176,-8.84229 2.46817,-8.84229 -2.38604,0 -7.35931,4.53611 -13.269936,10.69747 -9.974903,10.39803 -8.541011,15.10079 -10.591215,15.36938 -1.2597,0.16503 -6.977484,-1.59412 -4.555892,-8.64068 1.80805,-5.26122 4.692881,-8.68747 6.822262,-11.55279 3.866732,-5.2031 1.480467,-5.97342 -3.790272,-3.77097 -3.05613,1.27704 -5.350157,4.83814 -17.152826,15.01371 -13.804895,11.90178 -18.199091,17.31989 -20.790434,11.99664 -1.273249,-2.61557 1.017602,-5.97434 3.23361,-9.57032 4.367498,-7.21553 10.687821,-13.92474 8.632844,-16.40083 -2.050191,0.66573 -5.701417,3.94706 -7.917424,5.72051 -2.216008,1.77344 -5.216905,3.98662 -6.668674,4.91816 -1.451757,0.93154 -5.757863,3.9162 -9.569125,6.63255 -3.811251,2.71637 -10.546273,6.79488 -14.966706,9.06335 -9.5840432,4.91833 -13.8359275,5.33836 -18.57838626,1.83533 z M 159.35672,186.31423 c -4.88506,-3.00364 -1.44968,-15.28518 5.948,-21.26421 3.32796,-2.68976 12.33843,-8.3073 13.32481,-8.3073 0.27463,0 -1.05354,2.61529 -2.9515,5.81174 -5.51025,9.28008 -4.30612,16.29397 2.79731,16.29397 5.95677,0 10.60291,-1.935 15.24759,-9.21089 3.95762,-6.19961 10.07679,-10.04817 15.75277,-13.07984 4.88528,-2.60934 15.49103,-5.23799 19.83723,-4.00272 6.01532,1.70966 5.07061,0.66399 -3.766,4.03459 -9.35359,3.5678 -12.15223,5.23437 -15.80579,9.41222 -4.62835,5.29254 -5.17979,8.5948 -1.91397,11.46168 2.05902,1.80749 3.56776,2.26807 7.41531,2.26374 2.65669,-0.003 5.81168,-1.7253 7.33518,-2.42296 1.52351,-0.69765 3.03519,0.21321 3.03519,0.61971 -5.88638,3.94569 -11.44839,6.45882 -14.00234,7.27145 -2.61375,0.96599 -7.35132,2.03318 -10.23523,1.93803 -5.03631,0.0339 -9.16147,-1.48631 -10.57379,-3.37846 -0.79608,-1.43217 -1.3268,-2.70381 -0.96262,-3.97903 1.0679,-3.73939 0.16517,-2.52343 -4.28527,0.23044 -13.102,8.10733 -21.40719,9.25285 -26.19688,6.30784 z m 75.29251,0.5386 c -1.38501,-0.41486 -3.99134,-0.79396 -5.79185,-0.84243 -5.99934,-0.16153 -3.6372,-2.26466 5.12716,-4.56493 2.24719,-0.58979 2.74693,-0.49039 2.32997,0.46346 -1.0714,2.45099 8.09297,3.14025 13.72804,1.0325 5.4798,-2.04969 7.70684,-5.31293 8.2153,-10.06119 0.16756,-8.34719 -12.6158,-6.31988 -18.32043,-6.36109 -12.98146,-0.0572 -14.34396,-1.01124 -7.14295,-5.00172 9.56822,-5.3023 20.88185,-11.1336 25.8426,-10.44585 5.86061,0.8125 5.42599,3.39743 -0.5575,3.43312 -3.92889,0.0234 -13.80136,5.14348 -14.97622,6.81223 -1.22979,1.74676 2.12319,2.47254 11.4854,2.48607 8.58743,0.0125 9.56792,0.19334 11.8355,2.18392 3.81332,3.3475 3.46341,8.67923 -0.80123,12.20836 -7.5132,6.21744 -19.30064,10.28748 -30.97375,8.65755 z" | ||
| 135 | style="opacity:1;fill:url(#linearGradient2556);fill-opacity:1;stroke:#000000;display:inline" /> | ||
| 136 | </g> | 120 | </g> |
| 137 | </svg> | 121 | </svg> |
diff --git a/etc/images/splash.xpm b/etc/images/splash.xpm index e53cd68f8af..2756bcd76bb 100644 --- a/etc/images/splash.xpm +++ b/etc/images/splash.xpm | |||
| @@ -1,249 +1,370 @@ | |||
| 1 | /* XPM */ | 1 | /* XPM */ |
| 2 | /* Gnu Emacs Logo | ||
| 3 | * | ||
| 4 | * Copyright (C) 2001-2015 Free Software Foundation, Inc. | ||
| 5 | * | ||
| 6 | * Author: Luis Fernandes <elf@ee.ryerson.ca> | ||
| 7 | * | ||
| 8 | * This file is part of GNU Emacs. | ||
| 9 | * | ||
| 10 | * GNU Emacs is free software: you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License as published by | ||
| 12 | * the Free Software Foundation, either version 3 of the License, or | ||
| 13 | * (at your option) any later version. | ||
| 14 | * | ||
| 15 | * GNU Emacs is distributed in the hope that it will be useful, | ||
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | * GNU General Public License for more details. | ||
| 19 | * | ||
| 20 | * You should have received a copy of the GNU General Public License | ||
| 21 | * along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | ||
| 22 | */ | ||
| 23 | static char *splash[] = { | 2 | static char *splash[] = { |
| 24 | /* width height num_colors chars_per_pixel */ | 3 | /* columns rows colors chars-per-pixel */ |
| 25 | " 270 217 4 1", | 4 | "333 233 131 2 ", |
| 26 | /* colors */ | 5 | " c #C64E3B", |
| 27 | ". c None", | 6 | ". c #C7513E", |
| 28 | "# c #c64e3b", | 7 | "X c #BD5144", |
| 29 | "a c #000000", | 8 | "o c #B3534D", |
| 30 | "c c #2076c1", | 9 | "O c #A95656", |
| 10 | "+ c #A65759", | ||
| 11 | "@ c #A1585E", | ||
| 12 | "# c #8F5D6F", | ||
| 13 | "$ c #9C5A63", | ||
| 14 | "% c #935C6B", | ||
| 15 | "& c #8A5F73", | ||
| 16 | "* c #A15F67", | ||
| 17 | "= c #83607A", | ||
| 18 | "- c #926172", | ||
| 19 | "; c #C14F40", | ||
| 20 | ": c #C75340", | ||
| 21 | "> c #C85643", | ||
| 22 | ", c #C95846", | ||
| 23 | "< c #C3594B", | ||
| 24 | "1 c #CB5C4B", | ||
| 25 | "2 c #CC604F", | ||
| 26 | "3 c #CD6453", | ||
| 27 | "4 c #CE6857", | ||
| 28 | "5 c #CF6959", | ||
| 29 | "6 c #D06E5E", | ||
| 30 | "7 c #D16F60", | ||
| 31 | "8 c #CF7062", | ||
| 32 | "9 c #D27364", | ||
| 33 | "0 c #D37768", | ||
| 34 | "q c #D47A6C", | ||
| 35 | "w c #D67E71", | ||
| 36 | "e c #D78275", | ||
| 37 | "r c #D88477", | ||
| 38 | "t c #D88679", | ||
| 39 | "y c #D98A7D", | ||
| 40 | "u c #3C74BD", | ||
| 41 | "i c #5F6A9C", | ||
| 42 | "p c #766486", | ||
| 43 | "a c #7B6382", | ||
| 44 | "s c #6A6792", | ||
| 45 | "d c #626999", | ||
| 46 | "f c #4E6FAC", | ||
| 47 | "g c #566DA5", | ||
| 48 | "h c #5A6EA3", | ||
| 49 | "j c #5574AE", | ||
| 50 | "k c #4372B6", | ||
| 51 | "l c #4971B1", | ||
| 52 | "z c #4077BE", | ||
| 53 | "x c #4279BF", | ||
| 54 | "c c #457AC0", | ||
| 55 | "v c #497DC1", | ||
| 56 | "b c #4E81C3", | ||
| 57 | "n c #5384C5", | ||
| 58 | "m c #5A89C7", | ||
| 59 | "M c #5D8CC8", | ||
| 60 | "N c #6B8CC1", | ||
| 61 | "B c #618EC9", | ||
| 62 | "V c #6592CB", | ||
| 63 | "C c #6B95CD", | ||
| 64 | "Z c #6F98CE", | ||
| 65 | "A c #719ACF", | ||
| 66 | "S c #759DD0", | ||
| 67 | "D c #789FD1", | ||
| 68 | "F c #7CA2D3", | ||
| 69 | "G c #DB8E82", | ||
| 70 | "H c #DC9185", | ||
| 71 | "J c #DD958A", | ||
| 72 | "K c #DE998E", | ||
| 73 | "L c #DF9C92", | ||
| 74 | "P c #E09F94", | ||
| 75 | "I c #E0A096", | ||
| 76 | "U c #E2A59B", | ||
| 77 | "Y c #E3A99F", | ||
| 78 | "T c #E4ACA4", | ||
| 79 | "R c #E6B0A7", | ||
| 80 | "E c #E7B3AB", | ||
| 81 | "W c #E8B7AE", | ||
| 82 | "Q c #E8B7B0", | ||
| 83 | "! c #E9BBB4", | ||
| 84 | "~ c #EBBFB8", | ||
| 85 | "^ c #ECC3BC", | ||
| 86 | "/ c #81A5D5", | ||
| 87 | "( c #89A6D1", | ||
| 88 | ") c #86A9D6", | ||
| 89 | "_ c #89ABD7", | ||
| 90 | "` c #8DAED8", | ||
| 91 | "' c #90AFD9", | ||
| 92 | "] c #8FB0D9", | ||
| 93 | "[ c #9DB4D7", | ||
| 94 | "{ c #93B2DB", | ||
| 95 | "} c #99B6DC", | ||
| 96 | "| c #9DB9DE", | ||
| 97 | " . c #A1BCDF", | ||
| 98 | ".. c #A4BEE0", | ||
| 99 | "X. c #A6C0E1", | ||
| 100 | "o. c #ABC3E3", | ||
| 101 | "O. c #B0C7E4", | ||
| 102 | "+. c #B5CAE6", | ||
| 103 | "@. c #B9CDE7", | ||
| 104 | "#. c #BBCEE8", | ||
| 105 | "$. c #BED0E9", | ||
| 106 | "%. c #DBD0D8", | ||
| 107 | "&. c #EDC7C1", | ||
| 108 | "*. c #EECAC4", | ||
| 109 | "=. c #EFCEC8", | ||
| 110 | "-. c #F0CFCA", | ||
| 111 | ";. c #F0D2CD", | ||
| 112 | ":. c #F2D6D1", | ||
| 113 | ">. c #F3DAD5", | ||
| 114 | ",. c #F4DEDA", | ||
| 115 | "<. c #F6E2DE", | ||
| 116 | "1. c #C4D5EB", | ||
| 117 | "2. c #CCDAEE", | ||
| 118 | "3. c #D0DEEF", | ||
| 119 | "4. c #D3DFF0", | ||
| 120 | "5. c #D5E1F1", | ||
| 121 | "6. c #DBE5F3", | ||
| 122 | "7. c #DFE8F4", | ||
| 123 | "8. c #EDE5E8", | ||
| 124 | "9. c #F7E5E2", | ||
| 125 | "0. c #F8E9E6", | ||
| 126 | "q. c #F9EDEB", | ||
| 127 | "w. c #FAF0EE", | ||
| 128 | "e. c #E4ECF6", | ||
| 129 | "r. c #E9EFF7", | ||
| 130 | "t. c #ECF2F9", | ||
| 131 | "y. c #FCF4F3", | ||
| 132 | "u. c #FDF8F7", | ||
| 133 | "i. c #F2F6FB", | ||
| 134 | "p. c #F6F9FC", | ||
| 135 | "a. c #FFFFFF", | ||
| 31 | /* pixels */ | 136 | /* pixels */ |
| 32 | "..............................................................................................................................................................................................................................................................................", | 137 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 33 | "..................................................................########..........................................................................................................................................................########..................................", | 138 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 34 | ".................................................................##########.......................................................................................................................................................############................................", | 139 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 35 | "................................................................#############.......................########....................................................................................................................################..............................", | 140 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 36 | "..............................................................#################...................#############................................................................................................................###################............................", | 141 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 37 | ".............................................................###################.................################.............................................................................................................#####################...........................", | 142 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 38 | "............................................................#####################..............###################...........................................................................................................######################...........................", | 143 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 39 | "...........................................................#######################...........#######################.........................................................................................................#######################..........................", | 144 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 40 | "..........................................................#########################.........##########################......................................................................................................#########################.........................", | 145 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 41 | ".........................................................###########################.......############################....................................................................................................##########################.........................", | 146 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 42 | ".........................................................############################.....###############################.................................................................................................############################........................", | 147 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 43 | "........................................................##############################...a################################................................................................................................############################........................", | 148 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 44 | ".......................................................################################.a##################################..............................................................................................##############################.......................", | 149 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 45 | "......................................................#################################aa###################################.............................................................................................##############################.......................", | 150 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 46 | ".....................................................########################################################################...........................................................................................################################......................", | 151 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 47 | "....................................................##########################################################################.........................................................................................a################################......................", | 152 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 48 | "......................#............................###########aaa##############################################################.......................................................................................a#################################......................", | 153 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 49 | ".....................##...........................###########aaaaaa#############################################################......................................................................................a######aaaaaa#####################......................", | 154 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 50 | ".....................###.........................##########aaaaaaaaaa############################################################....................................................................................a######aaaaaaaaaa##################......................", | 155 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 51 | ".....................###........................##########...aaaaaaaaaa###########################################################...................................................................................a#####aaaaaaaaaaaaa################......................", | 156 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 52 | ".................a..#####......................##########......aaaaaaaaa#######################aaaaaaa############################..................................................................................a#####aaaaaaaaaaaaaaaa##############......................", | 157 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 53 | ".................aa.#####.....................##########........aaaaaaaaa####################aaaaaaaaaaa###########################.................................................................................a#####aaaaaaaaaaaaaaaa##############......................", | 158 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 54 | "................aaa.#####....................##########..........aaaaaaaaa#################aaaaaaaaaaaaaaa##########################...............................................................................a######aaaaaaaaaaaaaaaaa#############......................", | 159 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 55 | "................aaa#######..................##########............aaaaaaaaa###############aaaaaaaaaaaaaaaaaa#########################..............................................................................a#####.........aaaaaaaaaa############......................", | 160 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.H 9 4 w P ! 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 56 | "................aaa########...............###########...............aaaaaaaa############aa........aaaaaaaaaaaa########################.......................................................................#....a######............aaaaaaa############......................", | 161 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.w : . , > q *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.^ J r q 9 K ^ q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 57 | "...............aaa##########............############.................aaaaaaaa###########.............aaaaaaaaaaa#######################......................................................................#....a######.............aaaaaaa###########......................", | 162 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> , 2 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.T J e 6 3 4 G E 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.R 4 : , , : U u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 58 | "...............aaa############........#############...................aaaaaaaa#########................aaaaaaaaaa#######################.................................#..................................##...aa#####...............aaaaaa###########......................", | 163 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ 8 , . > : 5 W y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.K , : > 2 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 59 | "...............aa##############.....##############.....................aaaaaaaa########..................aaaaaaaaa#######################...............................##..................................##...a######...............aaaaaa###########......................", | 164 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : . , ~ a.a.a.a.a.a.a.a.a.a.a.a.a.u.I , > : , T u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : > y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 60 | "..............aaa#################################......................aaaaaaa#######....................aaaaaaaaa#######################.............................###...............................a.###..aa######................aaaaa###########......................", | 165 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.w > : K a.a.a.a.a.a.a.a.a.a.a.<.4 : , 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 61 | "..............aa#################################........................aaaaaaa######.....................aaaaaaaaa#######################..........................a.###..............................aa.##...aa#####..................aaaa###########......................", | 166 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.5 : > e u.a.a.a.a.a.a.a.a.E > > q 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : . . : -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 62 | ".............aaa################################..........................aaaaaa#####.......................aaaaaaaaa#######################........................aa####..............................aa###...aa#####..................aaaa###########......................", | 167 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.1 . : 5 q.a.a.a.a.a.u.w > . > I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 63 | ".............aaa###############################...........................aaaaaaa####.........................aaaaaaaa######################........................a####..............................aaa###..aaa####....................aaa##########.......................", | 168 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> . . 1 <.a.a.a.a.r : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.e : . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 64 | "............aaa###############################.............................aaaaaa###...........................aaaaaaaa#######################.....................aa####..............................aa###...aaaa##.....................aaa##########.......................", | 169 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > , *.a.a.L > . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 65 | "............aaaa#############################...............................##aaa.#.............................aaaaaaaa########################..................aa####..............................aaa###...aaaaaa.....................aaa##########.......................", | 170 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > T E > > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 66 | "...........aaaaa############################...............................###aaa................................aaaaaaaa########################.................a#####..............................aa###...aaaaaa......................aaa##########.......................", | 171 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.w : . > : . : G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 67 | "...........aaaaaa##########################...............................###aaa..................................aaaaaaaa#########################..............######..............................aa####...aaaaaa......................aaa#########........................", | 172 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.5 : . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 68 | "...........aaaaaaa#######################................................####aaa...................................aaaaaaaa##########################..........########..............................a####....aaaaa.......................aaa#########........................", | 173 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.:.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 . . : , . . 3 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 69 | "............aaaaaa######################................................a###..a.....................................aaaaaaaa###########################......##########.........#...................a#####....aaaa........................aaa#########........................", | 174 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: : e -.P 1 > : . , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : > > > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 70 | "............aaaaaaa####################................................a###..........................................aaaaaaaa#########################################.........##...................#####.......a.........................aaa#########........................", | 175 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : ! a.a.a.a.9.y : , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > > w ~ ! T 5 , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 71 | ".............aaaaaaa##################................................a####...........................................aaaaaaaa########################################.........###.................######.................................aaa#########........................", | 176 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > : 4 9.a.a.a.a.a.a.a.;.3 : : ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > U u.a.a.a.a.a.^ , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 72 | "..............aaaaaaa###############.................................a####.............................................aaaaaaaa######################################.........#####..............#######..................................aaa########.........................", | 177 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.3 : > r u.a.a.a.a.a.a.a.a.a.u.T : , . 2 w e 4 : > , . > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 4 ,.a.a.a.a.a.a.a.a.:.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 73 | "...............aaaaaaa############a.................................aa###...............................................aaaaaaa######################################......a..######...........########...................................aaa########.........................", | 178 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u., : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : : I a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . : q ;.u.a.a.a.a.a.0.;.E r : : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 > K u.a.a.a.a.a.a.a.a.a.a.R > 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 74 | "...............aaaaaaaaa#######aaa.................................aa####................................................aaaaaaa####################################.......aa########.......###########...................................aaa########.........................", | 179 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.q > . : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > : r <.a.a.a.a.a.a.a.a.a.a.a.a.w.I , > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.a.a.a.a.a.! , : 1 ;.a.a.a.a.a.a.a.a.a.a.a.a.u.> 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 75 | "................aaaaaaaaaaaaaaaaa..................................aa###..................................................aaaaaaa###################################.......aa#########################....................................aaa########.........................", | 180 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . : U a.a.a.a.a.a.a.a.a.a.a.u.T > . . , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.! 4 > : q y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 E a.a.a.a.1 > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 76 | ".................aaaaaaaaaaaaaa...................................aa###....................................................aaaaaaa#################################.......aa##########################....................................aaa########.........................", | 181 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : J y.a.a.a.a.a.a.a.a.^ 1 > : 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > . : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! ^ a.a.a.W > > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 77 | "..................aaaaaaaaaaaa...................................aa####....................................................aaaaaaaa################################.......aa#########################.....................................aaa#######..........................", | 182 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : 1 &.a.a.a.a.y.^ 4 > , 8 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.w : . 2 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., . <.a.a.a., : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 78 | "....................aaaaaaa.....................................aa####......................................................aaaaaaaa##############################.......aa##########################.....................................aaa#######..........................", | 183 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> > , e G 3 : > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.y : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : u.a.a.;., : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 79 | "................................................................aa###........................................................aaaaaaaa###########################.........aa#########################......................................aaa#######..........................", | 184 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.7 . : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.8 : > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: e a.a.a.y . , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 80 | "...............................................................aa###..........................................................aaaaaaaa#########################.........aa#########################.......................................aaa#######..........................", | 185 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.y > > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.W > , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 , *.a.a.a.> > 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 81 | "..............................................................aa###............................................................aaaaaaaa#######################..........aa#########################.......................................aaa######...........................", | 186 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : : 3 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , a.a.a.a.: > G u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 82 | ".............................................................aaa###...........................................##................aaaaaaaa#####################..........aa#########################........................................aa#######...........................", | 187 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 : 4 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > , E u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 > 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.: . P a.a.a.a.K > : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 83 | ".............................................................aa###...........................................#####...............aaaaaaaaa##################..........aaa########################.........................................aa#######...........................", | 188 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e , 0.a.a.I 1 e u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . > 3 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., . : 9.a.a.a.a.a.:.9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 84 | "............................................................aa###...........................................#######...............aaaaaaaaaa##############a...........aaa#######################..........................................aa#######...........................", | 189 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.1 . 7 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . . > q 9.a.a.a.a.a.a.a.a.a.a.a.a.T : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.1 . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 85 | "...........................................................aa####...........................................########...............aaaaaaaaaaa##########aa...........aaa#######################...........................................aa######............................", | 190 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.9 : : H 0.a.a.a.a.a.a.a.a.0.w , , ! a.a.a.a.a.a.a.u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., : I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 86 | "..........................................................aa####...........................................##########...............aaaaaaaaaaaaaaaaaaaaa............aaaa####################.............................................aa######............................", | 191 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . : 5 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> 4 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t : . : : 4 T :.y.a.u.,.H : : , u.a.a.a.a.a.a.w.6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.1 : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 87 | "..........................................................aa###..........................................a###########.................aaaaaaaaaaaaaaaaaa............aaaaa###################..............................................aa######............................", | 192 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.> : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : , : , : , . . > T a.a.a.a.a.a.a.G 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 88 | ".........................................................aa###..........................................aa#############..................aaaaaaaaaaaa...............aaaaaa#################...............................................a#######............................", | 193 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.-.> : 3 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 4 u.a.a.a.a.a.a.<.> . 5 y.a.a.a.a.a.a.a.a.a.a.a.a.a.<.e : : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 89 | "........................................................aa###..........................................aa##############.............................................aaaaaaa##############a...............................................aa######.............................", | 194 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.3 : : > L u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., > :.a.a.a.a.a.a.a.q : 3 ,.a.a.a.a.a.a.a.a.a.a.9.r : . . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 90 | "........................................................aa###...................................##.....a################............................................aaaaaaaa###########aa................................................aa######.............................", | 195 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y > . > , T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., : H a.a.a.a.a.a.a.-.> > E y.a.a.a.a.a.,.U 3 > . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 91 | ".......................................................aa###...................................###....aa################.............................................aaaaaaaaa######aaa..................................................aa######.............................", | 196 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.G : , > , , > > 7 ^ u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.4 : . 5 y.a.a.a.a.a.a.a.4 > : 5 r q 6 , , . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 92 | ".......................................................aa##...................................####...aa##################.............................................aaaaaaaaaaaaaaaa...................................................aa#####..............................", | 197 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.^ ~ :.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.G : 1 w.a.a.a.a.a.a.a.~ > . : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E . > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 93 | "......................................................aa###..................................####...aa###################..............................................aaaaaaaaaaaaaa...................................................aaa#####..............................", | 198 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r > : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.1 : . > ,.a.a.a.a.a.a.a.u.1 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 94 | ".....................................................aa###..................................####....aa####################..............................................aaaaaaaaaaa.....................................................aa######..............................", | 199 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U , 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.H : . , ;.a.a.a.a.a.a.a.a.R > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.> , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 95 | "....................................................aaa##..................................#####...aa#####################................................................aaaaaa........................................................aa#####...............................", | 200 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;.w : : : 4 0.a.a.a.a.a.a.a.a.u., , T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 96 | "....................................................aa###.................................#####....aa######################.............................................................................................................aa#####...............................", | 201 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.U 1 , . . > J u.a.a.a.a.a.a.a.a.a.T , . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 97 | "...................................................aa###.................................######...aaa######################.............................................................................................................a######...............................", | 202 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E *.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.r > , . . , : r 0.a.a.a.a.a.a.a.a.a.a.y., . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 98 | "..................................................aa####................................######....aaaaa####################............................................................................................................aa######...............................", | 203 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.8 : , > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.U 0 2 : : > : . , r ^ w.a.a.a.a.a.a.a.a.a.a.a.a.~ , 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 99 | "..................................................aa###...............................########...aaaaaaa###################............................................................................................................aa#####................................", | 204 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.3 . > t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0.y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y 3 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 100 | ".................................................aa####..............................########....aaaaaaaaa#################............................................................................................................aa#####................................", | 205 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . > G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 2 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 101 | ".................................................aa###..............................#########....aaaaaaaaa#################............................................................................................................aa#####................................", | 206 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : 6 q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 102 | "................................................aa###..............................#########.......aaaaaaaa################............................................................................................................aa####.................................", | 207 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7 . 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 103 | "...............................................aaa###............................##########.........aaaaaaaa###############............................................................................................................aa####.................................", | 208 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L > : ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : G y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 104 | "...............................................aa###............................##########............aaaaaaa###############..........................................................................................................aaa####.................................", | 209 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . . e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.-.a.a.a.a.a.0., . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., . . > 5 :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 105 | "..............................................aaa###...........................##########..............aaaaaa###############..........................................................................................................aaa####.................................", | 210 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.L : . 8 a.a.a.a.a.8 . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.q : > . , , K <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 106 | ".............................................aaa####.........................##########.................aaaaaa##############..........................................................................................................aa#####.................................", | 211 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ 1 : . , E a.a.a.a.U : . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.W 8 > 1 5 0 G *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 107 | ".............................................aaa###.........................#########...................aaaaaa##############.........................................................................................................aaa####..................................", | 212 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.9 > . : e a.a.a.a.>.> . . 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 108 | "............................................aaa####.......................##########.....................aaaaaa#############.........................................................................................................aa#####..................................", | 213 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : . : q u.a.a.a.a.5 > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 109 | "............................................aa#####......................##########......................aaaaaa#############.........................................................................................................aa#####..................................", | 214 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.8 : . : q u.a.a.a.a.*.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 110 | "...........................................aaa#####.....................##########........................aaaaaa############........................................................................................................aaa####...................................", | 215 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q > . : w u.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 111 | "...........................................aa######...................###########.........................aaaaaa###########.........................................................................................................aaa####...................................", | 216 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.0 > : w u.a.a.a.a.a.a.*., . , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 112 | "..........................................aaa#######................###########............................aaaaaa##########.........................................................................................................aa####....................................", | 217 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r : . , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , . : w u.a.a.a.a.a.a.a.a.9.4 : : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 113 | "..........................................aa#########..............###########.............................aaaaaa##########.........................................................................................................aa####....................................", | 218 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.e > > K a.a.a.a.a.a.a.a.a.a.a.u.y , G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 114 | ".........................................aaa##########...........############...............................aaaaa##########........................................................................................................aaa####....................................", | 219 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 115 | ".........................................aa#################################................................aaaaaa#########........................................................................................................aa####.....................................", | 220 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > 2 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.y : . : =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.1 . . a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 116 | "........................................aaa################################..................................aaaaa#########........................................................................................................aa####.....................................", | 221 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . : 1 <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.3 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : . U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 117 | "........................................aa################################...................................aaaaa#########........................................................................................................aa###......................................", | 222 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.q : : 6 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.4 . > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 118 | ".......................................aaa###############################.....................................aaaa#########.......................................................................................................aaa###......................................", | 223 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > . > y u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 119 | ".......................................aaa##############################......................................aaaa#########.......................................................................................................aaa###......................................", | 224 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q . P a.a.a.a.a.a.a.a.a.a.a.a.a.<.6 : : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 120 | "......................................aaa#############################........................................aaaa#########.......................................................................................................aa###.......................................", | 225 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> , :.a.a.a.a.a.a.a.a.a.a.a.w.G : . . : 1 ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 121 | "......................................aaa############################.........................................aaaa#########......................................................................................................aaa###.......................................", | 226 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : u.a.a.a.a.a.a.a.a.a.y.U > . . : w y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 122 | "......................................aaa##########################............................cccc...........aaaa########.......................................................................................................aaa###.......................................", | 227 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : a.a.a.a.a.a.a.a.a.! , : . : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 123 | ".....................................aaaa########################aa........................cccccccccc.........aaaa########.......................................................................................................aa###........................................", | 228 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : 9.a.a.a.a.a.>.J , : . , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 124 | ".....................................aaaa########################a.....................ccccccccccccccc........aaaa########.......................................................................................................aa###........................................", | 229 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> 4 ^ 9.;.Y 3 , . : 8 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I . 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 125 | ".....................................aaaa######################aa...................cccccccccccccccccc........aaaa########......................................................................................................aaa###........................................", | 230 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . > , , . : P u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K . : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 126 | ".....................................aaaa#####################a...................cccccccccccccccccccc........aaaa#######.......................................................................................................aaa##.........................................", | 231 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : 2 >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 127 | ".....................................aaaaa##################aa.................ccccccccccccccccccccccc........aaaa#######.......................................................................................................aa###.........................................", | 232 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , . : H u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 128 | ".....................................aaaaaa##############aaa................cccccccccccccccccccccccccaaa......aaaa#######..................................................................#...................................aaa###.........................................", | 233 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w : 1 =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 129 | ".....................................aaaaaaa###########aaa................cccccccccccccccccccccccccccaaaa.....aaaa######...................................................................#...................................aa####.........................................", | 234 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , r y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 130 | ".....................................aaaaaaaaa######aaaaa................cccccccccccccccccccccccccccaaaaa.....aaaa######..................................................................##...................................aa###..........................................", | 235 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.;., . , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 131 | "......................................aaaaaaaaaaaaaaaaa................ccccccccccccccccaaaaccccccccaaaaa......aaaa#####...................................................................##..................................aaa###..........................................", | 236 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > > e w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ , 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 132 | ".......................................aaaaaaaaaaaaaa.................cccccccccccccccaaaaaacccccccaaaaaa......aaaa#####................................................................a.###..................................aa####..........................................", | 237 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . > 4 ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. . y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 133 | "........................................aaaaaaaaaaa.................ccccccccccccccaaaaaaaaaccccccaaaaaa.......aaaa####.................................................................a.###..................................aa####..........................................", | 238 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : , E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 134 | ".........................................aaaaaaaa.................ccccccccccccaaaaaaaaaaaaccccccaaaaaaa.......aaaa####................................................................aa####.................................aaa###...........................................", | 239 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.P > J y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<., : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 135 | "................................................................cccccccccccaaaaaaaaaaaaaaacccccaaaaaaa........aaaa###................................................................aaa###..................................aa####...........................................", | 240 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., > 0 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: , ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 136 | "..............................................................cccccccccccaaaaaaaaaaaaa....ccccaaaaaaa.........aaaa#..................................................................aa####..................................aa####...........................................", | 241 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> . > 6 *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q : Q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 137 | ".............................................................ccccccccccaaaaaaaaaaa.......cccaaaaaaaa..........aaaa..................................................................aa####..................................aa####............................................", | 242 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J > , > J <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 138 | "...........................................................ccccccccccaaaaaaaaaa.........ccc.aaaaaaa...........aaa...........aaa.....................................................aa####..................................aa####............................................", | 243 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w > : > 6 ~ y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.E ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:., 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 139 | "..........................................................cccccccccaaaaaaaaa..........cccc..aaaaaa............aa............aaa.....................................................a####...................................aa####............................................", | 244 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.^ y 0 H T <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.. 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U . H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 140 | ".........................................................cccccccccaaaaaaaa...........cccc..aaaaaa.............a............aaa##...................................................aa####...................................aa####............................................", | 245 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 141 | "........................................................ccccccccaaaaaaaa............ccc...aaaaaa...........................aaa##..................................................aa####...................................aa####.............................................", | 246 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.4.+.| F M v z c c c c c m | 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.: . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.: : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 142 | "......................................................cccccccccaaaaaaa............cccc...aaaaaa...........................aaa##...................................................aa####...................................aa####.............................................", | 247 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.#.) m z z v c u u u u u u u u u u u c c v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a., . : >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E : : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*., 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 143 | ".....................................................ccccccccaaaaaaaa............ccc....aaaaaa............................aa###..................................................aa####....................................aa####.............................................", | 248 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.o.D v z c u u u u u u u u u u u u u u u u u u u u c 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.: 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 144 | "....................................................ccccccccaaaaaaa............ccc.....aaaaaa............................aaa###..................................................aa####....................................aa####.............................................", | 249 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.+.Z c c c u u u u u u u u u u u u u u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 145 | "..................................................ccccccccaaaaaaa.............cc.....aaaaaa..............................aa###..................................................aa####.....................................aa###..............................................", | 250 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.O.V z c u u u u u u u u u u u u u u u u u u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.W 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 146 | ".................................................cccccccaaaaaaa..............cc.....aaaaaa..............................aaa###..................................................aa####....................................aa####..............................................", | 251 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.X.B x c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 147 | "................................................cccccccaaaaaaa.....................aaaaaa...............................aa###..................................................aa####.....................................aa####..............................................", | 252 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i...m c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.&.w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . 1 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J . E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 148 | "...............................................ccccccaaaaaaa.....................aaaaaa................................aaa###..................................................aa####.....................................aa####..............................................", | 253 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.F c c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.0 . T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 149 | "..............................................ccccccaaaaaaa.....................aaaaa.................................aaa####.................................................aa####......................................aa###...............................................", | 254 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.m c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 150 | ".............................................ccccccaaaaaa.....................aaaaa...................................aaa###.................................................aaa####.....................................aa####...............................................", | 255 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.{ c c u u u u u u u u u u u u u u u u u u u u u u u c c x v V ) S M c u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : : *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&.> 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 151 | "...........................................ccccccaaaaaaa.....................aaaa....................................aaa####.................................................aa####......................................aa####...............................................", | 256 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.A c z u u u u u u u u u u u u u u u u u u u u u c u m { +.5.p.a.a.a.a.a.2.z u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H L a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 152 | "..........................................ccccccaaaaaa..............................................................aaa####.................................................aaa####......................................aa####...............................................", | 257 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u u u u u u u u u u u u u u u u z c c F #.i.a.a.a.a.a.a.a.a.a.a.| z u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 , &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 153 | ".........................................ccccccaaaaa...............................................................aaa#####.................................................aa####......................................aaa###................................................", | 258 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r./ z u u u u u u u u u u u u u u u u u u u u x M .6.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . G a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Y > . J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: > w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 154 | "........................................ccccccaaaaa................................................................aaa#####................................................aa####.......................................aa####................................................", | 259 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.{ z z u u u u u u u u u u u u u u u u u u c v | r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u x b 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , 1 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 155 | ".......................................ccccccaaaaa................................................................aaa######................................................aa####.......................................aa####................................................", | 260 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...c z u u u u u u u u u u u u u u u u u c c F 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u c B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 > R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 156 | "......................................ccccccaaaaa................................................................aaa######................................................aa####........................................aa###.................................................", | 261 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u u u u u u u u u u u u c B +.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! : 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 157 | ".....................................ccccccaaaaa.................................................................aaa#####.................................................aa####........................................a####.................................................", | 262 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a._ c u u c m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 158 | "....................................ccccccaaaaa.................................................................aaa######................................................aa####........................................aa####.................................................", | 263 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v z u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q., . P a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 159 | "...................................ccccccaaaaa.................................................................aaa######.................................................aa####........................................aa####.................................................", | 264 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.` c u u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u c m 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 160 | "..................................ccccccaaaaa..........................c.......................................aaa######................................................aa####.........................................aa####.................................................", | 265 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u c S 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u z | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.1 : J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3 . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 161 | ".................................ccccccaaaaa.......................ccccc......................................aaa######................................................aa#####........................................aa#####.................................................", | 266 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u u u c m 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M z u c m e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 162 | "................................cccccccaaaa......................cccccc......................................aaa######.................................................aa####.........................................aa#####.................................................", | 267 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.C c u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.m x c v O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0., > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: : E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 163 | "...............................ccccccccaaa.....................ccccccc......................................aaaa######................................................aa#####.........................................aa#####.................................................", | 268 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b z u u u u u u u u u u u u u u z b 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.M u v o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 8 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.4 . 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H 3 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 164 | "..............................cccccccccaaa...................cccccccc...a...................................aaa######................................................aaa####.........................................aaa####..................................................", | 269 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.v u u u u u u u u u u u u u u u c / p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.#.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T > > >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 165 | ".............................ccccccccccca..................ccccccccc..aaa..................................aaa######.................................................aa#####.........................................aaa####..................................................", | 270 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u x c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.: : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: : ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 166 | "............................ccccccccccccc................ccccccccccaaaaa..................................aaa#######................................................aa#####..........................................aa#####..................................................", | 271 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.c u u u u u u u u u u u u u u x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : . 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . 2 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , , 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 167 | "............................cccccccccccccc.............cccccccccccaaaaa...................................aaa######....................................##...........aa#####..........................................aa#####..................................................", | 272 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> . : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L : > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 168 | "...........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................####.........aa#####..........................................aaa#####..................................................", | 273 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u u u u u z B p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 : T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.*.> : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2 0 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 169 | "..........................ccccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######...................................######.......a######...........................................aaa####...................................................", | 274 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.u u u u u u u u u u u u u u u u n p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.8 . . 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> . Y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 170 | "..........................cccccccccccccccccccccccccccccccccccccaaaaa...................................aaa#######..................................a.######......a#######...........................................aa#####...................................................", | 275 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.v u u u u u u u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ q.a.a.a.a.a.a.a.a.a.a.a.u.4 > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ : , :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 171 | ".........................cccccccccccccccccccccccccccccccccccccaaaaa....................................aaa#######..................................a########....########............................................aa#####...................................................", | 276 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.M u u u u u u u u u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T : > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ . 3 w.a.a.a.a.a.a.a.a.a.u.e : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 172 | ".........................cccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################...........................................aaa#####...................................................", | 277 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.> . q a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > . 4 y.a.a.a.a.a.a.a.y.7 : , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 173 | ".........................ccccccccccccccccccccccccccccccccccaaaaaa....................................aaa#######..................................a#####################............................................aaa#####...................................................", | 278 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u u u u u u c @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.> , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : 5 y.a.a.a.a.a.,.3 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.> H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 174 | ".........................ccccccccccccccccccccccccccccccccaaaaaaa.....................................aaa#######..................................a#####################............................................aaa####....................................................", | 279 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.2 . . > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w., . 2 =.u.u.;.0 > . w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ , > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 175 | ".........................cccccccccccccccccccccccccccccaaaaaaaaa.....................................aaa#######..................................a#####################.............................................aaa####....................................................", | 280 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u / a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@./ 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 . : K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.6 . . , > : , : q.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 176 | "..........................ccccccccccccccccccccccccccaaaaaaaaaa.....................................aaa########.................................aa####################..............................................aa#####....................................................", | 281 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.F c c u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J : 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : , ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 , a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 177 | "..........................acccccccccccccccccccccccaaaaaaaaaa......................................aaa########.................................aa#####################..............................................aa#####....................................................", | 282 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F u u u u u u u u u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.Z c x u c ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! > : 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.! , . 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.> w a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 178 | "..........................aaacccccccccccccccccccaaaaaaaaaa........................................aaa#######.................................aa#####################..............................................aaa#####....................................................", | 283 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.: > ! a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>.: > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > : R a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 179 | "..........................aaaaacccccccccccccccaaaaaaaaa..........................................aaa#######..................................aa####################...............................................aaa####.....................................................", | 284 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u u u u u u u A a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.m c u u u u v 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.> : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.J , >.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 180 | "...........................aaaaaaaacccccccccaaaaaaaaaa..........................................aaa########.................................aa#####################...............................................aaa####.....................................................", | 285 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.' u u u u u u u u u u u u u u u u u u u x +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.O.b c u u u u c M t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.4 . 1 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e . : y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 181 | "...........................aaaaaaacccccccccaaaaaaaa.............................................aa########.................................aaa####################................cc..............................aaa####.....................................................", | 286 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u u u u u u u u u z { p.a.a.a.a.a.a.a.a.a.a.7. .m c c u u u u u c _ p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e : > :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&., 4 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 182 | ".............................aaaaccccccccaaaaaaaa..............................................aaa########.................................aa#####################..............cccc..............................aaa####..............ccccccc...............cccccccccc.......", | 287 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u u u u u u u x x F $.3.2.2.1.1.1.` v c x u u u u u u x v 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I > . : U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.1 > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.: . I a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 183 | "...............................accccccccaaaaaaa...............................................aaa########.................................aaa####################.............ccccc...............................aa#####...........ccccccccc.............cccccccccccc........", | 288 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u u u u u u u u u u u c v c v v v v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > : 9 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.H : . > W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.>., . , =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 184 | "..............................ccccccccaaaaaaaa..............................ccccc............aaa#########................ccccccc..........aa####################............cccccc...............................aaa#####........cccccccccc.............cccccccccc............", | 289 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.] u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.,.> 2 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.:.> : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ > , u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 185 | ".............................cccccccaaaaaaaa..............................ccccccc...........aaa########c...............cccccccccc........aa######aaa###########..........ccccccc..aa.............................aaa####.......cccccccccc..aaaaaa.....cccccccc....aaaaaaa.....", | 290 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.1 > <.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u.3 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L . y a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 186 | "............................cccccccaaaaaaa..............................cccccccc...........aaaa########cc............cccccccccccc........aa######aaa##########.........ccccccc..aaaa.............................aaa####.....cccccccccc.aaaaaaaa....cccccccc..aaaaaaaaaa......", | 291 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z v #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 . : &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.U > . 3 y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q , *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 187 | "...........................cccccccaaaaaaa..............................ccccccccc...........aaa#######cccc...........ccccccccccccc.......aa######aaaaa########........ccccccc..aaaaa...cc.........................aaa####...ccccccccc..aaaaaaaa....cccccccc..aaaaaaaaaa........", | 292 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c ` p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y : , U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.<.> : 2 : 1 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 > u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 188 | "..........................cccccccaaaaaa..............................ccccccccccaaa........aaa########cccc.........cccccccccccccca.......aa#####aaaaaaa######........ccccccc.aaaaa....cc..........................aaa####.ccccccccc.aaaaaaaaa....cccccccccaaaaaaaaaa...........", | 293 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c B 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.T , : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.8 . : Y u.y > . , ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.4 : W a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 189 | ".........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa#######ccccc.......cccccccccccccccca......aa######.aaaaaaa####.......ccccccc.aaaaa....cccc..........................aaa####ccccccc.aaaaaaaaaa....cccccccccaaaaaaaaa..............", | 294 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u u u u u u u u u u u u u u u u u u z v @.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.=.: . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.^ > > U a.a.a.E > . : 7 w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6 5 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 190 | "........................ccccccaaaaaa..............................ccccccccccccaaa.......aaaa########ccccaa.....cccccccccccccccccaa.....aa#####..aaaaaaaaaa......ccccccccaaaaaa....cccc...........................aaa##ccccccccaaaaaaaaaa....cccccccccaaaaaaaa.................", | 295 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u u u u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9., , w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1 . e a.a.a.a.a.;., : . : : J u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.&. 3 9.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 191 | ".......................ccccccaaaaaa..............................cccccccccccccaaa.......aaa########cccccaa....cccccccccccccccccaaa....aa#####....aaaaaaaa.....cccccccccaaaaa....ccccc............................aaa#ccccccccaaaaaaaaa.....cccccccccaaaaaaa...................", | 296 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.m c u u u u u u u u u u u u u u u u u u u u c B 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y.3 . > ,.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.E > > y.a.a.a.a.a.a.q.Q G T y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 192 | "......................ccccccaaaaa...............................cccccccccccccaaaa......aaa########ccccccaa...ccccccccccccccccccaa....aaa#####.....aaaaaa.....ccccccccaaaaaa....cccccc.aaa........................aaacccccccaaaaaaaaa.....ccccccccccaaaaaa.....................", | 297 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.) c c u u u u u u u u u u u u u u u z c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9 : > ^ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y., > &.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 193 | ".....................ccccccaaaaa..............................ccccccccccccccaaaa......aaaa########ccccccaa.cccccccccccccccccccaaa....aa#####...............ccccccccaaaaaa....cccccccaaaa.........................aaccccccaaaaaaaaa.....ccccccccccccaaaa.......................", | 298 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u u u c ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.K > > U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.I : : r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.6.1.X.` / @.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 194 | "....................ccccccaaaaa..............................cccccccccccccccaaa......aaaa########ccccccaa.ccccccccccccccccccccaaa...aaa####...............cccccccaaaaaa.....ccccccccaaa..........................acccccccaaaaaaa......ccccccccccccccca........................", | 299 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.C c u u u u u u u u u u u c V 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.~ : : e a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.w.: , y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3./ M m 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.#.V z c v c u u c z m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 195 | "...................ccccccaaaaa..............................cccccccccccccccaaaa...ccaaaa########cccccccaacccccccaacccccccccccaaa....aa#####..............cccccccaaaaa......ccccccccaaa..........................ccccccccaaaaaa.......ccccccccccccccccccccccccccccccccccc......", | 300 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.v u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.6.3.p.a.a.a.a.a.a.a.a.a.:.: . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.G : > *.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.} b c u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.2.O. ./ V m c u v c c u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.F z c u u u u u u u u u x M a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 196 | "..................ccccccaaaaa.............................cccccccacccccccccaaa...ccaaaa########cccccccaaccccccaaaacccccccccccaaa...aaa#####............cccccccaaaaaa......cccccccccaaa.........................ccccccccaaaaa.........ccccccccccccccccccccccccccccccccccccc....", | 301 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p._ c u u u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.D c c c D a.a.a.a.a.a.a.a.q., , 8.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.1.| / ..$.i.a.a.a.a.a.a.a.<.: : t a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F z c u u z v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.2.} V u c c c u u u u u u u u c c { a.a.a.a.a.a.a.a.a.a.a.a.p...v v z u u u u u u u u u u z x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 197 | ".................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaa#########cccccccacccccaaaaaaccccccccccaaa....aa#####............cccccccaaaaa.......cccccccccaaa.........................ccccccccaaaaa..........cccccccccccccccccccccccccccccccccccccc...", | 302 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.M z u u u u A a.a.a.a.a.a.a.u.4 . X $ a d f x c u v / i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| v x c u u u c M p.a.a.a.a.a.a.w . > y.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.D x u u u u x F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.| m z c u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.o.v c u u u u u u u u c u n Z _ o.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 198 | "................ccccccaaaaa.............................cccccccaaccccccccaaaa..cccaaaa########cccccccccccccaaaaaaaccccccccccaaa....aa#####..........ccccccccaaaaa.......ccccccccccaaa........................ccccccccaaaaa.............aaaaaaaaaaaaaa.......cccccccccccccccc..", | 303 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.z u u u u u u u u u u c C 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.| v c u u u u u c 2.a.a.a.a.a.a.a.e : ; # g k k u u u u u u u z b 6.a.a.a.a.a.a.a.a.a.a.a.2.C c z u u u u u u u z ..a.a.a.a.a.>.: > E a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.A c u u u u c M 5.a.a.a.a.a.a.6.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.@.V z c u u u u u u u u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.O.b c u u u u u u u c m | 2.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 199 | "...............ccccccaaaaa.............................ccccccaaaaccccccccaaa..ccccaaa########cccccccccccccaaaaaaaacccccccccaaa....aa#####..........ccccccccaaaaa.......cccccccccccaa........................cccccccccaaaa.............aaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccc..", | 304 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.S c u u u u u u u u u c n 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b z u u u u u u u V a.a.a.a.a.a.a.U < a k k u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.6.V c u u u u u u u u u u c +.a.a.a.a.a.e . 4 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.C c u u u u c b #.a.a.a.a.a.a.e.F m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u u u u u u u c B 1.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x u u u u u u x x D 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 200 | "..............ccccccaaaaa............................cccccccaaaaacccccccaaa..ccccaaa#########ccccccccccccaaaaaa..ccccccccccaaa....aa#####.........ccccccccaaaaa.......cccccccccccaaa.......................cccccccccaaaa..............aaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccc.", | 305 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v x u u u u u u u u z c o.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ x u u u u u u u u z 5.a.a.a.a.a.a.&.- k u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.t./ c u u u u u u u u u u u u v 6.a.a.a.a.w.: > ;.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.V c u u u u c c .p.a.a.a.a.a.i.` x u #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.B c u u u u u u u u u u u u u c v { e.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b c u u u u u u z c | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 201 | ".............ccccccaaaaa............................ccccccaaaaaaccccccccaa.cccccaaa########cccccccccccccaaaaa....ccccccccccaa....aa#####........cccccccccaaaaa........cccccccccccaaa......................cccccccccaaaa................aaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccc.", | 306 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u u z D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u D a.a.a.a.a.a.%.h k u u u u u u u u u u u u u u u x ..a.a.a.a.a.a.| z x u u u u u u u u u u u u u c p.a.a.a.a.I : . r a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.B c u u u u u c / t.a.a.a.a.a.a. .c z u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u z c D 1.p.a.a.a.a.a.a.a.a.a.a.a.a.a.$.b x u u u u u u x z ` i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 202 | "............cccccccaaaa............................ccccccaaaaaaccccccccaaacccccaaaa########ccccccccccccaaaaa....cccccccccccaa....aa#####.......cccccccccaaaaa........ccccccccccccaa......................ccccccccccaaa......................................aaaaaaacccccccccca", | 307 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.M c u u u u u u u u u c $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a...c u u u u u u u u u u z e.a.a.a.a.a.[ k u u u u u u u u u u u u u u u u u c 3.a.a.a.a.e.M z u u u u u u u u u u u u u u x } a.a.a.a.u., : w.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c u u u u u c B 6.a.a.a.a.a.a.2.v c u u c 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.n x u u u u u u u c F e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 203 | "...........cccccccaaaa............................ccccccaaaaaa.cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccca....aaa####......ccccccccccaaaaa.........ccccccccccccaa.....................cccccccccccaa..........................................aaaacccccccccca", | 308 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.v u u u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.B c u u u u u u u u u u z / a.a.a.a.6.n k u u u u u u u u u u u u u u u u u u c a.a.a.a.X.c u u u u u u u u u u u u u u u u z i.a.a.a.a.! > > T a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u z v #.a.a.a.a.a.a.p._ c u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u u u c ] i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.m x u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 204 | "..........cccccccaaaa............................ccccccaaaaaa.ccccccccaaccccccaaa########cccccccccccccaaaa.....cccccccccccca....aaa####.....cccccccccccaaaa.........cccccccccccccaa....................cccccccccccaaa............................................aacccccccccca", | 309 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u x v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c x u u u u u u u u u u u z r.a.a.a.+.c u u u u u u u u u u u u u u u u u u u u ' a.a.e.V c u u u u u u u u u u u u u u u u z ] a.a.a.a.a.4 3 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u x x { p.a.a.a.a.a.a.5.b x u u u u z 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.m z u u u u u u u u u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.C c u u u u u u u u u v $.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 205 | "..........cccccccaaa............................ccccccaaaaa..ccccccccaaacccccaaaa########ccccccccccccaaaa......cccccccccccca...aaa####.....cccccccccccaaaa..........cccccccccccccaa...................ccccccccccccaa..............................................acccccccccca", | 310 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u c F t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u u c { a.a.a.` c u u u u u u u u u u u u u u u u u u u u c 6.a.O.c x u u u u u u u u u u u u u u u u u z r.a.a.a.a.;., > =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.m z u u u u u c A e.a.a.a.a.a.a.p.` c u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c x u u u u u u u u u u z c ) ..O.#.1.3.e.r.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 206 | ".........cccccccaaaa...........................ccccccaaaaa...cccccccaaacccccaaaa########ccccccccccccaaaaa.....ccccccccccccc....aaa###.....cccccccccccaaaa..........ccccccccccccccaa..................cccccccccccccaa..............................................acccccccccca", | 311 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.m c u u u u u u u u u u u u u c i.a.i.C c u u u u u u u u u u u u u u u u u u u u u m t.C c u u u u u u c u u u u u u u u u u u x F a.a.a.a.a.w 6 a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.Z c u u u u u c n 1.a.a.a.a.a.a.a.6.m x u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u x m r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A c u u u u u u u u u u u u u u u u z c v v c c u u x v b M V A { +.6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 207 | ".........cccccccaaa..........................cccccccaaaaa...ccccccccaccccccaaaa########.cccccccccccaaaaa......ccccccccccccc....aaa###....ccccccccccccaaa...........ccccccccccccccaa.................ccccccccccccccaa..............................................acccccccccca", | 312 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.$.c u u u u u u u u u u u u u u c O.a.6.b u u u u u u u u u u u c x v u u u u u u u u z V c u u u u u u c / +.c u u u u u u u u u u x 6.a.a.a.a.w.: : :.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.) c u u u u u u c ..a.a.a.a.a.a.a.a.X.c u u u u u u u u v a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u z B i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c c v | i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 208 | "........ccccccccaa..........................cccccccaaaa.....cccccccaccccccaaaaa########cccccccccccaaaaa......cccccccccccccc...aaa####..cccc.ccccccccaaaa...........ccccccccccccccaa................cccccccccccccccca..............................................ccccccccccaa", | 313 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.) c u u u u u u u u u u u u u u x M a.$.c u u u u u u u u u k k ( 3.7.{ z u u u u u u u z c u u u u u c M e.a.5.v u u u u u u u u u u C a.a.a.a.a.T : 0 a.a.a.a.a.a.a.a.a.a.a.a.a.p.| c z u u u u u c m e.a.a.a.a.a.a.a.a. .z u u u u u u u u c ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u c C p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.B x c x u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 209 | "........cccccccaaa.........................ccccccaaaaa.....cccccccaccccccaaaaa########ccccccccccccaaaa.......cccccccccccccc...aaa###.ccccc.ccccccccaaaa...........cccccccccccccccca..............cccccccccccccccccca..............................................ccccccccccaa", | 314 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u c } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b c u u u u u u u u u u u u u u u x 6.{ z u u u u u u u u k l * ,.a.a.a./ u u u u u u u u u u u u u u z { p.a.a.| z u u u u u u u u u c 2.a.a.a.a.a.4 > >.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u u u u c F p.a.a.a.a.a.a.a.a.} c u u u u u u u u u c i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.c u u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.4.X.{ _ F D Z C B M M V C A F D C V M m b x c c u u u u u u u u u u u u z 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 210 | ".......ccccccccaa........................cccccccaaaaa.....ccccccccccccccaaaaa########.cccccccccccaaaa.......cccccccccccccccccaaaa##ccccc..cccccccccaaa............ccccccccccccccccc...........cccccccccccccccccccccc.................c............................cccccccccaaa", | 315 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.z u u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c b v u u u u u u u u u u x / C c u u u u u u u u k p > ^ a.a.a.6.c u u u u u u u u u u u u u c +.a.a.a.p.v u u u u u u u u u u m a.a.a.a.a.9.: . w a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u c O.a.a.a.a.a.a.a.a.a.+.z u u u u u u u u u u ` a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.| c c u u u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 211 | ".......ccccccccaa.......................ccccccaaaaa......cccccccccccccaaaaaa########.cccccccccccaaaa........cccccccccccccccccaaa###cccc...cccccccccaaa............cccccccccccccccccc.......cccccc..cccccccccccccccccc...............cc...........................cccccccccaaa.", | 316 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u z t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.m c u u u c } a.m u u u u u u u u u u u x x u u u u u u u u k & : U a.a.a.a.V u u u u u u u u u u u u u z #.a.a.a.a.+.c u u u u u u u u u c +.a.a.a.a.a.I . > <.a.a.a.a.a.a.a.a.a.a.5.n c u u u u u u z n 7.a.a.a.a.a.a.a.a.a.e.z u u u u u u u u u u x e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u u u z F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u u u u u u u u v 5.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 212 | "......ccccccccca.......................ccccccaaaaa.......ccccccccccccaaaaaa########..ccccccccccaaaaa........cccccccccccccccccaaa###ccc..aacccccccccaa.............cccccccccccccccccccccccccccccc...cccccccccccccccccccc..........cccc...........................ccccccccaaaaa.", | 317 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u x } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c u u u c M e.a.e.x u u u u u u u u u x u u u u u u u u u u k % : e a.a.a.a.+.c u u u u u u u u u u u u z 1.a.a.a.a.a.b u u u u u u u u u u x i.a.a.a.a.a.1 . r a.a.a.a.a.a.a.a.a.p._ c u u u u u u u c D p.a.a.a.a.a.a.a.a.a.p.m u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.#.c u u u u u u u u u u u u c r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ c u u u u u u u u u z O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 213 | "......ccccccccca.....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa.........cccccccccccccccccaaa##cc..aacccccccccccaa..ccc........cccccccccccccccccccccccccccc....cccccccccccccccccccccccccccccccc.............................ccccccccaaaaa..", | 318 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.F x u u u u u u u u u v p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u x F p.a.a.D u u u u u u u u u u x u u u u u u u u u k @ . 4 y.a.a.a.e.c u u u u u u u u u u u u c 2.a.a.a.a.a.1.c u u u u u u u u u u V a.a.a.a.a.>., > 9.a.a.a.a.a.a.a.a.3.b c u u u u u u u c ` a.a.a.a.a.a.a.a.a.a.a.| c u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u u ) a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 214 | ".....cccccccccca....................cccccccaaaaa........cccccccccccaaaaaaa########..cccccccccaaaaa..........ccccccccccccccccaaa###c.aaaaccccccccccccccccc.........cccccccccccccccccccccccccc....aaccccccccccccccccccccccccccccccc...........c.................ccccccccaaaaa...", | 319 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.| c u u u u z ..a.a.a.5.c u u u u u u u u u u u u u u u u u u u k O , 0.a.a.a.a.m u u u u u u u u u u u u c 3.a.a.a.a.a.a.V u u u u u u u u u u c O.a.a.a.a.a.H . : L a.a.a.a.a.a.a.p.) c u u u u u u u u c S a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u z X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.b u u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u D a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 215 | ".....cccccccccca..................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa...........ccccccccccccccccaaa###aaaaaaccccccccccccccc...........ccccccccccccccccccccccccc...aaaaccccccccccccccccccccccccccccc.......aaccccc................cccccccaaaaaa....", | 320 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.M c u u u u c 2.a.a.a.a.V u u u u u u u u u u u u u u u u u u u l o : :.a.a.a.a.{ c u u u u u u u u u u u c 3.a.a.a.a.a.a.6.c u u u u u u u u u u z r.a.a.a.a.a.4 . 1 y.a.a.a.a.a.a.2.b u u u u u u u u u z V p.a.a.a.a.a.a.a.a.a.a.a.` z u u u u u u u u u u u c X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.S z u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.A u u u u u u u u u x ..a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 216 | "....cccccccccccc.................ccccccccaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa............ccccccccccccccccaaa##aaaaaaccccccccccccccc............ccccccccccccccccccccccc..aaaaaa..cccccccccccccccccccccccccc...aaaaaacccccc...............cccccccaaaaaaa.....", | 321 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C x u u u u u u u u u u u p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u c M r.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u f o . : Q a.a.a.a.2.c u u u u u u u u u u u c 5.a.a.a.a.a.a.a.F u u u u u u u u u u u M a.a.a.a.a.a.U 8 q.a.a.a.a.a.i.F c u u u u u u u u u u M p.a.a.a.a.a.a.a.a.a.a.a.i.u u u u u u u u u u u u u u | a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.} c u u u u u u u u u u u u u u u F a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 217 | "....ccccccccccccc.............cccccccccaaaaa..........ccccccccccaaaaaaaa########..ccccccccaaaaa.............cccccccccccccccaaaa##aaaaaccccccccccccca....aaa.......ccccccccccccccccccccaaaaaaaaa....ccccccccccccccccccccaaaaaaaaaaaaccccccccccc..........ccccccccaaaaaaa.......", | 322 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.2.z u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.V c u u u u c { a.a.a.a.a.t.v u u u u u u u u u u u u u u u u u k g X > J a.a.a.a.p.v u u u u u u u u u u u c 6.a.a.a.a.a.a.a.r.z u u u u u u u u u u x | a.a.a.a.a.a.a.a.a.a.a.a.a.+.v u z u c u u u u u u u b r.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u C a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.F c u u u u u u u u u u u u u u u u b a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.u u u u u u u u u u x r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 218 | "...cccccccccccccccc.......ccccccccccccaaaa............cccccccccaaaaaaaaa########..cccccccaaaaa..............cccccccccccccccaaa##aaaa.ccccccccccccccaaaaaaa........cccccccccccccccccccaaaaaaaa......acccccccccccccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccaaaaaaaa........", | 323 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.m u u u u u u u u u u u u m a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .c u u u u z c 2.a.a.a.a.a.a.S u u u u u u u u u u u u u u u u u k i . 0 a.a.a.a.a.} c u u u u u u u u u u c 3.a.a.a.a.a.a.a.a.] z u u u u u u u u u u c #.a.a.a.a.a.a.a.a.a.a.a.e.C c u x Z c u u u u u u u c 2.a.a.a.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u u u c t.a.a.a.a.a.a.a.a.a.a.a.a.7.m c u u u u u u u u u u u u u u u u u z p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 219 | "...ccccccccccccccccccccccccccccccccccaaaa............cccccccccaaaaaaaaa########...ccccccaaaaa...............cccccccccccccccaaaaaaaa..ccccccccccccaaaaaaa...........ccccccccccccccccaaaaaaaaa.......aaccccccccccccaaaaaaaaaaaaaaa..ccccccccccccccccccccccccc.aaaaaaaa..........", | 324 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.z u u u u u u u u u u u u c a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b z u u u u c V r.a.a.a.a.a.a.+.c u u u u u u u u u u u u u u u u k s . 2 y.a.a.a.a.e.x u u u u u u u u u u c o.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.X.c u u c 1.S u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u c B p.a.a.a.a.a.a.a.a.a.e.| z u u u u u u u u u u u u u u u u u u u v 1.a.a.a.a.a.a.a.a.a.a.a.a.a.e.X.| X.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Z u u u u u u u u u c 6.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 220 | "..cccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########...ccccccaaaaa.................ccccccccccccaaaaaaaa....cccccccccccaaaaaa.............acccccccccccccaaaaaaaaa..........aaaaaaaaaaaaaaaaaaaaaaaaa..........aacccccccccccccccc.aaaaaaaa............", | 325 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.M c u u u u u c } a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u p > 9.a.a.a.a.a.F u u u u u u u u u u c _ a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u a.a.a.a.a.a.a.a.a.6.m c u c V t.2.z u u u u u u u c o.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u u u u u x b +.t.a.a.a.r.5.O.B z c u u c z u u u u u u u u u u u u u u u u u v e.a.a.a.a.a.a.a.a.a.a.2.V z c u u Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 221 | "..ccccccccccccccccccccccccccccccccaaaaa.............ccccccccaaaaa.aaa########....cccccaaaaa..................ccccccccccaaaaaaaaa.....cccccccccaaaaaaa..............aaacccccccccaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaa..........aaaaaaaacccccccccaaaaaaaaaa..............", | 326 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.@.c u u u u u u u u u u u u u u { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.D c u u u u u z b 6.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u u k = > =.a.a.a.a.a.t.c u u u u u u u u u u V a.a.a.a.a.a.a.a.a.a.} u u u u u u u u u u u u n a.a.a.a.a.a.a.i._ x u u x .a.a.b u u u u u u u u c 3.a.a.a.a.a.a.a.a.a.t.$._ ` } u u u u u u u u u u u u u u u u u u c c c c u c c c u u u c n 5.u u u u u u u u u u u u u u u u u u u z F 1.5.e.t.a.7.O.D c c u u u c C e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.n u u u u u u u u c +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 222 | "..cccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa.aaaa#######....cccccaaaaa...................aaccccccaaaaaaaaaa......cccccccaaaaaaaa...............aaaaaaaaaaaaaaaaaaa..............aaaaaaaaaaaaaaaaaaa............aaaaaaaaaaaaaaaaaaaaaaaaaaa................", | 327 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.M u u u u u u u u u u u u u u u c 7.a.a.a.a.a.a.a.a.a.a.a.a.a.p.{ c c u u u u u c ) p.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u k # > T a.a.a.a.a.a. .z u u u u u u u u u b p.a.a.a.a.a.a.a.a.a.a.B u u u u u u u u u u u u m a.a.a.a.a.a.$.v x u z n 6.a.a.X.z u u u u u u u u c ` a.a.a.a.p.7.#./ b z z u Z C u u u u u u u u u u u u u u u u u u u u u u u u u u u u c } a.a.u u u u u u u u u u u u u u u u u u u u u c v c z u c z u u u u c b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.b u u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 223 | "..ccccccccccccccccccccccccccccccaaaa...............cccccccaaaaa..aaa########...cccccaaaaa....................aaaaaaaaaaaaaaaa........ccccccaaaaaaa.................aaaaaaaaaaaaaaaaa.................aaaaaaaaaaaaaa................aaa.....aaaaaaaaaaaaaaaa...................", | 328 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.x u u u u u u u u u u u u u u u u b 6.a.a.a.a.a.a.a.a.a.a.3._ c c u u u u u z v 2.a.a.a.a.a.a.a.a.a.r.x u u u u u u u u u u u u u u u k $ > y a.a.a.a.a.a.a.v u u u u u u u u u c e.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u v a.a.a.a.e.C c u u z ` p.a.a.a.c u u u u u u u u u u c v C m u z c c u u u c | a.C u u u u u u u u u u u u u u u u u u u u u u u u u u c C 6.a.a.a.u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c ..p.a.a.a.a.a.a.a.a.a.a.3.o.) 7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.b z u u u u u x c O.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 224 | "..ccccccccccccccccccccccccccccaaaaa...............cccccccaaaaa..aaa########.....cccaaaaa......................aaaaaaaaaaaaa...........aaaaaaaaaaa...................aaaaaaaaaaaaaa.....................aaaaaaa................................aaaaaaaaa.......................", | 329 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ u u u u u u u u u u u u u u u u u u z ) 1.e.a.a.a.p.3.` c v u u u u u u u c D i.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u u u u k + : 6 u.a.a.a.a.a.a.7.c u u u u u u u u c 1.a.a.a.a.a.a.a.a.a.a.a.t.x u u u u u u u u u u u u c 5.a.1.C c u u c m 3.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u c Z e.a.a.A u u u u u u u u u u u u u u u u u u u u u u u u c M 2.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u u u u u u u u u c F t.a.a.a.a.a.a.a.a.p.$.F c c x z o.a.a.a.a.a.a.a.a.a.a.a.a.a.2.V c u u u u u u c C r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 225 | "..ccccccccccccccccccccccccccaaaaa.................ccccccaaaaa...aaa#######........aaaa........................aaaaaaaaaa..............aaaaaaaaa.......................aaaaaaaaa...............................................................................................", | 330 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u u u u u u u u u u u c c z u u x c u u u u u u u u x c #.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u l o 1 w.a.a.a.a.a.a.a.O.c u u u u u u u u B a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u c u v u u u x } p.a.a.a.a.a.M u u u u u u u u u u u u u u u u u u c v 1.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u c b #.a.a.a.a.a.a.a.{ z u u u u u u u u u u u u u u u u u u u u u u u u u c m 5.a.a.a.a.a.a.a.a.2.Z z c u u u u u V 6.a.a.a.a.a.a.a.a.i.1.{ m c u u u u u u v b +.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 226 | "..cccccccccccccccccccccccccaaaaa.................ccccccaaaa....aaa#######........aaaa...........................aaaaa.................aaaaaaa.................................................................................................................................", | 331 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u c V r.a.a.a.a.a.a.a.a.a.a.a.i.c u u u u u u u u u u u u u z j X . : ,.a.a.a.a.a.a.a.a._ u u u u u u u u x 6.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u u u u c B e.a.a.a.a.a.a.a.c u u u u u u u u u u u u u u u u u c { p.a.a.a.a.a.$.c u u u u u u u u u u u u u u u u u u u x v o.a.a.a.a.a.a.a.a.a.r.c u u u u u u u u u u u u u u u u u u u u u u x x C 2.a.a.a.a.a.a.a.a.3.M c u u u u u u u u z c u m / F D Z C b x c u u u u u u c z A 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 227 | "..cccccccccccccccccccccccaaaaaa..................cccccaaaa.....aaa#######.......aaaa..................................................aaaaaa..................................................................................................................................", | 332 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z c X.a.a.a.a.a.a.a.a.a.a.a.a.a.) z u u u u u u u u u u u u c N < > ^ a.a.a.a.a.a.a.a.a._ u u u u u u u x F a.a.a.a.a.a.a.a.a.a.a.a.a.a.v u u u u u u u u u u u u u u u x c o.a.a.a.a.a.a.a.a.a.u u u u u u u u u u u u u u u x x ) r.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u u u u c c | i.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u c x ` e.a.a.a.a.a.a.a.a.a.6.z u u u u u u u u u u u u u u u u u u u u u u u u u u c v | t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 228 | "...ccccccccccccccccccccaaaaaa....................ccccaaaa.....aaa#######.........a.....................................................aaa....................................................................................................................................", | 333 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.c u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x D r.a.a.a.a.a.a.a.a.a.a.a.a.a.7.z u u u u u u u u u u u u c ) 8 > I a.a.a.a.a.a.a.a.a.a. .x u u u u u u x t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.X.c u u u u u u u u u u u u u c S r.a.a.a.a.a.a.a.a.a.i.z u u u u u u u u u u u u z c ) r.a.a.a.a.a.a.a.a.a.a.2.u u u u u u u u u u u u u u c x C +.i.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.F c c u u u u u u u u u u u u u c c A O.p.a.a.a.a.a.a.a.a.a.a.a.t.M x c c c u u u u u u u u u u u u u u u u u u v c v A 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 229 | "...accccccccccccccccccaaaaaa.......................aaaaa......aaa######.......................................................................................................................................................................................................", | 334 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u x b 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.C u u u u u u u u u u u u c ..;., : 9 a.a.a.a.a.a.a.a.a.a.a.7.c u u u u u x { a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b u u u u u u u u u u c c _ e.a.a.a.a.a.a.a.a.a.a.a.a.` c u u u u u u u u u c v } r.a.a.a.a.a.a.a.a.a.a.a.a.a.1.b c u u u u u u u u c u B O.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.| V z c v v c c c c u c M } 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.1.X.) V v x c v c c u c z c c c z b S .2.t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 230 | "...aacccccccccccccccaaaaaaa.......................aaaaa.......aa#######.......................................................................................................................................................................................................", | 335 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a./ u u u u u u u u u u u u u u u u u u u u u u u u u u u u u z } a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.c u u u u u u u u u u u c @.a.8 , w.a.a.a.a.a.a.a.a.a.a.a.a.S x u u u u z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.5.b c u u u u u u c n O.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.V c u u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.1.F n z v m B S / X.r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.e.3.1.+.@.3.e.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.e.3.1.+.X.X.O.O.@.3.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 231 | "....aaccccccccccccaaaaaaa.........................aaaa.......aaa######........................................................................................................................................................................................................", | 336 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.` u u u u u u u u u u u u u u u u u u u u u u u u u u u c Z e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V u u u u u u u u u u u c 3.a.;., > *.a.a.a.a.a.a.a.a.a.a.a.a.a.i.V c u u x Z a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p...M z u x m / 2.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.| { _ { $.e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 232 | "....aaaaccccccccaaaaaaa..........................aaa.........aaa######........................................................................................................................................................................................................", | 337 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a. .u u u u u u u u u u u u u u u u u u u u u u u u u z b 1.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.z u u u u u u u u u z n e.a.a.9 > K a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.b x m t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 233 | ".....aaaaaaaaaaaaaaaaa......................................aaa######.........................................................................................................................................................................................................", | 338 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.O.c u u u u u u u u u u u u u u u u u u u u u u z c { p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.v u u u u u u u u c Z p.a.a.9.> . 5 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.t.p.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 234 | "......aaaaaaaaaaaaaa........................................aaa####...........................................................................................................................................................................................................", | 339 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.3.c u u u u u u u u u u u u u u u u u u u u c c { t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.c u u u u u u u c { a.a.a.a.K : > 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 235 | ".......aaaaaaaaaaa.........................................aaa#####...........................................................................................................................................................................................................", | 340 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.n u u u u u u u u u u u u u u u u u u x c ` t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.u u u u u u u c #.a.a.a.a.u.> > ~ a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 236 | ".........aaaaaaa...........................................aaa####............................................................................................................................................................................................................", | 341 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o.z u u u u u u u u u u u u u u u u z ` r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.{ c u u u c b 7.a.a.a.a.a.^ , : H a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 237 | "...........................................................aaa####............................................................................................................................................................................................................", | 342 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.p.c u u u u u u u u u u u u u u c ) r.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.D c c v ..p.a.a.a.a.a.a.9 . 6 u.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 238 | "..........................................................aaa####.............................................................................................................................................................................................................", | 343 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.+.c u u u u u u u u u u c c { e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.r.e.a.a.a.a.a.a.a.a.0.> , 0.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 239 | "..........................................................aaa####.............................................................................................................................................................................................................", | 344 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.6.v v z u u u v c c / 3.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.Q : > -.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 240 | "..........................................................aaa###..............................................................................................................................................................................................................", | 345 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.i.1.X.) D | $.7.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y U a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 241 | ".........................................................aaa###...............................................................................................................................................................................................................", | 346 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.L J a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 242 | ".........................................................aaa###...............................................................................................................................................................................................................", | 347 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 243 | ".........................................................a.###................................................................................................................................................................................................................", | 348 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 244 | ".........................................................a.##.................................................................................................................................................................................................................", | 349 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 245 | "...........................................................##.................................................................................................................................................................................................................", | 350 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 246 | "...........................................................#..................................................................................................................................................................................................................", | 351 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 247 | "..........................................................##..................................................................................................................................................................................................................", | 352 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 248 | ".............................................................................................................................................................................................................................................................................." | 353 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", |
| 354 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 355 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 356 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 357 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 358 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 359 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 360 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 361 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 362 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 363 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 364 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 365 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 366 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 367 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 368 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", | ||
| 369 | "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." | ||
| 249 | }; | 370 | }; |
diff --git a/etc/tutorials/TUTORIAL.he b/etc/tutorials/TUTORIAL.he index b3910989509..beb406e0e91 100644 --- a/etc/tutorials/TUTORIAL.he +++ b/etc/tutorials/TUTORIAL.he | |||
| @@ -14,10 +14,10 @@ | |||
| 14 | כדי להפסיק פקודה ב×מצע ההקשה, יש להקיש C-g. | 14 | כדי להפסיק פקודה ב×מצע ההקשה, יש להקיש C-g. |
| 15 | המחרוזת ">>" בקצה ×”×™×ž× ×™ ×ž×¡×ž× ×ª הור×ות ×¢×‘×•×¨×›× ×›×“×™ ×œ× ×¡×•×ª להשתמש בפקודה כלשהי. | 15 | המחרוזת ">>" בקצה ×”×™×ž× ×™ ×ž×¡×ž× ×ª הור×ות ×¢×‘×•×¨×›× ×›×“×™ ×œ× ×¡×•×ª להשתמש בפקודה כלשהי. |
| 16 | לדוגמה: | 16 | לדוגמה: |
| 17 | <<שורות ריקות ×ª×ª×•×•×¡×¤× ×” סביב השורה הב××” ×¢"×™ help-with-tutorial>> | 17 | <<שורות ריקות ×ª×ª×•×•×¡×¤× ×” סביב השורה הב××” ×¢×´×™ help-with-tutorial>> |
| 18 | [×מצע העמוד הוש×ר ריק למטרות לימודיות. הטקסט ממשיך להלן] | 18 | [×מצע העמוד הוש×ר ריק למטרות לימודיות. הטקסט ממשיך להלן] |
| 19 | >> הקישו עתה C-v (הצג העמוד הב×) ×¢×œÖ¾×ž× ×ª ×œ×”×ª×§×“× ×œ×¢×ž×•×“ הב×. (קדימה, × ×¡×• | 19 | >> הקישו עתה C-v (הצג העמוד הב×) ×¢×œÖ¾×ž× ×ª ×œ×”×ª×§×“× ×œ×¢×ž×•×“ הב×. (קדימה, × ×¡×• |
| 20 | ×–×ת ×¢"×™ לחיצה והחזקה של מקש CONTROL והקשה על v.) | 20 | ×–×ת ×¢×´×™ לחיצה והחזקה של מקש CONTROL והקשה על v.) |
| 21 | מעתה והל××”, ×¢×œ×™×›× ×œ×¢×©×•×ª ×–×ת בכל ×¤×¢× ×©×ª×¡×™×™×ž×• ×œ×§×¨×•× ×ת המוצג על המסך. | 21 | מעתה והל××”, ×¢×œ×™×›× ×œ×¢×©×•×ª ×–×ת בכל ×¤×¢× ×©×ª×¡×™×™×ž×• ×œ×§×¨×•× ×ת המוצג על המסך. |
| 22 | 22 | ||
| 23 | שימו לב לחפיפה של שתי שורות ×›×שר ××ª× ×¢×•×‘×¨×™× ×ž×ž×¡×š למשך, מה שמבטיח רציפות | 23 | שימו לב לחפיפה של שתי שורות ×›×שר ××ª× ×¢×•×‘×¨×™× ×ž×ž×¡×š למשך, מה שמבטיח רציפות |
| @@ -99,7 +99,7 @@ P מ־previous (קוד×), N מ־Next (הב×), B מ־Backward (×חורה) | |||
| 99 | לתצוגה. לזה קור××™× "גלילה". גלילה מ×פשרת ל־Emacs ×œ×”× ×™×¢ ×ת הסמן ×œ×ž×§×•× | 99 | לתצוגה. לזה קור××™× "גלילה". גלילה מ×פשרת ל־Emacs ×œ×”× ×™×¢ ×ת הסמן ×œ×ž×§×•× |
| 100 | כלשהו בטקסט מבלי שהסמן ×™×™×¢×œ× ×ž×”×ª×¦×•×’×”. | 100 | כלשהו בטקסט מבלי שהסמן ×™×™×¢×œ× ×ž×”×ª×¦×•×’×”. |
| 101 | 101 | ||
| 102 | >> × ×¡×• ×œ×”× ×™×¢ ×ת הסמן ×ל מחוץ לתצוגה ×¢"×™ הקשת C-n ושימו לב למה שקורה. | 102 | >> × ×¡×• ×œ×”× ×™×¢ ×ת הסמן ×ל מחוץ לתצוגה ×¢×´×™ הקשת C-n ושימו לב למה שקורה. |
| 103 | 103 | ||
| 104 | ×× ×ª× ×•×¢×” תו־תו ×יטית מדי, תוכלו ×œ× ×•×¢ ×ž×™×œ×™× ×©×œ×ž×•×ª. M-f â€(META-f) מזיז | 104 | ×× ×ª× ×•×¢×” תו־תו ×יטית מדי, תוכלו ×œ× ×•×¢ ×ž×™×œ×™× ×©×œ×ž×•×ª. M-f â€(META-f) מזיז |
| 105 | ×ת הסמן מילה ×חת קדימה ו×ילו M-b ×–×– מילה ×חורה. | 105 | ×ת הסמן מילה ×חת קדימה ו×ילו M-b ×–×– מילה ×חורה. |
| @@ -196,18 +196,18 @@ argument) ×ž×©×•× ×ž×§×™×©×™× ×ותו ×œ×¤× ×™ הפקודה ×ליה ×”×•× × | |||
| 196 | >> × ×¡×• עתה להקיש C-u 8 C-v. | 196 | >> × ×¡×• עתה להקיש C-u 8 C-v. |
| 197 | 197 | ||
| 198 | כתוצ××”, התצוגה היתה צריכה לזוז ב־8 שורות. ×× ×‘×¨×¦×•× ×›× ×œ×’×œ×•×œ בחזרה, | 198 | כתוצ××”, התצוגה היתה צריכה לזוז ב־8 שורות. ×× ×‘×¨×¦×•× ×›× ×œ×’×œ×•×œ בחזרה, |
| 199 | ×פשר להשיג ×–×ת ×¢"×™ מתן ××¨×’×•×ž× ×˜ ל־M-v. | 199 | ×פשר להשיג ×–×ת ×¢×´×™ מתן ××¨×’×•×ž× ×˜ ל־M-v. |
| 200 | 200 | ||
| 201 | ×× ×”×¤×¢×œ×ª× ×ת Emacs על־גבי תצוגה גרפית כגון X ×ו MS-Windows, ××ª× | 201 | ×× ×”×¤×¢×œ×ª× ×ת Emacs על־גבי תצוגה גרפית כגון X ×ו MS-Windows, ××ª× |
| 202 | ×¦×¨×™×›×™× ×œ×¨×ות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון | 202 | ×¦×¨×™×›×™× ×œ×¨×ות פס צר וגבוה, ששמו פס גלילה (scroll bar) בצידו של החלון |
| 203 | של Emacs. × ×™×ª×Ÿ לגלול ×ת הטקסט ×¢"×™ הקלקת עכבר בתוך פס הגלילה. | 203 | של Emacs. × ×™×ª×Ÿ לגלול ×ת הטקסט ×¢×´×™ הקלקת עכבר בתוך פס הגלילה. |
| 204 | 204 | ||
| 205 | ×× ×”×¢×›×‘×¨ ×©×œ×›× ×ž×¦×•×™×“ בגלגל, תוכלו להשתמש ×’× ×‘×• לגלילת הטקסט. | 205 | ×× ×”×¢×›×‘×¨ ×©×œ×›× ×ž×¦×•×™×“ בגלגל, תוכלו להשתמש ×’× ×‘×• לגלילת הטקסט. |
| 206 | 206 | ||
| 207 | * ×× Emacs מפסיק להגיב | 207 | * ×× Emacs מפסיק להגיב |
| 208 | ---------------------- | 208 | ---------------------- |
| 209 | 209 | ||
| 210 | ×× Emacs מפסיק להגיב לפקודות, תוכלו להפסיק ×ותו בבטחה ×¢"×™ הקשת C-g. | 210 | ×× Emacs מפסיק להגיב לפקודות, תוכלו להפסיק ×ותו בבטחה ×¢×´×™ הקשת C-g. |
| 211 | פקודות שביצוען מת×רך ××£ הן × ×™×ª× ×•×ª להפסקה בעזרת C-g. | 211 | פקודות שביצוען מת×רך ××£ הן × ×™×ª× ×•×ª להפסקה בעזרת C-g. |
| 212 | 212 | ||
| 213 | ×‘× ×•×¡×£, ×ª×’×¨×•× ×”×§×©×ª C-g לביטול ×”××¨×’×•×ž× ×˜ ×”× ×•×ž×¨×™ ×ו תחילת הפקודה ×©×˜×¨× | 213 | ×‘× ×•×¡×£, ×ª×’×¨×•× ×”×§×©×ª C-g לביטול ×”××¨×’×•×ž× ×˜ ×”× ×•×ž×¨×™ ×ו תחילת הפקודה ×©×˜×¨× |
| @@ -272,7 +272,7 @@ argument) ×ž×©×•× ×ž×§×™×©×™× ×ותו ×œ×¤× ×™ הפקודה ×ליה ×”×•× × | |||
| 272 | יתכן שבמקלדת ×©×œ×›× ×§×™×™× ×ž×§×© שעליו ×¨×©×•× <Delete>, ×ך ×–×” ××™× ×• המקש ש×× ×• | 272 | יתכן שבמקלדת ×©×œ×›× ×§×™×™× ×ž×§×© שעליו ×¨×©×•× <Delete>, ×ך ×–×” ××™× ×• המקש ש×× ×• |
| 273 | קור××™× ×œ×• <DEL>. | 273 | קור××™× ×œ×• <DEL>. |
| 274 | 274 | ||
| 275 | >> הקישו עתה מספר תוי×, ו×חר־כך מחקו ××•×ª× ×¢"×™ הקשות ×חדות | 275 | >> הקישו עתה מספר תוי×, ו×חר־כך מחקו ××•×ª× ×¢×´×™ הקשות ×חדות |
| 276 | על <DEL>. ×ל תחששו ×œ×©× ×•×ª ×ת הקובץ ×”×–×” -- העותק המקורי | 276 | על <DEL>. ×ל תחששו ×œ×©× ×•×ª ×ת הקובץ ×”×–×” -- העותק המקורי |
| 277 | של השיעור ייש×ר ×œ×œ× ×©×™× ×•×™. ××ª× ×¢×•×‘×“×™× ×¢×œ העותק ×”×ישי שלכ×. | 277 | של השיעור ייש×ר ×œ×œ× ×©×™× ×•×™. ××ª× ×¢×•×‘×“×™× ×¢×œ העותק ×”×ישי שלכ×. |
| 278 | 278 | ||
| @@ -402,7 +402,7 @@ argument) ×ž×©×•× ×ž×§×™×©×™× ×ותו ×œ×¤× ×™ הפקודה ×ליה ×”×•× × | |||
| 402 | ×× ×©×™× ×™×ª× ×ת הטקסט ו××– ×”×—×œ×˜×ª× ×©×”×©×™× ×•×™ ×”×™×” טעות, תוכלו לבטל ×ת ×”×©×™× ×•×™ | 402 | ×× ×©×™× ×™×ª× ×ת הטקסט ו××– ×”×—×œ×˜×ª× ×©×”×©×™× ×•×™ ×”×™×” טעות, תוכלו לבטל ×ת ×”×©×™× ×•×™ |
| 403 | בעזרת פקודת הביטול, ‪C-/‬. | 403 | בעזרת פקודת הביטול, ‪C-/‬. |
| 404 | 404 | ||
| 405 | בדרך כלל,‪C-/‬ מבטל ×ת ×”×©×™× ×•×™×™× ×©×‘×•×¦×¢×• ×¢"×™ פקודה ×חת. הפעלה חוזרת של | 405 | בדרך כלל,‪C-/‬ מבטל ×ת ×”×©×™× ×•×™×™× ×©×‘×•×¦×¢×• ×¢×´×™ פקודה ×חת. הפעלה חוזרת של |
| 406 | ‪C-/‬ ברצף מבטלת ×©×™× ×•×™×™× ×©×œ פקודות קודמות, ×חת ×חרי ×”×©× ×™×”. | 406 | ‪C-/‬ ברצף מבטלת ×©×™× ×•×™×™× ×©×œ פקודות קודמות, ×חת ×חרי ×”×©× ×™×”. |
| 407 | 407 | ||
| 408 | ×©× ×™ יוצ××™× ×ž×”×›×œ×œ ×”×–×”: פקודות ש××™× ×Ÿ ×ž×©× ×•×ª טקסט (למשל פקודות ×”× ×¢×ª הסמן | 408 | ×©× ×™ יוצ××™× ×ž×”×›×œ×œ ×”×–×”: פקודות ש××™× ×Ÿ ×ž×©× ×•×ª טקסט (למשל פקודות ×”× ×¢×ª הסמן |
| @@ -468,7 +468,7 @@ C-x u, ××Ö¾×›×™ ×”×™× ×¤×—×•×ª × ×•×—×” להקשה מספר ×¤×¢×ž×™× ×‘×–×• | |||
| 468 | 468 | ||
| 469 | פקודה זו שומרת בקובץ ×ת הטקסט המוחזק בתוך Emacs. ×‘×¤×¢× ×”×¨××©×•× ×” שתפעילו | 469 | פקודה זו שומרת בקובץ ×ת הטקסט המוחזק בתוך Emacs. ×‘×¤×¢× ×”×¨××©×•× ×” שתפעילו |
| 470 | פקודה זו, Emacs ×ž×©× ×” ×ת ×©× ×”×§×•×‘×¥ המקורי ×œ×©× ×—×“×© כך שהמקור ×œ× ×™×œ×š | 470 | פקודה זו, Emacs ×ž×©× ×” ×ת ×©× ×”×§×•×‘×¥ המקורי ×œ×©× ×—×“×© כך שהמקור ×œ× ×™×œ×š |
| 471 | ל×יבוד. ×”×©× ×”×—×“×© × ×•×¦×¨ ×¢"×™ הוספת "~" בסוף ×”×©× ×”×ž×§×•×¨×™ של הקובץ. | 471 | ל×יבוד. ×”×©× ×”×—×“×© × ×•×¦×¨ ×¢×´×™ הוספת "~" בסוף ×”×©× ×”×ž×§×•×¨×™ של הקובץ. |
| 472 | 472 | ||
| 473 | כשהשמירה מסתיימת, Emacs מציג בשורה ×”×ª×—×ª×•× ×” ×ת ×©× ×”×§×•×‘×¥ ×©× ×©×ž×¨. × ×¡×• | 473 | כשהשמירה מסתיימת, Emacs מציג בשורה ×”×ª×—×ª×•× ×” ×ת ×©× ×”×§×•×‘×¥ ×©× ×©×ž×¨. × ×¡×• |
| 474 | לשמור ×œ×¢×ª×™× ×ž×–×•×ž× ×•×ª ×¢×œÖ¾×ž× ×ª ×œ×”×™×ž× ×¢ מל×בד יותר מדי מהעבודה ×©×œ×›× ×× ×”×ž×—×©×‘ | 474 | לשמור ×œ×¢×ª×™× ×ž×–×•×ž× ×•×ª ×¢×œÖ¾×ž× ×ª ×œ×”×™×ž× ×¢ מל×בד יותר מדי מהעבודה ×©×œ×›× ×× ×”×ž×—×©×‘ |
| @@ -489,7 +489,7 @@ Emacs ייצור ×ת הקובץ ×¢× ×”×˜×§×¡×˜ שהקשת×. מ×ותו רגע | |||
| 489 | -------- | 489 | -------- |
| 490 | 490 | ||
| 491 | ×× ×ª×¤×ª×—×• קובץ × ×•×¡×£ ×¢× C-x C-f, הקובץ הר×שון עדיין × ×©×ר פתוח ב־Emacs. | 491 | ×× ×ª×¤×ª×—×• קובץ × ×•×¡×£ ×¢× C-x C-f, הקובץ הר×שון עדיין × ×©×ר פתוח ב־Emacs. |
| 492 | תוכלו לחזור ×ליו ×¢"×™ C-x C-f. כך תוכלו לפתוח מספר רב של קבצי×. | 492 | תוכלו לחזור ×ליו ×¢×´×™ C-x C-f. כך תוכלו לפתוח מספר רב של קבצי×. |
| 493 | 493 | ||
| 494 | â€Emacs מחזיק כל קובץ בתוך יישות ×‘×©× "חוצץ" ("buffer"). פתיחת קובץ יוצרת | 494 | â€Emacs מחזיק כל קובץ בתוך יישות ×‘×©× "חוצץ" ("buffer"). פתיחת קובץ יוצרת |
| 495 | חוצץ חדש בתוך Emacs. כדי לר×ות ×ת רשימת ×”×—×•×¦×¦×™× ×”×§×™×™×ž×™× ×‘×ª×•×š Emacs, | 495 | חוצץ חדש בתוך Emacs. כדי לר×ות ×ת רשימת ×”×—×•×¦×¦×™× ×”×§×™×™×ž×™× ×‘×ª×•×š Emacs, |
| @@ -508,19 +508,19 @@ Emacs ייצור ×ת הקובץ ×¢× ×”×˜×§×¡×˜ שהקשת×. מ×ותו רגע | |||
| 508 | ×›×©×§×™×™×ž×™× ×ž×¡×¤×¨ חוצצי×, רק ×חד ×ž×”× ×™×›×•×œ להיות החוצץ "×”× ×•×›×—×™" בכל רגע | 508 | ×›×©×§×™×™×ž×™× ×ž×¡×¤×¨ חוצצי×, רק ×חד ×ž×”× ×™×›×•×œ להיות החוצץ "×”× ×•×›×—×™" בכל רגע |
| 509 | × ×ª×•×Ÿ. זהו החוצץ בו ××ª× ×ž×‘×¦×¢×™× ×¢×¨×™×›×” ב×ותו רגע. ×× ×‘×¨×¦×•× ×›× ×œ×¢×¨×•×š חוצץ | 509 | × ×ª×•×Ÿ. זהו החוצץ בו ××ª× ×ž×‘×¦×¢×™× ×¢×¨×™×›×” ב×ותו רגע. ×× ×‘×¨×¦×•× ×›× ×œ×¢×¨×•×š חוצץ |
| 510 | ×חר, ×¢×œ×™×›× "לעבור" חוצץ. עבור ×—×•×¦×¦×™× ×©×ž×ª××™×ž×™× ×œ×§×‘×¦×™×, × ×™×ª×Ÿ לעשות ×–×ת | 510 | ×חר, ×¢×œ×™×›× "לעבור" חוצץ. עבור ×—×•×¦×¦×™× ×©×ž×ª××™×ž×™× ×œ×§×‘×¦×™×, × ×™×ª×Ÿ לעשות ×–×ת |
| 511 | ×¢"×™ C-x C-f שיפקוד ×ת הקובץ ×‘×©× ×™×ª. ×בל קיימת דרך פשוטה יותר: שימוש | 511 | ×¢×´×™ C-x C-f שיפקוד ×ת הקובץ ×‘×©× ×™×ª. ×בל קיימת דרך פשוטה יותר: שימוש |
| 512 | בפקודה C-x b. פקודה זו תחייב ××•×ª×›× ×œ×”×§×™×© ×ת ×©× ×”×—×•×¦×¥. | 512 | בפקודה C-x b. פקודה זו תחייב ××•×ª×›× ×œ×”×§×™×© ×ת ×©× ×”×—×•×¦×¥. |
| 513 | 513 | ||
| 514 | >> × ×™×¦×•×¨ עתה קובץ ×‘×©× "foo" ×¢"×™ הקשת C-x C-f foo <Return>‎. | 514 | >> × ×™×¦×•×¨ עתה קובץ ×‘×©× "foo" ×¢×´×™ הקשת C-x C-f foo <Return>‎. |
| 515 | עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he <Return>‎. | 515 | עתה חזרו לשיעור זה בעזרת C-x b TUTORIAL.he <Return>‎. |
| 516 | 516 | ||
| 517 | ברוב ×”×ž×§×¨×™× ×©× ×”×—×•×¦×¥ ×–×”×” ×œ×©× ×”×§×•×‘×¥ (×œ×œ× ×©× ×”×ª×™×§×™×” שלו). ×בל ×ין ×–×” | 517 | ברוב ×”×ž×§×¨×™× ×©× ×”×—×•×¦×¥ ×–×”×” ×œ×©× ×”×§×•×‘×¥ (×œ×œ× ×©× ×”×ª×™×§×™×” שלו). ×בל ×ין ×–×” |
| 518 | תמיד כך. רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×ª ×¢"×™ C-x C-b תציג הן ×ת ×©× ×”×—×•×¦×¥ והן ×ת | 518 | תמיד כך. רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×ª ×¢×´×™ C-x C-b תציג הן ×ת ×©× ×”×—×•×¦×¥ והן ×ת |
| 519 | ×©× ×”×§×•×‘×¥ עבור כל ×”×—×•×¦×¦×™× ×”×§×™×™×ž×™× ×‘Ö¾Emacs. | 519 | ×©× ×”×§×•×‘×¥ עבור כל ×”×—×•×¦×¦×™× ×”×§×™×™×ž×™× ×‘Ö¾Emacs. |
| 520 | 520 | ||
| 521 | כל טקסט שמוצג בחלון של Emacs ×”×™× ×• תמיד חלק של חוצץ כלשהו. ×§×™×™×ž×™× | 521 | כל טקסט שמוצג בחלון של Emacs ×”×™× ×• תמיד חלק של חוצץ כלשהו. ×§×™×™×ž×™× |
| 522 | ×—×•×¦×¦×™× ×©××™× × ×§×©×•×¨×™× ×œ×©×•× ×§×•×‘×¥. לדוגמ×, החוצץ ×‘×©× "*Buffer List*" | 522 | ×—×•×¦×¦×™× ×©××™× × ×§×©×•×¨×™× ×œ×©×•× ×§×•×‘×¥. לדוגמ×, החוצץ ×‘×©× "*Buffer List*" |
| 523 | המחזיק ×ת רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×” ×¢"×™ C-x C-b ××™× ×• מציג ×©×•× ×§×•×‘×¥. ×’× | 523 | המחזיק ×ת רשימת ×”×—×•×¦×¦×™× ×©× ×•×¦×¨×” ×¢×´×™ C-x C-b ××™× ×• מציג ×©×•× ×§×•×‘×¥. ×’× |
| 524 | לחוצץ ×”× ×•×›×—×™ ששמו TUTORIAL.he ×œ× ×”×™×” קובץ עד ×©×”×§×©×ª× ×¢×œ C-x C-s כדי | 524 | לחוצץ ×”× ×•×›×—×™ ששמו TUTORIAL.he ×œ× ×”×™×” קובץ עד ×©×”×§×©×ª× ×¢×œ C-x C-s כדי |
| 525 | לשמור ×ותו בקובץ. | 525 | לשמור ×ותו בקובץ. |
| 526 | 526 | ||
| @@ -545,18 +545,18 @@ C-x C-s. לכן קיימת פקודה | |||
| 545 | 545 | ||
| 546 | >> ×”×›× ×™×¡×• שורה של טקסט ו×חר־כך הקישו C-x s. | 546 | >> ×”×›× ×™×¡×• שורה של טקסט ו×חר־כך הקישו C-x s. |
| 547 | ×”×•× ×¦×¨×™×š לש×ול ×”×× ×œ×©×ž×•×¨ חוצץ ×‘×©× TUTORIAL.he. | 547 | ×”×•× ×¦×¨×™×š לש×ול ×”×× ×œ×©×ž×•×¨ חוצץ ×‘×©× TUTORIAL.he. |
| 548 | השיבו בחיוב ע"י הקשה על "y". | 548 | השיבו בחיוב ע״י הקשה על "y". |
| 549 | 549 | ||
| 550 | 550 | ||
| 551 | * הרחבת ×וסף הפקודות | 551 | * הרחבת ×וסף הפקודות |
| 552 | -------------------- | 552 | -------------------- |
| 553 | 553 | ||
| 554 | מספר הפקודות ב־Emacs גדול בהרבה ממה ×©× ×™×ª×Ÿ להפעיל ×¢"×™ כל תוי ×”Ö¾control | 554 | מספר הפקודות ב־Emacs גדול בהרבה ממה ×©× ×™×ª×Ÿ להפעיל ×¢×´×™ כל תוי ×”Ö¾control |
| 555 | וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend) | 555 | וה־meta. כדי להתגבר על בעיה זו, Emacs משתמש בפקודות X המרחיבות (eXtend) |
| 556 | ×ת ×וסף הפקודות הרגיל. פקודות הרחבה ×לו הן שתי×: | 556 | ×ת ×וסף הפקודות הרגיל. פקודות הרחבה ×לו הן שתי×: |
| 557 | 557 | ||
| 558 | â€C-x הרחבת תו. תו בודד ×©×‘× ×חריו ×ž×©×œ×™× ×ת הפקודה. | 558 | â€C-x הרחבת תו. תו בודד ×©×‘× ×חריו ×ž×©×œ×™× ×ת הפקודה. |
| 559 | â€M-x הרחבה ×¢"×™ ×©× ×”×¤×§×•×“×”. ×חריו ×‘× ×©× ×רוך של פקודה. | 559 | â€M-x הרחבה ×¢×´×™ ×©× ×”×¤×§×•×“×”. ×חריו ×‘× ×©× ×רוך של פקודה. |
| 560 | 560 | ||
| 561 | בעזרת שתי ×לו × ×™×ª×Ÿ להפעיל פקודות שימושיות שבהן ×ž×©×ª×ž×©×™× ×œ×¢×ª×™× ×¨×—×•×§×•×ª | 561 | בעזרת שתי ×לו × ×™×ª×Ÿ להפעיל פקודות שימושיות שבהן ×ž×©×ª×ž×©×™× ×œ×¢×ª×™× ×¨×—×•×§×•×ª |
| 562 | יותר מ×שר פקודות ×©×œ×ž×“×ª× ×¢×“ עכשיו. כמה מהן כבר ר×ית×: C-x C-f לפתיחת | 562 | יותר מ×שר פקודות ×©×œ×ž×“×ª× ×¢×“ עכשיו. כמה מהן כבר ר×ית×: C-x C-f לפתיחת |
| @@ -577,7 +577,7 @@ Emacs: ×”×•× ×ž×—×–×™×¨ ××ª×›× ×œ×©×•×¨×ª הפקודות הבסיסית של | |||
| 577 | תצטרכו להקיש ×ת הפקודה "fg" ×ו ‪"%emacs"‬. | 577 | תצטרכו להקיש ×ת הפקודה "fg" ×ו ‪"%emacs"‬. |
| 578 | 578 | ||
| 579 | הרגע ×”× ×›×•×Ÿ להשתמש ב־C-x C-c ×”×•× ×›×שר ××ª× ×¢×•×ž×“×™× ×œ×”×ª× ×ª×§ (log out). | 579 | הרגע ×”× ×›×•×Ÿ להשתמש ב־C-x C-c ×”×•× ×›×שר ××ª× ×¢×•×ž×“×™× ×œ×”×ª× ×ª×§ (log out). |
| 580 | כמו־כן, תצטרכו להשתמש בו כדי לצ×ת מ־Emacs שהופעל ×¢"×™ ×ª×•×›× ×™×•×ª ×חרות | 580 | כמו־כן, תצטרכו להשתמש בו כדי לצ×ת מ־Emacs שהופעל ×¢×´×™ ×ª×•×›× ×™×•×ª ×חרות |
| 581 | כגון קרי×ת דו×ר ××œ×§×˜×¨×•× ×™. | 581 | כגון קרי×ת דו×ר ××œ×§×˜×¨×•× ×™. |
| 582 | 582 | ||
| 583 | קיימות פקודות C-x רבות מ×ד. להלן רשימת ×לו שכבר למדת×: | 583 | קיימות פקודות C-x רבות מ×ד. להלן רשימת ×לו שכבר למדת×: |
| @@ -591,17 +591,17 @@ Emacs: ×”×•× ×ž×—×–×™×¨ ××ª×›× ×œ×©×•×¨×ª הפקודות הבסיסית של | |||
| 591 | â€C-x 1 הש×ר רק חלון ×חד ומחק כל הש×ר | 591 | â€C-x 1 הש×ר רק חלון ×חד ומחק כל הש×ר |
| 592 | â€C-x u בטל פקודה ××—×¨×•× ×” | 592 | â€C-x u בטל פקודה ××—×¨×•× ×” |
| 593 | 593 | ||
| 594 | הרחבה ×¢"×™ ×©× ×”×¤×§×•×“×” שימושית ×¢× ×¤×§×•×“×•×ª עוד יותר × ×“×™×¨×•×ª ×ו פקודות | 594 | הרחבה ×¢×´×™ ×©× ×”×¤×§×•×“×” שימושית ×¢× ×¤×§×•×“×•×ª עוד יותר × ×“×™×¨×•×ª ×ו פקודות |
| 595 | ספציפיות רק ל××•×¤× ×™ פעולה (modes) מיוחדי×. ×“×•×’×ž× ×œ×›×š ×”×™× ×¤×§×•×“×” | 595 | ספציפיות רק ל××•×¤× ×™ פעולה (modes) מיוחדי×. ×“×•×’×ž× ×œ×›×š ×”×™× ×¤×§×•×“×” |
| 596 | replace-string (החלף מחרוזת) ×שר מחליפה מחרוזת ×חת ×‘×ž×©× ×” בכל החוצץ. | 596 | replace-string (החלף מחרוזת) ×שר מחליפה מחרוזת ×חת ×‘×ž×©× ×” בכל החוצץ. |
| 597 | ×חרי שתקישו M-x, â€Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו ×ת ×©× | 597 | ×חרי שתקישו M-x, â€Emacs מציג M-x בתחתית התצוגה ומחכה שתקישו ×ת ×©× |
| 598 | הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s<TAB>‎" ו־Emacs | 598 | הפקודה, במקרה זה "replace-string". מספיק שתקישו "repl s<TAB>‎" ו־Emacs |
| 599 | ×™×©×œ×™× ×ת ×”×©× ×”×ž×œ×. (<TAB> ×”×•× ×ž×§×© Tab, בדרך כלל תמצ×ו ×ותו מעל מקש | 599 | ×™×©×œ×™× ×ת ×”×©× ×”×ž×œ×. (<TAB> ×”×•× ×ž×§×© Tab, בדרך כלל תמצ×ו ×ותו מעל מקש |
| 600 | ×”Ö¾CapsLock ×ו Shift, ליד הקצה השמ×לי של המקלדת.) סיימו ×ת ×”×–× ×ª הפקודה | 600 | ×”Ö¾CapsLock ×ו Shift, ליד הקצה השמ×לי של המקלדת.) סיימו ×ת ×”×–× ×ª הפקודה |
| 601 | ע"י הקשת <Return>. | 601 | ע״י הקשת <Return>. |
| 602 | 602 | ||
| 603 | הפקודה להחלפת מחרוזת זקוקה ×œ×©× ×™ ××¨×’×•×ž× ×˜×™× -- המחרוזת שתוחלף וזו שתחליף | 603 | הפקודה להחלפת מחרוזת זקוקה ×œ×©× ×™ ××¨×’×•×ž× ×˜×™× -- המחרוזת שתוחלף וזו שתחליף |
| 604 | ×ותה. סיימו הקשה של כל ×חת מהן ×¢"×™ <Return>. | 604 | ×ותה. סיימו הקשה של כל ×חת מהן ×¢×´×™ <Return>. |
| 605 | 605 | ||
| 606 | >> הבי×ו ×ת הסמן שתי שורות מתחת לשורה זו. | 606 | >> הבי×ו ×ת הסמן שתי שורות מתחת לשורה זו. |
| 607 | עתה הקישו M-x repl s<Return>changed<Return>altered<Return>‎. | 607 | עתה הקישו M-x repl s<Return>changed<Return>altered<Return>‎. |
| @@ -703,7 +703,7 @@ Auto Fill mode. ×›×שר ×ופן ×–×” מופעל, Emacs ×וטומטית פות | |||
| 703 | ×‘×¡×™×•× ×ž×™×œ×” ×× ×”×˜×§×¡×˜ ×©×”×§×©×ª× ×רוך מדי בשביל שורה ×חת. | 703 | ×‘×¡×™×•× ×ž×™×œ×” ×× ×”×˜×§×¡×˜ ×©×”×§×©×ª× ×רוך מדי בשביל שורה ×חת. |
| 704 | 704 | ||
| 705 | להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode <Return>‎. ×›×שר ×ופן | 705 | להפעלת Auto Fill mode יש להקיש M-x auto-fill-mode <Return>‎. ×›×שר ×ופן |
| 706 | ×–×” מופעל, × ×™×ª×Ÿ לבטלו ×¢"×™ M-x auto-fill-mode <Return>‎. ×–×ת ×ומרת, פקודה | 706 | ×–×” מופעל, × ×™×ª×Ÿ לבטלו ×¢×´×™ M-x auto-fill-mode <Return>‎. ×–×ת ×ומרת, פקודה |
| 707 | זו מפעילה ×ת ×”×ופן כש××™× ×• פעיל ומבטלת ×ותו ×›×©×”×•× ×¤×¢×™×œ. לפעולה זו | 707 | זו מפעילה ×ת ×”×ופן כש××™× ×• פעיל ומבטלת ×ותו ×›×©×”×•× ×¤×¢×™×œ. לפעולה זו |
| 708 | קור××™× "מיתוג" -- הפקודה "ממתגת" ×ת ×”×ופן. | 708 | קור××™× "מיתוג" -- הפקודה "ממתגת" ×ת ×”×ופן. |
| 709 | 709 | ||
| @@ -717,7 +717,7 @@ Auto Fill mode. ×›×שר ×ופן ×–×” מופעל, Emacs ×וטומטית פות | |||
| 717 | 717 | ||
| 718 | >> הקישו C-x f ×¢× ××¨×’×•×ž× ×˜ של 20. (C-u 2 0 C-x f). ×חר־כך הקישו טקסט | 718 | >> הקישו C-x f ×¢× ××¨×’×•×ž× ×˜ של 20. (C-u 2 0 C-x f). ×חר־כך הקישו טקסט |
| 719 | כלשהו ושימו לב ש־Emacs פותח שורות חדשות ×חרי 20 ×ª×•×•×™× ×œ×›×œ היותר. | 719 | כלשהו ושימו לב ש־Emacs פותח שורות חדשות ×חרי 20 ×ª×•×•×™× ×œ×›×œ היותר. |
| 720 | לבסוף, החזירו ×ת הגדרת ×”×©×•×œ×™×™× ×œÖ¾70 ×¢"×™ שימוש חוזר ב־C-x f. | 720 | לבסוף, החזירו ×ת הגדרת ×”×©×•×œ×™×™× ×œÖ¾70 ×¢×´×™ שימוש חוזר ב־C-x f. |
| 721 | 721 | ||
| 722 | ×× ×¢×¨×›×ª× ×©×™× ×•×™×™× ×‘×מצע פסקה, Auto Fill mode ×œ× ×™×ž×œ× ×©×•×¨×•×ª מחדש ב×ופן | 722 | ×× ×¢×¨×›×ª× ×©×™× ×•×™×™× ×‘×מצע פסקה, Auto Fill mode ×œ× ×™×ž×œ× ×©×•×¨×•×ª מחדש ב×ופן |
| 723 | ×וטומטי. | 723 | ×וטומטי. |
| @@ -766,7 +766,7 @@ Auto Fill mode. ×›×שר ×ופן ×–×” מופעל, Emacs ×וטומטית פות | |||
| 766 | × ×ž×¦× "סמ". עתה הקישו <DEL>. ×”Ö¾"מ" × ×ž×—×§ מהמחרוזת והסמן חוזר ×œ×ž×§×•× ×‘×• | 766 | × ×ž×¦× "סמ". עתה הקישו <DEL>. ×”Ö¾"מ" × ×ž×—×§ מהמחרוזת והסמן חוזר ×œ×ž×§×•× ×‘×• |
| 767 | ×”×•× ×ž×¦× ×ת "ס" לר××©×•× ×”. | 767 | ×”×•× ×ž×¦× ×ת "ס" לר××©×•× ×”. |
| 768 | 768 | ||
| 769 | ×× ×‘×ž×”×œ×š החיפוש תפעילו פקודה כלשהי ×¢"×™ הקשה על מקש תוך לחיצה על | 769 | ×× ×‘×ž×”×œ×š החיפוש תפעילו פקודה כלשהי ×¢×´×™ הקשה על מקש תוך לחיצה על |
| 770 | CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž×›×œ×œ ×–×” -- ×לו ×ª×•×•×™× | 770 | CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž×›×œ×œ ×–×” -- ×לו ×ª×•×•×™× |
| 771 | ×ž×™×•×—×“×™× ×‘×¢×ª חיפוש, כדוגמת C-s ו־C-r.) | 771 | ×ž×™×•×—×“×™× ×‘×¢×ª חיפוש, כדוגמת C-s ו־C-r.) |
| 772 | 772 | ||
| @@ -800,7 +800,7 @@ CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž | |||
| 800 | הסמן בחלון העליון ייש×ר ×‘×ž×§×•× ×‘×• ×”×•× ×”×™×” ×œ×¤× ×™Ö¾×›×Ÿ. | 800 | הסמן בחלון העליון ייש×ר ×‘×ž×§×•× ×‘×• ×”×•× ×”×™×” ×œ×¤× ×™Ö¾×›×Ÿ. |
| 801 | 801 | ||
| 802 | תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין ×”×—×œ×•× ×•×ª. "החלון ×”× ×‘×—×¨", ×ותו | 802 | תוכלו להמשיך להשתמש ב־C-x o כדי לדלג בין ×”×—×œ×•× ×•×ª. "החלון ×”× ×‘×—×¨", ×ותו |
| 803 | חלון בו ×”× ×›× ×¢×•×¨×›×™× ×˜×§×¡×˜, מזוהה ×¢"×™ סמן בולט שמהבהב בזמן ש××™× ×›× | 803 | חלון בו ×”× ×›× ×¢×•×¨×›×™× ×˜×§×¡×˜, מזוהה ×¢×´×™ סמן בולט שמהבהב בזמן ש××™× ×›× |
| 804 | מקלידי×. לכל ×”×—×œ×•× ×•×ª ×”××—×¨×™× ×ž×™×§×•× ×¡×ž×Ÿ משלה×; ×× ×”×¤×¢×œ×ª× ×ת Emacs על צג | 804 | מקלידי×. לכל ×”×—×œ×•× ×•×ª ×”××—×¨×™× ×ž×™×§×•× ×¡×ž×Ÿ משלה×; ×× ×”×¤×¢×œ×ª× ×ת Emacs על צג |
| 805 | גרפי, ×ž×™×§×•× ×”×¡×ž×Ÿ ×‘×—×œ×•× ×•×ª ×”××—×¨×™× ×ž×•×¦×’ כתיבה ריקה ש××™× ×” מהבהבת. | 805 | גרפי, ×ž×™×§×•× ×”×¡×ž×Ÿ ×‘×—×œ×•× ×•×ª ×”××—×¨×™× ×ž×•×¦×’ כתיבה ריקה ש××™× ×” מהבהבת. |
| 806 | 806 | ||
| @@ -809,9 +809,9 @@ CONTROL ×ו META, החיפוש יסתיי×. (כמה ×ª×•×•×™× ×™×•×¦××™× ×ž | |||
| 809 | ×”× ×‘×—×¨. | 809 | ×”× ×‘×—×¨. |
| 810 | 810 | ||
| 811 | â€C-M-v ×”×™× ×“×•×’×ž× ×חת של פקודת CONTROL-META. ×× ×‘×ž×§×œ×“×ª ×©×œ×›× ×§×™×™× ×ž×§×© | 811 | â€C-M-v ×”×™× ×“×•×’×ž× ×חת של פקודת CONTROL-META. ×× ×‘×ž×§×œ×“×ª ×©×œ×›× ×§×™×™× ×ž×§×© |
| 812 | META (×ו Alt) ×מיתי, תוכלו להקיש ×ת הפקודה ×¢"×™ לחיצה והחזקה של מקשי | 812 | META (×ו Alt) ×מיתי, תוכלו להקיש ×ת הפקודה ×¢×´×™ לחיצה והחזקה של מקשי |
| 813 | CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו על CONTROL ו־META | 813 | CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו על CONTROL ו־META |
| 814 | ××™× ×• ×ž×©× ×” ×›×™ ×©× ×™ ×”×ž×§×©×™× ×”×œ×œ×• ×¤×•×¢×œ×™× ×¢"×™ ×©×™× ×•×™ התו המוקש יחד ×ית×. | 814 | ××™× ×• ×ž×©× ×” ×›×™ ×©× ×™ ×”×ž×§×©×™× ×”×œ×œ×• ×¤×•×¢×œ×™× ×¢×´×™ ×©×™× ×•×™ התו המוקש יחד ×ית×. |
| 815 | 815 | ||
| 816 | ×× ×ין במקלדת מקש META ×מיתי ו××ª× ×ž×©×ª×ž×©×™× ×‘Ö¾<ESC> כתחליף, הסדר כן | 816 | ×× ×ין במקלדת מקש META ×מיתי ו××ª× ×ž×©×ª×ž×©×™× ×‘Ö¾<ESC> כתחליף, הסדר כן |
| 817 | ×ž×©× ×”: ×—×™×™×‘×™× ×œ×”×§×™×© <ESC> ורק ל×חר מכן CONTROL-v, וז×ת ×ž×©×•× | 817 | ×ž×©× ×”: ×—×™×™×‘×™× ×œ×”×§×™×© <ESC> ורק ל×חר מכן CONTROL-v, וז×ת ×ž×©×•× |
| @@ -854,8 +854,8 @@ CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו ×¢× | |||
| 854 | >> הקישו M-x delete-frame <Return>‎. | 854 | >> הקישו M-x delete-frame <Return>‎. |
| 855 | ×”×ª×‘× ×™×ª שבה ×”×§×©×ª× ×ת הפקודה תיסגר ×•×ª×™×¢×œ× ×ž×”×ž×¡×š. | 855 | ×”×ª×‘× ×™×ª שבה ×”×§×©×ª× ×ת הפקודה תיסגר ×•×ª×™×¢×œ× ×ž×”×ž×¡×š. |
| 856 | 856 | ||
| 857 | כמו־כן, × ×™×ª×Ÿ לסגור ×ª×‘× ×™×ª בדרך הרגילה ×”× ×ª×ž×›×ª ×¢"×™ התצוגה הגרפית של | 857 | כמו־כן, × ×™×ª×Ÿ לסגור ×ª×‘× ×™×ª בדרך הרגילה ×”× ×ª×ž×›×ª ×¢×´×™ התצוגה הגרפית של |
| 858 | המערכת ×©×œ×›× (בדרך־כלל, ×¢"×™ הקלקה על הכפתור המסומן ב־"X" ×‘×¤×™× ×” ×¢×œ×™×•× ×” | 858 | המערכת ×©×œ×›× (בדרך־כלל, ×¢×´×™ הקלקה על הכפתור המסומן ב־"X" ×‘×¤×™× ×” ×¢×œ×™×•× ×” |
| 859 | של ×”×ª×‘× ×™×ª.) ×©×•× ×ž×™×“×¢ ××™× ×• הולך לעיבוד ×›×שר ×¡×•×’×¨×™× ×ª×‘× ×™×ª (×ו חלון). | 859 | של ×”×ª×‘× ×™×ª.) ×©×•× ×ž×™×“×¢ ××™× ×• הולך לעיבוד ×›×שר ×¡×•×’×¨×™× ×ª×‘× ×™×ª (×ו חלון). |
| 860 | המידע ×”×–×” פשוט יורד מהתצוגה, ×בל × ×™×ª×Ÿ ל×חזרו מ×וחר יותר. | 860 | המידע ×”×–×” פשוט יורד מהתצוגה, ×בל × ×™×ª×Ÿ ל×חזרו מ×וחר יותר. |
| 861 | 861 | ||
| @@ -863,7 +863,7 @@ CONTROL ו־META ×’× ×™×—×“ ו××– להקיש v. הסדר שבו תלחצו ×¢× | |||
| 863 | * רמות עריכה רקורסיביות | 863 | * רמות עריכה רקורסיביות |
| 864 | ----------------------- | 864 | ----------------------- |
| 865 | 865 | ||
| 866 | יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין ×–×ת ×¢"×™ | 866 | יתכן ותיקלעו למצב שקרוי "רמת עריכה רקורסיבית". Emacs מציין ×–×ת ×¢×´×™ |
| 867 | ×¡×•×’×¨×™×™× ×ž×¨×•×‘×¢×™× ×‘×©×•×¨×ª הסטטוס מסביב ×œ×©× ×”×ופן הר×שי. למשל, יוצג ×©× | 867 | ×¡×•×’×¨×™×™× ×ž×¨×•×‘×¢×™× ×‘×©×•×¨×ª הסטטוס מסביב ×œ×©× ×”×ופן הר×שי. למשל, יוצג ×©× |
| 868 | [(Fundamental)] ×‘×ž×§×•× (Fundamental). | 868 | [(Fundamental)] ×‘×ž×§×•× (Fundamental). |
| 869 | 869 | ||
| @@ -910,7 +910,7 @@ M-x help <Return>‎ כתחליף.) | |||
| 910 | לציין מה הן עושות, השמות ×¢×©×•×™×™× ×œ×©×ž×© כתיעוד מקוצר -- מספיק כדי להזכיר | 910 | לציין מה הן עושות, השמות ×¢×©×•×™×™× ×œ×©×ž×© כתיעוד מקוצר -- מספיק כדי להזכיר |
| 911 | ×œ×›× ×ת הפקודות ×©×œ×ž×“×ª× ×‘×¢×‘×¨. | 911 | ×œ×›× ×ת הפקודות ×©×œ×ž×“×ª× ×‘×¢×‘×¨. |
| 912 | 912 | ||
| 913 | × ×™×ª×Ÿ לציין ×חרי C-h c ×’× ×¤×§×•×“×•×ª שמופעלות ×¢"×™ סדרת ×ž×§×©×™× ×‘×ורך גדול | 913 | × ×™×ª×Ÿ לציין ×חרי C-h c ×’× ×¤×§×•×“×•×ª שמופעלות ×¢×´×™ סדרת ×ž×§×©×™× ×‘×ורך גדול |
| 914 | מ×חד, כגון C-x C-s ×ו (×× ×ין מקש META ×ו EDIT ×ו ALT) â€â€Ž<ESC> v. | 914 | מ×חד, כגון C-x C-s ×ו (×× ×ין מקש META ×ו EDIT ×ו ALT) â€â€Ž<ESC> v. |
| 915 | 915 | ||
| 916 | לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k ×‘×ž×§×•× C-h c. | 916 | לקבלת מידע מפורט יותר על פקודה, השתמשו בפקודה C-h k ×‘×ž×§×•× C-h c. |
| @@ -934,7 +934,7 @@ M-x help <Return>‎ כתחליף.) | |||
| 934 | 934 | ||
| 935 | â€C-h a פקודות ×‘× ×•×’×¢ ×œ× ×•×©× ×ž×¡×•×™×™×. הקישו מילת מפתח ו־Emacs | 935 | â€C-h a פקודות ×‘× ×•×’×¢ ×œ× ×•×©× ×ž×¡×•×™×™×. הקישו מילת מפתח ו־Emacs |
| 936 | יציג ×ת רשימת הפקודות ששמותיהן מכילות ×ת מילת המפתח. | 936 | יציג ×ת רשימת הפקודות ששמותיהן מכילות ×ת מילת המפתח. |
| 937 | כל הפקודות הללו × ×™×ª× ×•×ª להפעלה ×¢"×™ META-x. עבור חלק | 937 | כל הפקודות הללו × ×™×ª× ×•×ª להפעלה ×¢×´×™ META-x. עבור חלק |
| 938 | מהפקודות תוצג ×’× ×¡×“×¨×ª ×ž×§×©×™× ×©×ž×¤×¢×™×œ×” ×ת הפקודה. | 938 | מהפקודות תוצג ×’× ×¡×“×¨×ª ×ž×§×©×™× ×©×ž×¤×¢×™×œ×” ×ת הפקודה. |
| 939 | 939 | ||
| 940 | >> הקישו C-h a file <Return>‎. | 940 | >> הקישו C-h a file <Return>‎. |
| @@ -960,9 +960,9 @@ find-file. | |||
| 960 | * עוד ×ª×›×•× ×•×ª | 960 | * עוד ×ª×›×•× ×•×ª |
| 961 | ------------ | 961 | ------------ |
| 962 | 962 | ||
| 963 | תוכלו ללמוד עוד על־×ודות Emacs ×¢"×™ קרי××” במדריך למשתמש שלו, ×× ×›×¡×¤×¨ | 963 | תוכלו ללמוד עוד על־×ודות Emacs ×¢×´×™ קרי××” במדריך למשתמש שלו, ×× ×›×¡×¤×¨ |
| 964 | מודפס ×ו בגירסה ×ž×§×•×•× ×ª בתוך Emacs עצמו. (תוכלו להגיע ×ל המדריך דרך | 964 | מודפס ×ו בגירסה ×ž×§×•×•× ×ª בתוך Emacs עצמו. (תוכלו להגיע ×ל המדריך דרך |
| 965 | תפריט Help ×ו ×¢"×™ הקשה על C-h r.) ××•×œ× ×©×ª×™ ×ª×›×•× ×•×ª שבווד××™ ימצ×ו חן | 965 | תפריט Help ×ו ×¢×´×™ הקשה על C-h r.) ××•×œ× ×©×ª×™ ×ª×›×•× ×•×ª שבווד××™ ימצ×ו חן |
| 966 | ×‘×¢×™× ×™×›× ×”×Ÿ השלמה ×שר חוסכת הקשות, ו־dired שמ×פשרת טיפול × ×•×— בקבצי×. | 966 | ×‘×¢×™× ×™×›× ×”×Ÿ השלמה ×שר חוסכת הקשות, ו־dired שמ×פשרת טיפול × ×•×— בקבצי×. |
| 967 | 967 | ||
| 968 | השלמה ×”×™× ×“×¨×š ×œ×”×™×ž× ×¢ מהקשות מיותרות. למשל, ×× ×‘×¨×¦×•× ×›× ×œ×¢×‘×•×¨ לחוצץ | 968 | השלמה ×”×™× ×“×¨×š ×œ×”×™×ž× ×¢ מהקשות מיותרות. למשל, ×× ×‘×¨×¦×•× ×›× ×œ×¢×‘×•×¨ לחוצץ |
| @@ -991,7 +991,7 @@ find-file. | |||
| 991 | -------------- | 991 | -------------- |
| 992 | 992 | ||
| 993 | שיעור ×–×” ×”×™× ×• צ××¦× ×©×œ שורה ×רוכה של ×©×™×¢×•×¨×™× ×‘×©×™×ž×•×© ב־Emacs, החל מהגרסה | 993 | שיעור ×–×” ×”×™× ×• צ××¦× ×©×œ שורה ×רוכה של ×©×™×¢×•×¨×™× ×‘×©×™×ž×•×© ב־Emacs, החל מהגרסה |
| 994 | הר××©×•× ×” ×©× ×›×ª×‘×” ×¢"×™ Stuart Cracraft עבור גירסת ×”Ö¾Emacs המקורית. | 994 | הר××©×•× ×” ×©× ×›×ª×‘×” ×¢×´×™ Stuart Cracraft עבור גירסת ×”Ö¾Emacs המקורית. |
| 995 | 995 | ||
| 996 | גירסה זו של השיעור ×”×™× ×” חלק מחבילת GNU Emacs. ×”×™× ×ž×•×’× ×ª בזכויות ×™×•×¦×¨×™× | 996 | גירסה זו של השיעור ×”×™× ×” חלק מחבילת GNU Emacs. ×”×™× ×ž×•×’× ×ª בזכויות ×™×•×¦×¨×™× |
| 997 | ×•× ×™×ª× ×ª להעתקה והפצת ×¢×•×ª×§×™× ×‘×ª× ××™× ×ž×¡×•×™×™×ž×™× ×›×“×œ×§×ž×Ÿ: | 997 | ×•× ×™×ª× ×ª להעתקה והפצת ×¢×•×ª×§×™× ×‘×ª× ××™× ×ž×¡×•×™×™×ž×™× ×›×“×œ×§×ž×Ÿ: |
| @@ -999,7 +999,7 @@ find-file. | |||
| 999 | Copyright (C) 2010-2015 Free Software Foundation, Inc. | 999 | Copyright (C) 2010-2015 Free Software Foundation, Inc. |
| 1000 | 1000 | ||
| 1001 | â€GNU Emacs ×”×™× ×• ×ª×›× ×” חפשית; ×–×›×•×ª×›× ×œ×”×¤×™×¦×• ו\×ו ×œ×©× ×•×ª×• בכפוף ×œ×ª× ××™ | 1001 | â€GNU Emacs ×”×™× ×• ×ª×›× ×” חפשית; ×–×›×•×ª×›× ×œ×”×¤×™×¦×• ו\×ו ×œ×©× ×•×ª×• בכפוף ×œ×ª× ××™ |
| 1002 | הרשיון GNU General Public License, כפי ×©×”×•× ×™×•×¦× ×œ×ור ×¢"×™ Free | 1002 | הרשיון GNU General Public License, כפי ×©×”×•× ×™×•×¦× ×œ×ור ×¢×´×™ Free |
| 1003 | Software Foundation, ×× ×‘×’×¨×¡× 3 של הרשיון, ו×× (×›×ופציה השמורה לכ×) | 1003 | Software Foundation, ×× ×‘×’×¨×¡× 3 של הרשיון, ו×× (×›×ופציה השמורה לכ×) |
| 1004 | בכל ×’×¨×¡× ×ž×וחרת יותר. | 1004 | בכל ×’×¨×¡× ×ž×וחרת יותר. |
| 1005 | 1005 | ||
| @@ -1012,7 +1012,7 @@ Software Foundation, ×× ×‘×’×¨×¡× 3 של הרשיון, ו×× (×›×ופציה | |||
| 1012 | 1012 | ||
| 1013 | ×”× ×›× ×ž×•×–×ž× ×™× ×œ×§×¨×•× ×ת הקובץ COPYING ו××– ×כן לחלק ×¢×•×ª×§×™× ×©×œ GNU Emacs | 1013 | ×”× ×›× ×ž×•×–×ž× ×™× ×œ×§×¨×•× ×ת הקובץ COPYING ו××– ×כן לחלק ×¢×•×ª×§×™× ×©×œ GNU Emacs |
| 1014 | לחבריכ×. עזרו ×œ× ×• לחסל ×ת "הבעלות" על ×ª×•×›× ×” ש××™× ×” ××œ× ×—×‘×œ×” ×‘×ª×•×›× ×”, | 1014 | לחבריכ×. עזרו ×œ× ×• לחסל ×ת "הבעלות" על ×ª×•×›× ×” ש××™× ×” ××œ× ×—×‘×œ×” ×‘×ª×•×›× ×”, |
| 1015 | וז×ת ×¢"×™ שימוש, כתיבה ושיתוף של ×ª×•×›× ×” חופשית! | 1015 | וז×ת ×¢×´×™ שימוש, כתיבה ושיתוף של ×ª×•×›× ×” חופשית! |
| 1016 | 1016 | ||
| 1017 | 1017 | ||
| 1018 | 1018 | ||
diff --git a/lib/gnulib.mk b/lib/gnulib.mk index 07541ec93c8..1b671e7f6de 100644 --- a/lib/gnulib.mk +++ b/lib/gnulib.mk | |||
| @@ -1578,6 +1578,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $( | |||
| 1578 | -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ | 1578 | -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ |
| 1579 | -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ | 1579 | -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ |
| 1580 | -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ | 1580 | -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ |
| 1581 | -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ | ||
| 1581 | -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ | 1582 | -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ |
| 1582 | -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ | 1583 | -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ |
| 1583 | -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ | 1584 | -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ |
diff --git a/lib/time.in.h b/lib/time.in.h index 8d721c5ab84..1a6b746ccab 100644 --- a/lib/time.in.h +++ b/lib/time.in.h | |||
| @@ -55,6 +55,8 @@ | |||
| 55 | # include <sys/time.h> | 55 | # include <sys/time.h> |
| 56 | # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ | 56 | # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ |
| 57 | # include <pthread.h> | 57 | # include <pthread.h> |
| 58 | # elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ | ||
| 59 | # include <unistd.h> | ||
| 58 | # else | 60 | # else |
| 59 | 61 | ||
| 60 | # ifdef __cplusplus | 62 | # ifdef __cplusplus |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 80dfeef3750..0a3c7c95929 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,15 +1,233 @@ | |||
| 1 | 2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * emacs-lisp/eieio.el (defclass): Use new eieio-make-class-predicate | ||
| 4 | and eieio-make-child-predicate. | ||
| 5 | (eieio-class-parents): Use eieio--class-object. | ||
| 6 | (slot-boundp, find-class, eieio-override-prin1): Avoid class-p. | ||
| 7 | (slot-exists-p): Use find-class. | ||
| 8 | |||
| 9 | * emacs-lisp/eieio-opt.el (eieio-help-class, eieio-help-constructor): | ||
| 10 | Use find-lisp-object-file-name, help-fns-short-filename and new calling | ||
| 11 | convention for eieio-class-def. | ||
| 12 | (eieio-build-class-list): Remove function, unused. | ||
| 13 | (eieio-method-def): Remove button type, unused. | ||
| 14 | (eieio-class-def): Inherit from help-function-def. | ||
| 15 | (eieio--defclass-regexp): New constant. | ||
| 16 | (find-function-regexp-alist): Use it. | ||
| 17 | (eieio--specializers-apply-to-class-p): Handle eieio--static as well. | ||
| 18 | (eieio-help-find-method-definition, eieio-help-find-class-definition): | ||
| 19 | Remove functions. | ||
| 20 | |||
| 21 | * emacs-lisp/eieio-core.el (eieio--check-type): Remove. | ||
| 22 | Use cl-check-type everywhere instead. | ||
| 23 | (eieio-class-object): Remove, use find-class instead when needed. | ||
| 24 | (class-p): Don't inline. | ||
| 25 | (eieio-object-p): Check more thoroughly, so we don't treat cl-structs, | ||
| 26 | such as eieio classes, as objects. Don't inline. | ||
| 27 | (object-p): Mark as obsolete. | ||
| 28 | (eieio-defclass-autoload, eieio-defclass-internal, eieio-oref) | ||
| 29 | (eieio--generic-tagcode): Avoid `class-p'. | ||
| 30 | (eieio-make-class-predicate, eieio-make-child-predicate): New functions. | ||
| 31 | (eieio-defclass-internal): Use current-load-list rather than | ||
| 32 | `class-location'. | ||
| 33 | |||
| 34 | * emacs-lisp/cl-generic.el (cl--generic-search-method): Fix regexp. | ||
| 35 | |||
| 36 | 2015-01-30 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 37 | |||
| 38 | * emacs-lisp/backquote.el (backquote-delay-process): Don't reuse `s' | ||
| 39 | since it may be "equivalent" in some sense, yet different (bug#19734). | ||
| 40 | |||
| 41 | 2015-01-30 Oleh Krehel <ohwoeowho@gmail.com> | ||
| 42 | |||
| 43 | * outline.el (outline-font-lock-face): Add docstring. | ||
| 44 | (outline-invisible-p): Improve docstring. | ||
| 45 | (outline-invent-heading): Add docstring. | ||
| 46 | (outline-promote): Improve docstring. | ||
| 47 | (outline-demote): Improve docstring. | ||
| 48 | (outline-head-from-level): Improve docstring. | ||
| 49 | (outline-end-of-heading): Add docstring. | ||
| 50 | (outline-next-visible-heading): Improve docstring. | ||
| 51 | (outline-previous-visible-heading): Improve docstring. | ||
| 52 | (outline-hide-region-body): Improve docstring. | ||
| 53 | (outline-flag-subtree): Add docstring. | ||
| 54 | (outline-end-of-subtree): Add docstring. | ||
| 55 | (outline-headers-as-kill): Improve docstring. | ||
| 56 | |||
| 57 | 2015-01-30 Oleh Krehel <ohwoeowho@gmail.com> | ||
| 58 | |||
| 59 | * outline.el (outline-hide-entry): Rename from `hide-entry'. | ||
| 60 | (hide-entry): Declare as obsolete. | ||
| 61 | (outline-show-entry): Rename from `show-entry'. | ||
| 62 | (show-entry): Declare as obsolete. | ||
| 63 | (outline-hide-body): Rename from `hide-body'. | ||
| 64 | (hide-body): Declare as obsolete. | ||
| 65 | (outline-hide-region-body): Rename from `hide-region-body'. | ||
| 66 | (hide-region-body): Declare as obsolete. | ||
| 67 | (outline-show-all): Rename from `show-all'. | ||
| 68 | (show-all): Declare as obsolete. | ||
| 69 | (outline-hide-subtree): Rename from `hide-subtree'. | ||
| 70 | (hide-subtree): Declare as obsolete. | ||
| 71 | (outline-hide-leaves): Rename from `hide-leaves'. | ||
| 72 | (hide-leaves): Declare as obsolete. | ||
| 73 | (outline-show-subtree): Rename from `show-subtree'. | ||
| 74 | (show-subtree): Declare as obsolete. | ||
| 75 | (outline-hide-sublevels): Rename from `hide-sublevels'. | ||
| 76 | (hide-sublevels): Declare as obsolete. | ||
| 77 | (outline-hide-other): Rename from `hide-other'. | ||
| 78 | (hide-other): Declare as obsolete. | ||
| 79 | (outline-show-children): Rename from `show-children'. | ||
| 80 | (show-children): Declare as obsolete. | ||
| 81 | (outline-show-branches): Rename from `show-branches'. | ||
| 82 | (show-branches): Declare as obsolete. | ||
| 83 | |||
| 84 | 2015-01-30 Oleh Krehel <ohwoeowho@gmail.com> | ||
| 85 | |||
| 86 | * outline.el (outline-mode): Clean up docstring. | ||
| 87 | (font-lock-warning-face): Remove obsolete declaration. | ||
| 88 | (outline-font-lock-face): Remove obsolete comment. | ||
| 89 | |||
| 90 | 2015-01-30 Oleh Krehel <ohwoeowho@gmail.com> | ||
| 91 | |||
| 92 | * lisp/custom.el (defface): Set `indent' to 1. | ||
| 93 | |||
| 94 | 2015-01-30 Oleh Krehel <ohwoeowho@gmail.com> | ||
| 95 | |||
| 96 | * emacs-lisp/easy-mmode.el (define-minor-mode): Set `indent' to 1. | ||
| 97 | |||
| 98 | 2015-01-30 Michal Nazarewicz <mina86@mina86.com> | ||
| 99 | |||
| 100 | * lisp/files.el (save-buffers-kill-emacs): If `confirm-kill-emacs' | ||
| 101 | is set, but user has just been asked whether they really want to | ||
| 102 | kill Emacs (for example with a ‘Modified buffers exist; exit | ||
| 103 | anyway?’ prompt), do not ask them for another confirmation. | ||
| 104 | |||
| 105 | 2015-01-29 Jay Belanger <jay.p.belanger@gmail.com> | ||
| 106 | |||
| 107 | * lisp/calc/calc-units.el (calc-convert-exact-units): New function. | ||
| 108 | (calc-convert-units): Check for missing units. | ||
| 109 | (math-consistent-units-p): Strengthen the test for consistent units. | ||
| 110 | |||
| 111 | * lisp/calc/calc-ext.el (calc-init-extensions): Autoload | ||
| 112 | `calc-convert-exact-units' and assign it a keybinding. | ||
| 113 | |||
| 114 | * lisp/calc/calc-help (calc-u-prefix-help): Add help for the | ||
| 115 | "un" keybinding. | ||
| 116 | |||
| 117 | 2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 118 | |||
| 119 | * emacs-lisp/cl.el (cl--function-convert): Simplify. | ||
| 120 | |||
| 121 | 2015-01-28 Tassilo Horn <tsdh@gnu.org> | ||
| 122 | |||
| 123 | * textmodes/reftex.el (reftex-syntax-table-for-bib): Give ( and ) | ||
| 124 | punctuation syntax since to allow bibtex fields with values such | ||
| 125 | as {Test 1) and 2)} (bug#19205, bug#19707). | ||
| 126 | (reftex--prepare-syntax-tables): New function. | ||
| 127 | (reftex-mode): Use it. | ||
| 128 | |||
| 129 | 2015-01-28 Fabián Ezequiel Gallina <fgallina@gnu.org> | ||
| 130 | |||
| 131 | python.el: New non-global state dependent indentation engine. | ||
| 132 | (Bug#18319, Bug#19595) | ||
| 133 | * progmodes/python.el (python-syntax-comment-or-string-p): | ||
| 134 | Accept PPSS as argument. | ||
| 135 | (python-syntax-closing-paren-p): New function. | ||
| 136 | (python-indent-current-level) | ||
| 137 | (python-indent-levels): Mark obsolete. | ||
| 138 | (python-indent-context): Return more context cases. | ||
| 139 | (python-indent--calculate-indentation) | ||
| 140 | (python-indent--calculate-levels): New functions. | ||
| 141 | (python-indent-calculate-levels): Use them. | ||
| 142 | (python-indent-calculate-indentation, python-indent-line): | ||
| 143 | (python-indent-line-function): Rewritten to use new API. | ||
| 144 | (python-indent-dedent-line): Simplify logic. | ||
| 145 | (python-indent-dedent-line-backspace): Use `unless`. | ||
| 146 | (python-indent-toggle-levels): Delete function. | ||
| 147 | |||
| 148 | 2015-01-28 Daniel Koning <dk@danielkoning.com> (tiny change) | ||
| 149 | |||
| 150 | * subr.el (posnp): Correct docstring of `posnp'. | ||
| 151 | (posn-col-row): Make it work with all mouse position objects. | ||
| 152 | * textmodes/artist.el (artist-mouse-draw-continously): | ||
| 153 | Cancel timers if an error occurs during continuous drawing. (Bug#6130) | ||
| 154 | |||
| 155 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 156 | |||
| 157 | * button.el (button-activate, push-button): Doc fix. (Bug#19628) | ||
| 158 | |||
| 159 | 2015-01-28 Michael Albinus <michael.albinus@gmx.de> | ||
| 160 | |||
| 161 | * filenotify.el (file-notify-descriptors, file-notify-handle-event): | ||
| 162 | Adapt docstring. | ||
| 163 | (file-notify--descriptor): New defun. | ||
| 164 | (file-notify-callback, file-notify-add-watch, file-notify-rm-watch): | ||
| 165 | Adapt docstring. Handle multiple values for | ||
| 166 | `file-notify-descriptors' entries. (Bug#18880) | ||
| 167 | |||
| 168 | * net/tramp.el (tramp-handle-file-notify-rm-watch): Do not check | ||
| 169 | `file-notify-descriptors', the implementation has been changed. | ||
| 170 | |||
| 171 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 172 | |||
| 173 | * net/net-utils.el (net-utils-run-program, net-utils-run-simple): | ||
| 174 | On MS-Windows, bind coding-system-for-read to the console output | ||
| 175 | codepage. (Bug#19458) | ||
| 176 | |||
| 177 | 2015-01-28 Dmitry Gutov <dgutov@yandex.ru> | ||
| 178 | |||
| 179 | Unbreak `mouse-action' property in text buttons. | ||
| 180 | * button.el (push-button): Fix regression from 2012-12-06. | ||
| 181 | |||
| 182 | 2015-01-28 Glenn Morris <rgm@gnu.org> | ||
| 183 | |||
| 184 | * progmodes/sh-script.el (sh-mode): Doc fix. | ||
| 185 | (sh-basic-indent-line): Handle electric newline. (Bug#18756) | ||
| 186 | |||
| 187 | 2015-01-28 Paul Eggert <eggert@cs.ucla.edu> | ||
| 188 | |||
| 189 | Fix dired quoting bug with "Hit`N`Hide". Fixes Bug#19498. | ||
| 190 | * files.el (shell-quote-wildcard-pattern): Also quote "`". | ||
| 191 | |||
| 192 | 2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 193 | |||
| 194 | Tighten up the tagcode used for eieio and cl-struct objects. | ||
| 195 | * loadup.el: Load cl-preloaded. | ||
| 196 | * emacs-lisp/eieio-core.el (eieio-defclass-internal): Set the function | ||
| 197 | slot of the tag symbol to :quick-object-witness-check. | ||
| 198 | (eieio-object-p): Use :quick-object-witness-check. | ||
| 199 | (eieio--generic-tagcode): Use cl--generic-struct-tag. | ||
| 200 | * emacs-lisp/cl-preloaded.el: New file. | ||
| 201 | * emacs-lisp/cl-macs.el (cl--bind-inits): Remove, unused. | ||
| 202 | (cl--transform-lambda, cl-destructuring-bind): Remove cl--bind-inits. | ||
| 203 | (cl--make-usage-args): Strip away &aux args. | ||
| 204 | (cl-case, cl-typecase, cl--parse-loop-clause): Use macroexp-let2. | ||
| 205 | (cl-the, cl-check-type): Use macroexp-let2 and cl-typep. | ||
| 206 | (cl-defstruct): Use `declare' and cl-struct-define. | ||
| 207 | * emacs-lisp/cl-generic.el (cl--generic-struct-tag): New function. | ||
| 208 | (cl--generic-struct-tagcode): Use it to tighten the tagcode. | ||
| 209 | |||
| 210 | 2015-01-27 Katsumi Yamaoka <yamaoka@jpl.org> | ||
| 211 | |||
| 212 | * emacs-lisp/cl.el (cl--function-convert): | ||
| 213 | Merge cache that cl--labels-convert adds (bug#19699). | ||
| 214 | |||
| 215 | 2015-01-27 Ivan Shmakov <ivan@siamics.net> | ||
| 216 | |||
| 217 | * tar-mode.el: Allow for adding new archive members. (Bug#19274) | ||
| 218 | (tar-new-regular-file-header, tar--pad-to, tar--put-at) | ||
| 219 | (tar-header-serialize): New functions. | ||
| 220 | (tar-current-position): Split from tar-current-descriptor. | ||
| 221 | (tar-current-descriptor): Use it. | ||
| 222 | (tar-new-entry): New command. | ||
| 223 | (tar-mode-map): Bind it. | ||
| 224 | |||
| 1 | 2015-01-27 Sam Steingold <sds@gnu.org> | 225 | 2015-01-27 Sam Steingold <sds@gnu.org> |
| 2 | 226 | ||
| 3 | * progmodes/python.el (python-check-custom-command): Buffer local | 227 | * progmodes/python.el (python-check-custom-command): Buffer local |
| 4 | because it usually includes the buffer name. | 228 | because it usually includes the buffer name. |
| 5 | (python-check-command): Set to epylint when pyflakes is not available. | 229 | (python-check-command): Set to epylint when pyflakes is not available. |
| 6 | 230 | ||
| 7 | 2015-01-27 Thomas Fitzsimmons <fitzsim@fitzsim.org> | ||
| 8 | |||
| 9 | * net/eudcb-bbdb.el, net/eudcb-ldap.el, net/eudcb-mab.el, | ||
| 10 | net/eudc-bob.el, net/eudcb-ph.el, net/eudc.el, net/eudc-export.el, | ||
| 11 | net/eudc-hotlist.el, net/eudc-vars.el: New maintainer. | ||
| 12 | |||
| 13 | 2015-01-27 Artur Malabarba <bruce.connor.am@gmail.com> | 231 | 2015-01-27 Artur Malabarba <bruce.connor.am@gmail.com> |
| 14 | 232 | ||
| 15 | * isearch.el (isearch-process-search-char): Add docstring. | 233 | * isearch.el (isearch-process-search-char): Add docstring. |
| @@ -70,6 +288,8 @@ | |||
| 70 | 2015-01-26 Lars Ingebrigtsen <larsi@gnus.org> | 288 | 2015-01-26 Lars Ingebrigtsen <larsi@gnus.org> |
| 71 | 289 | ||
| 72 | * net/shr.el (shr-make-table-1): Fix colspan typo. | 290 | * net/shr.el (shr-make-table-1): Fix colspan typo. |
| 291 | (shr-make-table-1): Add comments. | ||
| 292 | (shr-make-table-1): Make colspan display more sensibly. | ||
| 73 | 293 | ||
| 74 | * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code | 294 | * net/eww.el (eww-add-bookmark): Fix prompt and clean up the code |
| 75 | slightly. | 295 | slightly. |
| @@ -1742,8 +1962,7 @@ | |||
| 1742 | 2014-12-14 Steve Purcell <steve@sanityinc.com> (tiny change) | 1962 | 2014-12-14 Steve Purcell <steve@sanityinc.com> (tiny change) |
| 1743 | 1963 | ||
| 1744 | * emacs-lisp/package.el (package-menu-mode): Use an extra column | 1964 | * emacs-lisp/package.el (package-menu-mode): Use an extra column |
| 1745 | for the "Version" column, to accomodate date-and-time-based | 1965 | for the "Version" column, to accomodate date-and-time-based versions. |
| 1746 | versions. | ||
| 1747 | 1966 | ||
| 1748 | 2014-12-14 Cameron Desautels <camdez@gmail.com> | 1967 | 2014-12-14 Cameron Desautels <camdez@gmail.com> |
| 1749 | 1968 | ||
diff --git a/lisp/button.el b/lisp/button.el index 189a1c23a4d..e7602dd7050 100644 --- a/lisp/button.el +++ b/lisp/button.el | |||
| @@ -224,10 +224,10 @@ changes to a supertype are not reflected in its subtypes)." | |||
| 224 | prop val)))) | 224 | prop val)))) |
| 225 | 225 | ||
| 226 | (defun button-activate (button &optional use-mouse-action) | 226 | (defun button-activate (button &optional use-mouse-action) |
| 227 | "Call BUTTON's action property. | 227 | "Call BUTTON's `action' property. |
| 228 | If USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action | 228 | If USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action' |
| 229 | instead of its normal action; if the button has no mouse-action, | 229 | property instead of `action'; if the button has no `mouse-action', |
| 230 | the normal action is used instead. | 230 | the value of `action' is used instead. |
| 231 | 231 | ||
| 232 | The action can either be a marker or a function. If it's a | 232 | The action can either be a marker or a function. If it's a |
| 233 | marker then goto it. Otherwise it it is a function then it is | 233 | marker then goto it. Otherwise it it is a function then it is |
| @@ -429,11 +429,13 @@ instead of starting at the next button." | |||
| 429 | (defun push-button (&optional pos use-mouse-action) | 429 | (defun push-button (&optional pos use-mouse-action) |
| 430 | "Perform the action specified by a button at location POS. | 430 | "Perform the action specified by a button at location POS. |
| 431 | POS may be either a buffer position or a mouse-event. If | 431 | POS may be either a buffer position or a mouse-event. If |
| 432 | USE-MOUSE-ACTION is non-nil, invoke the button's mouse-action | 432 | USE-MOUSE-ACTION is non-nil, invoke the button's `mouse-action' |
| 433 | instead of its normal action; if the button has no mouse-action, | 433 | property instead of its `action' property; if the button has no |
| 434 | the normal action is used instead. The action may be either a | 434 | `mouse-action', the value of `action' is used instead. |
| 435 | function to call or a marker to display and is invoked using | 435 | |
| 436 | `button-activate' (which see). | 436 | The action in both cases may be either a function to call or a |
| 437 | marker to display and is invoked using `button-activate' (which | ||
| 438 | see). | ||
| 437 | 439 | ||
| 438 | POS defaults to point, except when `push-button' is invoked | 440 | POS defaults to point, except when `push-button' is invoked |
| 439 | interactively as the result of a mouse-event, in which case, the | 441 | interactively as the result of a mouse-event, in which case, the |
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el index c3acb89e417..67d0c2701d2 100644 --- a/lisp/calc/calc-ext.el +++ b/lisp/calc/calc-ext.el | |||
| @@ -561,6 +561,7 @@ | |||
| 561 | (define-key calc-mode-map "ud" 'calc-define-unit) | 561 | (define-key calc-mode-map "ud" 'calc-define-unit) |
| 562 | (define-key calc-mode-map "ue" 'calc-explain-units) | 562 | (define-key calc-mode-map "ue" 'calc-explain-units) |
| 563 | (define-key calc-mode-map "ug" 'calc-get-unit-definition) | 563 | (define-key calc-mode-map "ug" 'calc-get-unit-definition) |
| 564 | (define-key calc-mode-map "un" 'calc-convert-exact-units) | ||
| 564 | (define-key calc-mode-map "up" 'calc-permanent-units) | 565 | (define-key calc-mode-map "up" 'calc-permanent-units) |
| 565 | (define-key calc-mode-map "ur" 'calc-remove-units) | 566 | (define-key calc-mode-map "ur" 'calc-remove-units) |
| 566 | (define-key calc-mode-map "us" 'calc-simplify-units) | 567 | (define-key calc-mode-map "us" 'calc-simplify-units) |
| @@ -1176,7 +1177,8 @@ calc-trail-scroll-right calc-trail-yank) | |||
| 1176 | ("calc-undo" calc-last-args calc-redo) | 1177 | ("calc-undo" calc-last-args calc-redo) |
| 1177 | 1178 | ||
| 1178 | ("calc-units" calc-autorange-units calc-base-units | 1179 | ("calc-units" calc-autorange-units calc-base-units |
| 1179 | calc-convert-temperature calc-convert-units calc-define-unit | 1180 | calc-convert-temperature calc-convert-units |
| 1181 | calc-convert-exact-units calc-define-unit | ||
| 1180 | calc-enter-units-table calc-explain-units calc-extract-units | 1182 | calc-enter-units-table calc-explain-units calc-extract-units |
| 1181 | calc-get-unit-definition calc-permanent-units calc-quick-units | 1183 | calc-get-unit-definition calc-permanent-units calc-quick-units |
| 1182 | calc-remove-units calc-simplify-units calc-undefine-unit | 1184 | calc-remove-units calc-simplify-units calc-undefine-unit |
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el index 511e208ddea..17e5b0fdead 100644 --- a/lisp/calc/calc-help.el +++ b/lisp/calc/calc-help.el | |||
| @@ -647,7 +647,7 @@ C-w Describe how there is no warranty for Calc." | |||
| 647 | (defun calc-u-prefix-help () | 647 | (defun calc-u-prefix-help () |
| 648 | (interactive) | 648 | (interactive) |
| 649 | (calc-do-prefix-help | 649 | (calc-do-prefix-help |
| 650 | '("Simplify, Convert, Temperature-convert, Base-units" | 650 | '("Simplify, Convert, coNvert exact, Temperature-convert, Base-units" |
| 651 | "Autorange; Remove, eXtract; Explain; View-table; 0-9" | 651 | "Autorange; Remove, eXtract; Explain; View-table; 0-9" |
| 652 | "Define, Undefine, Get-defn, Permanent" | 652 | "Define, Undefine, Get-defn, Permanent" |
| 653 | "SHIFT + View-table-other-window" | 653 | "SHIFT + View-table-other-window" |
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 05950864a52..f3d02340fe3 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el | |||
| @@ -470,6 +470,8 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 470 | (if (string-match "\\` */" uoldname) | 470 | (if (string-match "\\` */" uoldname) |
| 471 | (setq uoldname (concat "1" uoldname))) | 471 | (setq uoldname (concat "1" uoldname))) |
| 472 | (math-read-expr uoldname)))))) | 472 | (math-read-expr uoldname)))))) |
| 473 | (unless (math-units-in-expr-p uold t) | ||
| 474 | (error "No units specified")) | ||
| 473 | (when (eq (car-safe uold) 'error) | 475 | (when (eq (car-safe uold) 'error) |
| 474 | (error "Bad format in units expression: %s" (nth 1 uold))) | 476 | (error "Bad format in units expression: %s" (nth 1 uold))) |
| 475 | (setq expr (math-mul expr uold)))) | 477 | (setq expr (math-mul expr uold)))) |
| @@ -514,6 +516,38 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 514 | (math-put-default-units (if noold units res) (if comp units))) | 516 | (math-put-default-units (if noold units res) (if comp units))) |
| 515 | (calc-enter-result 1 "cvun" res)))))) | 517 | (calc-enter-result 1 "cvun" res)))))) |
| 516 | 518 | ||
| 519 | (defun calc-convert-exact-units () | ||
| 520 | (interactive) | ||
| 521 | (calc-slow-wrapper | ||
| 522 | (let* ((expr (calc-top-n 1))) | ||
| 523 | (unless (math-units-in-expr-p expr t) | ||
| 524 | (error "No units in expression.")) | ||
| 525 | (let* ((old-units (math-extract-units expr)) | ||
| 526 | (defunits (math-get-default-units expr)) | ||
| 527 | units | ||
| 528 | (new-units | ||
| 529 | (read-string (concat "New units" | ||
| 530 | (if defunits | ||
| 531 | (concat | ||
| 532 | " (default " | ||
| 533 | defunits | ||
| 534 | "): ") | ||
| 535 | ": "))))) | ||
| 536 | (if (and | ||
| 537 | (string= new-units "") | ||
| 538 | defunits) | ||
| 539 | (setq new-units defunits)) | ||
| 540 | (setq units (math-read-expr new-units)) | ||
| 541 | (when (eq (car-safe units) 'error) | ||
| 542 | (error "Bad format in units expression: %s" (nth 2 units))) | ||
| 543 | (math-check-unit-consistency old-units units) | ||
| 544 | (let ((res | ||
| 545 | (list '* (math-mul (math-remove-units expr) | ||
| 546 | (math-simplify-units | ||
| 547 | (math-to-standard-units (list '/ old-units units) nil))) | ||
| 548 | units))) | ||
| 549 | (calc-enter-result 1 "cvxu" res)))))) | ||
| 550 | |||
| 517 | (defun calc-autorange-units (arg) | 551 | (defun calc-autorange-units (arg) |
| 518 | (interactive "P") | 552 | (interactive "P") |
| 519 | (calc-wrapper | 553 | (calc-wrapper |
| @@ -945,7 +979,7 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 945 | (or | 979 | (or |
| 946 | (and (eq (car-safe newunits) 'var) | 980 | (and (eq (car-safe newunits) 'var) |
| 947 | (assq (nth 1 newunits) math-standard-units-systems)) | 981 | (assq (nth 1 newunits) math-standard-units-systems)) |
| 948 | (math-numberp (math-get-units (list '/ expr newunits))))) | 982 | (math-numberp (math-get-units (math-to-standard-units (list '/ expr newunits) nil))))) |
| 949 | 983 | ||
| 950 | (defun math-check-unit-consistency (expr units) | 984 | (defun math-check-unit-consistency (expr units) |
| 951 | "Give an error if EXPR and UNITS do not have consistent units." | 985 | "Give an error if EXPR and UNITS do not have consistent units." |
diff --git a/lisp/custom.el b/lisp/custom.el index 779e585c04f..e5fe0ebaedd 100644 --- a/lisp/custom.el +++ b/lisp/custom.el | |||
| @@ -411,7 +411,8 @@ In the ATTS property list, possible attributes are `:family', | |||
| 411 | 411 | ||
| 412 | See Info node `(elisp) Faces' in the Emacs Lisp manual for more | 412 | See Info node `(elisp) Faces' in the Emacs Lisp manual for more |
| 413 | information." | 413 | information." |
| 414 | (declare (doc-string 3)) | 414 | (declare (doc-string 3) |
| 415 | (indent 1)) | ||
| 415 | ;; It is better not to use backquote in this file, | 416 | ;; It is better not to use backquote in this file, |
| 416 | ;; because that makes a bootstrapping problem | 417 | ;; because that makes a bootstrapping problem |
| 417 | ;; if you need to recompile all the Lisp files using interpreted code. | 418 | ;; if you need to recompile all the Lisp files using interpreted code. |
diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el index 082955e0823..d5cdca2b1b5 100644 --- a/lisp/emacs-lisp/backquote.el +++ b/lisp/emacs-lisp/backquote.el | |||
| @@ -120,9 +120,7 @@ Vectors work just like lists. Nested backquotes are permitted." | |||
| 120 | This simply recurses through the body." | 120 | This simply recurses through the body." |
| 121 | (let ((exp (backquote-listify (list (cons 0 (list 'quote (car s)))) | 121 | (let ((exp (backquote-listify (list (cons 0 (list 'quote (car s)))) |
| 122 | (backquote-process (cdr s) level)))) | 122 | (backquote-process (cdr s) level)))) |
| 123 | (if (eq (car-safe exp) 'quote) | 123 | (cons (if (eq (car-safe exp) 'quote) 0 1) exp))) |
| 124 | (cons 0 (list 'quote s)) | ||
| 125 | (cons 1 exp)))) | ||
| 126 | 124 | ||
| 127 | (defun backquote-process (s &optional level) | 125 | (defun backquote-process (s &optional level) |
| 128 | "Process the body of a backquote. | 126 | "Process the body of a backquote. |
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 1bb70963a57..72ec8ec1801 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el | |||
| @@ -635,7 +635,8 @@ Can only be used from within the lexical body of a primary or around method." | |||
| 635 | 635 | ||
| 636 | (defun cl--generic-search-method (met-name) | 636 | (defun cl--generic-search-method (met-name) |
| 637 | (let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+" | 637 | (let ((base-re (concat "(\\(?:cl-\\)?defmethod[ \t]+" |
| 638 | (regexp-quote (format "%s\\_>" (car met-name)))))) | 638 | (regexp-quote (format "%s" (car met-name))) |
| 639 | "\\_>"))) | ||
| 639 | (or | 640 | (or |
| 640 | (re-search-forward | 641 | (re-search-forward |
| 641 | (concat base-re "[^&\"\n]*" | 642 | (concat base-re "[^&\"\n]*" |
| @@ -724,6 +725,14 @@ Can only be used from within the lexical body of a primary or around method." | |||
| 724 | 725 | ||
| 725 | (add-function :before-until cl-generic-tagcode-function | 726 | (add-function :before-until cl-generic-tagcode-function |
| 726 | #'cl--generic-struct-tagcode) | 727 | #'cl--generic-struct-tagcode) |
| 728 | |||
| 729 | (defun cl--generic-struct-tag (name) | ||
| 730 | `(and (vectorp ,name) | ||
| 731 | (> (length ,name) 0) | ||
| 732 | (let ((tag (aref ,name 0))) | ||
| 733 | (if (eq (symbol-function tag) :quick-object-witness-check) | ||
| 734 | tag)))) | ||
| 735 | |||
| 727 | (defun cl--generic-struct-tagcode (type name) | 736 | (defun cl--generic-struct-tagcode (type name) |
| 728 | (and (symbolp type) | 737 | (and (symbolp type) |
| 729 | (get type 'cl-struct-type) | 738 | (get type 'cl-struct-type) |
| @@ -733,12 +742,19 @@ Can only be used from within the lexical body of a primary or around method." | |||
| 733 | (or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots))) | 742 | (or (equal '(cl-tag-slot) (car (get type 'cl-struct-slots))) |
| 734 | (error "Can't dispatch on cl-struct %S: no tag in slot 0" | 743 | (error "Can't dispatch on cl-struct %S: no tag in slot 0" |
| 735 | type)) | 744 | type)) |
| 736 | ;; We could/should check the vector has length >0, | 745 | ;; It's tempting to use (and (vectorp ,name) (aref ,name 0)) |
| 737 | ;; but really, mixing vectors and structs is a bad idea, | 746 | ;; but that would suffer from some problems: |
| 738 | ;; so let's not waste time trying to handle the case | 747 | ;; - the vector may have size 0. |
| 739 | ;; of an empty vector. | 748 | ;; - when called on an actual vector (rather than an object), we'd |
| 740 | ;; BEWARE: this returns a bogus tag for non-struct vectors. | 749 | ;; end up returning an arbitrary value, possibly colliding with |
| 741 | `(50 . (and (vectorp ,name) (aref ,name 0))))) | 750 | ;; other tagcode's values. |
| 751 | ;; - it can also result in returning all kinds of irrelevant | ||
| 752 | ;; values which would end up filling up the method-cache with | ||
| 753 | ;; lots of irrelevant/redundant entries. | ||
| 754 | ;; FIXME: We could speed this up by introducing a dedicated | ||
| 755 | ;; vector type at the C level, so we could do something like | ||
| 756 | ;; (and (vector-objectp ,name) (aref ,name 0)) | ||
| 757 | `(50 . ,(cl--generic-struct-tag name)))) | ||
| 742 | 758 | ||
| 743 | (add-function :before-until cl-generic-tag-types-function | 759 | (add-function :before-until cl-generic-tag-types-function |
| 744 | #'cl--generic-struct-tag-types) | 760 | #'cl--generic-struct-tag-types) |
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 38f15b89b0e..eaec2c5263c 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el | |||
| @@ -221,7 +221,7 @@ The name is made by appending a number to PREFIX, default \"G\"." | |||
| 221 | '(&optional &rest &key &allow-other-keys &aux &whole &body &environment)) | 221 | '(&optional &rest &key &allow-other-keys &aux &whole &body &environment)) |
| 222 | 222 | ||
| 223 | (defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote) | 223 | (defvar cl--bind-block) (defvar cl--bind-defs) (defvar cl--bind-enquote) |
| 224 | (defvar cl--bind-inits) (defvar cl--bind-lets) (defvar cl--bind-forms) | 224 | (defvar cl--bind-lets) (defvar cl--bind-forms) |
| 225 | 225 | ||
| 226 | (defun cl--transform-lambda (form bind-block) | 226 | (defun cl--transform-lambda (form bind-block) |
| 227 | "Transform a function form FORM of name BIND-BLOCK. | 227 | "Transform a function form FORM of name BIND-BLOCK. |
| @@ -229,9 +229,11 @@ BIND-BLOCK is the name of the symbol to which the function will be bound, | |||
| 229 | and which will be used for the name of the `cl-block' surrounding the | 229 | and which will be used for the name of the `cl-block' surrounding the |
| 230 | function's body. | 230 | function's body. |
| 231 | FORM is of the form (ARGS . BODY)." | 231 | FORM is of the form (ARGS . BODY)." |
| 232 | ;; FIXME: (lambda (a &aux b) 1) expands to (lambda (a &rest --cl-rest--) ...) | ||
| 233 | ;; where the --cl-rest-- is clearly undesired. | ||
| 232 | (let* ((args (car form)) (body (cdr form)) (orig-args args) | 234 | (let* ((args (car form)) (body (cdr form)) (orig-args args) |
| 233 | (cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil) | 235 | (cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil) |
| 234 | (cl--bind-inits nil) (cl--bind-lets nil) (cl--bind-forms nil) | 236 | (cl--bind-lets nil) (cl--bind-forms nil) |
| 235 | (header nil) (simple-args nil)) | 237 | (header nil) (simple-args nil)) |
| 236 | (while (or (stringp (car body)) | 238 | (while (or (stringp (car body)) |
| 237 | (memq (car-safe (car body)) '(interactive declare cl-declare))) | 239 | (memq (car-safe (car body)) '(interactive declare cl-declare))) |
| @@ -244,10 +246,10 @@ FORM is of the form (ARGS . BODY)." | |||
| 244 | (if (setq cl--bind-enquote (memq '&cl-quote args)) | 246 | (if (setq cl--bind-enquote (memq '&cl-quote args)) |
| 245 | (setq args (delq '&cl-quote args))) | 247 | (setq args (delq '&cl-quote args))) |
| 246 | (if (memq '&whole args) (error "&whole not currently implemented")) | 248 | (if (memq '&whole args) (error "&whole not currently implemented")) |
| 247 | (let* ((p (memq '&environment args)) (v (cadr p)) | 249 | (let* ((p (memq '&environment args)) |
| 248 | (env-exp 'macroexpand-all-environment)) | 250 | (v (cadr p))) |
| 249 | (if p (setq args (nconc (delq (car p) (delq v args)) | 251 | (if p (setq args (nconc (delq (car p) (delq v args)) |
| 250 | (list '&aux (list v env-exp)))))) | 252 | `(&aux (,v macroexpand-all-environment)))))) |
| 251 | (while (and args (symbolp (car args)) | 253 | (while (and args (symbolp (car args)) |
| 252 | (not (memq (car args) '(nil &rest &body &key &aux))) | 254 | (not (memq (car args) '(nil &rest &body &key &aux))) |
| 253 | (not (and (eq (car args) '&optional) | 255 | (not (and (eq (car args) '&optional) |
| @@ -261,8 +263,7 @@ FORM is of the form (ARGS . BODY)." | |||
| 261 | (cl--do-arglist args nil (- (length simple-args) | 263 | (cl--do-arglist args nil (- (length simple-args) |
| 262 | (if (memq '&optional simple-args) 1 0))) | 264 | (if (memq '&optional simple-args) 1 0))) |
| 263 | (setq cl--bind-lets (nreverse cl--bind-lets)) | 265 | (setq cl--bind-lets (nreverse cl--bind-lets)) |
| 264 | (cl-list* (and cl--bind-inits `(cl-eval-when (compile load eval) | 266 | (cl-list* nil |
| 265 | ,@(nreverse cl--bind-inits))) | ||
| 266 | (nconc (nreverse simple-args) | 267 | (nconc (nreverse simple-args) |
| 267 | (list '&rest (car (pop cl--bind-lets)))) | 268 | (list '&rest (car (pop cl--bind-lets)))) |
| 268 | (nconc (let ((hdr (nreverse header))) | 269 | (nconc (let ((hdr (nreverse header))) |
| @@ -390,6 +391,11 @@ its argument list allows full Common Lisp conventions." | |||
| 390 | (t x))) | 391 | (t x))) |
| 391 | 392 | ||
| 392 | (defun cl--make-usage-args (arglist) | 393 | (defun cl--make-usage-args (arglist) |
| 394 | (let ((aux (ignore-errors (cl-position '&aux arglist)))) | ||
| 395 | (when aux | ||
| 396 | ;; `&aux' args aren't arguments, so let's just drop them from the | ||
| 397 | ;; usage info. | ||
| 398 | (setq arglist (cl-subseq arglist 0 aux)))) | ||
| 393 | (if (cdr-safe (last arglist)) ;Not a proper list. | 399 | (if (cdr-safe (last arglist)) ;Not a proper list. |
| 394 | (let* ((last (last arglist)) | 400 | (let* ((last (last arglist)) |
| 395 | (tail (cdr last))) | 401 | (tail (cdr last))) |
| @@ -426,7 +432,7 @@ its argument list allows full Common Lisp conventions." | |||
| 426 | )))) | 432 | )))) |
| 427 | arglist)))) | 433 | arglist)))) |
| 428 | 434 | ||
| 429 | (defun cl--do-arglist (args expr &optional num) ; uses bind-* | 435 | (defun cl--do-arglist (args expr &optional num) ; uses cl--bind-* |
| 430 | (if (nlistp args) | 436 | (if (nlistp args) |
| 431 | (if (or (memq args cl--lambda-list-keywords) (not (symbolp args))) | 437 | (if (or (memq args cl--lambda-list-keywords) (not (symbolp args))) |
| 432 | (error "Invalid argument name: %s" args) | 438 | (error "Invalid argument name: %s" args) |
| @@ -441,9 +447,9 @@ its argument list allows full Common Lisp conventions." | |||
| 441 | (keys nil) | 447 | (keys nil) |
| 442 | (laterarg nil) (exactarg nil) minarg) | 448 | (laterarg nil) (exactarg nil) minarg) |
| 443 | (or num (setq num 0)) | 449 | (or num (setq num 0)) |
| 444 | (if (listp (cadr restarg)) | 450 | (setq restarg (if (listp (cadr restarg)) |
| 445 | (setq restarg (make-symbol "--cl-rest--")) | 451 | (make-symbol "--cl-rest--") |
| 446 | (setq restarg (cadr restarg))) | 452 | (cadr restarg))) |
| 447 | (push (list restarg expr) cl--bind-lets) | 453 | (push (list restarg expr) cl--bind-lets) |
| 448 | (if (eq (car args) '&whole) | 454 | (if (eq (car args) '&whole) |
| 449 | (push (list (cl--pop2 args) restarg) cl--bind-lets)) | 455 | (push (list (cl--pop2 args) restarg) cl--bind-lets)) |
| @@ -570,12 +576,11 @@ its argument list allows full Common Lisp conventions." | |||
| 570 | "Bind the variables in ARGS to the result of EXPR and execute BODY." | 576 | "Bind the variables in ARGS to the result of EXPR and execute BODY." |
| 571 | (declare (indent 2) | 577 | (declare (indent 2) |
| 572 | (debug (&define cl-macro-list def-form cl-declarations def-body))) | 578 | (debug (&define cl-macro-list def-form cl-declarations def-body))) |
| 573 | (let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-inits nil) | 579 | (let* ((cl--bind-lets nil) (cl--bind-forms nil) |
| 574 | (cl--bind-defs nil) (cl--bind-block 'cl-none) (cl--bind-enquote nil)) | 580 | (cl--bind-defs nil) (cl--bind-block 'cl-none) (cl--bind-enquote nil)) |
| 575 | (cl--do-arglist (or args '(&aux)) expr) | 581 | (cl--do-arglist (or args '(&aux)) expr) |
| 576 | (append '(progn) cl--bind-inits | 582 | (macroexp-let* (nreverse cl--bind-lets) |
| 577 | (list `(let* ,(nreverse cl--bind-lets) | 583 | (macroexp-progn (append (nreverse cl--bind-forms) body))))) |
| 578 | ,@(nreverse cl--bind-forms) ,@body))))) | ||
| 579 | 584 | ||
| 580 | 585 | ||
| 581 | ;;; The `cl-eval-when' form. | 586 | ;;; The `cl-eval-when' form. |
| @@ -655,30 +660,26 @@ allowed only in the final clause, and matches if no other keys match. | |||
| 655 | Key values are compared by `eql'. | 660 | Key values are compared by `eql'. |
| 656 | \n(fn EXPR (KEYLIST BODY...)...)" | 661 | \n(fn EXPR (KEYLIST BODY...)...)" |
| 657 | (declare (indent 1) (debug (form &rest (sexp body)))) | 662 | (declare (indent 1) (debug (form &rest (sexp body)))) |
| 658 | (let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) | 663 | (macroexp-let2 macroexp-copyable-p temp expr |
| 659 | (head-list nil) | 664 | (let* ((head-list nil)) |
| 660 | (body (cons | 665 | `(cond |
| 661 | 'cond | 666 | ,@(mapcar |
| 662 | (mapcar | 667 | (lambda (c) |
| 663 | (function | 668 | (cons (cond ((memq (car c) '(t otherwise)) t) |
| 664 | (lambda (c) | 669 | ((eq (car c) 'cl--ecase-error-flag) |
| 665 | (cons (cond ((memq (car c) '(t otherwise)) t) | 670 | `(error "cl-ecase failed: %s, %s" |
| 666 | ((eq (car c) 'cl--ecase-error-flag) | 671 | ,temp ',(reverse head-list))) |
| 667 | `(error "cl-ecase failed: %s, %s" | 672 | ((listp (car c)) |
| 668 | ,temp ',(reverse head-list))) | 673 | (setq head-list (append (car c) head-list)) |
| 669 | ((listp (car c)) | 674 | `(cl-member ,temp ',(car c))) |
| 670 | (setq head-list (append (car c) head-list)) | 675 | (t |
| 671 | `(cl-member ,temp ',(car c))) | 676 | (if (memq (car c) head-list) |
| 672 | (t | 677 | (error "Duplicate key in case: %s" |
| 673 | (if (memq (car c) head-list) | 678 | (car c))) |
| 674 | (error "Duplicate key in case: %s" | 679 | (push (car c) head-list) |
| 675 | (car c))) | 680 | `(eql ,temp ',(car c)))) |
| 676 | (push (car c) head-list) | 681 | (or (cdr c) '(nil)))) |
| 677 | `(eql ,temp ',(car c)))) | 682 | clauses))))) |
| 678 | (or (cdr c) '(nil))))) | ||
| 679 | clauses)))) | ||
| 680 | (if (eq temp expr) body | ||
| 681 | `(let ((,temp ,expr)) ,body)))) | ||
| 682 | 683 | ||
| 683 | ;;;###autoload | 684 | ;;;###autoload |
| 684 | (defmacro cl-ecase (expr &rest clauses) | 685 | (defmacro cl-ecase (expr &rest clauses) |
| @@ -698,24 +699,22 @@ final clause, and matches if no other keys match. | |||
| 698 | \n(fn EXPR (TYPE BODY...)...)" | 699 | \n(fn EXPR (TYPE BODY...)...)" |
| 699 | (declare (indent 1) | 700 | (declare (indent 1) |
| 700 | (debug (form &rest ([&or cl-type-spec "otherwise"] body)))) | 701 | (debug (form &rest ([&or cl-type-spec "otherwise"] body)))) |
| 701 | (let* ((temp (if (cl--simple-expr-p expr 3) expr (make-symbol "--cl-var--"))) | 702 | (macroexp-let2 macroexp-copyable-p temp expr |
| 702 | (type-list nil) | 703 | (let* ((type-list nil)) |
| 703 | (body (cons | 704 | (cons |
| 704 | 'cond | 705 | 'cond |
| 705 | (mapcar | 706 | (mapcar |
| 706 | (function | 707 | (function |
| 707 | (lambda (c) | 708 | (lambda (c) |
| 708 | (cons (cond ((eq (car c) 'otherwise) t) | 709 | (cons (cond ((eq (car c) 'otherwise) t) |
| 709 | ((eq (car c) 'cl--ecase-error-flag) | 710 | ((eq (car c) 'cl--ecase-error-flag) |
| 710 | `(error "cl-etypecase failed: %s, %s" | 711 | `(error "cl-etypecase failed: %s, %s" |
| 711 | ,temp ',(reverse type-list))) | 712 | ,temp ',(reverse type-list))) |
| 712 | (t | 713 | (t |
| 713 | (push (car c) type-list) | 714 | (push (car c) type-list) |
| 714 | (cl--make-type-test temp (car c)))) | 715 | `(cl-typep ,temp ',(car c)))) |
| 715 | (or (cdr c) '(nil))))) | 716 | (or (cdr c) '(nil))))) |
| 716 | clauses)))) | 717 | clauses))))) |
| 717 | (if (eq temp expr) body | ||
| 718 | `(let ((,temp ,expr)) ,body)))) | ||
| 719 | 718 | ||
| 720 | ;;;###autoload | 719 | ;;;###autoload |
| 721 | (defmacro cl-etypecase (expr &rest clauses) | 720 | (defmacro cl-etypecase (expr &rest clauses) |
| @@ -1439,16 +1438,14 @@ For more details, see Info node `(cl)Loop Facility'. | |||
| 1439 | (push `(progn (if ,what (cl-incf ,var)) t) cl--loop-body))) | 1438 | (push `(progn (if ,what (cl-incf ,var)) t) cl--loop-body))) |
| 1440 | 1439 | ||
| 1441 | ((memq word '(minimize minimizing maximize maximizing)) | 1440 | ((memq word '(minimize minimizing maximize maximizing)) |
| 1442 | (let* ((what (pop cl--loop-args)) | 1441 | (push `(progn ,(macroexp-let2 macroexp-copyable-p temp |
| 1443 | (temp (if (cl--simple-expr-p what) what | 1442 | (pop cl--loop-args) |
| 1444 | (make-symbol "--cl-var--"))) | 1443 | (let* ((var (cl--loop-handle-accum nil)) |
| 1445 | (var (cl--loop-handle-accum nil)) | 1444 | (func (intern (substring (symbol-name word) |
| 1446 | (func (intern (substring (symbol-name word) 0 3))) | 1445 | 0 3)))) |
| 1447 | (set `(setq ,var (if ,var (,func ,var ,temp) ,temp)))) | 1446 | `(setq ,var (if ,var (,func ,var ,temp) ,temp)))) |
| 1448 | (push `(progn ,(if (eq temp what) set | 1447 | t) |
| 1449 | `(let ((,temp ,what)) ,set)) | 1448 | cl--loop-body)) |
| 1450 | t) | ||
| 1451 | cl--loop-body))) | ||
| 1452 | 1449 | ||
| 1453 | ((eq word 'with) | 1450 | ((eq word 'with) |
| 1454 | (let ((bindings nil)) | 1451 | (let ((bindings nil)) |
| @@ -2104,14 +2101,11 @@ values. For compatibility, (cl-values A B C) is a synonym for (list A B C). | |||
| 2104 | (< cl--optimize-speed 3) | 2101 | (< cl--optimize-speed 3) |
| 2105 | (= cl--optimize-safety 3))) | 2102 | (= cl--optimize-safety 3))) |
| 2106 | form | 2103 | form |
| 2107 | (let* ((temp (if (cl--simple-expr-p form 3) | 2104 | (macroexp-let2 macroexp-copyable-p temp form |
| 2108 | form (make-symbol "--cl-var--"))) | 2105 | `(progn (unless (cl-typep ,temp ',type) |
| 2109 | (body `(progn (unless ,(cl--make-type-test temp type) | 2106 | (signal 'wrong-type-argument |
| 2110 | (signal 'wrong-type-argument | 2107 | (list ',type ,temp ',form))) |
| 2111 | (list ',type ,temp ',form))) | 2108 | ,temp)))) |
| 2112 | ,temp))) | ||
| 2113 | (if (eq temp form) body | ||
| 2114 | `(let ((,temp ,form)) ,body))))) | ||
| 2115 | 2109 | ||
| 2116 | (defvar cl--proclaim-history t) ; for future compilers | 2110 | (defvar cl--proclaim-history t) ; for future compilers |
| 2117 | (defvar cl--declare-stack t) ; for future compilers | 2111 | (defvar cl--declare-stack t) ; for future compilers |
| @@ -2425,15 +2419,11 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2425 | (tag (intern (format "cl-struct-%s" name))) | 2419 | (tag (intern (format "cl-struct-%s" name))) |
| 2426 | (tag-symbol (intern (format "cl-struct-%s-tags" name))) | 2420 | (tag-symbol (intern (format "cl-struct-%s-tags" name))) |
| 2427 | (include-descs nil) | 2421 | (include-descs nil) |
| 2428 | (side-eff nil) | ||
| 2429 | (type nil) | 2422 | (type nil) |
| 2430 | (named nil) | 2423 | (named nil) |
| 2431 | (forms nil) | 2424 | (forms nil) |
| 2425 | (docstring (if (stringp (car descs)) (pop descs))) | ||
| 2432 | pred-form pred-check) | 2426 | pred-form pred-check) |
| 2433 | (if (stringp (car descs)) | ||
| 2434 | (push `(put ',name 'structure-documentation | ||
| 2435 | ,(pop descs)) | ||
| 2436 | forms)) | ||
| 2437 | (setq descs (cons '(cl-tag-slot) | 2427 | (setq descs (cons '(cl-tag-slot) |
| 2438 | (mapcar (function (lambda (x) (if (consp x) x (list x)))) | 2428 | (mapcar (function (lambda (x) (if (consp x) x (list x)))) |
| 2439 | descs))) | 2429 | descs))) |
| @@ -2458,6 +2448,7 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2458 | ((eq opt :predicate) | 2448 | ((eq opt :predicate) |
| 2459 | (if args (setq predicate (car args)))) | 2449 | (if args (setq predicate (car args)))) |
| 2460 | ((eq opt :include) | 2450 | ((eq opt :include) |
| 2451 | (when include (error "Can't :include more than once")) | ||
| 2461 | (setq include (car args) | 2452 | (setq include (car args) |
| 2462 | include-descs (mapcar (function | 2453 | include-descs (mapcar (function |
| 2463 | (lambda (x) | 2454 | (lambda (x) |
| @@ -2511,20 +2502,19 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2511 | (if named (setq tag name))) | 2502 | (if named (setq tag name))) |
| 2512 | (setq type 'vector named 'true))) | 2503 | (setq type 'vector named 'true))) |
| 2513 | (or named (setq descs (delq (assq 'cl-tag-slot descs) descs))) | 2504 | (or named (setq descs (delq (assq 'cl-tag-slot descs) descs))) |
| 2514 | (push `(defvar ,tag-symbol) forms) | ||
| 2515 | (when (and (null predicate) named) | 2505 | (when (and (null predicate) named) |
| 2516 | (setq predicate (intern (format "cl--struct-%s-p" name)))) | 2506 | (setq predicate (intern (format "cl--struct-%s-p" name)))) |
| 2517 | (setq pred-form (and named | 2507 | (setq pred-form (and named |
| 2518 | (let ((pos (- (length descs) | 2508 | (let ((pos (- (length descs) |
| 2519 | (length (memq (assq 'cl-tag-slot descs) | 2509 | (length (memq (assq 'cl-tag-slot descs) |
| 2520 | descs))))) | 2510 | descs))))) |
| 2521 | (if (eq type 'vector) | 2511 | (cond |
| 2522 | `(and (vectorp cl-x) | 2512 | ((eq type 'vector) |
| 2523 | (>= (length cl-x) ,(length descs)) | 2513 | `(and (vectorp cl-x) |
| 2524 | (memq (aref cl-x ,pos) ,tag-symbol)) | 2514 | (>= (length cl-x) ,(length descs)) |
| 2525 | (if (= pos 0) | 2515 | (memq (aref cl-x ,pos) ,tag-symbol))) |
| 2526 | `(memq (car-safe cl-x) ,tag-symbol) | 2516 | ((= pos 0) `(memq (car-safe cl-x) ,tag-symbol)) |
| 2527 | `(and (consp cl-x) | 2517 | (t `(and (consp cl-x) |
| 2528 | (memq (nth ,pos cl-x) ,tag-symbol)))))) | 2518 | (memq (nth ,pos cl-x) ,tag-symbol)))))) |
| 2529 | pred-check (and pred-form (> safety 0) | 2519 | pred-check (and pred-form (> safety 0) |
| 2530 | (if (and (eq (cl-caadr pred-form) 'vectorp) | 2520 | (if (and (eq (cl-caadr pred-form) 'vectorp) |
| @@ -2546,6 +2536,7 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2546 | (push slot slots) | 2536 | (push slot slots) |
| 2547 | (push (nth 1 desc) defaults) | 2537 | (push (nth 1 desc) defaults) |
| 2548 | (push `(cl-defsubst ,accessor (cl-x) | 2538 | (push `(cl-defsubst ,accessor (cl-x) |
| 2539 | (declare (side-effect-free t)) | ||
| 2549 | ,@(and pred-check | 2540 | ,@(and pred-check |
| 2550 | (list `(or ,pred-check | 2541 | (list `(or ,pred-check |
| 2551 | (error "%s accessing a non-%s" | 2542 | (error "%s accessing a non-%s" |
| @@ -2554,7 +2545,6 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2554 | (if (= pos 0) '(car cl-x) | 2545 | (if (= pos 0) '(car cl-x) |
| 2555 | `(nth ,pos cl-x)))) | 2546 | `(nth ,pos cl-x)))) |
| 2556 | forms) | 2547 | forms) |
| 2557 | (push (cons accessor t) side-eff) | ||
| 2558 | (if (cadr (memq :read-only (cddr desc))) | 2548 | (if (cadr (memq :read-only (cddr desc))) |
| 2559 | (push `(gv-define-expander ,accessor | 2549 | (push `(gv-define-expander ,accessor |
| 2560 | (lambda (_cl-do _cl-x) | 2550 | (lambda (_cl-do _cl-x) |
| @@ -2587,15 +2577,14 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2587 | defaults (nreverse defaults)) | 2577 | defaults (nreverse defaults)) |
| 2588 | (when pred-form | 2578 | (when pred-form |
| 2589 | (push `(cl-defsubst ,predicate (cl-x) | 2579 | (push `(cl-defsubst ,predicate (cl-x) |
| 2580 | (declare (side-effect-free error-free)) | ||
| 2590 | ,(if (eq (car pred-form) 'and) | 2581 | ,(if (eq (car pred-form) 'and) |
| 2591 | (append pred-form '(t)) | 2582 | (append pred-form '(t)) |
| 2592 | `(and ,pred-form t))) | 2583 | `(and ,pred-form t))) |
| 2593 | forms) | 2584 | forms) |
| 2594 | (push `(put ',name 'cl-deftype-satisfies ',predicate) forms) | 2585 | (push `(put ',name 'cl-deftype-satisfies ',predicate) forms)) |
| 2595 | (push (cons predicate 'error-free) side-eff)) | ||
| 2596 | (and copier | 2586 | (and copier |
| 2597 | (progn (push `(defun ,copier (x) (copy-sequence x)) forms) | 2587 | (push `(defalias ',copier #'copy-sequence) forms)) |
| 2598 | (push (cons copier t) side-eff))) | ||
| 2599 | (if constructor | 2588 | (if constructor |
| 2600 | (push (list constructor | 2589 | (push (list constructor |
| 2601 | (cons '&key (delq nil (copy-sequence slots)))) | 2590 | (cons '&key (delq nil (copy-sequence slots)))) |
| @@ -2607,11 +2596,11 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2607 | (make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d))) | 2596 | (make (cl-mapcar (function (lambda (s d) (if (memq s anames) s d))) |
| 2608 | slots defaults))) | 2597 | slots defaults))) |
| 2609 | (push `(cl-defsubst ,name | 2598 | (push `(cl-defsubst ,name |
| 2610 | (&cl-defs '(nil ,@descs) ,@args) | 2599 | (&cl-defs '(nil ,@descs) ,@args) |
| 2600 | ,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs))) | ||
| 2601 | '((declare (side-effect-free t)))) | ||
| 2611 | (,type ,@make)) | 2602 | (,type ,@make)) |
| 2612 | forms) | 2603 | forms))) |
| 2613 | (if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs))) | ||
| 2614 | (push (cons name t) side-eff)))) | ||
| 2615 | (if print-auto (nconc print-func (list '(princ ")" cl-s) t))) | 2604 | (if print-auto (nconc print-func (list '(princ ")" cl-s) t))) |
| 2616 | ;; Don't bother adding to cl-custom-print-functions since it's not used | 2605 | ;; Don't bother adding to cl-custom-print-functions since it's not used |
| 2617 | ;; by anything anyway! | 2606 | ;; by anything anyway! |
| @@ -2624,17 +2613,14 @@ non-nil value, that slot cannot be set via `setf'. | |||
| 2624 | ;; (and ,pred-form ,print-func)) | 2613 | ;; (and ,pred-form ,print-func)) |
| 2625 | ;; cl-custom-print-functions)) | 2614 | ;; cl-custom-print-functions)) |
| 2626 | ;; forms)) | 2615 | ;; forms)) |
| 2627 | (push `(setq ,tag-symbol (list ',tag)) forms) | 2616 | `(progn |
| 2628 | (push `(cl-eval-when (compile load eval) | 2617 | (defvar ,tag-symbol) |
| 2629 | (put ',name 'cl-struct-slots ',descs) | 2618 | ,@(nreverse forms) |
| 2630 | (put ',name 'cl-struct-type ',(list type (eq named t))) | 2619 | (eval-and-compile |
| 2631 | (put ',name 'cl-struct-include ',include) | 2620 | (cl-struct-define ',name ,docstring ',include |
| 2632 | (put ',name 'cl-struct-print ,print-auto) | 2621 | ',type ,(eq named t) ',descs ',tag-symbol ',tag |
| 2633 | ,@(mapcar (lambda (x) | 2622 | ',print-auto)) |
| 2634 | `(function-put ',(car x) 'side-effect-free ',(cdr x))) | 2623 | ',name))) |
| 2635 | side-eff)) | ||
| 2636 | forms) | ||
| 2637 | `(progn ,@(nreverse (cons `',name forms))))) | ||
| 2638 | 2624 | ||
| 2639 | (defun cl-struct-sequence-type (struct-type) | 2625 | (defun cl-struct-sequence-type (struct-type) |
| 2640 | "Return the sequence used to build STRUCT-TYPE. | 2626 | "Return the sequence used to build STRUCT-TYPE. |
| @@ -2741,14 +2727,11 @@ STRING is an optional description of the desired type." | |||
| 2741 | (declare (debug (place cl-type-spec &optional stringp))) | 2727 | (declare (debug (place cl-type-spec &optional stringp))) |
| 2742 | (and (or (not (cl--compiling-file)) | 2728 | (and (or (not (cl--compiling-file)) |
| 2743 | (< cl--optimize-speed 3) (= cl--optimize-safety 3)) | 2729 | (< cl--optimize-speed 3) (= cl--optimize-safety 3)) |
| 2744 | (let* ((temp (if (cl--simple-expr-p form 3) | 2730 | (macroexp-let2 macroexp-copyable-p temp form |
| 2745 | form (make-symbol "--cl-var--"))) | 2731 | `(progn (or (cl-typep ,temp ',type) |
| 2746 | (body `(or ,(cl--make-type-test temp type) | 2732 | (signal 'wrong-type-argument |
| 2747 | (signal 'wrong-type-argument | 2733 | (list ,(or string `',type) ,temp ',form))) |
| 2748 | (list ,(or string `',type) | 2734 | nil)))) |
| 2749 | ,temp ',form))))) | ||
| 2750 | (if (eq temp form) `(progn ,body nil) | ||
| 2751 | `(let ((,temp ,form)) ,body nil))))) | ||
| 2752 | 2735 | ||
| 2753 | ;;;###autoload | 2736 | ;;;###autoload |
| 2754 | (defmacro cl-assert (form &optional show-args string &rest args) | 2737 | (defmacro cl-assert (form &optional show-args string &rest args) |
diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el new file mode 100644 index 00000000000..c9867b412a1 --- /dev/null +++ b/lisp/emacs-lisp/cl-preloaded.el | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | ;;; cl-preloaded.el --- Preloaded part of the CL library -*- lexical-binding: t; -*- | ||
| 2 | |||
| 3 | ;; Copyright (C) 2015 Free Software Foundation, Inc | ||
| 4 | |||
| 5 | ;; Author: Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 6 | |||
| 7 | ;; This file is part of GNU Emacs. | ||
| 8 | |||
| 9 | ;; GNU Emacs is free software: you can redistribute it and/or modify | ||
| 10 | ;; it under the terms of the GNU General Public License as published by | ||
| 11 | ;; the Free Software Foundation, either version 3 of the License, or | ||
| 12 | ;; (at your option) any later version. | ||
| 13 | |||
| 14 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 15 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | ;; GNU General Public License for more details. | ||
| 18 | |||
| 19 | ;; You should have received a copy of the GNU General Public License | ||
| 20 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | ||
| 21 | |||
| 22 | ;;; Commentary: | ||
| 23 | |||
| 24 | ;; The expectation is that structs defined with cl-defstruct do not | ||
| 25 | ;; need cl-lib at run-time, but we'd like to hide the details of the | ||
| 26 | ;; cl-struct metadata behind the cl-struct-define function, so we put | ||
| 27 | ;; it in this pre-loaded file. | ||
| 28 | |||
| 29 | ;;; Code: | ||
| 30 | |||
| 31 | (defun cl-struct-define (name docstring parent type named slots children-sym | ||
| 32 | tag print-auto) | ||
| 33 | (if (boundp children-sym) | ||
| 34 | (add-to-list children-sym tag) | ||
| 35 | (set children-sym (list tag))) | ||
| 36 | ;; If the cl-generic support, we need to be able to check | ||
| 37 | ;; if a vector is a cl-struct object, without knowing its particular type. | ||
| 38 | ;; So we use the (otherwise) unused function slots of the tag symbol | ||
| 39 | ;; to put a special witness value, to make the check easy and reliable. | ||
| 40 | (unless named (fset tag :quick-object-witness-check)) | ||
| 41 | (put name 'cl-struct-slots slots) | ||
| 42 | (put name 'cl-struct-type (list type named)) | ||
| 43 | (if parent (put name 'cl-struct-include parent)) | ||
| 44 | (if print-auto (put name 'cl-struct-print print-auto)) | ||
| 45 | (if docstring (put name 'structure-documentation docstring))) | ||
| 46 | |||
| 47 | (provide 'cl-preloaded) | ||
| 48 | ;;; cl-preloaded.el ends here | ||
diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index 1cd7bd76b0e..5da1cea6bb3 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el | |||
| @@ -376,7 +376,6 @@ The two cases that are handled are: | |||
| 376 | (setq cl--function-convert-cache (cons newf res)) | 376 | (setq cl--function-convert-cache (cons newf res)) |
| 377 | res)))) | 377 | res)))) |
| 378 | (t | 378 | (t |
| 379 | (setq cl--labels-convert-cache cl--function-convert-cache) | ||
| 380 | (cl--labels-convert f)))) | 379 | (cl--labels-convert f)))) |
| 381 | 380 | ||
| 382 | (defmacro lexical-let (bindings &rest body) | 381 | (defmacro lexical-let (bindings &rest body) |
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 7e6f56518a2..f7e8619948a 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el | |||
| @@ -149,11 +149,12 @@ For example, you could write | |||
| 149 | ...BODY CODE...)" | 149 | ...BODY CODE...)" |
| 150 | (declare (doc-string 2) | 150 | (declare (doc-string 2) |
| 151 | (debug (&define name string-or-null-p | 151 | (debug (&define name string-or-null-p |
| 152 | [&optional [¬ keywordp] sexp | 152 | [&optional [¬ keywordp] sexp |
| 153 | &optional [¬ keywordp] sexp | 153 | &optional [¬ keywordp] sexp |
| 154 | &optional [¬ keywordp] sexp] | 154 | &optional [¬ keywordp] sexp] |
| 155 | [&rest [keywordp sexp]] | 155 | [&rest [keywordp sexp]] |
| 156 | def-body))) | 156 | def-body)) |
| 157 | (indent 1)) | ||
| 157 | 158 | ||
| 158 | ;; Allow skipping the first three args. | 159 | ;; Allow skipping the first three args. |
| 159 | (cond | 160 | (cond |
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el index feb06711cb3..46585ee76c6 100644 --- a/lisp/emacs-lisp/eieio-base.el +++ b/lisp/emacs-lisp/eieio-base.el | |||
| @@ -219,7 +219,7 @@ for CLASS. Optional ALLOW-SUBCLASS says that it is ok for | |||
| 219 | being pedantic." | 219 | being pedantic." |
| 220 | (unless class | 220 | (unless class |
| 221 | (message "Unsafe call to `eieio-persistent-read'.")) | 221 | (message "Unsafe call to `eieio-persistent-read'.")) |
| 222 | (when class (eieio--check-type class-p class)) | 222 | (when class (cl-check-type class class)) |
| 223 | (let ((ret nil) | 223 | (let ((ret nil) |
| 224 | (buffstr nil)) | 224 | (buffstr nil)) |
| 225 | (unwind-protect | 225 | (unwind-protect |
| @@ -481,7 +481,7 @@ instance." | |||
| 481 | 481 | ||
| 482 | (cl-defmethod eieio-object-set-name-string ((obj eieio-named) name) | 482 | (cl-defmethod eieio-object-set-name-string ((obj eieio-named) name) |
| 483 | "Set the string which is OBJ's NAME." | 483 | "Set the string which is OBJ's NAME." |
| 484 | (eieio--check-type stringp name) | 484 | (cl-check-type name string) |
| 485 | (eieio-oset obj 'object-name name)) | 485 | (eieio-oset obj 'object-name name)) |
| 486 | 486 | ||
| 487 | (cl-defmethod clone ((obj eieio-named) &rest params) | 487 | (cl-defmethod clone ((obj eieio-named) &rest params) |
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 7492f0522ab..77d8c01388b 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el | |||
| @@ -40,6 +40,8 @@ | |||
| 40 | (declare-function slot-unbound "eieio") | 40 | (declare-function slot-unbound "eieio") |
| 41 | (declare-function slot-missing "eieio") | 41 | (declare-function slot-missing "eieio") |
| 42 | (declare-function child-of-class-p "eieio") | 42 | (declare-function child-of-class-p "eieio") |
| 43 | (declare-function same-class-p "eieio") | ||
| 44 | (declare-function object-of-class-p "eieio") | ||
| 43 | 45 | ||
| 44 | 46 | ||
| 45 | ;;; | 47 | ;;; |
| @@ -154,15 +156,6 @@ Currently under control of this var: | |||
| 154 | 156 | ||
| 155 | 157 | ||
| 156 | ;;; Important macros used internally in eieio. | 158 | ;;; Important macros used internally in eieio. |
| 157 | ;; | ||
| 158 | (defmacro eieio--check-type (type obj) | ||
| 159 | (unless (symbolp obj) | ||
| 160 | (error "eieio--check-type wants OBJ to be a variable")) | ||
| 161 | `(if (not ,(cond | ||
| 162 | ((eq 'or (car-safe type)) | ||
| 163 | `(or ,@(mapcar (lambda (type) `(,type ,obj)) (cdr type)))) | ||
| 164 | (t `(,type ,obj)))) | ||
| 165 | (signal 'wrong-type-argument (list ',type ,obj)))) | ||
| 166 | 159 | ||
| 167 | (defmacro eieio--class-v (class) ;Use a macro, so it acts as a GV place. | 160 | (defmacro eieio--class-v (class) ;Use a macro, so it acts as a GV place. |
| 168 | "Internal: Return the class vector from the CLASS symbol." | 161 | "Internal: Return the class vector from the CLASS symbol." |
| @@ -183,27 +176,17 @@ Currently under control of this var: | |||
| 183 | (eq (aref class 0) 'defclass) | 176 | (eq (aref class 0) 'defclass) |
| 184 | (error nil))) | 177 | (error nil))) |
| 185 | 178 | ||
| 186 | (defsubst eieio-class-object (class) | 179 | (defun class-p (class) |
| 187 | "Check that CLASS is a class and return the corresponding object." | ||
| 188 | (let ((c (eieio--class-object class))) | ||
| 189 | (eieio--check-type eieio--class-p c) | ||
| 190 | c)) | ||
| 191 | |||
| 192 | (defsubst class-p (class) | ||
| 193 | "Return non-nil if CLASS is a valid class vector. | 180 | "Return non-nil if CLASS is a valid class vector. |
| 194 | CLASS is a symbol." ;FIXME: Is it a vector or a symbol? | 181 | CLASS is a symbol." ;FIXME: Is it a vector or a symbol? |
| 195 | ;; this new method is faster since it doesn't waste time checking lots of | 182 | (and (symbolp class) (eieio--class-p (eieio--class-v class)))) |
| 196 | ;; things. | ||
| 197 | (condition-case nil | ||
| 198 | (eq (aref (eieio--class-v class) 0) 'defclass) | ||
| 199 | (error nil))) | ||
| 200 | 183 | ||
| 201 | (defun eieio-class-name (class) | 184 | (defun eieio-class-name (class) |
| 202 | "Return a Lisp like symbol name for CLASS." | 185 | "Return a Lisp like symbol name for CLASS." |
| 203 | ;; FIXME: What's a "Lisp like symbol name"? | 186 | ;; FIXME: What's a "Lisp like symbol name"? |
| 204 | ;; FIXME: CLOS returns a symbol, but the code returns a string. | 187 | ;; FIXME: CLOS returns a symbol, but the code returns a string. |
| 205 | (if (eieio--class-p class) (setq class (eieio--class-symbol class))) | 188 | (if (eieio--class-p class) (setq class (eieio--class-symbol class))) |
| 206 | (eieio--check-type class-p class) | 189 | (cl-check-type class class) |
| 207 | ;; I think this is supposed to return a symbol, but to me CLASS is a symbol, | 190 | ;; I think this is supposed to return a symbol, but to me CLASS is a symbol, |
| 208 | ;; and I wanted a string. Arg! | 191 | ;; and I wanted a string. Arg! |
| 209 | (format "#<class %s>" (symbol-name class))) | 192 | (format "#<class %s>" (symbol-name class))) |
| @@ -221,14 +204,17 @@ CLASS is a symbol." ;FIXME: Is it a vector or a symbol? | |||
| 221 | Return nil if that option doesn't exist." | 204 | Return nil if that option doesn't exist." |
| 222 | (eieio--class-option-assoc (eieio--class-options class) option)) | 205 | (eieio--class-option-assoc (eieio--class-options class) option)) |
| 223 | 206 | ||
| 224 | (defsubst eieio-object-p (obj) | 207 | (defun eieio-object-p (obj) |
| 225 | "Return non-nil if OBJ is an EIEIO object." | 208 | "Return non-nil if OBJ is an EIEIO object." |
| 226 | (and (vectorp obj) | 209 | (and (vectorp obj) |
| 227 | (condition-case nil | 210 | (> (length obj) 0) |
| 228 | (eq (aref (eieio--object-class-object obj) 0) 'defclass) | 211 | (let ((tag (eieio--object-class-tag obj))) |
| 229 | (error nil)))) | 212 | (and (symbolp tag) |
| 213 | ;; (eq (symbol-function tag) :quick-object-witness-check) | ||
| 214 | (boundp tag) | ||
| 215 | (eieio--class-p (symbol-value tag)))))) | ||
| 230 | 216 | ||
| 231 | (defalias 'object-p 'eieio-object-p) | 217 | (define-obsolete-function-alias 'object-p 'eieio-object-p "25.1") |
| 232 | 218 | ||
| 233 | (defsubst class-abstract-p (class) | 219 | (defsubst class-abstract-p (class) |
| 234 | "Return non-nil if CLASS is abstract. | 220 | "Return non-nil if CLASS is abstract. |
| @@ -266,10 +252,9 @@ It creates an autoload function for CNAME's constructor." | |||
| 266 | ;; simply not exist yet. So instead we just don't store the list of parents | 252 | ;; simply not exist yet. So instead we just don't store the list of parents |
| 267 | ;; here in eieio-defclass-autoload at all, since it seems that they're just | 253 | ;; here in eieio-defclass-autoload at all, since it seems that they're just |
| 268 | ;; not needed before the class is actually loaded. | 254 | ;; not needed before the class is actually loaded. |
| 269 | (let* ((oldc (when (class-p cname) (eieio--class-v cname))) | 255 | (let* ((oldc (eieio--class-v cname)) |
| 270 | (newc (eieio--class-make cname)) | 256 | (newc (eieio--class-make cname))) |
| 271 | ) | 257 | (if (eieio--class-p oldc) |
| 272 | (if oldc | ||
| 273 | nil ;; Do nothing if we already have this class. | 258 | nil ;; Do nothing if we already have this class. |
| 274 | 259 | ||
| 275 | ;; turn this into a usable self-pointing symbol | 260 | ;; turn this into a usable self-pointing symbol |
| @@ -300,7 +285,21 @@ It creates an autoload function for CNAME's constructor." | |||
| 300 | (cl-every (lambda (elem) (cl-typep elem ',elem-type)) | 285 | (cl-every (lambda (elem) (cl-typep elem ',elem-type)) |
| 301 | list))))) | 286 | list))))) |
| 302 | 287 | ||
| 303 | (declare-function eieio--defmethod "eieio-generic" (method kind argclass code)) | 288 | |
| 289 | (defun eieio-make-class-predicate (class) | ||
| 290 | (lambda (obj) | ||
| 291 | ;; (:docstring (format "Test OBJ to see if it's an object of type %S." | ||
| 292 | ;; class)) | ||
| 293 | (and (eieio-object-p obj) | ||
| 294 | (same-class-p obj class)))) | ||
| 295 | |||
| 296 | (defun eieio-make-child-predicate (class) | ||
| 297 | (lambda (obj) | ||
| 298 | ;; (:docstring (format | ||
| 299 | ;; "Test OBJ to see if it's an object is a child of type %S." | ||
| 300 | ;; class)) | ||
| 301 | (and (eieio-object-p obj) | ||
| 302 | (object-of-class-p obj class)))) | ||
| 304 | 303 | ||
| 305 | (defun eieio-defclass-internal (cname superclasses slots options) | 304 | (defun eieio-defclass-internal (cname superclasses slots options) |
| 306 | "Define CNAME as a new subclass of SUPERCLASSES. | 305 | "Define CNAME as a new subclass of SUPERCLASSES. |
| @@ -314,7 +313,7 @@ See `defclass' for more information." | |||
| 314 | (setq eieio-hook nil) | 313 | (setq eieio-hook nil) |
| 315 | 314 | ||
| 316 | (let* ((pname superclasses) | 315 | (let* ((pname superclasses) |
| 317 | (oldc (when (class-p cname) (eieio--class-v cname))) | 316 | (oldc (let ((c (eieio--class-v cname))) (if (eieio--class-p c) c))) |
| 318 | (newc (if (and oldc (not (eieio--class-default-object-cache oldc))) | 317 | (newc (if (and oldc (not (eieio--class-default-object-cache oldc))) |
| 319 | ;; The oldc class is a stub setup by eieio-defclass-autoload. | 318 | ;; The oldc class is a stub setup by eieio-defclass-autoload. |
| 320 | ;; Reuse it instead of creating a new one, so that existing | 319 | ;; Reuse it instead of creating a new one, so that existing |
| @@ -342,19 +341,20 @@ See `defclass' for more information." | |||
| 342 | (if pname | 341 | (if pname |
| 343 | (progn | 342 | (progn |
| 344 | (dolist (p pname) | 343 | (dolist (p pname) |
| 345 | (if (and p (symbolp p)) | 344 | (if (not (and p (symbolp p))) |
| 346 | (if (not (class-p p)) | 345 | (error "Invalid parent class %S" p) |
| 346 | (let ((c (eieio--class-v p))) | ||
| 347 | (if (not (eieio--class-p c)) | ||
| 347 | ;; bad class | 348 | ;; bad class |
| 348 | (error "Given parent class %S is not a class" p) | 349 | (error "Given parent class %S is not a class" p) |
| 349 | ;; good parent class... | 350 | ;; good parent class... |
| 350 | ;; save new child in parent | 351 | ;; save new child in parent |
| 351 | (cl-pushnew cname (eieio--class-children (eieio--class-v p))) | 352 | (cl-pushnew cname (eieio--class-children c)) |
| 352 | ;; Get custom groups, and store them into our local copy. | 353 | ;; Get custom groups, and store them into our local copy. |
| 353 | (mapc (lambda (g) (cl-pushnew g groups :test #'equal)) | 354 | (mapc (lambda (g) (cl-pushnew g groups :test #'equal)) |
| 354 | (eieio--class-option (eieio--class-v p) :custom-groups)) | 355 | (eieio--class-option c :custom-groups)) |
| 355 | ;; save parent in child | 356 | ;; Save parent in child. |
| 356 | (push (eieio--class-v p) (eieio--class-parent newc))) | 357 | (push c (eieio--class-parent newc)))))) |
| 357 | (error "Invalid parent class %S" p))) | ||
| 358 | ;; Reverse the list of our parents so that they are prioritized in | 358 | ;; Reverse the list of our parents so that they are prioritized in |
| 359 | ;; the same order as specified in the code. | 359 | ;; the same order as specified in the code. |
| 360 | (cl-callf nreverse (eieio--class-parent newc))) | 360 | (cl-callf nreverse (eieio--class-parent newc))) |
| @@ -506,13 +506,7 @@ See `defclass' for more information." | |||
| 506 | (eieio--class-option-assoc options :documentation)) | 506 | (eieio--class-option-assoc options :documentation)) |
| 507 | 507 | ||
| 508 | ;; Save the file location where this class is defined. | 508 | ;; Save the file location where this class is defined. |
| 509 | (let ((fname (if load-in-progress | 509 | (add-to-list 'current-load-list `(eieio-defclass . ,cname)) |
| 510 | load-file-name | ||
| 511 | buffer-file-name))) | ||
| 512 | (when fname | ||
| 513 | (when (string-match "\\.elc\\'" fname) | ||
| 514 | (setq fname (substring fname 0 (1- (length fname))))) | ||
| 515 | (put cname 'class-location fname))) | ||
| 516 | 510 | ||
| 517 | ;; We have a list of custom groups. Store them into the options. | 511 | ;; We have a list of custom groups. Store them into the options. |
| 518 | (let ((g (eieio--class-option-assoc options :custom-groups))) | 512 | (let ((g (eieio--class-option-assoc options :custom-groups))) |
| @@ -539,6 +533,7 @@ See `defclass' for more information." | |||
| 539 | ;; objects readable. | 533 | ;; objects readable. |
| 540 | (tag (intern (format "eieio-class-tag--%s" cname)))) | 534 | (tag (intern (format "eieio-class-tag--%s" cname)))) |
| 541 | (set tag newc) | 535 | (set tag newc) |
| 536 | (fset tag :quick-object-witness-check) | ||
| 542 | (setf (eieio--object-class-tag cache) tag) | 537 | (setf (eieio--object-class-tag cache) tag) |
| 543 | (let ((eieio-skip-typecheck t)) | 538 | (let ((eieio-skip-typecheck t)) |
| 544 | ;; All type-checking has been done to our satisfaction | 539 | ;; All type-checking has been done to our satisfaction |
| @@ -908,12 +903,13 @@ Argument FN is the function calling this verifier." | |||
| 908 | ;; | 903 | ;; |
| 909 | (defun eieio-oref (obj slot) | 904 | (defun eieio-oref (obj slot) |
| 910 | "Return the value in OBJ at SLOT in the object vector." | 905 | "Return the value in OBJ at SLOT in the object vector." |
| 911 | (eieio--check-type (or eieio-object-p class-p) obj) | 906 | (cl-check-type slot symbol) |
| 912 | (eieio--check-type symbolp slot) | 907 | (cl-check-type obj (or eieio-object class)) |
| 913 | (if (class-p obj) (eieio-class-un-autoload obj)) | ||
| 914 | (let* ((class (cond ((symbolp obj) | 908 | (let* ((class (cond ((symbolp obj) |
| 915 | (error "eieio-oref called on a class!") | 909 | (error "eieio-oref called on a class!") |
| 916 | (eieio--class-v obj)) | 910 | (let ((c (eieio--class-v obj))) |
| 911 | (if (eieio--class-p c) (eieio-class-un-autoload obj)) | ||
| 912 | c)) | ||
| 917 | (t (eieio--object-class-object obj)))) | 913 | (t (eieio--object-class-object obj)))) |
| 918 | (c (eieio--slot-name-index class obj slot))) | 914 | (c (eieio--slot-name-index class obj slot))) |
| 919 | (if (not c) | 915 | (if (not c) |
| @@ -928,15 +924,15 @@ Argument FN is the function calling this verifier." | |||
| 928 | (slot-missing obj slot 'oref) | 924 | (slot-missing obj slot 'oref) |
| 929 | ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot)) | 925 | ;;(signal 'invalid-slot-name (list (eieio-object-name obj) slot)) |
| 930 | ) | 926 | ) |
| 931 | (eieio--check-type eieio-object-p obj) | 927 | (cl-check-type obj eieio-object) |
| 932 | (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref)))) | 928 | (eieio-barf-if-slot-unbound (aref obj c) obj slot 'oref)))) |
| 933 | 929 | ||
| 934 | 930 | ||
| 935 | (defun eieio-oref-default (obj slot) | 931 | (defun eieio-oref-default (obj slot) |
| 936 | "Do the work for the macro `oref-default' with similar parameters. | 932 | "Do the work for the macro `oref-default' with similar parameters. |
| 937 | Fills in OBJ's SLOT with its default value." | 933 | Fills in OBJ's SLOT with its default value." |
| 938 | (eieio--check-type (or eieio-object-p class-p) obj) | 934 | (cl-check-type obj (or eieio-object class)) |
| 939 | (eieio--check-type symbolp slot) | 935 | (cl-check-type slot symbol) |
| 940 | (let* ((cl (cond ((symbolp obj) (eieio--class-v obj)) | 936 | (let* ((cl (cond ((symbolp obj) (eieio--class-v obj)) |
| 941 | (t (eieio--object-class-object obj)))) | 937 | (t (eieio--object-class-object obj)))) |
| 942 | (c (eieio--slot-name-index cl obj slot))) | 938 | (c (eieio--slot-name-index cl obj slot))) |
| @@ -974,8 +970,8 @@ Fills in OBJ's SLOT with its default value." | |||
| 974 | (defun eieio-oset (obj slot value) | 970 | (defun eieio-oset (obj slot value) |
| 975 | "Do the work for the macro `oset'. | 971 | "Do the work for the macro `oset'. |
| 976 | Fills in OBJ's SLOT with VALUE." | 972 | Fills in OBJ's SLOT with VALUE." |
| 977 | (eieio--check-type eieio-object-p obj) | 973 | (cl-check-type obj eieio-object) |
| 978 | (eieio--check-type symbolp slot) | 974 | (cl-check-type slot symbol) |
| 979 | (let* ((class (eieio--object-class-object obj)) | 975 | (let* ((class (eieio--object-class-object obj)) |
| 980 | (c (eieio--slot-name-index class obj slot))) | 976 | (c (eieio--slot-name-index class obj slot))) |
| 981 | (if (not c) | 977 | (if (not c) |
| @@ -999,8 +995,8 @@ Fills in OBJ's SLOT with VALUE." | |||
| 999 | "Do the work for the macro `oset-default'. | 995 | "Do the work for the macro `oset-default'. |
| 1000 | Fills in the default value in CLASS' in SLOT with VALUE." | 996 | Fills in the default value in CLASS' in SLOT with VALUE." |
| 1001 | (setq class (eieio--class-object class)) | 997 | (setq class (eieio--class-object class)) |
| 1002 | (eieio--check-type eieio--class-p class) | 998 | (cl-check-type class eieio--class) |
| 1003 | (eieio--check-type symbolp slot) | 999 | (cl-check-type slot symbol) |
| 1004 | (let* ((c (eieio--slot-name-index class nil slot))) | 1000 | (let* ((c (eieio--slot-name-index class nil slot))) |
| 1005 | (if (not c) | 1001 | (if (not c) |
| 1006 | ;; It might be missing because it is a :class allocated slot. | 1002 | ;; It might be missing because it is a :class allocated slot. |
| @@ -1222,10 +1218,11 @@ method invocation orders of the involved classes." | |||
| 1222 | ;; A class must be defined before it can be used as a parameter | 1218 | ;; A class must be defined before it can be used as a parameter |
| 1223 | ;; specializer in a defmethod form. | 1219 | ;; specializer in a defmethod form. |
| 1224 | ;; So we can ignore types that are not known to denote classes. | 1220 | ;; So we can ignore types that are not known to denote classes. |
| 1225 | (and (class-p type) | 1221 | (and (eieio--class-p (eieio--class-object type)) |
| 1226 | ;; Prefer (aref ,name 0) over (eieio--class-tag ,name) so that | 1222 | ;; Use the exact same code as for cl-struct, so that methods |
| 1227 | ;; the tagcode is identical to the tagcode used for cl-struct. | 1223 | ;; that dispatch on both kinds of objects get to share this |
| 1228 | `(50 . (and (vectorp ,name) (aref ,name 0))))) | 1224 | ;; part of the dispatch code. |
| 1225 | `(50 . ,(cl--generic-struct-tag name)))) | ||
| 1229 | 1226 | ||
| 1230 | (add-function :before-until cl-generic-tag-types-function | 1227 | (add-function :before-until cl-generic-tag-types-function |
| 1231 | #'eieio--generic-tag-types) | 1228 | #'eieio--generic-tag-types) |
diff --git a/lisp/emacs-lisp/eieio-datadebug.el b/lisp/emacs-lisp/eieio-datadebug.el index 119f7cce038..82349192e5e 100644 --- a/lisp/emacs-lisp/eieio-datadebug.el +++ b/lisp/emacs-lisp/eieio-datadebug.el | |||
| @@ -117,7 +117,7 @@ PREBUTTONTEXT is some text between PREFIX and the object button." | |||
| 117 | (setq publa (cdr publa))))))) | 117 | (setq publa (cdr publa))))))) |
| 118 | 118 | ||
| 119 | ;;; Augment the Data debug thing display list. | 119 | ;;; Augment the Data debug thing display list. |
| 120 | (data-debug-add-specialized-thing (lambda (thing) (object-p thing)) | 120 | (data-debug-add-specialized-thing (lambda (thing) (eieio-object-p thing)) |
| 121 | #'data-debug-insert-object-button) | 121 | #'data-debug-insert-object-button) |
| 122 | 122 | ||
| 123 | ;;; DEBUG METHODS | 123 | ;;; DEBUG METHODS |
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index 8d40edf5624..304ee364dc8 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el | |||
| @@ -45,7 +45,7 @@ variable `eieio-default-superclass'." | |||
| 45 | nil t))) | 45 | nil t))) |
| 46 | nil)) | 46 | nil)) |
| 47 | (if (not root-class) (setq root-class 'eieio-default-superclass)) | 47 | (if (not root-class) (setq root-class 'eieio-default-superclass)) |
| 48 | (eieio--check-type class-p root-class) | 48 | (cl-check-type root-class class) |
| 49 | (display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t) | 49 | (display-buffer (get-buffer-create "*EIEIO OBJECT BROWSE*") t) |
| 50 | (with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*") | 50 | (with-current-buffer (get-buffer "*EIEIO OBJECT BROWSE*") |
| 51 | (erase-buffer) | 51 | (erase-buffer) |
| @@ -58,7 +58,7 @@ variable `eieio-default-superclass'." | |||
| 58 | Argument THIS-ROOT is the local root of the tree. | 58 | Argument THIS-ROOT is the local root of the tree. |
| 59 | Argument PREFIX is the character prefix to use. | 59 | Argument PREFIX is the character prefix to use. |
| 60 | Argument CH-PREFIX is another character prefix to display." | 60 | Argument CH-PREFIX is another character prefix to display." |
| 61 | (eieio--check-type class-p this-root) | 61 | (cl-check-type this-root class) |
| 62 | (let ((myname (symbol-name this-root)) | 62 | (let ((myname (symbol-name this-root)) |
| 63 | (chl (eieio--class-children (eieio--class-v this-root))) | 63 | (chl (eieio--class-children (eieio--class-v this-root))) |
| 64 | (fprefix (concat ch-prefix " +--")) | 64 | (fprefix (concat ch-prefix " +--")) |
| @@ -85,12 +85,12 @@ If CLASS is actually an object, then also display current values of that object. | |||
| 85 | "n abstract" | 85 | "n abstract" |
| 86 | "") | 86 | "") |
| 87 | " class") | 87 | " class") |
| 88 | (let ((location (get class 'class-location))) | 88 | (let ((location (find-lisp-object-file-name class 'eieio-defclass))) |
| 89 | (when location | 89 | (when location |
| 90 | (insert " in `") | 90 | (insert " in `") |
| 91 | (help-insert-xref-button | 91 | (help-insert-xref-button |
| 92 | (file-name-nondirectory location) | 92 | (help-fns-short-filename location) |
| 93 | 'eieio-class-def class location) | 93 | 'eieio-class-def class location 'eieio-defclass) |
| 94 | (insert "'"))) | 94 | (insert "'"))) |
| 95 | (insert ".\n") | 95 | (insert ".\n") |
| 96 | ;; Parents | 96 | ;; Parents |
| @@ -204,15 +204,6 @@ Outputs to the current buffer." | |||
| 204 | prot (cdr prot) | 204 | prot (cdr prot) |
| 205 | i (1+ i))))) | 205 | i (1+ i))))) |
| 206 | 206 | ||
| 207 | (defun eieio-build-class-list (class) | ||
| 208 | "Return a list of all classes that inherit from CLASS." | ||
| 209 | (if (class-p class) | ||
| 210 | (cl-mapcan | ||
| 211 | (lambda (c) | ||
| 212 | (append (list c) (eieio-build-class-list c))) | ||
| 213 | (eieio--class-children (eieio--class-v class))) | ||
| 214 | (list class))) | ||
| 215 | |||
| 216 | (defun eieio-build-class-alist (&optional class instantiable-only buildlist) | 207 | (defun eieio-build-class-alist (&optional class instantiable-only buildlist) |
| 217 | "Return an alist of all currently active classes for completion purposes. | 208 | "Return an alist of all currently active classes for completion purposes. |
| 218 | Optional argument CLASS is the class to start with. | 209 | Optional argument CLASS is the class to start with. |
| @@ -256,24 +247,22 @@ are not abstract." | |||
| 256 | 247 | ||
| 257 | ;;; METHOD COMPLETION / DOC | 248 | ;;; METHOD COMPLETION / DOC |
| 258 | 249 | ||
| 259 | (define-button-type 'eieio-method-def | ||
| 260 | :supertype 'help-xref | ||
| 261 | 'help-function (lambda (class method file) | ||
| 262 | (eieio-help-find-method-definition class method file)) | ||
| 263 | 'help-echo (purecopy "mouse-2, RET: find method's definition")) | ||
| 264 | |||
| 265 | (define-button-type 'eieio-class-def | 250 | (define-button-type 'eieio-class-def |
| 266 | :supertype 'help-xref | 251 | :supertype 'help-function-def |
| 267 | 'help-function (lambda (class file) | ||
| 268 | (eieio-help-find-class-definition class file)) | ||
| 269 | 'help-echo (purecopy "mouse-2, RET: find class definition")) | 252 | 'help-echo (purecopy "mouse-2, RET: find class definition")) |
| 270 | 253 | ||
| 254 | (defconst eieio--defclass-regexp "(defclass[ \t\r\n]+%s[ \t\r\n]+") | ||
| 255 | (with-eval-after-load 'find-func | ||
| 256 | (defvar find-function-regexp-alist) | ||
| 257 | (add-to-list 'find-function-regexp-alist | ||
| 258 | `(eieio-defclass . eieio--defclass-regexp))) | ||
| 259 | |||
| 271 | ;;;###autoload | 260 | ;;;###autoload |
| 272 | (defun eieio-help-constructor (ctr) | 261 | (defun eieio-help-constructor (ctr) |
| 273 | "Describe CTR if it is a class constructor." | 262 | "Describe CTR if it is a class constructor." |
| 274 | (when (class-p ctr) | 263 | (when (class-p ctr) |
| 275 | (erase-buffer) | 264 | (erase-buffer) |
| 276 | (let ((location (get ctr 'class-location)) | 265 | (let ((location (find-lisp-object-file-name ctr 'eieio-defclass)) |
| 277 | (def (symbol-function ctr))) | 266 | (def (symbol-function ctr))) |
| 278 | (goto-char (point-min)) | 267 | (goto-char (point-min)) |
| 279 | (prin1 ctr) | 268 | (prin1 ctr) |
| @@ -288,8 +277,8 @@ are not abstract." | |||
| 288 | (when location | 277 | (when location |
| 289 | (insert " in `") | 278 | (insert " in `") |
| 290 | (help-insert-xref-button | 279 | (help-insert-xref-button |
| 291 | (file-name-nondirectory location) | 280 | (help-fns-short-filename location) |
| 292 | 'eieio-class-def ctr location) | 281 | 'eieio-class-def ctr location 'eieio-defclass) |
| 293 | (insert "'")) | 282 | (insert "'")) |
| 294 | (insert ".\nCreates an object of class " (symbol-name ctr) ".") | 283 | (insert ".\nCreates an object of class " (symbol-name ctr) ".") |
| 295 | (goto-char (point-max)) | 284 | (goto-char (point-max)) |
| @@ -304,7 +293,7 @@ are not abstract." | |||
| 304 | "Return non-nil if a method with SPECIALIZERS applies to CLASS." | 293 | "Return non-nil if a method with SPECIALIZERS applies to CLASS." |
| 305 | (let ((applies nil)) | 294 | (let ((applies nil)) |
| 306 | (dolist (specializer specializers) | 295 | (dolist (specializer specializers) |
| 307 | (if (eq 'subclass (car-safe specializer)) | 296 | (if (memq (car-safe specializer) '(subclass eieio--static)) |
| 308 | (setq specializer (nth 1 specializer))) | 297 | (setq specializer (nth 1 specializer))) |
| 309 | ;; Don't include the methods that are "too generic", such as those | 298 | ;; Don't include the methods that are "too generic", such as those |
| 310 | ;; applying to `eieio-default-superclass'. | 299 | ;; applying to `eieio-default-superclass'. |
| @@ -443,60 +432,6 @@ The value returned is a list of elements of the form | |||
| 443 | (terpri) | 432 | (terpri) |
| 444 | )) | 433 | )) |
| 445 | 434 | ||
| 446 | ;;; HELP AUGMENTATION | ||
| 447 | ;; | ||
| 448 | (defun eieio-help-find-method-definition (class method file) | ||
| 449 | (let ((filename (find-library-name file)) | ||
| 450 | location buf) | ||
| 451 | (when (symbolp class) | ||
| 452 | (setq class (symbol-name class))) | ||
| 453 | (when (symbolp method) | ||
| 454 | (setq method (symbol-name method))) | ||
| 455 | (when (null filename) | ||
| 456 | (error "Cannot find library %s" file)) | ||
| 457 | (setq buf (find-file-noselect filename)) | ||
| 458 | (with-current-buffer buf | ||
| 459 | (goto-char (point-min)) | ||
| 460 | (when | ||
| 461 | (re-search-forward | ||
| 462 | ;; Regexp for searching methods. | ||
| 463 | (concat "(defmethod[ \t\r\n]+" method | ||
| 464 | "\\([ \t\r\n]+:[a-zA-Z]+\\)?" | ||
| 465 | "[ \t\r\n]+(\\s-*(\\(\\sw\\|\\s_\\)+\\s-+" | ||
| 466 | class | ||
| 467 | "\\s-*)") | ||
| 468 | nil t) | ||
| 469 | (setq location (match-beginning 0)))) | ||
| 470 | (if (null location) | ||
| 471 | (message "Unable to find location in file") | ||
| 472 | (pop-to-buffer buf) | ||
| 473 | (goto-char location) | ||
| 474 | (recenter) | ||
| 475 | (beginning-of-line)))) | ||
| 476 | |||
| 477 | (defun eieio-help-find-class-definition (class file) | ||
| 478 | (when (symbolp class) | ||
| 479 | (setq class (symbol-name class))) | ||
| 480 | (let ((filename (find-library-name file)) | ||
| 481 | location buf) | ||
| 482 | (when (null filename) | ||
| 483 | (error "Cannot find library %s" file)) | ||
| 484 | (setq buf (find-file-noselect filename)) | ||
| 485 | (with-current-buffer buf | ||
| 486 | (goto-char (point-min)) | ||
| 487 | (when | ||
| 488 | (re-search-forward | ||
| 489 | ;; Regexp for searching a class. | ||
| 490 | (concat "(defclass[ \t\r\n]+" class "[ \t\r\n]+") | ||
| 491 | nil t) | ||
| 492 | (setq location (match-beginning 0)))) | ||
| 493 | (if (null location) | ||
| 494 | (message "Unable to find location in file") | ||
| 495 | (pop-to-buffer buf) | ||
| 496 | (goto-char location) | ||
| 497 | (recenter) | ||
| 498 | (beginning-of-line)))) | ||
| 499 | |||
| 500 | ;;; SPEEDBAR SUPPORT | 435 | ;;; SPEEDBAR SUPPORT |
| 501 | ;; | 436 | ;; |
| 502 | 437 | ||
| @@ -546,7 +481,7 @@ current expansion depth." | |||
| 546 | 481 | ||
| 547 | (defun eieio-class-button (class depth) | 482 | (defun eieio-class-button (class depth) |
| 548 | "Draw a speedbar button at the current point for CLASS at DEPTH." | 483 | "Draw a speedbar button at the current point for CLASS at DEPTH." |
| 549 | (eieio--check-type class-p class) | 484 | (cl-check-type class class) |
| 550 | (let ((subclasses (eieio--class-children (eieio--class-v class)))) | 485 | (let ((subclasses (eieio--class-children (eieio--class-v class)))) |
| 551 | (if subclasses | 486 | (if subclasses |
| 552 | (speedbar-make-tag-line 'angle ?+ | 487 | (speedbar-make-tag-line 'angle ?+ |
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index 91469b4b96c..526090954a9 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el | |||
| @@ -110,7 +110,7 @@ Options in CLOS not supported in EIEIO: | |||
| 110 | Due to the way class options are set up, you can add any tags you wish, | 110 | Due to the way class options are set up, you can add any tags you wish, |
| 111 | and reference them using the function `class-option'." | 111 | and reference them using the function `class-option'." |
| 112 | (declare (doc-string 4)) | 112 | (declare (doc-string 4)) |
| 113 | (eieio--check-type listp superclasses) | 113 | (cl-check-type superclasses list) |
| 114 | 114 | ||
| 115 | (cond ((and (stringp (car options-and-doc)) | 115 | (cond ((and (stringp (car options-and-doc)) |
| 116 | (/= 1 (% (length options-and-doc) 2))) | 116 | (/= 1 (% (length options-and-doc) 2))) |
| @@ -223,18 +223,9 @@ This method is obsolete." | |||
| 223 | ;; referencing classes. ei, a class whose slot can contain only | 223 | ;; referencing classes. ei, a class whose slot can contain only |
| 224 | ;; pointers to itself. | 224 | ;; pointers to itself. |
| 225 | 225 | ||
| 226 | ;; Create the test function. | 226 | ;; Create the test functions. |
| 227 | (defun ,testsym1 (obj) | 227 | (defalias ',testsym1 (eieio-make-class-predicate ',name)) |
| 228 | ,(format "Test OBJ to see if it an object of type %S." name) | 228 | (defalias ',testsym2 (eieio-make-child-predicate ',name)) |
| 229 | (and (eieio-object-p obj) | ||
| 230 | (same-class-p obj ',name))) | ||
| 231 | |||
| 232 | (defun ,testsym2 (obj) | ||
| 233 | ,(format | ||
| 234 | "Test OBJ to see if it an object is a child of type %S." | ||
| 235 | name) | ||
| 236 | (and (eieio-object-p obj) | ||
| 237 | (object-of-class-p obj ',name))) | ||
| 238 | 229 | ||
| 239 | ,@(when eieio-backward-compatibility | 230 | ,@(when eieio-backward-compatibility |
| 240 | (let ((f (intern (format "%s-child-p" name)))) | 231 | (let ((f (intern (format "%s-child-p" name)))) |
| @@ -374,7 +365,7 @@ variable name of the same name as the slot." | |||
| 374 | (defun eieio-object-name (obj &optional extra) | 365 | (defun eieio-object-name (obj &optional extra) |
| 375 | "Return a Lisp like symbol string for object OBJ. | 366 | "Return a Lisp like symbol string for object OBJ. |
| 376 | If EXTRA, include that in the string returned to represent the symbol." | 367 | If EXTRA, include that in the string returned to represent the symbol." |
| 377 | (eieio--check-type eieio-object-p obj) | 368 | (cl-check-type obj eieio-object) |
| 378 | (format "#<%s %s%s>" (eieio--object-class-name obj) | 369 | (format "#<%s %s%s>" (eieio--object-class-name obj) |
| 379 | (eieio-object-name-string obj) (or extra ""))) | 370 | (eieio-object-name-string obj) (or extra ""))) |
| 380 | (define-obsolete-function-alias 'object-name #'eieio-object-name "24.4") | 371 | (define-obsolete-function-alias 'object-name #'eieio-object-name "24.4") |
| @@ -394,7 +385,7 @@ If EXTRA, include that in the string returned to represent the symbol." | |||
| 394 | (cl-defmethod eieio-object-set-name-string (obj name) | 385 | (cl-defmethod eieio-object-set-name-string (obj name) |
| 395 | "Set the string which is OBJ's NAME." | 386 | "Set the string which is OBJ's NAME." |
| 396 | (declare (obsolete eieio-named "25.1")) | 387 | (declare (obsolete eieio-named "25.1")) |
| 397 | (eieio--check-type stringp name) | 388 | (cl-check-type name string) |
| 398 | (setf (gethash obj eieio--object-names) name)) | 389 | (setf (gethash obj eieio--object-names) name)) |
| 399 | (define-obsolete-function-alias | 390 | (define-obsolete-function-alias |
| 400 | 'object-set-name-string 'eieio-object-set-name-string "24.4") | 391 | 'object-set-name-string 'eieio-object-set-name-string "24.4") |
| @@ -402,7 +393,7 @@ If EXTRA, include that in the string returned to represent the symbol." | |||
| 402 | (defun eieio-object-class (obj) | 393 | (defun eieio-object-class (obj) |
| 403 | "Return the class struct defining OBJ." | 394 | "Return the class struct defining OBJ." |
| 404 | ;; FIXME: We say we return a "struct" but we return a symbol instead! | 395 | ;; FIXME: We say we return a "struct" but we return a symbol instead! |
| 405 | (eieio--check-type eieio-object-p obj) | 396 | (cl-check-type obj eieio-object) |
| 406 | (eieio--object-class-name obj)) | 397 | (eieio--object-class-name obj)) |
| 407 | (define-obsolete-function-alias 'object-class #'eieio-object-class "24.4") | 398 | (define-obsolete-function-alias 'object-class #'eieio-object-class "24.4") |
| 408 | ;; CLOS name, maybe? | 399 | ;; CLOS name, maybe? |
| @@ -410,7 +401,7 @@ If EXTRA, include that in the string returned to represent the symbol." | |||
| 410 | 401 | ||
| 411 | (defun eieio-object-class-name (obj) | 402 | (defun eieio-object-class-name (obj) |
| 412 | "Return a Lisp like symbol name for OBJ's class." | 403 | "Return a Lisp like symbol name for OBJ's class." |
| 413 | (eieio--check-type eieio-object-p obj) | 404 | (cl-check-type obj eieio-object) |
| 414 | (eieio-class-name (eieio--object-class-name obj))) | 405 | (eieio-class-name (eieio--object-class-name obj))) |
| 415 | (define-obsolete-function-alias | 406 | (define-obsolete-function-alias |
| 416 | 'object-class-name 'eieio-object-class-name "24.4") | 407 | 'object-class-name 'eieio-object-class-name "24.4") |
| @@ -419,15 +410,14 @@ If EXTRA, include that in the string returned to represent the symbol." | |||
| 419 | "Return parent classes to CLASS. (overload of variable). | 410 | "Return parent classes to CLASS. (overload of variable). |
| 420 | 411 | ||
| 421 | The CLOS function `class-direct-superclasses' is aliased to this function." | 412 | The CLOS function `class-direct-superclasses' is aliased to this function." |
| 422 | (let ((c (eieio-class-object class))) | 413 | (eieio--class-parent (eieio--class-object class))) |
| 423 | (eieio--class-parent c))) | ||
| 424 | 414 | ||
| 425 | (define-obsolete-function-alias 'class-parents #'eieio-class-parents "24.4") | 415 | (define-obsolete-function-alias 'class-parents #'eieio-class-parents "24.4") |
| 426 | 416 | ||
| 427 | (defun eieio-class-children (class) | 417 | (defun eieio-class-children (class) |
| 428 | "Return child classes to CLASS. | 418 | "Return child classes to CLASS. |
| 429 | The CLOS function `class-direct-subclasses' is aliased to this function." | 419 | The CLOS function `class-direct-subclasses' is aliased to this function." |
| 430 | (eieio--check-type class-p class) | 420 | (cl-check-type class class) |
| 431 | (eieio--class-children (eieio--class-v class))) | 421 | (eieio--class-children (eieio--class-v class))) |
| 432 | (define-obsolete-function-alias | 422 | (define-obsolete-function-alias |
| 433 | 'class-children #'eieio-class-children "24.4") | 423 | 'class-children #'eieio-class-children "24.4") |
| @@ -446,13 +436,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function." | |||
| 446 | (defun same-class-p (obj class) | 436 | (defun same-class-p (obj class) |
| 447 | "Return t if OBJ is of class-type CLASS." | 437 | "Return t if OBJ is of class-type CLASS." |
| 448 | (setq class (eieio--class-object class)) | 438 | (setq class (eieio--class-object class)) |
| 449 | (eieio--check-type eieio--class-p class) | 439 | (cl-check-type class eieio--class) |
| 450 | (eieio--check-type eieio-object-p obj) | 440 | (cl-check-type obj eieio-object) |
| 451 | (eq (eieio--object-class-object obj) class)) | 441 | (eq (eieio--object-class-object obj) class)) |
| 452 | 442 | ||
| 453 | (defun object-of-class-p (obj class) | 443 | (defun object-of-class-p (obj class) |
| 454 | "Return non-nil if OBJ is an instance of CLASS or CLASS' subclasses." | 444 | "Return non-nil if OBJ is an instance of CLASS or CLASS' subclasses." |
| 455 | (eieio--check-type eieio-object-p obj) | 445 | (cl-check-type obj eieio-object) |
| 456 | ;; class will be checked one layer down | 446 | ;; class will be checked one layer down |
| 457 | (child-of-class-p (eieio--object-class-object obj) class)) | 447 | (child-of-class-p (eieio--object-class-object obj) class)) |
| 458 | ;; Backwards compatibility | 448 | ;; Backwards compatibility |
| @@ -461,13 +451,13 @@ The CLOS function `class-direct-subclasses' is aliased to this function." | |||
| 461 | (defun child-of-class-p (child class) | 451 | (defun child-of-class-p (child class) |
| 462 | "Return non-nil if CHILD class is a subclass of CLASS." | 452 | "Return non-nil if CHILD class is a subclass of CLASS." |
| 463 | (setq child (eieio--class-object child)) | 453 | (setq child (eieio--class-object child)) |
| 464 | (eieio--check-type eieio--class-p child) | 454 | (cl-check-type child eieio--class) |
| 465 | ;; `eieio-default-superclass' is never mentioned in eieio--class-parent, | 455 | ;; `eieio-default-superclass' is never mentioned in eieio--class-parent, |
| 466 | ;; so we have to special case it here. | 456 | ;; so we have to special case it here. |
| 467 | (or (eq class 'eieio-default-superclass) | 457 | (or (eq class 'eieio-default-superclass) |
| 468 | (let ((p nil)) | 458 | (let ((p nil)) |
| 469 | (setq class (eieio--class-object class)) | 459 | (setq class (eieio--class-object class)) |
| 470 | (eieio--check-type eieio--class-p class) | 460 | (cl-check-type class eieio--class) |
| 471 | (while (and child (not (eq child class))) | 461 | (while (and child (not (eq child class))) |
| 472 | (setq p (append p (eieio--class-parent child)) | 462 | (setq p (append p (eieio--class-parent child)) |
| 473 | child (pop p))) | 463 | child (pop p))) |
| @@ -475,11 +465,11 @@ The CLOS function `class-direct-subclasses' is aliased to this function." | |||
| 475 | 465 | ||
| 476 | (defun object-slots (obj) | 466 | (defun object-slots (obj) |
| 477 | "Return list of slots available in OBJ." | 467 | "Return list of slots available in OBJ." |
| 478 | (eieio--check-type eieio-object-p obj) | 468 | (cl-check-type obj eieio-object) |
| 479 | (eieio--class-public-a (eieio--object-class-object obj))) | 469 | (eieio--class-public-a (eieio--object-class-object obj))) |
| 480 | 470 | ||
| 481 | (defun eieio--class-slot-initarg (class slot) "Fetch from CLASS, SLOT's :initarg." | 471 | (defun eieio--class-slot-initarg (class slot) "Fetch from CLASS, SLOT's :initarg." |
| 482 | (eieio--check-type eieio--class-p class) | 472 | (cl-check-type class eieio--class) |
| 483 | (let ((ia (eieio--class-initarg-tuples class)) | 473 | (let ((ia (eieio--class-initarg-tuples class)) |
| 484 | (f nil)) | 474 | (f nil)) |
| 485 | (while (and ia (not f)) | 475 | (while (and ia (not f)) |
| @@ -517,7 +507,7 @@ OBJECT can be an instance or a class." | |||
| 517 | ;; Return nil if the magic symbol is in there. | 507 | ;; Return nil if the magic symbol is in there. |
| 518 | (not (eq (cond | 508 | (not (eq (cond |
| 519 | ((eieio-object-p object) (eieio-oref object slot)) | 509 | ((eieio-object-p object) (eieio-oref object slot)) |
| 520 | ((class-p object) (eieio-oref-default object slot)) | 510 | ((symbolp object) (eieio-oref-default object slot)) |
| 521 | (t (signal 'wrong-type-argument (list 'eieio-object-p object)))) | 511 | (t (signal 'wrong-type-argument (list 'eieio-object-p object)))) |
| 522 | eieio-unbound)))) | 512 | eieio-unbound)))) |
| 523 | 513 | ||
| @@ -529,7 +519,8 @@ OBJECT can be an instance or a class." | |||
| 529 | "Return non-nil if OBJECT-OR-CLASS has SLOT." | 519 | "Return non-nil if OBJECT-OR-CLASS has SLOT." |
| 530 | (let ((cv (cond ((eieio-object-p object-or-class) | 520 | (let ((cv (cond ((eieio-object-p object-or-class) |
| 531 | (eieio--object-class-object object-or-class)) | 521 | (eieio--object-class-object object-or-class)) |
| 532 | (t (eieio-class-object object-or-class))))) | 522 | ((eieio--class-p object-or-class) object-or-class) |
| 523 | (t (find-class object-or-class 'error))))) | ||
| 533 | (or (memq slot (eieio--class-public-a cv)) | 524 | (or (memq slot (eieio--class-public-a cv)) |
| 534 | (memq slot (eieio--class-class-allocation-a cv))) | 525 | (memq slot (eieio--class-class-allocation-a cv))) |
| 535 | )) | 526 | )) |
| @@ -538,10 +529,10 @@ OBJECT can be an instance or a class." | |||
| 538 | "Return the class that SYMBOL represents. | 529 | "Return the class that SYMBOL represents. |
| 539 | If there is no class, nil is returned if ERRORP is nil. | 530 | If there is no class, nil is returned if ERRORP is nil. |
| 540 | If ERRORP is non-nil, `wrong-argument-type' is signaled." | 531 | If ERRORP is non-nil, `wrong-argument-type' is signaled." |
| 541 | (if (not (class-p symbol)) | 532 | (let ((class (eieio--class-v symbol))) |
| 542 | (if errorp (signal 'wrong-type-argument (list 'class-p symbol)) | 533 | (cond |
| 543 | nil) | 534 | ((eieio--class-p class) class) |
| 544 | (eieio--class-v symbol))) | 535 | (errorp (signal 'wrong-type-argument (list 'class-p symbol)))))) |
| 545 | 536 | ||
| 546 | ;;; Slightly more complex utility functions for objects | 537 | ;;; Slightly more complex utility functions for objects |
| 547 | ;; | 538 | ;; |
| @@ -551,7 +542,7 @@ LIST is a list of objects whose slots are searched. | |||
| 551 | Objects in LIST do not need to have a slot named SLOT, nor does | 542 | Objects in LIST do not need to have a slot named SLOT, nor does |
| 552 | SLOT need to be bound. If these errors occur, those objects will | 543 | SLOT need to be bound. If these errors occur, those objects will |
| 553 | be ignored." | 544 | be ignored." |
| 554 | (eieio--check-type listp list) | 545 | (cl-check-type list list) |
| 555 | (while (and list (not (condition-case nil | 546 | (while (and list (not (condition-case nil |
| 556 | ;; This prevents errors for missing slots. | 547 | ;; This prevents errors for missing slots. |
| 557 | (equal key (eieio-oref (car list) slot)) | 548 | (equal key (eieio-oref (car list) slot)) |
| @@ -563,7 +554,7 @@ be ignored." | |||
| 563 | "Return an association list with the contents of SLOT as the key element. | 554 | "Return an association list with the contents of SLOT as the key element. |
| 564 | LIST must be a list of objects with SLOT in it. | 555 | LIST must be a list of objects with SLOT in it. |
| 565 | This is useful when you need to do completing read on an object group." | 556 | This is useful when you need to do completing read on an object group." |
| 566 | (eieio--check-type listp list) | 557 | (cl-check-type list list) |
| 567 | (let ((assoclist nil)) | 558 | (let ((assoclist nil)) |
| 568 | (while list | 559 | (while list |
| 569 | (setq assoclist (cons (cons (eieio-oref (car list) slot) | 560 | (setq assoclist (cons (cons (eieio-oref (car list) slot) |
| @@ -577,7 +568,7 @@ This is useful when you need to do completing read on an object group." | |||
| 577 | LIST must be a list of objects, but those objects do not need to have | 568 | LIST must be a list of objects, but those objects do not need to have |
| 578 | SLOT in it. If it does not, then that element is left out of the association | 569 | SLOT in it. If it does not, then that element is left out of the association |
| 579 | list." | 570 | list." |
| 580 | (eieio--check-type listp list) | 571 | (cl-check-type list list) |
| 581 | (let ((assoclist nil)) | 572 | (let ((assoclist nil)) |
| 582 | (while list | 573 | (while list |
| 583 | (if (slot-exists-p (car list) slot) | 574 | (if (slot-exists-p (car list) slot) |
| @@ -869,12 +860,8 @@ this object." | |||
| 869 | (object-write thing)) | 860 | (object-write thing)) |
| 870 | ((consp thing) | 861 | ((consp thing) |
| 871 | (eieio-list-prin1 thing)) | 862 | (eieio-list-prin1 thing)) |
| 872 | ((class-p thing) | 863 | ((eieio--class-p thing) |
| 873 | (princ (eieio-class-name thing))) | 864 | (princ (eieio-class-name thing))) |
| 874 | ((or (keywordp thing) (booleanp thing)) | ||
| 875 | (prin1 thing)) | ||
| 876 | ((symbolp thing) | ||
| 877 | (princ (concat "'" (symbol-name thing)))) | ||
| 878 | (t (prin1 thing)))) | 865 | (t (prin1 thing)))) |
| 879 | 866 | ||
| 880 | (defun eieio-list-prin1 (list) | 867 | (defun eieio-list-prin1 (list) |
| @@ -942,7 +929,7 @@ Optional argument GROUP is the sub-group of slots to display. | |||
| 942 | 929 | ||
| 943 | ;;;*** | 930 | ;;;*** |
| 944 | 931 | ||
| 945 | ;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "b849f8bf1312d5ef57e53d02173e4b5a") | 932 | ;;;### (autoloads nil "eieio-opt" "eieio-opt.el" "ff1097f185bc2c253276a7d19fe2f54a") |
| 946 | ;;; Generated autoloads from eieio-opt.el | 933 | ;;; Generated autoloads from eieio-opt.el |
| 947 | 934 | ||
| 948 | (autoload 'eieio-browse "eieio-opt" "\ | 935 | (autoload 'eieio-browse "eieio-opt" "\ |
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog index 28ac7d38b96..44971cc16fc 100644 --- a/lisp/erc/ChangeLog +++ b/lisp/erc/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2015-01-28 Dima Kogan <dima@secretsauce.net> | ||
| 2 | |||
| 3 | * erc-backend.el (define-erc-response-handler): Give hook-name | ||
| 4 | default value of nil and add-to-list (bug#19363). | ||
| 5 | |||
| 1 | 2015-01-22 Paul Eggert <eggert@cs.ucla.edu> | 6 | 2015-01-22 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 7 | ||
| 3 | Don't downcase system diagnostics' first letters | 8 | Don't downcase system diagnostics' first letters |
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index b8c67860e20..8ce199fbcbb 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el | |||
| @@ -1162,8 +1162,11 @@ add things to `%s' instead." | |||
| 1162 | (cl-loop for alias in aliases | 1162 | (cl-loop for alias in aliases |
| 1163 | collect (intern (format "erc-server-%s-functions" alias))))) | 1163 | collect (intern (format "erc-server-%s-functions" alias))))) |
| 1164 | `(prog2 | 1164 | `(prog2 |
| 1165 | ;; Normal hook variable. | 1165 | ;; Normal hook variable. The variable may already have a |
| 1166 | (defvar ,hook-name ',fn-name ,(format hook-doc name)) | 1166 | ;; value at this point, so I default to nil, and (add-hook) |
| 1167 | ;; unconditionally | ||
| 1168 | (defvar ,hook-name nil ,(format hook-doc name)) | ||
| 1169 | (add-to-list ',hook-name ',fn-name) | ||
| 1167 | ;; Handler function | 1170 | ;; Handler function |
| 1168 | (defun ,fn-name (proc parsed) | 1171 | (defun ,fn-name (proc parsed) |
| 1169 | ,fn-doc | 1172 | ,fn-doc |
diff --git a/lisp/filenotify.el b/lisp/filenotify.el index 35181b63f3a..c94f631dde8 100644 --- a/lisp/filenotify.el +++ b/lisp/filenotify.el | |||
| @@ -41,13 +41,21 @@ could use another implementation.") | |||
| 41 | "Hash table for registered file notification descriptors. | 41 | "Hash table for registered file notification descriptors. |
| 42 | A key in this hash table is the descriptor as returned from | 42 | A key in this hash table is the descriptor as returned from |
| 43 | `gfilenotify', `inotify', `w32notify' or a file name handler. | 43 | `gfilenotify', `inotify', `w32notify' or a file name handler. |
| 44 | The value in the hash table is the cons cell (DIR FILE CALLBACK).") | 44 | The value in the hash table is a list |
| 45 | |||
| 46 | \(DIR (FILE . CALLBACK) (FILE . CALLBACK) ...) | ||
| 47 | |||
| 48 | Several values for a given DIR happen only for `inotify', when | ||
| 49 | different files from the same directory are watched.") | ||
| 45 | 50 | ||
| 46 | ;; This function is used by `gfilenotify', `inotify' and `w32notify' events. | 51 | ;; This function is used by `gfilenotify', `inotify' and `w32notify' events. |
| 47 | ;;;###autoload | 52 | ;;;###autoload |
| 48 | (defun file-notify-handle-event (event) | 53 | (defun file-notify-handle-event (event) |
| 49 | "Handle file system monitoring event. | 54 | "Handle file system monitoring event. |
| 50 | If EVENT is a filewatch event, call its callback. | 55 | If EVENT is a filewatch event, call its callback. It has the format |
| 56 | |||
| 57 | \(file-notify (DESCRIPTOR ACTIONS FILE COOKIE) CALLBACK) | ||
| 58 | |||
| 51 | Otherwise, signal a `file-notify-error'." | 59 | Otherwise, signal a `file-notify-error'." |
| 52 | (interactive "e") | 60 | (interactive "e") |
| 53 | (if (and (eq (car event) 'file-notify) | 61 | (if (and (eq (car event) 'file-notify) |
| @@ -81,12 +89,23 @@ This is available in case a file has been moved." | |||
| 81 | This is available in case a file has been moved." | 89 | This is available in case a file has been moved." |
| 82 | (nth 3 event)) | 90 | (nth 3 event)) |
| 83 | 91 | ||
| 92 | ;; `inotify' returns the same descriptor when the file (directory) | ||
| 93 | ;; uses the same inode. We want to distinguish, and apply a virtual | ||
| 94 | ;; descriptor which make the difference. | ||
| 95 | (defun file-notify--descriptor (descriptor file) | ||
| 96 | "Return the descriptor to be used in `file-notify-*-watch'. | ||
| 97 | For `gfilenotify' and `w32notify' it is the same descriptor as | ||
| 98 | used in the low-level file notification package." | ||
| 99 | (if (and (natnump descriptor) (eq file-notify--library 'inotify)) | ||
| 100 | (cons descriptor file) | ||
| 101 | descriptor)) | ||
| 102 | |||
| 84 | ;; The callback function used to map between specific flags of the | 103 | ;; The callback function used to map between specific flags of the |
| 85 | ;; respective file notifications, and the ones we return. | 104 | ;; respective file notifications, and the ones we return. |
| 86 | (defun file-notify-callback (event) | 105 | (defun file-notify-callback (event) |
| 87 | "Handle an EVENT returned from file notification. | 106 | "Handle an EVENT returned from file notification. |
| 88 | EVENT is the same one as in `file-notify-handle-event' except the | 107 | EVENT is the cdr of the event in `file-notify-handle-event' |
| 89 | car of that event, which is the symbol `file-notify'." | 108 | \(DESCRIPTOR ACTIONS FILE COOKIE)." |
| 90 | (let* ((desc (car event)) | 109 | (let* ((desc (car event)) |
| 91 | (registered (gethash desc file-notify-descriptors)) | 110 | (registered (gethash desc file-notify-descriptors)) |
| 92 | (pending-event (assoc desc file-notify--pending-events)) | 111 | (pending-event (assoc desc file-notify--pending-events)) |
| @@ -97,99 +116,113 @@ car of that event, which is the symbol `file-notify'." | |||
| 97 | ;; Make actions a list. | 116 | ;; Make actions a list. |
| 98 | (unless (consp actions) (setq actions (cons actions nil))) | 117 | (unless (consp actions) (setq actions (cons actions nil))) |
| 99 | 118 | ||
| 100 | ;; Check, that event is meant for us. | 119 | ;; Loop over registered entries. In fact, more than one entry |
| 101 | (unless (setq callback (nth 2 registered)) | 120 | ;; happens only for `inotify'. |
| 102 | (setq actions nil)) | 121 | (dolist (entry (cdr registered)) |
| 103 | 122 | ||
| 104 | ;; Loop over actions. In fact, more than one action happens only | 123 | ;; Check, that event is meant for us. |
| 105 | ;; for `inotify'. | 124 | (unless (setq callback (cdr entry)) |
| 106 | (dolist (action actions) | 125 | (setq actions nil)) |
| 107 | 126 | ||
| 108 | ;; Send pending event, if it doesn't match. | 127 | ;; Loop over actions. In fact, more than one action happens only |
| 109 | (when (and pending-event | 128 | ;; for `inotify'. |
| 110 | ;; The cookie doesn't match. | 129 | (dolist (action actions) |
| 111 | (not (eq (file-notify--event-cookie pending-event) | 130 | |
| 112 | (file-notify--event-cookie event))) | 131 | ;; Send pending event, if it doesn't match. |
| 113 | (or | 132 | (when (and pending-event |
| 114 | ;; inotify. | 133 | ;; The cookie doesn't match. |
| 115 | (and (eq (nth 1 pending-event) 'moved-from) | 134 | (not (eq (file-notify--event-cookie pending-event) |
| 116 | (not (eq action 'moved-to))) | 135 | (file-notify--event-cookie event))) |
| 117 | ;; w32notify. | 136 | (or |
| 118 | (and (eq (nth 1 pending-event) 'renamed-from) | 137 | ;; inotify. |
| 119 | (not (eq action 'renamed-to))))) | 138 | (and (eq (nth 1 pending-event) 'moved-from) |
| 120 | (funcall callback | 139 | (not (eq action 'moved-to))) |
| 121 | (list desc 'deleted | 140 | ;; w32notify. |
| 122 | (file-notify--event-file-name pending-event))) | 141 | (and (eq (nth 1 pending-event) 'renamed-from) |
| 123 | (setq file-notify--pending-events | 142 | (not (eq action 'renamed-to))))) |
| 124 | (delete pending-event file-notify--pending-events))) | 143 | (funcall callback |
| 125 | 144 | (list desc 'deleted | |
| 126 | ;; Map action. We ignore all events which cannot be mapped. | 145 | (file-notify--event-file-name pending-event))) |
| 127 | (setq action | 146 | (setq file-notify--pending-events |
| 128 | (cond | 147 | (delete pending-event file-notify--pending-events))) |
| 129 | ;; gfilenotify. | 148 | |
| 130 | ((memq action '(attribute-changed changed created deleted)) action) | 149 | ;; Map action. We ignore all events which cannot be mapped. |
| 131 | ((eq action 'moved) | 150 | (setq action |
| 132 | (setq file1 (file-notify--event-file1-name event)) | 151 | (cond |
| 133 | 'renamed) | 152 | ;; gfilenotify. |
| 134 | 153 | ((memq action '(attribute-changed changed created deleted)) | |
| 135 | ;; inotify. | 154 | action) |
| 136 | ((eq action 'attrib) 'attribute-changed) | 155 | ((eq action 'moved) |
| 137 | ((eq action 'create) 'created) | 156 | (setq file1 (file-notify--event-file1-name event)) |
| 138 | ((eq action 'modify) 'changed) | 157 | 'renamed) |
| 139 | ((memq action '(delete 'delete-self move-self)) 'deleted) | 158 | |
| 140 | ;; Make the event pending. | 159 | ;; inotify. |
| 141 | ((eq action 'moved-from) | 160 | ((eq action 'attrib) 'attribute-changed) |
| 142 | (add-to-list 'file-notify--pending-events | 161 | ((eq action 'create) 'created) |
| 143 | (list desc action file | 162 | ((eq action 'modify) 'changed) |
| 144 | (file-notify--event-cookie event))) | 163 | ((memq action '(delete 'delete-self move-self)) 'deleted) |
| 145 | nil) | 164 | ;; Make the event pending. |
| 146 | ;; Look for pending event. | 165 | ((eq action 'moved-from) |
| 147 | ((eq action 'moved-to) | 166 | (add-to-list 'file-notify--pending-events |
| 148 | (if (null pending-event) | 167 | (list desc action file |
| 149 | 'created | 168 | (file-notify--event-cookie event))) |
| 150 | (setq file1 file | 169 | nil) |
| 151 | file (file-notify--event-file-name pending-event) | 170 | ;; Look for pending event. |
| 152 | file-notify--pending-events | 171 | ((eq action 'moved-to) |
| 153 | (delete pending-event file-notify--pending-events)) | 172 | (if (null pending-event) |
| 154 | 'renamed)) | 173 | 'created |
| 155 | 174 | (setq file1 file | |
| 156 | ;; w32notify. | 175 | file (file-notify--event-file-name pending-event) |
| 157 | ((eq action 'added) 'created) | 176 | file-notify--pending-events |
| 158 | ((eq action 'modified) 'changed) | 177 | (delete pending-event file-notify--pending-events)) |
| 159 | ((eq action 'removed) 'deleted) | 178 | 'renamed)) |
| 160 | ;; Make the event pending. | 179 | |
| 161 | ((eq 'renamed-from action) | 180 | ;; w32notify. |
| 162 | (add-to-list 'file-notify--pending-events | 181 | ((eq action 'added) 'created) |
| 163 | (list desc action file | 182 | ((eq action 'modified) 'changed) |
| 164 | (file-notify--event-cookie event))) | 183 | ((eq action 'removed) 'deleted) |
| 165 | nil) | 184 | ;; Make the event pending. |
| 166 | ;; Look for pending event. | 185 | ((eq action 'renamed-from) |
| 167 | ((eq 'renamed-to action) | 186 | (add-to-list 'file-notify--pending-events |
| 168 | (if (null pending-event) | 187 | (list desc action file |
| 169 | 'created | 188 | (file-notify--event-cookie event))) |
| 170 | (setq file1 file | 189 | nil) |
| 171 | file (file-notify--event-file-name pending-event) | 190 | ;; Look for pending event. |
| 172 | file-notify--pending-events | 191 | ((eq action 'renamed-to) |
| 173 | (delete pending-event file-notify--pending-events)) | 192 | (if (null pending-event) |
| 174 | 'renamed)))) | 193 | 'created |
| 175 | 194 | (setq file1 file | |
| 176 | ;; Apply callback. | 195 | file (file-notify--event-file-name pending-event) |
| 177 | (when (and action | 196 | file-notify--pending-events |
| 178 | (or | 197 | (delete pending-event file-notify--pending-events)) |
| 179 | ;; If there is no relative file name for that watch, | 198 | 'renamed)))) |
| 180 | ;; we watch the whole directory. | 199 | |
| 181 | (null (nth 1 registered)) | 200 | ;; Apply callback. |
| 182 | ;; File matches. | 201 | (when (and action |
| 183 | (string-equal | 202 | (or |
| 184 | (nth 1 registered) (file-name-nondirectory file)) | 203 | ;; If there is no relative file name for that watch, |
| 185 | ;; File1 matches. | 204 | ;; we watch the whole directory. |
| 186 | (and (stringp file1) | 205 | (null (nth 0 entry)) |
| 187 | (string-equal | 206 | ;; File matches. |
| 188 | (nth 1 registered) (file-name-nondirectory file1))))) | 207 | (string-equal |
| 189 | (if file1 | 208 | (nth 0 entry) (file-name-nondirectory file)) |
| 190 | (funcall callback (list desc action file file1)) | 209 | ;; File1 matches. |
| 191 | (funcall callback (list desc action file))))))) | 210 | (and (stringp file1) |
| 192 | 211 | (string-equal | |
| 212 | (nth 0 entry) (file-name-nondirectory file1))))) | ||
| 213 | (if file1 | ||
| 214 | (funcall | ||
| 215 | callback | ||
| 216 | `(,(file-notify--descriptor desc (nth 0 entry)) | ||
| 217 | ,action ,file ,file1)) | ||
| 218 | (funcall | ||
| 219 | callback | ||
| 220 | `(,(file-notify--descriptor desc (nth 0 entry)) | ||
| 221 | ,action ,file)))))))) | ||
| 222 | |||
| 223 | ;; `gfilenotify' and `w32notify' return a unique descriptor for every | ||
| 224 | ;; `file-notify-add-watch', while `inotify' returns a unique | ||
| 225 | ;; descriptor per inode only. | ||
| 193 | (defun file-notify-add-watch (file flags callback) | 226 | (defun file-notify-add-watch (file flags callback) |
| 194 | "Add a watch for filesystem events pertaining to FILE. | 227 | "Add a watch for filesystem events pertaining to FILE. |
| 195 | This arranges for filesystem events pertaining to FILE to be reported | 228 | This arranges for filesystem events pertaining to FILE to be reported |
| @@ -206,7 +239,7 @@ include the following symbols: | |||
| 206 | `attribute-change' -- watch for file attributes changes, like | 239 | `attribute-change' -- watch for file attributes changes, like |
| 207 | permissions or modification time | 240 | permissions or modification time |
| 208 | 241 | ||
| 209 | If FILE is a directory, 'change' watches for file creation or | 242 | If FILE is a directory, `change' watches for file creation or |
| 210 | deletion in that directory. This does not work recursively. | 243 | deletion in that directory. This does not work recursively. |
| 211 | 244 | ||
| 212 | When any event happens, Emacs will call the CALLBACK function passing | 245 | When any event happens, Emacs will call the CALLBACK function passing |
| @@ -240,82 +273,96 @@ FILE is the name of the file whose event is being reported." | |||
| 240 | (if (file-directory-p file) | 273 | (if (file-directory-p file) |
| 241 | file | 274 | file |
| 242 | (file-name-directory file)))) | 275 | (file-name-directory file)))) |
| 243 | desc func l-flags) | 276 | desc func l-flags registered) |
| 244 | 277 | ||
| 245 | ;; Check, whether this has been registered already. | 278 | (if handler |
| 246 | ; (maphash | 279 | ;; A file name handler could exist even if there is no local |
| 247 | ; (lambda (key value) | 280 | ;; file notification support. |
| 248 | ; (when (equal (cons file callback) value) (setq desc key))) | 281 | (setq desc (funcall |
| 249 | ; file-notify-descriptors) | 282 | handler 'file-notify-add-watch dir flags callback)) |
| 250 | 283 | ||
| 251 | (unless desc | 284 | ;; Check, whether Emacs has been compiled with file |
| 252 | (if handler | 285 | ;; notification support. |
| 253 | ;; A file name handler could exist even if there is no local | 286 | (unless file-notify--library |
| 254 | ;; file notification support. | 287 | (signal 'file-notify-error |
| 255 | (setq desc (funcall | 288 | '("No file notification package available"))) |
| 256 | handler 'file-notify-add-watch dir flags callback)) | 289 | |
| 257 | 290 | ;; Determine low-level function to be called. | |
| 258 | ;; Check, whether Emacs has been compiled with file | 291 | (setq func |
| 259 | ;; notification support. | 292 | (cond |
| 260 | (unless file-notify--library | 293 | ((eq file-notify--library 'gfilenotify) 'gfile-add-watch) |
| 261 | (signal 'file-notify-error | 294 | ((eq file-notify--library 'inotify) 'inotify-add-watch) |
| 262 | '("No file notification package available"))) | 295 | ((eq file-notify--library 'w32notify) 'w32notify-add-watch))) |
| 263 | 296 | ||
| 264 | ;; Determine low-level function to be called. | 297 | ;; Determine respective flags. |
| 265 | (setq func | 298 | (if (eq file-notify--library 'gfilenotify) |
| 266 | (cond | 299 | (setq l-flags '(watch-mounts send-moved)) |
| 267 | ((eq file-notify--library 'gfilenotify) 'gfile-add-watch) | 300 | (when (memq 'change flags) |
| 268 | ((eq file-notify--library 'inotify) 'inotify-add-watch) | 301 | (setq |
| 269 | ((eq file-notify--library 'w32notify) 'w32notify-add-watch))) | 302 | l-flags |
| 270 | 303 | (cond | |
| 271 | ;; Determine respective flags. | 304 | ((eq file-notify--library 'inotify) '(create modify move delete)) |
| 272 | (if (eq file-notify--library 'gfilenotify) | 305 | ((eq file-notify--library 'w32notify) |
| 273 | (setq l-flags '(watch-mounts send-moved)) | 306 | '(file-name directory-name size last-write-time))))) |
| 274 | (when (memq 'change flags) | 307 | (when (memq 'attribute-change flags) |
| 275 | (setq | 308 | (add-to-list |
| 276 | l-flags | 309 | 'l-flags |
| 277 | (cond | 310 | (cond |
| 278 | ((eq file-notify--library 'inotify) '(create modify move delete)) | 311 | ((eq file-notify--library 'inotify) 'attrib) |
| 279 | ((eq file-notify--library 'w32notify) | 312 | ((eq file-notify--library 'w32notify) 'attributes))))) |
| 280 | '(file-name directory-name size last-write-time))))) | 313 | |
| 281 | (when (memq 'attribute-change flags) | 314 | ;; Call low-level function. |
| 282 | (add-to-list | 315 | (setq desc (funcall func dir l-flags 'file-notify-callback))) |
| 283 | 'l-flags | 316 | |
| 284 | (cond | 317 | ;; Modify `file-notify-descriptors'. |
| 285 | ((eq file-notify--library 'inotify) 'attrib) | 318 | (setq registered (gethash desc file-notify-descriptors)) |
| 286 | ((eq file-notify--library 'w32notify) 'attributes))))) | 319 | (puthash |
| 287 | 320 | desc | |
| 288 | ;; Call low-level function. | 321 | `(,dir |
| 289 | (setq desc (funcall func dir l-flags 'file-notify-callback)))) | 322 | (,(unless (file-directory-p file) (file-name-nondirectory file)) |
| 323 | . ,callback) | ||
| 324 | . ,(cdr registered)) | ||
| 325 | file-notify-descriptors) | ||
| 290 | 326 | ||
| 291 | ;; Return descriptor. | 327 | ;; Return descriptor. |
| 292 | (puthash desc | 328 | (file-notify--descriptor |
| 293 | (list (directory-file-name | 329 | desc (unless (file-directory-p file) (file-name-nondirectory file))))) |
| 294 | (if (file-directory-p dir) dir (file-name-directory dir))) | ||
| 295 | (unless (file-directory-p file) | ||
| 296 | (file-name-nondirectory file)) | ||
| 297 | callback) | ||
| 298 | file-notify-descriptors) | ||
| 299 | desc)) | ||
| 300 | 330 | ||
| 301 | (defun file-notify-rm-watch (descriptor) | 331 | (defun file-notify-rm-watch (descriptor) |
| 302 | "Remove an existing watch specified by its DESCRIPTOR. | 332 | "Remove an existing watch specified by its DESCRIPTOR. |
| 303 | DESCRIPTOR should be an object returned by `file-notify-add-watch'." | 333 | DESCRIPTOR should be an object returned by `file-notify-add-watch'." |
| 304 | (let ((file (car (gethash descriptor file-notify-descriptors))) | 334 | (let* ((desc (if (consp descriptor) (car descriptor) descriptor)) |
| 305 | handler) | 335 | (file (if (consp descriptor) (cdr descriptor))) |
| 306 | 336 | (dir (car (gethash desc file-notify-descriptors))) | |
| 307 | (when (stringp file) | 337 | handler registered) |
| 308 | (setq handler (find-file-name-handler file 'file-notify-rm-watch)) | 338 | |
| 309 | (if handler | 339 | (when (stringp dir) |
| 310 | (funcall handler 'file-notify-rm-watch descriptor) | 340 | (setq handler (find-file-name-handler dir 'file-notify-rm-watch)) |
| 311 | (funcall | 341 | |
| 312 | (cond | 342 | ;; Modify `file-notify-descriptors'. |
| 313 | ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch) | 343 | (if (not file) |
| 314 | ((eq file-notify--library 'inotify) 'inotify-rm-watch) | 344 | (remhash desc file-notify-descriptors) |
| 315 | ((eq file-notify--library 'w32notify) 'w32notify-rm-watch)) | 345 | |
| 316 | descriptor))) | 346 | (setq registered (gethash desc file-notify-descriptors)) |
| 317 | 347 | (setcdr registered | |
| 318 | (remhash descriptor file-notify-descriptors))) | 348 | (delete (assoc file (cdr registered)) (cdr registered))) |
| 349 | (if (null (cdr registered)) | ||
| 350 | (remhash desc file-notify-descriptors) | ||
| 351 | (puthash desc registered file-notify-descriptors))) | ||
| 352 | |||
| 353 | ;; Call low-level function. | ||
| 354 | (when (null (cdr registered)) | ||
| 355 | (if handler | ||
| 356 | ;; A file name handler could exist even if there is no local | ||
| 357 | ;; file notification support. | ||
| 358 | (funcall handler 'file-notify-rm-watch desc) | ||
| 359 | |||
| 360 | (funcall | ||
| 361 | (cond | ||
| 362 | ((eq file-notify--library 'gfilenotify) 'gfile-rm-watch) | ||
| 363 | ((eq file-notify--library 'inotify) 'inotify-rm-watch) | ||
| 364 | ((eq file-notify--library 'w32notify) 'w32notify-rm-watch)) | ||
| 365 | desc)))))) | ||
| 319 | 366 | ||
| 320 | ;; The end: | 367 | ;; The end: |
| 321 | (provide 'filenotify) | 368 | (provide 'filenotify) |
diff --git a/lisp/files.el b/lisp/files.el index ed1943dfc28..5e80cb76599 100644 --- a/lisp/files.el +++ b/lisp/files.el | |||
| @@ -6094,7 +6094,7 @@ and `list-directory-verbose-switches'." | |||
| 6094 | 6094 | ||
| 6095 | PATTERN is assumed to represent a file-name wildcard suitable for the | 6095 | PATTERN is assumed to represent a file-name wildcard suitable for the |
| 6096 | underlying filesystem. For Unix and GNU/Linux, each character from the | 6096 | underlying filesystem. For Unix and GNU/Linux, each character from the |
| 6097 | set [ \\t\\n;<>&|()'\"#$] is quoted with a backslash; for DOS/Windows, all | 6097 | set [ \\t\\n;<>&|()`'\"#$] is quoted with a backslash; for DOS/Windows, all |
| 6098 | the parts of the pattern which don't include wildcard characters are | 6098 | the parts of the pattern which don't include wildcard characters are |
| 6099 | quoted with double quotes. | 6099 | quoted with double quotes. |
| 6100 | 6100 | ||
| @@ -6108,12 +6108,12 @@ need to be passed verbatim to shell commands." | |||
| 6108 | ;; argument has quotes, we can safely assume it is already | 6108 | ;; argument has quotes, we can safely assume it is already |
| 6109 | ;; quoted by the caller. | 6109 | ;; quoted by the caller. |
| 6110 | (if (or (string-match "[\"]" pattern) | 6110 | (if (or (string-match "[\"]" pattern) |
| 6111 | ;; We quote [&()#$'] in case their shell is a port of a | 6111 | ;; We quote [&()#$`'] in case their shell is a port of a |
| 6112 | ;; Unixy shell. We quote [,=+] because stock DOS and | 6112 | ;; Unixy shell. We quote [,=+] because stock DOS and |
| 6113 | ;; Windows shells require that in some cases, such as | 6113 | ;; Windows shells require that in some cases, such as |
| 6114 | ;; passing arguments to batch files that use positional | 6114 | ;; passing arguments to batch files that use positional |
| 6115 | ;; arguments like %1. | 6115 | ;; arguments like %1. |
| 6116 | (not (string-match "[ \t;&()#$',=+]" pattern))) | 6116 | (not (string-match "[ \t;&()#$`',=+]" pattern))) |
| 6117 | pattern | 6117 | pattern |
| 6118 | (let ((result "\"") | 6118 | (let ((result "\"") |
| 6119 | (beg 0) | 6119 | (beg 0) |
| @@ -6128,7 +6128,7 @@ need to be passed verbatim to shell commands." | |||
| 6128 | (concat result (substring pattern beg) "\"")))) | 6128 | (concat result (substring pattern beg) "\"")))) |
| 6129 | (t | 6129 | (t |
| 6130 | (let ((beg 0)) | 6130 | (let ((beg 0)) |
| 6131 | (while (string-match "[ \t\n;<>&|()'\"#$]" pattern beg) | 6131 | (while (string-match "[ \t\n;<>&|()`'\"#$]" pattern beg) |
| 6132 | (setq pattern | 6132 | (setq pattern |
| 6133 | (concat (substring pattern 0 (match-beginning 0)) | 6133 | (concat (substring pattern 0 (match-beginning 0)) |
| 6134 | "\\" | 6134 | "\\" |
| @@ -6590,35 +6590,40 @@ Runs the members of `kill-emacs-query-functions' in turn and stops | |||
| 6590 | if any returns nil. If `confirm-kill-emacs' is non-nil, calls it." | 6590 | if any returns nil. If `confirm-kill-emacs' is non-nil, calls it." |
| 6591 | (interactive "P") | 6591 | (interactive "P") |
| 6592 | (save-some-buffers arg t) | 6592 | (save-some-buffers arg t) |
| 6593 | (and (or (not (memq t (mapcar (function | 6593 | (let ((confirm confirm-kill-emacs)) |
| 6594 | (lambda (buf) (and (buffer-file-name buf) | 6594 | (and |
| 6595 | (buffer-modified-p buf)))) | 6595 | (or (not (memq t (mapcar (function |
| 6596 | (buffer-list)))) | 6596 | (lambda (buf) (and (buffer-file-name buf) |
| 6597 | (yes-or-no-p "Modified buffers exist; exit anyway? ")) | 6597 | (buffer-modified-p buf)))) |
| 6598 | (or (not (fboundp 'process-list)) | 6598 | (buffer-list)))) |
| 6599 | ;; process-list is not defined on MSDOS. | 6599 | (progn (setq confirm nil) |
| 6600 | (let ((processes (process-list)) | 6600 | (yes-or-no-p "Modified buffers exist; exit anyway? "))) |
| 6601 | active) | 6601 | (or (not (fboundp 'process-list)) |
| 6602 | (while processes | 6602 | ;; process-list is not defined on MSDOS. |
| 6603 | (and (memq (process-status (car processes)) '(run stop open listen)) | 6603 | (let ((processes (process-list)) |
| 6604 | (process-query-on-exit-flag (car processes)) | 6604 | active) |
| 6605 | (setq active t)) | 6605 | (while processes |
| 6606 | (setq processes (cdr processes))) | 6606 | (and (memq (process-status (car processes)) '(run stop open listen)) |
| 6607 | (or (not active) | 6607 | (process-query-on-exit-flag (car processes)) |
| 6608 | (with-current-buffer-window | 6608 | (setq active t)) |
| 6609 | (get-buffer-create "*Process List*") nil | 6609 | (setq processes (cdr processes))) |
| 6610 | #'(lambda (window _value) | 6610 | (or (not active) |
| 6611 | (with-selected-window window | 6611 | (with-current-buffer-window |
| 6612 | (unwind-protect | 6612 | (get-buffer-create "*Process List*") nil |
| 6613 | (yes-or-no-p "Active processes exist; kill them and exit anyway? ") | 6613 | #'(lambda (window _value) |
| 6614 | (when (window-live-p window) | 6614 | (with-selected-window window |
| 6615 | (quit-restore-window window 'kill))))) | 6615 | (unwind-protect |
| 6616 | (list-processes t))))) | 6616 | (progn |
| 6617 | ;; Query the user for other things, perhaps. | 6617 | (setq confirm nil) |
| 6618 | (run-hook-with-args-until-failure 'kill-emacs-query-functions) | 6618 | (yes-or-no-p "Active processes exist; kill them and exit anyway? ")) |
| 6619 | (or (null confirm-kill-emacs) | 6619 | (when (window-live-p window) |
| 6620 | (funcall confirm-kill-emacs "Really exit Emacs? ")) | 6620 | (quit-restore-window window 'kill))))) |
| 6621 | (kill-emacs))) | 6621 | (list-processes t))))) |
| 6622 | ;; Query the user for other things, perhaps. | ||
| 6623 | (run-hook-with-args-until-failure 'kill-emacs-query-functions) | ||
| 6624 | (or (null confirm) | ||
| 6625 | (funcall confirm "Really exit Emacs? ")) | ||
| 6626 | (kill-emacs)))) | ||
| 6622 | 6627 | ||
| 6623 | (defun save-buffers-kill-terminal (&optional arg) | 6628 | (defun save-buffers-kill-terminal (&optional arg) |
| 6624 | "Offer to save each buffer, then kill the current connection. | 6629 | "Offer to save each buffer, then kill the current connection. |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 7bf4a6e01d6..76683310b3e 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,30 @@ | |||
| 1 | 2015-01-30 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * gnus-registry.el (gnus-registry-max-pruned-entries) | ||
| 4 | (gnus-registry-prune-factor, gnus-registry-default-sort-function): | ||
| 5 | Fix :version. | ||
| 6 | (gnus-registry-default-sort-function): Improve :type. | ||
| 7 | |||
| 8 | 2015-01-29 Lars Ingebrigtsen <larsi@gnus.org> | ||
| 9 | |||
| 10 | * nnimap.el (nnimap-request-group): Allow running this function on | ||
| 11 | groups that don't exist in Gnus yet. | ||
| 12 | (nnimap-request-group): Revert previous patch since that made it | ||
| 13 | impossible to enter nnimap groups. | ||
| 14 | |||
| 15 | * message.el (message-smtpmail-send-it): Remove the mail header | ||
| 16 | separator before sending. | ||
| 17 | |||
| 18 | 2015-01-28 Elias Oltmanns <eo@nebensachen.de> | ||
| 19 | |||
| 20 | * nnimap.el (nnimap-find-expired-articles): Fix handling of | ||
| 21 | (expiry-wait . never). | ||
| 22 | |||
| 23 | 2015-01-28 Lars Ingebrigtsen <larsi@gnus.org> | ||
| 24 | |||
| 25 | * nnimap.el (nnimap-request-group): Clear the buffer before returning | ||
| 26 | the data. | ||
| 27 | |||
| 1 | 2015-01-27 Lars Ingebrigtsen <larsi@gnus.org> | 28 | 2015-01-27 Lars Ingebrigtsen <larsi@gnus.org> |
| 2 | 29 | ||
| 3 | * nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in | 30 | * nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in |
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el index 9cfca1290c5..2017ea2f826 100644 --- a/lisp/gnus/gnus-registry.el +++ b/lisp/gnus/gnus-registry.el | |||
| @@ -176,7 +176,8 @@ nnmairix groups are specifically excluded because they are ephemeral." | |||
| 176 | (make-obsolete-variable 'gnus-registry-max-track-groups nil "23.4") | 176 | (make-obsolete-variable 'gnus-registry-max-track-groups nil "23.4") |
| 177 | (make-obsolete-variable 'gnus-registry-entry-caching nil "23.4") | 177 | (make-obsolete-variable 'gnus-registry-entry-caching nil "23.4") |
| 178 | (make-obsolete-variable 'gnus-registry-trim-articles-without-groups nil "23.4") | 178 | (make-obsolete-variable 'gnus-registry-trim-articles-without-groups nil "23.4") |
| 179 | (make-obsolete-variable 'gnus-registry-max-pruned-entries nil "24.4") | 179 | ;; FIXME it was simply deleted. |
| 180 | (make-obsolete-variable 'gnus-registry-max-pruned-entries nil "25.1") | ||
| 180 | 181 | ||
| 181 | (defcustom gnus-registry-track-extra '(subject sender recipient) | 182 | (defcustom gnus-registry-track-extra '(subject sender recipient) |
| 182 | "Whether the registry should track extra data about a message. | 183 | "Whether the registry should track extra data about a message. |
| @@ -253,21 +254,18 @@ exactly how much less. For example, given a maximum size of | |||
| 253 | cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000 | 254 | cut the registry back to \(- 50000 \(* 50000 0.1\)\) -> 45000 |
| 254 | entries. The pruning process is constrained by the presence of | 255 | entries. The pruning process is constrained by the presence of |
| 255 | \"precious\" entries." | 256 | \"precious\" entries." |
| 256 | :version "24.4" | 257 | :version "25.1" |
| 257 | :group 'gnus-registry | 258 | :group 'gnus-registry |
| 258 | :type 'float) | 259 | :type 'float) |
| 259 | 260 | ||
| 260 | (defcustom gnus-registry-default-sort-function | 261 | (defcustom gnus-registry-default-sort-function |
| 261 | #'gnus-registry-sort-by-creation-time | 262 | #'gnus-registry-sort-by-creation-time |
| 262 | "Sort function to use when pruning the registry. | 263 | "Sort function to use when pruning the registry. |
| 263 | 264 | Entries that sort to the front of the list are pruned first. | |
| 264 | Entries which sort to the front of the list will be pruned | ||
| 265 | first. | ||
| 266 | |||
| 267 | This can slow pruning down. Set to nil to perform no sorting." | 265 | This can slow pruning down. Set to nil to perform no sorting." |
| 268 | :version "24.4" | 266 | :version "25.1" |
| 269 | :group 'gnus-registry | 267 | :group 'gnus-registry |
| 270 | :type 'symbol) | 268 | :type '(choice (const :tag "No sorting" nil) function)) |
| 271 | 269 | ||
| 272 | (defun gnus-registry-sort-by-creation-time (l r) | 270 | (defun gnus-registry-sort-by-creation-time (l r) |
| 273 | "Sort older entries to front of list." | 271 | "Sort older entries to front of list." |
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index de7e9bab8ec..a06de2a6414 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el | |||
| @@ -4906,6 +4906,11 @@ evaluates `message-send-mail-hook' just before sending a message. | |||
| 4906 | It is useful if your ISP requires the POP-before-SMTP | 4906 | It is useful if your ISP requires the POP-before-SMTP |
| 4907 | authentication. See the Gnus manual for details." | 4907 | authentication. See the Gnus manual for details." |
| 4908 | (run-hooks 'message-send-mail-hook) | 4908 | (run-hooks 'message-send-mail-hook) |
| 4909 | ;; Change header-delimiter to be what smtpmail expects. | ||
| 4910 | (goto-char (point-min)) | ||
| 4911 | (when (re-search-forward | ||
| 4912 | (concat "^" (regexp-quote mail-header-separator) "\n")) | ||
| 4913 | (replace-match "\n")) | ||
| 4909 | (smtpmail-send-it)) | 4914 | (smtpmail-send-it)) |
| 4910 | 4915 | ||
| 4911 | (defun message-send-mail-with-mailclient () | 4916 | (defun message-send-mail-with-mailclient () |
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el index f03b9c9b484..311ea7cffff 100644 --- a/lisp/gnus/mm-decode.el +++ b/lisp/gnus/mm-decode.el | |||
| @@ -889,7 +889,7 @@ external if displayed external." | |||
| 889 | (when (and (boundp 'gnus-summary-buffer) | 889 | (when (and (boundp 'gnus-summary-buffer) |
| 890 | (bufferp gnus-summary-buffer) | 890 | (bufferp gnus-summary-buffer) |
| 891 | (buffer-name gnus-summary-buffer)) | 891 | (buffer-name gnus-summary-buffer)) |
| 892 | ;; So that we pop back to the right place, sortof. | 892 | ;; So that we pop back to the right place, sort of. |
| 893 | (switch-to-buffer gnus-summary-buffer) | 893 | (switch-to-buffer gnus-summary-buffer) |
| 894 | (switch-to-buffer mm)) | 894 | (switch-to-buffer mm)) |
| 895 | (delete-other-windows) | 895 | (delete-other-windows) |
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index 8e81abcf9c0..e619c0f13c2 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el | |||
| @@ -812,6 +812,7 @@ textual parts.") | |||
| 812 | (nnimap-finish-retrieve-group-infos server (list info) sequences | 812 | (nnimap-finish-retrieve-group-infos server (list info) sequences |
| 813 | t) | 813 | t) |
| 814 | (setq active (nth 2 (assoc group nnimap-current-infos))))) | 814 | (setq active (nth 2 (assoc group nnimap-current-infos))))) |
| 815 | (erase-buffer) | ||
| 815 | (insert (format "211 %d %d %d %S\n" | 816 | (insert (format "211 %d %d %d %S\n" |
| 816 | (- (cdr active) (car active)) | 817 | (- (cdr active) (car active)) |
| 817 | (car active) | 818 | (car active) |
| @@ -1020,20 +1021,20 @@ textual parts.") | |||
| 1020 | 1021 | ||
| 1021 | (defun nnimap-find-expired-articles (group) | 1022 | (defun nnimap-find-expired-articles (group) |
| 1022 | (let ((cutoff (nnmail-expired-article-p group nil nil))) | 1023 | (let ((cutoff (nnmail-expired-article-p group nil nil))) |
| 1023 | (with-current-buffer (nnimap-buffer) | 1024 | (when cutoff |
| 1024 | (let ((result | 1025 | (with-current-buffer (nnimap-buffer) |
| 1025 | (nnimap-command | 1026 | (let ((result |
| 1026 | "UID SEARCH SENTBEFORE %s" | 1027 | (nnimap-command |
| 1027 | (format-time-string | 1028 | "UID SEARCH SENTBEFORE %s" |
| 1028 | (format "%%d-%s-%%Y" | 1029 | (format-time-string |
| 1029 | (upcase | 1030 | (format "%%d-%s-%%Y" |
| 1030 | (car (rassoc (nth 4 (decode-time cutoff)) | 1031 | (upcase |
| 1031 | parse-time-months)))) | 1032 | (car (rassoc (nth 4 (decode-time cutoff)) |
| 1032 | cutoff)))) | 1033 | parse-time-months)))) |
| 1033 | (and (car result) | 1034 | cutoff)))) |
| 1034 | (delete 0 (mapcar #'string-to-number | 1035 | (and (car result) |
| 1035 | (cdr (assoc "SEARCH" (cdr result)))))))))) | 1036 | (delete 0 (mapcar #'string-to-number |
| 1036 | 1037 | (cdr (assoc "SEARCH" (cdr result))))))))))) | |
| 1037 | 1038 | ||
| 1038 | (defun nnimap-find-article-by-message-id (group server message-id | 1039 | (defun nnimap-find-article-by-message-id (group server message-id |
| 1039 | &optional limit) | 1040 | &optional limit) |
diff --git a/lisp/loadup.el b/lisp/loadup.el index 96641c8a268..003b0db4abd 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el | |||
| @@ -145,7 +145,8 @@ | |||
| 145 | (file-error (load "ldefs-boot.el"))) | 145 | (file-error (load "ldefs-boot.el"))) |
| 146 | 146 | ||
| 147 | (load "emacs-lisp/nadvice") | 147 | (load "emacs-lisp/nadvice") |
| 148 | (load "minibuffer") | 148 | (load "emacs-lisp/cl-preloaded") |
| 149 | (load "minibuffer") ;After loaddefs, for define-minor-mode. | ||
| 149 | (load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table. | 150 | (load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table. |
| 150 | (load "simple") | 151 | (load "simple") |
| 151 | 152 | ||
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el index 28aa43117da..ebcbc714ffb 100644 --- a/lisp/net/net-utils.el +++ b/lisp/net/net-utils.el | |||
| @@ -328,7 +328,15 @@ This variable is only used if the variable | |||
| 328 | 328 | ||
| 329 | (defun net-utils-run-program (name header program args) | 329 | (defun net-utils-run-program (name header program args) |
| 330 | "Run a network information program." | 330 | "Run a network information program." |
| 331 | (let ((buf (get-buffer-create (concat "*" name "*")))) | 331 | (let ((buf (get-buffer-create (concat "*" name "*"))) |
| 332 | (coding-system-for-read | ||
| 333 | ;; MS-Windows versions of network utilities output text | ||
| 334 | ;; encoded in the console (a.k.a. "OEM") codepage, which is | ||
| 335 | ;; different from the default system (a.k.a. "ANSI") | ||
| 336 | ;; codepage. | ||
| 337 | (if (eq system-type 'windows-nt) | ||
| 338 | (intern (format "cp%d" (w32-get-console-output-codepage))) | ||
| 339 | coding-system-for-read))) | ||
| 332 | (set-buffer buf) | 340 | (set-buffer buf) |
| 333 | (erase-buffer) | 341 | (erase-buffer) |
| 334 | (insert header "\n") | 342 | (insert header "\n") |
| @@ -352,7 +360,15 @@ This variable is only used if the variable | |||
| 352 | (when proc | 360 | (when proc |
| 353 | (set-process-filter proc nil) | 361 | (set-process-filter proc nil) |
| 354 | (delete-process proc))) | 362 | (delete-process proc))) |
| 355 | (let ((inhibit-read-only t)) | 363 | (let ((inhibit-read-only t) |
| 364 | (coding-system-for-read | ||
| 365 | ;; MS-Windows versions of network utilities output text | ||
| 366 | ;; encoded in the console (a.k.a. "OEM") codepage, which is | ||
| 367 | ;; different from the default system (a.k.a. "ANSI") | ||
| 368 | ;; codepage. | ||
| 369 | (if (eq system-type 'windows-nt) | ||
| 370 | (intern (format "cp%d" (w32-get-console-output-codepage))) | ||
| 371 | coding-system-for-read))) | ||
| 356 | (erase-buffer)) | 372 | (erase-buffer)) |
| 357 | (net-utils-mode) | 373 | (net-utils-mode) |
| 358 | (setq-local net-utils--revert-cmd | 374 | (setq-local net-utils--revert-cmd |
diff --git a/lisp/net/shr.el b/lisp/net/shr.el index a0c9eba4144..59c277b01c2 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el | |||
| @@ -1628,6 +1628,8 @@ The preference is a float determined from `shr-prefer-media-type'." | |||
| 1628 | (let ((trs nil) | 1628 | (let ((trs nil) |
| 1629 | (shr-inhibit-decoration (not fill)) | 1629 | (shr-inhibit-decoration (not fill)) |
| 1630 | (rowspans (make-vector (length widths) 0)) | 1630 | (rowspans (make-vector (length widths) 0)) |
| 1631 | (colspan-remaining 0) | ||
| 1632 | colspan-width colspan-count | ||
| 1631 | width colspan) | 1633 | width colspan) |
| 1632 | (dolist (row (dom-non-text-children dom)) | 1634 | (dolist (row (dom-non-text-children dom)) |
| 1633 | (when (eq (dom-tag row) 'tr) | 1635 | (when (eq (dom-tag row) 'tr) |
| @@ -1659,24 +1661,39 @@ The preference is a float determined from `shr-prefer-media-type'." | |||
| 1659 | (if column | 1661 | (if column |
| 1660 | (aref widths width-column) | 1662 | (aref widths width-column) |
| 1661 | 10)) | 1663 | 10)) |
| 1662 | (when (and fill | 1664 | (when (setq colspan (dom-attr column 'colspan)) |
| 1663 | (setq colspan (dom-attr column 'colspan))) | ||
| 1664 | (setq colspan (min (string-to-number colspan) | 1665 | (setq colspan (min (string-to-number colspan) |
| 1665 | ;; The colspan may be wrong, so | 1666 | ;; The colspan may be wrong, so |
| 1666 | ;; truncate it to the length of the | 1667 | ;; truncate it to the length of the |
| 1667 | ;; remaining columns. | 1668 | ;; remaining columns. |
| 1668 | (- (length widths) i))) | 1669 | (- (length widths) i))) |
| 1669 | (dotimes (j (1- colspan)) | 1670 | (dotimes (j (1- colspan)) |
| 1670 | (if (> (+ i 1 j) (1- (length widths))) | 1671 | (setq width |
| 1671 | (setq width (aref widths (1- (length widths)))) | 1672 | (if (> (+ i 1 j) (1- (length widths))) |
| 1672 | (setq width (+ width | 1673 | ;; If we have a colspan spec that's longer |
| 1673 | shr-table-separator-length | 1674 | ;; than the table is wide, just use the last |
| 1674 | (aref widths (+ i 1 j)))))) | 1675 | ;; width as the width. |
| 1675 | (setq width-column (+ width-column (1- colspan)))) | 1676 | (aref widths (1- (length widths))) |
| 1677 | ;; Sum up the widths of the columns we're | ||
| 1678 | ;; spanning. | ||
| 1679 | (+ width | ||
| 1680 | shr-table-separator-length | ||
| 1681 | (aref widths (+ i 1 j)))))) | ||
| 1682 | (setq width-column (+ width-column (1- colspan)) | ||
| 1683 | colspan-count colspan | ||
| 1684 | colspan-remaining colspan)) | ||
| 1676 | (when (or column | 1685 | (when (or column |
| 1677 | (not fill)) | 1686 | (not fill)) |
| 1678 | (push (shr-render-td column width fill) | 1687 | (let ((data (shr-render-td column width fill))) |
| 1679 | tds)) | 1688 | (if (and (not fill) |
| 1689 | (> colspan-remaining 0)) | ||
| 1690 | (progn | ||
| 1691 | (when (= colspan-count colspan-remaining) | ||
| 1692 | (setq colspan-width data)) | ||
| 1693 | (let ((this-width (/ colspan-width colspan-count))) | ||
| 1694 | (push this-width tds) | ||
| 1695 | (setq colspan-remaining (1- colspan-remaining)))) | ||
| 1696 | (push data tds)))) | ||
| 1680 | (setq i (1+ i) | 1697 | (setq i (1+ i) |
| 1681 | width-column (1+ width-column)))) | 1698 | width-column (1+ width-column)))) |
| 1682 | (push (nreverse tds) trs)))) | 1699 | (push (nreverse tds) trs)))) |
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index d44c8ea2f6d..ba0d13eab8b 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el | |||
| @@ -64,7 +64,6 @@ | |||
| 64 | (defvar bkup-backup-directory-info) | 64 | (defvar bkup-backup-directory-info) |
| 65 | (defvar directory-sep-char) | 65 | (defvar directory-sep-char) |
| 66 | (defvar eshell-path-env) | 66 | (defvar eshell-path-env) |
| 67 | (defvar file-notify-descriptors) | ||
| 68 | (defvar ls-lisp-use-insert-directory-program) | 67 | (defvar ls-lisp-use-insert-directory-program) |
| 69 | (defvar outline-regexp) | 68 | (defvar outline-regexp) |
| 70 | 69 | ||
| @@ -3415,7 +3414,7 @@ of." | |||
| 3415 | (defun tramp-handle-file-notify-rm-watch (proc) | 3414 | (defun tramp-handle-file-notify-rm-watch (proc) |
| 3416 | "Like `file-notify-rm-watch' for Tramp files." | 3415 | "Like `file-notify-rm-watch' for Tramp files." |
| 3417 | ;; The descriptor must be a process object. | 3416 | ;; The descriptor must be a process object. |
| 3418 | (unless (and (processp proc) (gethash proc file-notify-descriptors)) | 3417 | (unless (processp proc) |
| 3419 | (tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc)) | 3418 | (tramp-error proc 'file-notify-error "Not a valid descriptor %S" proc)) |
| 3420 | (tramp-message proc 6 "Kill %S" proc) | 3419 | (tramp-message proc 6 "Kill %S" proc) |
| 3421 | (kill-process proc)) | 3420 | (kill-process proc)) |
diff --git a/lisp/outline.el b/lisp/outline.el index 11d71fb1226..ae31b8088f0 100644 --- a/lisp/outline.el +++ b/lisp/outline.el | |||
| @@ -35,9 +35,6 @@ | |||
| 35 | 35 | ||
| 36 | ;;; Code: | 36 | ;;; Code: |
| 37 | 37 | ||
| 38 | (defvar font-lock-warning-face) | ||
| 39 | |||
| 40 | |||
| 41 | (defgroup outlines nil | 38 | (defgroup outlines nil |
| 42 | "Support for hierarchical outlining." | 39 | "Support for hierarchical outlining." |
| 43 | :prefix "outline-" | 40 | :prefix "outline-" |
| @@ -65,73 +62,66 @@ in the file it applies to.") | |||
| 65 | (define-key map "@" 'outline-mark-subtree) | 62 | (define-key map "@" 'outline-mark-subtree) |
| 66 | (define-key map "\C-n" 'outline-next-visible-heading) | 63 | (define-key map "\C-n" 'outline-next-visible-heading) |
| 67 | (define-key map "\C-p" 'outline-previous-visible-heading) | 64 | (define-key map "\C-p" 'outline-previous-visible-heading) |
| 68 | (define-key map "\C-i" 'show-children) | 65 | (define-key map "\C-i" 'outline-show-children) |
| 69 | (define-key map "\C-s" 'show-subtree) | 66 | (define-key map "\C-s" 'outline-show-subtree) |
| 70 | (define-key map "\C-d" 'hide-subtree) | 67 | (define-key map "\C-d" 'outline-hide-subtree) |
| 71 | (define-key map "\C-u" 'outline-up-heading) | 68 | (define-key map "\C-u" 'outline-up-heading) |
| 72 | (define-key map "\C-f" 'outline-forward-same-level) | 69 | (define-key map "\C-f" 'outline-forward-same-level) |
| 73 | (define-key map "\C-b" 'outline-backward-same-level) | 70 | (define-key map "\C-b" 'outline-backward-same-level) |
| 74 | (define-key map "\C-t" 'hide-body) | 71 | (define-key map "\C-t" 'outline-hide-body) |
| 75 | (define-key map "\C-a" 'show-all) | 72 | (define-key map "\C-a" 'outline-show-all) |
| 76 | (define-key map "\C-c" 'hide-entry) | 73 | (define-key map "\C-c" 'outline-hide-entry) |
| 77 | (define-key map "\C-e" 'show-entry) | 74 | (define-key map "\C-e" 'outline-show-entry) |
| 78 | (define-key map "\C-l" 'hide-leaves) | 75 | (define-key map "\C-l" 'outline-hide-leaves) |
| 79 | (define-key map "\C-k" 'show-branches) | 76 | (define-key map "\C-k" 'outline-show-branches) |
| 80 | (define-key map "\C-q" 'hide-sublevels) | 77 | (define-key map "\C-q" 'outline-hide-sublevels) |
| 81 | (define-key map "\C-o" 'hide-other) | 78 | (define-key map "\C-o" 'outline-hide-other) |
| 82 | (define-key map "\C-^" 'outline-move-subtree-up) | 79 | (define-key map "\C-^" 'outline-move-subtree-up) |
| 83 | (define-key map "\C-v" 'outline-move-subtree-down) | 80 | (define-key map "\C-v" 'outline-move-subtree-down) |
| 84 | (define-key map [(control ?<)] 'outline-promote) | 81 | (define-key map [(control ?<)] 'outline-promote) |
| 85 | (define-key map [(control ?>)] 'outline-demote) | 82 | (define-key map [(control ?>)] 'outline-demote) |
| 86 | (define-key map "\C-m" 'outline-insert-heading) | 83 | (define-key map "\C-m" 'outline-insert-heading) |
| 87 | ;; Where to bind outline-cycle ? | ||
| 88 | map)) | 84 | map)) |
| 89 | 85 | ||
| 90 | (defvar outline-mode-menu-bar-map | 86 | (defvar outline-mode-menu-bar-map |
| 91 | (let ((map (make-sparse-keymap))) | 87 | (let ((map (make-sparse-keymap))) |
| 92 | |||
| 93 | (define-key map [hide] (cons "Hide" (make-sparse-keymap "Hide"))) | 88 | (define-key map [hide] (cons "Hide" (make-sparse-keymap "Hide"))) |
| 94 | 89 | (define-key map [hide outline-hide-other] | |
| 95 | (define-key map [hide hide-other] | 90 | '(menu-item "Hide Other" outline-hide-other |
| 96 | '(menu-item "Hide Other" hide-other | ||
| 97 | :help "Hide everything except current body and parent and top-level headings")) | 91 | :help "Hide everything except current body and parent and top-level headings")) |
| 98 | (define-key map [hide hide-sublevels] | 92 | (define-key map [hide outline-hide-sublevels] |
| 99 | '(menu-item "Hide Sublevels" hide-sublevels | 93 | '(menu-item "Hide Sublevels" outline-hide-sublevels |
| 100 | :help "Hide everything but the top LEVELS levels of headers, in whole buffer")) | 94 | :help "Hide everything but the top LEVELS levels of headers, in whole buffer")) |
| 101 | (define-key map [hide hide-subtree] | 95 | (define-key map [hide outline-hide-subtree] |
| 102 | '(menu-item "Hide Subtree" hide-subtree | 96 | '(menu-item "Hide Subtree" outline-hide-subtree |
| 103 | :help "Hide everything after this heading at deeper levels")) | 97 | :help "Hide everything after this heading at deeper levels")) |
| 104 | (define-key map [hide hide-entry] | 98 | (define-key map [hide outline-hide-entry] |
| 105 | '(menu-item "Hide Entry" hide-entry | 99 | '(menu-item "Hide Entry" outline-hide-entry |
| 106 | :help "Hide the body directly following this heading")) | 100 | :help "Hide the body directly following this heading")) |
| 107 | (define-key map [hide hide-body] | 101 | (define-key map [hide outline-hide-body] |
| 108 | '(menu-item "Hide Body" hide-body | 102 | '(menu-item "Hide Body" outline-hide-body |
| 109 | :help "Hide all body lines in buffer, leaving all headings visible")) | 103 | :help "Hide all body lines in buffer, leaving all headings visible")) |
| 110 | (define-key map [hide hide-leaves] | 104 | (define-key map [hide outline-hide-leaves] |
| 111 | '(menu-item "Hide Leaves" hide-leaves | 105 | '(menu-item "Hide Leaves" outline-hide-leaves |
| 112 | :help "Hide the body after this heading and at deeper levels")) | 106 | :help "Hide the body after this heading and at deeper levels")) |
| 113 | |||
| 114 | (define-key map [show] (cons "Show" (make-sparse-keymap "Show"))) | 107 | (define-key map [show] (cons "Show" (make-sparse-keymap "Show"))) |
| 115 | 108 | (define-key map [show outline-show-subtree] | |
| 116 | (define-key map [show show-subtree] | 109 | '(menu-item "Show Subtree" outline-show-subtree |
| 117 | '(menu-item "Show Subtree" show-subtree | ||
| 118 | :help "Show everything after this heading at deeper levels")) | 110 | :help "Show everything after this heading at deeper levels")) |
| 119 | (define-key map [show show-children] | 111 | (define-key map [show outline-show-children] |
| 120 | '(menu-item "Show Children" show-children | 112 | '(menu-item "Show Children" outline-show-children |
| 121 | :help "Show all direct subheadings of this heading")) | 113 | :help "Show all direct subheadings of this heading")) |
| 122 | (define-key map [show show-branches] | 114 | (define-key map [show outline-show-branches] |
| 123 | '(menu-item "Show Branches" show-branches | 115 | '(menu-item "Show Branches" outline-show-branches |
| 124 | :help "Show all subheadings of this heading, but not their bodies")) | 116 | :help "Show all subheadings of this heading, but not their bodies")) |
| 125 | (define-key map [show show-entry] | 117 | (define-key map [show outline-show-entry] |
| 126 | '(menu-item "Show Entry" show-entry | 118 | '(menu-item "Show Entry" outline-show-entry |
| 127 | :help "Show the body directly following this heading")) | 119 | :help "Show the body directly following this heading")) |
| 128 | (define-key map [show show-all] | 120 | (define-key map [show outline-show-all] |
| 129 | '(menu-item "Show All" show-all | 121 | '(menu-item "Show All" outline-show-all |
| 130 | :help "Show all of the text in the buffer")) | 122 | :help "Show all of the text in the buffer")) |
| 131 | |||
| 132 | (define-key map [headings] | 123 | (define-key map [headings] |
| 133 | (cons "Headings" (make-sparse-keymap "Headings"))) | 124 | (cons "Headings" (make-sparse-keymap "Headings"))) |
| 134 | |||
| 135 | (define-key map [headings demote-subtree] | 125 | (define-key map [headings demote-subtree] |
| 136 | '(menu-item "Demote Subtree" outline-demote | 126 | '(menu-item "Demote Subtree" outline-demote |
| 137 | :help "Demote headings lower down the tree")) | 127 | :help "Demote headings lower down the tree")) |
| @@ -152,23 +142,18 @@ in the file it applies to.") | |||
| 152 | '(menu-item "New Heading" outline-insert-heading | 142 | '(menu-item "New Heading" outline-insert-heading |
| 153 | :help "Insert a new heading at same depth at point")) | 143 | :help "Insert a new heading at same depth at point")) |
| 154 | (define-key map [headings outline-backward-same-level] | 144 | (define-key map [headings outline-backward-same-level] |
| 155 | |||
| 156 | '(menu-item "Previous Same Level" outline-backward-same-level | 145 | '(menu-item "Previous Same Level" outline-backward-same-level |
| 157 | :help "Move backward to the arg'th subheading at same level as this one.")) | 146 | :help "Move backward to the arg'th subheading at same level as this one.")) |
| 158 | (define-key map [headings outline-forward-same-level] | 147 | (define-key map [headings outline-forward-same-level] |
| 159 | |||
| 160 | '(menu-item "Next Same Level" outline-forward-same-level | 148 | '(menu-item "Next Same Level" outline-forward-same-level |
| 161 | :help "Move forward to the arg'th subheading at same level as this one")) | 149 | :help "Move forward to the arg'th subheading at same level as this one")) |
| 162 | (define-key map [headings outline-previous-visible-heading] | 150 | (define-key map [headings outline-previous-visible-heading] |
| 163 | |||
| 164 | '(menu-item "Previous" outline-previous-visible-heading | 151 | '(menu-item "Previous" outline-previous-visible-heading |
| 165 | :help "Move to the previous heading line")) | 152 | :help "Move to the previous heading line")) |
| 166 | (define-key map [headings outline-next-visible-heading] | 153 | (define-key map [headings outline-next-visible-heading] |
| 167 | |||
| 168 | '(menu-item "Next" outline-next-visible-heading | 154 | '(menu-item "Next" outline-next-visible-heading |
| 169 | :help "Move to the next visible heading line")) | 155 | :help "Move to the next visible heading line")) |
| 170 | (define-key map [headings outline-up-heading] | 156 | (define-key map [headings outline-up-heading] |
| 171 | |||
| 172 | '(menu-item "Up" outline-up-heading | 157 | '(menu-item "Up" outline-up-heading |
| 173 | :help "Move to the visible heading line of which the present line is a subheading")) | 158 | :help "Move to the visible heading line of which the present line is a subheading")) |
| 174 | map)) | 159 | map)) |
| @@ -190,7 +175,6 @@ in the file it applies to.") | |||
| 190 | outline-mode-menu-bar-map)))))) | 175 | outline-mode-menu-bar-map)))))) |
| 191 | map)) | 176 | map)) |
| 192 | 177 | ||
| 193 | |||
| 194 | (defvar outline-mode-map | 178 | (defvar outline-mode-map |
| 195 | (let ((map (make-sparse-keymap))) | 179 | (let ((map (make-sparse-keymap))) |
| 196 | (define-key map "\C-c" outline-mode-prefix-map) | 180 | (define-key map "\C-c" outline-mode-prefix-map) |
| @@ -198,7 +182,7 @@ in the file it applies to.") | |||
| 198 | map)) | 182 | map)) |
| 199 | 183 | ||
| 200 | (defvar outline-font-lock-keywords | 184 | (defvar outline-font-lock-keywords |
| 201 | '(;; | 185 | '( |
| 202 | ;; Highlight headings according to the level. | 186 | ;; Highlight headings according to the level. |
| 203 | (eval . (list (concat "^\\(?:" outline-regexp "\\).+") | 187 | (eval . (list (concat "^\\(?:" outline-regexp "\\).+") |
| 204 | 0 '(outline-font-lock-face) nil t))) | 188 | 0 '(outline-font-lock-face) nil t))) |
| @@ -248,33 +232,14 @@ in the file it applies to.") | |||
| 248 | [outline-1 outline-2 outline-3 outline-4 | 232 | [outline-1 outline-2 outline-3 outline-4 |
| 249 | outline-5 outline-6 outline-7 outline-8]) | 233 | outline-5 outline-6 outline-7 outline-8]) |
| 250 | 234 | ||
| 251 | ;; (defvar outline-font-lock-levels nil) | ||
| 252 | ;; (make-variable-buffer-local 'outline-font-lock-levels) | ||
| 253 | |||
| 254 | (defun outline-font-lock-face () | 235 | (defun outline-font-lock-face () |
| 255 | ;; (save-excursion | 236 | "Return one of `outline-font-lock-faces' for current level." |
| 256 | ;; (outline-back-to-heading t) | ||
| 257 | ;; (let* ((count 0) | ||
| 258 | ;; (start-level (funcall outline-level)) | ||
| 259 | ;; (level start-level) | ||
| 260 | ;; face-level) | ||
| 261 | ;; (while (not (setq face-level | ||
| 262 | ;; (if (or (bobp) (eq level 1)) 0 | ||
| 263 | ;; (cdr (assq level outline-font-lock-levels))))) | ||
| 264 | ;; (outline-up-heading 1 t) | ||
| 265 | ;; (setq count (1+ count)) | ||
| 266 | ;; (setq level (funcall outline-level))) | ||
| 267 | ;; ;; Remember for later. | ||
| 268 | ;; (unless (zerop count) | ||
| 269 | ;; (setq face-level (+ face-level count)) | ||
| 270 | ;; (push (cons start-level face-level) outline-font-lock-levels)) | ||
| 271 | ;; (condition-case nil | ||
| 272 | ;; (aref outline-font-lock-faces face-level) | ||
| 273 | ;; (error font-lock-warning-face)))) | ||
| 274 | (save-excursion | 237 | (save-excursion |
| 275 | (goto-char (match-beginning 0)) | 238 | (goto-char (match-beginning 0)) |
| 276 | (looking-at outline-regexp) | 239 | (looking-at outline-regexp) |
| 277 | (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces))))) | 240 | (aref outline-font-lock-faces |
| 241 | (% (1- (funcall outline-level)) | ||
| 242 | (length outline-font-lock-faces))))) | ||
| 278 | 243 | ||
| 279 | (defvar outline-view-change-hook nil | 244 | (defvar outline-view-change-hook nil |
| 280 | "Normal hook to be run after outline visibility changes.") | 245 | "Normal hook to be run after outline visibility changes.") |
| @@ -296,29 +261,11 @@ invisible, or visible again. Invisible lines are attached to the end | |||
| 296 | of the heading, so they move with it, if the line is killed and yanked | 261 | of the heading, so they move with it, if the line is killed and yanked |
| 297 | back. A heading with text hidden under it is marked with an ellipsis (...). | 262 | back. A heading with text hidden under it is marked with an ellipsis (...). |
| 298 | 263 | ||
| 299 | Commands:\\<outline-mode-map> | 264 | \\{outline-mode-map} |
| 300 | \\[outline-next-visible-heading] outline-next-visible-heading move by visible headings | 265 | The commands `outline-hide-subtree', `outline-show-subtree', |
| 301 | \\[outline-previous-visible-heading] outline-previous-visible-heading | 266 | `outline-show-children', `outline-hide-entry', |
| 302 | \\[outline-forward-same-level] outline-forward-same-level similar but skip subheadings | 267 | `outline-show-entry', `outline-hide-leaves', and `outline-show-branches' |
| 303 | \\[outline-backward-same-level] outline-backward-same-level | 268 | are used when point is on a heading line. |
| 304 | \\[outline-up-heading] outline-up-heading move from subheading to heading | ||
| 305 | |||
| 306 | \\[hide-body] make all text invisible (not headings). | ||
| 307 | \\[show-all] make everything in buffer visible. | ||
| 308 | \\[hide-sublevels] make only the first N levels of headers visible. | ||
| 309 | |||
| 310 | The remaining commands are used when point is on a heading line. | ||
| 311 | They apply to some of the body or subheadings of that heading. | ||
| 312 | \\[hide-subtree] hide-subtree make body and subheadings invisible. | ||
| 313 | \\[show-subtree] show-subtree make body and subheadings visible. | ||
| 314 | \\[show-children] show-children make direct subheadings visible. | ||
| 315 | No effect on body, or subheadings 2 or more levels down. | ||
| 316 | With arg N, affects subheadings N levels down. | ||
| 317 | \\[hide-entry] make immediately following body invisible. | ||
| 318 | \\[show-entry] make it visible. | ||
| 319 | \\[hide-leaves] make body under heading and under its subheadings invisible. | ||
| 320 | The subheadings remain visible. | ||
| 321 | \\[show-branches] make all subheadings at all levels visible. | ||
| 322 | 269 | ||
| 323 | The variable `outline-regexp' can be changed to control what is a heading. | 270 | The variable `outline-regexp' can be changed to control what is a heading. |
| 324 | A line is a heading if `outline-regexp' matches something at the | 271 | A line is a heading if `outline-regexp' matches something at the |
| @@ -340,7 +287,7 @@ Turning on outline mode calls the value of `text-mode-hook' and then of | |||
| 340 | '(outline-font-lock-keywords t nil nil backward-paragraph)) | 287 | '(outline-font-lock-keywords t nil nil backward-paragraph)) |
| 341 | (setq imenu-generic-expression | 288 | (setq imenu-generic-expression |
| 342 | (list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0))) | 289 | (list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0))) |
| 343 | (add-hook 'change-major-mode-hook 'show-all nil t)) | 290 | (add-hook 'change-major-mode-hook 'outline-show-all nil t)) |
| 344 | 291 | ||
| 345 | (defcustom outline-minor-mode-prefix "\C-c@" | 292 | (defcustom outline-minor-mode-prefix "\C-c@" |
| 346 | "Prefix key to use for Outline commands in Outline minor mode. | 293 | "Prefix key to use for Outline commands in Outline minor mode. |
| @@ -373,7 +320,7 @@ See the command `outline-mode' for more information on this mode." | |||
| 373 | ;; Cause use of ellipses for invisible text. | 320 | ;; Cause use of ellipses for invisible text. |
| 374 | (remove-from-invisibility-spec '(outline . t)) | 321 | (remove-from-invisibility-spec '(outline . t)) |
| 375 | ;; When turning off outline mode, get rid of any outline hiding. | 322 | ;; When turning off outline mode, get rid of any outline hiding. |
| 376 | (show-all))) | 323 | (outline-show-all))) |
| 377 | 324 | ||
| 378 | (defvar outline-level 'outline-level | 325 | (defvar outline-level 'outline-level |
| 379 | "Function of no args to compute a header's nesting level in an outline. | 326 | "Function of no args to compute a header's nesting level in an outline. |
| @@ -441,7 +388,8 @@ at the end of the buffer." | |||
| 441 | nil 'move)) | 388 | nil 'move)) |
| 442 | 389 | ||
| 443 | (defsubst outline-invisible-p (&optional pos) | 390 | (defsubst outline-invisible-p (&optional pos) |
| 444 | "Non-nil if the character after point is invisible." | 391 | "Non-nil if the character after POS is invisible. |
| 392 | If POS is nil, use `point' instead." | ||
| 445 | (get-char-property (or pos (point)) 'invisible)) | 393 | (get-char-property (or pos (point)) 'invisible)) |
| 446 | 394 | ||
| 447 | (defun outline-back-to-heading (&optional invisible-ok) | 395 | (defun outline-back-to-heading (&optional invisible-ok) |
| @@ -454,7 +402,7 @@ Only visible heading lines are considered, unless INVISIBLE-OK is non-nil." | |||
| 454 | (while (not found) | 402 | (while (not found) |
| 455 | (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)") | 403 | (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)") |
| 456 | nil t) | 404 | nil t) |
| 457 | (error "before first heading")) | 405 | (error "Before first heading")) |
| 458 | (setq found (and (or invisible-ok (not (outline-invisible-p))) | 406 | (setq found (and (or invisible-ok (not (outline-invisible-p))) |
| 459 | (point))))) | 407 | (point))))) |
| 460 | (goto-char found) | 408 | (goto-char found) |
| @@ -489,6 +437,9 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too." | |||
| 489 | (run-hooks 'outline-insert-heading-hook))) | 437 | (run-hooks 'outline-insert-heading-hook))) |
| 490 | 438 | ||
| 491 | (defun outline-invent-heading (head up) | 439 | (defun outline-invent-heading (head up) |
| 440 | "Create a heading by using heading HEAD as a template. | ||
| 441 | When UP is non-nil, the created heading will be one level above. | ||
| 442 | Otherwise, it will be one level below." | ||
| 492 | (save-match-data | 443 | (save-match-data |
| 493 | ;; Let's try to invent one by repeating or deleting the last char. | 444 | ;; Let's try to invent one by repeating or deleting the last char. |
| 494 | (let ((new-head (if up (substring head 0 -1) | 445 | (let ((new-head (if up (substring head 0 -1) |
| @@ -504,7 +455,7 @@ If INVISIBLE-OK is non-nil, an invisible heading line is ok too." | |||
| 504 | 455 | ||
| 505 | (defun outline-promote (&optional which) | 456 | (defun outline-promote (&optional which) |
| 506 | "Promote headings higher up the tree. | 457 | "Promote headings higher up the tree. |
| 507 | If transient-mark-mode is on, and mark is active, promote headings in | 458 | If `transient-mark-mode' is on, and mark is active, promote headings in |
| 508 | the region (from a Lisp program, pass `region' for WHICH). Otherwise: | 459 | the region (from a Lisp program, pass `region' for WHICH). Otherwise: |
| 509 | without prefix argument, promote current heading and all headings in the | 460 | without prefix argument, promote current heading and all headings in the |
| 510 | subtree (from a Lisp program, pass `subtree' for WHICH); with prefix | 461 | subtree (from a Lisp program, pass `subtree' for WHICH); with prefix |
| @@ -543,7 +494,7 @@ nil for WHICH, or do not pass any argument)." | |||
| 543 | 494 | ||
| 544 | (defun outline-demote (&optional which) | 495 | (defun outline-demote (&optional which) |
| 545 | "Demote headings lower down the tree. | 496 | "Demote headings lower down the tree. |
| 546 | If transient-mark-mode is on, and mark is active, demote headings in | 497 | If `transient-mark-mode' is on, and mark is active, demote headings in |
| 547 | the region (from a Lisp program, pass `region' for WHICH). Otherwise: | 498 | the region (from a Lisp program, pass `region' for WHICH). Otherwise: |
| 548 | without prefix argument, demote current heading and all headings in the | 499 | without prefix argument, demote current heading and all headings in the |
| 549 | subtree (from a Lisp program, pass `subtree' for WHICH); with prefix | 500 | subtree (from a Lisp program, pass `subtree' for WHICH); with prefix |
| @@ -585,7 +536,7 @@ nil for WHICH, or do not pass any argument)." | |||
| 585 | (replace-match down-head nil t))))) | 536 | (replace-match down-head nil t))))) |
| 586 | 537 | ||
| 587 | (defun outline-head-from-level (level head &optional alist) | 538 | (defun outline-head-from-level (level head &optional alist) |
| 588 | "Get new heading with level LEVEL from ALIST. | 539 | "Get new heading with level LEVEL, closest to HEAD, from ALIST. |
| 589 | If there are no such entries, return nil. | 540 | If there are no such entries, return nil. |
| 590 | ALIST defaults to `outline-heading-alist'. | 541 | ALIST defaults to `outline-heading-alist'. |
| 591 | Similar to (car (rassoc LEVEL ALIST)). | 542 | Similar to (car (rassoc LEVEL ALIST)). |
| @@ -677,16 +628,17 @@ the match data is set appropriately." | |||
| 677 | (move-marker ins-point (point)) | 628 | (move-marker ins-point (point)) |
| 678 | (insert (delete-and-extract-region beg end)) | 629 | (insert (delete-and-extract-region beg end)) |
| 679 | (goto-char ins-point) | 630 | (goto-char ins-point) |
| 680 | (if folded (hide-subtree)) | 631 | (if folded (outline-hide-subtree)) |
| 681 | (move-marker ins-point nil))) | 632 | (move-marker ins-point nil))) |
| 682 | 633 | ||
| 683 | (defun outline-end-of-heading () | 634 | (defun outline-end-of-heading () |
| 635 | "Move to one char before the next `outline-heading-end-regexp'." | ||
| 684 | (if (re-search-forward outline-heading-end-regexp nil 'move) | 636 | (if (re-search-forward outline-heading-end-regexp nil 'move) |
| 685 | (forward-char -1))) | 637 | (forward-char -1))) |
| 686 | 638 | ||
| 687 | (defun outline-next-visible-heading (arg) | 639 | (defun outline-next-visible-heading (arg) |
| 688 | "Move to the next visible heading line. | 640 | "Move to the next visible heading line. |
| 689 | With argument, repeats or can move backward if negative. | 641 | With ARG, repeats or can move backward if negative. |
| 690 | A heading line is one that starts with a `*' (or that | 642 | A heading line is one that starts with a `*' (or that |
| 691 | `outline-regexp' matches)." | 643 | `outline-regexp' matches)." |
| 692 | (interactive "p") | 644 | (interactive "p") |
| @@ -714,7 +666,7 @@ A heading line is one that starts with a `*' (or that | |||
| 714 | 666 | ||
| 715 | (defun outline-previous-visible-heading (arg) | 667 | (defun outline-previous-visible-heading (arg) |
| 716 | "Move to the previous heading line. | 668 | "Move to the previous heading line. |
| 717 | With argument, repeats or can move forward if negative. | 669 | With ARG, repeats or can move forward if negative. |
| 718 | A heading line is one that starts with a `*' (or that | 670 | A heading line is one that starts with a `*' (or that |
| 719 | `outline-regexp' matches)." | 671 | `outline-regexp' matches)." |
| 720 | (interactive "p") | 672 | (interactive "p") |
| @@ -739,7 +691,7 @@ This puts point at the start of the current subtree, and mark at the end." | |||
| 739 | (defvar outline-isearch-open-invisible-function nil | 691 | (defvar outline-isearch-open-invisible-function nil |
| 740 | "Function called if `isearch' finishes in an invisible overlay. | 692 | "Function called if `isearch' finishes in an invisible overlay. |
| 741 | The function is called with the overlay as its only argument. | 693 | The function is called with the overlay as its only argument. |
| 742 | If nil, `show-entry' is called to reveal the invisible text.") | 694 | If nil, `outline-show-entry' is called to reveal the invisible text.") |
| 743 | 695 | ||
| 744 | (put 'outline 'reveal-toggle-invisible 'outline-reveal-toggle-invisible) | 696 | (put 'outline 'reveal-toggle-invisible 'outline-reveal-toggle-invisible) |
| 745 | (defun outline-flag-region (from to flag) | 697 | (defun outline-flag-region (from to flag) |
| @@ -763,51 +715,51 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden." | |||
| 763 | (save-excursion | 715 | (save-excursion |
| 764 | (goto-char (overlay-start o)) | 716 | (goto-char (overlay-start o)) |
| 765 | (if hidep | 717 | (if hidep |
| 766 | ;; When hiding the area again, we could just clean it up and let | 718 | ;; When hiding the area again, we could just clean it up and let |
| 767 | ;; reveal do the rest, by simply doing: | 719 | ;; reveal do the rest, by simply doing: |
| 768 | ;; (remove-overlays (overlay-start o) (overlay-end o) | 720 | ;; (remove-overlays (overlay-start o) (overlay-end o) |
| 769 | ;; 'invisible 'outline) | 721 | ;; 'invisible 'outline) |
| 770 | ;; | 722 | ;; |
| 771 | ;; That works fine as long as everything is in sync, but if the | 723 | ;; That works fine as long as everything is in sync, but if the |
| 772 | ;; structure of the document is changed while revealing parts of it, | 724 | ;; structure of the document is changed while revealing parts of it, |
| 773 | ;; the resulting behavior can be ugly. I.e. we need to make | 725 | ;; the resulting behavior can be ugly. I.e. we need to make |
| 774 | ;; sure that we hide exactly a subtree. | 726 | ;; sure that we hide exactly a subtree. |
| 775 | (progn | 727 | (progn |
| 776 | (let ((end (overlay-end o))) | 728 | (let ((end (overlay-end o))) |
| 777 | (delete-overlay o) | 729 | (delete-overlay o) |
| 778 | (while (progn | 730 | (while (progn |
| 779 | (hide-subtree) | 731 | (outline-hide-subtree) |
| 780 | (outline-next-visible-heading 1) | 732 | (outline-next-visible-heading 1) |
| 781 | (and (not (eobp)) (< (point) end)))))) | 733 | (and (not (eobp)) (< (point) end)))))) |
| 782 | 734 | ||
| 783 | ;; When revealing, we just need to reveal sublevels. If point is | 735 | ;; When revealing, we just need to reveal sublevels. If point is |
| 784 | ;; inside one of the sublevels, reveal will call us again. | 736 | ;; inside one of the sublevels, reveal will call us again. |
| 785 | ;; But we need to preserve the original overlay. | 737 | ;; But we need to preserve the original overlay. |
| 786 | (let ((o1 (copy-overlay o))) | 738 | (let ((o1 (copy-overlay o))) |
| 787 | (overlay-put o 'invisible nil) ;Show (most of) the text. | 739 | (overlay-put o 'invisible nil) ;Show (most of) the text. |
| 788 | (while (progn | 740 | (while (progn |
| 789 | (show-entry) | 741 | (outline-show-entry) |
| 790 | (show-children) | 742 | (outline-show-children) |
| 791 | ;; Normally just the above is needed. | 743 | ;; Normally just the above is needed. |
| 792 | ;; But in odd cases, the above might fail to show anything. | 744 | ;; But in odd cases, the above might fail to show anything. |
| 793 | ;; To avoid an infinite loop, we have to make sure that | 745 | ;; To avoid an infinite loop, we have to make sure that |
| 794 | ;; *something* gets shown. | 746 | ;; *something* gets shown. |
| 795 | (and (equal (overlay-start o) (overlay-start o1)) | 747 | (and (equal (overlay-start o) (overlay-start o1)) |
| 796 | (< (point) (overlay-end o)) | 748 | (< (point) (overlay-end o)) |
| 797 | (= 0 (forward-line 1))))) | 749 | (= 0 (forward-line 1))))) |
| 798 | ;; If still nothing was shown, just kill the damn thing. | 750 | ;; If still nothing was shown, just kill the damn thing. |
| 799 | (when (equal (overlay-start o) (overlay-start o1)) | 751 | (when (equal (overlay-start o) (overlay-start o1)) |
| 800 | ;; I've seen it happen at the end of buffer. | 752 | ;; I've seen it happen at the end of buffer. |
| 801 | (delete-overlay o1)))))) | 753 | (delete-overlay o1)))))) |
| 802 | 754 | ||
| 803 | ;; Function to be set as an outline-isearch-open-invisible' property | 755 | ;; Function to be set as an outline-isearch-open-invisible' property |
| 804 | ;; to the overlay that makes the outline invisible (see | 756 | ;; to the overlay that makes the outline invisible (see |
| 805 | ;; `outline-flag-region'). | 757 | ;; `outline-flag-region'). |
| 806 | (defun outline-isearch-open-invisible (_overlay) | 758 | (defun outline-isearch-open-invisible (_overlay) |
| 807 | ;; We rely on the fact that isearch places point on the matched text. | 759 | ;; We rely on the fact that isearch places point on the matched text. |
| 808 | (show-entry)) | 760 | (outline-show-entry)) |
| 809 | 761 | ||
| 810 | (defun hide-entry () | 762 | (defun outline-hide-entry () |
| 811 | "Hide the body directly following this heading." | 763 | "Hide the body directly following this heading." |
| 812 | (interactive) | 764 | (interactive) |
| 813 | (save-excursion | 765 | (save-excursion |
| @@ -815,22 +767,31 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden." | |||
| 815 | (outline-end-of-heading) | 767 | (outline-end-of-heading) |
| 816 | (outline-flag-region (point) (progn (outline-next-preface) (point)) t))) | 768 | (outline-flag-region (point) (progn (outline-next-preface) (point)) t))) |
| 817 | 769 | ||
| 818 | (defun show-entry () | 770 | (define-obsolete-function-alias |
| 771 | 'hide-entry 'outline-hide-entry "25.1") | ||
| 772 | |||
| 773 | (defun outline-show-entry () | ||
| 819 | "Show the body directly following this heading. | 774 | "Show the body directly following this heading. |
| 820 | Show the heading too, if it is currently invisible." | 775 | Show the heading too, if it is currently invisible." |
| 821 | (interactive) | 776 | (interactive) |
| 822 | (save-excursion | 777 | (save-excursion |
| 823 | (outline-back-to-heading t) | 778 | (outline-back-to-heading t) |
| 824 | (outline-flag-region (1- (point)) | 779 | (outline-flag-region (1- (point)) |
| 825 | (progn (outline-next-preface) (point)) nil))) | 780 | (progn (outline-next-preface) (point)) nil))) |
| 781 | |||
| 782 | (define-obsolete-function-alias | ||
| 783 | 'show-entry 'outline-show-entry "25.1") | ||
| 826 | 784 | ||
| 827 | (defun hide-body () | 785 | (defun outline-hide-body () |
| 828 | "Hide all body lines in buffer, leaving all headings visible." | 786 | "Hide all body lines in buffer, leaving all headings visible." |
| 829 | (interactive) | 787 | (interactive) |
| 830 | (hide-region-body (point-min) (point-max))) | 788 | (outline-hide-region-body (point-min) (point-max))) |
| 831 | 789 | ||
| 832 | (defun hide-region-body (start end) | 790 | (define-obsolete-function-alias |
| 833 | "Hide all body lines in the region, but not headings." | 791 | 'hide-body 'outline-hide-body "25.1") |
| 792 | |||
| 793 | (defun outline-hide-region-body (start end) | ||
| 794 | "Hide all body lines between START and END, but not headings." | ||
| 834 | ;; Nullify the hook to avoid repeated calls to `outline-flag-region' | 795 | ;; Nullify the hook to avoid repeated calls to `outline-flag-region' |
| 835 | ;; wasting lots of time running `lazy-lock-fontify-after-outline' | 796 | ;; wasting lots of time running `lazy-lock-fontify-after-outline' |
| 836 | ;; and run the hook finally. | 797 | ;; and run the hook finally. |
| @@ -850,30 +811,47 @@ Show the heading too, if it is currently invisible." | |||
| 850 | (outline-end-of-heading)))))) | 811 | (outline-end-of-heading)))))) |
| 851 | (run-hooks 'outline-view-change-hook)) | 812 | (run-hooks 'outline-view-change-hook)) |
| 852 | 813 | ||
| 853 | (defun show-all () | 814 | (define-obsolete-function-alias |
| 815 | 'hide-region-body 'outline-hide-region-body "25.1") | ||
| 816 | |||
| 817 | (defun outline-show-all () | ||
| 854 | "Show all of the text in the buffer." | 818 | "Show all of the text in the buffer." |
| 855 | (interactive) | 819 | (interactive) |
| 856 | (outline-flag-region (point-min) (point-max) nil)) | 820 | (outline-flag-region (point-min) (point-max) nil)) |
| 857 | 821 | ||
| 858 | (defun hide-subtree () | 822 | (define-obsolete-function-alias |
| 823 | 'show-all 'outline-show-all "25.1") | ||
| 824 | |||
| 825 | (defun outline-hide-subtree () | ||
| 859 | "Hide everything after this heading at deeper levels." | 826 | "Hide everything after this heading at deeper levels." |
| 860 | (interactive) | 827 | (interactive) |
| 861 | (outline-flag-subtree t)) | 828 | (outline-flag-subtree t)) |
| 862 | 829 | ||
| 863 | (defun hide-leaves () | 830 | (define-obsolete-function-alias |
| 831 | 'hide-subtree 'outline-hide-subtree "25.1") | ||
| 832 | |||
| 833 | (defun outline-hide-leaves () | ||
| 864 | "Hide the body after this heading and at deeper levels." | 834 | "Hide the body after this heading and at deeper levels." |
| 865 | (interactive) | 835 | (interactive) |
| 866 | (save-excursion | 836 | (save-excursion |
| 867 | (outline-back-to-heading) | 837 | (outline-back-to-heading) |
| 868 | ;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005. | 838 | ;; Turned off to fix bug reported by Otto Maddox on 22 Nov 2005. |
| 869 | ;; (outline-end-of-heading) | 839 | ;; (outline-end-of-heading) |
| 870 | (hide-region-body (point) (progn (outline-end-of-subtree) (point))))) | 840 | (outline-hide-region-body |
| 841 | (point) | ||
| 842 | (progn (outline-end-of-subtree) (point))))) | ||
| 843 | |||
| 844 | (define-obsolete-function-alias | ||
| 845 | 'hide-leaves 'outline-hide-leaves "25.1") | ||
| 871 | 846 | ||
| 872 | (defun show-subtree () | 847 | (defun outline-show-subtree () |
| 873 | "Show everything after this heading at deeper levels." | 848 | "Show everything after this heading at deeper levels." |
| 874 | (interactive) | 849 | (interactive) |
| 875 | (outline-flag-subtree nil)) | 850 | (outline-flag-subtree nil)) |
| 876 | 851 | ||
| 852 | (define-obsolete-function-alias | ||
| 853 | 'show-subtree 'outline-show-subtree "25.1") | ||
| 854 | |||
| 877 | (defun outline-show-heading () | 855 | (defun outline-show-heading () |
| 878 | "Show the current heading and move to its end." | 856 | "Show the current heading and move to its end." |
| 879 | (outline-flag-region (- (point) | 857 | (outline-flag-region (- (point) |
| @@ -884,7 +862,7 @@ Show the heading too, if it is currently invisible." | |||
| 884 | (progn (outline-end-of-heading) (point)) | 862 | (progn (outline-end-of-heading) (point)) |
| 885 | nil)) | 863 | nil)) |
| 886 | 864 | ||
| 887 | (defun hide-sublevels (levels) | 865 | (defun outline-hide-sublevels (levels) |
| 888 | "Hide everything but the top LEVELS levels of headers, in whole buffer." | 866 | "Hide everything but the top LEVELS levels of headers, in whole buffer." |
| 889 | (interactive (list | 867 | (interactive (list |
| 890 | (cond | 868 | (cond |
| @@ -922,14 +900,17 @@ Show the heading too, if it is currently invisible." | |||
| 922 | (outline-flag-region (1- (point)) (point) nil)))) | 900 | (outline-flag-region (1- (point)) (point) nil)))) |
| 923 | (run-hooks 'outline-view-change-hook)) | 901 | (run-hooks 'outline-view-change-hook)) |
| 924 | 902 | ||
| 925 | (defun hide-other () | 903 | (define-obsolete-function-alias |
| 904 | 'hide-sublevels 'outline-hide-sublevels "25.1") | ||
| 905 | |||
| 906 | (defun outline-hide-other () | ||
| 926 | "Hide everything except current body and parent and top-level headings." | 907 | "Hide everything except current body and parent and top-level headings." |
| 927 | (interactive) | 908 | (interactive) |
| 928 | (hide-sublevels 1) | 909 | (outline-hide-sublevels 1) |
| 929 | (let (outline-view-change-hook) | 910 | (let (outline-view-change-hook) |
| 930 | (save-excursion | 911 | (save-excursion |
| 931 | (outline-back-to-heading t) | 912 | (outline-back-to-heading t) |
| 932 | (show-entry) | 913 | (outline-show-entry) |
| 933 | (while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp))) | 914 | (while (condition-case nil (progn (outline-up-heading 1 t) (not (bobp))) |
| 934 | (error nil)) | 915 | (error nil)) |
| 935 | (outline-flag-region (1- (point)) | 916 | (outline-flag-region (1- (point)) |
| @@ -937,17 +918,21 @@ Show the heading too, if it is currently invisible." | |||
| 937 | nil)))) | 918 | nil)))) |
| 938 | (run-hooks 'outline-view-change-hook)) | 919 | (run-hooks 'outline-view-change-hook)) |
| 939 | 920 | ||
| 921 | (define-obsolete-function-alias | ||
| 922 | 'hide-other 'outline-hide-other "25.1") | ||
| 923 | |||
| 940 | (defun outline-toggle-children () | 924 | (defun outline-toggle-children () |
| 941 | "Show or hide the current subtree depending on its current state." | 925 | "Show or hide the current subtree depending on its current state." |
| 942 | (interactive) | 926 | (interactive) |
| 943 | (save-excursion | 927 | (save-excursion |
| 944 | (outline-back-to-heading) | 928 | (outline-back-to-heading) |
| 945 | (if (not (outline-invisible-p (line-end-position))) | 929 | (if (not (outline-invisible-p (line-end-position))) |
| 946 | (hide-subtree) | 930 | (outline-hide-subtree) |
| 947 | (show-children) | 931 | (outline-show-children) |
| 948 | (show-entry)))) | 932 | (outline-show-entry)))) |
| 949 | 933 | ||
| 950 | (defun outline-flag-subtree (flag) | 934 | (defun outline-flag-subtree (flag) |
| 935 | "Assign FLAG to the current subtree." | ||
| 951 | (save-excursion | 936 | (save-excursion |
| 952 | (outline-back-to-heading) | 937 | (outline-back-to-heading) |
| 953 | (outline-end-of-heading) | 938 | (outline-end-of-heading) |
| @@ -956,6 +941,7 @@ Show the heading too, if it is currently invisible." | |||
| 956 | flag))) | 941 | flag))) |
| 957 | 942 | ||
| 958 | (defun outline-end-of-subtree () | 943 | (defun outline-end-of-subtree () |
| 944 | "Move to the end of the current subtree." | ||
| 959 | (outline-back-to-heading) | 945 | (outline-back-to-heading) |
| 960 | (let ((first t) | 946 | (let ((first t) |
| 961 | (level (funcall outline-level))) | 947 | (level (funcall outline-level))) |
| @@ -972,12 +958,15 @@ Show the heading too, if it is currently invisible." | |||
| 972 | ;; leave blank line before heading | 958 | ;; leave blank line before heading |
| 973 | (forward-char -1)))))) | 959 | (forward-char -1)))))) |
| 974 | 960 | ||
| 975 | (defun show-branches () | 961 | (defun outline-show-branches () |
| 976 | "Show all subheadings of this heading, but not their bodies." | 962 | "Show all subheadings of this heading, but not their bodies." |
| 977 | (interactive) | 963 | (interactive) |
| 978 | (show-children 1000)) | 964 | (outline-show-children 1000)) |
| 965 | |||
| 966 | (define-obsolete-function-alias | ||
| 967 | 'show-branches 'outline-show-branches "25.1") | ||
| 979 | 968 | ||
| 980 | (defun show-children (&optional level) | 969 | (defun outline-show-children (&optional level) |
| 981 | "Show all direct subheadings of this heading. | 970 | "Show all direct subheadings of this heading. |
| 982 | Prefix arg LEVEL is how many levels below the current level should be shown. | 971 | Prefix arg LEVEL is how many levels below the current level should be shown. |
| 983 | Default is enough to cause the following heading to appear." | 972 | Default is enough to cause the following heading to appear." |
| @@ -1004,6 +993,9 @@ Default is enough to cause the following heading to appear." | |||
| 1004 | (if (eobp) (point-max) (1+ (point))))))) | 993 | (if (eobp) (point-max) (1+ (point))))))) |
| 1005 | (run-hooks 'outline-view-change-hook)) | 994 | (run-hooks 'outline-view-change-hook)) |
| 1006 | 995 | ||
| 996 | (define-obsolete-function-alias | ||
| 997 | 'show-children 'outline-show-children "25.1") | ||
| 998 | |||
| 1007 | 999 | ||
| 1008 | 1000 | ||
| 1009 | (defun outline-up-heading (arg &optional invisible-ok) | 1001 | (defun outline-up-heading (arg &optional invisible-ok) |
| @@ -1086,7 +1078,7 @@ If there is no such heading, return nil." | |||
| 1086 | (point))))) | 1078 | (point))))) |
| 1087 | 1079 | ||
| 1088 | (defun outline-headers-as-kill (beg end) | 1080 | (defun outline-headers-as-kill (beg end) |
| 1089 | "Save the visible outline headers in region at the start of the kill ring. | 1081 | "Save the visible outline headers between BEG and END to the kill ring. |
| 1090 | 1082 | ||
| 1091 | Text shown between the headers isn't copied. Two newlines are | 1083 | Text shown between the headers isn't copied. Two newlines are |
| 1092 | inserted between saved headers. Yanking the result may be a | 1084 | inserted between saved headers. Yanking the result may be a |
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 13ff439bef2..d340550a017 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el | |||
| @@ -463,9 +463,14 @@ The type returned can be `comment', `string' or `paren'." | |||
| 463 | ((nth 8 ppss) (if (nth 4 ppss) 'comment 'string)) | 463 | ((nth 8 ppss) (if (nth 4 ppss) 'comment 'string)) |
| 464 | ((nth 1 ppss) 'paren)))) | 464 | ((nth 1 ppss) 'paren)))) |
| 465 | 465 | ||
| 466 | (defsubst python-syntax-comment-or-string-p () | 466 | (defsubst python-syntax-comment-or-string-p (&optional ppss) |
| 467 | "Return non-nil if point is inside 'comment or 'string." | 467 | "Return non-nil if PPSS is inside 'comment or 'string." |
| 468 | (nth 8 (syntax-ppss))) | 468 | (nth 8 (or ppss (syntax-ppss)))) |
| 469 | |||
| 470 | (defsubst python-syntax-closing-paren-p () | ||
| 471 | "Return non-nil if char after point is a closing paren." | ||
| 472 | (= (syntax-class (syntax-after (point))) | ||
| 473 | (syntax-class (string-to-syntax ")")))) | ||
| 469 | 474 | ||
| 470 | (define-obsolete-function-alias | 475 | (define-obsolete-function-alias |
| 471 | 'python-info-ppss-context #'python-syntax-context "24.3") | 476 | 'python-info-ppss-context #'python-syntax-context "24.3") |
| @@ -704,11 +709,28 @@ It makes underscores and dots word constituent chars.") | |||
| 704 | 'python-guess-indent 'python-indent-guess-indent-offset "24.3") | 709 | 'python-guess-indent 'python-indent-guess-indent-offset "24.3") |
| 705 | 710 | ||
| 706 | (defvar python-indent-current-level 0 | 711 | (defvar python-indent-current-level 0 |
| 707 | "Current indentation level `python-indent-line-function' is using.") | 712 | "Deprecated var available for compatibility.") |
| 708 | 713 | ||
| 709 | (defvar python-indent-levels '(0) | 714 | (defvar python-indent-levels '(0) |
| 710 | "Levels of indentation available for `python-indent-line-function'. | 715 | "Deprecated var available for compatibility.") |
| 711 | Can also be `noindent' if automatic indentation can't be used.") | 716 | |
| 717 | (make-obsolete-variable | ||
| 718 | 'python-indent-current-level | ||
| 719 | "The indentation API changed to avoid global state. | ||
| 720 | The function `python-indent-calculate-levels' does not use it | ||
| 721 | anymore. If you were defadvising it and or depended on this | ||
| 722 | variable for indentation customizations, refactor your code to | ||
| 723 | work on `python-indent-calculate-indentation' instead." | ||
| 724 | "24.5") | ||
| 725 | |||
| 726 | (make-obsolete-variable | ||
| 727 | 'python-indent-levels | ||
| 728 | "The indentation API changed to avoid global state. | ||
| 729 | The function `python-indent-calculate-levels' does not use it | ||
| 730 | anymore. If you were defadvising it and or depended on this | ||
| 731 | variable for indentation customizations, refactor your code to | ||
| 732 | work on `python-indent-calculate-indentation' instead." | ||
| 733 | "24.5") | ||
| 712 | 734 | ||
| 713 | (defun python-indent-guess-indent-offset () | 735 | (defun python-indent-guess-indent-offset () |
| 714 | "Guess and set `python-indent-offset' for the current buffer." | 736 | "Guess and set `python-indent-offset' for the current buffer." |
| @@ -748,362 +770,358 @@ Can also be `noindent' if automatic indentation can't be used.") | |||
| 748 | python-indent-offset))))))) | 770 | python-indent-offset))))))) |
| 749 | 771 | ||
| 750 | (defun python-indent-context () | 772 | (defun python-indent-context () |
| 751 | "Get information on indentation context. | 773 | "Get information about the current indentation context. |
| 752 | Context information is returned with a cons with the form: | 774 | Context is returned in a cons with the form (STATUS . START). |
| 753 | (STATUS . START) | 775 | |
| 754 | 776 | STATUS can be one of the following: | |
| 755 | Where status can be any of the following symbols: | 777 | |
| 756 | 778 | keyword | |
| 757 | * after-comment: When current line might continue a comment block | 779 | ------- |
| 758 | * inside-paren: If point in between (), {} or [] | 780 | |
| 759 | * inside-string: If point is inside a string | 781 | :after-comment |
| 760 | * after-backslash: Previous line ends in a backslash | 782 | - Point is after a comment line. |
| 761 | * after-beginning-of-block: Point is after beginning of block | 783 | - START is the position of the \"#\" character. |
| 762 | * after-line: Point is after normal line | 784 | :inside-string |
| 763 | * dedenter-statement: Point is on a dedenter statement. | 785 | - Point is inside string. |
| 764 | * no-indent: Point is at beginning of buffer or other special case | 786 | - START is the position of the first quote that starts it. |
| 765 | START is the buffer position where the sexp starts." | 787 | :no-indent |
| 788 | - No possible indentation case matches. | ||
| 789 | - START is always zero. | ||
| 790 | |||
| 791 | :inside-paren | ||
| 792 | - Fallback case when point is inside paren. | ||
| 793 | - START is the first non space char position *after* the open paren. | ||
| 794 | :inside-paren-at-closing-nested-paren | ||
| 795 | - Point is on a line that contains a nested paren closer. | ||
| 796 | - START is the position of the open paren it closes. | ||
| 797 | :inside-paren-at-closing-paren | ||
| 798 | - Point is on a line that contains a paren closer. | ||
| 799 | - START is the position of the open paren. | ||
| 800 | :inside-paren-newline-start | ||
| 801 | - Point is inside a paren with items starting in their own line. | ||
| 802 | - START is the position of the open paren. | ||
| 803 | :inside-paren-newline-start-from-block | ||
| 804 | - Point is inside a paren with items starting in their own line | ||
| 805 | from a block start. | ||
| 806 | - START is the position of the open paren. | ||
| 807 | |||
| 808 | :after-backslash | ||
| 809 | - Fallback case when point is after backslash. | ||
| 810 | - START is the char after the position of the backslash. | ||
| 811 | :after-backslash-assignment-continuation | ||
| 812 | - Point is after a backslashed assignment. | ||
| 813 | - START is the char after the position of the backslash. | ||
| 814 | :after-backslash-block-continuation | ||
| 815 | - Point is after a backslashed block continuation. | ||
| 816 | - START is the char after the position of the backslash. | ||
| 817 | :after-backslash-dotted-continuation | ||
| 818 | - Point is after a backslashed dotted continuation. Previous | ||
| 819 | line must contain a dot to align with. | ||
| 820 | - START is the char after the position of the backslash. | ||
| 821 | :after-backslash-first-line | ||
| 822 | - First line following a backslashed continuation. | ||
| 823 | - START is the char after the position of the backslash. | ||
| 824 | |||
| 825 | :after-block-end | ||
| 826 | - Point is after a line containing a block ender. | ||
| 827 | - START is the position where the ender starts. | ||
| 828 | :after-block-start | ||
| 829 | - Point is after a line starting a block. | ||
| 830 | - START is the position where the block starts. | ||
| 831 | :after-line | ||
| 832 | - Point is after a simple line. | ||
| 833 | - START is the position where the previous line starts. | ||
| 834 | :at-dedenter-block-start | ||
| 835 | - Point is on a line starting a dedenter block. | ||
| 836 | - START is the position where the dedenter block starts." | ||
| 766 | (save-restriction | 837 | (save-restriction |
| 767 | (widen) | 838 | (widen) |
| 768 | (let ((ppss (save-excursion (beginning-of-line) (syntax-ppss))) | 839 | (let ((ppss (save-excursion |
| 769 | (start)) | 840 | (beginning-of-line) |
| 770 | (cons | 841 | (syntax-ppss)))) |
| 771 | (cond | 842 | (cond |
| 772 | ;; Beginning of buffer | 843 | ;; Beginning of buffer. |
| 773 | ((save-excursion | 844 | ((= (line-number-at-pos) 1) |
| 774 | (goto-char (line-beginning-position)) | 845 | (cons :no-indent 0)) |
| 775 | (bobp)) | 846 | ;; Comment continuation (maybe). |
| 776 | 'no-indent) | 847 | ((save-excursion |
| 777 | ;; Comment continuation | 848 | (when (and |
| 778 | ((save-excursion | 849 | (or |
| 779 | (when (and | 850 | (python-info-current-line-comment-p) |
| 780 | (or | 851 | (python-info-current-line-empty-p)) |
| 781 | (python-info-current-line-comment-p) | 852 | (forward-comment -1) |
| 782 | (python-info-current-line-empty-p)) | 853 | (python-info-current-line-comment-p)) |
| 783 | (progn | 854 | (cons :after-comment (point))))) |
| 784 | (forward-comment -1) | 855 | ;; Inside a string. |
| 785 | (python-info-current-line-comment-p))) | 856 | ((let ((start (python-syntax-context 'string ppss))) |
| 786 | (setq start (point)) | 857 | (when start |
| 787 | 'after-comment))) | 858 | (cons :inside-string start)))) |
| 788 | ;; Inside string | 859 | ;; Inside a paren. |
| 789 | ((setq start (python-syntax-context 'string ppss)) | 860 | ((let* ((start (python-syntax-context 'paren ppss)) |
| 790 | 'inside-string) | 861 | (starts-in-newline |
| 791 | ;; Inside a paren | 862 | (when start |
| 792 | ((setq start (python-syntax-context 'paren ppss)) | 863 | (save-excursion |
| 793 | 'inside-paren) | 864 | (goto-char start) |
| 794 | ;; After backslash | 865 | (forward-char) |
| 795 | ((setq start (when (not (or (python-syntax-context 'string ppss) | 866 | (not |
| 796 | (python-syntax-context 'comment ppss))) | 867 | (= (line-number-at-pos) |
| 797 | (let ((line-beg-pos (line-number-at-pos))) | 868 | (progn |
| 798 | (python-info-line-ends-backslash-p | 869 | (python-util-forward-comment) |
| 799 | (1- line-beg-pos))))) | 870 | (line-number-at-pos)))))))) |
| 800 | 'after-backslash) | 871 | (when start |
| 801 | ;; After beginning of block | 872 | (cond |
| 802 | ((setq start (save-excursion | 873 | ;; Current line only holds the closing paren. |
| 803 | (when (progn | 874 | ((save-excursion |
| 804 | (back-to-indentation) | 875 | (skip-syntax-forward " ") |
| 805 | (python-util-forward-comment -1) | 876 | (when (and (python-syntax-closing-paren-p) |
| 806 | (equal (char-before) ?:)) | 877 | (progn |
| 807 | ;; Move to the first block start that's not in within | 878 | (forward-char 1) |
| 808 | ;; a string, comment or paren and that's not a | 879 | (not (python-syntax-context 'paren)))) |
| 809 | ;; continuation line. | 880 | (cons :inside-paren-at-closing-paren start)))) |
| 810 | (while (and (re-search-backward | 881 | ;; Current line only holds a closing paren for nested. |
| 811 | (python-rx block-start) nil t) | 882 | ((save-excursion |
| 812 | (or | 883 | (back-to-indentation) |
| 813 | (python-syntax-context-type) | 884 | (python-syntax-closing-paren-p)) |
| 814 | (python-info-continuation-line-p)))) | 885 | (cons :inside-paren-at-closing-nested-paren start)) |
| 815 | (when (looking-at (python-rx block-start)) | 886 | ;; This line starts from a opening block in its own line. |
| 816 | (point-marker))))) | 887 | ((save-excursion |
| 817 | 'after-beginning-of-block) | 888 | (goto-char start) |
| 818 | ((when (setq start (python-info-dedenter-statement-p)) | 889 | (when (and |
| 819 | 'dedenter-statement)) | 890 | starts-in-newline |
| 820 | ;; After normal line | 891 | (save-excursion |
| 821 | ((setq start (save-excursion | 892 | (back-to-indentation) |
| 893 | (looking-at (python-rx block-start)))) | ||
| 894 | (cons | ||
| 895 | :inside-paren-newline-start-from-block start)))) | ||
| 896 | (starts-in-newline | ||
| 897 | (cons :inside-paren-newline-start start)) | ||
| 898 | ;; General case. | ||
| 899 | (t (cons :inside-paren | ||
| 900 | (save-excursion | ||
| 901 | (goto-char (1+ start)) | ||
| 902 | (skip-syntax-forward "(" 1) | ||
| 903 | (skip-syntax-forward " ") | ||
| 904 | (point)))))))) | ||
| 905 | ;; After backslash. | ||
| 906 | ((let ((start (when (not (python-syntax-comment-or-string-p ppss)) | ||
| 907 | (python-info-line-ends-backslash-p | ||
| 908 | (1- (line-number-at-pos)))))) | ||
| 909 | (when start | ||
| 910 | (cond | ||
| 911 | ;; Continuation of dotted expression. | ||
| 912 | ((save-excursion | ||
| 913 | (back-to-indentation) | ||
| 914 | (when (eq (char-after) ?\.) | ||
| 915 | ;; Move point back until it's not inside a paren. | ||
| 916 | (while (prog2 | ||
| 917 | (forward-line -1) | ||
| 918 | (and (not (bobp)) | ||
| 919 | (python-syntax-context 'paren)))) | ||
| 920 | (goto-char (line-end-position)) | ||
| 921 | (while (and (search-backward | ||
| 922 | "." (line-beginning-position) t) | ||
| 923 | (python-syntax-context-type))) | ||
| 924 | ;; Ensure previous statement has dot to align with. | ||
| 925 | (when (and (eq (char-after) ?\.) | ||
| 926 | (not (python-syntax-context-type))) | ||
| 927 | (cons :after-backslash-dotted-continuation (point)))))) | ||
| 928 | ;; Continuation of block definition. | ||
| 929 | ((let ((block-continuation-start | ||
| 930 | (python-info-block-continuation-line-p))) | ||
| 931 | (when block-continuation-start | ||
| 932 | (save-excursion | ||
| 933 | (goto-char block-continuation-start) | ||
| 934 | (re-search-forward | ||
| 935 | (python-rx block-start (* space)) | ||
| 936 | (line-end-position) t) | ||
| 937 | (cons :after-backslash-block-continuation (point)))))) | ||
| 938 | ;; Continuation of assignment. | ||
| 939 | ((let ((assignment-continuation-start | ||
| 940 | (python-info-assignment-continuation-line-p))) | ||
| 941 | (when assignment-continuation-start | ||
| 942 | (save-excursion | ||
| 943 | (goto-char assignment-continuation-start) | ||
| 944 | (cons :after-backslash-assignment-continuation (point)))))) | ||
| 945 | ;; First line after backslash continuation start. | ||
| 946 | ((save-excursion | ||
| 947 | (goto-char start) | ||
| 948 | (when (or (= (line-number-at-pos) 1) | ||
| 949 | (not (python-info-beginning-of-backslash | ||
| 950 | (1- (line-number-at-pos))))) | ||
| 951 | (cons :after-backslash-first-line start)))) | ||
| 952 | ;; General case. | ||
| 953 | (t (cons :after-backslash start)))))) | ||
| 954 | ;; After beginning of block. | ||
| 955 | ((let ((start (save-excursion | ||
| 956 | (back-to-indentation) | ||
| 957 | (python-util-forward-comment -1) | ||
| 958 | (when (equal (char-before) ?:) | ||
| 959 | (python-nav-beginning-of-block))))) | ||
| 960 | (when start | ||
| 961 | (cons :after-block-start start)))) | ||
| 962 | ;; At dedenter statement. | ||
| 963 | ((let ((start (python-info-dedenter-statement-p))) | ||
| 964 | (when start | ||
| 965 | (cons :at-dedenter-block-start start)))) | ||
| 966 | ;; After normal line. | ||
| 967 | ((let ((start (save-excursion | ||
| 822 | (back-to-indentation) | 968 | (back-to-indentation) |
| 823 | (skip-chars-backward (rx (or whitespace ?\n))) | 969 | (skip-chars-backward " \t\n") |
| 824 | (python-nav-beginning-of-statement) | 970 | (python-nav-beginning-of-statement) |
| 825 | (point-marker))) | 971 | (point)))) |
| 826 | 'after-line) | 972 | (when start |
| 827 | ;; Do not indent | 973 | (if (save-excursion |
| 828 | (t 'no-indent)) | 974 | (python-util-forward-comment -1) |
| 829 | start)))) | 975 | (python-nav-beginning-of-statement) |
| 830 | 976 | (looking-at (python-rx block-ender))) | |
| 831 | (defun python-indent-calculate-indentation () | 977 | (cons :after-block-end start) |
| 832 | "Calculate correct indentation offset for the current line. | 978 | (cons :after-line start))))) |
| 833 | Returns `noindent' if the indentation does not depend on Python syntax, | 979 | ;; Default case: do not indent. |
| 834 | such as in strings." | 980 | (t (cons :no-indent 0)))))) |
| 835 | (let* ((indentation-context (python-indent-context)) | 981 | |
| 836 | (context-status (car indentation-context)) | 982 | (defun python-indent--calculate-indentation () |
| 837 | (context-start (cdr indentation-context))) | 983 | "Internal implementation of `python-indent-calculate-indentation'. |
| 838 | (save-restriction | 984 | May return an integer for the maximum possible indentation at |
| 839 | (widen) | 985 | current context or a list of integers. The latter case is only |
| 840 | (save-excursion | 986 | happening for :at-dedenter-block-start context since the |
| 841 | (pcase context-status | 987 | possibilities can be narrowed to especific indentation points." |
| 842 | (`no-indent 0) | 988 | (save-restriction |
| 843 | (`after-comment | 989 | (widen) |
| 844 | (goto-char context-start) | 990 | (save-excursion |
| 845 | (current-indentation)) | 991 | (pcase (python-indent-context) |
| 846 | ;; When point is after beginning of block just add one level | 992 | (`(:no-indent . ,_) 0) |
| 847 | ;; of indentation relative to the context-start | 993 | (`(,(or :after-line |
| 848 | (`after-beginning-of-block | 994 | :after-comment |
| 849 | (goto-char context-start) | 995 | :inside-string |
| 850 | (+ (current-indentation) python-indent-offset)) | 996 | :after-backslash |
| 851 | ;; When after a simple line just use previous line | 997 | :inside-paren-at-closing-paren |
| 852 | ;; indentation. | 998 | :inside-paren-at-closing-nested-paren) . ,start) |
| 853 | (`after-line | 999 | ;; Copy previous indentation. |
| 854 | (let* ((pair (save-excursion | 1000 | (goto-char start) |
| 855 | (goto-char context-start) | 1001 | (current-indentation)) |
| 856 | (cons | 1002 | (`(,(or :after-block-start |
| 857 | (current-indentation) | 1003 | :after-backslash-first-line |
| 858 | (python-info-beginning-of-block-p)))) | 1004 | :inside-paren-newline-start) . ,start) |
| 859 | (context-indentation (car pair)) | 1005 | ;; Add one indentation level. |
| 860 | ;; TODO: Separate block enders into its own case. | 1006 | (goto-char start) |
| 861 | (adjustment | 1007 | (+ (current-indentation) python-indent-offset)) |
| 862 | (if (save-excursion | 1008 | (`(,(or :inside-paren |
| 863 | (python-util-forward-comment -1) | 1009 | :after-backslash-block-continuation |
| 864 | (python-nav-beginning-of-statement) | 1010 | :after-backslash-assignment-continuation |
| 865 | (looking-at (python-rx block-ender))) | 1011 | :after-backslash-dotted-continuation) . ,start) |
| 866 | python-indent-offset | 1012 | ;; Use the column given by the context. |
| 867 | 0))) | 1013 | (goto-char start) |
| 868 | (- context-indentation adjustment))) | 1014 | (current-column)) |
| 869 | ;; When point is on a dedenter statement, search for the | 1015 | (`(:after-block-end . ,start) |
| 870 | ;; opening block that corresponds to it and use its | 1016 | ;; Subtract one indentation level. |
| 871 | ;; indentation. If no opening block is found just remove | 1017 | (goto-char start) |
| 872 | ;; indentation as this is an invalid python file. | 1018 | (- (current-indentation) python-indent-offset)) |
| 873 | (`dedenter-statement | 1019 | (`(:at-dedenter-block-start . ,_) |
| 874 | (let ((block-start-point | 1020 | ;; List all possible indentation levels from opening blocks. |
| 875 | (python-info-dedenter-opening-block-position))) | 1021 | (let ((opening-block-start-points |
| 876 | (save-excursion | 1022 | (python-info-dedenter-opening-block-positions))) |
| 877 | (if (not block-start-point) | 1023 | (if (not opening-block-start-points) |
| 878 | 0 | 1024 | 0 ; if not found default to first column |
| 879 | (goto-char block-start-point) | 1025 | (mapcar (lambda (pos) |
| 880 | (current-indentation))))) | 1026 | (save-excursion |
| 881 | ;; When inside of a string, do nothing. just use the current | 1027 | (goto-char pos) |
| 882 | ;; indentation. XXX: perhaps it would be a good idea to | 1028 | (current-indentation))) |
| 883 | ;; invoke standard text indentation here | 1029 | opening-block-start-points)))) |
| 884 | (`inside-string 'noindent) | 1030 | (`(,(or :inside-paren-newline-start-from-block) . ,start) |
| 885 | ;; After backslash we have several possibilities. | 1031 | ;; Add two indentation levels to make the suite stand out. |
| 886 | (`after-backslash | 1032 | (goto-char start) |
| 887 | (cond | 1033 | (+ (current-indentation) (* python-indent-offset 2))))))) |
| 888 | ;; Check if current line is a dot continuation. For this | 1034 | |
| 889 | ;; the current line must start with a dot and previous | 1035 | (defun python-indent--calculate-levels (indentation) |
| 890 | ;; line must contain a dot too. | 1036 | "Calculate levels list given INDENTATION. |
| 891 | ((save-excursion | 1037 | Argument INDENTATION can either be an integer or a list of |
| 892 | (back-to-indentation) | 1038 | integers. Levels are returned in ascending order, and in the |
| 893 | (when (looking-at "\\.") | 1039 | case INDENTATION is a list, this order is enforced." |
| 894 | ;; If after moving one line back point is inside a paren it | 1040 | (if (listp indentation) |
| 895 | ;; needs to move back until it's not anymore | 1041 | (sort (copy-sequence indentation) #'<) |
| 896 | (while (prog2 | 1042 | (let* ((remainder (% indentation python-indent-offset)) |
| 897 | (forward-line -1) | 1043 | (steps (/ (- indentation remainder) python-indent-offset)) |
| 898 | (and (not (bobp)) | 1044 | (levels (mapcar (lambda (step) |
| 899 | (python-syntax-context 'paren)))) | 1045 | (* python-indent-offset step)) |
| 900 | (goto-char (line-end-position)) | 1046 | (number-sequence steps 0 -1)))) |
| 901 | (while (and (re-search-backward | 1047 | (reverse |
| 902 | "\\." (line-beginning-position) t) | 1048 | (if (not (zerop remainder)) |
| 903 | (python-syntax-context-type))) | 1049 | (cons indentation levels) |
| 904 | (if (and (looking-at "\\.") | 1050 | levels))))) |
| 905 | (not (python-syntax-context-type))) | 1051 | |
| 906 | ;; The indentation is the same column of the | 1052 | (defun python-indent--previous-level (levels indentation) |
| 907 | ;; first matching dot that's not inside a | 1053 | "Return previous level from LEVELS relative to INDENTATION." |
| 908 | ;; comment, a string or a paren | 1054 | (let* ((levels (sort (copy-sequence levels) #'>)) |
| 909 | (current-column) | 1055 | (default (car levels))) |
| 910 | ;; No dot found on previous line, just add another | 1056 | (catch 'return |
| 911 | ;; indentation level. | 1057 | (dolist (level levels) |
| 912 | (+ (current-indentation) python-indent-offset))))) | 1058 | (when (funcall #'< level indentation) |
| 913 | ;; Check if prev line is a block continuation | 1059 | (throw 'return level))) |
| 914 | ((let ((block-continuation-start | 1060 | default))) |
| 915 | (python-info-block-continuation-line-p))) | 1061 | |
| 916 | (when block-continuation-start | 1062 | (defun python-indent-calculate-indentation (&optional previous) |
| 917 | ;; If block-continuation-start is set jump to that | 1063 | "Calculate indentation. |
| 918 | ;; marker and use first column after the block start | 1064 | Get indentation of PREVIOUS level when argument is non-nil. |
| 919 | ;; as indentation value. | 1065 | Return the max level of the cycle when indentation reaches the |
| 920 | (goto-char block-continuation-start) | 1066 | minimum." |
| 921 | (re-search-forward | 1067 | (let* ((indentation (python-indent--calculate-indentation)) |
| 922 | (python-rx block-start (* space)) | 1068 | (levels (python-indent--calculate-levels indentation))) |
| 923 | (line-end-position) t) | 1069 | (if previous |
| 924 | (current-column)))) | 1070 | (python-indent--previous-level levels (current-indentation)) |
| 925 | ;; Check if current line is an assignment continuation | 1071 | (apply #'max levels)))) |
| 926 | ((let ((assignment-continuation-start | 1072 | |
| 927 | (python-info-assignment-continuation-line-p))) | 1073 | (defun python-indent-line (&optional previous) |
| 928 | (when assignment-continuation-start | ||
| 929 | ;; If assignment-continuation is set jump to that | ||
| 930 | ;; marker and use first column after the assignment | ||
| 931 | ;; operator as indentation value. | ||
| 932 | (goto-char assignment-continuation-start) | ||
| 933 | (current-column)))) | ||
| 934 | (t | ||
| 935 | (forward-line -1) | ||
| 936 | (goto-char (python-info-beginning-of-backslash)) | ||
| 937 | (if (save-excursion | ||
| 938 | (and | ||
| 939 | (forward-line -1) | ||
| 940 | (goto-char | ||
| 941 | (or (python-info-beginning-of-backslash) (point))) | ||
| 942 | (python-info-line-ends-backslash-p))) | ||
| 943 | ;; The two previous lines ended in a backslash so we must | ||
| 944 | ;; respect previous line indentation. | ||
| 945 | (current-indentation) | ||
| 946 | ;; What happens here is that we are dealing with the second | ||
| 947 | ;; line of a backslash continuation, in that case we just going | ||
| 948 | ;; to add one indentation level. | ||
| 949 | (+ (current-indentation) python-indent-offset))))) | ||
| 950 | ;; When inside a paren there's a need to handle nesting | ||
| 951 | ;; correctly | ||
| 952 | (`inside-paren | ||
| 953 | (cond | ||
| 954 | ;; If current line closes the outermost open paren use the | ||
| 955 | ;; current indentation of the context-start line. | ||
| 956 | ((save-excursion | ||
| 957 | (skip-syntax-forward "\s" (line-end-position)) | ||
| 958 | (when (and (looking-at (regexp-opt '(")" "]" "}"))) | ||
| 959 | (progn | ||
| 960 | (forward-char 1) | ||
| 961 | (not (python-syntax-context 'paren)))) | ||
| 962 | (goto-char context-start) | ||
| 963 | (current-indentation)))) | ||
| 964 | ;; If open paren is contained on a line by itself add another | ||
| 965 | ;; indentation level, else look for the first word after the | ||
| 966 | ;; opening paren and use it's column position as indentation | ||
| 967 | ;; level. | ||
| 968 | ((let* ((content-starts-in-newline) | ||
| 969 | (indent | ||
| 970 | (save-excursion | ||
| 971 | (if (setq content-starts-in-newline | ||
| 972 | (progn | ||
| 973 | (goto-char context-start) | ||
| 974 | (forward-char) | ||
| 975 | (save-restriction | ||
| 976 | (narrow-to-region | ||
| 977 | (line-beginning-position) | ||
| 978 | (line-end-position)) | ||
| 979 | (python-util-forward-comment)) | ||
| 980 | (looking-at "$"))) | ||
| 981 | (+ (current-indentation) python-indent-offset) | ||
| 982 | (current-column))))) | ||
| 983 | ;; Adjustments | ||
| 984 | (cond | ||
| 985 | ;; If current line closes a nested open paren de-indent one | ||
| 986 | ;; level. | ||
| 987 | ((progn | ||
| 988 | (back-to-indentation) | ||
| 989 | (looking-at (regexp-opt '(")" "]" "}")))) | ||
| 990 | (- indent python-indent-offset)) | ||
| 991 | ;; If the line of the opening paren that wraps the current | ||
| 992 | ;; line starts a block add another level of indentation to | ||
| 993 | ;; follow new pep8 recommendation. See: http://ur1.ca/5rojx | ||
| 994 | ((save-excursion | ||
| 995 | (when (and content-starts-in-newline | ||
| 996 | (progn | ||
| 997 | (goto-char context-start) | ||
| 998 | (back-to-indentation) | ||
| 999 | (looking-at (python-rx block-start)))) | ||
| 1000 | (+ indent python-indent-offset)))) | ||
| 1001 | (t indent))))))))))) | ||
| 1002 | |||
| 1003 | (defun python-indent-calculate-levels () | ||
| 1004 | "Calculate `python-indent-levels' and reset `python-indent-current-level'." | ||
| 1005 | (if (or (python-info-continuation-line-p) | ||
| 1006 | (not (python-info-dedenter-statement-p))) | ||
| 1007 | ;; XXX: This asks for a refactor. Even if point is on a | ||
| 1008 | ;; dedenter statement, it could be multiline and in that case | ||
| 1009 | ;; the continuation lines should be indented with normal rules. | ||
| 1010 | (let* ((indentation (python-indent-calculate-indentation))) | ||
| 1011 | (if (not (numberp indentation)) | ||
| 1012 | (setq python-indent-levels indentation) | ||
| 1013 | (let* ((remainder (% indentation python-indent-offset)) | ||
| 1014 | (steps (/ (- indentation remainder) python-indent-offset))) | ||
| 1015 | (setq python-indent-levels (list 0)) | ||
| 1016 | (dotimes (step steps) | ||
| 1017 | (push (* python-indent-offset (1+ step)) python-indent-levels)) | ||
| 1018 | (when (not (eq 0 remainder)) | ||
| 1019 | (push (+ (* python-indent-offset steps) remainder) | ||
| 1020 | python-indent-levels))))) | ||
| 1021 | (setq python-indent-levels | ||
| 1022 | (or | ||
| 1023 | (mapcar (lambda (pos) | ||
| 1024 | (save-excursion | ||
| 1025 | (goto-char pos) | ||
| 1026 | (current-indentation))) | ||
| 1027 | (python-info-dedenter-opening-block-positions)) | ||
| 1028 | (list 0)))) | ||
| 1029 | (when (listp python-indent-levels) | ||
| 1030 | (setq python-indent-current-level (1- (length python-indent-levels)) | ||
| 1031 | python-indent-levels (nreverse python-indent-levels)))) | ||
| 1032 | |||
| 1033 | (defun python-indent-toggle-levels () | ||
| 1034 | "Toggle `python-indent-current-level' over `python-indent-levels'." | ||
| 1035 | (setq python-indent-current-level (1- python-indent-current-level)) | ||
| 1036 | (when (< python-indent-current-level 0) | ||
| 1037 | (setq python-indent-current-level (1- (length python-indent-levels))))) | ||
| 1038 | |||
| 1039 | (defun python-indent-line (&optional force-toggle) | ||
| 1040 | "Internal implementation of `python-indent-line-function'. | 1074 | "Internal implementation of `python-indent-line-function'. |
| 1041 | Uses the offset calculated in | 1075 | Use the PREVIOUS level when argument is non-nil, otherwise indent |
| 1042 | `python-indent-calculate-indentation' and available levels | 1076 | to the maxium available level. When indentation is the minimum |
| 1043 | indicated by the variable `python-indent-levels' to set the | 1077 | possible and PREVIOUS is non-nil, cycle back to the maximum |
| 1044 | current indentation. | 1078 | level." |
| 1079 | (let ((follow-indentation-p | ||
| 1080 | ;; Check if point is within indentation. | ||
| 1081 | (and (<= (line-beginning-position) (point)) | ||
| 1082 | (>= (+ (line-beginning-position) | ||
| 1083 | (current-indentation)) | ||
| 1084 | (point))))) | ||
| 1085 | (save-excursion | ||
| 1086 | (indent-line-to | ||
| 1087 | (python-indent-calculate-indentation previous)) | ||
| 1088 | (python-info-dedenter-opening-block-message)) | ||
| 1089 | (when follow-indentation-p | ||
| 1090 | (back-to-indentation)))) | ||
| 1045 | 1091 | ||
| 1046 | When the variable `last-command' is equal to one of the symbols | 1092 | (defun python-indent-calculate-levels () |
| 1047 | inside `python-indent-trigger-commands' or FORCE-TOGGLE is | 1093 | "Return possible indentation levels." |
| 1048 | non-nil it cycles levels indicated in the variable | 1094 | (python-indent--calculate-levels |
| 1049 | `python-indent-levels' by setting the current level in the | 1095 | (python-indent--calculate-indentation))) |
| 1050 | variable `python-indent-current-level'. | ||
| 1051 | |||
| 1052 | When the variable `last-command' is not equal to one of the | ||
| 1053 | symbols inside `python-indent-trigger-commands' and FORCE-TOGGLE | ||
| 1054 | is nil it calculates possible indentation levels and saves them | ||
| 1055 | in the variable `python-indent-levels'. Afterwards it sets the | ||
| 1056 | variable `python-indent-current-level' correctly so offset is | ||
| 1057 | equal to | ||
| 1058 | (nth python-indent-current-level python-indent-levels)" | ||
| 1059 | (if (and (or (and (memq this-command python-indent-trigger-commands) | ||
| 1060 | (eq last-command this-command)) | ||
| 1061 | force-toggle) | ||
| 1062 | (not (equal python-indent-levels '(0)))) | ||
| 1063 | (if (listp python-indent-levels) | ||
| 1064 | (python-indent-toggle-levels)) | ||
| 1065 | (python-indent-calculate-levels)) | ||
| 1066 | (if (eq python-indent-levels 'noindent) | ||
| 1067 | python-indent-levels | ||
| 1068 | (let* ((starting-pos (point-marker)) | ||
| 1069 | (indent-ending-position | ||
| 1070 | (+ (line-beginning-position) (current-indentation))) | ||
| 1071 | (follow-indentation-p | ||
| 1072 | (or (bolp) | ||
| 1073 | (and (<= (line-beginning-position) starting-pos) | ||
| 1074 | (>= indent-ending-position starting-pos)))) | ||
| 1075 | (next-indent (nth python-indent-current-level python-indent-levels))) | ||
| 1076 | (unless (= next-indent (current-indentation)) | ||
| 1077 | (beginning-of-line) | ||
| 1078 | (delete-horizontal-space) | ||
| 1079 | (indent-to next-indent) | ||
| 1080 | (goto-char starting-pos)) | ||
| 1081 | (and follow-indentation-p (back-to-indentation))) | ||
| 1082 | (python-info-dedenter-opening-block-message))) | ||
| 1083 | 1096 | ||
| 1084 | (defun python-indent-line-function () | 1097 | (defun python-indent-line-function () |
| 1085 | "`indent-line-function' for Python mode. | 1098 | "`indent-line-function' for Python mode. |
| 1086 | See `python-indent-line' for details." | 1099 | When the variable `last-command' is equal to one of the symbols |
| 1087 | (python-indent-line)) | 1100 | inside `python-indent-trigger-commands' it cycles possible |
| 1101 | indentation levels from right to left." | ||
| 1102 | (python-indent-line | ||
| 1103 | (and (memq this-command python-indent-trigger-commands) | ||
| 1104 | (eq last-command this-command)))) | ||
| 1088 | 1105 | ||
| 1089 | (defun python-indent-dedent-line () | 1106 | (defun python-indent-dedent-line () |
| 1090 | "De-indent current line." | 1107 | "De-indent current line." |
| 1091 | (interactive "*") | 1108 | (interactive "*") |
| 1092 | (when (and (not (python-syntax-comment-or-string-p)) | 1109 | (when (and (not (bolp)) |
| 1093 | (<= (point) (save-excursion | 1110 | (not (python-syntax-comment-or-string-p)) |
| 1094 | (back-to-indentation) | 1111 | (= (+ (line-beginning-position) |
| 1095 | (point))) | 1112 | (current-indentation)) |
| 1096 | (> (current-column) 0)) | 1113 | (point))) |
| 1097 | (python-indent-line t) | 1114 | (python-indent-line t) |
| 1098 | t)) | 1115 | t)) |
| 1099 | 1116 | ||
| 1100 | (defun python-indent-dedent-line-backspace (arg) | 1117 | (defun python-indent-dedent-line-backspace (arg) |
| 1101 | "De-indent current line. | 1118 | "De-indent current line. |
| 1102 | Argument ARG is passed to `backward-delete-char-untabify' when | 1119 | Argument ARG is passed to `backward-delete-char-untabify' when |
| 1103 | point is not in between the indentation." | 1120 | point is not in between the indentation." |
| 1104 | (interactive "*p") | 1121 | (interactive "*p") |
| 1105 | (when (not (python-indent-dedent-line)) | 1122 | (unless (python-indent-dedent-line) |
| 1106 | (backward-delete-char-untabify arg))) | 1123 | (backward-delete-char-untabify arg))) |
| 1124 | |||
| 1107 | (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede) | 1125 | (put 'python-indent-dedent-line-backspace 'delete-selection 'supersede) |
| 1108 | 1126 | ||
| 1109 | (defun python-indent-region (start end) | 1127 | (defun python-indent-region (start end) |
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index e8b6bf5adf7..135f945dbb9 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | ;;; sh-script.el --- shell-script editing commands for Emacs -*- lexical-binding:t -*- | 1 | ;;; sh-script.el --- shell-script editing commands for Emacs -*- lexical-binding:t -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation, | 3 | ;; Copyright (C) 1993-1997, 1999, 2001-2015 Free Software Foundation, Inc. |
| 4 | ;; Inc. | ||
| 5 | 4 | ||
| 6 | ;; Author: Daniel Pfeiffer <occitan@esperanto.org> | 5 | ;; Author: Daniel Pfeiffer <occitan@esperanto.org> |
| 7 | ;; Version: 2.0f | 6 | ;; Version: 2.0f |
| @@ -1599,7 +1598,6 @@ buffer indents as it currently is indented. | |||
| 1599 | 1598 | ||
| 1600 | 1599 | ||
| 1601 | \\[backward-delete-char-untabify] Delete backward one position, even if it was a tab. | 1600 | \\[backward-delete-char-untabify] Delete backward one position, even if it was a tab. |
| 1602 | \\[newline-and-indent] Delete unquoted space and indent new line same as this one. | ||
| 1603 | \\[sh-end-of-command] Go to end of successive commands. | 1601 | \\[sh-end-of-command] Go to end of successive commands. |
| 1604 | \\[sh-beginning-of-command] Go to beginning of successive commands. | 1602 | \\[sh-beginning-of-command] Go to beginning of successive commands. |
| 1605 | \\[sh-set-shell] Set this buffer's shell, and maybe its magic number. | 1603 | \\[sh-set-shell] Set this buffer's shell, and maybe its magic number. |
| @@ -2501,7 +2499,8 @@ Lines containing only comments are considered empty." | |||
| 2501 | (current-column))) | 2499 | (current-column))) |
| 2502 | current) | 2500 | current) |
| 2503 | (save-excursion | 2501 | (save-excursion |
| 2504 | (indent-to (if (eq this-command 'newline-and-indent) | 2502 | (indent-to (if (or (eq this-command 'newline-and-indent) |
| 2503 | (and electric-indent-mode (eq this-command 'newline))) | ||
| 2505 | previous | 2504 | previous |
| 2506 | (if (< (current-column) | 2505 | (if (< (current-column) |
| 2507 | (setq current (progn (back-to-indentation) | 2506 | (setq current (progn (back-to-indentation) |
diff --git a/lisp/subr.el b/lisp/subr.el index 05345853edc..68cd230c5e2 100644 --- a/lisp/subr.el +++ b/lisp/subr.el | |||
| @@ -1082,7 +1082,12 @@ The return value is a positive integer." | |||
| 1082 | ;;;; Extracting fields of the positions in an event. | 1082 | ;;;; Extracting fields of the positions in an event. |
| 1083 | 1083 | ||
| 1084 | (defun posnp (obj) | 1084 | (defun posnp (obj) |
| 1085 | "Return non-nil if OBJ appears to be a valid `posn' object." | 1085 | "Return non-nil if OBJ appears to be a valid `posn' object specifying a window. |
| 1086 | If OBJ is a valid `posn' object, but specifies a frame rather | ||
| 1087 | than a window, return nil." | ||
| 1088 | ;; FIXME: Correct the behavior of this function so that all valid | ||
| 1089 | ;; `posn' objects are recognized, after updating other code that | ||
| 1090 | ;; depends on its present behavior. | ||
| 1086 | (and (windowp (car-safe obj)) | 1091 | (and (windowp (car-safe obj)) |
| 1087 | (atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS. | 1092 | (atom (car-safe (setq obj (cdr obj)))) ;AREA-OR-POS. |
| 1088 | (integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET. | 1093 | (integerp (car-safe (car-safe (setq obj (cdr obj))))) ;XOFFSET. |
| @@ -1142,24 +1147,28 @@ For a scroll-bar event, the result column is 0, and the row | |||
| 1142 | corresponds to the vertical position of the click in the scroll bar. | 1147 | corresponds to the vertical position of the click in the scroll bar. |
| 1143 | POSITION should be a list of the form returned by the `event-start' | 1148 | POSITION should be a list of the form returned by the `event-start' |
| 1144 | and `event-end' functions." | 1149 | and `event-end' functions." |
| 1145 | (let* ((pair (posn-x-y position)) | 1150 | (let* ((pair (posn-x-y position)) |
| 1146 | (window (posn-window position)) | 1151 | (frame-or-window (posn-window position)) |
| 1147 | (area (posn-area position))) | 1152 | (frame (if (framep frame-or-window) |
| 1153 | frame-or-window | ||
| 1154 | (window-frame frame-or-window))) | ||
| 1155 | (window (when (windowp frame-or-window) frame-or-window)) | ||
| 1156 | (area (posn-area position))) | ||
| 1148 | (cond | 1157 | (cond |
| 1149 | ((null window) | 1158 | ((null frame-or-window) |
| 1150 | '(0 . 0)) | 1159 | '(0 . 0)) |
| 1151 | ((eq area 'vertical-scroll-bar) | 1160 | ((eq area 'vertical-scroll-bar) |
| 1152 | (cons 0 (scroll-bar-scale pair (1- (window-height window))))) | 1161 | (cons 0 (scroll-bar-scale pair (1- (window-height window))))) |
| 1153 | ((eq area 'horizontal-scroll-bar) | 1162 | ((eq area 'horizontal-scroll-bar) |
| 1154 | (cons (scroll-bar-scale pair (window-width window)) 0)) | 1163 | (cons (scroll-bar-scale pair (window-width window)) 0)) |
| 1155 | (t | 1164 | (t |
| 1156 | (let* ((frame (if (framep window) window (window-frame window))) | 1165 | ;; FIXME: This should take line-spacing properties on |
| 1157 | ;; FIXME: This should take line-spacing properties on | 1166 | ;; newlines into account. |
| 1158 | ;; newlines into account. | 1167 | (let* ((spacing (when (display-graphic-p frame) |
| 1159 | (spacing (when (display-graphic-p frame) | 1168 | (or (with-current-buffer |
| 1160 | (or (with-current-buffer (window-buffer window) | 1169 | (window-buffer (frame-selected-window frame)) |
| 1161 | line-spacing) | 1170 | line-spacing) |
| 1162 | (frame-parameter frame 'line-spacing))))) | 1171 | (frame-parameter frame 'line-spacing))))) |
| 1163 | (cond ((floatp spacing) | 1172 | (cond ((floatp spacing) |
| 1164 | (setq spacing (truncate (* spacing | 1173 | (setq spacing (truncate (* spacing |
| 1165 | (frame-char-height frame))))) | 1174 | (frame-char-height frame))))) |
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 1ee54515bea..6c7f7553f82 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el | |||
| @@ -50,9 +50,6 @@ | |||
| 50 | ;; | 50 | ;; |
| 51 | ;; o chmod should understand "a+x,og-w". | 51 | ;; o chmod should understand "a+x,og-w". |
| 52 | ;; | 52 | ;; |
| 53 | ;; o It's not possible to add a NEW file to a tar archive; not that | ||
| 54 | ;; important, but still... | ||
| 55 | ;; | ||
| 56 | ;; o The code is less efficient that it could be - in a lot of places, I | 53 | ;; o The code is less efficient that it could be - in a lot of places, I |
| 57 | ;; pull a 512-character string out of the buffer and parse it, when I could | 54 | ;; pull a 512-character string out of the buffer and parse it, when I could |
| 58 | ;; be parsing it in place, not garbaging a string. Should redo that. | 55 | ;; be parsing it in place, not garbaging a string. Should redo that. |
| @@ -369,6 +366,80 @@ write-date, checksum, link-type, and link-name." | |||
| 369 | string) | 366 | string) |
| 370 | (tar-parse-octal-integer string)) | 367 | (tar-parse-octal-integer string)) |
| 371 | 368 | ||
| 369 | (defun tar-new-regular-file-header (filename &optional size time) | ||
| 370 | "Return a Tar header for a regular file. | ||
| 371 | The header will lack a proper checksum; use `tar-header-block-checksum' | ||
| 372 | to compute one, or request `tar-header-serialize' to do that. | ||
| 373 | |||
| 374 | Other tar-mode facilities may also require the data-start header | ||
| 375 | field to be set to a valid value. | ||
| 376 | |||
| 377 | If SIZE is not given or nil, it defaults to 0. | ||
| 378 | If TIME is not given or nil, assume now." | ||
| 379 | (make-tar-header | ||
| 380 | nil | ||
| 381 | filename | ||
| 382 | #o644 0 0 (or size 0) | ||
| 383 | (or time (current-time)) | ||
| 384 | nil ; checksum | ||
| 385 | nil nil | ||
| 386 | nil nil nil nil nil)) | ||
| 387 | |||
| 388 | (defun tar--pad-to (pos) | ||
| 389 | (make-string (+ pos (- (point)) (point-min)) 0)) | ||
| 390 | |||
| 391 | (defun tar--put-at (pos val &optional fmt mask) | ||
| 392 | (when val | ||
| 393 | (insert (tar--pad-to pos) | ||
| 394 | (if fmt | ||
| 395 | (format fmt (if mask (logand mask val) val)) | ||
| 396 | val)))) | ||
| 397 | |||
| 398 | (defun tar-header-serialize (header &optional update-checksum) | ||
| 399 | "Return the serialization of a Tar HEADER as a string. | ||
| 400 | This function calls `tar-header-block-check-checksum' to ensure the | ||
| 401 | checksum is correct. | ||
| 402 | |||
| 403 | If UPDATE-CHECKSUM is non-nil, update HEADER with the newly-computed | ||
| 404 | checksum before doing the check." | ||
| 405 | (with-temp-buffer | ||
| 406 | (set-buffer-multibyte nil) | ||
| 407 | (let ((encoded-name | ||
| 408 | (encode-coding-string (tar-header-name header) | ||
| 409 | tar-file-name-coding-system))) | ||
| 410 | (unless (< (length encoded-name) 99) | ||
| 411 | ;; FIXME: Implement it. | ||
| 412 | (error "Long file name support is not implemented")) | ||
| 413 | (insert encoded-name)) | ||
| 414 | (tar--put-at tar-mode-offset (tar-header-mode header) "%6o\0 " #o777777) | ||
| 415 | (tar--put-at tar-uid-offset (tar-header-uid header) "%6o\0 " #o777777) | ||
| 416 | (tar--put-at tar-gid-offset (tar-header-gid header) "%6o\0 " #o777777) | ||
| 417 | (tar--put-at tar-size-offset (tar-header-size header) "%11o ") | ||
| 418 | (insert (tar--pad-to tar-time-offset) | ||
| 419 | (tar-octal-time (tar-header-date header)) | ||
| 420 | " ") | ||
| 421 | ;; Omit tar-header-checksum (tar-chk-offset) for now. | ||
| 422 | (tar--put-at tar-linkp-offset (tar-header-link-type header)) | ||
| 423 | (tar--put-at tar-link-offset (tar-header-link-name header)) | ||
| 424 | (when (tar-header-magic header) | ||
| 425 | (tar--put-at tar-magic-offset (tar-header-magic header)) | ||
| 426 | (tar--put-at tar-uname-offset (tar-header-uname header)) | ||
| 427 | (tar--put-at tar-gname-offset (tar-header-gname header)) | ||
| 428 | (tar--put-at tar-dmaj-offset (tar-header-dmaj header) "%7o\0" #o7777777) | ||
| 429 | (tar--put-at tar-dmin-offset (tar-header-dmin header) "%7o\0" #o7777777)) | ||
| 430 | (tar--put-at 512 "") | ||
| 431 | (let ((ck (tar-header-block-checksum (buffer-string)))) | ||
| 432 | (goto-char (+ (point-min) tar-chk-offset)) | ||
| 433 | (delete-char 8) | ||
| 434 | (insert (format "%6o\0 " ck)) | ||
| 435 | (when update-checksum | ||
| 436 | (setf (tar-header-checksum header) ck)) | ||
| 437 | (tar-header-block-check-checksum (buffer-string) | ||
| 438 | (tar-header-checksum header) | ||
| 439 | (tar-header-name header))) | ||
| 440 | ;; . | ||
| 441 | (buffer-string))) | ||
| 442 | |||
| 372 | 443 | ||
| 373 | (defun tar-header-block-checksum (string) | 444 | (defun tar-header-block-checksum (string) |
| 374 | "Compute and return a tar-acceptable checksum for this block." | 445 | "Compute and return a tar-acceptable checksum for this block." |
| @@ -547,6 +618,7 @@ MODE should be an integer which is a file mode value." | |||
| 547 | (define-key map "p" 'tar-previous-line) | 618 | (define-key map "p" 'tar-previous-line) |
| 548 | (define-key map "\^P" 'tar-previous-line) | 619 | (define-key map "\^P" 'tar-previous-line) |
| 549 | (define-key map [up] 'tar-previous-line) | 620 | (define-key map [up] 'tar-previous-line) |
| 621 | (define-key map "I" 'tar-new-entry) | ||
| 550 | (define-key map "R" 'tar-rename-entry) | 622 | (define-key map "R" 'tar-rename-entry) |
| 551 | (define-key map "u" 'tar-unflag) | 623 | (define-key map "u" 'tar-unflag) |
| 552 | (define-key map "v" 'tar-view) | 624 | (define-key map "v" 'tar-view) |
| @@ -731,10 +803,14 @@ tar-file's buffer." | |||
| 731 | (interactive "p") | 803 | (interactive "p") |
| 732 | (tar-next-line (- arg))) | 804 | (tar-next-line (- arg))) |
| 733 | 805 | ||
| 806 | (defun tar-current-position () | ||
| 807 | "Return the `tar-parse-info' index for the current line." | ||
| 808 | (count-lines (point-min) (line-beginning-position))) | ||
| 809 | |||
| 734 | (defun tar-current-descriptor (&optional noerror) | 810 | (defun tar-current-descriptor (&optional noerror) |
| 735 | "Return the tar-descriptor of the current line, or signals an error." | 811 | "Return the tar-descriptor of the current line, or signals an error." |
| 736 | ;; I wish lines had plists, like in ZMACS... | 812 | ;; I wish lines had plists, like in ZMACS... |
| 737 | (or (nth (count-lines (point-min) (line-beginning-position)) | 813 | (or (nth (tar-current-position) |
| 738 | tar-parse-info) | 814 | tar-parse-info) |
| 739 | (if noerror | 815 | (if noerror |
| 740 | nil | 816 | nil |
| @@ -948,6 +1024,37 @@ the current tar-entry." | |||
| 948 | (write-region start end to-file nil nil nil t))) | 1024 | (write-region start end to-file nil nil nil t))) |
| 949 | (message "Copied tar entry %s to %s" name to-file))) | 1025 | (message "Copied tar entry %s to %s" name to-file))) |
| 950 | 1026 | ||
| 1027 | (defun tar-new-entry (filename &optional index) | ||
| 1028 | "Insert a new empty regular file before point." | ||
| 1029 | (interactive "*sFile name: ") | ||
| 1030 | (let* ((buffer (current-buffer)) | ||
| 1031 | (index (or index (tar-current-position))) | ||
| 1032 | (d-list (and (not (zerop index)) | ||
| 1033 | (nthcdr (+ -1 index) tar-parse-info))) | ||
| 1034 | (pos (if d-list | ||
| 1035 | (tar-header-data-end (car d-list)) | ||
| 1036 | (point-min))) | ||
| 1037 | (new-descriptor | ||
| 1038 | (tar-new-regular-file-header filename))) | ||
| 1039 | ;; Update the data buffer; fill the missing descriptor fields. | ||
| 1040 | (with-current-buffer tar-data-buffer | ||
| 1041 | (goto-char pos) | ||
| 1042 | (insert (tar-header-serialize new-descriptor t)) | ||
| 1043 | (setf (tar-header-data-start new-descriptor) | ||
| 1044 | (copy-marker (point) nil))) | ||
| 1045 | ;; Update tar-parse-info. | ||
| 1046 | (if d-list | ||
| 1047 | (setcdr d-list (cons new-descriptor (cdr d-list))) | ||
| 1048 | (setq tar-parse-info (cons new-descriptor tar-parse-info))) | ||
| 1049 | ;; Update the listing buffer. | ||
| 1050 | (save-excursion | ||
| 1051 | (goto-char (point-min)) | ||
| 1052 | (forward-line index) | ||
| 1053 | (let ((inhibit-read-only t)) | ||
| 1054 | (insert (tar-header-block-summarize new-descriptor) ?\n))) | ||
| 1055 | ;; . | ||
| 1056 | index)) | ||
| 1057 | |||
| 951 | (defun tar-flag-deleted (p &optional unflag) | 1058 | (defun tar-flag-deleted (p &optional unflag) |
| 952 | "In Tar mode, mark this sub-file to be deleted from the tar file. | 1059 | "In Tar mode, mark this sub-file to be deleted from the tar file. |
| 953 | With a prefix argument, mark that many files." | 1060 | With a prefix argument, mark that many files." |
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 8a2383c12ff..85d9410868a 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el | |||
| @@ -4963,52 +4963,55 @@ The event, EV, is the mouse event." | |||
| 4963 | (artist-funcall init-fn x1 y1) | 4963 | (artist-funcall init-fn x1 y1) |
| 4964 | (if (not artist-rubber-banding) | 4964 | (if (not artist-rubber-banding) |
| 4965 | (artist-no-rb-set-point1 x1 y1)) | 4965 | (artist-no-rb-set-point1 x1 y1)) |
| 4966 | (track-mouse | 4966 | (unwind-protect |
| 4967 | (while (or (mouse-movement-p ev) | 4967 | (track-mouse |
| 4968 | (member 'down (event-modifiers ev))) | 4968 | (while (or (mouse-movement-p ev) |
| 4969 | (setq ev-start-pos (artist-coord-win-to-buf | 4969 | (member 'down (event-modifiers ev))) |
| 4970 | (posn-col-row (event-start ev)))) | 4970 | (setq ev-start-pos (artist-coord-win-to-buf |
| 4971 | (setq x1 (car ev-start-pos)) | 4971 | (posn-col-row (event-start ev)))) |
| 4972 | (setq y1 (cdr ev-start-pos)) | 4972 | (setq x1 (car ev-start-pos)) |
| 4973 | 4973 | (setq y1 (cdr ev-start-pos)) | |
| 4974 | ;; Cancel previous timer | 4974 | |
| 4975 | (if timer | 4975 | ;; Cancel previous timer |
| 4976 | (cancel-timer timer)) | 4976 | (if timer |
| 4977 | 4977 | (cancel-timer timer)) | |
| 4978 | (if (not (eq initial-win (posn-window (event-start ev)))) | 4978 | |
| 4979 | ;; If we moved outside the window, do nothing | 4979 | (if (not (eq initial-win (posn-window (event-start ev)))) |
| 4980 | nil | 4980 | ;; If we moved outside the window, do nothing |
| 4981 | 4981 | nil | |
| 4982 | ;; Still in same window: | 4982 | |
| 4983 | ;; | 4983 | ;; Still in same window: |
| 4984 | ;; Check if user presses or releases shift key | 4984 | ;; |
| 4985 | (if (artist-shift-has-changed shift-state ev) | 4985 | ;; Check if user presses or releases shift key |
| 4986 | 4986 | (if (artist-shift-has-changed shift-state ev) | |
| 4987 | ;; First check that the draw-how is the same as we | 4987 | |
| 4988 | ;; already have. Otherwise, ignore the changed shift-state. | 4988 | ;; First check that the draw-how is the same as we |
| 4989 | (if (not (eq draw-how | 4989 | ;; already have. Otherwise, ignore the changed shift-state. |
| 4990 | (artist-go-get-draw-how-from-symbol | 4990 | (if (not (eq draw-how |
| 4991 | (if (not shift-state) shifted unshifted)))) | 4991 | (artist-go-get-draw-how-from-symbol |
| 4992 | (message "Cannot switch to shifted operation") | 4992 | (if (not shift-state) shifted unshifted)))) |
| 4993 | 4993 | (message "Cannot switch to shifted operation") | |
| 4994 | ;; progn is "implicit" since this is the else-part | 4994 | |
| 4995 | (setq shift-state (not shift-state)) | 4995 | ;; progn is "implicit" since this is the else-part |
| 4996 | (setq op (if shift-state shifted unshifted)) | 4996 | (setq shift-state (not shift-state)) |
| 4997 | (setq draw-how (artist-go-get-draw-how-from-symbol op)) | 4997 | (setq op (if shift-state shifted unshifted)) |
| 4998 | (setq draw-fn (artist-go-get-draw-fn-from-symbol op)))) | 4998 | (setq draw-how (artist-go-get-draw-how-from-symbol op)) |
| 4999 | 4999 | (setq draw-fn (artist-go-get-draw-fn-from-symbol op)))) | |
| 5000 | ;; Draw the new shape | 5000 | |
| 5001 | (setq shape (artist-funcall draw-fn x1 y1)) | 5001 | ;; Draw the new shape |
| 5002 | (artist-move-to-xy x1 y1) | 5002 | (setq shape (artist-funcall draw-fn x1 y1)) |
| 5003 | 5003 | (artist-move-to-xy x1 y1) | |
| 5004 | ;; Start the timer to call `draw-fn' repeatedly every | 5004 | |
| 5005 | ;; `interval' second | 5005 | ;; Start the timer to call `draw-fn' repeatedly every |
| 5006 | (if (and interval draw-fn) | 5006 | ;; `interval' second |
| 5007 | (setq timer (run-at-time interval interval draw-fn x1 y1)))) | 5007 | (if (and interval draw-fn) |
| 5008 | 5008 | (setq timer (run-at-time interval interval draw-fn x1 y1)))) | |
| 5009 | ;; Read next event | 5009 | |
| 5010 | (setq ev (read-event)))) | 5010 | ;; Read next event |
| 5011 | 5011 | (setq ev (read-event)))) | |
| 5012 | ;; Cleanup: get rid of any active timer. | ||
| 5013 | (if timer | ||
| 5014 | (cancel-timer timer))) | ||
| 5012 | ;; Cancel any timers | 5015 | ;; Cancel any timers |
| 5013 | (if timer | 5016 | (if timer |
| 5014 | (cancel-timer timer)) | 5017 | (cancel-timer timer)) |
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index 160d9fb4cdf..7cf54c6d28a 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el | |||
| @@ -106,17 +106,21 @@ | |||
| 106 | (defvar reftex-syntax-table nil) | 106 | (defvar reftex-syntax-table nil) |
| 107 | (defvar reftex-syntax-table-for-bib nil) | 107 | (defvar reftex-syntax-table-for-bib nil) |
| 108 | 108 | ||
| 109 | (unless reftex-syntax-table | 109 | (defun reftex--prepare-syntax-tables () |
| 110 | (setq reftex-syntax-table (copy-syntax-table)) | 110 | (setq reftex-syntax-table (copy-syntax-table)) |
| 111 | (modify-syntax-entry ?\( "." reftex-syntax-table) | 111 | (modify-syntax-entry ?\( "." reftex-syntax-table) |
| 112 | (modify-syntax-entry ?\) "." reftex-syntax-table)) | 112 | (modify-syntax-entry ?\) "." reftex-syntax-table) |
| 113 | 113 | ||
| 114 | (unless reftex-syntax-table-for-bib | ||
| 115 | (setq reftex-syntax-table-for-bib (copy-syntax-table)) | 114 | (setq reftex-syntax-table-for-bib (copy-syntax-table)) |
| 116 | (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) | 115 | (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) |
| 117 | (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) | 116 | (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) |
| 118 | (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) | 117 | (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) |
| 119 | (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)) | 118 | (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib) |
| 119 | (modify-syntax-entry ?\( "." reftex-syntax-table-for-bib) | ||
| 120 | (modify-syntax-entry ?\) "." reftex-syntax-table-for-bib)) | ||
| 121 | |||
| 122 | (unless (and reftex-syntax-table reftex-syntax-table-for-bib) | ||
| 123 | (reftex--prepare-syntax-tables)) | ||
| 120 | 124 | ||
| 121 | ;; The following definitions are out of place, but I need them here | 125 | ;; The following definitions are out of place, but I need them here |
| 122 | ;; to make the compilation of reftex-mode not complain. | 126 | ;; to make the compilation of reftex-mode not complain. |
| @@ -180,15 +184,7 @@ on the menu bar. | |||
| 180 | (put 'reftex-auto-recenter-toc 'initialized t)) | 184 | (put 'reftex-auto-recenter-toc 'initialized t)) |
| 181 | 185 | ||
| 182 | ;; Prepare the special syntax tables. | 186 | ;; Prepare the special syntax tables. |
| 183 | (setq reftex-syntax-table (copy-syntax-table (syntax-table))) | 187 | (reftex--prepare-syntax-tables) |
| 184 | (modify-syntax-entry ?\( "." reftex-syntax-table) | ||
| 185 | (modify-syntax-entry ?\) "." reftex-syntax-table) | ||
| 186 | |||
| 187 | (setq reftex-syntax-table-for-bib (copy-syntax-table)) | ||
| 188 | (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib) | ||
| 189 | (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib) | ||
| 190 | (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib) | ||
| 191 | (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib) | ||
| 192 | 188 | ||
| 193 | (run-hooks 'reftex-mode-hook)) | 189 | (run-hooks 'reftex-mode-hook)) |
| 194 | ;; Mode was turned off | 190 | ;; Mode was turned off |
diff --git a/m4/time_h.m4 b/m4/time_h.m4 index 0f0b7d9a2ac..d9c41a48f33 100644 --- a/m4/time_h.m4 +++ b/m4/time_h.m4 | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | # Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc. | 3 | # Copyright (C) 2000-2001, 2003-2007, 2009-2015 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | # serial 8 | 5 | # serial 9 |
| 6 | 6 | ||
| 7 | # This file is free software; the Free Software Foundation | 7 | # This file is free software; the Free Software Foundation |
| 8 | # gives unlimited permission to copy and/or distribute it, | 8 | # gives unlimited permission to copy and/or distribute it, |
| @@ -26,7 +26,7 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY], | |||
| 26 | ]) | 26 | ]) |
| 27 | 27 | ||
| 28 | dnl Check whether 'struct timespec' is declared | 28 | dnl Check whether 'struct timespec' is declared |
| 29 | dnl in time.h, sys/time.h, or pthread.h. | 29 | dnl in time.h, sys/time.h, pthread.h, or unistd.h. |
| 30 | 30 | ||
| 31 | AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], | 31 | AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], |
| 32 | [ | 32 | [ |
| @@ -44,6 +44,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], | |||
| 44 | TIME_H_DEFINES_STRUCT_TIMESPEC=0 | 44 | TIME_H_DEFINES_STRUCT_TIMESPEC=0 |
| 45 | SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 | 45 | SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 |
| 46 | PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 | 46 | PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 |
| 47 | UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 | ||
| 47 | if test $gl_cv_sys_struct_timespec_in_time_h = yes; then | 48 | if test $gl_cv_sys_struct_timespec_in_time_h = yes; then |
| 48 | TIME_H_DEFINES_STRUCT_TIMESPEC=1 | 49 | TIME_H_DEFINES_STRUCT_TIMESPEC=1 |
| 49 | else | 50 | else |
| @@ -70,12 +71,26 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], | |||
| 70 | [gl_cv_sys_struct_timespec_in_pthread_h=no])]) | 71 | [gl_cv_sys_struct_timespec_in_pthread_h=no])]) |
| 71 | if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then | 72 | if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then |
| 72 | PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 | 73 | PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 |
| 74 | else | ||
| 75 | AC_CACHE_CHECK([for struct timespec in <unistd.h>], | ||
| 76 | [gl_cv_sys_struct_timespec_in_unistd_h], | ||
| 77 | [AC_COMPILE_IFELSE( | ||
| 78 | [AC_LANG_PROGRAM( | ||
| 79 | [[#include <unistd.h> | ||
| 80 | ]], | ||
| 81 | [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], | ||
| 82 | [gl_cv_sys_struct_timespec_in_unistd_h=yes], | ||
| 83 | [gl_cv_sys_struct_timespec_in_unistd_h=no])]) | ||
| 84 | if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then | ||
| 85 | UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 | ||
| 86 | fi | ||
| 73 | fi | 87 | fi |
| 74 | fi | 88 | fi |
| 75 | fi | 89 | fi |
| 76 | AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) | 90 | AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) |
| 77 | AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) | 91 | AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) |
| 78 | AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) | 92 | AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) |
| 93 | AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) | ||
| 79 | ]) | 94 | ]) |
| 80 | 95 | ||
| 81 | AC_DEFUN([gl_TIME_MODULE_INDICATOR], | 96 | AC_DEFUN([gl_TIME_MODULE_INDICATOR], |
diff --git a/src/ChangeLog b/src/ChangeLog index 8e5166e22be..9e564ea6414 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,143 @@ | |||
| 1 | 2015-01-31 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * coding.c (raw_text_coding_system_p): New function. | ||
| 4 | |||
| 5 | * keyboard.c (read_decoded_event_from_main_queue): Use it when the | ||
| 6 | keyboard coding-system is 'raw-text'. (Bug#19532) | ||
| 7 | |||
| 8 | * coding.h (raw_text_coding_system_p): Add prototype. | ||
| 9 | |||
| 10 | 2015-01-31 Andreas Schwab <schwab@linux-m68k.org> | ||
| 11 | |||
| 12 | * Makefile.in (gl-stamp): Generate globals.h through the use of | ||
| 13 | move-if-change. | ||
| 14 | (globals.h): Replace with empty command. | ||
| 15 | |||
| 16 | 2015-01-31 Eli Zaretskii <eliz@gnu.org> | ||
| 17 | |||
| 18 | * keyboard.c (kbd_buffer_store_event_hold): Ignore FOCUS_OUT_EVENT | ||
| 19 | and ICONIFY_EVENT for the purposes of breaking while-no-input | ||
| 20 | loops. (Bug#19547) | ||
| 21 | |||
| 22 | * dired.c (read_dirent): Correct the "MSDOS hacks" hack: the | ||
| 23 | special code for errno = ENOENT or EACCES is needed for WINDOWSNT, | ||
| 24 | not for MSDOS. | ||
| 25 | |||
| 26 | 2015-01-31 Paul Eggert <eggert@cs.ucla.edu> | ||
| 27 | |||
| 28 | Simplify read_dirent's MSDOS hacks | ||
| 29 | * dired.c (read_dirent): Simplify by removing the need for the | ||
| 30 | DIR_ENTRY argument. All callers changed. This separates the | ||
| 31 | MS-DOS idiosyncrasies better from the rest of the code. | ||
| 32 | |||
| 33 | 2015-01-30 Eli Zaretskii <eliz@gnu.org> | ||
| 34 | |||
| 35 | * dired.c (read_dirent): Accept an additional argument | ||
| 36 | FIRST_ENTRY. If readdir fails with ENOENT or EACCES the first | ||
| 37 | time it is called, report the error as if it happened in | ||
| 38 | open_directory. | ||
| 39 | (directory_files_internal, file_name_completion): Adjust callers | ||
| 40 | or read_dirent. | ||
| 41 | |||
| 42 | 2015-01-30 Paul Eggert <eggert@cs.ucla.edu> | ||
| 43 | |||
| 44 | Refactor calls to opendir for simplicity | ||
| 45 | * dired.c (open_directory): Accept Lisp_Object, not char *, for | ||
| 46 | dirname. Signal an error if the open fails. All callers changed. | ||
| 47 | |||
| 48 | 2015-01-29 Paul Eggert <eggert@cs.ucla.edu> | ||
| 49 | |||
| 50 | Report readdir failures | ||
| 51 | Previously, on non-MS-Windows platforms the code treated most | ||
| 52 | readdir failures as EOF. This was incorrect, e.g., when readdir | ||
| 53 | fails with errno == EOVERFLOW. Signal an error instead. | ||
| 54 | * dired.c (read_dirent): | ||
| 55 | New function, which signals an error when readdir fails. | ||
| 56 | (directory_files_internal, file_name_completion): Use it. | ||
| 57 | |||
| 58 | 2015-01-29 Eli Zaretskii <eliz@gnu.org> | ||
| 59 | |||
| 60 | Use bool for boolean in w32menu.c, w32font.c, w32uniscribe.c. | ||
| 61 | * w32uniscribe.c (uniscribe_list, uniscribe_match): Use bool where | ||
| 62 | appropriate. | ||
| 63 | |||
| 64 | * w32font.c (struct font_callback_data, w32font_list_internal) | ||
| 65 | (w32font_driver, w32font_match_internal): Use bool where appropriate. | ||
| 66 | |||
| 67 | * w32menu.c (x_activate_menubar, set_frame_menubar) | ||
| 68 | (w32_dialog_show, initialize_frame_menubar, w32_menu_show) | ||
| 69 | (is_simple_dialog): Use bool where appropriate. | ||
| 70 | |||
| 71 | 2015-01-28 Paul Eggert <eggert@cs.ucla.edu> | ||
| 72 | |||
| 73 | Use bool, not int, to track face changes | ||
| 74 | * xfaces.c (face_change): Rename from face_change_count, and | ||
| 75 | change from int to bool. The var is now true (instead of nonzero) | ||
| 76 | if attributes have changed; this is simpler. All uses changed. | ||
| 77 | (Bug#19698) | ||
| 78 | |||
| 79 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 80 | |||
| 81 | * dired.c (directory_files_internal, file_name_completion) | ||
| 82 | [WINDOWSNT]: Signal an error when errno is set non-zero by | ||
| 83 | 'readdir', regardless of its value. | ||
| 84 | |||
| 85 | * w32.c (sys_readdir): Set errno to ENOENT when the directory | ||
| 86 | doesn't exist and to EACCES when it's not accessible to the | ||
| 87 | current user. Set errno to zero when FindNextFile exhausts the | ||
| 88 | directory, so that callers don't interpret that as an error and | ||
| 89 | don't signal a file-error. | ||
| 90 | (open_unc_volume): Set errno to ENOENT if WNetOpenEnum fails. | ||
| 91 | |||
| 92 | * dired.c (directory_files_internal) [WINDOWSNT]: If readdir | ||
| 93 | returns NULL and errno is ENOTDIR, behave as if opendir failed to | ||
| 94 | open the directory. (Bug#19701) | ||
| 95 | |||
| 96 | * w32.c (sys_readdir): If FindFirstFile fails because the | ||
| 97 | directory doesn't exist, set errno to ENOTDIR. | ||
| 98 | |||
| 99 | 2015-01-28 Jan Djärv <jan.h.d@swipnet.se> | ||
| 100 | |||
| 101 | * nsterm.m (drawRect:): Add block/unblock_input (Bug#19660). | ||
| 102 | |||
| 103 | 2015-01-28 Paul Eggert <eggert@cs.ucla.edu> | ||
| 104 | |||
| 105 | Fix coding.c subscript error | ||
| 106 | * coding.c (CODING_ISO_INVOKED_CHARSET): | ||
| 107 | Avoid undefined behavior if CODING_ISO_INVOCATION returns negative. | ||
| 108 | |||
| 109 | 2015-01-28 Eli Zaretskii <eliz@gnu.org> | ||
| 110 | |||
| 111 | * xdisp.c (produce_image_glyph): Fix display of images in R2L | ||
| 112 | screen lines: prepend the new glyph to the ones already there | ||
| 113 | instead of appending it. | ||
| 114 | |||
| 115 | * w32fns.c (w32_set_title_bar_text): New function, including | ||
| 116 | support for titles with non-ASCII characters outside of the | ||
| 117 | current system codepage. | ||
| 118 | (x_set_name, x_set_title): Use it. (Bug#19590) | ||
| 119 | |||
| 120 | * indent.c (Fvertical_motion): Return zero if we started from ZV | ||
| 121 | and there's an overlay after-string there. (Bug#19553) | ||
| 122 | |||
| 123 | * emacs.c (usage_message): Fix the description of the -nl switch. | ||
| 124 | (Bug#19542) | ||
| 125 | |||
| 126 | * xdisp.c (move_it_to, try_cursor_movement): Don't use the window | ||
| 127 | end information if the window_end_valid flag is unset. | ||
| 128 | (try_window_id): If the call to display_line invalidated the | ||
| 129 | window end information, give up the try_window_id optimization. | ||
| 130 | (Bug#19511) | ||
| 131 | |||
| 132 | * w32fns.c (Fx_server_version, Fx_server_vendor): Doc fix. | ||
| 133 | * xfns.c (Fx_server_version, Fx_server_vendor): Doc fix. | ||
| 134 | |||
| 135 | * emacs.c (syms_of_emacs) <system-configuration>: Doc fix. (Bug#19502) | ||
| 136 | |||
| 137 | 2015-01-28 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 138 | |||
| 139 | * lisp.mk (lisp): Add cl-preloaded. | ||
| 140 | |||
| 1 | 2015-01-27 Paul Eggert <eggert@cs.ucla.edu> | 141 | 2015-01-27 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 142 | ||
| 3 | Use bool for boolean in xfaces.c | 143 | Use bool for boolean in xfaces.c |
diff --git a/src/Makefile.in b/src/Makefile.in index 079e0e41c9f..81977dbfec2 100644 --- a/src/Makefile.in +++ b/src/Makefile.in | |||
| @@ -504,11 +504,17 @@ buildobj.h: Makefile | |||
| 504 | 504 | ||
| 505 | GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m) | 505 | GLOBAL_SOURCES = $(base_obj:.o=.c) $(NS_OBJC_OBJ:.o=.m) |
| 506 | 506 | ||
| 507 | AM_V_GLOBALS = $(am__v_GLOBALS_@AM_V@) | ||
| 508 | am__v_GLOBALS_ = $(am__v_GLOBALS_@AM_DEFAULT_V@) | ||
| 509 | am__v_GLOBALS_0 = @echo " GEN " globals.h; | ||
| 510 | am__v_GLOBALS_1 = | ||
| 511 | |||
| 507 | gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES) | 512 | gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES) |
| 508 | $(AM_V_GEN)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) >$@ | 513 | $(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > globals.tmp |
| 514 | $(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h | ||
| 515 | $(AM_V_at)echo timestamp > $@ | ||
| 509 | 516 | ||
| 510 | globals.h: gl-stamp | 517 | globals.h: gl-stamp; @true |
| 511 | $(AM_V_GEN)cmp $< $@ >/dev/null || cp $< $@ | ||
| 512 | 518 | ||
| 513 | $(ALLOBJS): globals.h | 519 | $(ALLOBJS): globals.h |
| 514 | 520 | ||
diff --git a/src/coding.c b/src/coding.c index 54811588c6a..1a0e1279648 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -350,7 +350,8 @@ static Lisp_Object Vbig5_coding_system; | |||
| 350 | #define CODING_ISO_BOL(coding) \ | 350 | #define CODING_ISO_BOL(coding) \ |
| 351 | ((coding)->spec.iso_2022.bol) | 351 | ((coding)->spec.iso_2022.bol) |
| 352 | #define CODING_ISO_INVOKED_CHARSET(coding, plane) \ | 352 | #define CODING_ISO_INVOKED_CHARSET(coding, plane) \ |
| 353 | CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane))) | 353 | (CODING_ISO_INVOCATION (coding, plane) < 0 ? -1 \ |
| 354 | : CODING_ISO_DESIGNATION (coding, CODING_ISO_INVOCATION (coding, plane))) | ||
| 354 | #define CODING_ISO_CMP_STATUS(coding) \ | 355 | #define CODING_ISO_CMP_STATUS(coding) \ |
| 355 | (&(coding)->spec.iso_2022.cmp_status) | 356 | (&(coding)->spec.iso_2022.cmp_status) |
| 356 | #define CODING_ISO_EXTSEGMENT_LEN(coding) \ | 357 | #define CODING_ISO_EXTSEGMENT_LEN(coding) \ |
| @@ -5978,6 +5979,15 @@ raw_text_coding_system (Lisp_Object coding_system) | |||
| 5978 | : AREF (raw_text_eol_type, 2)); | 5979 | : AREF (raw_text_eol_type, 2)); |
| 5979 | } | 5980 | } |
| 5980 | 5981 | ||
| 5982 | /* Return true if CODING corresponds to raw-text coding-system. */ | ||
| 5983 | |||
| 5984 | bool | ||
| 5985 | raw_text_coding_system_p (struct coding_system *coding) | ||
| 5986 | { | ||
| 5987 | return (coding->decoder == decode_coding_raw_text | ||
| 5988 | && coding->encoder == encode_coding_raw_text) ? true : false; | ||
| 5989 | } | ||
| 5990 | |||
| 5981 | 5991 | ||
| 5982 | /* If CODING_SYSTEM doesn't specify end-of-line format, return one of | 5992 | /* If CODING_SYSTEM doesn't specify end-of-line format, return one of |
| 5983 | the subsidiary that has the same eol-spec as PARENT (if it is not | 5993 | the subsidiary that has the same eol-spec as PARENT (if it is not |
diff --git a/src/coding.h b/src/coding.h index d49d786e6dd..c73a9cc3263 100644 --- a/src/coding.h +++ b/src/coding.h | |||
| @@ -705,6 +705,7 @@ extern Lisp_Object code_convert_string_norecord (Lisp_Object, Lisp_Object, | |||
| 705 | extern Lisp_Object encode_file_name (Lisp_Object); | 705 | extern Lisp_Object encode_file_name (Lisp_Object); |
| 706 | extern Lisp_Object decode_file_name (Lisp_Object); | 706 | extern Lisp_Object decode_file_name (Lisp_Object); |
| 707 | extern Lisp_Object raw_text_coding_system (Lisp_Object); | 707 | extern Lisp_Object raw_text_coding_system (Lisp_Object); |
| 708 | extern bool raw_text_coding_system_p (struct coding_system *); | ||
| 708 | extern Lisp_Object coding_inherit_eol_type (Lisp_Object, Lisp_Object); | 709 | extern Lisp_Object coding_inherit_eol_type (Lisp_Object, Lisp_Object); |
| 709 | extern Lisp_Object complement_process_encoding_system (Lisp_Object); | 710 | extern Lisp_Object complement_process_encoding_system (Lisp_Object); |
| 710 | 711 | ||
diff --git a/src/dired.c b/src/dired.c index e31fdf87ac2..5038e04cd01 100644 --- a/src/dired.c +++ b/src/dired.c | |||
| @@ -66,8 +66,9 @@ dirent_namelen (struct dirent *dp) | |||
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static DIR * | 68 | static DIR * |
| 69 | open_directory (char const *name, int *fdp) | 69 | open_directory (Lisp_Object dirname, int *fdp) |
| 70 | { | 70 | { |
| 71 | char *name = SSDATA (dirname); | ||
| 71 | DIR *d; | 72 | DIR *d; |
| 72 | int fd, opendir_errno; | 73 | int fd, opendir_errno; |
| 73 | 74 | ||
| @@ -98,8 +99,9 @@ open_directory (char const *name, int *fdp) | |||
| 98 | 99 | ||
| 99 | unblock_input (); | 100 | unblock_input (); |
| 100 | 101 | ||
| 102 | if (!d) | ||
| 103 | report_file_errno ("Opening directory", dirname, opendir_errno); | ||
| 101 | *fdp = fd; | 104 | *fdp = fd; |
| 102 | errno = opendir_errno; | ||
| 103 | return d; | 105 | return d; |
| 104 | } | 106 | } |
| 105 | 107 | ||
| @@ -120,6 +122,35 @@ directory_files_internal_unwind (void *dh) | |||
| 120 | unblock_input (); | 122 | unblock_input (); |
| 121 | } | 123 | } |
| 122 | 124 | ||
| 125 | /* Return the next directory entry from DIR; DIR's name is DIRNAME. | ||
| 126 | If there are no more directory entries, return a null pointer. | ||
| 127 | Signal any unrecoverable errors. */ | ||
| 128 | |||
| 129 | static struct dirent * | ||
| 130 | read_dirent (DIR *dir, Lisp_Object dirname) | ||
| 131 | { | ||
| 132 | while (true) | ||
| 133 | { | ||
| 134 | errno = 0; | ||
| 135 | struct dirent *dp = readdir (dir); | ||
| 136 | if (dp || errno == 0) | ||
| 137 | return dp; | ||
| 138 | if (! (errno == EAGAIN || errno == EINTR)) | ||
| 139 | { | ||
| 140 | #ifdef WINDOWSNT | ||
| 141 | /* The MS-Windows implementation of 'opendir' doesn't | ||
| 142 | actually open a directory until the first call to | ||
| 143 | 'readdir'. If 'readdir' fails to open the directory, it | ||
| 144 | sets errno to ENOENT or EACCES, see w32.c. */ | ||
| 145 | if (errno == ENOENT || errno == EACCES) | ||
| 146 | report_file_error ("Opening directory", dirname); | ||
| 147 | #endif | ||
| 148 | report_file_error ("Reading directory", dirname); | ||
| 149 | } | ||
| 150 | QUIT; | ||
| 151 | } | ||
| 152 | } | ||
| 153 | |||
| 123 | /* Function shared by Fdirectory_files and Fdirectory_files_and_attributes. | 154 | /* Function shared by Fdirectory_files and Fdirectory_files_and_attributes. |
| 124 | If not ATTRS, return a list of directory filenames; | 155 | If not ATTRS, return a list of directory filenames; |
| 125 | if ATTRS, return a list of directory filenames and their attributes. | 156 | if ATTRS, return a list of directory filenames and their attributes. |
| @@ -130,15 +161,12 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, | |||
| 130 | Lisp_Object match, Lisp_Object nosort, bool attrs, | 161 | Lisp_Object match, Lisp_Object nosort, bool attrs, |
| 131 | Lisp_Object id_format) | 162 | Lisp_Object id_format) |
| 132 | { | 163 | { |
| 133 | DIR *d; | ||
| 134 | int fd; | ||
| 135 | ptrdiff_t directory_nbytes; | 164 | ptrdiff_t directory_nbytes; |
| 136 | Lisp_Object list, dirfilename, encoded_directory; | 165 | Lisp_Object list, dirfilename, encoded_directory; |
| 137 | struct re_pattern_buffer *bufp = NULL; | 166 | struct re_pattern_buffer *bufp = NULL; |
| 138 | bool needsep = 0; | 167 | bool needsep = 0; |
| 139 | ptrdiff_t count = SPECPDL_INDEX (); | 168 | ptrdiff_t count = SPECPDL_INDEX (); |
| 140 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; | 169 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
| 141 | struct dirent *dp; | ||
| 142 | #ifdef WINDOWSNT | 170 | #ifdef WINDOWSNT |
| 143 | Lisp_Object w32_save = Qnil; | 171 | Lisp_Object w32_save = Qnil; |
| 144 | #endif | 172 | #endif |
| @@ -182,9 +210,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, | |||
| 182 | /* Now *bufp is the compiled form of MATCH; don't call anything | 210 | /* Now *bufp is the compiled form of MATCH; don't call anything |
| 183 | which might compile a new regexp until we're done with the loop! */ | 211 | which might compile a new regexp until we're done with the loop! */ |
| 184 | 212 | ||
| 185 | d = open_directory (SSDATA (dirfilename), &fd); | 213 | int fd; |
| 186 | if (d == NULL) | 214 | DIR *d = open_directory (dirfilename, &fd); |
| 187 | report_file_error ("Opening directory", directory); | ||
| 188 | 215 | ||
| 189 | /* Unfortunately, we can now invoke expand-file-name and | 216 | /* Unfortunately, we can now invoke expand-file-name and |
| 190 | file-attributes on filenames, both of which can throw, so we must | 217 | file-attributes on filenames, both of which can throw, so we must |
| @@ -221,28 +248,13 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, | |||
| 221 | || !IS_ANY_SEP (SREF (directory, directory_nbytes - 1))) | 248 | || !IS_ANY_SEP (SREF (directory, directory_nbytes - 1))) |
| 222 | needsep = 1; | 249 | needsep = 1; |
| 223 | 250 | ||
| 224 | /* Loop reading blocks until EOF or error. */ | 251 | /* Loop reading directory entries. */ |
| 225 | for (;;) | 252 | for (struct dirent *dp; (dp = read_dirent (d, directory)); ) |
| 226 | { | 253 | { |
| 227 | ptrdiff_t len; | 254 | ptrdiff_t len = dirent_namelen (dp); |
| 228 | bool wanted = 0; | 255 | Lisp_Object name = make_unibyte_string (dp->d_name, len); |
| 229 | Lisp_Object name, finalname; | 256 | Lisp_Object finalname = name; |
| 230 | struct gcpro gcpro1, gcpro2; | 257 | struct gcpro gcpro1, gcpro2; |
| 231 | |||
| 232 | errno = 0; | ||
| 233 | dp = readdir (d); | ||
| 234 | if (!dp) | ||
| 235 | { | ||
| 236 | if (errno == EAGAIN || errno == EINTR) | ||
| 237 | { | ||
| 238 | QUIT; | ||
| 239 | continue; | ||
| 240 | } | ||
| 241 | break; | ||
| 242 | } | ||
| 243 | |||
| 244 | len = dirent_namelen (dp); | ||
| 245 | name = finalname = make_unibyte_string (dp->d_name, len); | ||
| 246 | GCPRO2 (finalname, name); | 258 | GCPRO2 (finalname, name); |
| 247 | 259 | ||
| 248 | /* Note: DECODE_FILE can GC; it should protect its argument, | 260 | /* Note: DECODE_FILE can GC; it should protect its argument, |
| @@ -255,9 +267,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, | |||
| 255 | immediate_quit = 1; | 267 | immediate_quit = 1; |
| 256 | QUIT; | 268 | QUIT; |
| 257 | 269 | ||
| 258 | if (NILP (match) | 270 | bool wanted = (NILP (match) |
| 259 | || re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0) | 271 | || re_search (bufp, SSDATA (name), len, 0, len, 0) >= 0); |
| 260 | wanted = 1; | ||
| 261 | 272 | ||
| 262 | immediate_quit = 0; | 273 | immediate_quit = 0; |
| 263 | 274 | ||
| @@ -446,8 +457,6 @@ static Lisp_Object | |||
| 446 | file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, | 457 | file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, |
| 447 | Lisp_Object predicate) | 458 | Lisp_Object predicate) |
| 448 | { | 459 | { |
| 449 | DIR *d; | ||
| 450 | int fd; | ||
| 451 | ptrdiff_t bestmatchsize = 0; | 460 | ptrdiff_t bestmatchsize = 0; |
| 452 | int matchcount = 0; | 461 | int matchcount = 0; |
| 453 | /* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded. | 462 | /* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded. |
| @@ -481,37 +490,17 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, | |||
| 481 | work with decoded file names, but we still do some filtering based | 490 | work with decoded file names, but we still do some filtering based |
| 482 | on the encoded file name. */ | 491 | on the encoded file name. */ |
| 483 | encoded_file = ENCODE_FILE (file); | 492 | encoded_file = ENCODE_FILE (file); |
| 484 | |||
| 485 | encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname)); | 493 | encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname)); |
| 486 | 494 | int fd; | |
| 487 | d = open_directory (SSDATA (encoded_dir), &fd); | 495 | DIR *d = open_directory (encoded_dir, &fd); |
| 488 | if (!d) | ||
| 489 | report_file_error ("Opening directory", dirname); | ||
| 490 | |||
| 491 | record_unwind_protect_ptr (directory_files_internal_unwind, d); | 496 | record_unwind_protect_ptr (directory_files_internal_unwind, d); |
| 492 | 497 | ||
| 493 | /* Loop reading blocks */ | 498 | /* Loop reading directory entries. */ |
| 494 | /* (att3b compiler bug requires do a null comparison this way) */ | 499 | for (struct dirent *dp; (dp = read_dirent (d, dirname)); ) |
| 495 | while (1) | ||
| 496 | { | 500 | { |
| 497 | struct dirent *dp; | 501 | ptrdiff_t len = dirent_namelen (dp); |
| 498 | ptrdiff_t len; | ||
| 499 | bool canexclude = 0; | 502 | bool canexclude = 0; |
| 500 | 503 | ||
| 501 | errno = 0; | ||
| 502 | dp = readdir (d); | ||
| 503 | if (!dp) | ||
| 504 | { | ||
| 505 | if (errno == EAGAIN || errno == EINTR) | ||
| 506 | { | ||
| 507 | QUIT; | ||
| 508 | continue; | ||
| 509 | } | ||
| 510 | break; | ||
| 511 | } | ||
| 512 | |||
| 513 | len = dirent_namelen (dp); | ||
| 514 | |||
| 515 | QUIT; | 504 | QUIT; |
| 516 | if (len < SCHARS (encoded_file) | 505 | if (len < SCHARS (encoded_file) |
| 517 | || (scmp (dp->d_name, SSDATA (encoded_file), | 506 | || (scmp (dp->d_name, SSDATA (encoded_file), |
diff --git a/src/dispextern.h b/src/dispextern.h index 9ea64fb9f63..fbf0c74454d 100644 --- a/src/dispextern.h +++ b/src/dispextern.h | |||
| @@ -1860,10 +1860,10 @@ GLYPH_CODE_P (Lisp_Object gc) | |||
| 1860 | : TYPE_MAXIMUM (EMACS_INT))))); | 1860 | : TYPE_MAXIMUM (EMACS_INT))))); |
| 1861 | } | 1861 | } |
| 1862 | 1862 | ||
| 1863 | /* Non-zero means face attributes have been changed since the last | 1863 | /* True means face attributes have been changed since the last |
| 1864 | redisplay. Used in redisplay_internal. */ | 1864 | redisplay. Used in redisplay_internal. */ |
| 1865 | 1865 | ||
| 1866 | extern int face_change_count; | 1866 | extern bool face_change; |
| 1867 | 1867 | ||
| 1868 | /* For reordering of bidirectional text. */ | 1868 | /* For reordering of bidirectional text. */ |
| 1869 | 1869 | ||
diff --git a/src/emacs.c b/src/emacs.c index 03dea46fe2d..87b1f11d59b 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -234,7 +234,7 @@ Initialization options:\n\ | |||
| 234 | "\ | 234 | "\ |
| 235 | --no-desktop do not load a saved desktop\n\ | 235 | --no-desktop do not load a saved desktop\n\ |
| 236 | --no-init-file, -q load neither ~/.emacs nor default.el\n\ | 236 | --no-init-file, -q load neither ~/.emacs nor default.el\n\ |
| 237 | --no-shared-memory, -nl do not use shared memory\n\ | 237 | --no-loadup, -nl do not load loadup.el into bare Emacs\n\ |
| 238 | --no-site-file do not load site-start.el\n\ | 238 | --no-site-file do not load site-start.el\n\ |
| 239 | --no-site-lisp, -nsl do not add site-lisp directories to load-path\n\ | 239 | --no-site-lisp, -nsl do not add site-lisp directories to load-path\n\ |
| 240 | --no-splash do not display a splash screen on startup\n\ | 240 | --no-splash do not display a splash screen on startup\n\ |
| @@ -2398,9 +2398,7 @@ hpux, irix, usg-unix-v) indicates some sort of Unix system. */); | |||
| 2398 | /* See configure.ac (and config.nt) for the possible SYSTEM_TYPEs. */ | 2398 | /* See configure.ac (and config.nt) for the possible SYSTEM_TYPEs. */ |
| 2399 | 2399 | ||
| 2400 | DEFVAR_LISP ("system-configuration", Vsystem_configuration, | 2400 | DEFVAR_LISP ("system-configuration", Vsystem_configuration, |
| 2401 | doc: /* Value is string indicating configuration Emacs was built for. | 2401 | doc: /* Value is string indicating configuration Emacs was built for. */); |
| 2402 | On MS-Windows, the value reflects the OS flavor and version on which | ||
| 2403 | Emacs is running. */); | ||
| 2404 | Vsystem_configuration = build_string (EMACS_CONFIGURATION); | 2402 | Vsystem_configuration = build_string (EMACS_CONFIGURATION); |
| 2405 | 2403 | ||
| 2406 | DEFVAR_LISP ("system-configuration-options", Vsystem_configuration_options, | 2404 | DEFVAR_LISP ("system-configuration-options", Vsystem_configuration_options, |
diff --git a/src/frame.c b/src/frame.c index 2ce5a623853..e4adfe8f08f 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -3632,7 +3632,7 @@ x_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_valu | |||
| 3632 | 3632 | ||
| 3633 | XSETFRAME (frame, f); | 3633 | XSETFRAME (frame, f); |
| 3634 | x_set_font (f, Fframe_parameter (frame, Qfont), Qnil); | 3634 | x_set_font (f, Fframe_parameter (frame, Qfont), Qnil); |
| 3635 | ++face_change_count; | 3635 | face_change = true; |
| 3636 | windows_or_buffers_changed = 18; | 3636 | windows_or_buffers_changed = 18; |
| 3637 | } | 3637 | } |
| 3638 | } | 3638 | } |
diff --git a/src/indent.c b/src/indent.c index 589aeb9c005..8660400e1ce 100644 --- a/src/indent.c +++ b/src/indent.c | |||
| @@ -2137,10 +2137,15 @@ whether or not it is currently displayed in some window. */) | |||
| 2137 | if (nlines > 1) | 2137 | if (nlines > 1) |
| 2138 | move_it_by_lines (&it, min (PTRDIFF_MAX, nlines - 1)); | 2138 | move_it_by_lines (&it, min (PTRDIFF_MAX, nlines - 1)); |
| 2139 | } | 2139 | } |
| 2140 | else | 2140 | else /* it_start = ZV */ |
| 2141 | { | 2141 | { |
| 2142 | it.vpos = 0; | 2142 | it.vpos = 0; |
| 2143 | move_it_by_lines (&it, min (PTRDIFF_MAX, nlines)); | 2143 | move_it_by_lines (&it, min (PTRDIFF_MAX, nlines)); |
| 2144 | /* We could have some display or overlay string at ZV, | ||
| 2145 | in which case it.vpos will be nonzero now, while | ||
| 2146 | actually we didn't move vertically at all. */ | ||
| 2147 | if (IT_CHARPOS (it) == CHARPOS (pt) && CHARPOS (pt) == it_start) | ||
| 2148 | it.vpos = 0; | ||
| 2144 | } | 2149 | } |
| 2145 | } | 2150 | } |
| 2146 | 2151 | ||
diff --git a/src/insdel.c b/src/insdel.c index 3b5b520aac8..80650be25ae 100644 --- a/src/insdel.c +++ b/src/insdel.c | |||
| @@ -1,7 +1,6 @@ | |||
| 1 | /* Buffer insertion/deletion and gap motion for GNU Emacs. | 1 | /* Buffer insertion/deletion and gap motion for GNU Emacs. |
| 2 | 2 | Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software | |
| 3 | Copyright (C) 1985-1986, 1993-1995, 1997-2015 Free Software Foundation, | 3 | Foundation, Inc. |
| 4 | Inc. | ||
| 5 | 4 | ||
| 6 | This file is part of GNU Emacs. | 5 | This file is part of GNU Emacs. |
| 7 | 6 | ||
diff --git a/src/keyboard.c b/src/keyboard.c index a5e1363326c..a9ff77d0473 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -2288,30 +2288,41 @@ read_decoded_event_from_main_queue (struct timespec *end_time, | |||
| 2288 | { /* An encoded byte sequence, let's try to decode it. */ | 2288 | { /* An encoded byte sequence, let's try to decode it. */ |
| 2289 | struct coding_system *coding | 2289 | struct coding_system *coding |
| 2290 | = TERMINAL_KEYBOARD_CODING (terminal); | 2290 | = TERMINAL_KEYBOARD_CODING (terminal); |
| 2291 | unsigned char src[MAX_ENCODED_BYTES]; | 2291 | |
| 2292 | unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH]; | 2292 | if (raw_text_coding_system_p (coding)) |
| 2293 | int i; | 2293 | { |
| 2294 | for (i = 0; i < n; i++) | 2294 | int i; |
| 2295 | src[i] = XINT (events[i]); | 2295 | if (meta_key != 2) |
| 2296 | if (meta_key != 2) | 2296 | for (i = 0; i < n; i++) |
| 2297 | for (i = 0; i < n; i++) | 2297 | events[i] = make_number (XINT (events[i]) & ~0x80); |
| 2298 | src[i] &= ~0x80; | ||
| 2299 | coding->destination = dest; | ||
| 2300 | coding->dst_bytes = sizeof dest; | ||
| 2301 | decode_coding_c_string (coding, src, n, Qnil); | ||
| 2302 | eassert (coding->produced_char <= n); | ||
| 2303 | if (coding->produced_char == 0) | ||
| 2304 | { /* The encoded sequence is incomplete. */ | ||
| 2305 | if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */ | ||
| 2306 | continue; /* Read on! */ | ||
| 2307 | } | 2298 | } |
| 2308 | else | 2299 | else |
| 2309 | { | 2300 | { |
| 2310 | const unsigned char *p = coding->destination; | 2301 | unsigned char src[MAX_ENCODED_BYTES]; |
| 2311 | eassert (coding->carryover_bytes == 0); | 2302 | unsigned char dest[MAX_ENCODED_BYTES * MAX_MULTIBYTE_LENGTH]; |
| 2312 | n = 0; | 2303 | int i; |
| 2313 | while (n < coding->produced_char) | 2304 | for (i = 0; i < n; i++) |
| 2314 | events[n++] = make_number (STRING_CHAR_ADVANCE (p)); | 2305 | src[i] = XINT (events[i]); |
| 2306 | if (meta_key != 2) | ||
| 2307 | for (i = 0; i < n; i++) | ||
| 2308 | src[i] &= ~0x80; | ||
| 2309 | coding->destination = dest; | ||
| 2310 | coding->dst_bytes = sizeof dest; | ||
| 2311 | decode_coding_c_string (coding, src, n, Qnil); | ||
| 2312 | eassert (coding->produced_char <= n); | ||
| 2313 | if (coding->produced_char == 0) | ||
| 2314 | { /* The encoded sequence is incomplete. */ | ||
| 2315 | if (n < MAX_ENCODED_BYTES) /* Avoid buffer overflow. */ | ||
| 2316 | continue; /* Read on! */ | ||
| 2317 | } | ||
| 2318 | else | ||
| 2319 | { | ||
| 2320 | const unsigned char *p = coding->destination; | ||
| 2321 | eassert (coding->carryover_bytes == 0); | ||
| 2322 | n = 0; | ||
| 2323 | while (n < coding->produced_char) | ||
| 2324 | events[n++] = make_number (STRING_CHAR_ADVANCE (p)); | ||
| 2325 | } | ||
| 2315 | } | 2326 | } |
| 2316 | } | 2327 | } |
| 2317 | /* Now `events' should hold decoded events. | 2328 | /* Now `events' should hold decoded events. |
| @@ -3639,7 +3650,9 @@ kbd_buffer_store_event_hold (register struct input_event *event, | |||
| 3639 | as input, set quit-flag to cause an interrupt. */ | 3650 | as input, set quit-flag to cause an interrupt. */ |
| 3640 | if (!NILP (Vthrow_on_input) | 3651 | if (!NILP (Vthrow_on_input) |
| 3641 | && event->kind != FOCUS_IN_EVENT | 3652 | && event->kind != FOCUS_IN_EVENT |
| 3653 | && event->kind != FOCUS_OUT_EVENT | ||
| 3642 | && event->kind != HELP_EVENT | 3654 | && event->kind != HELP_EVENT |
| 3655 | && event->kind != ICONIFY_EVENT | ||
| 3643 | && event->kind != DEICONIFY_EVENT) | 3656 | && event->kind != DEICONIFY_EVENT) |
| 3644 | { | 3657 | { |
| 3645 | Vquit_flag = Vthrow_on_input; | 3658 | Vquit_flag = Vthrow_on_input; |
diff --git a/src/lisp.mk b/src/lisp.mk index a9deb2b53d9..ee2a07c0fd7 100644 --- a/src/lisp.mk +++ b/src/lisp.mk | |||
| @@ -71,6 +71,7 @@ lisp = \ | |||
| 71 | $(lispsource)/faces.elc \ | 71 | $(lispsource)/faces.elc \ |
| 72 | $(lispsource)/button.elc \ | 72 | $(lispsource)/button.elc \ |
| 73 | $(lispsource)/startup.elc \ | 73 | $(lispsource)/startup.elc \ |
| 74 | $(lispsource)/emacs-lisp/cl-preloaded.elc \ | ||
| 74 | $(lispsource)/emacs-lisp/nadvice.elc \ | 75 | $(lispsource)/emacs-lisp/nadvice.elc \ |
| 75 | $(lispsource)/minibuffer.elc \ | 76 | $(lispsource)/minibuffer.elc \ |
| 76 | $(lispsource)/abbrev.elc \ | 77 | $(lispsource)/abbrev.elc \ |
diff --git a/src/msdos.c b/src/msdos.c index 3c2277e6955..8b05b34795d 100644 --- a/src/msdos.c +++ b/src/msdos.c | |||
| @@ -1733,7 +1733,7 @@ IT_set_frame_parameters (struct frame *f, Lisp_Object alist) | |||
| 1733 | 1733 | ||
| 1734 | if (redraw) | 1734 | if (redraw) |
| 1735 | { | 1735 | { |
| 1736 | face_change_count++; /* forces xdisp.c to recompute basic faces */ | 1736 | face_change = true; /* forces xdisp.c to recompute basic faces */ |
| 1737 | if (f == SELECTED_FRAME ()) | 1737 | if (f == SELECTED_FRAME ()) |
| 1738 | redraw_frame (f); | 1738 | redraw_frame (f); |
| 1739 | } | 1739 | } |
diff --git a/src/nsterm.m b/src/nsterm.m index ee1268ef850..e90c3d70db3 100644 --- a/src/nsterm.m +++ b/src/nsterm.m | |||
| @@ -6773,7 +6773,9 @@ if (cols > 0 && rows > 0) | |||
| 6773 | return; | 6773 | return; |
| 6774 | 6774 | ||
| 6775 | ns_clear_frame_area (emacsframe, x, y, width, height); | 6775 | ns_clear_frame_area (emacsframe, x, y, width, height); |
| 6776 | block_input (); | ||
| 6776 | expose_frame (emacsframe, x, y, width, height); | 6777 | expose_frame (emacsframe, x, y, width, height); |
| 6778 | unblock_input (); | ||
| 6777 | 6779 | ||
| 6778 | /* | 6780 | /* |
| 6779 | drawRect: may be called (at least in OS X 10.5) for invisible | 6781 | drawRect: may be called (at least in OS X 10.5) for invisible |
| @@ -3433,17 +3433,51 @@ sys_readdir (DIR *dirp) | |||
| 3433 | } | 3433 | } |
| 3434 | 3434 | ||
| 3435 | if (dir_find_handle == INVALID_HANDLE_VALUE) | 3435 | if (dir_find_handle == INVALID_HANDLE_VALUE) |
| 3436 | return NULL; | 3436 | { |
| 3437 | /* Any changes in the value of errno here should be in sync | ||
| 3438 | with what directory_files_internal does when it calls | ||
| 3439 | readdir. */ | ||
| 3440 | switch (GetLastError ()) | ||
| 3441 | { | ||
| 3442 | /* Windows uses this value when FindFirstFile finds no | ||
| 3443 | files that match the wildcard. This is not supposed | ||
| 3444 | to happen, since our wildcard is "*", but just in | ||
| 3445 | case, if there's some weird empty directory with not | ||
| 3446 | even "." and ".." entries... */ | ||
| 3447 | case ERROR_FILE_NOT_FOUND: | ||
| 3448 | errno = 0; | ||
| 3449 | /* FALLTHRU */ | ||
| 3450 | default: | ||
| 3451 | break; | ||
| 3452 | case ERROR_ACCESS_DENIED: | ||
| 3453 | case ERROR_NETWORK_ACCESS_DENIED: | ||
| 3454 | errno = EACCES; | ||
| 3455 | break; | ||
| 3456 | case ERROR_PATH_NOT_FOUND: | ||
| 3457 | case ERROR_INVALID_DRIVE: | ||
| 3458 | case ERROR_BAD_NETPATH: | ||
| 3459 | case ERROR_BAD_NET_NAME: | ||
| 3460 | errno = ENOENT; | ||
| 3461 | break; | ||
| 3462 | } | ||
| 3463 | return NULL; | ||
| 3464 | } | ||
| 3437 | } | 3465 | } |
| 3438 | else if (w32_unicode_filenames) | 3466 | else if (w32_unicode_filenames) |
| 3439 | { | 3467 | { |
| 3440 | if (!FindNextFileW (dir_find_handle, &dir_find_data_w)) | 3468 | if (!FindNextFileW (dir_find_handle, &dir_find_data_w)) |
| 3441 | return NULL; | 3469 | { |
| 3470 | errno = 0; | ||
| 3471 | return NULL; | ||
| 3472 | } | ||
| 3442 | } | 3473 | } |
| 3443 | else | 3474 | else |
| 3444 | { | 3475 | { |
| 3445 | if (!FindNextFileA (dir_find_handle, &dir_find_data_a)) | 3476 | if (!FindNextFileA (dir_find_handle, &dir_find_data_a)) |
| 3446 | return NULL; | 3477 | { |
| 3478 | errno = 0; | ||
| 3479 | return NULL; | ||
| 3480 | } | ||
| 3447 | } | 3481 | } |
| 3448 | 3482 | ||
| 3449 | /* Emacs never uses this value, so don't bother making it match | 3483 | /* Emacs never uses this value, so don't bother making it match |
| @@ -3545,7 +3579,11 @@ open_unc_volume (const char *path) | |||
| 3545 | if (result == NO_ERROR) | 3579 | if (result == NO_ERROR) |
| 3546 | return henum; | 3580 | return henum; |
| 3547 | else | 3581 | else |
| 3548 | return INVALID_HANDLE_VALUE; | 3582 | { |
| 3583 | /* Make sure directory_files_internal reports a sensible error. */ | ||
| 3584 | errno = ENOENT; | ||
| 3585 | return INVALID_HANDLE_VALUE; | ||
| 3586 | } | ||
| 3549 | } | 3587 | } |
| 3550 | 3588 | ||
| 3551 | static void * | 3589 | static void * |
diff --git a/src/w32fns.c b/src/w32fns.c index c269c4f8e68..8435270438d 100644 --- a/src/w32fns.c +++ b/src/w32fns.c | |||
| @@ -1759,6 +1759,50 @@ x_change_tool_bar_height (struct frame *f, int height) | |||
| 1759 | x_clear_under_internal_border (f); | 1759 | x_clear_under_internal_border (f); |
| 1760 | } | 1760 | } |
| 1761 | 1761 | ||
| 1762 | static void | ||
| 1763 | w32_set_title_bar_text (struct frame *f, Lisp_Object name) | ||
| 1764 | { | ||
| 1765 | if (FRAME_W32_WINDOW (f)) | ||
| 1766 | { | ||
| 1767 | block_input (); | ||
| 1768 | #ifdef __CYGWIN__ | ||
| 1769 | GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f), | ||
| 1770 | GUI_SDATA (GUI_ENCODE_SYSTEM (name))); | ||
| 1771 | #else | ||
| 1772 | /* The frame's title many times shows the name of the file | ||
| 1773 | visited in the selected window's buffer, so it makes sense to | ||
| 1774 | support non-ASCII characters outside of the current system | ||
| 1775 | codepage in the title. */ | ||
| 1776 | if (w32_unicode_filenames) | ||
| 1777 | { | ||
| 1778 | Lisp_Object encoded_title = ENCODE_UTF_8 (name); | ||
| 1779 | wchar_t *title_w; | ||
| 1780 | int tlen = pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title), | ||
| 1781 | -1, NULL, 0); | ||
| 1782 | |||
| 1783 | if (tlen > 0) | ||
| 1784 | { | ||
| 1785 | /* Windows truncates the title text beyond what fits on | ||
| 1786 | a single line, so we can limit the length to some | ||
| 1787 | reasonably large value, and use alloca. */ | ||
| 1788 | if (tlen > 10000) | ||
| 1789 | tlen = 10000; | ||
| 1790 | title_w = alloca ((tlen + 1) * sizeof (wchar_t)); | ||
| 1791 | pMultiByteToWideChar (CP_UTF8, 0, SSDATA (encoded_title), -1, | ||
| 1792 | title_w, tlen); | ||
| 1793 | title_w[tlen] = L'\0'; | ||
| 1794 | SetWindowTextW (FRAME_W32_WINDOW (f), title_w); | ||
| 1795 | } | ||
| 1796 | else /* Conversion to UTF-16 failed, so we punt. */ | ||
| 1797 | SetWindowTextA (FRAME_W32_WINDOW (f), | ||
| 1798 | SSDATA (ENCODE_SYSTEM (name))); | ||
| 1799 | } | ||
| 1800 | else | ||
| 1801 | SetWindowTextA (FRAME_W32_WINDOW (f), SSDATA (ENCODE_SYSTEM (name))); | ||
| 1802 | #endif | ||
| 1803 | unblock_input (); | ||
| 1804 | } | ||
| 1805 | } | ||
| 1762 | 1806 | ||
| 1763 | /* Change the name of frame F to NAME. If NAME is nil, set F's name to | 1807 | /* Change the name of frame F to NAME. If NAME is nil, set F's name to |
| 1764 | w32_id_name. | 1808 | w32_id_name. |
| @@ -1812,13 +1856,7 @@ x_set_name (struct frame *f, Lisp_Object name, bool explicit) | |||
| 1812 | if (! NILP (f->title)) | 1856 | if (! NILP (f->title)) |
| 1813 | name = f->title; | 1857 | name = f->title; |
| 1814 | 1858 | ||
| 1815 | if (FRAME_W32_WINDOW (f)) | 1859 | w32_set_title_bar_text (f, name); |
| 1816 | { | ||
| 1817 | block_input (); | ||
| 1818 | GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f), | ||
| 1819 | GUI_SDATA (GUI_ENCODE_SYSTEM (name))); | ||
| 1820 | unblock_input (); | ||
| 1821 | } | ||
| 1822 | } | 1860 | } |
| 1823 | 1861 | ||
| 1824 | /* This function should be called when the user's lisp code has | 1862 | /* This function should be called when the user's lisp code has |
| @@ -1856,13 +1894,7 @@ x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name) | |||
| 1856 | if (NILP (name)) | 1894 | if (NILP (name)) |
| 1857 | name = f->name; | 1895 | name = f->name; |
| 1858 | 1896 | ||
| 1859 | if (FRAME_W32_WINDOW (f)) | 1897 | w32_set_title_bar_text (f, name); |
| 1860 | { | ||
| 1861 | block_input (); | ||
| 1862 | GUI_FN (SetWindowText) (FRAME_W32_WINDOW (f), | ||
| 1863 | GUI_SDATA (GUI_ENCODE_SYSTEM (name))); | ||
| 1864 | unblock_input (); | ||
| 1865 | } | ||
| 1866 | } | 1898 | } |
| 1867 | 1899 | ||
| 1868 | void | 1900 | void |
| @@ -4895,25 +4927,38 @@ If omitted or nil, that stands for the selected frame's display. */) | |||
| 4895 | } | 4927 | } |
| 4896 | 4928 | ||
| 4897 | DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, | 4929 | DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, |
| 4898 | doc: /* Return the "vendor ID" string of the W32 system (Microsoft). | 4930 | doc: /* Return the "vendor ID" string of the GUI software on TERMINAL. |
| 4899 | The optional argument DISPLAY specifies which display to ask about. | 4931 | |
| 4900 | DISPLAY should be either a frame or a display name (a string). | 4932 | \(Labeling every distributor as a "vendor" embodies the false assumption |
| 4933 | that operating systems cannot be developed and distributed noncommercially.) | ||
| 4934 | |||
| 4935 | For GNU and Unix systems, this queries the X server software; for | ||
| 4936 | MS-Windows, this queries the OS. | ||
| 4937 | |||
| 4938 | The optional argument TERMINAL specifies which display to ask about. | ||
| 4939 | TERMINAL should be a terminal object, a frame or a display name (a string). | ||
| 4901 | If omitted or nil, that stands for the selected frame's display. */) | 4940 | If omitted or nil, that stands for the selected frame's display. */) |
| 4902 | (Lisp_Object display) | 4941 | (Lisp_Object terminal) |
| 4903 | { | 4942 | { |
| 4904 | return build_string ("Microsoft Corp."); | 4943 | return build_string ("Microsoft Corp."); |
| 4905 | } | 4944 | } |
| 4906 | 4945 | ||
| 4907 | DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0, | 4946 | DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0, |
| 4908 | doc: /* Return the version numbers of the server of DISPLAY. | 4947 | doc: /* Return the version numbers of the GUI software on TERMINAL. |
| 4909 | The value is a list of three integers: the major and minor | 4948 | The value is a list of three integers specifying the version of the GUI |
| 4910 | version numbers of the X Protocol in use, and the distributor-specific | 4949 | software in use. |
| 4911 | release number. See also the function `x-server-vendor'. | ||
| 4912 | 4950 | ||
| 4913 | The optional argument DISPLAY specifies which display to ask about. | 4951 | For GNU and Unix system, the first 2 numbers are the version of the X |
| 4914 | DISPLAY should be either a frame or a display name (a string). | 4952 | Protocol used on TERMINAL and the 3rd number is the distributor-specific |
| 4953 | release number. For MS-Windows, the 3 numbers report the version and | ||
| 4954 | the build number of the OS. | ||
| 4955 | |||
| 4956 | See also the function `x-server-vendor'. | ||
| 4957 | |||
| 4958 | The optional argument TERMINAL specifies which display to ask about. | ||
| 4959 | TERMINAL should be a terminal object, a frame or a display name (a string). | ||
| 4915 | If omitted or nil, that stands for the selected frame's display. */) | 4960 | If omitted or nil, that stands for the selected frame's display. */) |
| 4916 | (Lisp_Object display) | 4961 | (Lisp_Object terminal) |
| 4917 | { | 4962 | { |
| 4918 | return list3i (w32_major_version, w32_minor_version, w32_build_number); | 4963 | return list3i (w32_major_version, w32_minor_version, w32_build_number); |
| 4919 | } | 4964 | } |
| @@ -5623,7 +5668,7 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, | |||
| 5623 | ptrdiff_t count = SPECPDL_INDEX (); | 5668 | ptrdiff_t count = SPECPDL_INDEX (); |
| 5624 | struct gcpro gcpro1, gcpro2, gcpro3; | 5669 | struct gcpro gcpro1, gcpro2, gcpro3; |
| 5625 | struct kboard *kb; | 5670 | struct kboard *kb; |
| 5626 | int face_change_count_before = face_change_count; | 5671 | bool face_change_before = face_change; |
| 5627 | Lisp_Object buffer; | 5672 | Lisp_Object buffer; |
| 5628 | struct buffer *old_buffer; | 5673 | struct buffer *old_buffer; |
| 5629 | 5674 | ||
| @@ -5835,11 +5880,11 @@ x_create_tip_frame (struct w32_display_info *dpyinfo, | |||
| 5835 | f->can_x_set_window_size = true; | 5880 | f->can_x_set_window_size = true; |
| 5836 | 5881 | ||
| 5837 | /* Setting attributes of faces of the tooltip frame from resources | 5882 | /* Setting attributes of faces of the tooltip frame from resources |
| 5838 | and similar will increment face_change_count, which leads to the | 5883 | and similar will set face_change, which leads to the |
| 5839 | clearing of all current matrices. Since this isn't necessary | 5884 | clearing of all current matrices. Since this isn't necessary |
| 5840 | here, avoid it by resetting face_change_count to the value it | 5885 | here, avoid it by resetting face_change to the value it |
| 5841 | had before we created the tip frame. */ | 5886 | had before we created the tip frame. */ |
| 5842 | face_change_count = face_change_count_before; | 5887 | face_change = face_change_before; |
| 5843 | 5888 | ||
| 5844 | /* Discard the unwind_protect. */ | 5889 | /* Discard the unwind_protect. */ |
| 5845 | return unbind_to (count, frame); | 5890 | return unbind_to (count, frame); |
diff --git a/src/w32font.c b/src/w32font.c index ab772679908..360ad3f1c48 100644 --- a/src/w32font.c +++ b/src/w32font.c | |||
| @@ -95,7 +95,7 @@ struct font_callback_data | |||
| 95 | /* The list to add matches to. */ | 95 | /* The list to add matches to. */ |
| 96 | Lisp_Object list; | 96 | Lisp_Object list; |
| 97 | /* Whether to match only opentype fonts. */ | 97 | /* Whether to match only opentype fonts. */ |
| 98 | int opentype_only; | 98 | bool opentype_only; |
| 99 | }; | 99 | }; |
| 100 | 100 | ||
| 101 | /* Handles the problem that EnumFontFamiliesEx will not return all | 101 | /* Handles the problem that EnumFontFamiliesEx will not return all |
| @@ -746,7 +746,8 @@ w32font_otf_drive (struct font *font, Lisp_Object features, | |||
| 746 | Additional parameter opentype_only restricts the returned fonts to | 746 | Additional parameter opentype_only restricts the returned fonts to |
| 747 | opentype fonts, which can be used with the Uniscribe backend. */ | 747 | opentype fonts, which can be used with the Uniscribe backend. */ |
| 748 | Lisp_Object | 748 | Lisp_Object |
| 749 | w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only) | 749 | w32font_list_internal (struct frame *f, Lisp_Object font_spec, |
| 750 | bool opentype_only) | ||
| 750 | { | 751 | { |
| 751 | struct font_callback_data match_data; | 752 | struct font_callback_data match_data; |
| 752 | HDC dc; | 753 | HDC dc; |
| @@ -798,7 +799,8 @@ w32font_list_internal (struct frame *f, Lisp_Object font_spec, int opentype_only | |||
| 798 | Additional parameter opentype_only restricts the returned fonts to | 799 | Additional parameter opentype_only restricts the returned fonts to |
| 799 | opentype fonts, which can be used with the Uniscribe backend. */ | 800 | opentype fonts, which can be used with the Uniscribe backend. */ |
| 800 | Lisp_Object | 801 | Lisp_Object |
| 801 | w32font_match_internal (struct frame *f, Lisp_Object font_spec, int opentype_only) | 802 | w32font_match_internal (struct frame *f, Lisp_Object font_spec, |
| 803 | bool opentype_only) | ||
| 802 | { | 804 | { |
| 803 | struct font_callback_data match_data; | 805 | struct font_callback_data match_data; |
| 804 | HDC dc; | 806 | HDC dc; |
| @@ -2459,7 +2461,7 @@ w32font_filter_properties (Lisp_Object font, Lisp_Object alist) | |||
| 2459 | struct font_driver w32font_driver = | 2461 | struct font_driver w32font_driver = |
| 2460 | { | 2462 | { |
| 2461 | LISP_INITIALLY_ZERO, /* Qgdi */ | 2463 | LISP_INITIALLY_ZERO, /* Qgdi */ |
| 2462 | 0, /* case insensitive */ | 2464 | false, /* case insensitive */ |
| 2463 | w32font_get_cache, | 2465 | w32font_get_cache, |
| 2464 | w32font_list, | 2466 | w32font_list, |
| 2465 | w32font_match, | 2467 | w32font_match, |
diff --git a/src/w32font.h b/src/w32font.h index 82c5e09b9fc..0ad01254be9 100644 --- a/src/w32font.h +++ b/src/w32font.h | |||
| @@ -66,10 +66,10 @@ struct w32font_info | |||
| 66 | Lisp_Object w32font_get_cache (struct frame *fe); | 66 | Lisp_Object w32font_get_cache (struct frame *fe); |
| 67 | Lisp_Object w32font_list_internal (struct frame *f, | 67 | Lisp_Object w32font_list_internal (struct frame *f, |
| 68 | Lisp_Object font_spec, | 68 | Lisp_Object font_spec, |
| 69 | int opentype_only); | 69 | bool opentype_only); |
| 70 | Lisp_Object w32font_match_internal (struct frame *f, | 70 | Lisp_Object w32font_match_internal (struct frame *f, |
| 71 | Lisp_Object font_spec, | 71 | Lisp_Object font_spec, |
| 72 | int opentype_only); | 72 | bool opentype_only); |
| 73 | int w32font_open_internal (struct frame *f, Lisp_Object font_entity, | 73 | int w32font_open_internal (struct frame *f, Lisp_Object font_entity, |
| 74 | int pixel_size, Lisp_Object font_object); | 74 | int pixel_size, Lisp_Object font_object); |
| 75 | void w32font_close (struct font *font); | 75 | void w32font_close (struct font *font); |
diff --git a/src/w32heap.c b/src/w32heap.c index d5a9dae0aa4..ee0eb161502 100644 --- a/src/w32heap.c +++ b/src/w32heap.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* Heap management routines for GNU Emacs on the Microsoft Windows | 1 | /* Heap management routines for GNU Emacs on the Microsoft Windows API. |
| 2 | API. Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc. | 2 | Copyright (C) 1994, 2001-2015 Free Software Foundation, Inc. |
| 3 | 3 | ||
| 4 | This file is part of GNU Emacs. | 4 | This file is part of GNU Emacs. |
| 5 | 5 | ||
diff --git a/src/w32menu.c b/src/w32menu.c index 2a1dafbd6d7..40b8f5f82a0 100644 --- a/src/w32menu.c +++ b/src/w32menu.c | |||
| @@ -103,7 +103,7 @@ void set_frame_menubar (struct frame *, bool, bool); | |||
| 103 | #ifdef HAVE_DIALOGS | 103 | #ifdef HAVE_DIALOGS |
| 104 | static Lisp_Object w32_dialog_show (struct frame *, Lisp_Object, Lisp_Object, char **); | 104 | static Lisp_Object w32_dialog_show (struct frame *, Lisp_Object, Lisp_Object, char **); |
| 105 | #else | 105 | #else |
| 106 | static int is_simple_dialog (Lisp_Object); | 106 | static bool is_simple_dialog (Lisp_Object); |
| 107 | static Lisp_Object simple_dialog_show (struct frame *, Lisp_Object, Lisp_Object); | 107 | static Lisp_Object simple_dialog_show (struct frame *, Lisp_Object, Lisp_Object); |
| 108 | #endif | 108 | #endif |
| 109 | 109 | ||
| @@ -166,7 +166,7 @@ w32_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents) | |||
| 166 | void | 166 | void |
| 167 | x_activate_menubar (struct frame *f) | 167 | x_activate_menubar (struct frame *f) |
| 168 | { | 168 | { |
| 169 | set_frame_menubar (f, 0, 1); | 169 | set_frame_menubar (f, false, true); |
| 170 | 170 | ||
| 171 | /* Lock out further menubar changes while active. */ | 171 | /* Lock out further menubar changes while active. */ |
| 172 | f->output_data.w32->menubar_active = 1; | 172 | f->output_data.w32->menubar_active = 1; |
| @@ -289,7 +289,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) | |||
| 289 | XSETFRAME (Vmenu_updating_frame, f); | 289 | XSETFRAME (Vmenu_updating_frame, f); |
| 290 | 290 | ||
| 291 | if (! menubar_widget) | 291 | if (! menubar_widget) |
| 292 | deep_p = 1; | 292 | deep_p = true; |
| 293 | 293 | ||
| 294 | if (deep_p) | 294 | if (deep_p) |
| 295 | { | 295 | { |
| @@ -388,7 +388,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) | |||
| 388 | else | 388 | else |
| 389 | first_wv->contents = wv; | 389 | first_wv->contents = wv; |
| 390 | /* Don't set wv->name here; GC during the loop might relocate it. */ | 390 | /* Don't set wv->name here; GC during the loop might relocate it. */ |
| 391 | wv->enabled = 1; | 391 | wv->enabled = true; |
| 392 | wv->button_type = BUTTON_TYPE_NONE; | 392 | wv->button_type = BUTTON_TYPE_NONE; |
| 393 | prev_wv = wv; | 393 | prev_wv = wv; |
| 394 | } | 394 | } |
| @@ -501,7 +501,7 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) | |||
| 501 | /* Force the window size to be recomputed so that the frame's text | 501 | /* Force the window size to be recomputed so that the frame's text |
| 502 | area remains the same, if menubar has just been created. */ | 502 | area remains the same, if menubar has just been created. */ |
| 503 | if (old_widget == NULL) | 503 | if (old_widget == NULL) |
| 504 | adjust_frame_size (f, -1, -1, 2, 0, Qmenu_bar_lines); | 504 | adjust_frame_size (f, -1, -1, 2, false, Qmenu_bar_lines); |
| 505 | } | 505 | } |
| 506 | 506 | ||
| 507 | unblock_input (); | 507 | unblock_input (); |
| @@ -518,7 +518,7 @@ initialize_frame_menubar (struct frame *f) | |||
| 518 | /* This function is called before the first chance to redisplay | 518 | /* This function is called before the first chance to redisplay |
| 519 | the frame. It has to be, so the frame will have the right size. */ | 519 | the frame. It has to be, so the frame will have the right size. */ |
| 520 | fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f))); | 520 | fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f))); |
| 521 | set_frame_menubar (f, 1, 1); | 521 | set_frame_menubar (f, true, true); |
| 522 | } | 522 | } |
| 523 | 523 | ||
| 524 | /* Get rid of the menu bar of frame F, and free its storage. | 524 | /* Get rid of the menu bar of frame F, and free its storage. |
| @@ -570,7 +570,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, | |||
| 570 | Lisp_Object *subprefix_stack | 570 | Lisp_Object *subprefix_stack |
| 571 | = (Lisp_Object *) alloca (menu_items_used * word_size); | 571 | = (Lisp_Object *) alloca (menu_items_used * word_size); |
| 572 | int submenu_depth = 0; | 572 | int submenu_depth = 0; |
| 573 | int first_pane; | 573 | bool first_pane; |
| 574 | 574 | ||
| 575 | *error = NULL; | 575 | *error = NULL; |
| 576 | 576 | ||
| @@ -590,7 +590,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, | |||
| 590 | wv = make_widget_value ("menu", NULL, true, Qnil); | 590 | wv = make_widget_value ("menu", NULL, true, Qnil); |
| 591 | wv->button_type = BUTTON_TYPE_NONE; | 591 | wv->button_type = BUTTON_TYPE_NONE; |
| 592 | first_wv = wv; | 592 | first_wv = wv; |
| 593 | first_pane = 1; | 593 | first_pane = true; |
| 594 | 594 | ||
| 595 | /* Loop over all panes and items, filling in the tree. */ | 595 | /* Loop over all panes and items, filling in the tree. */ |
| 596 | i = 0; | 596 | i = 0; |
| @@ -601,14 +601,14 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, | |||
| 601 | submenu_stack[submenu_depth++] = save_wv; | 601 | submenu_stack[submenu_depth++] = save_wv; |
| 602 | save_wv = prev_wv; | 602 | save_wv = prev_wv; |
| 603 | prev_wv = 0; | 603 | prev_wv = 0; |
| 604 | first_pane = 1; | 604 | first_pane = false; |
| 605 | i++; | 605 | i++; |
| 606 | } | 606 | } |
| 607 | else if (EQ (AREF (menu_items, i), Qlambda)) | 607 | else if (EQ (AREF (menu_items, i), Qlambda)) |
| 608 | { | 608 | { |
| 609 | prev_wv = save_wv; | 609 | prev_wv = save_wv; |
| 610 | save_wv = submenu_stack[--submenu_depth]; | 610 | save_wv = submenu_stack[--submenu_depth]; |
| 611 | first_pane = 0; | 611 | first_pane = false; |
| 612 | i++; | 612 | i++; |
| 613 | } | 613 | } |
| 614 | else if (EQ (AREF (menu_items, i), Qt) | 614 | else if (EQ (AREF (menu_items, i), Qt) |
| @@ -664,7 +664,7 @@ w32_menu_show (struct frame *f, int x, int y, int menuflags, | |||
| 664 | save_wv = wv; | 664 | save_wv = wv; |
| 665 | prev_wv = 0; | 665 | prev_wv = 0; |
| 666 | } | 666 | } |
| 667 | first_pane = 0; | 667 | first_pane = false; |
| 668 | i += MENU_ITEMS_PANE_LENGTH; | 668 | i += MENU_ITEMS_PANE_LENGTH; |
| 669 | } | 669 | } |
| 670 | else | 670 | else |
| @@ -883,8 +883,9 @@ w32_dialog_show (struct frame *f, Lisp_Object title, | |||
| 883 | 883 | ||
| 884 | /* Number of elements seen so far, before boundary. */ | 884 | /* Number of elements seen so far, before boundary. */ |
| 885 | int left_count = 0; | 885 | int left_count = 0; |
| 886 | /* 1 means we've seen the boundary between left-hand elts and right-hand. */ | 886 | /* true means we've seen the boundary between left-hand elts and |
| 887 | int boundary_seen = 0; | 887 | right-hand. */ |
| 888 | bool boundary_seen = false; | ||
| 888 | 889 | ||
| 889 | *error = NULL; | 890 | *error = NULL; |
| 890 | 891 | ||
| @@ -928,7 +929,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title, | |||
| 928 | { | 929 | { |
| 929 | /* This is the boundary between left-side elts | 930 | /* This is the boundary between left-side elts |
| 930 | and right-side elts. Stop incrementing right_count. */ | 931 | and right-side elts. Stop incrementing right_count. */ |
| 931 | boundary_seen = 1; | 932 | boundary_seen = true; |
| 932 | i++; | 933 | i++; |
| 933 | continue; | 934 | continue; |
| 934 | } | 935 | } |
| @@ -986,7 +987,7 @@ w32_dialog_show (struct frame *f, Lisp_Object title, | |||
| 986 | /* Actually create the dialog. */ | 987 | /* Actually create the dialog. */ |
| 987 | dialog_id = widget_id_tick++; | 988 | dialog_id = widget_id_tick++; |
| 988 | menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, | 989 | menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, |
| 989 | f->output_data.w32->widget, 1, 0, | 990 | f->output_data.w32->widget, true, 0, |
| 990 | dialog_selection_callback, 0); | 991 | dialog_selection_callback, 0); |
| 991 | lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE); | 992 | lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE); |
| 992 | 993 | ||
| @@ -1037,25 +1038,25 @@ w32_dialog_show (struct frame *f, Lisp_Object title, | |||
| 1037 | anywhere in Emacs that uses the other specific dialog choices that | 1038 | anywhere in Emacs that uses the other specific dialog choices that |
| 1038 | MessageBox provides. */ | 1039 | MessageBox provides. */ |
| 1039 | 1040 | ||
| 1040 | static int | 1041 | static bool |
| 1041 | is_simple_dialog (Lisp_Object contents) | 1042 | is_simple_dialog (Lisp_Object contents) |
| 1042 | { | 1043 | { |
| 1043 | Lisp_Object options; | 1044 | Lisp_Object options; |
| 1044 | Lisp_Object name, yes, no, other; | 1045 | Lisp_Object name, yes, no, other; |
| 1045 | 1046 | ||
| 1046 | if (!CONSP (contents)) | 1047 | if (!CONSP (contents)) |
| 1047 | return 0; | 1048 | return false; |
| 1048 | options = XCDR (contents); | 1049 | options = XCDR (contents); |
| 1049 | 1050 | ||
| 1050 | yes = build_string ("Yes"); | 1051 | yes = build_string ("Yes"); |
| 1051 | no = build_string ("No"); | 1052 | no = build_string ("No"); |
| 1052 | 1053 | ||
| 1053 | if (!CONSP (options)) | 1054 | if (!CONSP (options)) |
| 1054 | return 0; | 1055 | return false; |
| 1055 | 1056 | ||
| 1056 | name = XCAR (options); | 1057 | name = XCAR (options); |
| 1057 | if (!CONSP (name)) | 1058 | if (!CONSP (name)) |
| 1058 | return 0; | 1059 | return false; |
| 1059 | name = XCAR (name); | 1060 | name = XCAR (name); |
| 1060 | 1061 | ||
| 1061 | if (!NILP (Fstring_equal (name, yes))) | 1062 | if (!NILP (Fstring_equal (name, yes))) |
| @@ -1063,18 +1064,18 @@ is_simple_dialog (Lisp_Object contents) | |||
| 1063 | else if (!NILP (Fstring_equal (name, no))) | 1064 | else if (!NILP (Fstring_equal (name, no))) |
| 1064 | other = yes; | 1065 | other = yes; |
| 1065 | else | 1066 | else |
| 1066 | return 0; | 1067 | return false; |
| 1067 | 1068 | ||
| 1068 | options = XCDR (options); | 1069 | options = XCDR (options); |
| 1069 | if (!CONSP (options)) | 1070 | if (!CONSP (options)) |
| 1070 | return 0; | 1071 | return false; |
| 1071 | 1072 | ||
| 1072 | name = XCAR (options); | 1073 | name = XCAR (options); |
| 1073 | if (!CONSP (name)) | 1074 | if (!CONSP (name)) |
| 1074 | return 0; | 1075 | return false; |
| 1075 | name = XCAR (name); | 1076 | name = XCAR (name); |
| 1076 | if (NILP (Fstring_equal (name, other))) | 1077 | if (NILP (Fstring_equal (name, other))) |
| 1077 | return 0; | 1078 | return false; |
| 1078 | 1079 | ||
| 1079 | /* Check there are no more options. */ | 1080 | /* Check there are no more options. */ |
| 1080 | options = XCDR (options); | 1081 | options = XCDR (options); |
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c index 9cd97e28616..73c0410c7b7 100644 --- a/src/w32uniscribe.c +++ b/src/w32uniscribe.c | |||
| @@ -67,7 +67,7 @@ memq_no_quit (Lisp_Object elt, Lisp_Object list) | |||
| 67 | static Lisp_Object | 67 | static Lisp_Object |
| 68 | uniscribe_list (struct frame *f, Lisp_Object font_spec) | 68 | uniscribe_list (struct frame *f, Lisp_Object font_spec) |
| 69 | { | 69 | { |
| 70 | Lisp_Object fonts = w32font_list_internal (f, font_spec, 1); | 70 | Lisp_Object fonts = w32font_list_internal (f, font_spec, true); |
| 71 | FONT_ADD_LOG ("uniscribe-list", font_spec, fonts); | 71 | FONT_ADD_LOG ("uniscribe-list", font_spec, fonts); |
| 72 | return fonts; | 72 | return fonts; |
| 73 | } | 73 | } |
| @@ -75,7 +75,7 @@ uniscribe_list (struct frame *f, Lisp_Object font_spec) | |||
| 75 | static Lisp_Object | 75 | static Lisp_Object |
| 76 | uniscribe_match (struct frame *f, Lisp_Object font_spec) | 76 | uniscribe_match (struct frame *f, Lisp_Object font_spec) |
| 77 | { | 77 | { |
| 78 | Lisp_Object entity = w32font_match_internal (f, font_spec, 1); | 78 | Lisp_Object entity = w32font_match_internal (f, font_spec, true); |
| 79 | FONT_ADD_LOG ("uniscribe-match", font_spec, entity); | 79 | FONT_ADD_LOG ("uniscribe-match", font_spec, entity); |
| 80 | return entity; | 80 | return entity; |
| 81 | } | 81 | } |
diff --git a/src/xdisp.c b/src/xdisp.c index d868633e25c..01d598fe2c2 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -2730,9 +2730,9 @@ init_iterator (struct it *it, struct window *w, | |||
| 2730 | free realized faces now because they depend on face definitions | 2730 | free realized faces now because they depend on face definitions |
| 2731 | that might have changed. Don't free faces while there might be | 2731 | that might have changed. Don't free faces while there might be |
| 2732 | desired matrices pending which reference these faces. */ | 2732 | desired matrices pending which reference these faces. */ |
| 2733 | if (face_change_count && !inhibit_free_realized_faces) | 2733 | if (face_change && !inhibit_free_realized_faces) |
| 2734 | { | 2734 | { |
| 2735 | face_change_count = 0; | 2735 | face_change = false; |
| 2736 | free_all_realized_faces (Qnil); | 2736 | free_all_realized_faces (Qnil); |
| 2737 | } | 2737 | } |
| 2738 | 2738 | ||
| @@ -9316,6 +9316,7 @@ move_it_to (struct it *it, ptrdiff_t to_charpos, int to_x, int to_y, int to_vpos | |||
| 9316 | && it->current_x == it->last_visible_x - 1 | 9316 | && it->current_x == it->last_visible_x - 1 |
| 9317 | && it->c != '\n' | 9317 | && it->c != '\n' |
| 9318 | && it->c != '\t' | 9318 | && it->c != '\t' |
| 9319 | && it->w->window_end_valid | ||
| 9319 | && it->vpos < it->w->window_end_vpos) | 9320 | && it->vpos < it->w->window_end_vpos) |
| 9320 | { | 9321 | { |
| 9321 | it->continuation_lines_width += it->current_x; | 9322 | it->continuation_lines_width += it->current_x; |
| @@ -13425,10 +13426,10 @@ redisplay_internal (void) | |||
| 13425 | last_glyphless_glyph_frame = NULL; | 13426 | last_glyphless_glyph_frame = NULL; |
| 13426 | last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); | 13427 | last_glyphless_glyph_face_id = (1 << FACE_ID_BITS); |
| 13427 | 13428 | ||
| 13428 | /* If face_change_count is non-zero, init_iterator will free all | 13429 | /* If face_change, init_iterator will free all realized faces, which |
| 13429 | realized faces, which includes the faces referenced from current | 13430 | includes the faces referenced from current matrices. So, we |
| 13430 | matrices. So, we can't reuse current matrices in this case. */ | 13431 | can't reuse current matrices in this case. */ |
| 13431 | if (face_change_count) | 13432 | if (face_change) |
| 13432 | windows_or_buffers_changed = 47; | 13433 | windows_or_buffers_changed = 47; |
| 13433 | 13434 | ||
| 13434 | if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf)) | 13435 | if ((FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf)) |
| @@ -15436,7 +15437,8 @@ try_cursor_movement (Lisp_Object window, struct text_pos startp, int *scroll_ste | |||
| 15436 | /* Likewise there was a check whether window_end_vpos is nil or larger | 15437 | /* Likewise there was a check whether window_end_vpos is nil or larger |
| 15437 | than the window. Now window_end_vpos is int and so never nil, but | 15438 | than the window. Now window_end_vpos is int and so never nil, but |
| 15438 | let's leave eassert to check whether it fits in the window. */ | 15439 | let's leave eassert to check whether it fits in the window. */ |
| 15439 | eassert (w->window_end_vpos < w->current_matrix->nrows); | 15440 | eassert (!w->window_end_valid |
| 15441 | || w->window_end_vpos < w->current_matrix->nrows); | ||
| 15440 | 15442 | ||
| 15441 | /* Handle case where text has not changed, only point, and it has | 15443 | /* Handle case where text has not changed, only point, and it has |
| 15442 | not moved off the frame. */ | 15444 | not moved off the frame. */ |
| @@ -18183,6 +18185,21 @@ try_window_id (struct window *w) | |||
| 18183 | if (f->fonts_changed) | 18185 | if (f->fonts_changed) |
| 18184 | return -1; | 18186 | return -1; |
| 18185 | 18187 | ||
| 18188 | /* The redisplay iterations in display_line above could have | ||
| 18189 | triggered font-lock, which could have done something that | ||
| 18190 | invalidates IT->w window's end-point information, on which we | ||
| 18191 | rely below. E.g., one package, which will remain unnamed, used | ||
| 18192 | to install a font-lock-fontify-region-function that called | ||
| 18193 | bury-buffer, whose side effect is to switch the buffer displayed | ||
| 18194 | by IT->w, and that predictably resets IT->w's window_end_valid | ||
| 18195 | flag, which we already tested at the entry to this function. | ||
| 18196 | Amply punish such packages/modes by giving up on this | ||
| 18197 | optimization in those cases. */ | ||
| 18198 | if (!w->window_end_valid) | ||
| 18199 | { | ||
| 18200 | clear_glyph_matrix (w->desired_matrix); | ||
| 18201 | return -1; | ||
| 18202 | } | ||
| 18186 | 18203 | ||
| 18187 | /* Compute differences in buffer positions, y-positions etc. for | 18204 | /* Compute differences in buffer positions, y-positions etc. for |
| 18188 | lines reused at the bottom of the window. Compute what we can | 18205 | lines reused at the bottom of the window. Compute what we can |
| @@ -25728,6 +25745,15 @@ produce_image_glyph (struct it *it) | |||
| 25728 | enum glyph_row_area area = it->area; | 25745 | enum glyph_row_area area = it->area; |
| 25729 | 25746 | ||
| 25730 | glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; | 25747 | glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
| 25748 | if (it->glyph_row->reversed_p) | ||
| 25749 | { | ||
| 25750 | struct glyph *g; | ||
| 25751 | |||
| 25752 | /* Make room for the new glyph. */ | ||
| 25753 | for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--) | ||
| 25754 | g[1] = *g; | ||
| 25755 | glyph = it->glyph_row->glyphs[it->area]; | ||
| 25756 | } | ||
| 25731 | if (glyph < it->glyph_row->glyphs[area + 1]) | 25757 | if (glyph < it->glyph_row->glyphs[area + 1]) |
| 25732 | { | 25758 | { |
| 25733 | glyph->charpos = CHARPOS (it->position); | 25759 | glyph->charpos = CHARPOS (it->position); |
diff --git a/src/xfaces.c b/src/xfaces.c index 7c9f62683fd..6e01ab08cef 100644 --- a/src/xfaces.c +++ b/src/xfaces.c | |||
| @@ -313,10 +313,10 @@ static int clear_font_table_count; | |||
| 313 | 313 | ||
| 314 | #endif /* HAVE_WINDOW_SYSTEM */ | 314 | #endif /* HAVE_WINDOW_SYSTEM */ |
| 315 | 315 | ||
| 316 | /* Non-zero means face attributes have been changed since the last | 316 | /* True means face attributes have been changed since the last |
| 317 | redisplay. Used in redisplay_internal. */ | 317 | redisplay. Used in redisplay_internal. */ |
| 318 | 318 | ||
| 319 | int face_change_count; | 319 | bool face_change; |
| 320 | 320 | ||
| 321 | /* True means don't display bold text if a face's foreground | 321 | /* True means don't display bold text if a face's foreground |
| 322 | and background colors are the inverse of the default colors of the | 322 | and background colors are the inverse of the default colors of the |
| @@ -694,7 +694,7 @@ Optional THOROUGHLY non-nil means try to free unused fonts, too. */) | |||
| 694 | (Lisp_Object thoroughly) | 694 | (Lisp_Object thoroughly) |
| 695 | { | 695 | { |
| 696 | clear_face_cache (!NILP (thoroughly)); | 696 | clear_face_cache (!NILP (thoroughly)); |
| 697 | ++face_change_count; | 697 | face_change = true; |
| 698 | windows_or_buffers_changed = 53; | 698 | windows_or_buffers_changed = 53; |
| 699 | return Qnil; | 699 | return Qnil; |
| 700 | } | 700 | } |
| @@ -2530,11 +2530,11 @@ Value is a vector of face attributes. */) | |||
| 2530 | /* Changing a named face means that all realized faces depending on | 2530 | /* Changing a named face means that all realized faces depending on |
| 2531 | that face are invalid. Since we cannot tell which realized faces | 2531 | that face are invalid. Since we cannot tell which realized faces |
| 2532 | depend on the face, make sure they are all removed. This is done | 2532 | depend on the face, make sure they are all removed. This is done |
| 2533 | by incrementing face_change_count. The next call to | 2533 | by setting face_change. The next call to init_iterator will then |
| 2534 | init_iterator will then free realized faces. */ | 2534 | free realized faces. */ |
| 2535 | if (NILP (Fget (face, Qface_no_inherit))) | 2535 | if (NILP (Fget (face, Qface_no_inherit))) |
| 2536 | { | 2536 | { |
| 2537 | ++face_change_count; | 2537 | face_change = true; |
| 2538 | windows_or_buffers_changed = 54; | 2538 | windows_or_buffers_changed = 54; |
| 2539 | } | 2539 | } |
| 2540 | 2540 | ||
| @@ -2609,11 +2609,11 @@ The value is TO. */) | |||
| 2609 | /* Changing a named face means that all realized faces depending on | 2609 | /* Changing a named face means that all realized faces depending on |
| 2610 | that face are invalid. Since we cannot tell which realized faces | 2610 | that face are invalid. Since we cannot tell which realized faces |
| 2611 | depend on the face, make sure they are all removed. This is done | 2611 | depend on the face, make sure they are all removed. This is done |
| 2612 | by incrementing face_change_count. The next call to | 2612 | by setting face_change. The next call to init_iterator will then |
| 2613 | init_iterator will then free realized faces. */ | 2613 | free realized faces. */ |
| 2614 | if (NILP (Fget (to, Qface_no_inherit))) | 2614 | if (NILP (Fget (to, Qface_no_inherit))) |
| 2615 | { | 2615 | { |
| 2616 | ++face_change_count; | 2616 | face_change = true; |
| 2617 | windows_or_buffers_changed = 55; | 2617 | windows_or_buffers_changed = 55; |
| 2618 | } | 2618 | } |
| 2619 | 2619 | ||
| @@ -3107,13 +3107,13 @@ FRAME 0 means change the face on all frames, and change the default | |||
| 3107 | /* Changing a named face means that all realized faces depending on | 3107 | /* Changing a named face means that all realized faces depending on |
| 3108 | that face are invalid. Since we cannot tell which realized faces | 3108 | that face are invalid. Since we cannot tell which realized faces |
| 3109 | depend on the face, make sure they are all removed. This is done | 3109 | depend on the face, make sure they are all removed. This is done |
| 3110 | by incrementing face_change_count. The next call to | 3110 | by setting face_change. The next call to init_iterator will then |
| 3111 | init_iterator will then free realized faces. */ | 3111 | free realized faces. */ |
| 3112 | if (!EQ (frame, Qt) | 3112 | if (!EQ (frame, Qt) |
| 3113 | && NILP (Fget (face, Qface_no_inherit)) | 3113 | && NILP (Fget (face, Qface_no_inherit)) |
| 3114 | && NILP (Fequal (old_value, value))) | 3114 | && NILP (Fequal (old_value, value))) |
| 3115 | { | 3115 | { |
| 3116 | ++face_change_count; | 3116 | face_change = true; |
| 3117 | windows_or_buffers_changed = 56; | 3117 | windows_or_buffers_changed = 56; |
| 3118 | } | 3118 | } |
| 3119 | 3119 | ||
| @@ -3281,12 +3281,12 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, | |||
| 3281 | /* Changing a named face means that all realized faces depending on | 3281 | /* Changing a named face means that all realized faces depending on |
| 3282 | that face are invalid. Since we cannot tell which realized faces | 3282 | that face are invalid. Since we cannot tell which realized faces |
| 3283 | depend on the face, make sure they are all removed. This is done | 3283 | depend on the face, make sure they are all removed. This is done |
| 3284 | by incrementing face_change_count. The next call to | 3284 | by setting face_change. The next call to init_iterator will then |
| 3285 | init_iterator will then free realized faces. */ | 3285 | free realized faces. */ |
| 3286 | if (!NILP (face) | 3286 | if (!NILP (face) |
| 3287 | && NILP (Fget (face, Qface_no_inherit))) | 3287 | && NILP (Fget (face, Qface_no_inherit))) |
| 3288 | { | 3288 | { |
| 3289 | ++face_change_count; | 3289 | face_change = true; |
| 3290 | windows_or_buffers_changed = 57; | 3290 | windows_or_buffers_changed = 57; |
| 3291 | } | 3291 | } |
| 3292 | } | 3292 | } |
| @@ -5820,7 +5820,7 @@ is non-nil. */) | |||
| 5820 | (Lisp_Object suppress) | 5820 | (Lisp_Object suppress) |
| 5821 | { | 5821 | { |
| 5822 | tty_suppress_bold_inverse_default_colors_p = !NILP (suppress); | 5822 | tty_suppress_bold_inverse_default_colors_p = !NILP (suppress); |
| 5823 | ++face_change_count; | 5823 | face_change = true; |
| 5824 | return suppress; | 5824 | return suppress; |
| 5825 | } | 5825 | } |
| 5826 | 5826 | ||
diff --git a/src/xfns.c b/src/xfns.c index 9dd00868d7b..65eb6b497f2 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -3542,10 +3542,15 @@ If omitted or nil, that stands for the selected frame's display. */) | |||
| 3542 | } | 3542 | } |
| 3543 | 3543 | ||
| 3544 | DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, | 3544 | DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, |
| 3545 | doc: /* Return the "vendor ID" string of the X server of display TERMINAL. | 3545 | doc: /* Return the "vendor ID" string of the GUI software on TERMINAL. |
| 3546 | |||
| 3546 | \(Labeling every distributor as a "vendor" embodies the false assumption | 3547 | \(Labeling every distributor as a "vendor" embodies the false assumption |
| 3547 | that operating systems cannot be developed and distributed noncommercially.) | 3548 | that operating systems cannot be developed and distributed noncommercially.) |
| 3548 | The optional argument TERMINAL specifies which display to ask about. | 3549 | The optional argument TERMINAL specifies which display to ask about. |
| 3550 | |||
| 3551 | For GNU and Unix systems, this queries the X server software; for | ||
| 3552 | MS-Windows, this queries the OS. | ||
| 3553 | |||
| 3549 | TERMINAL should be a terminal object, a frame or a display name (a string). | 3554 | TERMINAL should be a terminal object, a frame or a display name (a string). |
| 3550 | If omitted or nil, that stands for the selected frame's display. */) | 3555 | If omitted or nil, that stands for the selected frame's display. */) |
| 3551 | (Lisp_Object terminal) | 3556 | (Lisp_Object terminal) |
| @@ -3558,10 +3563,16 @@ If omitted or nil, that stands for the selected frame's display. */) | |||
| 3558 | } | 3563 | } |
| 3559 | 3564 | ||
| 3560 | DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0, | 3565 | DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0, |
| 3561 | doc: /* Return the version numbers of the X server of display TERMINAL. | 3566 | doc: /* Return the version numbers of the GUI software on TERMINAL. |
| 3562 | The value is a list of three integers: the major and minor | 3567 | The value is a list of three integers specifying the version of the GUI |
| 3563 | version numbers of the X Protocol in use, and the distributor-specific release | 3568 | software in use. |
| 3564 | number. See also the function `x-server-vendor'. | 3569 | |
| 3570 | For GNU and Unix system, the first 2 numbers are the version of the X | ||
| 3571 | Protocol used on TERMINAL and the 3rd number is the distributor-specific | ||
| 3572 | release number. For MS-Windows, the 3 numbers report the version and | ||
| 3573 | the build number of the OS. | ||
| 3574 | |||
| 3575 | See also the function `x-server-vendor'. | ||
| 3565 | 3576 | ||
| 3566 | The optional argument TERMINAL specifies which display to ask about. | 3577 | The optional argument TERMINAL specifies which display to ask about. |
| 3567 | TERMINAL should be a terminal object, a frame or a display name (a string). | 3578 | TERMINAL should be a terminal object, a frame or a display name (a string). |
| @@ -4921,7 +4932,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo, | |||
| 4921 | int width, height; | 4932 | int width, height; |
| 4922 | ptrdiff_t count = SPECPDL_INDEX (); | 4933 | ptrdiff_t count = SPECPDL_INDEX (); |
| 4923 | struct gcpro gcpro1, gcpro2, gcpro3; | 4934 | struct gcpro gcpro1, gcpro2, gcpro3; |
| 4924 | int face_change_count_before = face_change_count; | 4935 | bool face_change_before = face_change; |
| 4925 | Lisp_Object buffer; | 4936 | Lisp_Object buffer; |
| 4926 | struct buffer *old_buffer; | 4937 | struct buffer *old_buffer; |
| 4927 | 4938 | ||
| @@ -5218,11 +5229,11 @@ x_create_tip_frame (struct x_display_info *dpyinfo, | |||
| 5218 | f->can_x_set_window_size = true; | 5229 | f->can_x_set_window_size = true; |
| 5219 | 5230 | ||
| 5220 | /* Setting attributes of faces of the tooltip frame from resources | 5231 | /* Setting attributes of faces of the tooltip frame from resources |
| 5221 | and similar will increment face_change_count, which leads to the | 5232 | and similar will set face_change, which leads to the clearing of |
| 5222 | clearing of all current matrices. Since this isn't necessary | 5233 | all current matrices. Since this isn't necessary here, avoid it |
| 5223 | here, avoid it by resetting face_change_count to the value it | 5234 | by resetting face_change to the value it had before we created |
| 5224 | had before we created the tip frame. */ | 5235 | the tip frame. */ |
| 5225 | face_change_count = face_change_count_before; | 5236 | face_change = face_change_before; |
| 5226 | 5237 | ||
| 5227 | /* Discard the unwind_protect. */ | 5238 | /* Discard the unwind_protect. */ |
| 5228 | return unbind_to (count, frame); | 5239 | return unbind_to (count, frame); |
diff --git a/test/ChangeLog b/test/ChangeLog index 61ab8b6595a..a9834cc0f3f 100644 --- a/test/ChangeLog +++ b/test/ChangeLog | |||
| @@ -1,3 +1,38 @@ | |||
| 1 | 2015-01-31 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * automated/eieio-tests.el (eieio-test-23-inheritance-check): Simplify. | ||
| 4 | |||
| 5 | 2015-01-30 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 6 | |||
| 7 | * automated/core-elisp-tests.el (core-elisp-tests-3-backquote): New test. | ||
| 8 | |||
| 9 | 2015-01-28 Fabián Ezequiel Gallina <fgallina@gnu.org> | ||
| 10 | |||
| 11 | * automated/python-tests.el (python-indent-pep8-1) | ||
| 12 | (python-indent-pep8-2, python-indent-pep8-3) | ||
| 13 | (python-indent-after-comment-1, python-indent-after-comment-2) | ||
| 14 | (python-indent-inside-paren-1, python-indent-inside-paren-2) | ||
| 15 | (python-indent-after-block-1, python-indent-after-block-2) | ||
| 16 | (python-indent-after-backslash-1, python-indent-after-backslash-2) | ||
| 17 | (python-indent-after-backslash-3, python-indent-block-enders-1) | ||
| 18 | (python-indent-block-enders-2, python-indent-block-enders-3) | ||
| 19 | (python-indent-block-enders-4, python-indent-block-enders-5) | ||
| 20 | (python-indent-dedenters-1, python-indent-dedenters-2) | ||
| 21 | (python-indent-dedenters-3, python-indent-dedenters-4) | ||
| 22 | (python-indent-dedenters-5, python-indent-dedenters-6) | ||
| 23 | (python-indent-dedenters-7, python-indent-dedenters-8): Fix tests. | ||
| 24 | (python-indent-base-case, python-indent-after-block-3) | ||
| 25 | (python-indent-after-backslash-5, python-indent-inside-paren-3) | ||
| 26 | (python-indent-inside-paren-4, python-indent-inside-paren-5) | ||
| 27 | (python-indent-inside-paren-6, python-indent-inside-string-1) | ||
| 28 | (python-indent-inside-string-2, python-indent-inside-string-3) | ||
| 29 | (python-indent-dedent-line-backspace-1): New Tests. | ||
| 30 | |||
| 31 | 2015-01-28 Glenn Morris <rgm@gnu.org> | ||
| 32 | |||
| 33 | * automated/regexp-tests.el: Require regexp-opt, which is | ||
| 34 | not preloaded --without-x. | ||
| 35 | |||
| 1 | 2015-01-26 Stefan Monnier <monnier@iro.umontreal.ca> | 36 | 2015-01-26 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 37 | ||
| 3 | * automated/cl-generic-tests.el: Try and make sure cl-lib is not | 38 | * automated/cl-generic-tests.el: Try and make sure cl-lib is not |
| @@ -33,6 +68,11 @@ | |||
| 33 | * automated/cl-generic-tests.el (setf cl--generic-2): Make sure | 68 | * automated/cl-generic-tests.el (setf cl--generic-2): Make sure |
| 34 | the setf can be used already in the body of the method. | 69 | the setf can be used already in the body of the method. |
| 35 | 70 | ||
| 71 | 2015-01-20 Jorgen Schaefer <contact@jorgenschaefer.de> | ||
| 72 | |||
| 73 | * automated/package-test.el (package-test-install-prioritized): | ||
| 74 | Remove test due to unreproducible failures. | ||
| 75 | |||
| 36 | 2015-01-20 Michal Nazarewicz <mina86@mina86.com> | 76 | 2015-01-20 Michal Nazarewicz <mina86@mina86.com> |
| 37 | 77 | ||
| 38 | * automated/descr-text-test.el: New file with tests for | 78 | * automated/descr-text-test.el: New file with tests for |
diff --git a/test/automated/core-elisp-tests.el b/test/automated/core-elisp-tests.el index 1b76c767b95..c31ecef4a32 100644 --- a/test/automated/core-elisp-tests.el +++ b/test/automated/core-elisp-tests.el | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | ;;; Code: | 25 | ;;; Code: |
| 26 | 26 | ||
| 27 | (ert-deftest core-elisp-tests () | 27 | (ert-deftest core-elisp-tests-1-defvar-in-let () |
| 28 | "Test some core Elisp rules." | 28 | "Test some core Elisp rules." |
| 29 | (with-temp-buffer | 29 | (with-temp-buffer |
| 30 | ;; Check that when defvar is run within a let-binding, the toplevel default | 30 | ;; Check that when defvar is run within a let-binding, the toplevel default |
| @@ -36,7 +36,7 @@ | |||
| 36 | c-e-x) | 36 | c-e-x) |
| 37 | '(1 2))))) | 37 | '(1 2))))) |
| 38 | 38 | ||
| 39 | (ert-deftest core-elisp-test-window-configurations () | 39 | (ert-deftest core-elisp-tests-2-window-configurations () |
| 40 | "Test properties of window-configurations." | 40 | "Test properties of window-configurations." |
| 41 | (let ((wc (current-window-configuration))) | 41 | (let ((wc (current-window-configuration))) |
| 42 | (with-current-buffer (window-buffer (frame-selected-window)) | 42 | (with-current-buffer (window-buffer (frame-selected-window)) |
| @@ -45,5 +45,8 @@ | |||
| 45 | (set-window-configuration wc) | 45 | (set-window-configuration wc) |
| 46 | (should (or (not mark-active) (mark))))) | 46 | (should (or (not mark-active) (mark))))) |
| 47 | 47 | ||
| 48 | (ert-deftest core-elisp-tests-3-backquote () | ||
| 49 | (should (eq 3 (eval ``,,'(+ 1 2))))) | ||
| 50 | |||
| 48 | (provide 'core-elisp-tests) | 51 | (provide 'core-elisp-tests) |
| 49 | ;;; core-elisp-tests.el ends here | 52 | ;;; core-elisp-tests.el ends here |
diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el index 847aefd63fc..7532609c4c3 100644 --- a/test/automated/eieio-tests.el +++ b/test/automated/eieio-tests.el | |||
| @@ -537,9 +537,8 @@ METHOD is the method that was attempting to be called." | |||
| 537 | (should (object-of-class-p eitest-ab 'class-b)) | 537 | (should (object-of-class-p eitest-ab 'class-b)) |
| 538 | (should (object-of-class-p eitest-ab 'class-ab)) | 538 | (should (object-of-class-p eitest-ab 'class-ab)) |
| 539 | (should (eq (eieio-class-parents 'class-a) nil)) | 539 | (should (eq (eieio-class-parents 'class-a) nil)) |
| 540 | ;; FIXME: eieio-class-parents now returns class objects! | 540 | (should (equal (eieio-class-parents 'class-ab) |
| 541 | (should (equal (mapcar #'eieio-class-object (eieio-class-parents 'class-ab)) | 541 | (mapcar #'find-class '(class-a class-b)))) |
| 542 | (mapcar #'eieio-class-object '(class-a class-b)))) | ||
| 543 | (should (same-class-p eitest-a 'class-a)) | 542 | (should (same-class-p eitest-a 'class-a)) |
| 544 | (should (class-a-p eitest-a)) | 543 | (should (class-a-p eitest-a)) |
| 545 | (should (not (class-a-p eitest-ab))) | 544 | (should (not (class-a-p eitest-ab))) |
diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index e989ccb6792..672b05c39de 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el | |||
| @@ -174,13 +174,13 @@ aliqua." | |||
| 174 | foo = long_function_name(var_one, var_two, | 174 | foo = long_function_name(var_one, var_two, |
| 175 | var_three, var_four) | 175 | var_three, var_four) |
| 176 | " | 176 | " |
| 177 | (should (eq (car (python-indent-context)) 'no-indent)) | 177 | (should (eq (car (python-indent-context)) :no-indent)) |
| 178 | (should (= (python-indent-calculate-indentation) 0)) | 178 | (should (= (python-indent-calculate-indentation) 0)) |
| 179 | (python-tests-look-at "foo = long_function_name(var_one, var_two,") | 179 | (python-tests-look-at "foo = long_function_name(var_one, var_two,") |
| 180 | (should (eq (car (python-indent-context)) 'after-line)) | 180 | (should (eq (car (python-indent-context)) :after-line)) |
| 181 | (should (= (python-indent-calculate-indentation) 0)) | 181 | (should (= (python-indent-calculate-indentation) 0)) |
| 182 | (python-tests-look-at "var_three, var_four)") | 182 | (python-tests-look-at "var_three, var_four)") |
| 183 | (should (eq (car (python-indent-context)) 'inside-paren)) | 183 | (should (eq (car (python-indent-context)) :inside-paren)) |
| 184 | (should (= (python-indent-calculate-indentation) 25)))) | 184 | (should (= (python-indent-calculate-indentation) 25)))) |
| 185 | 185 | ||
| 186 | (ert-deftest python-indent-pep8-2 () | 186 | (ert-deftest python-indent-pep8-2 () |
| @@ -192,19 +192,22 @@ def long_function_name( | |||
| 192 | var_four): | 192 | var_four): |
| 193 | print (var_one) | 193 | print (var_one) |
| 194 | " | 194 | " |
| 195 | (should (eq (car (python-indent-context)) 'no-indent)) | 195 | (should (eq (car (python-indent-context)) :no-indent)) |
| 196 | (should (= (python-indent-calculate-indentation) 0)) | 196 | (should (= (python-indent-calculate-indentation) 0)) |
| 197 | (python-tests-look-at "def long_function_name(") | 197 | (python-tests-look-at "def long_function_name(") |
| 198 | (should (eq (car (python-indent-context)) 'after-line)) | 198 | (should (eq (car (python-indent-context)) :after-line)) |
| 199 | (should (= (python-indent-calculate-indentation) 0)) | 199 | (should (= (python-indent-calculate-indentation) 0)) |
| 200 | (python-tests-look-at "var_one, var_two, var_three,") | 200 | (python-tests-look-at "var_one, var_two, var_three,") |
| 201 | (should (eq (car (python-indent-context)) 'inside-paren)) | 201 | (should (eq (car (python-indent-context)) |
| 202 | :inside-paren-newline-start-from-block)) | ||
| 202 | (should (= (python-indent-calculate-indentation) 8)) | 203 | (should (= (python-indent-calculate-indentation) 8)) |
| 203 | (python-tests-look-at "var_four):") | 204 | (python-tests-look-at "var_four):") |
| 204 | (should (eq (car (python-indent-context)) 'inside-paren)) | 205 | (should (eq (car (python-indent-context)) |
| 206 | :inside-paren-newline-start-from-block)) | ||
| 205 | (should (= (python-indent-calculate-indentation) 8)) | 207 | (should (= (python-indent-calculate-indentation) 8)) |
| 206 | (python-tests-look-at "print (var_one)") | 208 | (python-tests-look-at "print (var_one)") |
| 207 | (should (eq (car (python-indent-context)) 'after-beginning-of-block)) | 209 | (should (eq (car (python-indent-context)) |
| 210 | :after-block-start)) | ||
| 208 | (should (= (python-indent-calculate-indentation) 4)))) | 211 | (should (= (python-indent-calculate-indentation) 4)))) |
| 209 | 212 | ||
| 210 | (ert-deftest python-indent-pep8-3 () | 213 | (ert-deftest python-indent-pep8-3 () |
| @@ -215,18 +218,34 @@ foo = long_function_name( | |||
| 215 | var_one, var_two, | 218 | var_one, var_two, |
| 216 | var_three, var_four) | 219 | var_three, var_four) |
| 217 | " | 220 | " |
| 218 | (should (eq (car (python-indent-context)) 'no-indent)) | 221 | (should (eq (car (python-indent-context)) :no-indent)) |
| 219 | (should (= (python-indent-calculate-indentation) 0)) | 222 | (should (= (python-indent-calculate-indentation) 0)) |
| 220 | (python-tests-look-at "foo = long_function_name(") | 223 | (python-tests-look-at "foo = long_function_name(") |
| 221 | (should (eq (car (python-indent-context)) 'after-line)) | 224 | (should (eq (car (python-indent-context)) :after-line)) |
| 222 | (should (= (python-indent-calculate-indentation) 0)) | 225 | (should (= (python-indent-calculate-indentation) 0)) |
| 223 | (python-tests-look-at "var_one, var_two,") | 226 | (python-tests-look-at "var_one, var_two,") |
| 224 | (should (eq (car (python-indent-context)) 'inside-paren)) | 227 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 225 | (should (= (python-indent-calculate-indentation) 4)) | 228 | (should (= (python-indent-calculate-indentation) 4)) |
| 226 | (python-tests-look-at "var_three, var_four)") | 229 | (python-tests-look-at "var_three, var_four)") |
| 227 | (should (eq (car (python-indent-context)) 'inside-paren)) | 230 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 228 | (should (= (python-indent-calculate-indentation) 4)))) | 231 | (should (= (python-indent-calculate-indentation) 4)))) |
| 229 | 232 | ||
| 233 | (ert-deftest python-indent-base-case () | ||
| 234 | "Check base case does not trigger errors." | ||
| 235 | (python-tests-with-temp-buffer | ||
| 236 | " | ||
| 237 | |||
| 238 | " | ||
| 239 | (goto-char (point-min)) | ||
| 240 | (should (eq (car (python-indent-context)) :no-indent)) | ||
| 241 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 242 | (forward-line 1) | ||
| 243 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 244 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 245 | (forward-line 1) | ||
| 246 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 247 | (should (= (python-indent-calculate-indentation) 0)))) | ||
| 248 | |||
| 230 | (ert-deftest python-indent-after-comment-1 () | 249 | (ert-deftest python-indent-after-comment-1 () |
| 231 | "The most simple after-comment case that shouldn't fail." | 250 | "The most simple after-comment case that shouldn't fail." |
| 232 | (python-tests-with-temp-buffer | 251 | (python-tests-with-temp-buffer |
| @@ -240,23 +259,23 @@ class Blag(object): | |||
| 240 | # with the exception with which the first child failed. | 259 | # with the exception with which the first child failed. |
| 241 | " | 260 | " |
| 242 | (python-tests-look-at "# We only complete") | 261 | (python-tests-look-at "# We only complete") |
| 243 | (should (eq (car (python-indent-context)) 'after-line)) | 262 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 244 | (should (= (python-indent-calculate-indentation) 8)) | 263 | (should (= (python-indent-calculate-indentation) 8)) |
| 245 | (python-tests-look-at "# terminal state") | 264 | (python-tests-look-at "# terminal state") |
| 246 | (should (eq (car (python-indent-context)) 'after-comment)) | 265 | (should (eq (car (python-indent-context)) :after-comment)) |
| 247 | (should (= (python-indent-calculate-indentation) 8)) | 266 | (should (= (python-indent-calculate-indentation) 8)) |
| 248 | (python-tests-look-at "# with the exception") | 267 | (python-tests-look-at "# with the exception") |
| 249 | (should (eq (car (python-indent-context)) 'after-comment)) | 268 | (should (eq (car (python-indent-context)) :after-comment)) |
| 250 | ;; This one indents relative to previous block, even given the fact | 269 | ;; This one indents relative to previous block, even given the fact |
| 251 | ;; that it was under-indented. | 270 | ;; that it was under-indented. |
| 252 | (should (= (python-indent-calculate-indentation) 4)) | 271 | (should (= (python-indent-calculate-indentation) 4)) |
| 253 | (python-tests-look-at "# terminal state" -1) | 272 | (python-tests-look-at "# terminal state" -1) |
| 254 | ;; It doesn't hurt to check again. | 273 | ;; It doesn't hurt to check again. |
| 255 | (should (eq (car (python-indent-context)) 'after-comment)) | 274 | (should (eq (car (python-indent-context)) :after-comment)) |
| 256 | (python-indent-line) | 275 | (python-indent-line) |
| 257 | (should (= (current-indentation) 8)) | 276 | (should (= (current-indentation) 8)) |
| 258 | (python-tests-look-at "# with the exception") | 277 | (python-tests-look-at "# with the exception") |
| 259 | (should (eq (car (python-indent-context)) 'after-comment)) | 278 | (should (eq (car (python-indent-context)) :after-comment)) |
| 260 | ;; Now everything should be lined up. | 279 | ;; Now everything should be lined up. |
| 261 | (should (= (python-indent-calculate-indentation) 8)))) | 280 | (should (= (python-indent-calculate-indentation) 8)))) |
| 262 | 281 | ||
| @@ -275,33 +294,33 @@ now_we_do_mess_cause_this_is_not_a_comment = 1 | |||
| 275 | # yeah, that. | 294 | # yeah, that. |
| 276 | " | 295 | " |
| 277 | (python-tests-look-at "# I don't do much") | 296 | (python-tests-look-at "# I don't do much") |
| 278 | (should (eq (car (python-indent-context)) 'after-beginning-of-block)) | 297 | (should (eq (car (python-indent-context)) :after-block-start)) |
| 279 | (should (= (python-indent-calculate-indentation) 4)) | 298 | (should (= (python-indent-calculate-indentation) 4)) |
| 280 | (python-tests-look-at "return arg") | 299 | (python-tests-look-at "return arg") |
| 281 | ;; Comment here just gets ignored, this line is not a comment so | 300 | ;; Comment here just gets ignored, this line is not a comment so |
| 282 | ;; the rules won't apply here. | 301 | ;; the rules won't apply here. |
| 283 | (should (eq (car (python-indent-context)) 'after-beginning-of-block)) | 302 | (should (eq (car (python-indent-context)) :after-block-start)) |
| 284 | (should (= (python-indent-calculate-indentation) 4)) | 303 | (should (= (python-indent-calculate-indentation) 4)) |
| 285 | (python-tests-look-at "# This comment is badly") | 304 | (python-tests-look-at "# This comment is badly") |
| 286 | (should (eq (car (python-indent-context)) 'after-line)) | 305 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 287 | ;; The return keyword moves indentation backwards 4 spaces, but | 306 | ;; The return keyword moves indentation backwards 4 spaces, but |
| 288 | ;; let's assume this comment was placed there because the user | 307 | ;; let's assume this comment was placed there because the user |
| 289 | ;; wanted to (manually adding spaces or whatever). | 308 | ;; wanted to (manually adding spaces or whatever). |
| 290 | (should (= (python-indent-calculate-indentation) 0)) | 309 | (should (= (python-indent-calculate-indentation) 0)) |
| 291 | (python-tests-look-at "# but we won't mess") | 310 | (python-tests-look-at "# but we won't mess") |
| 292 | (should (eq (car (python-indent-context)) 'after-comment)) | 311 | (should (eq (car (python-indent-context)) :after-comment)) |
| 293 | (should (= (python-indent-calculate-indentation) 4)) | 312 | (should (= (python-indent-calculate-indentation) 4)) |
| 294 | ;; Behave the same for blank lines: potentially a comment. | 313 | ;; Behave the same for blank lines: potentially a comment. |
| 295 | (forward-line 1) | 314 | (forward-line 1) |
| 296 | (should (eq (car (python-indent-context)) 'after-comment)) | 315 | (should (eq (car (python-indent-context)) :after-comment)) |
| 297 | (should (= (python-indent-calculate-indentation) 4)) | 316 | (should (= (python-indent-calculate-indentation) 4)) |
| 298 | (python-tests-look-at "now_we_do_mess") | 317 | (python-tests-look-at "now_we_do_mess") |
| 299 | ;; Here is where comment indentation starts to get ignored and | 318 | ;; Here is where comment indentation starts to get ignored and |
| 300 | ;; where the user can't freely indent anymore. | 319 | ;; where the user can't freely indent anymore. |
| 301 | (should (eq (car (python-indent-context)) 'after-line)) | 320 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 302 | (should (= (python-indent-calculate-indentation) 0)) | 321 | (should (= (python-indent-calculate-indentation) 0)) |
| 303 | (python-tests-look-at "# yeah, that.") | 322 | (python-tests-look-at "# yeah, that.") |
| 304 | (should (eq (car (python-indent-context)) 'after-line)) | 323 | (should (eq (car (python-indent-context)) :after-line)) |
| 305 | (should (= (python-indent-calculate-indentation) 0)))) | 324 | (should (= (python-indent-calculate-indentation) 0)))) |
| 306 | 325 | ||
| 307 | (ert-deftest python-indent-inside-paren-1 () | 326 | (ert-deftest python-indent-inside-paren-1 () |
| @@ -325,49 +344,53 @@ data = { | |||
| 325 | } | 344 | } |
| 326 | " | 345 | " |
| 327 | (python-tests-look-at "data = {") | 346 | (python-tests-look-at "data = {") |
| 328 | (should (eq (car (python-indent-context)) 'after-line)) | 347 | (should (eq (car (python-indent-context)) :after-line)) |
| 329 | (should (= (python-indent-calculate-indentation) 0)) | 348 | (should (= (python-indent-calculate-indentation) 0)) |
| 330 | (python-tests-look-at "'key':") | 349 | (python-tests-look-at "'key':") |
| 331 | (should (eq (car (python-indent-context)) 'inside-paren)) | 350 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 332 | (should (= (python-indent-calculate-indentation) 4)) | 351 | (should (= (python-indent-calculate-indentation) 4)) |
| 333 | (python-tests-look-at "{") | 352 | (python-tests-look-at "{") |
| 334 | (should (eq (car (python-indent-context)) 'inside-paren)) | 353 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 335 | (should (= (python-indent-calculate-indentation) 4)) | 354 | (should (= (python-indent-calculate-indentation) 4)) |
| 336 | (python-tests-look-at "'objlist': [") | 355 | (python-tests-look-at "'objlist': [") |
| 337 | (should (eq (car (python-indent-context)) 'inside-paren)) | 356 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 338 | (should (= (python-indent-calculate-indentation) 8)) | 357 | (should (= (python-indent-calculate-indentation) 8)) |
| 339 | (python-tests-look-at "{") | 358 | (python-tests-look-at "{") |
| 340 | (should (eq (car (python-indent-context)) 'inside-paren)) | 359 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 341 | (should (= (python-indent-calculate-indentation) 12)) | 360 | (should (= (python-indent-calculate-indentation) 12)) |
| 342 | (python-tests-look-at "'pk': 1,") | 361 | (python-tests-look-at "'pk': 1,") |
| 343 | (should (eq (car (python-indent-context)) 'inside-paren)) | 362 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 344 | (should (= (python-indent-calculate-indentation) 16)) | 363 | (should (= (python-indent-calculate-indentation) 16)) |
| 345 | (python-tests-look-at "'name': 'first',") | 364 | (python-tests-look-at "'name': 'first',") |
| 346 | (should (eq (car (python-indent-context)) 'inside-paren)) | 365 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 347 | (should (= (python-indent-calculate-indentation) 16)) | 366 | (should (= (python-indent-calculate-indentation) 16)) |
| 348 | (python-tests-look-at "},") | 367 | (python-tests-look-at "},") |
| 349 | (should (eq (car (python-indent-context)) 'inside-paren)) | 368 | (should (eq (car (python-indent-context)) |
| 369 | :inside-paren-at-closing-nested-paren)) | ||
| 350 | (should (= (python-indent-calculate-indentation) 12)) | 370 | (should (= (python-indent-calculate-indentation) 12)) |
| 351 | (python-tests-look-at "{") | 371 | (python-tests-look-at "{") |
| 352 | (should (eq (car (python-indent-context)) 'inside-paren)) | 372 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 353 | (should (= (python-indent-calculate-indentation) 12)) | 373 | (should (= (python-indent-calculate-indentation) 12)) |
| 354 | (python-tests-look-at "'pk': 2,") | 374 | (python-tests-look-at "'pk': 2,") |
| 355 | (should (eq (car (python-indent-context)) 'inside-paren)) | 375 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 356 | (should (= (python-indent-calculate-indentation) 16)) | 376 | (should (= (python-indent-calculate-indentation) 16)) |
| 357 | (python-tests-look-at "'name': 'second',") | 377 | (python-tests-look-at "'name': 'second',") |
| 358 | (should (eq (car (python-indent-context)) 'inside-paren)) | 378 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 359 | (should (= (python-indent-calculate-indentation) 16)) | 379 | (should (= (python-indent-calculate-indentation) 16)) |
| 360 | (python-tests-look-at "}") | 380 | (python-tests-look-at "}") |
| 361 | (should (eq (car (python-indent-context)) 'inside-paren)) | 381 | (should (eq (car (python-indent-context)) |
| 382 | :inside-paren-at-closing-nested-paren)) | ||
| 362 | (should (= (python-indent-calculate-indentation) 12)) | 383 | (should (= (python-indent-calculate-indentation) 12)) |
| 363 | (python-tests-look-at "]") | 384 | (python-tests-look-at "]") |
| 364 | (should (eq (car (python-indent-context)) 'inside-paren)) | 385 | (should (eq (car (python-indent-context)) |
| 386 | :inside-paren-at-closing-nested-paren)) | ||
| 365 | (should (= (python-indent-calculate-indentation) 8)) | 387 | (should (= (python-indent-calculate-indentation) 8)) |
| 366 | (python-tests-look-at "}") | 388 | (python-tests-look-at "}") |
| 367 | (should (eq (car (python-indent-context)) 'inside-paren)) | 389 | (should (eq (car (python-indent-context)) |
| 390 | :inside-paren-at-closing-nested-paren)) | ||
| 368 | (should (= (python-indent-calculate-indentation) 4)) | 391 | (should (= (python-indent-calculate-indentation) 4)) |
| 369 | (python-tests-look-at "}") | 392 | (python-tests-look-at "}") |
| 370 | (should (eq (car (python-indent-context)) 'inside-paren)) | 393 | (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) |
| 371 | (should (= (python-indent-calculate-indentation) 0)))) | 394 | (should (= (python-indent-calculate-indentation) 0)))) |
| 372 | 395 | ||
| 373 | (ert-deftest python-indent-inside-paren-2 () | 396 | (ert-deftest python-indent-inside-paren-2 () |
| @@ -384,43 +407,121 @@ data = {'key': { | |||
| 384 | }} | 407 | }} |
| 385 | " | 408 | " |
| 386 | (python-tests-look-at "data = {") | 409 | (python-tests-look-at "data = {") |
| 387 | (should (eq (car (python-indent-context)) 'after-line)) | 410 | (should (eq (car (python-indent-context)) :after-line)) |
| 388 | (should (= (python-indent-calculate-indentation) 0)) | 411 | (should (= (python-indent-calculate-indentation) 0)) |
| 389 | (python-tests-look-at "'objlist': [") | 412 | (python-tests-look-at "'objlist': [") |
| 390 | (should (eq (car (python-indent-context)) 'inside-paren)) | 413 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 391 | (should (= (python-indent-calculate-indentation) 4)) | 414 | (should (= (python-indent-calculate-indentation) 4)) |
| 392 | (python-tests-look-at "{'pk': 1,") | 415 | (python-tests-look-at "{'pk': 1,") |
| 393 | (should (eq (car (python-indent-context)) 'inside-paren)) | 416 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 394 | (should (= (python-indent-calculate-indentation) 8)) | 417 | (should (= (python-indent-calculate-indentation) 8)) |
| 395 | (python-tests-look-at "'name': 'first'},") | 418 | (python-tests-look-at "'name': 'first'},") |
| 396 | (should (eq (car (python-indent-context)) 'inside-paren)) | 419 | (should (eq (car (python-indent-context)) :inside-paren)) |
| 397 | (should (= (python-indent-calculate-indentation) 9)) | 420 | (should (= (python-indent-calculate-indentation) 9)) |
| 398 | (python-tests-look-at "{'pk': 2,") | 421 | (python-tests-look-at "{'pk': 2,") |
| 399 | (should (eq (car (python-indent-context)) 'inside-paren)) | 422 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 400 | (should (= (python-indent-calculate-indentation) 8)) | 423 | (should (= (python-indent-calculate-indentation) 8)) |
| 401 | (python-tests-look-at "'name': 'second'}") | 424 | (python-tests-look-at "'name': 'second'}") |
| 402 | (should (eq (car (python-indent-context)) 'inside-paren)) | 425 | (should (eq (car (python-indent-context)) :inside-paren)) |
| 403 | (should (= (python-indent-calculate-indentation) 9)) | 426 | (should (= (python-indent-calculate-indentation) 9)) |
| 404 | (python-tests-look-at "]") | 427 | (python-tests-look-at "]") |
| 405 | (should (eq (car (python-indent-context)) 'inside-paren)) | 428 | (should (eq (car (python-indent-context)) |
| 429 | :inside-paren-at-closing-nested-paren)) | ||
| 406 | (should (= (python-indent-calculate-indentation) 4)) | 430 | (should (= (python-indent-calculate-indentation) 4)) |
| 407 | (python-tests-look-at "}}") | 431 | (python-tests-look-at "}}") |
| 408 | (should (eq (car (python-indent-context)) 'inside-paren)) | 432 | (should (eq (car (python-indent-context)) |
| 433 | :inside-paren-at-closing-nested-paren)) | ||
| 409 | (should (= (python-indent-calculate-indentation) 0)) | 434 | (should (= (python-indent-calculate-indentation) 0)) |
| 410 | (python-tests-look-at "}") | 435 | (python-tests-look-at "}") |
| 411 | (should (eq (car (python-indent-context)) 'inside-paren)) | 436 | (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) |
| 412 | (should (= (python-indent-calculate-indentation) 0)))) | 437 | (should (= (python-indent-calculate-indentation) 0)))) |
| 413 | 438 | ||
| 439 | (ert-deftest python-indent-inside-paren-3 () | ||
| 440 | "The simplest case possible." | ||
| 441 | (python-tests-with-temp-buffer | ||
| 442 | " | ||
| 443 | data = ('these', | ||
| 444 | 'are', | ||
| 445 | 'the', | ||
| 446 | 'tokens') | ||
| 447 | " | ||
| 448 | (python-tests-look-at "data = ('these',") | ||
| 449 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 450 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 451 | (forward-line 1) | ||
| 452 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 453 | (should (= (python-indent-calculate-indentation) 8)) | ||
| 454 | (forward-line 1) | ||
| 455 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 456 | (should (= (python-indent-calculate-indentation) 8)) | ||
| 457 | (forward-line 1) | ||
| 458 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 459 | (should (= (python-indent-calculate-indentation) 8)))) | ||
| 460 | |||
| 461 | (ert-deftest python-indent-inside-paren-4 () | ||
| 462 | "Respect indentation of first column." | ||
| 463 | (python-tests-with-temp-buffer | ||
| 464 | " | ||
| 465 | data = [ [ 'these', 'are'], | ||
| 466 | ['the', 'tokens' ] ] | ||
| 467 | " | ||
| 468 | (python-tests-look-at "data = [ [ 'these', 'are'],") | ||
| 469 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 470 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 471 | (forward-line 1) | ||
| 472 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 473 | (should (= (python-indent-calculate-indentation) 9)))) | ||
| 474 | |||
| 475 | (ert-deftest python-indent-inside-paren-5 () | ||
| 476 | "Test when :inside-paren initial parens are skipped in context start." | ||
| 477 | (python-tests-with-temp-buffer | ||
| 478 | " | ||
| 479 | while ((not some_condition) and | ||
| 480 | another_condition): | ||
| 481 | do_something_interesting( | ||
| 482 | with_some_arg) | ||
| 483 | " | ||
| 484 | (python-tests-look-at "while ((not some_condition) and") | ||
| 485 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 486 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 487 | (forward-line 1) | ||
| 488 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 489 | (should (= (python-indent-calculate-indentation) 7)) | ||
| 490 | (forward-line 1) | ||
| 491 | (should (eq (car (python-indent-context)) :after-block-start)) | ||
| 492 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 493 | (forward-line 1) | ||
| 494 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) | ||
| 495 | (should (= (python-indent-calculate-indentation) 8)))) | ||
| 496 | |||
| 497 | (ert-deftest python-indent-inside-paren-6 () | ||
| 498 | "This should be aligned.." | ||
| 499 | (python-tests-with-temp-buffer | ||
| 500 | " | ||
| 501 | CHOICES = (('some', 'choice'), | ||
| 502 | ('another', 'choice'), | ||
| 503 | ('more', 'choices')) | ||
| 504 | " | ||
| 505 | (python-tests-look-at "CHOICES = (('some', 'choice'),") | ||
| 506 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 507 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 508 | (forward-line 1) | ||
| 509 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 510 | (should (= (python-indent-calculate-indentation) 11)) | ||
| 511 | (forward-line 1) | ||
| 512 | (should (eq (car (python-indent-context)) :inside-paren)) | ||
| 513 | (should (= (python-indent-calculate-indentation) 11)))) | ||
| 514 | |||
| 414 | (ert-deftest python-indent-after-block-1 () | 515 | (ert-deftest python-indent-after-block-1 () |
| 415 | "The most simple after-block case that shouldn't fail." | 516 | "The most simple after-block case that shouldn't fail." |
| 416 | (python-tests-with-temp-buffer | 517 | (python-tests-with-temp-buffer |
| 417 | " | 518 | " |
| 418 | def foo(a, b, c=True): | 519 | def foo(a, b, c=True): |
| 419 | " | 520 | " |
| 420 | (should (eq (car (python-indent-context)) 'no-indent)) | 521 | (should (eq (car (python-indent-context)) :no-indent)) |
| 421 | (should (= (python-indent-calculate-indentation) 0)) | 522 | (should (= (python-indent-calculate-indentation) 0)) |
| 422 | (goto-char (point-max)) | 523 | (goto-char (point-max)) |
| 423 | (should (eq (car (python-indent-context)) 'after-beginning-of-block)) | 524 | (should (eq (car (python-indent-context)) :after-block-start)) |
| 424 | (should (= (python-indent-calculate-indentation) 4)))) | 525 | (should (= (python-indent-calculate-indentation) 4)))) |
| 425 | 526 | ||
| 426 | (ert-deftest python-indent-after-block-2 () | 527 | (ert-deftest python-indent-after-block-2 () |
| @@ -432,9 +533,28 @@ def foo(a, b, c={ | |||
| 432 | }): | 533 | }): |
| 433 | " | 534 | " |
| 434 | (goto-char (point-max)) | 535 | (goto-char (point-max)) |
| 435 | (should (eq (car (python-indent-context)) 'after-beginning-of-block)) | 536 | (should (eq (car (python-indent-context)) :after-block-start)) |
| 436 | (should (= (python-indent-calculate-indentation) 4)))) | 537 | (should (= (python-indent-calculate-indentation) 4)))) |
| 437 | 538 | ||
| 539 | (ert-deftest python-indent-after-block-3 () | ||
| 540 | "A weird (malformed) sample, usually found in python shells." | ||
| 541 | (python-tests-with-temp-buffer | ||
| 542 | " | ||
| 543 | In [1]: | ||
| 544 | def func(): | ||
| 545 | pass | ||
| 546 | |||
| 547 | In [2]: | ||
| 548 | something | ||
| 549 | " | ||
| 550 | (python-tests-look-at "pass") | ||
| 551 | (should (eq (car (python-indent-context)) :after-block-start)) | ||
| 552 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 553 | (python-tests-look-at "something") | ||
| 554 | (end-of-line) | ||
| 555 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 556 | (should (= (python-indent-calculate-indentation) 0)))) | ||
| 557 | |||
| 438 | (ert-deftest python-indent-after-backslash-1 () | 558 | (ert-deftest python-indent-after-backslash-1 () |
| 439 | "The most common case." | 559 | "The most common case." |
| 440 | (python-tests-with-temp-buffer | 560 | (python-tests-with-temp-buffer |
| @@ -444,16 +564,16 @@ from foo.bar.baz import something, something_1 \\\\ | |||
| 444 | something_4, something_5 | 564 | something_4, something_5 |
| 445 | " | 565 | " |
| 446 | (python-tests-look-at "from foo.bar.baz import something, something_1") | 566 | (python-tests-look-at "from foo.bar.baz import something, something_1") |
| 447 | (should (eq (car (python-indent-context)) 'after-line)) | 567 | (should (eq (car (python-indent-context)) :after-line)) |
| 448 | (should (= (python-indent-calculate-indentation) 0)) | 568 | (should (= (python-indent-calculate-indentation) 0)) |
| 449 | (python-tests-look-at "something_2 something_3,") | 569 | (python-tests-look-at "something_2 something_3,") |
| 450 | (should (eq (car (python-indent-context)) 'after-backslash)) | 570 | (should (eq (car (python-indent-context)) :after-backslash-first-line)) |
| 451 | (should (= (python-indent-calculate-indentation) 4)) | 571 | (should (= (python-indent-calculate-indentation) 4)) |
| 452 | (python-tests-look-at "something_4, something_5") | 572 | (python-tests-look-at "something_4, something_5") |
| 453 | (should (eq (car (python-indent-context)) 'after-backslash)) | 573 | (should (eq (car (python-indent-context)) :after-backslash)) |
| 454 | (should (= (python-indent-calculate-indentation) 4)) | 574 | (should (= (python-indent-calculate-indentation) 4)) |
| 455 | (goto-char (point-max)) | 575 | (goto-char (point-max)) |
| 456 | (should (eq (car (python-indent-context)) 'after-line)) | 576 | (should (eq (car (python-indent-context)) :after-line)) |
| 457 | (should (= (python-indent-calculate-indentation) 0)))) | 577 | (should (= (python-indent-calculate-indentation) 0)))) |
| 458 | 578 | ||
| 459 | (ert-deftest python-indent-after-backslash-2 () | 579 | (ert-deftest python-indent-after-backslash-2 () |
| @@ -471,40 +591,104 @@ objects = Thing.objects.all() \\\\ | |||
| 471 | .values_list() | 591 | .values_list() |
| 472 | " | 592 | " |
| 473 | (python-tests-look-at "objects = Thing.objects.all()") | 593 | (python-tests-look-at "objects = Thing.objects.all()") |
| 474 | (should (eq (car (python-indent-context)) 'after-line)) | 594 | (should (eq (car (python-indent-context)) :after-line)) |
| 475 | (should (= (python-indent-calculate-indentation) 0)) | 595 | (should (= (python-indent-calculate-indentation) 0)) |
| 476 | (python-tests-look-at ".filter(") | 596 | (python-tests-look-at ".filter(") |
| 477 | (should (eq (car (python-indent-context)) 'after-backslash)) | 597 | (should (eq (car (python-indent-context)) |
| 598 | :after-backslash-dotted-continuation)) | ||
| 478 | (should (= (python-indent-calculate-indentation) 23)) | 599 | (should (= (python-indent-calculate-indentation) 23)) |
| 479 | (python-tests-look-at "type='toy',") | 600 | (python-tests-look-at "type='toy',") |
| 480 | (should (eq (car (python-indent-context)) 'inside-paren)) | 601 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 481 | (should (= (python-indent-calculate-indentation) 27)) | 602 | (should (= (python-indent-calculate-indentation) 27)) |
| 482 | (python-tests-look-at "status='bought'") | 603 | (python-tests-look-at "status='bought'") |
| 483 | (should (eq (car (python-indent-context)) 'inside-paren)) | 604 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 484 | (should (= (python-indent-calculate-indentation) 27)) | 605 | (should (= (python-indent-calculate-indentation) 27)) |
| 485 | (python-tests-look-at ") \\\\") | 606 | (python-tests-look-at ") \\\\") |
| 486 | (should (eq (car (python-indent-context)) 'inside-paren)) | 607 | (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) |
| 487 | (should (= (python-indent-calculate-indentation) 23)) | 608 | (should (= (python-indent-calculate-indentation) 23)) |
| 488 | (python-tests-look-at ".aggregate(") | 609 | (python-tests-look-at ".aggregate(") |
| 489 | (should (eq (car (python-indent-context)) 'after-backslash)) | 610 | (should (eq (car (python-indent-context)) |
| 611 | :after-backslash-dotted-continuation)) | ||
| 490 | (should (= (python-indent-calculate-indentation) 23)) | 612 | (should (= (python-indent-calculate-indentation) 23)) |
| 491 | (python-tests-look-at "Sum('amount')") | 613 | (python-tests-look-at "Sum('amount')") |
| 492 | (should (eq (car (python-indent-context)) 'inside-paren)) | 614 | (should (eq (car (python-indent-context)) :inside-paren-newline-start)) |
| 493 | (should (= (python-indent-calculate-indentation) 27)) | 615 | (should (= (python-indent-calculate-indentation) 27)) |
| 494 | (python-tests-look-at ") \\\\") | 616 | (python-tests-look-at ") \\\\") |
| 495 | (should (eq (car (python-indent-context)) 'inside-paren)) | 617 | (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren)) |
| 496 | (should (= (python-indent-calculate-indentation) 23)) | 618 | (should (= (python-indent-calculate-indentation) 23)) |
| 497 | (python-tests-look-at ".values_list()") | 619 | (python-tests-look-at ".values_list()") |
| 498 | (should (eq (car (python-indent-context)) 'after-backslash)) | 620 | (should (eq (car (python-indent-context)) |
| 621 | :after-backslash-dotted-continuation)) | ||
| 499 | (should (= (python-indent-calculate-indentation) 23)) | 622 | (should (= (python-indent-calculate-indentation) 23)) |
| 500 | (forward-line 1) | 623 | (forward-line 1) |
| 501 | (should (eq (car (python-indent-context)) 'after-line)) | 624 | (should (eq (car (python-indent-context)) :after-line)) |
| 502 | (should (= (python-indent-calculate-indentation) 0)))) | 625 | (should (= (python-indent-calculate-indentation) 0)))) |
| 503 | 626 | ||
| 627 | (ert-deftest python-indent-after-backslash-3 () | ||
| 628 | "Backslash continuation from block start." | ||
| 629 | (python-tests-with-temp-buffer | ||
| 630 | " | ||
| 631 | with open('/path/to/some/file/you/want/to/read') as file_1, \\\\ | ||
| 632 | open('/path/to/some/file/being/written', 'w') as file_2: | ||
| 633 | file_2.write(file_1.read()) | ||
| 634 | " | ||
| 635 | (python-tests-look-at | ||
| 636 | "with open('/path/to/some/file/you/want/to/read') as file_1, \\\\") | ||
| 637 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 638 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 639 | (python-tests-look-at | ||
| 640 | "open('/path/to/some/file/being/written', 'w') as file_2") | ||
| 641 | (should (eq (car (python-indent-context)) | ||
| 642 | :after-backslash-block-continuation)) | ||
| 643 | (should (= (python-indent-calculate-indentation) 5)) | ||
| 644 | (python-tests-look-at "file_2.write(file_1.read())") | ||
| 645 | (should (eq (car (python-indent-context)) :after-block-start)) | ||
| 646 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 647 | |||
| 648 | (ert-deftest python-indent-after-backslash-4 () | ||
| 649 | "Backslash continuation from assignment." | ||
| 650 | (python-tests-with-temp-buffer | ||
| 651 | " | ||
| 652 | super_awful_assignment = some_calculation() and \\\\ | ||
| 653 | another_calculation() and \\\\ | ||
| 654 | some_final_calculation() | ||
| 655 | " | ||
| 656 | (python-tests-look-at | ||
| 657 | "super_awful_assignment = some_calculation() and \\\\") | ||
| 658 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 659 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 660 | (python-tests-look-at "another_calculation() and \\\\") | ||
| 661 | (should (eq (car (python-indent-context)) | ||
| 662 | :after-backslash-assignment-continuation)) | ||
| 663 | (should (= (python-indent-calculate-indentation) 25)) | ||
| 664 | (python-tests-look-at "some_final_calculation()") | ||
| 665 | (should (eq (car (python-indent-context)) :after-backslash)) | ||
| 666 | (should (= (python-indent-calculate-indentation) 25)))) | ||
| 667 | |||
| 668 | (ert-deftest python-indent-after-backslash-5 () | ||
| 669 | "Dotted continuation bizarre example." | ||
| 670 | (python-tests-with-temp-buffer | ||
| 671 | " | ||
| 672 | def delete_all_things(): | ||
| 673 | Thing \\\\ | ||
| 674 | .objects.all() \\\\ | ||
| 675 | .delete() | ||
| 676 | " | ||
| 677 | (python-tests-look-at "Thing \\\\") | ||
| 678 | (should (eq (car (python-indent-context)) :after-block-start)) | ||
| 679 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 680 | (python-tests-look-at ".objects.all() \\\\") | ||
| 681 | (should (eq (car (python-indent-context)) :after-backslash-first-line)) | ||
| 682 | (should (= (python-indent-calculate-indentation) 8)) | ||
| 683 | (python-tests-look-at ".delete()") | ||
| 684 | (should (eq (car (python-indent-context)) | ||
| 685 | :after-backslash-dotted-continuation)) | ||
| 686 | (should (= (python-indent-calculate-indentation) 16)))) | ||
| 687 | |||
| 504 | (ert-deftest python-indent-block-enders-1 () | 688 | (ert-deftest python-indent-block-enders-1 () |
| 505 | "Test de-indentation for pass keyword." | 689 | "Test de-indentation for pass keyword." |
| 506 | (python-tests-with-temp-buffer | 690 | (python-tests-with-temp-buffer |
| 507 | " | 691 | " |
| 508 | Class foo(object): | 692 | Class foo(object): |
| 509 | 693 | ||
| 510 | def bar(self): | 694 | def bar(self): |
| @@ -516,17 +700,18 @@ Class foo(object): | |||
| 516 | else: | 700 | else: |
| 517 | pass | 701 | pass |
| 518 | " | 702 | " |
| 519 | (python-tests-look-at "3)") | 703 | (python-tests-look-at "3)") |
| 520 | (forward-line 1) | 704 | (forward-line 1) |
| 521 | (should (= (python-indent-calculate-indentation) 8)) | 705 | (should (= (python-indent-calculate-indentation) 8)) |
| 522 | (python-tests-look-at "pass") | 706 | (python-tests-look-at "pass") |
| 523 | (forward-line 1) | 707 | (forward-line 1) |
| 524 | (should (= (python-indent-calculate-indentation) 8)))) | 708 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 709 | (should (= (python-indent-calculate-indentation) 8)))) | ||
| 525 | 710 | ||
| 526 | (ert-deftest python-indent-block-enders-2 () | 711 | (ert-deftest python-indent-block-enders-2 () |
| 527 | "Test de-indentation for return keyword." | 712 | "Test de-indentation for return keyword." |
| 528 | (python-tests-with-temp-buffer | 713 | (python-tests-with-temp-buffer |
| 529 | " | 714 | " |
| 530 | Class foo(object): | 715 | Class foo(object): |
| 531 | '''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do | 716 | '''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do |
| 532 | 717 | ||
| @@ -539,64 +724,68 @@ Class foo(object): | |||
| 539 | 2, | 724 | 2, |
| 540 | 3) | 725 | 3) |
| 541 | " | 726 | " |
| 542 | (python-tests-look-at "def") | 727 | (python-tests-look-at "def") |
| 543 | (should (= (python-indent-calculate-indentation) 4)) | 728 | (should (= (python-indent-calculate-indentation) 4)) |
| 544 | (python-tests-look-at "if") | 729 | (python-tests-look-at "if") |
| 545 | (should (= (python-indent-calculate-indentation) 8)) | 730 | (should (= (python-indent-calculate-indentation) 8)) |
| 546 | (python-tests-look-at "return") | 731 | (python-tests-look-at "return") |
| 547 | (should (= (python-indent-calculate-indentation) 12)) | 732 | (should (= (python-indent-calculate-indentation) 12)) |
| 548 | (goto-char (point-max)) | 733 | (goto-char (point-max)) |
| 549 | (should (= (python-indent-calculate-indentation) 8)))) | 734 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 735 | (should (= (python-indent-calculate-indentation) 8)))) | ||
| 550 | 736 | ||
| 551 | (ert-deftest python-indent-block-enders-3 () | 737 | (ert-deftest python-indent-block-enders-3 () |
| 552 | "Test de-indentation for continue keyword." | 738 | "Test de-indentation for continue keyword." |
| 553 | (python-tests-with-temp-buffer | 739 | (python-tests-with-temp-buffer |
| 554 | " | 740 | " |
| 555 | for element in lst: | 741 | for element in lst: |
| 556 | if element is None: | 742 | if element is None: |
| 557 | continue | 743 | continue |
| 558 | " | 744 | " |
| 559 | (python-tests-look-at "if") | 745 | (python-tests-look-at "if") |
| 560 | (should (= (python-indent-calculate-indentation) 4)) | 746 | (should (= (python-indent-calculate-indentation) 4)) |
| 561 | (python-tests-look-at "continue") | 747 | (python-tests-look-at "continue") |
| 562 | (should (= (python-indent-calculate-indentation) 8)) | 748 | (should (= (python-indent-calculate-indentation) 8)) |
| 563 | (forward-line 1) | 749 | (forward-line 1) |
| 564 | (should (= (python-indent-calculate-indentation) 4)))) | 750 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 751 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 565 | 752 | ||
| 566 | (ert-deftest python-indent-block-enders-4 () | 753 | (ert-deftest python-indent-block-enders-4 () |
| 567 | "Test de-indentation for break keyword." | 754 | "Test de-indentation for break keyword." |
| 568 | (python-tests-with-temp-buffer | 755 | (python-tests-with-temp-buffer |
| 569 | " | 756 | " |
| 570 | for element in lst: | 757 | for element in lst: |
| 571 | if element is None: | 758 | if element is None: |
| 572 | break | 759 | break |
| 573 | " | 760 | " |
| 574 | (python-tests-look-at "if") | 761 | (python-tests-look-at "if") |
| 575 | (should (= (python-indent-calculate-indentation) 4)) | 762 | (should (= (python-indent-calculate-indentation) 4)) |
| 576 | (python-tests-look-at "break") | 763 | (python-tests-look-at "break") |
| 577 | (should (= (python-indent-calculate-indentation) 8)) | 764 | (should (= (python-indent-calculate-indentation) 8)) |
| 578 | (forward-line 1) | 765 | (forward-line 1) |
| 579 | (should (= (python-indent-calculate-indentation) 4)))) | 766 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 767 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 580 | 768 | ||
| 581 | (ert-deftest python-indent-block-enders-5 () | 769 | (ert-deftest python-indent-block-enders-5 () |
| 582 | "Test de-indentation for raise keyword." | 770 | "Test de-indentation for raise keyword." |
| 583 | (python-tests-with-temp-buffer | 771 | (python-tests-with-temp-buffer |
| 584 | " | 772 | " |
| 585 | for element in lst: | 773 | for element in lst: |
| 586 | if element is None: | 774 | if element is None: |
| 587 | raise ValueError('Element cannot be None') | 775 | raise ValueError('Element cannot be None') |
| 588 | " | 776 | " |
| 589 | (python-tests-look-at "if") | 777 | (python-tests-look-at "if") |
| 590 | (should (= (python-indent-calculate-indentation) 4)) | 778 | (should (= (python-indent-calculate-indentation) 4)) |
| 591 | (python-tests-look-at "raise") | 779 | (python-tests-look-at "raise") |
| 592 | (should (= (python-indent-calculate-indentation) 8)) | 780 | (should (= (python-indent-calculate-indentation) 8)) |
| 593 | (forward-line 1) | 781 | (forward-line 1) |
| 594 | (should (= (python-indent-calculate-indentation) 4)))) | 782 | (should (eq (car (python-indent-context)) :after-block-end)) |
| 783 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 595 | 784 | ||
| 596 | (ert-deftest python-indent-dedenters-1 () | 785 | (ert-deftest python-indent-dedenters-1 () |
| 597 | "Test de-indentation for the elif keyword." | 786 | "Test de-indentation for the elif keyword." |
| 598 | (python-tests-with-temp-buffer | 787 | (python-tests-with-temp-buffer |
| 599 | " | 788 | " |
| 600 | if save: | 789 | if save: |
| 601 | try: | 790 | try: |
| 602 | write_to_disk(data) | 791 | write_to_disk(data) |
| @@ -604,15 +793,15 @@ if save: | |||
| 604 | cleanup() | 793 | cleanup() |
| 605 | elif | 794 | elif |
| 606 | " | 795 | " |
| 607 | (python-tests-look-at "elif\n") | 796 | (python-tests-look-at "elif\n") |
| 608 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 797 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 609 | (should (= (python-indent-calculate-indentation) 0)) | 798 | (should (= (python-indent-calculate-indentation) 0)) |
| 610 | (should (equal (python-indent-calculate-levels) '(0))))) | 799 | (should (= (python-indent-calculate-indentation t) 0)))) |
| 611 | 800 | ||
| 612 | (ert-deftest python-indent-dedenters-2 () | 801 | (ert-deftest python-indent-dedenters-2 () |
| 613 | "Test de-indentation for the else keyword." | 802 | "Test de-indentation for the else keyword." |
| 614 | (python-tests-with-temp-buffer | 803 | (python-tests-with-temp-buffer |
| 615 | " | 804 | " |
| 616 | if save: | 805 | if save: |
| 617 | try: | 806 | try: |
| 618 | write_to_disk(data) | 807 | write_to_disk(data) |
| @@ -627,43 +816,50 @@ if save: | |||
| 627 | finally: | 816 | finally: |
| 628 | data.free() | 817 | data.free() |
| 629 | " | 818 | " |
| 630 | (python-tests-look-at "else\n") | 819 | (python-tests-look-at "else\n") |
| 631 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 820 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 632 | (should (= (python-indent-calculate-indentation) 8)) | 821 | (should (= (python-indent-calculate-indentation) 8)) |
| 633 | (should (equal (python-indent-calculate-levels) '(0 4 8))))) | 822 | (python-indent-line t) |
| 823 | (should (= (python-indent-calculate-indentation t) 4)) | ||
| 824 | (python-indent-line t) | ||
| 825 | (should (= (python-indent-calculate-indentation t) 0)) | ||
| 826 | (python-indent-line t) | ||
| 827 | (should (= (python-indent-calculate-indentation t) 8)))) | ||
| 634 | 828 | ||
| 635 | (ert-deftest python-indent-dedenters-3 () | 829 | (ert-deftest python-indent-dedenters-3 () |
| 636 | "Test de-indentation for the except keyword." | 830 | "Test de-indentation for the except keyword." |
| 637 | (python-tests-with-temp-buffer | 831 | (python-tests-with-temp-buffer |
| 638 | " | 832 | " |
| 639 | if save: | 833 | if save: |
| 640 | try: | 834 | try: |
| 641 | write_to_disk(data) | 835 | write_to_disk(data) |
| 642 | except | 836 | except |
| 643 | " | 837 | " |
| 644 | (python-tests-look-at "except\n") | 838 | (python-tests-look-at "except\n") |
| 645 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 839 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 646 | (should (= (python-indent-calculate-indentation) 4)) | 840 | (should (= (python-indent-calculate-indentation) 4)) |
| 647 | (should (equal (python-indent-calculate-levels) '(4))))) | 841 | (python-indent-line t) |
| 842 | (should (= (python-indent-calculate-indentation t) 4)))) | ||
| 648 | 843 | ||
| 649 | (ert-deftest python-indent-dedenters-4 () | 844 | (ert-deftest python-indent-dedenters-4 () |
| 650 | "Test de-indentation for the finally keyword." | 845 | "Test de-indentation for the finally keyword." |
| 651 | (python-tests-with-temp-buffer | 846 | (python-tests-with-temp-buffer |
| 652 | " | 847 | " |
| 653 | if save: | 848 | if save: |
| 654 | try: | 849 | try: |
| 655 | write_to_disk(data) | 850 | write_to_disk(data) |
| 656 | finally | 851 | finally |
| 657 | " | 852 | " |
| 658 | (python-tests-look-at "finally\n") | 853 | (python-tests-look-at "finally\n") |
| 659 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 854 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 660 | (should (= (python-indent-calculate-indentation) 4)) | 855 | (should (= (python-indent-calculate-indentation) 4)) |
| 661 | (should (equal (python-indent-calculate-levels) '(4))))) | 856 | (python-indent-line t) |
| 857 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 662 | 858 | ||
| 663 | (ert-deftest python-indent-dedenters-5 () | 859 | (ert-deftest python-indent-dedenters-5 () |
| 664 | "Test invalid levels are skipped in a complex example." | 860 | "Test invalid levels are skipped in a complex example." |
| 665 | (python-tests-with-temp-buffer | 861 | (python-tests-with-temp-buffer |
| 666 | " | 862 | " |
| 667 | if save: | 863 | if save: |
| 668 | try: | 864 | try: |
| 669 | write_to_disk(data) | 865 | write_to_disk(data) |
| @@ -676,29 +872,31 @@ if save: | |||
| 676 | do_cleanup() | 872 | do_cleanup() |
| 677 | else | 873 | else |
| 678 | " | 874 | " |
| 679 | (python-tests-look-at "else\n") | 875 | (python-tests-look-at "else\n") |
| 680 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 876 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 681 | (should (= (python-indent-calculate-indentation) 8)) | 877 | (should (= (python-indent-calculate-indentation) 8)) |
| 682 | (should (equal (python-indent-calculate-levels) '(0 8))))) | 878 | (should (= (python-indent-calculate-indentation t) 0)) |
| 879 | (python-indent-line t) | ||
| 880 | (should (= (python-indent-calculate-indentation t) 8)))) | ||
| 683 | 881 | ||
| 684 | (ert-deftest python-indent-dedenters-6 () | 882 | (ert-deftest python-indent-dedenters-6 () |
| 685 | "Test indentation is zero when no opening block for dedenter." | 883 | "Test indentation is zero when no opening block for dedenter." |
| 686 | (python-tests-with-temp-buffer | 884 | (python-tests-with-temp-buffer |
| 687 | " | 885 | " |
| 688 | try: | 886 | try: |
| 689 | # if save: | 887 | # if save: |
| 690 | write_to_disk(data) | 888 | write_to_disk(data) |
| 691 | else | 889 | else |
| 692 | " | 890 | " |
| 693 | (python-tests-look-at "else\n") | 891 | (python-tests-look-at "else\n") |
| 694 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 892 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 695 | (should (= (python-indent-calculate-indentation) 0)) | 893 | (should (= (python-indent-calculate-indentation) 0)) |
| 696 | (should (equal (python-indent-calculate-levels) '(0))))) | 894 | (should (= (python-indent-calculate-indentation t) 0)))) |
| 697 | 895 | ||
| 698 | (ert-deftest python-indent-dedenters-7 () | 896 | (ert-deftest python-indent-dedenters-7 () |
| 699 | "Test indentation case from Bug#15163." | 897 | "Test indentation case from Bug#15163." |
| 700 | (python-tests-with-temp-buffer | 898 | (python-tests-with-temp-buffer |
| 701 | " | 899 | " |
| 702 | if a: | 900 | if a: |
| 703 | if b: | 901 | if b: |
| 704 | pass | 902 | pass |
| @@ -706,10 +904,10 @@ if a: | |||
| 706 | pass | 904 | pass |
| 707 | else: | 905 | else: |
| 708 | " | 906 | " |
| 709 | (python-tests-look-at "else:" 2) | 907 | (python-tests-look-at "else:" 2) |
| 710 | (should (eq (car (python-indent-context)) 'dedenter-statement)) | 908 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) |
| 711 | (should (= (python-indent-calculate-indentation) 0)) | 909 | (should (= (python-indent-calculate-indentation) 0)) |
| 712 | (should (equal (python-indent-calculate-levels) '(0))))) | 910 | (should (= (python-indent-calculate-indentation t) 0)))) |
| 713 | 911 | ||
| 714 | (ert-deftest python-indent-dedenters-8 () | 912 | (ert-deftest python-indent-dedenters-8 () |
| 715 | "Test indentation for Bug#18432." | 913 | "Test indentation for Bug#18432." |
| @@ -721,10 +919,99 @@ if (a == 1 or | |||
| 721 | elif (a == 3 or | 919 | elif (a == 3 or |
| 722 | a == 4): | 920 | a == 4): |
| 723 | " | 921 | " |
| 922 | (python-tests-look-at "elif (a == 3 or") | ||
| 923 | (should (eq (car (python-indent-context)) :at-dedenter-block-start)) | ||
| 924 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 925 | (should (= (python-indent-calculate-indentation t) 0)) | ||
| 724 | (python-tests-look-at "a == 4):\n") | 926 | (python-tests-look-at "a == 4):\n") |
| 725 | (should (eq (car (python-indent-context)) 'inside-paren)) | 927 | (should (eq (car (python-indent-context)) :inside-paren)) |
| 726 | (should (= (python-indent-calculate-indentation) 6)) | 928 | (should (= (python-indent-calculate-indentation) 6)) |
| 727 | (should (equal (python-indent-calculate-levels) '(0 4 6))))) | 929 | (python-indent-line) |
| 930 | (should (= (python-indent-calculate-indentation t) 4)) | ||
| 931 | (python-indent-line t) | ||
| 932 | (should (= (python-indent-calculate-indentation t) 0)) | ||
| 933 | (python-indent-line t) | ||
| 934 | (should (= (python-indent-calculate-indentation t) 6)))) | ||
| 935 | |||
| 936 | (ert-deftest python-indent-inside-string-1 () | ||
| 937 | "Test indentation for strings." | ||
| 938 | (python-tests-with-temp-buffer | ||
| 939 | " | ||
| 940 | multiline = ''' | ||
| 941 | bunch | ||
| 942 | of | ||
| 943 | lines | ||
| 944 | ''' | ||
| 945 | " | ||
| 946 | (python-tests-look-at "multiline = '''") | ||
| 947 | (should (eq (car (python-indent-context)) :after-line)) | ||
| 948 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 949 | (python-tests-look-at "bunch") | ||
| 950 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 951 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 952 | (python-tests-look-at "of") | ||
| 953 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 954 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 955 | (python-tests-look-at "lines") | ||
| 956 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 957 | (should (= (python-indent-calculate-indentation) 0)) | ||
| 958 | (python-tests-look-at "'''") | ||
| 959 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 960 | (should (= (python-indent-calculate-indentation) 0)))) | ||
| 961 | |||
| 962 | (ert-deftest python-indent-inside-string-2 () | ||
| 963 | "Test indentation for docstrings." | ||
| 964 | (python-tests-with-temp-buffer | ||
| 965 | " | ||
| 966 | def fn(a, b, c=True): | ||
| 967 | '''docstring | ||
| 968 | bunch | ||
| 969 | of | ||
| 970 | lines | ||
| 971 | ''' | ||
| 972 | " | ||
| 973 | (python-tests-look-at "'''docstring") | ||
| 974 | (should (eq (car (python-indent-context)) :after-block-start)) | ||
| 975 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 976 | (python-tests-look-at "bunch") | ||
| 977 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 978 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 979 | (python-tests-look-at "of") | ||
| 980 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 981 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 982 | (python-tests-look-at "lines") | ||
| 983 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 984 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 985 | (python-tests-look-at "'''") | ||
| 986 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 987 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 988 | |||
| 989 | (ert-deftest python-indent-inside-string-3 () | ||
| 990 | "Test indentation for nested strings." | ||
| 991 | (python-tests-with-temp-buffer | ||
| 992 | " | ||
| 993 | def fn(a, b, c=True): | ||
| 994 | some_var = ''' | ||
| 995 | bunch | ||
| 996 | of | ||
| 997 | lines | ||
| 998 | ''' | ||
| 999 | " | ||
| 1000 | (python-tests-look-at "some_var = '''") | ||
| 1001 | (should (eq (car (python-indent-context)) :after-block-start)) | ||
| 1002 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 1003 | (python-tests-look-at "bunch") | ||
| 1004 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 1005 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 1006 | (python-tests-look-at "of") | ||
| 1007 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 1008 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 1009 | (python-tests-look-at "lines") | ||
| 1010 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 1011 | (should (= (python-indent-calculate-indentation) 4)) | ||
| 1012 | (python-tests-look-at "'''") | ||
| 1013 | (should (eq (car (python-indent-context)) :inside-string)) | ||
| 1014 | (should (= (python-indent-calculate-indentation) 4)))) | ||
| 728 | 1015 | ||
| 729 | (ert-deftest python-indent-electric-colon-1 () | 1016 | (ert-deftest python-indent-electric-colon-1 () |
| 730 | "Test indentation case from Bug#18228." | 1017 | "Test indentation case from Bug#18228." |
| @@ -1802,6 +2089,23 @@ def f(): | |||
| 1802 | (python-nav-backward-up-list) | 2089 | (python-nav-backward-up-list) |
| 1803 | (should (looking-at "def f():")))) | 2090 | (should (looking-at "def f():")))) |
| 1804 | 2091 | ||
| 2092 | (ert-deftest python-indent-dedent-line-backspace-1 () | ||
| 2093 | "Check de-indentation on first call. Bug#18319." | ||
| 2094 | (python-tests-with-temp-buffer | ||
| 2095 | " | ||
| 2096 | if True: | ||
| 2097 | x () | ||
| 2098 | if False: | ||
| 2099 | " | ||
| 2100 | (python-tests-look-at "if False:") | ||
| 2101 | (call-interactively #'python-indent-dedent-line-backspace) | ||
| 2102 | (should (zerop (current-indentation))) | ||
| 2103 | ;; XXX: This should be a call to `undo' but it's triggering errors. | ||
| 2104 | (insert " ") | ||
| 2105 | (should (= (current-indentation) 4)) | ||
| 2106 | (call-interactively #'python-indent-dedent-line-backspace) | ||
| 2107 | (should (zerop (current-indentation))))) | ||
| 2108 | |||
| 1805 | 2109 | ||
| 1806 | ;;; Shell integration | 2110 | ;;; Shell integration |
| 1807 | 2111 | ||
diff --git a/test/automated/regexp-tests.el b/test/automated/regexp-tests.el index 31a4ee958c6..ee177b3e2e9 100644 --- a/test/automated/regexp-tests.el +++ b/test/automated/regexp-tests.el | |||
| @@ -23,6 +23,8 @@ | |||
| 23 | 23 | ||
| 24 | ;;; Code: | 24 | ;;; Code: |
| 25 | 25 | ||
| 26 | (require 'regexp-opt) | ||
| 27 | |||
| 26 | (ert-deftest regexp-test-regexp-opt () | 28 | (ert-deftest regexp-test-regexp-opt () |
| 27 | "Test the `compilation-error-regexp-alist' regexps. | 29 | "Test the `compilation-error-regexp-alist' regexps. |
| 28 | The test data is in `compile-tests--test-regexps-data'." | 30 | The test data is in `compile-tests--test-regexps-data'." |