, and are referred to as _m_e_t_a_f_i_e_d characters.
+ The printable ASCII characters not mentioned in the list
+ of emacs standard bindings are bound to the _s_e_l_f_-_i_n_s_e_r_t
+ function, which just inserts the given character into the
+ input line. In vi insertion mode, all characters not
+ specifically mentioned are bound to _s_e_l_f_-_i_n_s_e_r_t. Charac-
+ ters assigned to signal generation by _s_t_t_y(1) or the ter-
+ minal driver, such as C-Z or C-C, retain that function.
+ Upper and lower case _m_e_t_a_f_i_e_d characters are bound to the
+ same function in the emacs mode meta keymap. The remain-
+ ing characters are unbound, which causes readline to ring
+ the bell (subject to the setting of the bbeellll--ssttyyllee vari-
+ able).
+
+ EEmmaaccss MMooddee
+ Emacs Standard bindings
+
+ "C-@" set-mark
+ "C-A" beginning-of-line
+ "C-B" backward-char
+ "C-D" delete-char
+ "C-E" end-of-line
+ "C-F" forward-char
+ "C-G" abort
+ "C-H" backward-delete-char
+ "C-I" complete
+ "C-J" accept-line
+ "C-K" kill-line
+ "C-L" clear-screen
+ "C-M" accept-line
+ "C-N" next-history
+ "C-P" previous-history
+ "C-Q" quoted-insert
+ "C-R" reverse-search-history
+
+
+
+GNU 1998 Feb 19 13
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
+ "C-S" forward-search-history
+ "C-T" transpose-chars
+ "C-U" unix-line-discard
+ "C-V" quoted-insert
+ "C-W" unix-word-rubout
+ "C-Y" yank
+ "C-]" character-search
+ "C-_" undo
+ " " to "/" self-insert
+ "0" to "9" self-insert
+ ":" to "~" self-insert
+ "C-?" backward-delete-char
+
+ Emacs Meta bindings
+
+ "M-C-G" abort
+ "M-C-H" backward-kill-word
+ "M-C-I" tab-insert
+ "M-C-J" vi-editing-mode
+ "M-C-M" vi-editing-mode
+ "M-C-R" revert-line
+ "M-C-Y" yank-nth-arg
+ "M-C-[" complete
+ "M-C-]" character-search-backward
+ "M-space" set-mark
+ "M-#" insert-comment
+ "M-&" tilde-expand
+ "M-*" insert-completions
+ "M--" digit-argument
+ "M-." yank-last-arg
+ "M-0" digit-argument
+ "M-1" digit-argument
+ "M-2" digit-argument
+ "M-3" digit-argument
+ "M-4" digit-argument
+ "M-5" digit-argument
+ "M-6" digit-argument
+ "M-7" digit-argument
+ "M-8" digit-argument
+ "M-9" digit-argument
+ "M-<" beginning-of-history
+ "M-=" possible-completions
+ "M->" end-of-history
+ "M-?" possible-completions
+ "M-B" backward-word
+ "M-C" capitalize-word
+ "M-D" kill-word
+ "M-F" forward-word
+ "M-L" downcase-word
+ "M-N" non-incremental-forward-search-history
+ "M-P" non-incremental-reverse-search-history
+ "M-R" revert-line
+ "M-T" transpose-words
+ "M-U" upcase-word
+
+
+
+GNU 1998 Feb 19 14
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
+ "M-Y" yank-pop
+ "M-\" delete-horizontal-space
+ "M-~" tilde-expand
+ "M-C-?" backward-delete-word
+ "M-_" yank-last-arg
+
+ Emacs Control-X bindings
+
+ "C-XC-G" abort
+ "C-XC-R" re-read-init-file
+ "C-XC-U" undo
+ "C-XC-X" exchange-point-and-mark
+ "C-X(" start-kbd-macro
+ "C-X)" end-kbd-macro
+ "C-XE" call-last-kbd-macro
+ "C-XC-?" backward-kill-line
+
+
+ VVII MMooddee bbiinnddiinnggss
+ VI Insert Mode functions
+
+ "C-D" vi-eof-maybe
+ "C-H" backward-delete-char
+ "C-I" complete
+ "C-J" accept-line
+ "C-M" accept-line
+ "C-R" reverse-search-history
+ "C-S" forward-search-history
+ "C-T" transpose-chars
+ "C-U" unix-line-discard
+ "C-V" quoted-insert
+ "C-W" unix-word-rubout
+ "C-Y" yank
+ "C-[" vi-movement-mode
+ "C-_" undo
+ " " to "~" self-insert
+ "C-?" backward-delete-char
+
+ VI Command Mode functions
+
+ "C-D" vi-eof-maybe
+ "C-E" emacs-editing-mode
+ "C-G" abort
+ "C-H" backward-char
+ "C-J" accept-line
+ "C-K" kill-line
+ "C-L" clear-screen
+ "C-M" accept-line
+ "C-N" next-history
+ "C-P" previous-history
+ "C-Q" quoted-insert
+ "C-R" reverse-search-history
+ "C-S" forward-search-history
+ "C-T" transpose-chars
+
+
+
+GNU 1998 Feb 19 15
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
+ "C-U" unix-line-discard
+ "C-V" quoted-insert
+ "C-W" unix-word-rubout
+ "C-Y" yank
+ " " forward-char
+ "#" insert-comment
+ "$" end-of-line
+ "%" vi-match
+ "&" vi-tilde-expand
+ "*" vi-complete
+ "+" next-history
+ "," vi-char-search
+ "-" previous-history
+ "." vi-redo
+ "/" vi-search
+ "0" beginning-of-line
+ "1" to "9" vi-arg-digit
+ ";" vi-char-search
+ "=" vi-complete
+ "?" vi-search
+ "A" vi-append-eol
+ "B" vi-prev-word
+ "C" vi-change-to
+ "D" vi-delete-to
+ "E" vi-end-word
+ "F" vi-char-search
+ "G" vi-fetch-history
+ "I" vi-insert-beg
+ "N" vi-search-again
+ "P" vi-put
+ "R" vi-replace
+ "S" vi-subst
+ "T" vi-char-search
+ "U" revert-line
+ "W" vi-next-word
+ "X" backward-delete-char
+ "Y" vi-yank-to
+ "\" vi-complete
+ "^" vi-first-print
+ "_" vi-yank-arg
+ "`" vi-goto-mark
+ "a" vi-append-mode
+ "b" vi-prev-word
+ "c" vi-change-to
+ "d" vi-delete-to
+ "e" vi-end-word
+ "f" vi-char-search
+ "h" backward-char
+ "i" vi-insertion-mode
+ "j" next-history
+ "k" prev-history
+ "l" forward-char
+ "m" vi-set-mark
+ "n" vi-search-again
+
+
+
+GNU 1998 Feb 19 16
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
+ "p" vi-put
+ "r" vi-change-char
+ "s" vi-subst
+ "t" vi-char-search
+ "u" undo
+ "w" vi-next-word
+ "x" vi-delete
+ "y" vi-yank-to
+ "|" vi-column
+ "~" vi-change-case
+
+SSEEEE AALLSSOO
+ _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
+ _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
+ _b_a_s_h(1)
+
+FFIILLEESS
+ _~_/_._i_n_p_u_t_r_c
+ Individual rreeaaddlliinnee initialization file
+
+AAUUTTHHOORRSS
+ Brian Fox, Free Software Foundation (primary author)
+ bfox@ai.MIT.Edu
+
+ Chet Ramey, Case Western Reserve University
+ chet@ins.CWRU.Edu
+
+BBUUGG RREEPPOORRTTSS
+ If you find a bug in rreeaaddlliinnee,, you should report it. But
+ first, you should make sure that it really is a bug, and
+ that it appears in the latest version of the rreeaaddlliinnee
+ library that you have.
+
+ Once you have determined that a bug actually exists, mail
+ a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix,
+ you are welcome to mail that as well! Suggestions and
+ `philosophical' bug reports may be mailed to _b_u_g_-_r_e_a_d_-
+ _l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup
+ ggnnuu..bbaasshh..bbuugg.
+
+ Comments and bug reports concerning this manual page
+ should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u.
+
+BBUUGGSS
+ It's too big and too slow.
+
+
+
+
+
+
+
+
+
+
+
+
+GNU 1998 Feb 19 17
+
+
diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi
new file mode 100644
index 00000000000..d8491dc0cb0
Binary files /dev/null and b/readline/doc/readline.dvi differ
diff --git a/readline/doc/readline.html b/readline/doc/readline.html
new file mode 100644
index 00000000000..c708eb07fd1
--- /dev/null
+++ b/readline/doc/readline.html
@@ -0,0 +1,3482 @@
+
+
+
+
+GNU Readline Library
+
+
+GNU Readline Library
+Edition 2.2, for Readline Library
Version 2.1.
+September 1997
+Brian Fox, Free Software Foundation
+Chet Ramey, Case Western Reserve University
+
+
+
+
+@dircategory Libraries
+@direntry
+* Readline: (readline). The GNU readline library API
+
+
+
+
+This document describes the GNU Readline Library, a utility which aids
+in the consistency of user interface across discrete programs that need
+to provide a command line interface.
+
+
+
+Published by the Free Software Foundation
+675 Massachusetts Avenue,
+Cambridge, MA 02139 USA
+
+
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+
+
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+
+
+
+
+
+
+
+
+This chapter describes the basic features of the GNU
+command line editing interface.
+
+
+
+
+
+
+
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+
+
+The text C-k is read as `Control-K' and describes the character
+produced when the k key is pressed while the Control key
+is depressed.
+
+
+
+The text M-k is read as `Meta-K' and describes the character
+produced when the meta key (if you have one) is depressed, and the k
+key is pressed. If you do not have a meta key, the identical keystroke
+can be generated by typing ESC first, and then typing k.
+Either process is known as metafying the k key.
+
+
+
+The text M-C-k is read as `Meta-Control-k' and describes the
+character produced by metafying C-k.
+
+
+
+In addition, several keys have their own names. Specifically,
+DEL, ESC, LFD, SPC, RET, and TAB all
+stand for themselves when seen in this text, or in an init file
+(@xref{Readline Init File}).
+
+
+
+
+
+
+
+
+
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled. The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line. Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections. Then, when you are satisfied with
+the line, you simply press RETURN. You do not have to be at the
+end of the line to press RETURN; the entire line is accepted
+regardless of the location of the cursor within the line.
+
+
+
+
+
+
+
+
+There are only a few basic constructs allowed in the
+Readline init file. Blank lines are ignored.
+Lines beginning with a `#' are comments.
+Lines beginning with a `$' indicate conditional
+constructs (see section Conditional Init Constructs). Other lines
+denote variable settings and key bindings.
+
+
+
+
+- Variable Settings
+
-
+You can modify the run-time behavior of Readline by
+altering the values of variables in Readline
+using the
set
command within the init file. Here is how to
+change from the default Emacs-like key binding to use
+vi
line editing commands:
+
+
+
+set editing-mode vi
+
+
+A great deal of run-time behavior is changeable with the following
+variables.
+
+
+
+bell-style
+-
+
+Controls what happens when Readline wants to ring the terminal bell.
+If set to `none', Readline never rings the bell. If set to
+`visible', Readline uses a visible bell if one is available.
+If set to `audible' (the default), Readline attempts to ring
+the terminal's bell.
+
+
comment-begin
+-
+
+The string to insert at the beginning of the line when the
+
insert-comment
command is executed. The default value
+is "#"
.
+
+ completion-ignore-case
+-
+If set to `on', Readline performs filename matching and completion
+in a case-insensitive fashion.
+The default value is `off'.
+
+
completion-query-items
+-
+
+The number of possible completions that determines when the user is
+asked whether he wants to see the list of possibilities. If the
+number of possible completions is greater than this value,
+Readline will ask the user whether or not he wishes to view
+them; otherwise, they are simply listed. The default limit is
+
100
.
+
+ convert-meta
+-
+
+If set to `on', Readline will convert characters with the
+eighth bit set to an ASCII key sequence by stripping the eighth
+bit and prepending an ESC character, converting them to a
+meta-prefixed key sequence. The default value is `on'.
+
+
disable-completion
+-
+
+If set to `On', Readline will inhibit word completion.
+Completion characters will be inserted into the line as if they had
+been mapped to
self-insert
. The default is `off'.
+
+ editing-mode
+-
+
+The
editing-mode
variable controls which default set of
+key bindings is used. By default, Readline starts up in Emacs editing
+mode, where the keystrokes are most similar to Emacs. This variable can be
+set to either `emacs' or `vi'.
+
+ enable-keypad
+-
+
+When set to `on', Readline will try to enable the application
+keypad when it is called. Some systems need this to enable the
+arrow keys. The default is `off'.
+
+
expand-tilde
+-
+
+If set to `on', tilde expansion is performed when Readline
+attempts word completion. The default is `off'.
+
+
horizontal-scroll-mode
+-
+
+This variable can be set to either `on' or `off'. Setting it
+to `on' means that the text of the lines being edited will scroll
+horizontally on a single screen line when they are longer than the width
+of the screen, instead of wrapping onto a new screen line. By default,
+this variable is set to `off'.
+
+
keymap
+-
+
+Sets Readline's idea of the current keymap for key binding commands.
+Acceptable
keymap
names are
+emacs
,
+emacs-standard
,
+emacs-meta
,
+emacs-ctlx
,
+vi
,
+vi-command
, and
+vi-insert
.
+vi
is equivalent to vi-command
; emacs
is
+equivalent to emacs-standard
. The default value is emacs
.
+The value of the editing-mode
variable also affects the
+default keymap.
+
+ mark-directories
+-
+If set to `on', completed directory names have a slash
+appended. The default is `on'.
+
+
mark-modified-lines
+-
+
+This variable, when set to `on', causes Readline to display an
+asterisk (`*') at the start of history lines which have been modified.
+This variable is `off' by default.
+
+
input-meta
+-
+
+
+If set to `on', Readline will enable eight-bit input (it
+will not strip the eighth bit from the characters it reads),
+regardless of what the terminal claims it can support. The
+default value is `off'. The name
meta-flag
is a
+synonym for this variable.
+
+ output-meta
+-
+
+If set to `on', Readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence. The default is `off'.
+
+
print-completions-horizontally
+-
+If set to `on', Readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+The default is `off'.
+
+
show-all-if-ambiguous
+-
+
+This alters the default behavior of the completion functions. If
+set to `on',
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+The default value is `off'.
+
+
visible-stats
+-
+
+If set to `on', a character denoting a file's type
+is appended to the filename when listing possible
+completions. The default is `off'.
+
+
+
+ - Key Bindings
+
-
+The syntax for controlling key bindings in the init file is
+simple. First you have to know the name of the command that you
+want to change. The following sections contain tables of the command
+name, the default keybinding, if any, and a short description of what
+the command does.
+
+Once you know the name of the command, simply place the name of the key
+you wish to bind the command to, a colon, and then the name of the
+command on a line in the init file. The name of the key
+can be expressed in different ways, depending on which is most
+comfortable for you.
+
+
+
+- keyname: function-name or macro
+
-
+keyname is the name of a key spelled out in English. For example:
+
+
+Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: "> output"
+
+
+In the above example, C-u is bound to the function
+universal-argument
, and C-o is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+`> output' into the line).
+
+ - "keyseq": function-name or macro
+
-
+keyseq differs from keyname above in that strings
+denoting an entire key sequence can be specified, by placing
+the key sequence in double quotes. Some GNU Emacs style key
+escapes can be used, as in the following example, but the
+special character names are not recognized.
+
+
+
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
+"\e[11~": "Function Key 1"
+
+
+In the above example, C-u is bound to the function
+universal-argument
(just as it was in the first example),
+`C-x C-r' is bound to the function re-read-init-file
,
+and `ESC [ 1 1 ~' is bound to insert
+the text `Function Key 1'.
+
+
+
+The following GNU Emacs style escape sequences are available when
+specifying key sequences:
+
+
+
+\C-
+-
+control prefix
+
\M-
+-
+meta prefix
+
\e
+-
+an escape character
+
\\
+-
+backslash
+
\"
+-
+"
+
\'
+-
+'
+
+
+In addition to the GNU Emacs style escape sequences, a second
+set of backslash escapes is available:
+
+
+
+\a
+-
+alert (bell)
+
\b
+-
+backspace
+
\d
+-
+delete
+
\f
+-
+form feed
+
\n
+-
+newline
+
\r
+-
+carriage return
+
\t
+-
+horizontal tab
+
\v
+-
+vertical tab
+
\nnn
+-
+the character whose ASCII code is the octal value nnn
+(one to three digits)
+
\xnnn
+-
+the character whose ASCII code is the hexadecimal value nnn
+(one to three digits)
+
+
+When entering the text of a macro, single or double quotes must
+be used to indicate a macro definition.
+Unquoted text is assumed to be a function name.
+In the macro body, the backslash escapes described above are expanded.
+Backslash will quote any other character in the macro text,
+including `"' and `''.
+For example, the following binding will make `C-x \'
+insert a single `\' into the line:
+
+
+"\C-x\\": "\\"
+
+
+
+
+
+
+
+
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key
+bindings and variable settings to be performed as the result
+of tests. There are four parser directives used.
+
+
+
+
+$if
+-
+The
$if
construct allows bindings to be made based on the
+editing mode, the terminal being used, or the application using
+Readline. The text of the test extends to the end of the line;
+no characters are required to isolate it.
+
+
+
+mode
+-
+The
mode=
form of the $if
directive is used to test
+whether Readline is in emacs
or vi
mode.
+This may be used in conjunction
+with the `set keymap' command, for instance, to set bindings in
+the emacs-standard
and emacs-ctlx
keymaps only if
+Readline is starting out in emacs
mode.
+
+ term
+-
+The
term=
form may be used to include terminal-specific
+key bindings, perhaps to bind the key sequences output by the
+terminal's function keys. The word on the right side of the
+`=' is tested against both the full name of the terminal and
+the portion of the terminal name before the first `-'. This
+allows sun
to match both sun
and sun-cmd
,
+for instance.
+
+ application
+-
+The application construct is used to include
+application-specific settings. Each program using the Readline
+library sets the application name, and you can test for it.
+This could be used to bind key sequences to functions useful for
+a specific program. For instance, the following command adds a
+key sequence that quotes the current or previous word in Bash:
+
+
+$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+
+
+
+
+ $endif
+-
+This command, as seen in the previous example, terminates an
+
$if
command.
+
+ $else
+-
+Commands in this branch of the
$if
directive are executed if
+the test fails.
+
+ $include
+-
+This directive takes a single filename as an argument and reads commands
+and bindings from that file.
+
+
+$include /etc/inputrc
+
+
+
+
+
+
+
+
+
+Here is an example of an inputrc file. This illustrates key
+binding, variable assignment, and conditional syntax.
+
+
+
+
+# This file controls the behaviour of line input editing for
+# programs that use the Gnu Readline library. Existing programs
+# include FTP, Bash, and Gdb.
+#
+# You can re-read the inputrc file with C-x C-r.
+# Lines beginning with '#' are comments.
+#
+# First, include any systemwide bindings and variable assignments from
+# /etc/Inputrc
+$include /etc/Inputrc
+
+#
+# Set various bindings for emacs mode.
+
+set editing-mode emacs
+
+$if mode=emacs
+
+Meta-Control-h: backward-kill-word Text after the function name is ignored
+
+#
+# Arrow keys in keypad mode
+#
+#"\M-OD": backward-char
+#"\M-OC": forward-char
+#"\M-OA": previous-history
+#"\M-OB": next-history
+#
+# Arrow keys in ANSI mode
+#
+"\M-[D": backward-char
+"\M-[C": forward-char
+"\M-[A": previous-history
+"\M-[B": next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#"\M-\C-OD": backward-char
+#"\M-\C-OC": forward-char
+#"\M-\C-OA": previous-history
+#"\M-\C-OB": next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#"\M-\C-[D": backward-char
+#"\M-\C-[C": forward-char
+#"\M-\C-[A": previous-history
+#"\M-\C-[B": next-history
+
+C-q: quoted-insert
+
+$endif
+
+# An old-style binding. This happens to be the default.
+TAB: complete
+
+# Macros that are convenient for shell interaction
+$if Bash
+# edit the path
+"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+# prepare to type a quoted word -- insert open and close double quotes
+# and move to just after the open quote
+"\C-x\"": "\"\"\C-b"
+# insert a backslash (testing backslash escapes in sequences and macros)
+"\C-x\\": "\\"
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+# Add a binding to refresh the line, which is unbound
+"\C-xr": redraw-current-line
+# Edit variable on current line.
+"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+$endif
+
+# use a visible bell if one is available
+set bell-style visible
+
+# don't strip characters to 7 bits when reading
+set input-meta on
+
+# allow iso-latin1 characters to be inserted rather than converted to
+# prefix-meta sequences
+set convert-meta off
+
+# display characters with the eighth bit set directly rather than
+# as meta-prefixed characters
+set output-meta on
+
+# if there are more than 150 possible completions for a word, ask the
+# user if he wants to see all of them
+set completion-query-items 150
+
+# For FTP
+$if Ftp
+"\C-xg": "get \M-?"
+"\C-xt": "put \M-?"
+"\M-.": yank-last-arg
+$endif
+
+
+
+
+
+
+
+This section describes Readline commands that may be bound to key
+sequences.
+
+
+
+
+
+
+
+beginning-of-line (C-a)
+-
+
+Move to the start of the current line.
+
+
end-of-line (C-e)
+-
+
+Move to the end of the line.
+
+
forward-char (C-f)
+-
+
+Move forward a character.
+
+
backward-char (C-b)
+-
+
+Move back a character.
+
+
forward-word (M-f)
+-
+
+Move forward to the end of the next word. Words are composed of
+letters and digits.
+
+
backward-word (M-b)
+-
+
+Move back to the start of this, or the previous, word. Words are
+composed of letters and digits.
+
+
clear-screen (C-l)
+-
+
+Clear the screen and redraw the current line,
+leaving the current line at the top of the screen.
+
+
redraw-current-line ()
+-
+
+Refresh the current line. By default, this is unbound.
+
+
+
+
+
+
+
+
+
+accept-line (Newline, Return)
+-
+
+Accept the line regardless of where the cursor is. If this line is
+non-empty, add it to the history list. If this line was a history
+line, then restore the history line to its original state.
+
+
previous-history (C-p)
+-
+
+Move `up' through the history list.
+
+
next-history (C-n)
+-
+
+Move `down' through the history list.
+
+
beginning-of-history (M-<)
+-
+
+Move to the first line in the history.
+
+
end-of-history (M->)
+-
+
+Move to the end of the input history, i.e., the line currently
+being entered.
+
+
reverse-search-history (C-r)
+-
+
+Search backward starting at the current line and moving `up' through
+the history as necessary. This is an incremental search.
+
+
forward-search-history (C-s)
+-
+
+Search forward starting at the current line and moving `down' through
+the the history as necessary. This is an incremental search.
+
+
non-incremental-reverse-search-history (M-p)
+-
+
+Search backward starting at the current line and moving `up'
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+
non-incremental-forward-search-history (M-n)
+-
+
+Search forward starting at the current line and moving `down'
+through the the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+
history-search-forward ()
+-
+
+Search forward through the history for the string of characters
+between the start of the current line and the current cursor
+position (the point). This is a non-incremental search. By
+default, this command is unbound.
+
+
history-search-backward ()
+-
+
+Search backward through the history for the string of characters
+between the start of the current line and the point. This
+is a non-incremental search. By default, this command is unbound.
+
+
yank-nth-arg (M-C-y)
+-
+
+Insert the first argument to the previous command (usually
+the second word on the previous line). With an argument n,
+insert the nth word from the previous command (the words
+in the previous command begin with word 0). A negative argument
+inserts the nth word from the end of the previous command.
+
+
yank-last-arg (M-., M-_)
+-
+
+Insert last argument to the previous command (the last word of the
+previous history entry). With an
+argument, behave exactly like
yank-nth-arg
.
+Successive calls to yank-last-arg
move back through the history
+list, inserting the last argument of each line in turn.
+
+
+
+
+
+
+
+
+
+delete-char (C-d)
+-
+
+Delete the character under the cursor. If the cursor is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to
delete-char
, then
+return EOF
.
+
+ backward-delete-char (Rubout)
+-
+
+Delete the character behind the cursor. A numeric argument means
+to kill the characters instead of deleting them.
+
+
quoted-insert (C-q, C-v)
+-
+
+Add the next character typed to the line verbatim. This is
+how to insert key sequences like C-q, for example.
+
+
tab-insert (M-TAB)
+-
+
+Insert a tab character.
+
+
self-insert (a, b, A, 1, !, ...)
+-
+
+Insert yourself.
+
+
transpose-chars (C-t)
+-
+
+Drag the character before the cursor forward over
+the character at the cursor, moving the
+cursor forward as well. If the insertion point
+is at the end of the line, then this
+transposes the last two characters of the line.
+Negative arguments don't work.
+
+
transpose-words (M-t)
+-
+
+Drag the word behind the cursor past the word in front of the cursor
+moving the cursor over that word as well.
+
+
upcase-word (M-u)
+-
+
+Uppercase the current (or following) word. With a negative argument,
+uppercase the previous word, but do not move the cursor.
+
+
downcase-word (M-l)
+-
+
+Lowercase the current (or following) word. With a negative argument,
+lowercase the previous word, but do not move the cursor.
+
+
capitalize-word (M-c)
+-
+
+Capitalize the current (or following) word. With a negative argument,
+capitalize the previous word, but do not move the cursor.
+
+
+
+
+
+
+
+
+
+kill-line (C-k)
+-
+
+Kill the text from the current cursor position to the end of the line.
+
+
backward-kill-line (C-x Rubout)
+-
+
+Kill backward to the beginning of the line.
+
+
unix-line-discard (C-u)
+-
+
+Kill backward from the cursor to the beginning of the current line.
+The killed text is saved on the kill-ring.
+
+
kill-whole-line ()
+-
+
+Kill all characters on the current line, no matter where the
+cursor is. By default, this is unbound.
+
+
kill-word (M-d)
+-
+
+Kill from the cursor to the end of the current word, or if between
+words, to the end of the next word. Word boundaries are the same
+as
forward-word
.
+
+ backward-kill-word (M-DEL)
+-
+
+Kill the word behind the cursor. Word boundaries are the same
+as
backward-word
.
+
+ unix-word-rubout (C-w)
+-
+
+Kill the word behind the cursor, using white space as a word
+boundary. The killed text is saved on the kill-ring.
+
+
delete-horizontal-space ()
+-
+
+Delete all spaces and tabs around point. By default, this is unbound.
+
+
kill-region ()
+-
+
+Kill the text between the point and the mark (saved
+cursor position). This text is referred to as the region.
+By default, this command is unbound.
+
+
copy-region-as-kill ()
+-
+
+Copy the text in the region to the kill buffer, so it can be yanked
+right away. By default, this command is unbound.
+
+
copy-backward-word ()
+-
+
+Copy the word before point to the kill buffer.
+The word boundaries are the same as
backward-word
.
+By default, this command is unbound.
+
+ copy-forward-word ()
+-
+
+Copy the word following point to the kill buffer.
+The word boundaries are the same as
forward-word
.
+By default, this command is unbound.
+
+ yank (C-y)
+-
+
+Yank the top of the kill ring into the buffer at the current
+cursor position.
+
+
yank-pop (M-y)
+-
+
+Rotate the kill-ring, and yank the new top. You can only do this if
+the prior command is yank or yank-pop.
+
+
+
+
+
+
+
+digit-argument (M-0, M-1, ... M--)
+-
+
+Add this digit to the argument already accumulating, or start a new
+argument. M-- starts a negative argument.
+
+
universal-argument ()
+-
+
+This is another way to specify an argument.
+If this command is followed by one or more digits, optionally with a
+leading minus sign, those digits define the argument.
+If the command is followed by digits, executing
universal-argument
+again ends the numeric argument, but is otherwise ignored.
+As a special case, if this command is immediately followed by a
+character that is neither a digit or minus sign, the argument count
+for the next command is multiplied by four.
+The argument count is initially one, so executing this function the
+first time makes the argument count four, a second time makes the
+argument count sixteen, and so on.
+By default, this is not bound to a key.
+
+
+
+
+
+
+
+
+complete (TAB)
+-
+
+Attempt to do completion on the text before the cursor. This is
+application-specific. Generally, if you are typing a filename
+argument, you can do filename completion; if you are typing a command,
+you can do command completion; if you are typing in a symbol to GDB, you
+can do symbol name completion; if you are typing in a variable to Bash,
+you can do variable name completion, and so on.
+
+
possible-completions (M-?)
+-
+
+List the possible completions of the text before the cursor.
+
+
insert-completions (M-*)
+-
+
+Insert all completions of the text before point that would have
+been generated by
possible-completions
.
+
+ menu-complete ()
+-
+
+Similar to
complete
, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of menu-complete
steps through the list
+of possible completions, inserting each match in turn.
+At the end of the list of completions, the bell is rung and the
+original text is restored.
+An argument of n moves n positions forward in the list
+of matches; a negative argument may be used to move backward
+through the list.
+This command is intended to be bound to TAB
, but is unbound
+by default.
+
+
+
+
+
+
+
+
+start-kbd-macro (C-x ()
+-
+
+Begin saving the characters typed into the current keyboard macro.
+
+
end-kbd-macro (C-x ))
+-
+
+Stop saving the characters typed into the current keyboard macro
+and save the definition.
+
+
call-last-kbd-macro (C-x e)
+-
+
+Re-execute the last keyboard macro defined, by making the characters
+in the macro appear as if typed at the keyboard.
+
+
+
+
+
+
+
+
+re-read-init-file (C-x C-r)
+-
+
+Read in the contents of the inputrc file, and incorporate
+any bindings or variable assignments found there.
+
+
abort (C-g)
+-
+
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+
bell-style
).
+
+ do-uppercase-version (M-a, M-b, M-x, ...)
+-
+
+If the metafied character x is lowercase, run the command
+that is bound to the corresponding uppercase character.
+
+
prefix-meta (ESC)
+-
+
+Make the next character typed be metafied. This is for keyboards
+without a meta key. Typing `ESC f' is equivalent to typing
+`M-f'.
+
+
undo (C-_, C-x C-u)
+-
+
+Incremental undo, separately remembered for each line.
+
+
revert-line (M-r)
+-
+
+Undo all changes made to this line. This is like executing the
undo
+command enough times to get back to the beginning.
+
+ tilde-expand (M-~)
+-
+
+Perform tilde expansion on the current word.
+
+
set-mark (C-@)
+-
+
+Set the mark to the current point. If a
+numeric argument is supplied, the mark is set to that position.
+
+
exchange-point-and-mark (C-x C-x)
+-
+
+Swap the point with the mark. The current cursor position is set to
+the saved position, and the old cursor position is saved as the mark.
+
+
character-search (C-])
+-
+
+A character is read and point is moved to the next occurrence of that
+character. A negative count searches for previous occurrences.
+
+
character-search-backward (M-C-])
+-
+
+A character is read and point is moved to the previous occurrence
+of that character. A negative count searches for subsequent
+occurrences.
+
+
insert-comment (M-#)
+-
+
+The value of the
comment-begin
+variable is inserted at the beginning of the current line,
+and the line is accepted as if a newline had been typed.
+
+ dump-functions ()
+-
+
+Print all of the functions and their key bindings to the
+Readline output stream. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an inputrc file. This command is unbound by default.
+
+
dump-variables ()
+-
+
+Print all of the settable variables and their values to the
+Readline output stream. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an inputrc file. This command is unbound by default.
+
+
dump-macros ()
+-
+
+Print all of the Readline key sequences bound to macros and the
+strings they ouput. If a numeric argument is supplied,
+the output is formatted in such a way that it can be made part
+of an inputrc file. This command is unbound by default.
+
+
+
+
+
+
+
+
+While the Readline library does not have a full set of vi
+editing functions, it does contain enough to allow simple editing
+of the line. The Readline vi
mode behaves as specified in
+the POSIX 1003.2 standard.
+
+
+
+In order to switch interactively between emacs
and vi
+editing modes, use the command M-C-j (toggle-editing-mode).
+The Readline default is emacs
mode.
+
+
+
+When you enter a line in vi
mode, you are already placed in
+`insertion' mode, as if you had typed an `i'. Pressing ESC
+switches you into `command' mode, where you can edit the text of the
+line with the standard vi
movement keys, move to previous
+history lines with `k' and subsequent lines with `j', and
+so forth.
+
+
+
+
+
+
+
+
+This chapter describes the interface between the GNU Readline Library and
+other programs. If you are a programmer, and you wish to include the
+features found in GNU Readline
+such as completion, line editing, and interactive history manipulation
+in your own programs, this section is for you.
+
+
+
+
+
+
+
+
+Many programs provide a command line interface, such as mail
,
+ftp
, and sh
. For such programs, the default behaviour of
+Readline is sufficient. This section describes how to use Readline in
+the simplest way possible, perhaps to replace calls in your code to
+gets()
or fgets ()
.
+
+
+
+
+
+The function readline ()
prints a prompt and then reads and returns
+a single line of text from the user. The line readline
+returns is allocated with malloc ()
; you should free ()
+the line when you are done with it. The declaration for readline
+in ANSI C is
+
+
+
+
+char *readline (char *prompt);
+
+
+
+So, one might say
+
+
+char *line = readline ("Enter a line: ");
+
+
+
+in order to read a line of text from the user.
+The line returned has the final newline removed, so only the
+text remains.
+
+
+
+If readline
encounters an EOF
while reading the line, and the
+line is empty at that point, then (char *)NULL
is returned.
+Otherwise, the line is ended just as if a newline had been typed.
+
+
+
+If you want the user to be able to get at the line later, (with
+C-p for example), you must call add_history ()
to save the
+line away in a history list of such lines.
+
+
+
+
+add_history (line)
;
+
+
+
+For full details on the GNU History Library, see the associated manual.
+
+
+
+It is preferable to avoid saving empty lines on the history list, since
+users rarely have a burning need to reuse a blank line. Here is
+a function which usefully replaces the standard gets ()
library
+function, and has the advantage of no static buffer to overflow:
+
+
+
+
+/* A static variable for holding the line. */
+static char *line_read = (char *)NULL;
+
+/* Read a string, and return a pointer to it. Returns NULL on EOF. */
+char *
+rl_gets ()
+{
+ /* If the buffer has already been allocated, return the memory
+ to the free pool. */
+ if (line_read)
+ {
+ free (line_read);
+ line_read = (char *)NULL;
+ }
+
+ /* Get a line from the user. */
+ line_read = readline ("");
+
+ /* If the line has any text in it, save it on the history. */
+ if (line_read && *line_read)
+ add_history (line_read);
+
+ return (line_read);
+}
+
+
+
+This function gives the user the default behaviour of TAB
+completion: completion on file names. If you do not want Readline to
+complete on filenames, you can change the binding of the TAB key
+with rl_bind_key ()
.
+
+
+
+
+int rl_bind_key (int key, int (*function)());
+
+
+
+rl_bind_key ()
takes two arguments: key is the character that
+you want to bind, and function is the address of the function to
+call when key is pressed. Binding TAB to rl_insert ()
+makes TAB insert itself.
+rl_bind_key ()
returns non-zero if key is not a valid
+ASCII character code (between 0 and 255).
+
+
+
+Thus, to disable the default TAB behavior, the following suffices:
+
+
+rl_bind_key ('\t', rl_insert);
+
+
+
+This code should be executed once at the start of your program; you
+might write a function called initialize_readline ()
which
+performs this and other desired initializations, such as installing
+custom completers (see section Custom Completers).
+
+
+
+
+
+
+
+Readline provides many functions for manipulating the text of
+the line, but it isn't possible to anticipate the needs of all
+programs. This section describes the various functions and variables
+defined within the Readline library which allow a user program to add
+customized functionality to Readline.
+
+
+
+
+
+
+
+
+For readabilty, we declare a new type of object, called
+Function. A Function
is a C function which
+returns an int
. The type declaration for Function
is:
+
+
+
+typedef int Function ();
+
+
+
+The reason for declaring this new type is to make it easier to write
+code describing pointers to C functions. Let us say we had a variable
+called func which was a pointer to a function. Instead of the
+classic C declaration
+
+
+
+int (*)()func;
+
+
+
+we may write
+
+
+
+Function *func;
+
+
+
+Similarly, there are
+
+
+
+
+typedef void VFunction ();
+typedef char *CPFunction (); and
+typedef char **CPPFunction ();
+
+
+
+for functions returning no value, pointer to char
, and
+pointer to pointer to char
, respectively.
+
+
+
+
+
+
+
+In order to write new functions for Readline, you need to know the
+calling conventions for keyboard-invoked functions, and the names of the
+variables that describe the current state of the line read so far.
+
+
+
+The calling sequence for a command foo
looks like
+
+
+
+
+foo (int count, int key)
+
+
+
+where count is the numeric argument (or 1 if defaulted) and
+key is the key that invoked this function.
+
+
+
+It is completely up to the function as to what should be done with the
+numeric argument. Some functions use it as a repeat count, some
+as a flag, and others to choose alternate behavior (refreshing the current
+line as opposed to refreshing the screen, for example). Some choose to
+ignore it. In general, if a
+function uses the numeric argument as a repeat count, it should be able
+to do something useful with both negative and positive arguments.
+At the very least, it should be aware that it can be passed a
+negative argument.
+
+
+
+
+
+
+
+These variables are available to function writers.
+
+
+
+
+- Variable: char * rl_line_buffer
+
-
+This is the line gathered so far. You are welcome to modify the
+contents of the line, but see section Allowing Undoing.
+
+
+
+
+
+- Variable: int rl_point
+
-
+The offset of the current cursor position in
rl_line_buffer
+(the point).
+
+
+
+
+
+- Variable: int rl_end
+
-
+The number of characters present in
rl_line_buffer
. When
+rl_point
is at the end of the line, rl_point
and
+rl_end
are equal.
+
+
+
+
+
+- Variable: int rl_mark
+
-
+The mark (saved position) in the current line. If set, the mark
+and point define a region.
+
+
+
+
+
+- Variable: int rl_done
+
-
+Setting this to a non-zero value causes Readline to return the current
+line immediately.
+
+
+
+
+
+- Variable: int rl_pending_input
+
-
+Setting this to a value makes it the next keystroke read. This is a
+way to stuff a single character into the input stream.
+
+
+
+
+
+- Variable: char * rl_prompt
+
-
+The prompt Readline uses. This is set from the argument to
+
readline ()
, and should not be assigned to directly.
+
+
+
+
+
+- Variable: char * rl_library_version
+
-
+The version number of this revision of the library.
+
+
+
+
+
+- Variable: char * rl_terminal_name
+
-
+The terminal type, used for initialization.
+
+
+
+
+
+- Variable: char * rl_readline_name
+
-
+This variable is set to a unique name by each application using Readline.
+The value allows conditional parsing of the inputrc file
+(see section Conditional Init Constructs).
+
+
+
+
+
+- Variable: FILE * rl_instream
+
-
+The stdio stream from which Readline reads input.
+
+
+
+
+
+- Variable: FILE * rl_outstream
+
-
+The stdio stream to which Readline performs output.
+
+
+
+
+
+- Variable: Function * rl_startup_hook
+
-
+If non-zero, this is the address of a function to call just
+before
readline
prints the first prompt.
+
+
+
+
+
+- Variable: Function * rl_event_hook
+
-
+If non-zero, this is the address of a function to call periodically
+when readline is waiting for terminal input.
+
+
+
+
+
+- Variable: Function * rl_getc_function
+
-
+If non-zero,
readline
will call indirectly through this pointer
+to get a character from the input stream. By default, it is set to
+rl_getc
, the default readline
character input function
+(see section Utility Functions).
+
+
+
+
+
+- Variable: VFunction * rl_redisplay_function
+
-
+If non-zero,
readline
will call indirectly through this pointer
+to update the display with the current contents of the editing buffer.
+By default, it is set to rl_redisplay
, the default readline
+redisplay function (see section Redisplay).
+
+
+
+
+
+- Variable: Keymap rl_executing_keymap
+
-
+This variable is set to the keymap (see section Selecting a Keymap) in which the
+currently executing readline function was found.
+
+
+
+
+
+- Variable: Keymap rl_binding_keymap
+
-
+This variable is set to the keymap (see section Selecting a Keymap) in which the
+last key binding occurred.
+
+
+
+
+
+
+
+
+
+
+
+
+The user can dynamically change the bindings of keys while using
+Readline. This is done by representing the function with a descriptive
+name. The user is able to type the descriptive name when referring to
+the function. Thus, in an init file, one might find
+
+
+
+
+Meta-Rubout: backward-kill-word
+
+
+
+This binds the keystroke Meta-Rubout to the function
+descriptively named backward-kill-word
. You, as the
+programmer, should bind the functions you write to descriptive names as
+well. Readline provides a function for doing that:
+
+
+
+
+- Function: int rl_add_defun (char *name, Function *function, int key)
+
-
+Add name to the list of named functions. Make function be
+the function that gets called. If key is not -1, then bind it to
+function using
rl_bind_key ()
.
+
+
+
+
+Using this function alone is sufficient for most applications. It is
+the recommended way to add a few functions to the default functions that
+Readline has built in. If you need to do something other
+than adding a function to Readline, you may need to use the
+underlying functions described below.
+
+
+
+
+
+
+
+Key bindings take place on a keymap. The keymap is the
+association between the keys that the user types and the functions that
+get run. You can make your own keymaps, copy existing keymaps, and tell
+Readline which keymap to use.
+
+
+
+
+- Function: Keymap rl_make_bare_keymap ()
+
-
+Returns a new, empty keymap. The space for the keymap is allocated with
+
malloc ()
; you should free ()
it when you are done.
+
+
+
+
+
+- Function: Keymap rl_copy_keymap (Keymap map)
+
-
+Return a new keymap which is a copy of map.
+
+
+
+
+
+- Function: Keymap rl_make_keymap ()
+
-
+Return a new keymap with the printing characters bound to rl_insert,
+the lowercase Meta characters bound to run their equivalents, and
+the Meta digits bound to produce numeric arguments.
+
+
+
+
+
+- Function: void rl_discard_keymap (Keymap keymap)
+
-
+Free the storage associated with keymap.
+
+
+
+
+Readline has several internal keymaps. These functions allow you to
+change which keymap is active.
+
+
+
+
+- Function: Keymap rl_get_keymap ()
+
-
+Returns the currently active keymap.
+
+
+
+
+
+- Function: void rl_set_keymap (Keymap keymap)
+
-
+Makes keymap the currently active keymap.
+
+
+
+
+
+- Function: Keymap rl_get_keymap_by_name (char *name)
+
-
+Return the keymap matching name. name is one which would
+be supplied in a
set keymap
inputrc line (@xref{Readline Init File}).
+
+
+
+
+
+- Function: char * rl_get_keymap_name (Keymap keymap)
+
-
+Return the name matching keymap. name is one which would
+be supplied in a
set keymap
inputrc line (@xref{Readline Init File}).
+
+
+
+
+
+
+
+
+You associate keys with functions through the keymap. Readline has
+several internal keymaps: emacs_standard_keymap
,
+emacs_meta_keymap
, emacs_ctlx_keymap
,
+vi_movement_keymap
, and vi_insertion_keymap
.
+emacs_standard_keymap
is the default, and the examples in
+this manual assume that.
+
+
+
+These functions manage key bindings.
+
+
+
+
+- Function: int rl_bind_key (int key, Function *function)
+
-
+Binds key to function in the currently active keymap.
+Returns non-zero in the case of an invalid key.
+
+
+
+
+
+- Function: int rl_bind_key_in_map (int key, Function *function, Keymap map)
+
-
+Bind key to function in map. Returns non-zero in the case
+of an invalid key.
+
+
+
+
+
+- Function: int rl_unbind_key (int key)
+
-
+Bind key to the null function in the currently active keymap.
+Returns non-zero in case of error.
+
+
+
+
+
+- Function: int rl_unbind_key_in_map (int key, Keymap map)
+
-
+Bind key to the null function in map.
+Returns non-zero in case of error.
+
+
+
+
+
+- Function: int rl_unbind_function_in_map (Function *function, Keymap map)
+
-
+Unbind all keys that execute function in map.
+
+
+
+
+
+- Function: int rl_unbind_command_in_map (char *command, Keymap map)
+
-
+Unbind all keys that are bound to command in map.
+
+
+
+
+
+- Function: int rl_generic_bind (int type, char *keyseq, char *data, Keymap map)
+
-
+Bind the key sequence represented by the string keyseq to the arbitrary
+pointer data. type says what kind of data is pointed to by
+data; this can be a function (
ISFUNC
), a macro
+(ISMACR
), or a keymap (ISKMAP
). This makes new keymaps as
+necessary. The initial keymap in which to do bindings is map.
+
+
+
+
+
+- Function: int rl_parse_and_bind (char *line)
+
-
+Parse line as if it had been read from the
inputrc
file and
+perform any key bindings and variable assignments found
+(@xref{Readline Init File}).
+
+
+
+
+
+- Function: int rl_read_init_file (char *filename)
+
-
+Read keybindings and variable assignments from filename
+(@xref{Readline Init File}).
+
+
+
+
+
+
+
+
+These functions allow you to find out what keys invoke named functions
+and the functions invoked by a particular key sequence.
+
+
+
+
+- Function: Function * rl_named_function (char *name)
+
-
+Return the function with name name.
+
+
+
+
+
+- Function: Function * rl_function_of_keyseq (char *keyseq, Keymap map, int *type)
+
-
+Return the function invoked by keyseq in keymap map.
+If map is NULL, the current keymap is used. If type is
+not NULL, the type of the object is returned in it (one of
ISFUNC
,
+ISKMAP
, or ISMACR
).
+
+
+
+
+
+- Function: char ** rl_invoking_keyseqs (Function *function)
+
-
+Return an array of strings representing the key sequences used to
+invoke function in the current keymap.
+
+
+
+
+
+- Function: char ** rl_invoking_keyseqs_in_map (Function *function, Keymap map)
+
-
+Return an array of strings representing the key sequences used to
+invoke function in the keymap map.
+
+
+
+
+
+- Function: void rl_function_dumper (int readable)
+
-
+Print the readline function names and the key sequences currently
+bound to them to
rl_outstream
. If readable is non-zero,
+the list is formatted in such a way that it can be made part of an
+inputrc
file and re-read.
+
+
+
+
+
+- Function: void rl_list_funmap_names ()
+
-
+Print the names of all bindable Readline functions to
rl_outstream
.
+
+
+
+
+
+
+
+
+Supporting the undo command is a painless thing, and makes your
+functions much more useful. It is certainly easy to try
+something if you know you can undo it. I could use an undo function for
+the stock market.
+
+
+
+If your function simply inserts text once, or deletes text once, and
+uses rl_insert_text ()
or rl_delete_text ()
to do it, then
+undoing is already done for you automatically.
+
+
+
+If you do multiple insertions or multiple deletions, or any combination
+of these operations, you should group them together into one operation.
+This is done with rl_begin_undo_group ()
and
+rl_end_undo_group ()
.
+
+
+
+The types of events that can be undone are:
+
+
+
+
+enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
+
+
+
+Notice that UNDO_DELETE
means to insert some text, and
+UNDO_INSERT
means to delete some text. That is, the undo code
+tells undo what to undo, not how to undo it. UNDO_BEGIN
and
+UNDO_END
are tags added by rl_begin_undo_group ()
and
+rl_end_undo_group ()
.
+
+
+
+
+- Function: int rl_begin_undo_group ()
+
-
+Begins saving undo information in a group construct. The undo
+information usually comes from calls to
rl_insert_text ()
and
+rl_delete_text ()
, but could be the result of calls to
+rl_add_undo ()
.
+
+
+
+
+
+- Function: int rl_end_undo_group ()
+
-
+Closes the current undo group started with
rl_begin_undo_group
+()
. There should be one call to rl_end_undo_group ()
+for each call to rl_begin_undo_group ()
.
+
+
+
+
+
+- Function: void rl_add_undo (enum undo_code what, int start, int end, char *text)
+
-
+Remember how to undo an event (according to what). The affected
+text runs from start to end, and encompasses text.
+
+
+
+
+
+- Function: void free_undo_list ()
+
-
+Free the existing undo list.
+
+
+
+
+
+- Function: int rl_do_undo ()
+
-
+Undo the first thing on the undo list. Returns
0
if there was
+nothing to undo, non-zero if something was undone.
+
+
+
+
+Finally, if you neither insert nor delete text, but directly modify the
+existing text (e.g., change its case), call rl_modifying ()
+once, just before you modify the text. You must supply the indices of
+the text range that you are going to modify.
+
+
+
+
+- Function: int rl_modifying (int start, int end)
+
-
+Tell Readline to save the text between start and end as a
+single undo unit. It is assumed that you will subsequently modify
+that text.
+
+
+
+
+
+
+
+
+
+- Function: void rl_redisplay ()
+
-
+Change what's displayed on the screen to reflect the current contents
+of
rl_line_buffer
.
+
+
+
+
+
+- Function: int rl_forced_update_display ()
+
-
+Force the line to be updated and redisplayed, whether or not
+Readline thinks the screen display is correct.
+
+
+
+
+
+- Function: int rl_on_new_line ()
+
-
+Tell the update routines that we have moved onto a new (empty) line,
+usually after ouputting a newline.
+
+
+
+
+
+- Function: int rl_reset_line_state ()
+
-
+Reset the display state to a clean state and redisplay the current line
+starting on a new line.
+
+
+
+
+
+- Function: int rl_message (va_alist)
+
-
+The arguments are a string as would be supplied to
printf
. The
+resulting string is displayed in the echo area. The echo area
+is also used to display numeric arguments and search strings.
+
+
+
+
+
+- Function: int rl_clear_message ()
+
-
+Clear the message in the echo area.
+
+
+
+
+
+
+
+
+
+- Function: int rl_insert_text (char *text)
+
-
+Insert text into the line at the current cursor position.
+
+
+
+
+
+- Function: int rl_delete_text (int start, int end)
+
-
+Delete the text between start and end in the current line.
+
+
+
+
+
+- Function: char * rl_copy_text (int start, int end)
+
-
+Return a copy of the text between start and end in
+the current line.
+
+
+
+
+
+- Function: int rl_kill_text (int start, int end)
+
-
+Copy the text between start and end in the current line
+to the kill ring, appending or prepending to the last kill if the
+last command was a kill command. The text is deleted.
+If start is less than end,
+the text is appended, otherwise prepended. If the last command was
+not a kill, a new kill ring slot is used.
+
+
+
+
+
+
+
+
+
+- Function: int rl_read_key ()
+
-
+Return the next character available. This handles input inserted into
+the input stream via pending input (see section Readline Variables)
+and
rl_stuff_char ()
, macros, and characters read from the keyboard.
+
+
+
+
+
+- Function: int rl_getc (FILE *)
+
-
+Return the next character available from the keyboard.
+
+
+
+
+
+- Function: int rl_stuff_char (int c)
+
-
+Insert c into the Readline input stream. It will be "read"
+before Readline attempts to read characters from the terminal with
+
rl_read_key ()
.
+
+
+
+
+
+- Function: rl_extend_line_buffer (int len)
+
-
+Ensure that
rl_line_buffer
has enough space to hold len
+characters, possibly reallocating it if necessary.
+
+
+
+
+
+- Function: int rl_initialize ()
+
-
+Initialize or re-initialize Readline's internal state.
+
+
+
+
+
+- Function: int rl_reset_terminal (char *terminal_name)
+
-
+Reinitialize Readline's idea of the terminal settings using
+terminal_name as the terminal type (e.g.,
vt100
).
+
+
+
+
+
+- Function: int alphabetic (int c)
+
-
+Return 1 if c is an alphabetic character.
+
+
+
+
+
+- Function: int numeric (int c)
+
-
+Return 1 if c is a numeric character.
+
+
+
+
+
+- Function: int ding ()
+
-
+Ring the terminal bell, obeying the setting of
bell-style
.
+
+
+
+
+The following are implemented as macros, defined in chartypes.h
.
+
+
+
+
+- Function: int uppercase_p (int c)
+
-
+Return 1 if c is an uppercase alphabetic character.
+
+
+
+
+
+- Function: int lowercase_p (int c)
+
-
+Return 1 if c is a lowercase alphabetic character.
+
+
+
+
+
+- Function: int digit_p (int c)
+
-
+Return 1 if c is a numeric character.
+
+
+
+
+
+- Function: int to_upper (int c)
+
-
+If c is a lowercase alphabetic character, return the corresponding
+uppercase character.
+
+
+
+
+
+- Function: int to_lower (int c)
+
-
+If c is an uppercase alphabetic character, return the corresponding
+lowercase character.
+
+
+
+
+
+- Function: int digit_value (int c)
+
-
+If c is a number, return the value it represents.
+
+
+
+
+
+
+
+
+An alternate interface is available to plain readline()
. Some
+applications need to interleave keyboard I/O with file, device, or
+window system I/O, typically by using a main loop to select()
+on various file descriptors. To accomodate this need, readline can
+also be invoked as a `callback' function from an event loop. There
+are functions available to make this easy.
+
+
+
+
+- Function: void rl_callback_handler_install (char *prompt, Vfunction *lhandler)
+
-
+Set up the terminal for readline I/O and display the initial
+expanded value of prompt. Save the value of lhandler to
+use as a callback when a complete line of input has been entered.
+
+
+
+
+
+- Function: void rl_callback_read_char ()
+
-
+Whenever an application determines that keyboard input is available, it
+should call
rl_callback_read_char()
, which will read the next
+character from the current input source. If that character completes the
+line, rl_callback_read_char
will invoke the lhandler
+function saved by rl_callback_handler_install
to process the
+line. EOF
is indicated by calling lhandler with a
+NULL
line.
+
+
+
+
+
+- Function: void rl_callback_handler_remove ()
+
-
+Restore the terminal to its initial state and remove the line handler.
+This may be called from within a callback as well as independently.
+
+
+
+
+
+
+
+
+Here is a function which changes lowercase characters to their uppercase
+equivalents, and uppercase characters to lowercase. If
+this function was bound to `M-c', then typing `M-c' would
+change the case of the character under point. Typing `M-1 0 M-c'
+would change the case of the following 10 characters, leaving the cursor on
+the last character changed.
+
+
+
+
+/* Invert the case of the COUNT following characters. */
+int
+invert_case_line (count, key)
+ int count, key;
+{
+ register int start, end, i;
+
+ start = rl_point;
+
+ if (rl_point >= rl_end)
+ return (0);
+
+ if (count < 0)
+ {
+ direction = -1;
+ count = -count;
+ }
+ else
+ direction = 1;
+
+ /* Find the end of the range to modify. */
+ end = start + (count * direction);
+
+ /* Force it to be within range. */
+ if (end > rl_end)
+ end = rl_end;
+ else if (end < 0)
+ end = 0;
+
+ if (start == end)
+ return (0);
+
+ if (start > end)
+ {
+ int temp = start;
+ start = end;
+ end = temp;
+ }
+
+ /* Tell readline that we are modifying the line, so it will save
+ the undo information. */
+ rl_modifying (start, end);
+
+ for (i = start; i != end; i++)
+ {
+ if (uppercase_p (rl_line_buffer[i]))
+ rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
+ else if (lowercase_p (rl_line_buffer[i]))
+ rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
+ }
+ /* Move point to on top of the last character changed. */
+ rl_point = (direction == 1) ? end - 1 : start;
+ return (0);
+}
+
+
+
+
+
+
+
+Typically, a program that reads commands from the user has a way of
+disambiguating commands and data. If your program is one of these, then
+it can provide completion for commands, data, or both.
+The following sections describe how your program and Readline
+cooperate to provide this service.
+
+
+
+
+
+
+
+
+In order to complete some text, the full list of possible completions
+must be available. That is, it is not possible to accurately
+expand a partial word without knowing all of the possible words
+which make sense in that context. The Readline library provides
+the user interface to completion, and two of the most common
+completion functions: filename and username. For completing other types
+of text, you must write your own completion function. This section
+describes exactly what such functions must do, and provides an example.
+
+
+
+There are three major functions used to perform completion:
+
+
+
+
+-
+
+The user-interface function
rl_complete ()
. This function is
+called with the same arguments as other Readline
+functions intended for interactive use: count and
+invoking_key. It isolates the word to be completed and calls
+completion_matches ()
to generate a list of possible completions.
+It then either lists the possible completions, inserts the possible
+completions, or actually performs the
+completion, depending on which behavior is desired.
+
+ -
+
+The internal function
completion_matches ()
uses your
+generator function to generate the list of possible matches, and
+then returns the array of these matches. You should place the address
+of your generator function in rl_completion_entry_function
.
+
+ -
+
+The generator function is called repeatedly from
+
completion_matches ()
, returning a string each time. The
+arguments to the generator function are text and state.
+text is the partial word to be completed. state is zero the
+first time the function is called, allowing the generator to perform
+any necessary initialization, and a positive non-zero integer for
+each subsequent call. When the generator function returns
+(char *)NULL
this signals completion_matches ()
that there are
+no more possibilities left. Usually the generator function computes the
+list of possible completions when state is zero, and returns them
+one at a time on subsequent calls. Each string the generator function
+returns as a match must be allocated with malloc()
; Readline
+frees the strings when it has finished with them.
+
+
+
+
+
+- Function: int rl_complete (int ignore, int invoking_key)
+
-
+Complete the word at or before point. You have supplied the function
+that does the initial simple matching selection algorithm (see
+
completion_matches ()
). The default is to do filename completion.
+
+
+
+
+
+- Variable: Function * rl_completion_entry_function
+
-
+This is a pointer to the generator function for
completion_matches
+()
. If the value of rl_completion_entry_function
is
+(Function *)NULL
then the default filename generator function,
+filename_completion_function ()
, is used.
+
+
+
+
+
+
+
+
+Here is the complete list of callable completion functions present in
+Readline.
+
+
+
+
+- Function: int rl_complete_internal (int what_to_do)
+
-
+Complete the word at or before point. what_to_do says what to do
+with the completion. A value of `?' means list the possible
+completions. `TAB' means do standard completion. `*' means
+insert all of the possible completions. `!' means to display
+all of the possible completions, if there is more than one, as well as
+performing partial completion.
+
+
+
+
+
+- Function: int rl_complete (int ignore, int invoking_key)
+
-
+Complete the word at or before point. You have supplied the function
+that does the initial simple matching selection algorithm (see
+
completion_matches ()
and rl_completion_entry_function
).
+The default is to do filename
+completion. This calls rl_complete_internal ()
with an
+argument depending on invoking_key.
+
+
+
+
+
+- Function: int rl_possible_completions (int count, int invoking_key))
+
-
+List the possible completions. See description of
rl_complete
+()
. This calls rl_complete_internal ()
with an argument of
+`?'.
+
+
+
+
+
+- Function: int rl_insert_completions (int count, int invoking_key))
+
-
+Insert the list of possible completions into the line, deleting the
+partially-completed word. See description of
rl_complete ()
.
+This calls rl_complete_internal ()
with an argument of `*'.
+
+
+
+
+
+- Function: char ** completion_matches (char *text, CPFunction *entry_func)
+
-
+Returns an array of
(char *)
which is a list of completions for
+text. If there are no completions, returns (char **)NULL
.
+The first entry in the returned array is the substitution for text.
+The remaining entries are the possible completions. The array is
+terminated with a NULL
pointer.
+
+
+
+entry_func is a function of two args, and returns a
+(char *)
. The first argument is text. The second is a
+state argument; it is zero on the first call, and non-zero on subsequent
+calls. entry_func returns a NULL
pointer to the caller
+when there are no more matches.
+
+
+
+
+
+- Function: char * filename_completion_function (char *text, int state)
+
-
+A generator function for filename completion in the general case. Note
+that completion in Bash is a little different because of all
+the pathnames that must be followed when looking up completions for a
+command. The Bash source is a useful reference for writing custom
+completion functions.
+
+
+
+
+
+- Function: char * username_completion_function (char *text, int state)
+
-
+A completion generator for usernames. text contains a partial
+username preceded by a random character (usually `~'). As with all
+completion generators, state is zero on the first call and non-zero
+for subsequent calls.
+
+
+
+
+
+
+
+
+
+- Variable: Function * rl_completion_entry_function
+
-
+A pointer to the generator function for
completion_matches ()
.
+NULL
means to use filename_entry_function ()
, the default
+filename completer.
+
+
+
+
+
+- Variable: CPPFunction * rl_attempted_completion_function
+
-
+A pointer to an alternative function to create matches.
+The function is called with text, start, and end.
+start and end are indices in
rl_line_buffer
saying
+what the boundaries of text are. If this function exists and
+returns NULL
, or if this variable is set to NULL
, then
+rl_complete ()
will call the value of
+rl_completion_entry_function
to generate matches, otherwise the
+array of strings returned will be used.
+
+
+
+
+
+- Variable: CPFunction * rl_filename_quoting_function
+
-
+A pointer to a function that will quote a filename in an application-
+specific fashion. This is called if filename completion is being
+attempted and one of the characters in
rl_filename_quote_characters
+appears in a completed filename. The function is called with
+text, match_type, and quote_pointer. The text
+is the filename to be quoted. The match_type is either
+SINGLE_MATCH
, if there is only one completion match, or
+MULT_MATCH
. Some functions use this to decide whether or not to
+insert a closing quote character. The quote_pointer is a pointer
+to any opening quote character the user typed. Some functions choose
+to reset this character.
+
+
+
+
+
+- Variable: CPFunction * rl_filename_dequoting_function
+
-
+A pointer to a function that will remove application-specific quoting
+characters from a filename before completion is attempted, so those
+characters do not interfere with matching the text against names in
+the filesystem. It is called with text, the text of the word
+to be dequoted, and quote_char, which is the quoting character
+that delimits the filename (usually `'' or `"'). If
+quote_char is zero, the filename was not in an embedded string.
+
+
+
+
+
+- Variable: Function * rl_char_is_quoted_p
+
-
+A pointer to a function to call that determines whether or not a specific
+character in the line buffer is quoted, according to whatever quoting
+mechanism the program calling readline uses. The function is called with
+two arguments: text, the text of the line, and index, the
+index of the character in the line. It is used to decide whether a
+character found in
rl_completer_word_break_characters
should be
+used to break words for the completer.
+
+
+
+
+
+- Variable: int rl_completion_query_items
+
-
+Up to this many items will be displayed in response to a
+possible-completions call. After that, we ask the user if she is sure
+she wants to see them all. The default value is 100.
+
+
+
+
+
+- Variable: char * rl_basic_word_break_characters
+
-
+The basic list of characters that signal a break between words for the
+completer routine. The default value of this variable is the characters
+which break words for completion in Bash, i.e.,
+
" \t\n\"\\'`@$><=;|&{("
.
+
+
+
+
+
+- Variable: char * rl_basic_quote_characters
+
-
+List of quote characters which can cause a word break.
+
+
+
+
+
+- Variable: char * rl_completer_word_break_characters
+
-
+The list of characters that signal a break between words for
+
rl_complete_internal ()
. The default list is the value of
+rl_basic_word_break_characters
.
+
+
+
+
+
+- Variable: char * rl_completer_quote_characters
+
-
+List of characters which can be used to quote a substring of the line.
+Completion occurs on the entire substring, and within the substring
+
rl_completer_word_break_characters
are treated as any other character,
+unless they also appear within this list.
+
+
+
+
+
+- Variable: char * rl_filename_quote_characters
+
-
+A list of characters that cause a filename to be quoted by the completer
+when they appear in a completed filename. The default is the null string.
+
+
+
+
+
+- Variable: char * rl_special_prefixes
+
-
+The list of characters that are word break characters, but should be
+left in text when it is passed to the completion function.
+Programs can use this to help determine what kind of completing to do.
+For instance, Bash sets this variable to "$@" so that it can complete
+shell variables and hostnames.
+
+
+
+
+
+- Variable: int rl_completion_append_character
+
-
+When a single completion alternative matches at the end of the command
+line, this character is appended to the inserted completion text. The
+default is a space character (` '). Setting this to the null
+character (`\0') prevents anything being appended automatically.
+This can be changed in custom completion functions to
+provide the "most sensible word separator character" according to
+an application-specific command line syntax specification.
+
+
+
+
+
+- Variable: int rl_ignore_completion_duplicates
+
-
+If non-zero, then disallow duplicates in the matches. Default is 1.
+
+
+
+
+
+- Variable: int rl_filename_completion_desired
+
-
+Non-zero means that the results of the matches are to be treated as
+filenames. This is always zero on entry, and can only be changed
+within a completion entry generator function. If it is set to a non-zero
+value, directory names have a slash appended and Readline attempts to
+quote completed filenames if they contain any embedded word break
+characters.
+
+
+
+
+
+- Variable: int rl_filename_quoting_desired
+
-
+Non-zero means that the results of the matches are to be quoted using
+double quotes (or an application-specific quoting mechanism) if the
+completed filename contains any characters in
+
rl_filename_quote_chars
. This is always non-zero
+on entry, and can only be changed within a completion entry generator
+function. The quoting is effected via a call to the function pointed to
+by rl_filename_quoting_function
.
+
+
+
+
+
+- Variable: int rl_inhibit_completion
+
-
+If this variable is non-zero, completion is inhibit<ed. The completion
+character will be inserted as any other bound to
self-insert
.
+
+
+
+
+
+- Variable: Function * rl_ignore_some_completions_function
+
-
+This function, if defined, is called by the completer when real filename
+completion is done, after all the matching names have been generated.
+It is passed a
NULL
terminated array of matches.
+The first element (matches[0]
) is the
+maximal substring common to all matches. This function can
+re-arrange the list of matches as required, but each element deleted
+from the array must be freed.
+
+
+
+
+
+- Variable: Function * rl_directory_completion_hook
+
-
+This function, if defined, is allowed to modify the directory portion
+of filenames Readline completes. It is called with the address of a
+string (the current directory name) as an argument. It could be used
+to expand symbolic links or shell variables in pathnames.
+
+
+
+
+
+
+
+
+Here is a small application demonstrating the use of the GNU Readline
+library. It is called fileman
, and the source code resides in
+`examples/fileman.c'. This sample application provides
+completion of command names, line editing features, and access to the
+history list.
+
+
+
+
+/* fileman.c -- A tiny application which demonstrates how to use the
+ GNU Readline library. This application interactively allows users
+ to manipulate files and their modes. */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <sys/errno.h>
+
+#include <readline/readline.h>
+#include <readline/history.h>
+
+extern char *getwd ();
+extern char *xmalloc ();
+
+/* The names of functions that actually do the manipulation. */
+int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
+int com_delete (), com_help (), com_cd (), com_quit ();
+
+/* A structure which contains information on the commands this program
+ can understand. */
+
+typedef struct {
+ char *name; /* User printable name of the function. */
+ Function *func; /* Function to call to do the job. */
+ char *doc; /* Documentation for this function. */
+} COMMAND;
+
+COMMAND commands[] = {
+ { "cd", com_cd, "Change to directory DIR" },
+ { "delete", com_delete, "Delete FILE" },
+ { "help", com_help, "Display this text" },
+ { "?", com_help, "Synonym for `help'" },
+ { "list", com_list, "List files in DIR" },
+ { "ls", com_list, "Synonym for `list'" },
+ { "pwd", com_pwd, "Print the current working directory" },
+ { "quit", com_quit, "Quit using Fileman" },
+ { "rename", com_rename, "Rename FILE to NEWNAME" },
+ { "stat", com_stat, "Print out statistics on FILE" },
+ { "view", com_view, "View the contents of FILE" },
+ { (char *)NULL, (Function *)NULL, (char *)NULL }
+};
+
+/* Forward declarations. */
+char *stripwhite ();
+COMMAND *find_command ();
+
+/* The name of this program, as taken from argv[0]. */
+char *progname;
+
+/* When non-zero, this global means the user is done using this program. */
+int done;
+
+char *
+dupstr (s)
+ int s;
+{
+ char *r;
+
+ r = xmalloc (strlen (s) + 1);
+ strcpy (r, s);
+ return (r);
+}
+
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ char *line, *s;
+
+ progname = argv[0];
+
+ initialize_readline (); /* Bind our completer. */
+
+ /* Loop reading and executing lines until the user quits. */
+ for ( ; done == 0; )
+ {
+ line = readline ("FileMan: ");
+
+ if (!line)
+ break;
+
+ /* Remove leading and trailing whitespace from the line.
+ Then, if there is anything left, add it to the history list
+ and execute it. */
+ s = stripwhite (line);
+
+ if (*s)
+ {
+ add_history (s);
+ execute_line (s);
+ }
+
+ free (line);
+ }
+ exit (0);
+}
+
+/* Execute a command line. */
+int
+execute_line (line)
+ char *line;
+{
+ register int i;
+ COMMAND *command;
+ char *word;
+
+ /* Isolate the command word. */
+ i = 0;
+ while (line[i] && whitespace (line[i]))
+ i++;
+ word = line + i;
+
+ while (line[i] && !whitespace (line[i]))
+ i++;
+
+ if (line[i])
+ line[i++] = '\0';
+
+ command = find_command (word);
+
+ if (!command)
+ {
+ fprintf (stderr, "%s: No such command for FileMan.\n", word);
+ return (-1);
+ }
+
+ /* Get argument to command, if any. */
+ while (whitespace (line[i]))
+ i++;
+
+ word = line + i;
+
+ /* Call the function. */
+ return ((*(command->func)) (word));
+}
+
+/* Look up NAME as the name of a command, and return a pointer to that
+ command. Return a NULL pointer if NAME isn't a command name. */
+COMMAND *
+find_command (name)
+ char *name;
+{
+ register int i;
+
+ for (i = 0; commands[i].name; i++)
+ if (strcmp (name, commands[i].name) == 0)
+ return (&commands[i]);
+
+ return ((COMMAND *)NULL);
+}
+
+/* Strip whitespace from the start and end of STRING. Return a pointer
+ into STRING. */
+char *
+stripwhite (string)
+ char *string;
+{
+ register char *s, *t;
+
+ for (s = string; whitespace (*s); s++)
+ ;
+
+ if (*s == 0)
+ return (s);
+
+ t = s + strlen (s) - 1;
+ while (t > s && whitespace (*t))
+ t--;
+ *++t = '\0';
+
+ return s;
+}
+
+/* **************************************************************** */
+/* */
+/* Interface to Readline Completion */
+/* */
+/* **************************************************************** */
+
+char *command_generator ();
+char **fileman_completion ();
+
+/* Tell the GNU Readline library how to complete. We want to try to complete
+ on command names if this is the first word in the line, or on filenames
+ if not. */
+initialize_readline ()
+{
+ /* Allow conditional parsing of the ~/.inputrc file. */
+ rl_readline_name = "FileMan";
+
+ /* Tell the completer that we want a crack first. */
+ rl_attempted_completion_function = (CPPFunction *)fileman_completion;
+}
+
+/* Attempt to complete on the contents of TEXT. START and END bound the
+ region of rl_line_buffer that contains the word to complete. TEXT is
+ the word to complete. We can use the entire contents of rl_line_buffer
+ in case we want to do some simple parsing. Return the array of matches,
+ or NULL if there aren't any. */
+char **
+fileman_completion (text, start, end)
+ char *text;
+ int start, end;
+{
+ char **matches;
+
+ matches = (char **)NULL;
+
+ /* If this word is at the start of the line, then it is a command
+ to complete. Otherwise it is the name of a file in the current
+ directory. */
+ if (start == 0)
+ matches = completion_matches (text, command_generator);
+
+ return (matches);
+}
+
+/* Generator function for command completion. STATE lets us know whether
+ to start from scratch; without any state (i.e. STATE == 0), then we
+ start at the top of the list. */
+char *
+command_generator (text, state)
+ char *text;
+ int state;
+{
+ static int list_index, len;
+ char *name;
+
+ /* If this is a new word to complete, initialize now. This includes
+ saving the length of TEXT for efficiency, and initializing the index
+ variable to 0. */
+ if (!state)
+ {
+ list_index = 0;
+ len = strlen (text);
+ }
+
+ /* Return the next name which partially matches from the command list. */
+ while (name = commands[list_index].name)
+ {
+ list_index++;
+
+ if (strncmp (name, text, len) == 0)
+ return (dupstr(name));
+ }
+
+ /* If no names matched, then return NULL. */
+ return ((char *)NULL);
+}
+
+/* **************************************************************** */
+/* */
+/* FileMan Commands */
+/* */
+/* **************************************************************** */
+
+/* String to pass to system (). This is for the LIST, VIEW and RENAME
+ commands. */
+static char syscom[1024];
+
+/* List the file(s) named in arg. */
+com_list (arg)
+ char *arg;
+{
+ if (!arg)
+ arg = "";
+
+ sprintf (syscom, "ls -FClg %s", arg);
+ return (system (syscom));
+}
+
+com_view (arg)
+ char *arg;
+{
+ if (!valid_argument ("view", arg))
+ return 1;
+
+ sprintf (syscom, "more %s", arg);
+ return (system (syscom));
+}
+
+com_rename (arg)
+ char *arg;
+{
+ too_dangerous ("rename");
+ return (1);
+}
+
+com_stat (arg)
+ char *arg;
+{
+ struct stat finfo;
+
+ if (!valid_argument ("stat", arg))
+ return (1);
+
+ if (stat (arg, &finfo) == -1)
+ {
+ perror (arg);
+ return (1);
+ }
+
+ printf ("Statistics for `%s':\n", arg);
+
+ printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
+ finfo.st_nlink,
+ (finfo.st_nlink == 1) ? "" : "s",
+ finfo.st_size,
+ (finfo.st_size == 1) ? "" : "s");
+ printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
+ printf (" Last access at: %s", ctime (&finfo.st_atime));
+ printf (" Last modified at: %s", ctime (&finfo.st_mtime));
+ return (0);
+}
+
+com_delete (arg)
+ char *arg;
+{
+ too_dangerous ("delete");
+ return (1);
+}
+
+/* Print out help for ARG, or for all of the commands if ARG is
+ not present. */
+com_help (arg)
+ char *arg;
+{
+ register int i;
+ int printed = 0;
+
+ for (i = 0; commands[i].name; i++)
+ {
+ if (!*arg || (strcmp (arg, commands[i].name) == 0))
+ {
+ printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
+ printed++;
+ }
+ }
+
+ if (!printed)
+ {
+ printf ("No commands match `%s'. Possibilties are:\n", arg);
+
+ for (i = 0; commands[i].name; i++)
+ {
+ /* Print in six columns. */
+ if (printed == 6)
+ {
+ printed = 0;
+ printf ("\n");
+ }
+
+ printf ("%s\t", commands[i].name);
+ printed++;
+ }
+
+ if (printed)
+ printf ("\n");
+ }
+ return (0);
+}
+
+/* Change to the directory ARG. */
+com_cd (arg)
+ char *arg;
+{
+ if (chdir (arg) == -1)
+ {
+ perror (arg);
+ return 1;
+ }
+
+ com_pwd ("");
+ return (0);
+}
+
+/* Print out the current working directory. */
+com_pwd (ignore)
+ char *ignore;
+{
+ char dir[1024], *s;
+
+ s = getwd (dir);
+ if (s == 0)
+ {
+ printf ("Error getting pwd: %s\n", dir);
+ return 1;
+ }
+
+ printf ("Current directory is %s\n", dir);
+ return 0;
+}
+
+/* The user wishes to quit using this program. Just set DONE non-zero. */
+com_quit (arg)
+ char *arg;
+{
+ done = 1;
+ return (0);
+}
+
+/* Function which tells you that you can't do this. */
+too_dangerous (caller)
+ char *caller;
+{
+ fprintf (stderr,
+ "%s: Too dangerous for me to distribute. Write it yourself.\n",
+ caller);
+}
+
+/* Return non-zero if ARG is a valid argument for CALLER, else print
+ an error message and return zero. */
+int
+valid_argument (caller, arg)
+ char *caller, *arg;
+{
+ if (!arg || !*arg)
+ {
+ fprintf (stderr, "%s: Argument required.\n", caller);
+ return (0);
+ }
+
+ return (1);
+}
+
+
+
+
+
+
+
i
+
+interaction, readline
+
+r
+
+readline, function
+
+
+
+
+
+
+
+
(
+
+(int
+
+a
+
+abort (C-g)
+accept-line (Newline, Return)
+alphabetic
+
+b
+
+backward-char (C-b)
+backward-delete-char (Rubout)
+backward-kill-line (C-x Rubout)
+backward-kill-word (M-DEL)
+backward-word (M-b)
+beginning-of-history (M-<)
+beginning-of-line (C-a)
+bell-style
+
+c
+
+call-last-kbd-macro (C-x e)
+capitalize-word (M-c)
+character-search (C-])
+character-search-backward (M-C-])
+clear-screen (C-l)
+comment-begin
+complete (TAB)
+completion-query-items
+completion_matches
+convert-meta
+copy-backward-word ()
+copy-forward-word ()
+copy-region-as-kill ()
+
+d
+
+delete-char (C-d)
+delete-horizontal-space ()
+digit-argument (M-0, M-1, ... M--)
+digit_p
+digit_value
+ding
+disable-completion
+do-uppercase-version (M-a, M-b, M-x, ...)
+downcase-word (M-l)
+dump-functions ()
+dump-macros ()
+dump-variables ()
+
+e
+
+editing-mode
+enable-keypad
+end-kbd-macro (C-x ))
+end-of-history (M->)
+end-of-line (C-e)
+exchange-point-and-mark (C-x C-x)
+expand-tilde
+
+f
+
+filename_completion_function
+forward-char (C-f)
+forward-search-history (C-s)
+forward-word (M-f)
+free_undo_list
+
+h
+
+history-search-backward ()
+history-search-forward ()
+horizontal-scroll-mode
+
+i
+
+input-meta
+insert-comment (M-#)
+insert-completions (M-*)
+
+k
+
+keymap
+kill-line (C-k)
+kill-region ()
+kill-whole-line ()
+kill-word (M-d)
+
+l
+
+lowercase_p
+
+m
+
+mark-modified-lines
+menu-complete ()
+meta-flag
+
+n
+
+next-history (C-n)
+non-incremental-forward-search-history (M-n)
+non-incremental-reverse-search-history (M-p)
+numeric
+
+o
+
+output-meta
+
+p
+
+possible-completions (M-?)
+prefix-meta (ESC)
+previous-history (C-p)
+
+q
+
+quoted-insert (C-q, C-v)
+
+r
+
+re-read-init-file (C-x C-r)
+readline
+redraw-current-line ()
+reverse-search-history (C-r)
+revert-line (M-r)
+rl_add_defun
+rl_add_undo
+rl_attempted_completion_function
+rl_basic_quote_characters
+rl_basic_word_break_characters
+rl_begin_undo_group
+rl_bind_key
+rl_bind_key_in_map
+rl_binding_keymap
+rl_callback_handler_install
+rl_callback_handler_remove
+rl_callback_read_char
+rl_char_is_quoted_p
+rl_clear_message
+rl_complete, rl_complete
+rl_complete_internal
+rl_completer_quote_characters
+rl_completer_word_break_characters
+rl_completion_append_character
+rl_completion_entry_function, rl_completion_entry_function
+rl_completion_query_items
+rl_copy_keymap
+rl_copy_text
+rl_delete_text
+rl_directory_completion_hook
+rl_discard_keymap
+rl_do_undo
+rl_done
+rl_end
+rl_end_undo_group
+rl_event_hook
+rl_executing_keymap
+rl_filename_completion_desired
+rl_filename_dequoting_function
+rl_filename_quote_characters
+rl_filename_quoting_desired
+rl_filename_quoting_function
+rl_forced_update_display
+rl_function_dumper
+rl_function_of_keyseq
+rl_generic_bind
+rl_get_keymap
+rl_get_keymap_by_name
+rl_get_keymap_name
+rl_getc
+rl_getc_function
+rl_ignore_completion_duplicates
+rl_ignore_some_completions_function
+rl_inhibit_completion
+rl_initialize
+rl_insert_completions
+rl_insert_text
+rl_instream
+rl_invoking_keyseqs
+rl_invoking_keyseqs_in_map
+rl_kill_text
+rl_library_version
+rl_line_buffer
+rl_list_funmap_names
+rl_make_bare_keymap
+rl_make_keymap
+rl_mark
+rl_message
+rl_modifying
+rl_named_function
+rl_on_new_line
+rl_outstream
+rl_parse_and_bind
+rl_pending_input
+rl_point
+rl_possible_completions
+rl_prompt
+rl_read_init_file
+rl_read_key
+rl_readline_name
+rl_redisplay
+rl_redisplay_function
+rl_reset_line_state
+rl_reset_terminal
+rl_set_keymap
+rl_special_prefixes
+rl_startup_hook
+rl_stuff_char
+rl_terminal_name
+rl_unbind_command_in_map
+rl_unbind_function_in_map
+rl_unbind_key
+rl_unbind_key_in_map
+
+s
+
+self-insert (a, b, A, 1, !, ...)
+set-mark (C-@)
+show-all-if-ambiguous
+start-kbd-macro (C-x ()
+
+t
+
+tab-insert (M-TAB)
+tilde-expand (M-~)
+to_lower
+to_upper
+transpose-chars (C-t)
+transpose-words (M-t)
+
+u
+
+undo (C-_, C-x C-u)
+universal-argument ()
+unix-line-discard (C-u)
+unix-word-rubout (C-w)
+upcase-word (M-u)
+uppercase_p
+username_completion_function
+
+v
+
+visible-stats
+
+y
+
+yank (C-y)
+yank-last-arg (M-., M-_)
+yank-nth-arg (M-C-y)
+yank-pop (M-y)
+
+
+
+
+This document was generated on 2 April 1998 using the
+texi2html
+translator version 1.51.
+
+
diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps
new file mode 100644
index 00000000000..ef8e8e9a705
--- /dev/null
+++ b/readline/doc/readline.ps
@@ -0,0 +1,4946 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: readline.dvi
+%%Pages: 54
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentPaperSizes: A4
+%%EndComments
+%DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1998.04.02:1444
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 300 300 (readline.dvi)
+@start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1
+47 df<0E003F007F807F80FF80FF80FF007E003C000909798815>46
+D E /Fc 1 59 df<60F0F06004047D830B>58 D E /Fd 53 127
+df<60F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F0600417789614>33
+D<071C00071C00071C00071C00071C00FFFF80FFFF807FFF800E38000E38000E38000E38
+000E38000E38000E38007FFF80FFFF80FFFF801C70001C70001C70001C70001C70001117
+7F9614>35 D<0180038006000C001C0018003800700070007000E000E000E000E000E000
+E000E000E000E000700070007000380018001C000C00060003800180091D799914>40
+D<80C0603038181C0E0E0E0707070707070707070E0E0E1C18383060C080081D7C9914>
+I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E638C0380038003800F107E
+9214>I<70F8FCFC7C0C1830E0C0060A798414>44 DI<70F8
+F8F8700505798414>I<07C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00E
+E00EE00EE00E701C701C383838381C700FE007C00F177E9614>48
+D<0300030007000F003F00F7004700070007000700070007000700070007000700070007
+000700070007007FF07FF00C177C9614>I<0006001E003E00F801F003C00F801F003C00
+F800F000F8003C001F000F8003C001F000F8003E001E00060F157E9514>60
+D62 D<1FE03FF8701CE00EE00E400E003C007000E001C003
+800380038003800300000000000000000003000780078003000F177E9614>I<01E007F0
+0E38181C38FC71FC731E771EEE0EEE0EEE0EEE0EEE0EEE0EEE0E771C731871F038E01806
+0E1E07F801F00F177E9614>I<01C00003E00003E0000360000360000770000770000770
+000770000630000E38000E38000E38000E38001C1C001FFC001FFC001C1C001C1C00380E
+00380E00FE3F80FE3F8011177F9614>II<01F1
+8007FF800E1F801C0780380780700380700380700380E00000E00000E00000E00000E000
+00E00000E000007003807003807003803807001C07000E0E0007FC0001F00011177F9614
+>III76
+DII82 D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE0
+0FF001F8001C001E000E600EE00EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF
+80E1C380E1C380E1C380E1C38001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C0000FF8000FF80011177F9614>I93
+D95 D<1FC0007FF000707800201800001C00001C0007FC00
+1FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>97
+DI<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03
+F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C
+3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001F
+EFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000
+380E1C1E0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE070007
+000700070007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001F
+FF80383B80301800701C00701C00701C003018003838003FF00037C0007000007000003F
+F8001FFC003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011
+197F8F14>II<06000F000F0006000000000000000000FF00FF00070007000700
+070007000700070007000700070007000700FFF8FFF80D187C9714>I107
+DI
+II<07C01FF03C78701C701CE00EE00EE00E
+E00EE00EE00E701C783C3C781FF007C00F107E8F14>II<03E7000FF700
+1C1F00300F00700F00E00700E00700E00700E00700E00700E00700700F00300F001C3F00
+0FF70007C700000700000700000700000700000700000700003FE0003FE013187F8F14>
+II<0FD83FF86038C038C038F0007F803FF0
+07F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFF
+FC0E000E000E000E000E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<
+FC3F00FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
+1C07001C1F000FFFE003E7E01310808F14>III<7E3F007E3F001E3C000E7800077000
+07E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F
+8F14>II<3FFF7FFF700E701C7038007000E001C0038007000E001C0738
+077007FFFFFFFF10107F8F14>I<1C103F38E7E041C00D047D9614>126
+D E /Fe 2 121 df<7070F06004047D830B>46 D<3FC7E007838007020003840003C800
+01D80000F00000E00000F00001F000013800023800041C00081E00381E00FC3FC013107F
+8F14>120 D E /Ff 38 123 df<00FE000381000601800E03801C01001C00001C00001C
+00001C00001C0000FFFF801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
+D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<60F0F07010101020204040040B7D830B>44
+DI<03000700FF00070007000700070007000700070007000700
+070007000700070007000700070007000700070007007FF80D187D9713>49
+D<0F80106020304038803CC01CE01C401C003C003800380070006000C001800100020004
+040804100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C
+001C0038007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F97
+13>I<001800180038007800F800B8013802380238043808381838103820384038C038FF
+FF00380038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000
+200020002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E18
+7E9713>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E0
+07E007600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008
+80108010002000400040008001800100030003000700060006000E000E000E000E000E00
+040010197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF830
+7C601E600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C
+600EE006E006E007E007E0076007700F3017182707C700070006000E000C700C70186030
+30600F8010187F9713>I<1FC000387000383800101C00001C00001C0003FC001E1C0038
+1C00701C00E01C00E01C80E01C80E03C80705F801F8F0011107F8F13>97
+DI<07F81C1C381C70087000E000E000E000E000E000E000
+7000700438081C1807E00E107F8F11>I<003F0000070000070000070000070000070000
+070000070000070000070003E7000C1700180F00300700700700E00700E00700E00700E0
+0700E00700E00700600700700700380F001C370007C7E0131A7F9915>I<07C01C303018
+7018600CE00CFFFCE000E000E000E0006000700438081C1807E00E107F8F11>I<01F007
+180E381C101C001C001C001C001C001C00FFC01C001C001C001C001C001C001C001C001C
+001C001C001C001C001C00FF800D1A80990C>I<0FCF0018718030300070380070380070
+38007038003030001860002FC0006000006000007000003FF0003FFC001FFE00600F00C0
+0300C00300C00300C00300600600381C0007E00011187F8F13>II<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1CFF081A80990A>I<
+FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C1FC01C0F00
+1C0C001C18001C20001C40001CE0001DE0001E70001C78001C38001C1C001C1E001C0F00
+1C0F80FF9FE0131A809914>107 DI
+II<07E01C38300C700E6006E007E007E007
+E007E007E0076006700E381C1C3807E010107F8F13>II<03E1000C1300180B00
+300F00700700E00700E00700E00700E00700E00700E00700700700700700380F001C3700
+07C700000700000700000700000700000700000700003FE013177F8F14>II<1F20
+60E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>
+I<0800080008000800180018003800FFC038003800380038003800380038003800382038
+203820382018201C4007800B177F960F>I
+IIIIII E /Fg 2 42 df<00E001C00380078007000F001E001E001C003C00
+3C0038007800780078007000F000F000F000F000F000F000F000F000F000F000F000F000
+F000F000700078007800780038003C003C001C001E001E000F0007000780038001C000E0
+0B2E7CA112>40 DI
+E /Fh 28 123 df<000FF83F00007FFDFFC001FC1FE3E003F03FC7E007E03FC7E00FC03F
+87E00FC03F83C00FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80
+00FFFFFFFC00FFFFFFFC000FC01F80000FC01F80000FC01F80000FC01F80000FC01F8000
+0FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000F
+C01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80007FF8FFF8007FF8
+FFF80023237FA221>11 D<0007F800007FFC0001FC0E0003F01F0007E03F000FC03F000F
+C03F000FC03F000FC01E000FC00C000FC000000FC000000FC0FF80FFFFFF80FFFFFF800F
+C01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800F
+C01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F807F
+F8FFF07FF8FFF01C237FA220>I<00180030006000C001C00380078007000F001E001E00
+3E003C003C007C007C007C007800F800F800F800F800F800F800F800F800F800F800F800
+F800F80078007C007C007C003C003C003E001E001E000F0007000780038001C000C00060
+003000180D317BA416>40 D<07FE00001FFF80003F07E0003F03F0003F01F0003F01F800
+1E01F8000001F8000001F800003FF80003FDF8001F81F8003E01F8007C01F800F801F800
+F801F800F801F800F801F8007C02F8007E0CF8001FF87F8007E03F8019167E951C>97
+DI<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC00
+00FC0000FC0000FC00007C00007E00007E00003E00181F00300FC06007FFC000FF001516
+7E9519>I<0001FF000001FF0000003F0000003F0000003F0000003F0000003F0000003F
+0000003F0000003F0000003F0000003F0000003F0000FE3F0007FFBF000FC1FF001F007F
+003E003F007E003F007C003F007C003F00FC003F00FC003F00FC003F00FC003F00FC003F
+00FC003F00FC003F007C003F007E003F003E003F001F007F000F81FF0007FF3FE001FC3F
+E01B237EA220>I<00FE0007FF800F83C01E01E03E00F07E00F07C00F87C0078FC0078FF
+FFF8FFFFF8FC0000FC0000FC00007C00007C00003E00183E00181F00300F80E003FFC000
+FF0015167E951A>I<001F8000FFE001F1F003E3F007E3F00FC3F00FC1E00FC0000FC000
+0FC0000FC0000FC0000FC000FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000
+7FFC007FFC0014237EA212>I<00FE0F8003FF9FC00F83E3C01F01F3C01E00F0003E00F8
+003E00F8003E00F8003E00F8003E00F8001E00F0001F01F0000F83E0000BFF800008FE00
+0018000000180000001C0000001FFFE0001FFFFC000FFFFF0007FFFF001FFFFF807C001F
+C078000FC0F80007C0F80007C0F80007C07C000F803E001F001F807E000FFFFC0001FFE0
+001A217F951D>II<1E003F007F807F807F807F803F001E00000000000000000000
+000000FF80FF801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F
+801F801F801F80FFF0FFF00C247EA30F>I107 DIII<00FF0007FFE00F81F01F00F83E007C7C003E7C003E7C003EFC00
+3FFC003FFC003FFC003FFC003FFC003FFC003F7C003E7E007E3E007C1F00F80F81F007FF
+E000FF0018167E951D>II<00FE030007FF07000FC1CF001F00DF003F007F007E003F007E003F007C003F00FC00
+3F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F007E003F007E003F003E00
+7F001F00FF000FC1FF0007FF3F0000FC3F0000003F0000003F0000003F0000003F000000
+3F0000003F0000003F0000003F000001FFE00001FFE01B207E951E>II<07F9801FFF80
+380780700380F00180F00180F80000FF0000FFF8007FFE003FFF001FFF8007FF80003FC0
+C007C0C003C0E003C0E003C0F00380FC0F00EFFE00C3F80012167E9517>I<0180000180
+000180000180000380000380000780000780000F80003F8000FFFF00FFFF001F80001F80
+001F80001F80001F80001F80001F80001F80001F80001F80001F80001F81801F81801F81
+801F81801F81800F83000FC30007FE0001F80011207F9F16>III<
+FFF3FF83FCFFF3FF83FC1F807C00E00FC07C00C00FC03E00C00FE03E01C007E07F018007
+E07F018003F07F030003F0CF830003F8CF870001F9CFC60001F987C60000FD87EC0000FF
+03EC0000FF03FC00007F03F800007E01F800003E01F000003C00F000003C00F000001800
+600026167F9529>III<7FFFF07FFFF07C07E0700FC060
+1FC0E01F80C03F00C07F00C07E0000FC0001FC0003F80003F03007E0300FE0300FC0701F
+80703F80603F00E07E03E0FFFFE0FFFFE014167E9519>I E /Fi
+29 122 df<00E00000E00000E00000E00000E000F0E1E0FCE7E07EEFC01FFF0007FC0001
+F00007FC001FFF007EEFC0FCE7E0F0E1E000E00000E00000E00000E00000E00013157D99
+1A>42 D<007C3801FF3807FFF80F83F81E00F81C00783800783800387000387000387000
+00E00000E00000E00000E00000E00000E00000E00000E000007000007000387000383800
+383800381C00701E00F00F83E007FFC001FF80007C00151E7E9D1A>67
+D69 D<7FFFFCFFFFFC7FFFFC
+0E001C0E001C0E001C0E001C0E001C0E00000E00000E03800E03800E03800FFF800FFF80
+0FFF800E03800E03800E03800E00000E00000E00000E00000E00000E00000E00000E0000
+7FE000FFE0007FE000161E7F9D1A>I73 D<7F03F8FF87FC7F03F81C01E01C03C01C03801C07001C0F001C1E001C1C00
+1C38001C78001CF0001CF8001DF8001FDC001F9C001F0E001E0F001E07001C07801C0380
+1C01C01C01C01C00E01C00E01C00707F00FCFF81FE7F00FC171E7F9D1A>75
+D<7FE000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001C0E00
+1C0E001C0E001C0E001C7FFFFCFFFFFC7FFFFC161E7F9D1A>I80 D86 D<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95 D<1FF0003FFC007FFE0078
+0F00300700000380000380007F8007FF801FFF803F8380780380700380E00380E00380E0
+0380700780780F803FFFFC1FFDFC07F0FC16157D941A>97 DI<00FF8003FFC00FFFE01F01E03C00C078000070000070
+0000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003
+FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C0
+0001C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0
+E001C0E001C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>
+I<01F80007FF000FFF801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFF
+F0E000007000007000007800703C00701F01F00FFFE003FF8000FE0014157D941A>I<00
+07E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E0003FFF807FFFC03FFF80151E7F9D1A>I104 D<01C00003E00003E00003E00001C000000000000000
+0000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC07FFF80
+121F7C9E1A>I108
+D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C
+001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
+007F1F1F00FF9F9F807F1F1F00191580941A>II<01F00007FC001FFF003E0F803C07807803C0
+7001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F80
+1FFF0007FC0001F00013157D941A>II<7F81F8FF8FFC7F9FFE03FE1E03F80C03E00003E00003C00003
+80000380000380000380000380000380000380000380000380000380007FFF00FFFF007F
+FF0017157F941A>114 D<0180000380000380000380000380000380000380007FFFE0FF
+FFE0FFFFE003800003800003800003800003800003800003800003800003800003800003
+807003807003807003807001C1E001FFE000FF80003F00141C7F9B1A>116
+DI<7F
+C7FCFFC7FE7FC7FC0E00E00E00E00E00E00701C00701C00701C003838003838003838001
+C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I<7FC7F8
+7FCFFC7FC7F80703C003838003C70001EF0000FE00007C00007800003800007C0000EE00
+01EE0001C7000383800783C00701C07FC7FCFFC7FE7FC7FC17157F941A>120
+D<7FC7FCFFC7FE7FC7FC0E00E00E00E00700E00701C00781C00381C003838001C38001C3
+8001C70000E70000E70000E600006600006E00003C00003C00003C000038000038000038
+0000780000700030700078E00071E0007FC0003F80001E000017207F941A>I
+E /Fj 1 59 df<70F8F8F87005057C840D>58 D E /Fk 6 102 df<06000F001F800F80
+0F800380070007000F000E003C007C00F0006000090E769B18>39
+D<7FFFC0FFFFE0FFFFE07FFFC013047C8F18>45 D<003E1800FFB801FFF807C1F8078078
+0E00781E00781C0070380030380000700000700000700000E00000E00000E00000E00000
+E00000E00000E000C07001C07001C07003C03807803C0F001FFE000FFC0003F000151C7C
+9B18>67 D<07E01F800FE03FC007E03F8003B02E0003B06E0003B06E0003B0CE000730DC
+000731DC0007319C0007319C0007339C0007331C000E3338000E3738000E3638000E3E38
+000E3C38000E1838001C0070001C0070001C0070001C0070001C0070001C007000FE03F8
+00FF03FC00FE03F8001A1C7F9B18>77 D<6000F000F000F000F8007800780078007C003C
+003C003C003E001E001E001E001F000F000F000F000F8007800780078007C003C003C003
+C003C003E001E001E001E001F000F000600C24789F18>92 D<00F80007FE000FFF001F07
+803C03807801C07001C0E001C0E001C0FFFFC0FFFFC0FFFF80E00000E00000E003007007
+80780F003FFE001FFC0007F00012147B9318>101 D E /Fl 52 122
+df<3C7EFFFFFFFF7E3C08087C8711>46 D<007F800003FFF00007E1F8000F807C001F00
+3E003F003F003E001F007E001F807E001F807E001F807E001F80FE001FC0FE001FC0FE00
+1FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE00
+1FC0FE001FC07E001F807E001F807E001F807E001F803F003F003F003F001F003E000F80
+7C0007E1F80003FFF000007F80001A237EA21F>48 D<001C00003C0000FC00FFFC00FFFC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
+0000FC0000FC0000FC0000FC007FFFFC7FFFFC16237CA21F>I<01FF0007FFC01E07F038
+03F86001FC7C00FEFE00FEFE00FFFE007FFE007F7C007F3800FF0000FF0000FE0000FE00
+01FC0001F80003F00007E0000780000F00001E00003C0000700000E00301C00303800707
+00060600060FFFFE1FFFFE3FFFFE7FFFFCFFFFFCFFFFFC18237DA21F>I<01FF0007FFE0
+1E03F03801F83C01FC7E00FE7E00FE7E00FE3E00FE1C01FE0001FC0001FC0003F80007F0
+000FC001FF0001FF000007E00001F00001F80000FC0000FE0000FF0000FF1000FF7C00FF
+FE00FFFE00FFFE00FEFE00FE7C01FC7001F83E07F00FFFC001FF0018237DA21F>I<0000
+380000007800000078000000F8000001F8000003F8000007F8000006F800000CF800001C
+F8000038F8000030F8000060F80000E0F80001C0F8000180F8000300F8000700F8000E00
+F8001C00F8001800F8003000F8007000F800E000F800FFFFFFC0FFFFFFC00001F8000001
+F8000001F8000001F8000001F8000001F8000001F800007FFFC0007FFFC01A237EA21F>
+I<18000C1F007C1FFFF81FFFF01FFFE01FFFC01FFF801FFC001800001800001800001800
+0018000018FF001BFFE01F03F01C00F80800FC00007E00007E00007E00007F00007F7800
+7FFC007FFC007FFC007FFC007EF8007E6000FC7000FC3801F81E07E007FFC001FE001823
+7DA21F>I<001FC0007FF001F03803E00C07803E0F807E1F007E3F007E3F007E7E003C7E
+00007E00007E0000FE3FC0FE7FF0FE80F8FF80FCFF007CFF007EFE007EFE007FFE007FFE
+007FFE007F7E007F7E007F7E007F7E007F3E007E3F007E1F007C0F80F807C1F003FFC000
+7F0018237DA21F>I<300000003C0000003FFFFFC03FFFFFC03FFFFF807FFFFF007FFFFE
+007FFFFC006000180060001800E0003000C0006000C000C0000001800000018000000300
+0000060000000E0000000E0000001C0000001C0000003C0000003C000000780000007800
+0000F8000000F8000000F8000000F8000001F8000001F8000001F8000001F8000001F800
+0001F8000000F00000006000001A257DA41F>I<00FF8003FFE00F01F81C007C38003C38
+001E78001E78001E7C001E7E001E7F803C7FE03C3FF8781FFDF01FFFC00FFFC003FFE003
+FFF80FFFFC1E1FFC3C07FE7803FE7800FFF0003FF0001FF0000FF0000FF0000FF0000E78
+000E78001C3C00381F80F007FFE001FF0018237DA21F>I<00FF0003FFC00F83E01F00F0
+3F00F87E007C7E007C7E007EFE007EFE007EFE007EFE007FFE007FFE007FFE007F7E007F
+7E00FF3E00FF3F01FF1F017F0FFE7F03FC7F00007F00007E00007E3C007E7E00FC7E00FC
+7E00F87E00F07C01F03003E01C0F800FFF0003F80018237DA21F>I<00001C0000000000
+1C00000000003E00000000003E00000000003E00000000007F00000000007F0000000000
+FF8000000000FF8000000000FF80000000019FC0000000019FC0000000031FE000000003
+0FE0000000070FF00000000607F00000000607F00000000C07F80000000C03F80000001C
+03FC0000001801FC0000001801FC0000003000FE0000003000FE0000007FFFFF0000007F
+FFFF000000E0007F800000C0003F800000C0003F80000180003FC0000180001FC0000380
+001FE0000300000FE0000300000FE00007000007F000FFF000FFFF80FFF000FFFF802925
+7EA42E>65 DI<0000FF8008000FFFF018003FC03C7800FE00
+06F801F80003F803F00001F807E00000F80FC00000781FC00000783F800000383F800000
+387F800000187F000000187F00000018FF00000000FF00000000FF00000000FF00000000
+FF00000000FF00000000FF00000000FF00000000FF000000007F000000007F000000187F
+800000183F800000183F800000181FC00000300FC000003007E000006003F00000C001F8
+00018000FE000700003FC01E00000FFFF8000000FFC00025257DA42C>I69 DI72
+DI75 DI<
+FFF8000000FFF8FFFC000001FFF803FC000001FE00037E0000037E00037E0000037E0003
+7E0000037E00033F0000067E00033F0000067E00031F80000C7E00031F80000C7E00030F
+C000187E00030FC000187E000307E000307E000307E000307E000307E000307E000303F0
+00607E000303F000607E000301F800C07E000301F800C07E000300FC01807E000300FC01
+807E0003007E03007E0003007E03007E0003007E03007E0003003F06007E0003003F0600
+7E0003001F8C007E0003001F8C007E0003000FD8007E0003000FD8007E00030007F0007E
+00030007F0007E00030007F0007E00030003E0007E00078003E0007E00FFFC01C01FFFF8
+FFFC01C01FFFF835257EA43A>II82 D<00FF008007FFE3800F80F7801E001F803C000F807800078078000380F80003
+80F8000180F8000180FC000180FC000000FF0000007FE000007FFE00003FFFE0003FFFF8
+001FFFFE0007FFFF0003FFFF80007FFF800003FFC000003FC000000FE0000007E0000007
+E0C00003E0C00003E0C00003E0C00003C0E00003C0F00007C0F8000780FC000F00FFC03E
+00E3FFF800803FE0001B257DA422>I<7FFFFFFFF87FFFFFFFF87E00FE01F87800FE0078
+7000FE00386000FE00186000FE0018E000FE001CE000FE000CC000FE000CC000FE000CC0
+00FE000CC000FE000C0000FE00000000FE00000000FE00000000FE00000000FE00000000
+FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
+00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
+000000FE000000FFFFFE0000FFFFFE0026247EA32B>II<
+FFFF8001FFE0FFFF8001FFE007F800001C0003F80000180003F80000180003FC00003800
+01FC0000300001FE0000700000FE0000600000FF00006000007F0000C000007F8000C000
+003F80018000003F80018000003FC0038000001FC0030000001FE0070000000FE0060000
+000FF00600000007F00C00000007F00C00000003F81800000003F81800000003FC380000
+0001FC3000000001FE7000000000FE6000000000FF60000000007FC0000000007FC00000
+00003F80000000003F80000000003F80000000001F00000000001F00000000000E000000
+00000E0000002B257FA42E>II89 D<07FF00001FFFE0003E03F0003F00F8003F00FC003F007E001E007E000000
+7E0000007E0000007E00001FFE0003FE7E000FC07E001F007E003E007E007E007E00FC00
+7E00FC007E00FC007E00FC00BE007E01BE003F073E001FFE1FE007F00FE01B187E971E>
+97 DI<007FE003FFF807C07C1F80FC1F00FC3F00FC
+7E00787E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00007E00007F0000
+3F000C1F800C1FC01807E07003FFE0007F0016187E971B>I<0000FFC00000FFC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F
+C000000FC000000FC0007F0FC003FFCFC00FE0FFC01F803FC03F000FC03F000FC07E000F
+C07E000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000F
+C07E000FC07E000FC03F000FC03F001FC01F803FC00FC0EFC003FFCFFC00FE0FFC1E267E
+A522>I<007F0003FFC007C1F00F80F81F00F83F007C7E007C7E007EFE007EFE007EFFFF
+FEFFFFFEFE0000FE0000FE00007E00007E00007E00063F00061F000C0F801807E07003FF
+E0007F8017187E971C>I<001FC0007FF001F8F003E1F807E1F807C1F80FC0F00FC0000F
+C0000FC0000FC0000FC0000FC0000FC000FFFF00FFFF000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0000FC000FFFE00FFFE0015267EA513>I<01FF07C007FFDFE00F83F1E0
+1F01F1E03E00F8007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC003E00F800
+1F01F0000F83E0000FFFC00011FF00003000000030000000380000003C0000003FFFE000
+1FFFFC001FFFFE000FFFFF001FFFFF803C003F8078000FC0F80007C0F80007C0F80007C0
+F80007C07C000F803E001F001F807E0007FFF80000FFC0001B247E971F>II<0F001F803FC03FC03FC03FC01F800F0000000000000000000000
+000000007FC07FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC0FFF8FFF80D277EA611>I107 DIII<007F800003FFF00007C0F8001F807E003F003F
+003F003F007E001F807E001F80FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001F
+C0FE001FC0FE001FC07E001F807E001F803F003F003F003F001F807E000FC0FC0003FFF0
+00007F80001A187E971F>II114 D<07F8C01FFFC03C07C07001C0
+F000C0F000C0F000C0FC0000FF80007FFC007FFE003FFF800FFFC003FFC0001FE00003E0
+C001E0C001E0E001E0E001C0F003C0FC0780EFFF00C3FC0013187E9718>I<00C00000C0
+0000C00000C00001C00001C00001C00003C00007C0000FC0001FC000FFFFC0FFFFC00FC0
+000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+600FC0600FC0600FC0600FC0600FC06007E0C007E1C001FF80007E0013237FA218>IIIIII
+E /Fm 28 122 df<0003E0001C1800381800703C00E03C00E03801C00001C00001C00001
+C00001C0000380007FFFF00380700380700380700380700700E00700E00700E00700E007
+00E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF0FF016207E9F
+19>12 D45 D<07FFFFF800F80078007800380078001800F00018
+00F0000800F0000800F0000800F0000800F0000801E0080001E0080001E0080001E01800
+01E0380001FFF80003C0300003C0100003C0100003C0100003C0100003C0000007800000
+07800000078000000780000007800000078000000F0000000F800000FFFC00001D1F7E9E
+1E>70 D<07FF803FE000F8001F000078000C00007800180000F000200000F000400000F0
+00800000F001000000F002000000F008000001E010000001E020000001E060000001E0F0
+000001E1F0000001E4F8000003C878000003D07C000003E03C000003C03E000003C01E00
+0003C01F000007800F000007800F80000780078000078007C000078003C000078003E000
+0F0001E0000F8003F000FFF00FFE00231F7E9E23>75 D<07F8000C0C001E06001E07001C
+070000070000070000070000FF0007C7001E07003C0E00780E00F00E10F00E10F00E10F0
+1E10F02E20784F401F878014147D9317>97 D<0700003F00000F00000700000700000E00
+000E00000E00000E00000E00000E00001C00001C7C001D83001E01801C01C01C00E03800
+E03800F03800F03800F03800F03800F07001E07001E07001C07003C0700380700700E80E
+00CC380083E00014207B9F19>I<00FE000383000E07801C0780380700380000780000F0
+0000F00000F00000F00000E00000E00000E00000F00000F001007002003804001C180007
+E00011147D9314>I<0000380001F8000078000038000038000070000070000070000070
+0000700000700000E000FCE00382E00601E01C01E03C00E03801C07801C0F001C0F001C0
+F001C0F001C0E00380E00380E00380E00380F00380700780380F001C378007C7E015207D
+9F19>I<00F800070E000E07001C0700380380780380700380F00380F00380FFFF80F000
+00E00000E00000E00000E00000F001007002003004001C180007E00011147D9314>I<00
+07C0001C600030F00060F000E0E000C00001C00001C00001C00001C00001C0000380003F
+FC000380000380000380000380000700000700000700000700000700000700000E00000E
+00000E00000E00000E00000E00001C00001E0000FFC00014207F9F0E>I<00000E003E11
+00E1A301C1C20381E00780E00701E00F01E00F01E00F01E00703C007038007870004FC00
+0800000800001800001C00000FFF000FFFC00FFFE01800F0300030600030C00030C00030
+C000306000603000C01C070007FC00181F809417>I<00E00007E00001E00000E00000E0
+0001C00001C00001C00001C00001C00001C000038000038F800390E003A0E003C0600380
+600780E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01
+C01C03801E03C0FF8FF014207E9F19>I<01C003E003E003C00180000000000000000000
+00000003801F800780038003800700070007000700070007000E000E000E000E000E000E
+001C001E00FF800B1F7F9E0C>I<00E00007E00001E00000E00000E00001C00001C00001
+C00001C00001C00001C0000380000381FC0380F00380C003818003810007040007080007
+1800073800077C00071C000E1C000E0E000E0E000E0F000E07000E07801C03801E07C0FF
+8FF016207E9F18>107 D<00E007E001E000E000E001C001C001C001C001C001C0038003
+8003800380038003800700070007000700070007000E000E000E000E000E000E001C001E
+00FF800B207F9F0C>I<0387C07C001F9861860007A072070003C0340300038038030007
+80780700070070070007007007000700700700070070070007007007000E00E00E000E00
+E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00FFCFFC
+FFC022147E9326>I<038F801F90E007A0E003C0600380600780E00700E00700E00700E0
+0700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF8FF014147E
+9319>I<00FC000387000E01801C00C03800E03800E07000F0F000F0F000F0F000F0F000
+F0E001E0E001E0E001C0E003C0F00380700700380E001C1C0007E00014147D9317>I<00
+E3E00007EC380000F01C0000E00E0000E00F0001C0070001C0078001C0078001C0078001
+C0078001C0078003800F0003800F0003800E0003801E0003801C00038038000740700007
+61C000071F00000700000007000000070000000E0000000E0000000E0000000E0000001E
+000000FFC00000191D809319>I<00FC200382600702601E01E03C01E03801C07801C0F0
+01C0F001C0F001C0F001C0E00380E00380F00380F00380F00780700780380F001C370007
+C700000700000700000700000E00000E00000E00000E00001E0000FFC0131D7D9318>I<
+038E001FB38007C78003C7800383000780000700000700000700000700000700000E0000
+0E00000E00000E00000E00000E00001C00001E0000FFC00011147E9312>I<01F9060708
+031803180138023C001F001FF007FC01FE001F40074003400360036006F004C81887E010
+147F9312>I<0080010001000100030007000F001E00FFF80E000E000E000E001C001C00
+1C001C001C001C00380038103810381038103820382018400F800D1C7C9B12>I<1C0380
+FC1F803C07801C03801C0380380700380700380700380700380700380700700E00700E00
+700E00700E00701E00701E00703C00305E001F9F8011147B9319>III<1FF0FF03C07801C07001C04000E0C000E180007300007600003C00003C00001C0000
+2E00004E000087000107000203800403800C01C03C03E0FE07FC18147F9318>I<0FF83F
+8001E00E0001C00C0001C0080001E0080000E0100000E0300000E0200000E04000007040
+0000708000007080000071000000390000003A0000003E0000003C000000380000001800
+00001000000010000000200000002000000040000070C00000F0800000F1000000E60000
+0078000000191D809318>I E /Fn 38 124 df<60F0F070101020204040040A7D960A>
+39 D45 D<06000E00FE000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
+D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107
+0002038002038002038007FFC00401C00401C00800E00800E01800F03800F0FE03FE1717
+7F961A>65 DI<00FC100383300E00B01C0070380030300030700010600010E000
+10E00000E00000E00000E00000E00000E000106000107000103000203800201C00400E00
+8003830000FC0014177E9619>IIII76
+DII80
+D82 D<0FC4302C601C400CC004C004C004E00070007F003FE00FF801FC001C000E
+0006800680068006C004E008D81087E00F177E9614>I<7FFFF860381840380840380880
+380480380480380400380000380000380000380000380000380000380000380000380000
+380000380000380000380000380000380003FF8016177F9619>II91
+D<3FC0706070302038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12>97
+DI<003E00000E00000E00000E00000E00000E00000E00000E00000E0007CE001C
+3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E0007
+CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060007008301018
+3007C00D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF801C001C001C00
+1C001C001C001C001C001C001C001C001C007F800C1780960B>I<0F9E18E33060707070
+707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE010157F
+8D12>I<0300078007800300000000000000000000001F80038003800380038003800380
+0380038003800380038003800380038003804380E300E7007C00091D82960B>106
+DII<07C018303018600C600CE00EE00EE00EE00EE00E701C3018
+183007C00F0E7F8D12>111 DI<07C2001C2600381E00700E00600E00E00E00E00E00E00E00E00E0060
+0E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E00003F8011147F8D
+13>I
+I<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I<
+080008000800180018003800FFC038003800380038003800380038003840384038403840
+1C800F000A147F930E>II
+119 DII123 D E /Fo
+2 106 df<00800180030003000300060006000C000C000C001800180018003000300060
+0060006000C000C000600060006000300030001800180018000C000C000C000600060003
+00030003000180008009267D9B0F>104 DI
+E /Fp 8 89 df<0007F008003C0C1800E0033801C000B8078000780F0000380E0000381E
+0000183C0000183C0000087C0000087800000878000000F8000000F8000000F8000000F8
+000000F8000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000781E
+0000780E0000780F0000780780007801C000B800E00118003C0E080007F00020217C9F27
+>71 D73
+D78 D<001FE0000070380001C00E
+0003800700070003800F0003C01E0001E03C0000F03C0000F07C0000F87C0000F8780000
+78F800007CF800007CF800007CF800007CF800007CF800007CF800007CF800007CF80000
+7C780000787C0000F87C0000F83C0000F03E0001F01E0001E00F0003C007000380038007
+0001E01E0000703800001FE0001E217C9F26>II<03F0200C0C601803E03000E06000E0600060E00060E00020E00020E000
+20F00000F800007C00007F80003FFC001FFF0007FF8001FFC0000FE00003E00001E00000
+F0000070800070800070800070800070C00060C000E0E000C0F80180C6030081FC001421
+7C9F1C>83 D85
+D<7FF807FE000FE001F00007C001C00003E000800001E001000001F002000000F8060000
+0078040000003C080000003E180000001F100000000F200000000FC000000007C0000000
+03C000000001E000000003F000000006F80000000478000000087C000000183E00000010
+1E000000201F000000400F800000C0078000008003C000010003E000030001F000070000
+F0001F8001F800FFC007FF80211F7E9E25>88 D E /Fq 34 121
+df<0001C0000003C000000FC000007FC0001FFFC000FFFFC000FFBFC000E03FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
+C000003FC000003FC000003FC000003FC000003FC000003FC000003FC0007FFFFFF07FFF
+FFF07FFFFFF01C2E7AAD28>49 D<003FE00001FFFE0007FFFF800F80FFC01E003FE03800
+1FF07C000FF87E0007FCFF0007FCFF8007FEFF8007FEFF8003FEFF8003FE7F0003FE3E00
+07FE000007FE000007FC000007FC00000FF800000FF800000FF000001FE000001FC00000
+3F8000007F0000007E000000F8000001F0000003E0000007C000000F0000001E000E003C
+000E0038000E0070001E00E0001C01C0001C0300003C07FFFFFC0FFFFFFC1FFFFFFC3FFF
+FFFC7FFFFFF8FFFFFFF8FFFFFFF8FFFFFFF81F2E7CAD28>I<000003FF80018000003FFF
+F003800001FFFFFC07800007FF003F0F80001FF800079F80003FC00001FF8000FF800000
+FF8001FE0000007F8003FC0000003F8007FC0000001F8007F80000000F800FF00000000F
+801FF000000007801FF000000007803FE000000007803FE000000003807FE00000000380
+7FE000000003807FC000000000007FC00000000000FFC00000000000FFC00000000000FF
+C00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0
+0000000000FFC000000000007FC000000000007FC000000000007FE000000000007FE000
+000003803FE000000003803FE000000003801FF000000003801FF000000007800FF00000
+00070007F8000000070007FC0000000E0003FC0000001E0001FE0000001C0000FF800000
+7800003FC00000F000001FF80003E0000007FF003F80000001FFFFFE000000003FFFF800
+00000003FF80000031317CB03A>67 D69
+DI<000003FF00030000007FFFF007000001FFFFFC0F0000
+07FF007E1F00001FF0000FBF00007FC00003FF0000FF800001FF0001FE0000007F0003FC
+0000007F0007FC0000003F000FF80000001F000FF00000001F001FF00000000F001FF000
+00000F003FE000000007003FE000000007007FE000000007007FE000000007007FC00000
+000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000
+0000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000000
+00FFC00007FFFFF87FC00007FFFFF87FE00007FFFFF87FE0000001FF003FE0000001FF00
+3FE0000001FF001FF0000001FF001FF0000001FF000FF0000001FF000FF8000001FF0007
+FC000001FF0003FC000001FF0001FE000001FF0000FF800001FF00007FC00003FF00001F
+F800077F000007FF003E3F000001FFFFFC1F0000007FFFF00F00000003FF80030035317C
+B03F>I73
+D76 D78 D80
+D82 D<7FFFFFFFFFFF007FFFFFFFFFFF007FFFFFFFFFFF007FC00FF801FF007E000F
+F8003F007C000FF8001F0078000FF8000F0078000FF8000F0070000FF8000700F0000FF8
+000780F0000FF8000780F0000FF8000780E0000FF8000380E0000FF8000380E0000FF800
+0380E0000FF8000380E0000FF800038000000FF800000000000FF800000000000FF80000
+0000000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000
+00000FF800000000000FF800000000000FF800000000000FF800000000000FF800000000
+000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000000
+0FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000F
+F800000000000FF800000000000FF800000000000FF800000000000FF8000000007FFFFF
+FF0000007FFFFFFF0000007FFFFFFF000031307DAF38>84 DII<00FFF0000003FFFF00000F803F80000FC00F
+E0001FE007F0001FE007F0001FE003F8000FC003FC00078003FC00000003FC00000003FC
+00000003FC00000003FC000000FFFC00001FFFFC0000FFE3FC0003FC03FC000FF003FC00
+1FC003FC003FC003FC007F8003FC007F8003FC00FF0003FC00FF0003FC00FF0003FC00FF
+0007FC00FF0007FC007F800DFC003FC01DFE001FE078FFF007FFE07FF000FF803FF02420
+7E9F27>97 D<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F8000000
+07F800000007F800000007F800000007F800000007F800000007F800000007F800000007
+F800000007F800000007F800000007F800000007F800000007F83FE00007F8FFFC0007FB
+E07F0007FF001F8007FE000FC007FC000FE007F80007F007F80007F807F80007F807F800
+03FC07F80003FC07F80003FC07F80003FE07F80003FE07F80003FE07F80003FE07F80003
+FE07F80003FE07F80003FE07F80003FE07F80003FC07F80003FC07F80003FC07F80007F8
+07F80007F807F80007F007FC000FE007FE000FC007E7003F8007C3C0FE000780FFF80007
+003FC00027327EB12D>I<000FFF00007FFFC001FC01F003F003F007E007F80FE007F81F
+C007F83FC003F03FC001E07F8000007F8000007F800000FF800000FF800000FF800000FF
+800000FF800000FF800000FF800000FF8000007F8000007F8000007F8000003FC0001C3F
+C0001C1FC000380FE0003807E0007003F001E001FC07C0007FFF00000FF8001E207D9F24
+>I<0000000FC0000007FFC0000007FFC0000007FFC00000007FC00000003FC00000003F
+C00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0
+0000003FC00000003FC00000003FC00000003FC00007F83FC0003FFF3FC000FE07BFC003
+F801FFC007E0007FC00FE0007FC01FC0003FC03FC0003FC03FC0003FC07F80003FC07F80
+003FC07F80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF8000
+3FC0FF80003FC0FF80003FC07F80003FC07F80003FC07F80003FC03FC0003FC03FC0003F
+C01FC0003FC00FE0007FC007E000FFC003F003FFE001FC0F3FFE007FFE3FFE000FF03FFE
+27327DB12D>I<000FFC00007FFF8001FC0FC003F003E007E001F00FE001F81FC000FC3F
+C000FE3FC000FE7F80007E7F80007F7F80007FFF80007FFF80007FFFFFFFFFFFFFFFFFFF
+800000FF800000FF800000FF8000007F8000007F8000007F8000003FC000071FC000071F
+C0000E0FE0000E07F0001C03F8007800FE03E0003FFFC00007FE0020207E9F25>I<0001
+FE00000FFF80001FC3C0007F07E000FE0FF001FE0FF001FC0FF003FC0FF003FC07E003FC
+018003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000FFFF
+FC00FFFFFC00FFFFFC0003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
+000003FC00007FFFF0007FFFF0007FFFF0001C327EB119>I<001FF007C000FFFE3FE001
+F83F79F007E00FC3F00FE00FE1F00FC007E0E01FC007F0001FC007F0003FC007F8003FC0
+07F8003FC007F8003FC007F8003FC007F8001FC007F0001FC007F0000FC007E0000FE00F
+E00007E00FC00003F83F000006FFFE00000E1FF000000E000000001E000000001E000000
+001F000000001F800000001FFFFF80000FFFFFF0000FFFFFFC0007FFFFFE0003FFFFFF00
+03FFFFFF800FFFFFFFC03F00007FC07E00001FE07C00000FE0FC000007E0FC000007E0FC
+000007E0FC000007E07E00000FC03E00000F803F00001F800FC0007E0007F803FC0001FF
+FFF000001FFF0000242F7E9F28>I<01F8000000FFF8000000FFF8000000FFF80000000F
+F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8
+00000007F800000007F800000007F800000007F800000007F800000007F800000007F807
+F80007F83FFE0007F8783F0007F8C03F8007F9801FC007FB001FC007FE001FE007FC001F
+E007FC001FE007FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0
+07F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
+F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFF
+C3FFFFFFFFC3FFFFFFFFC3FFFF28327DB12D>I<03C00007E0000FF0001FF8001FF8001F
+F8001FF8000FF00007E00003C00000000000000000000000000000000000000000000000
+000000000001F8007FF8007FF8007FF80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
+F80007F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>I<
+01F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFFC0
+FFFFC0FFFFC012327DB117>108 D<03F007F8001FE000FFF03FFE00FFF800FFF0783F01
+E0FC00FFF0C03F8300FE000FF1801FC6007F0007F3001FCC007F0007F6001FF8007F8007
+FC001FF0007F8007FC001FF0007F8007FC001FF0007F8007F8001FE0007F8007F8001FE0
+007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007
+F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0
+007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007
+F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F80FFFFC3FFFF
+0FFFFCFFFFC3FFFF0FFFFCFFFFC3FFFF0FFFFC3E207D9F43>I<03F007F800FFF03FFE00
+FFF0783F00FFF0C03F800FF1801FC007F3001FC007F6001FE007FC001FE007FC001FE007
+FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8
+001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F800
+1FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFFC3FFFFFFFFC3FF
+FFFFFFC3FFFF28207D9F2D>I<0007FC0000007FFFC00001FC07F00003F001F80007E000
+FC000FC0007E001FC0007F003FC0007F803F80003F807F80003FC07F80003FC07F80003F
+C0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0
+FF80003FE07F80003FC07F80003FC07F80003FC03FC0007F803FC0007F801FC0007F000F
+E000FE0007E000FC0003F803F80001FE0FF000007FFFC0000007FC000023207E9F28>I<
+01F83FE000FFF8FFFC00FFFBE07F00FFFF003F8007FE001FC007FC000FE007F8000FF007
+F80007F807F80007F807F80007FC07F80003FC07F80003FC07F80003FE07F80003FE07F8
+0003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FC07F800
+07FC07F80007FC07F80007F807F80007F807F8000FF007FC000FE007FE001FC007FF003F
+8007FBC0FE0007F8FFF80007F83FC00007F800000007F800000007F800000007F8000000
+07F800000007F800000007F800000007F800000007F800000007F800000007F8000000FF
+FFC00000FFFFC00000FFFFC00000272E7E9F2D>I<03F03F00FFF07FC0FFF1C3E0FFF187
+E00FF30FF007F60FF007F60FF007FC07E007FC03C007FC000007FC000007F8000007F800
+0007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
+0007F8000007F8000007F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE0
+00FFFFE0001C207E9F21>114 D<01FF860007FFFE001F00FE003C003E0078001E007800
+0E00F8000E00F8000E00F8000E00FC000000FF800000FFFC00007FFFC0003FFFF0003FFF
+F8001FFFFC0007FFFE0001FFFF00003FFF000000FF8000003F8060001F80E0000F80E000
+0F80F0000F80F0000F00F8000F00FC001E00FE001C00FF807800F3FFF000C07F80001920
+7D9F20>I<001C0000001C0000001C0000001C0000001C0000003C0000003C0000003C00
+00007C0000007C000000FC000001FC000003FC000007FC00001FFFFE00FFFFFE00FFFFFE
+0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
+0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC038003FC03
+8003FC038003FC038003FC038003FC038003FC038001FC038001FC070000FE0700007F0E
+00003FFC000007F000192E7FAD1F>I<01F80007E0FFF803FFE0FFF803FFE0FFF803FFE0
+0FF8003FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
+F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8
+001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8003FE007F800
+3FE003F8007FE003F8007FE001FC00DFF000FE039FFF007FFF1FFF000FFC1FFF28207D9F
+2D>I119 D<7FFF807FFC7FFF807FFC7FFF807FFC03
+FC000F0001FE001E0000FF003C0000FF803800007FC07800003FC0F000001FE1E000000F
+F3C000000FFF80000007FF00000003FE00000001FE00000000FF00000000FF80000000FF
+C0000001FFC0000003DFE00000078FF00000078FF800000F07FC00001E03FE00003C01FE
+00007800FF0000F000FF8001E0007FC003E0003FE0FFFC01FFFFFFFC01FFFFFFFC01FFFF
+28207F9F2B>I E /Fr 1 14 df<0000FF00000007FFE000001F00F8000078001E0000E0
+000700018000018003000000C006000000600C000000300C000000301800000018300000
+000C300000000C6000000006600000000660000000066000000006C000000003C0000000
+03C000000003C000000003C000000003C000000003C000000003C000000003C000000003
+6000000006600000000660000000066000000006300000000C300000000C18000000180C
+000000300C00000030060000006003000000C0018000018000E00007000078001E00001F
+00F8000007FFE0000000FF0000282B7EA02D>13 D E /Fs 55 122
+df<0006000C00180038007000E001E003C003C0078007800F800F001F001F003E003E00
+3E007E007E007E007C007C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00
+FC00FC007C007C007E007E007E003E003E003E001F001F000F000F800780078003C003C0
+01E000E0007000380018000C00060F3C7AAC1A>40 D<3C007F00FF80FF80FFC0FFC0FFC0
+7FC03EC000C000C00180018001800300030006000E001C00380010000A157B8813>44
+D<1C007F007F00FF80FF80FF807F007F001C0009097B8813>46 D<000E00001E00007E00
+07FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFEFFFFFE
+17277BA622>49 D<00FF800007FFF0000FFFFC001E03FE003800FF807C003F80FE003FC0
+FF001FC0FF001FE0FF000FE0FF000FE07E000FE03C001FE000001FE000001FC000001FC0
+00003F8000003F0000007E000000FC000000F8000001F0000003E00000078000000F0000
+001E0000003C00E0007000E000E000E001C001C0038001C0060001C00FFFFFC01FFFFFC0
+3FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007
+FFFC000F81FE001F007F003F807F003F803F803F803F803F803F801F803F801F003F8000
+007F0000007F0000007E000000FC000001F8000007F00000FFC00000FFC0000001F80000
+007E0000003F0000003F8000001FC000001FC000001FE000001FE03C001FE07E001FE0FF
+001FE0FF001FE0FF001FC0FF003FC0FE003F807C007F003F01FE001FFFFC0007FFF00000
+FF80001B277DA622>I<00000F0000000F0000001F0000003F0000007F000000FF000001
+FF000001FF000003BF0000073F00000E3F00001C3F00003C3F0000383F0000703F0000E0
+3F0001C03F0003803F0007803F0007003F000E003F001C003F0038003F0070003F00F000
+3F00FFFFFFF8FFFFFFF8FFFFFFF800007F0000007F0000007F0000007F0000007F000000
+7F0000007F0000007F00001FFFF8001FFFF8001FFFF81D277EA622>I<180003001F801F
+001FFFFE001FFFFC001FFFF8001FFFF0001FFFC0001FFF00001C0000001C0000001C0000
+001C0000001C0000001C0000001C0000001C7FC0001DFFF8001F80FC001E003F0008003F
+0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001F
+E0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFFC0003FFF0
+0000FF80001B277DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE0
+7FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000E000E000
+0001C0000001C000000380000007800000070000000F0000001F0000001E0000003E0000
+003E0000007E0000007C0000007C000000FC000000FC000000FC000000FC000001FC0000
+01FC000001FC000001FC000001FC000001FC000001FC000000F80000007000001C297CA8
+22>55 D<007F800001FFF00007FFF8000FC0FC001F803E003F001F007E001F807E001F80
+7E000F80FE000FC0FE000FC0FE000FC0FE000FE0FE000FE0FE000FE0FE000FE0FE000FE0
+7E001FE07E001FE03F003FE01F002FE00F80CFE007FF8FE001FF0FE000080FE000000FC0
+00000FC000000FC000001F803E001F807F001F807F003F007F003E007F007E007E00FC00
+3E03F8001FFFE0000FFF800001FE00001B277DA622>57 D<000007800000000007800000
+00000FC0000000000FC0000000000FC0000000001FE0000000001FE0000000003FF00000
+00003FF0000000003FF00000000077F80000000077F800000000F7FC00000000E3FC0000
+0000E3FC00000001C1FE00000001C1FE00000003C1FF0000000380FF0000000380FF0000
+0007007F80000007007F8000000F007FC000000E003FC000000E003FC000001C001FE000
+001C001FE000003FFFFFF000003FFFFFF000003FFFFFF00000700007F80000700007F800
+00F00007FC0000E00003FC0001E00003FE0001C00001FE0001C00001FE0003C00001FF00
+FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC2E297EA833>65 DI<00007FE0030007FFFC07001FFFFF
+0F007FF00F9F00FF0001FF01FC0000FF03F800007F07F000003F0FE000001F1FC000001F
+1FC000000F3F8000000F3F800000077F800000077F800000077F00000000FF00000000FF
+00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00
+0000007F000000007F800000007F800000073F800000073F800000071FC00000071FC000
+000E0FE000000E07F000001C03F800003C01FC00007800FF0001F0007FF007C0001FFFFF
+800007FFFE0000007FF00028297CA831>IIII<00007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000
+FF0001FF0001FC0000FF0003F800007F0007F000003F000FE000001F001FC000001F001F
+C000000F003F8000000F003F80000007007F80000007007F80000007007F0000000000FF
+0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
+0000000000FF0000000000FF0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F
+800000FF003F800000FF001FC00000FF001FC00000FF000FE00000FF0007F00000FF0003
+F80000FF0001FC0000FF0000FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000
+007FF003002D297CA835>III75
+DIII<0000FFC00000000FFFFC0000003F807F000000FE001FC00001F800
+07E00003F00003F00007E00001F8000FE00001FC001FC00000FE001FC00000FE003F8000
+007F003F8000007F007F8000007F807F0000003F807F0000003F807F0000003F80FF0000
+003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000
+003FC0FF0000003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000
+007F803F8000007F003F8000007F001FC00000FE001FC00000FE000FE00001FC0007F000
+03F80003F80007F00001FC000FE00000FE001FC000003FC0FF0000000FFFFC00000000FF
+C000002A297CA833>I