readline-6.3/0000775000043600000240000000000012302645507011754 5ustar chetstaffreadline-6.3/doc/0000775000043600000240000000000012302645513012516 5ustar chetstaffreadline-6.3/doc/Makefile.in0000664000043600000240000001654112115144571014572 0ustar chetstaff# This makefile for Readline library documentation is in -*- text -*- mode. # Emacs likes it that way. # Copyright (C) 1996-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . PACKAGE_TARNAME = @PACKAGE_TARNAME@ topdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ prefix = @prefix@ datarootdir = @datarootdir@ docdir = @docdir@ infodir = @infodir@ mandir = @mandir@ manpfx = man man1ext = .1 man1dir = $(mandir)/$(manpfx)1 man3ext = .3 man3dir = $(mandir)/$(manpfx)3 # set this to a value to have the HTML documentation installed htmldir = # Support an alternate destination root directory for package building DESTDIR = SHELL = @MAKE_SHELL@ RM = rm -f INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ BUILD_DIR = @BUILD_DIR@ TEXINPUTDIR = $(srcdir) MAKEINFO = LANGUAGE= makeinfo TEXI2DVI = $(srcdir)/texi2dvi TEXI2HTML = $(srcdir)/texi2html QUIETPS = #set this to -q to shut up dvips PAPERSIZE = letter PSDPI = 600 DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky # These tools might not be available; they're not required DVIPDF = dvipdfm -o $@ -p ${PAPERSIZE} PSPDF = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ RLSRC = $(srcdir)/rlman.texi $(srcdir)/rluser.texi \ $(srcdir)/rltech.texi $(srcdir)/version.texi \ $(srcdir)/rluserman.texi $(srcdir)/fdl.texi HISTSRC = $(srcdir)/history.texi $(srcdir)/hsuser.texi \ $(srcdir)/hstech.texi $(srcdir)/version.texi $(srcdir)/fdl.texi # This should be a program that converts troff to an ascii-readable format NROFF = groff -Tascii # This should be a program that converts troff to postscript GROFF = groff DVIOBJ = readline.dvi history.dvi rluserman.dvi INFOOBJ = readline.info history.info rluserman.info PSOBJ = readline.ps history.ps rluserman.ps readline_3.ps history_3.ps HTMLOBJ = readline.html history.html rluserman.html TEXTOBJ = readline.0 history.0 PDFOBJ = readline.pdf history.pdf rluserman.pdf INTERMEDIATE_OBJ = rlman.dvi DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) $(PDFOBJ) .SUFFIXES: .0 .3 .ps .txt .dvi .html .pdf .3.0: $(RM) $@ -${NROFF} -man $< > $@ .ps.pdf: $(RM) $@ -${PSPDF} $< .dvi.pdf: $(RM) $@ -${DVIPDF} $< all: info dvi html ps text pdf nodvi: info html text xdist: $(DIST_DOCS) info: $(INFOOBJ) dvi: $(DVIOBJ) ps: $(PSOBJ) html: $(HTMLOBJ) text: $(TEXTOBJ) pdf: $(PDFOBJ) readline.dvi: $(RLSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rlman.texi mv rlman.dvi readline.dvi readline.info: $(RLSRC) $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texi rluserman.dvi: $(RLSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rluserman.texi rluserman.info: $(RLSRC) $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rluserman.texi history.dvi: ${HISTSRC} TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/history.texi history.info: ${HISTSRC} $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/history.texi readline.ps: readline.dvi $(RM) $@ $(DVIPS) readline.dvi rluserman.ps: rluserman.dvi $(RM) $@ $(DVIPS) rluserman.dvi history.ps: history.dvi $(RM) $@ $(DVIPS) history.dvi # # This leaves readline.html and rlman.html -- rlman.html is for www.gnu.org # readline.html: ${RLSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texi sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html $(RM) rlman.html rluserman.html: ${RLSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texi history.html: ${HISTSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/history.texi readline.0: readline.3 readline_3.ps: $(srcdir)/readline.3 ${RM} $@ ${GROFF} -man < $(srcdir)/readline.3 > $@ history.0: history.3 history_3.ps: $(srcdir)/history.3 ${RM} $@ ${GROFF} -man < $(srcdir)/history.3 > $@ readline.pdf: readline.dvi history.pdf: history.dvi rluserman.pdf: rluserman.dvi clean: $(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \ *.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o \ core *.core mostlyclean: clean distclean: clean maybe-clean $(RM) $(INTERMEDIATE_OBJ) $(RM) Makefile maybe-clean: -if test "X$(topdir)" != "X.." && test "X$(topdir)" != "X$(BUILD_DIR)"; then \ $(RM) $(DIST_DOCS); \ fi maintainer-clean: clean $(RM) $(DIST_DOCS) $(RM) $(INTERMEDIATE_OBJ) $(RM) $(PDFOBJ) $(RM) Makefile installdirs: $(topdir)/support/mkdirs -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) -if test -n "${htmldir}" ; then \ $(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \ fi install: installdirs if test -f readline.info; then \ ${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \ else \ ${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \ fi if test -f rluserman.info; then \ ${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ else \ ${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ fi if test -f history.info; then \ ${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \ else \ ${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \ fi -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ install-info --dir-file=$(DESTDIR)$(infodir)/dir \ $(DESTDIR)$(infodir)/readline.info ; \ install-info --dir-file=$(DESTDIR)$(infodir)/dir \ $(DESTDIR)$(infodir)/history.info ; \ install-info --dir-file=$(DESTDIR)$(infodir)/dir \ $(DESTDIR)$(infodir)/rluserman.info ; \ else true; fi -${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext) -${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext) -if test -n "${htmldir}" ; then \ if test -f readline.html; then \ ${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \ else \ ${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \ fi ; \ if test -f history.html; then \ ${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \ else \ ${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \ fi ; \ if test -f rluserman.html; then \ ${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ else \ ${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ fi ; \ fi uninstall: $(RM) $(DESTDIR)$(infodir)/readline.info $(RM) $(DESTDIR)$(infodir)/rluserman.info $(RM) $(DESTDIR)$(infodir)/history.info $(RM) $(DESTDIR)$(man3dir)/readline$(man3ext) $(RM) $(DESTDIR)$(man3dir)/history$(man3ext) -if test -n "${htmldir}" ; then \ $(RM) $(DESTDIR)$(htmldir)/readline.html ; \ $(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \ $(RM) $(DESTDIR)$(htmldir)/history.html ; \ fi readline-6.3/doc/texinfo.tex0000644000043600000240000117440412257353261014732 0ustar chetstaff% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2013-09-11.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: top marks (\last...) \noexpand\or \the\toks4 \the\toks6 % 1: bottom marks (default, \prev...) \noexpand\else \the\toks8 % 2: color marks }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars} % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% % \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % % Unfortunately, this has the consequence that when _ is in the *value* % of an @set, it does not print properly in the roman fonts (get the cmr % dot accent at position 126 instead). No fix comes to mind, and it's % been this way since 2003 or earlier, so just ignore it. % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hat=`\^ \catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \markupsetuplqdefault \markupsetuprqdefault \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore readline-6.3/doc/version.texi0000664000043600000240000000033112262617635015104 0ustar chetstaff@ignore Copyright (C) 1988-2014 Free Software Foundation, Inc. @end ignore @set EDITION 6.3 @set VERSION 6.3 @set UPDATED 6 January 2014 @set UPDATED-MONTH January 2014 @set LASTCHANGE Mon Jan 6 16:26:51 EST 2014 readline-6.3/doc/fdl.texi0000644000043600000000000005601511155505164014160 0ustar chetwheel@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML}, PostScript or @acronym{PDF} designed for human modification. Examples of transparent image formats include @acronym{PNG}, @acronym{XCF} and @acronym{JPG}. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML}, PostScript or @acronym{PDF} produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.'' line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: readline-6.3/doc/rlman.texi0000664000043600000240000000452312262620107014523 0ustar chetstaff\input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename readline.info @settitle GNU Readline Library @include version.texi @comment %**end of header (This is for running Texinfo on a region.) @synindex vr fn @copying This manual describes the GNU Readline Library (version @value{VERSION}, @value{UPDATED}), a library which aids in the consistency of user interface across discrete programs which provide a command line interface. Copyright @copyright{} 1988--2014 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Libraries @direntry * Readline: (readline). The GNU readline library API. @end direntry @titlepage @title GNU Readline Library @subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. @subtitle @value{UPDATED-MONTH} @author Chet Ramey, Case Western Reserve University @author Brian Fox, Free Software Foundation @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Readline Library This document describes the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is @url{http://www.gnu.org/software/readline/}. @menu * Command Line Editing:: GNU Readline User's Manual. * Programming with GNU Readline:: GNU Readline Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables. @end menu @end ifnottex @include rluser.texi @include rltech.texi @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi @node Concept Index @unnumbered Concept Index @printindex cp @node Function and Variable Index @unnumbered Function and Variable Index @printindex fn @bye readline-6.3/doc/rltech.texi0000664000043600000240000027452112274515703014712 0ustar chetstaff@comment %**start of header (This is for running Texinfo on a region.) @setfilename rltech.info @comment %**end of header (This is for running Texinfo on a region.) @ifinfo This document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface. Copyright (C) 1988--2014 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore 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. @end ifinfo @node Programming with GNU Readline @chapter Programming with GNU Readline This chapter describes the interface between the @sc{gnu} Readline Library and other programs. If you are a programmer, and you wish to include the features found in @sc{gnu} Readline such as completion, line editing, and interactive history manipulation in your own programs, this section is for you. @menu * Basic Behavior:: Using the default behavior of Readline. * Custom Functions:: Adding your own functions to Readline. * Readline Variables:: Variables accessible to custom functions. * Readline Convenience Functions:: Functions which Readline supplies to aid in writing your own custom functions. * Readline Signal Handling:: How Readline behaves when it receives signals. * Custom Completers:: Supplanting or supplementing Readline's completion functions. @end menu @node Basic Behavior @section Basic Behavior Many programs provide a command line interface, such as @code{mail}, @code{ftp}, and @code{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 @code{gets()} or @code{fgets()}. @findex readline @cindex readline, function The function @code{readline()} prints a prompt @var{prompt} and then reads and returns a single line of text from the user. If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed. The line @code{readline} returns is allocated with @code{malloc()}; the caller should @code{free()} the line when it has finished with it. The declaration for @code{readline} in ANSI C is @example @code{char *readline (const char *@var{prompt});} @end example @noindent So, one might say @example @code{char *line = readline ("Enter a line: ");} @end example @noindent 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 @code{readline} encounters an @code{EOF} while reading the line, and the line is empty at that point, then @code{(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 @key{C-p} for example), you must call @code{add_history()} to save the line away in a @dfn{history} list of such lines. @example @code{add_history (line)}; @end example @noindent 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 @code{gets()} library function, and has the advantage of no static buffer to overflow: @example /* 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); @} @end example This function gives the user the default behaviour of @key{TAB} completion: completion on file names. If you do not want Readline to complete on filenames, you can change the binding of the @key{TAB} key with @code{rl_bind_key()}. @example @code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});} @end example @code{rl_bind_key()} takes two arguments: @var{key} is the character that you want to bind, and @var{function} is the address of the function to call when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert()} makes @key{TAB} insert itself. @code{rl_bind_key()} returns non-zero if @var{key} is not a valid ASCII character code (between 0 and 255). Thus, to disable the default @key{TAB} behavior, the following suffices: @example @code{rl_bind_key ('\t', rl_insert);} @end example This code should be executed once at the start of your program; you might write a function called @code{initialize_readline()} which performs this and other desired initializations, such as installing custom completers (@pxref{Custom Completers}). @node Custom Functions @section Custom Functions 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. Before declaring any functions that customize Readline's behavior, or using any functionality Readline provides in other code, an application writer should include the file @code{} in any file that uses Readline's features. Since some of the definitions in @code{readline.h} use the @code{stdio} library, the file @code{} should be included before @code{readline.h}. @code{readline.h} defines a C preprocessor variable that should be treated as an integer, @code{RL_READLINE_VERSION}, which may be used to conditionally compile application code depending on the installed Readline version. The value is a hexadecimal encoding of the major and minor version numbers of the library, of the form 0x@var{MMmm}. @var{MM} is the two-digit major version number; @var{mm} is the two-digit minor version number. For Readline 4.2, for example, the value of @code{RL_READLINE_VERSION} would be @code{0x0402}. @menu * Readline Typedefs:: C declarations to make code readable. * Function Writing:: Variables and calling conventions. @end menu @node Readline Typedefs @subsection Readline Typedefs For readability, we declare a number of new object types, all pointers to functions. The reason for declaring these new types is to make it easier to write code describing pointers to C functions with appropriately prototyped arguments and return values. For instance, say we want to declare a variable @var{func} as a pointer to a function which takes two @code{int} arguments and returns an @code{int} (this is the type of all of the Readline bindable functions). Instead of the classic C declaration @code{int (*func)();} @noindent or the ANSI-C style declaration @code{int (*func)(int, int);} @noindent we may write @code{rl_command_func_t *func;} The full list of function pointer types available is @table @code @item typedef int rl_command_func_t (int, int); @item typedef char *rl_compentry_func_t (const char *, int); @item typedef char **rl_completion_func_t (const char *, int, int); @item typedef char *rl_quote_func_t (char *, int, char *); @item typedef char *rl_dequote_func_t (char *, int); @item typedef int rl_compignore_func_t (char **); @item typedef void rl_compdisp_func_t (char **, int, int); @item typedef int rl_hook_func_t (void); @item typedef int rl_getc_func_t (FILE *); @item typedef int rl_linebuf_func_t (char *, int); @item typedef int rl_intfunc_t (int); @item #define rl_ivoidfunc_t rl_hook_func_t @item typedef int rl_icpfunc_t (char *); @item typedef int rl_icppfunc_t (char **); @item typedef void rl_voidfunc_t (void); @item typedef void rl_vintfunc_t (int); @item typedef void rl_vcpfunc_t (char *); @item typedef void rl_vcppfunc_t (char **); @end table @node Function Writing @subsection Writing a New Function 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 @code{foo} looks like @example @code{int foo (int count, int key)} @end example @noindent where @var{count} is the numeric argument (or 1 if defaulted) and @var{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. A command function should return 0 if its action completes successfully, and a non-zero value if some error occurs. This is the convention obeyed by all of the builtin Readline bindable command functions. @node Readline Variables @section Readline Variables These variables are available to function writers. @deftypevar {char *} rl_line_buffer This is the line gathered so far. You are welcome to modify the contents of the line, but see @ref{Allowing Undoing}. The function @code{rl_extend_line_buffer} is available to increase the memory allocated to @code{rl_line_buffer}. @end deftypevar @deftypevar int rl_point The offset of the current cursor position in @code{rl_line_buffer} (the @emph{point}). @end deftypevar @deftypevar int rl_end The number of characters present in @code{rl_line_buffer}. When @code{rl_point} is at the end of the line, @code{rl_point} and @code{rl_end} are equal. @end deftypevar @deftypevar int rl_mark The @var{mark} (saved position) in the current line. If set, the mark and point define a @emph{region}. @end deftypevar @deftypevar int rl_done Setting this to a non-zero value causes Readline to return the current line immediately. @end deftypevar @deftypevar int rl_num_chars_to_read Setting this to a positive value before calling @code{readline()} causes Readline to return after accepting that many characters, rather than reading up to a character bound to @code{accept-line}. @end deftypevar @deftypevar 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. @end deftypevar @deftypevar int rl_dispatching Set to a non-zero value if a function is being called from a key binding; zero otherwise. Application functions can test this to discover whether they were called directly or by Readline's dispatching mechanism. @end deftypevar @deftypevar int rl_erase_empty_line Setting this to a non-zero value causes Readline to completely erase the current line, including any prompt, any time a newline is typed as the only character on an otherwise-empty line. The cursor is moved to the beginning of the newly-blank line. @end deftypevar @deftypevar {char *} rl_prompt The prompt Readline uses. This is set from the argument to @code{readline()}, and should not be assigned to directly. The @code{rl_set_prompt()} function (@pxref{Redisplay}) may be used to modify the prompt string after calling @code{readline()}. @end deftypevar @deftypevar {char *} rl_display_prompt The string displayed as the prompt. This is usually identical to @var{rl_prompt}, but may be changed temporarily by functions that use the prompt string as a message area, such as incremental search. @end deftypevar @deftypevar int rl_already_prompted If an application wishes to display the prompt itself, rather than have Readline do it the first time @code{readline()} is called, it should set this variable to a non-zero value after displaying the prompt. The prompt must also be passed as the argument to @code{readline()} so the redisplay functions can update the display properly. The calling application is responsible for managing the value; Readline never sets it. @end deftypevar @deftypevar {const char *} rl_library_version The version number of this revision of the library. @end deftypevar @deftypevar int rl_readline_version An integer encoding the current version of the library. The encoding is of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version number, and @var{mm} is the two-digit minor version number. For example, for Readline-4.2, @code{rl_readline_version} would have the value 0x0402. @end deftypevar @deftypevar {int} rl_gnu_readline_p Always set to 1, denoting that this is @sc{gnu} readline rather than some emulation. @end deftypevar @deftypevar {const char *} rl_terminal_name The terminal type, used for initialization. If not set by the application, Readline sets this to the value of the @env{TERM} environment variable the first time it is called. @end deftypevar @deftypevar {const 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 (@pxref{Conditional Init Constructs}). @end deftypevar @deftypevar {FILE *} rl_instream The stdio stream from which Readline reads input. If @code{NULL}, Readline defaults to @var{stdin}. @end deftypevar @deftypevar {FILE *} rl_outstream The stdio stream to which Readline performs output. If @code{NULL}, Readline defaults to @var{stdout}. @end deftypevar @deftypevar int rl_prefer_env_winsize If non-zero, Readline gives values found in the @env{LINES} and @env{COLUMNS} environment variables greater precedence than values fetched from the kernel when computing the screen dimensions. @end deftypevar @deftypevar {rl_command_func_t *} rl_last_func The address of the last command function Readline executed. May be used to test whether or not a function is being executed twice in succession, for example. @end deftypevar @deftypevar {rl_hook_func_t *} rl_startup_hook If non-zero, this is the address of a function to call just before @code{readline} prints the first prompt. @end deftypevar @deftypevar {rl_hook_func_t *} rl_pre_input_hook If non-zero, this is the address of a function to call after the first prompt has been printed and just before @code{readline} starts reading input characters. @end deftypevar @deftypevar {rl_hook_func_t *} rl_event_hook If non-zero, this is the address of a function to call periodically when Readline is waiting for terminal input. By default, this will be called at most ten times a second if there is no keyboard input. @end deftypevar @deftypevar {rl_getc_func_t *} 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 @code{rl_getc}, the default Readline character input function (@pxref{Character Input}). In general, an application that sets @var{rl_getc_function} should consider setting @var{rl_input_available_hook} as well. @end deftypevar @deftypevar {rl_hook_func_t *} rl_signal_event_hook If non-zero, this is the address of a function to call if a read system call is interrupted when Readline is reading terminal input. @end deftypevar @deftypevar {rl_hook_func_t *} rl_input_available_hook If non-zero, Readline will use this function's return value when it needs to determine whether or not there is available input on the current input source. The default hook checks @code{rl_instream}; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. This may use an application-specific timeout before returning a value; Readline uses the value passed to @code{rl_set_keyboard_input_timeout()} or the value of the user-settable @var{keyseq-timeout} variable. This is designed for use by applications using Readline's callback interface (@pxref{Alternate Interface}), which may not use the traditional @code{read(2)} and file descriptor interface, or other applications using a different input mechanism. If an application uses an input mechanism or hook that can potentially exceed the value of @var{keyseq-timeout}, it should increase the timeout or set this hook appropriately even when not using the callback interface. In general, an application that sets @var{rl_getc_function} should consider setting @var{rl_input_available_hook} as well. @end deftypevar @deftypevar {rl_voidfunc_t *} 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 @code{rl_redisplay}, the default Readline redisplay function (@pxref{Redisplay}). @end deftypevar @deftypevar {rl_vintfunc_t *} rl_prep_term_function If non-zero, Readline will call indirectly through this pointer to initialize the terminal. The function takes a single argument, an @code{int} flag that says whether or not to use eight-bit characters. By default, this is set to @code{rl_prep_terminal} (@pxref{Terminal Management}). @end deftypevar @deftypevar {rl_voidfunc_t *} rl_deprep_term_function If non-zero, Readline will call indirectly through this pointer to reset the terminal. This function should undo the effects of @code{rl_prep_term_function}. By default, this is set to @code{rl_deprep_terminal} (@pxref{Terminal Management}). @end deftypevar @deftypevar {Keymap} rl_executing_keymap This variable is set to the keymap (@pxref{Keymaps}) in which the currently executing readline function was found. @end deftypevar @deftypevar {Keymap} rl_binding_keymap This variable is set to the keymap (@pxref{Keymaps}) in which the last key binding occurred. @end deftypevar @deftypevar {char *} rl_executing_macro This variable is set to the text of any currently-executing macro. @end deftypevar @deftypevar int rl_executing_key The key that caused the dispatch to the currently-executing Readline function. @end deftypevar @deftypevar {char *} rl_executing_keyseq The full key sequence that caused the dispatch to the currently-executing Readline function. @end deftypevar @deftypevar int rl_key_sequence_length The number of characters in @var{rl_executing_keyseq}. @end deftypevar @deftypevar {int} rl_readline_state A variable with bit values that encapsulate the current Readline state. A bit is set with the @code{RL_SETSTATE} macro, and unset with the @code{RL_UNSETSTATE} macro. Use the @code{RL_ISSTATE} macro to test whether a particular state bit is set. Current state bits include: @table @code @item RL_STATE_NONE Readline has not yet been called, nor has it begun to initialize. @item RL_STATE_INITIALIZING Readline is initializing its internal data structures. @item RL_STATE_INITIALIZED Readline has completed its initialization. @item RL_STATE_TERMPREPPED Readline has modified the terminal modes to do its own input and redisplay. @item RL_STATE_READCMD Readline is reading a command from the keyboard. @item RL_STATE_METANEXT Readline is reading more input after reading the meta-prefix character. @item RL_STATE_DISPATCHING Readline is dispatching to a command. @item RL_STATE_MOREINPUT Readline is reading more input while executing an editing command. @item RL_STATE_ISEARCH Readline is performing an incremental history search. @item RL_STATE_NSEARCH Readline is performing a non-incremental history search. @item RL_STATE_SEARCH Readline is searching backward or forward through the history for a string. @item RL_STATE_NUMERICARG Readline is reading a numeric argument. @item RL_STATE_MACROINPUT Readline is currently getting its input from a previously-defined keyboard macro. @item RL_STATE_MACRODEF Readline is currently reading characters defining a keyboard macro. @item RL_STATE_OVERWRITE Readline is in overwrite mode. @item RL_STATE_COMPLETING Readline is performing word completion. @item RL_STATE_SIGHANDLER Readline is currently executing the readline signal handler. @item RL_STATE_UNDOING Readline is performing an undo. @item RL_STATE_INPUTPENDING Readline has input pending due to a call to @code{rl_execute_next()}. @item RL_STATE_TTYCSAVED Readline has saved the values of the terminal's special characters. @item RL_STATE_CALLBACK Readline is currently using the alternate (callback) interface (@pxref{Alternate Interface}). @item RL_STATE_VIMOTION Readline is reading the argument to a vi-mode "motion" command. @item RL_STATE_MULTIKEY Readline is reading a multiple-keystroke command. @item RL_STATE_VICMDONCE Readline has entered vi command (movement) mode at least one time during the current call to @code{readline()}. @item RL_STATE_DONE Readline has read a key sequence bound to @code{accept-line} and is about to return the line to the caller. @end table @end deftypevar @deftypevar {int} rl_explicit_arg Set to a non-zero value if an explicit numeric argument was specified by the user. Only valid in a bindable command function. @end deftypevar @deftypevar {int} rl_numeric_arg Set to the value of any numeric argument explicitly specified by the user before executing the current Readline function. Only valid in a bindable command function. @end deftypevar @deftypevar {int} rl_editing_mode Set to a value denoting Readline's current editing mode. A value of @var{1} means Readline is currently in emacs mode; @var{0} means that vi mode is active. @end deftypevar @node Readline Convenience Functions @section Readline Convenience Functions @menu * Function Naming:: How to give a function you write a name. * Keymaps:: Making keymaps. * Binding Keys:: Changing Keymaps. * Associating Function Names and Bindings:: Translate function names to key sequences. * Allowing Undoing:: How to make your functions undoable. * Redisplay:: Functions to control line display. * Modifying Text:: Functions to modify @code{rl_line_buffer}. * Character Input:: Functions to read keyboard input. * Terminal Management:: Functions to manage terminal settings. * Utility Functions:: Generally useful functions and hooks. * Miscellaneous Functions:: Functions that don't fall into any category. * Alternate Interface:: Using Readline in a `callback' fashion. * A Readline Example:: An example Readline function. * Alternate Interface Example:: An example program using the alternate interface. @end menu @node Function Naming @subsection Naming a Function 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 @example Meta-Rubout: backward-kill-word @end example This binds the keystroke @key{Meta-Rubout} to the function @emph{descriptively} named @code{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: @deftypefun int rl_add_defun (const char *name, rl_command_func_t *function, int key) Add @var{name} to the list of named functions. Make @var{function} be the function that gets called. If @var{key} is not -1, then bind it to @var{function} using @code{rl_bind_key()}. @end deftypefun 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. @node Keymaps @subsection Selecting a Keymap Key bindings take place on a @dfn{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. @deftypefun Keymap rl_make_bare_keymap (void) Returns a new, empty keymap. The space for the keymap is allocated with @code{malloc()}; the caller should free it by calling @code{rl_free_keymap()} when done. @end deftypefun @deftypefun Keymap rl_copy_keymap (Keymap map) Return a new keymap which is a copy of @var{map}. @end deftypefun @deftypefun Keymap rl_make_keymap (void) 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. @end deftypefun @deftypefun void rl_discard_keymap (Keymap keymap) Free the storage associated with the data in @var{keymap}. The caller should free @var{keymap}. @end deftypefun @deftypefun void rl_free_keymap (Keymap keymap) Free all storage associated with @var{keymap}. This calls @code{rl_discard_keymap} to free subordindate keymaps and macros. @end deftypefun Readline has several internal keymaps. These functions allow you to change which keymap is active. @deftypefun Keymap rl_get_keymap (void) Returns the currently active keymap. @end deftypefun @deftypefun void rl_set_keymap (Keymap keymap) Makes @var{keymap} the currently active keymap. @end deftypefun @deftypefun Keymap rl_get_keymap_by_name (const char *name) Return the keymap matching @var{name}. @var{name} is one which would be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). @end deftypefun @deftypefun {char *} rl_get_keymap_name (Keymap keymap) Return the name matching @var{keymap}. @var{name} is one which would be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). @end deftypefun @node Binding Keys @subsection Binding Keys Key sequences are associate with functions through the keymap. Readline has several internal keymaps: @code{emacs_standard_keymap}, @code{emacs_meta_keymap}, @code{emacs_ctlx_keymap}, @code{vi_movement_keymap}, and @code{vi_insertion_keymap}. @code{emacs_standard_keymap} is the default, and the examples in this manual assume that. Since @code{readline()} installs a set of default key bindings the first time it is called, there is always the danger that a custom binding installed before the first call to @code{readline()} will be overridden. An alternate mechanism is to install custom key bindings in an initialization function assigned to the @code{rl_startup_hook} variable (@pxref{Readline Variables}). These functions manage key bindings. @deftypefun int rl_bind_key (int key, rl_command_func_t *function) Binds @var{key} to @var{function} in the currently active keymap. Returns non-zero in the case of an invalid @var{key}. @end deftypefun @deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map) Bind @var{key} to @var{function} in @var{map}. Returns non-zero in the case of an invalid @var{key}. @end deftypefun @deftypefun int rl_bind_key_if_unbound (int key, rl_command_func_t *function) Binds @var{key} to @var{function} if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid @var{key} or if @var{key} is already bound. @end deftypefun @deftypefun int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map) Binds @var{key} to @var{function} if it is not already bound in @var{map}. Returns non-zero in the case of an invalid @var{key} or if @var{key} is already bound. @end deftypefun @deftypefun int rl_unbind_key (int key) Bind @var{key} to the null function in the currently active keymap. Returns non-zero in case of error. @end deftypefun @deftypefun int rl_unbind_key_in_map (int key, Keymap map) Bind @var{key} to the null function in @var{map}. Returns non-zero in case of error. @end deftypefun @deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map) Unbind all keys that execute @var{function} in @var{map}. @end deftypefun @deftypefun int rl_unbind_command_in_map (const char *command, Keymap map) Unbind all keys that are bound to @var{command} in @var{map}. @end deftypefun @deftypefun int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function) Bind the key sequence represented by the string @var{keyseq} to the function @var{function}, beginning in the current keymap. This makes new keymaps as necessary. The return value is non-zero if @var{keyseq} is invalid. @end deftypefun @deftypefun int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Bind the key sequence represented by the string @var{keyseq} to the function @var{function}. This makes new keymaps as necessary. Initial bindings are performed in @var{map}. The return value is non-zero if @var{keyseq} is invalid. @end deftypefun @deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) Equivalent to @code{rl_bind_keyseq_in_map}. @end deftypefun @deftypefun int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function) Binds @var{keyseq} to @var{function} if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is already bound. @end deftypefun @deftypefun int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Binds @var{keyseq} to @var{function} if it is not already bound in @var{map}. Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is already bound. @end deftypefun @deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map) Bind the key sequence represented by the string @var{keyseq} to the arbitrary pointer @var{data}. @var{type} says what kind of data is pointed to by @var{data}; this can be a function (@code{ISFUNC}), a macro (@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as necessary. The initial keymap in which to do bindings is @var{map}. @end deftypefun @deftypefun int rl_parse_and_bind (char *line) Parse @var{line} as if it had been read from the @code{inputrc} file and perform any key bindings and variable assignments found (@pxref{Readline Init File}). @end deftypefun @deftypefun int rl_read_init_file (const char *filename) Read keybindings and variable assignments from @var{filename} (@pxref{Readline Init File}). @end deftypefun @node Associating Function Names and Bindings @subsection Associating Function Names and Bindings These functions allow you to find out what keys invoke named functions and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function. @deftypefun {rl_command_func_t *} rl_named_function (const char *name) Return the function with name @var{name}. @end deftypefun @deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type) Return the function invoked by @var{keyseq} in keymap @var{map}. If @var{map} is @code{NULL}, the current keymap is used. If @var{type} is not @code{NULL}, the type of the object is returned in the @code{int} variable it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}). @end deftypefun @deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function) Return an array of strings representing the key sequences used to invoke @var{function} in the current keymap. @end deftypefun @deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) Return an array of strings representing the key sequences used to invoke @var{function} in the keymap @var{map}. @end deftypefun @deftypefun void rl_function_dumper (int readable) Print the readline function names and the key sequences currently bound to them to @code{rl_outstream}. If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @deftypefun void rl_list_funmap_names (void) Print the names of all bindable Readline functions to @code{rl_outstream}. @end deftypefun @deftypefun {const char **} rl_funmap_names (void) Return a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free the array, but not the pointers, using @code{free} or @code{rl_free} when you are done. @end deftypefun @deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function) Add @var{name} to the list of bindable Readline command names, and make @var{function} the function to be called when @var{name} is invoked. @end deftypefun @node Allowing Undoing @subsection Allowing Undoing 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. If your function simply inserts text once, or deletes text once, and uses @code{rl_insert_text()} or @code{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 @code{rl_begin_undo_group()} and @code{rl_end_undo_group()}. The types of events that can be undone are: @smallexample enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @}; @end smallexample Notice that @code{UNDO_DELETE} means to insert some text, and @code{UNDO_INSERT} means to delete some text. That is, the undo code tells what to undo, not how to undo it. @code{UNDO_BEGIN} and @code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and @code{rl_end_undo_group()}. @deftypefun int rl_begin_undo_group (void) Begins saving undo information in a group construct. The undo information usually comes from calls to @code{rl_insert_text()} and @code{rl_delete_text()}, but could be the result of calls to @code{rl_add_undo()}. @end deftypefun @deftypefun int rl_end_undo_group (void) Closes the current undo group started with @code{rl_begin_undo_group ()}. There should be one call to @code{rl_end_undo_group()} for each call to @code{rl_begin_undo_group()}. @end deftypefun @deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text) Remember how to undo an event (according to @var{what}). The affected text runs from @var{start} to @var{end}, and encompasses @var{text}. @end deftypefun @deftypefun void rl_free_undo_list (void) Free the existing undo list. @end deftypefun @deftypefun int rl_do_undo (void) Undo the first thing on the undo list. Returns @code{0} if there was nothing to undo, non-zero if something was undone. @end deftypefun Finally, if you neither insert nor delete text, but directly modify the existing text (e.g., change its case), call @code{rl_modifying()} once, just before you modify the text. You must supply the indices of the text range that you are going to modify. @deftypefun int rl_modifying (int start, int end) Tell Readline to save the text between @var{start} and @var{end} as a single undo unit. It is assumed that you will subsequently modify that text. @end deftypefun @node Redisplay @subsection Redisplay @deftypefun void rl_redisplay (void) Change what's displayed on the screen to reflect the current contents of @code{rl_line_buffer}. @end deftypefun @deftypefun int rl_forced_update_display (void) Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct. @end deftypefun @deftypefun int rl_on_new_line (void) Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline. @end deftypefun @deftypefun int rl_on_new_line_with_prompt (void) Tell the update functions that we have moved onto a new line, with @var{rl_prompt} already displayed. This could be used by applications that want to output the prompt string themselves, but still need Readline to know the prompt string length for redisplay. It should be used after setting @var{rl_already_prompted}. @end deftypefun @deftypefun int rl_reset_line_state (void) Reset the display state to a clean state and redisplay the current line starting on a new line. @end deftypefun @deftypefun int rl_crlf (void) Move the cursor to the start of the next screen line. @end deftypefun @deftypefun int rl_show_char (int c) Display character @var{c} on @code{rl_outstream}. If Readline has not been set to display meta characters directly, this will convert meta characters to a meta-prefixed key sequence. This is intended for use by applications which wish to do their own redisplay. @end deftypefun @deftypefun int rl_message (const char *, @dots{}) The arguments are a format string as would be supplied to @code{printf}, possibly containing conversion specifications such as @samp{%d}, and any additional arguments necessary to satisfy the conversion specifications. The resulting string is displayed in the @dfn{echo area}. The echo area is also used to display numeric arguments and search strings. You should call @code{rl_save_prompt} to save the prompt information before calling this function. @end deftypefun @deftypefun int rl_clear_message (void) Clear the message in the echo area. If the prompt was saved with a call to @code{rl_save_prompt} before the last call to @code{rl_message}, call @code{rl_restore_prompt} before calling this function. @end deftypefun @deftypefun void rl_save_prompt (void) Save the local Readline prompt display state in preparation for displaying a new message in the message area with @code{rl_message()}. @end deftypefun @deftypefun void rl_restore_prompt (void) Restore the local Readline prompt display state saved by the most recent call to @code{rl_save_prompt}. if @code{rl_save_prompt} was called to save the prompt before a call to @code{rl_message}, this function should be called before the corresponding call to @code{rl_clear_message}. @end deftypefun @deftypefun int rl_expand_prompt (char *prompt) Expand any special character sequences in @var{prompt} and set up the local Readline prompt redisplay variables. This function is called by @code{readline()}. It may also be called to expand the primary prompt if the @code{rl_on_new_line_with_prompt()} function or @code{rl_already_prompted} variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers @code{RL_PROMPT_START_IGNORE} and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h}. This may be used to embed terminal-specific escape sequences in prompts. @end deftypefun @deftypefun int rl_set_prompt (const char *prompt) Make Readline use @var{prompt} for subsequent redisplay. This calls @code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt} to the result. @end deftypefun @node Modifying Text @subsection Modifying Text @deftypefun int rl_insert_text (const char *text) Insert @var{text} into the line at the current cursor position. Returns the number of characters inserted. @end deftypefun @deftypefun int rl_delete_text (int start, int end) Delete the text between @var{start} and @var{end} in the current line. Returns the number of characters deleted. @end deftypefun @deftypefun {char *} rl_copy_text (int start, int end) Return a copy of the text between @var{start} and @var{end} in the current line. @end deftypefun @deftypefun int rl_kill_text (int start, int end) Copy the text between @var{start} and @var{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 @var{start} is less than @var{end}, the text is appended, otherwise prepended. If the last command was not a kill, a new kill ring slot is used. @end deftypefun @deftypefun int rl_push_macro_input (char *macro) Cause @var{macro} to be inserted into the line, as if it had been invoked by a key bound to a macro. Not especially useful; use @code{rl_insert_text()} instead. @end deftypefun @node Character Input @subsection Character Input @deftypefun int rl_read_key (void) Return the next character available from Readline's current input stream. This handles input inserted into the input stream via @var{rl_pending_input} (@pxref{Readline Variables}) and @code{rl_stuff_char()}, macros, and characters read from the keyboard. While waiting for input, this function will call any function assigned to the @code{rl_event_hook} variable. @end deftypefun @deftypefun int rl_getc (FILE *stream) Return the next character available from @var{stream}, which is assumed to be the keyboard. @end deftypefun @deftypefun int rl_stuff_char (int c) Insert @var{c} into the Readline input stream. It will be "read" before Readline attempts to read characters from the terminal with @code{rl_read_key()}. Up to 512 characters may be pushed back. @code{rl_stuff_char} returns 1 if the character was successfully inserted; 0 otherwise. @end deftypefun @deftypefun int rl_execute_next (int c) Make @var{c} be the next command to be executed when @code{rl_read_key()} is called. This sets @var{rl_pending_input}. @end deftypefun @deftypefun int rl_clear_pending_input (void) Unset @var{rl_pending_input}, effectively negating the effect of any previous call to @code{rl_execute_next()}. This works only if the pending input has not already been read with @code{rl_read_key()}. @end deftypefun @deftypefun int rl_set_keyboard_input_timeout (int u) While waiting for keyboard input in @code{rl_read_key()}, Readline will wait for @var{u} microseconds for input before calling any function assigned to @code{rl_event_hook}. @var{u} must be greater than or equal to zero (a zero-length timeout is equivalent to a poll). The default waiting period is one-tenth of a second. Returns the old timeout value. @end deftypefun @node Terminal Management @subsection Terminal Management @deftypefun void rl_prep_terminal (int meta_flag) Modify the terminal settings for Readline's use, so @code{readline()} can read a single character at a time from the keyboard. The @var{meta_flag} argument should be non-zero if Readline should read eight-bit input. @end deftypefun @deftypefun void rl_deprep_terminal (void) Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in the state in which it was before the most recent call to @code{rl_prep_terminal()}. @end deftypefun @deftypefun void rl_tty_set_default_bindings (Keymap kmap) Read the operating system's terminal editing characters (as would be displayed by @code{stty}) to their Readline equivalents. The bindings are performed in @var{kmap}. @end deftypefun @deftypefun void rl_tty_unset_default_bindings (Keymap kmap) Reset the bindings manipulated by @code{rl_tty_set_default_bindings} so that the terminal editing characters are bound to @code{rl_insert}. The bindings are performed in @var{kmap}. @end deftypefun @deftypefun int rl_reset_terminal (const char *terminal_name) Reinitialize Readline's idea of the terminal settings using @var{terminal_name} as the terminal type (e.g., @code{vt100}). If @var{terminal_name} is @code{NULL}, the value of the @code{TERM} environment variable is used. @end deftypefun @node Utility Functions @subsection Utility Functions @deftypefun int rl_save_state (struct readline_state *sp) Save a snapshot of Readline's internal state to @var{sp}. The contents of the @var{readline_state} structure are documented in @file{readline.h}. The caller is responsible for allocating the structure. @end deftypefun @deftypefun int rl_restore_state (struct readline_state *sp) Restore Readline's internal state to that stored in @var{sp}, which must have been saved by a call to @code{rl_save_state}. The contents of the @var{readline_state} structure are documented in @file{readline.h}. The caller is responsible for freeing the structure. @end deftypefun @deftypefun void rl_free (void *mem) Deallocate the memory pointed to by @var{mem}. @var{mem} must have been allocated by @code{malloc}. @end deftypefun @deftypefun void rl_replace_line (const char *text, int clear_undo) Replace the contents of @code{rl_line_buffer} with @var{text}. The point and mark are preserved, if possible. If @var{clear_undo} is non-zero, the undo list associated with the current line is cleared. @end deftypefun @deftypefun void rl_extend_line_buffer (int len) Ensure that @code{rl_line_buffer} has enough space to hold @var{len} characters, possibly reallocating it if necessary. @end deftypefun @deftypefun int rl_initialize (void) Initialize or re-initialize Readline's internal state. It's not strictly necessary to call this; @code{readline()} calls it before reading any input. @end deftypefun @deftypefun int rl_ding (void) Ring the terminal bell, obeying the setting of @code{bell-style}. @end deftypefun @deftypefun int rl_alphabetic (int c) Return 1 if @var{c} is an alphabetic character. @end deftypefun @deftypefun void rl_display_match_list (char **matches, int len, int max) A convenience function for displaying a list of strings in columnar format on Readline's output stream. @code{matches} is the list of strings, in argv format, such as a list of completion matches. @code{len} is the number of strings in @code{matches}, and @code{max} is the length of the longest string in @code{matches}. This function uses the setting of @code{print-completions-horizontally} to select how the matches are displayed (@pxref{Readline Init File Syntax}). When displaying completions, this function sets the number of columns used for display to the value of @code{completion-display-width}, the value of the environment variable @env{COLUMNS}, or the screen width, in that order. @end deftypefun The following are implemented as macros, defined in @code{chardefs.h}. Applications should refrain from using them. @deftypefun int _rl_uppercase_p (int c) Return 1 if @var{c} is an uppercase alphabetic character. @end deftypefun @deftypefun int _rl_lowercase_p (int c) Return 1 if @var{c} is a lowercase alphabetic character. @end deftypefun @deftypefun int _rl_digit_p (int c) Return 1 if @var{c} is a numeric character. @end deftypefun @deftypefun int _rl_to_upper (int c) If @var{c} is a lowercase alphabetic character, return the corresponding uppercase character. @end deftypefun @deftypefun int _rl_to_lower (int c) If @var{c} is an uppercase alphabetic character, return the corresponding lowercase character. @end deftypefun @deftypefun int _rl_digit_value (int c) If @var{c} is a number, return the value it represents. @end deftypefun @node Miscellaneous Functions @subsection Miscellaneous Functions @deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map) Bind the key sequence @var{keyseq} to invoke the macro @var{macro}. The binding is performed in @var{map}. When @var{keyseq} is invoked, the @var{macro} will be inserted into the line. This function is deprecated; use @code{rl_generic_bind()} instead. @end deftypefun @deftypefun void rl_macro_dumper (int readable) Print the key sequences bound to macros and their values, using the current keymap, to @code{rl_outstream}. If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @deftypefun int rl_variable_bind (const char *variable, const char *value) Make the Readline variable @var{variable} have @var{value}. This behaves as if the readline command @samp{set @var{variable} @var{value}} had been executed in an @code{inputrc} file (@pxref{Readline Init File Syntax}). @end deftypefun @deftypefun {char *} rl_variable_value (const char *variable) Return a string representing the value of the Readline variable @var{variable}. For boolean variables, this string is either @samp{on} or @samp{off}. @end deftypefun @deftypefun void rl_variable_dumper (int readable) Print the readline variable names and their current values to @code{rl_outstream}. If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @deftypefun int rl_set_paren_blink_timeout (int u) Set the time interval (in microseconds) that Readline waits when showing a balancing character when @code{blink-matching-paren} has been enabled. @end deftypefun @deftypefun {char *} rl_get_termcap (const char *cap) Retrieve the string value of the termcap capability @var{cap}. Readline fetches the termcap entry for the current terminal name and uses those capabilities to move around the screen line and perform other terminal-specific operations, like erasing a line. Readline does not use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses. @end deftypefun @deftypefun {void} rl_clear_history (void) Clear the history list by deleting all of the entries, in the same manner as the History library's @code{clear_history()} function. This differs from @code{clear_history} because it frees private data Readline saves in the history list. @end deftypefun @node Alternate Interface @subsection Alternate Interface An alternate interface is available to plain @code{readline()}. Some applications need to interleave keyboard I/O with file, device, or window system I/O, typically by using a main loop to @code{select()} on various file descriptors. To accommodate this need, readline can also be invoked as a `callback' function from an event loop. There are functions available to make this easy. @deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler) Set up the terminal for readline I/O and display the initial expanded value of @var{prompt}. Save the value of @var{lhandler} to use as a handler function to call when a complete line of input has been entered. The handler function receives the text of the line as an argument. @end deftypefun @deftypefun void rl_callback_read_char (void) Whenever an application determines that keyboard input is available, it should call @code{rl_callback_read_char()}, which will read the next character from the current input source. If that character completes the line, @code{rl_callback_read_char} will invoke the @var{lhandler} function installed by @code{rl_callback_handler_install} to process the line. Before calling the @var{lhandler} function, the terminal settings are reset to the values they had before calling @code{rl_callback_handler_install}. If the @var{lhandler} function returns, and the line handler remains installed, the terminal settings are modified for Readline's use again. @code{EOF} is indicated by calling @var{lhandler} with a @code{NULL} line. @end deftypefun @deftypefun void rl_callback_handler_remove (void) Restore the terminal to its initial state and remove the line handler. This may be called from within a callback as well as independently. If the @var{lhandler} installed by @code{rl_callback_handler_install} does not exit the program, either this function or the function referred to by the value of @code{rl_deprep_term_function} should be called before the program exits to reset the terminal settings. @end deftypefun @node A Readline Example @subsection A Readline Example Here is a function which changes lowercase characters to their uppercase equivalents, and uppercase characters to lowercase. If this function was bound to @samp{M-c}, then typing @samp{M-c} would change the case of the character under point. Typing @samp{M-1 0 M-c} would change the case of the following 10 characters, leaving the cursor on the last character changed. @example /* 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 (_rl_uppercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); else if (_rl_lowercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_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); @} @end example @node Alternate Interface Example @subsection Alternate Interface Example Here is a complete program that illustrates Readline's alternate interface. It reads lines from the terminal and displays them, providing the standard history and TAB completion functions. It understands the EOF character or "exit" to exit the program. @example /* Standard include files. stdio.h is required. */ #include #include /* Used for select(2) */ #include #include #include /* Standard readline include files. */ #include #include static void cb_linehandler (char *); int running; const char *prompt = "rltest$ "; /* Callback function called for each line when accept-line executed, EOF seen, or EOF character read. This sets a flag and returns; it could also call exit(3). */ static void cb_linehandler (char *line) @{ /* Can use ^D (stty eof) or `exit' to exit. */ if (line == NULL || strcmp (line, "exit") == 0) @{ if (line == 0) printf ("\n"); printf ("exit\n"); /* This function needs to be called to reset the terminal settings, and calling it from the line handler keeps one extra prompt from being displayed. */ rl_callback_handler_remove (); running = 0; @} else @{ if (*line) add_history (line); printf ("input line: %s\n", line); free (line); @} @} int main (int c, char **v) @{ fd_set fds; int r; /* Install the line handler. */ rl_callback_handler_install (prompt, cb_linehandler); /* Enter a simple event loop. This waits until something is available to read on readline's input stream (defaults to standard input) and calls the builtin character read callback to read it. It does not have to modify the user's terminal settings. */ running = 1; while (running) @{ FD_ZERO (&fds); FD_SET (fileno (rl_instream), &fds); r = select (FD_SETSIZE, &fds, NULL, NULL, NULL); if (r < 0) @{ perror ("rltest: select"); rl_callback_handler_remove (); break; @} if (FD_ISSET (fileno (rl_instream), &fds)) rl_callback_read_char (); @} printf ("rltest: Event loop has exited\n"); return 0; @} @end example @node Readline Signal Handling @section Readline Signal Handling Signals are asynchronous events sent to a process by the Unix kernel, sometimes on behalf of another process. They are intended to indicate exceptional events, like a user pressing the interrupt key on his terminal, or a network connection being broken. There is a class of signals that can be sent to the process currently reading input from the keyboard. Since Readline changes the terminal attributes when it is called, it needs to perform special processing when such a signal is received in order to restore the terminal to a sane state, or provide application writers with functions to do so manually. Readline contains an internal signal handler that is installed for a number of signals (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}). When one of these signals is received, the signal handler will reset the terminal attributes to those that were in effect before @code{readline()} was called, reset the signal handling to what it was before @code{readline()} was called, and resend the signal to the calling application. If and when the calling application's signal handler returns, Readline will reinitialize the terminal and continue to accept input. When a @code{SIGINT} is received, the Readline signal handler performs some additional work, which will cause any partially-entered line to be aborted (see the description of @code{rl_free_line_state()} below). There is an additional Readline signal handler, for @code{SIGWINCH}, which the kernel sends to a process whenever the terminal's size changes (for example, if a user resizes an @code{xterm}). The Readline @code{SIGWINCH} handler updates Readline's internal screen size information, and then calls any @code{SIGWINCH} signal handler the calling application has installed. Readline calls the application's @code{SIGWINCH} signal handler without resetting the terminal to its original state. If the application's signal handler does more than update its idea of the terminal size and return (for example, a @code{longjmp} back to a main processing loop), it @emph{must} call @code{rl_cleanup_after_signal()} (described below), to restore the terminal state. Readline provides two variables that allow application writers to control whether or not it will catch certain signals and act on them when they are received. It is important that applications change the values of these variables only when calling @code{readline()}, not in a signal handler, so Readline's internal signal state is not corrupted. @deftypevar int rl_catch_signals If this variable is non-zero, Readline will install signal handlers for @code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}. The default value of @code{rl_catch_signals} is 1. @end deftypevar @deftypevar int rl_catch_sigwinch If this variable is set to a non-zero value, Readline will install a signal handler for @code{SIGWINCH}. The default value of @code{rl_catch_sigwinch} is 1. @end deftypevar @deftypevar int rl_change_environment If this variable is set to a non-zero value, and Readline is handling @code{SIGWINCH}, Readline will modify the @var{LINES} and @var{COLUMNS} environment variables upon receipt of a @code{SIGWINCH} The default value of @code{rl_change_environment} is 1. @end deftypevar If an application does not wish to have Readline catch any signals, or to handle signals other than those Readline catches (@code{SIGHUP}, for example), Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal. @deftypefun void rl_cleanup_after_signal (void) This function will reset the state of the terminal to what it was before @code{readline()} was called, and remove the Readline signal handlers for all signals, depending on the values of @code{rl_catch_signals} and @code{rl_catch_sigwinch}. @end deftypefun @deftypefun void rl_free_line_state (void) This will free any partial state associated with the current input line (undo information, any partial history entry, any partially-entered keyboard macro, and any partially-entered numeric argument). This should be called before @code{rl_cleanup_after_signal()}. The Readline signal handler for @code{SIGINT} calls this to abort the current input line. @end deftypefun @deftypefun void rl_reset_after_signal (void) This will reinitialize the terminal and reinstall any Readline signal handlers, depending on the values of @code{rl_catch_signals} and @code{rl_catch_sigwinch}. @end deftypefun If an application does not wish Readline to catch @code{SIGWINCH}, it may call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force Readline to update its idea of the terminal size when a @code{SIGWINCH} is received. @deftypefun void rl_echo_signal_char (int sig) If an application wishes to install its own signal handlers, but still have readline display characters that generate signals, calling this function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or @code{SIGTSTP} will display the character generating that signal. @end deftypefun @deftypefun void rl_resize_terminal (void) Update Readline's internal screen size by reading values from the kernel. @end deftypefun @deftypefun void rl_set_screen_size (int rows, int cols) Set Readline's idea of the terminal size to @var{rows} rows and @var{cols} columns. If either @var{rows} or @var{columns} is less than or equal to 0, Readline's idea of that terminal dimension is unchanged. @end deftypefun If an application does not want to install a @code{SIGWINCH} handler, but is still interested in the screen dimensions, Readline's idea of the screen size may be queried. @deftypefun void rl_get_screen_size (int *rows, int *cols) Return Readline's idea of the terminal's size in the variables pointed to by the arguments. @end deftypefun @deftypefun void rl_reset_screen_size (void) Cause Readline to reobtain the screen size and recalculate its dimensions. @end deftypefun The following functions install and remove Readline's signal handlers. @deftypefun int rl_set_signals (void) Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of @code{rl_catch_signals} and @code{rl_catch_sigwinch}. @end deftypefun @deftypefun int rl_clear_signals (void) Remove all of the Readline signal handlers installed by @code{rl_set_signals()}. @end deftypefun @node Custom Completers @section Custom Completers @cindex application-specific completion functions 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. @menu * How Completing Works:: The logic used to do completion. * Completion Functions:: Functions provided by Readline. * Completion Variables:: Variables which control completion. * A Short Completion Example:: An example of writing completer subroutines. @end menu @node How Completing Works @subsection How Completing Works 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: @enumerate @item The user-interface function @code{rl_complete()}. This function is called with the same arguments as other bindable Readline functions: @var{count} and @var{invoking_key}. It isolates the word to be completed and calls @code{rl_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. @item The internal function @code{rl_completion_matches()} uses an application-supplied @dfn{generator} function to generate the list of possible matches, and then returns the array of these matches. The caller should place the address of its generator function in @code{rl_completion_entry_function}. @item The generator function is called repeatedly from @code{rl_completion_matches()}, returning a string each time. The arguments to the generator function are @var{text} and @var{state}. @var{text} is the partial word to be completed. @var{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. The generator function returns @code{(char *)NULL} to inform @code{rl_completion_matches()} that there are no more possibilities left. Usually the generator function computes the list of possible completions when @var{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 @code{malloc()}; Readline frees the strings when it has finished with them. Such a generator function is referred to as an @dfn{application-specific completion function}. @end enumerate @deftypefun 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 @code{rl_completion_matches()}). The default is to do filename completion. @end deftypefun @deftypevar {rl_compentry_func_t *} rl_completion_entry_function This is a pointer to the generator function for @code{rl_completion_matches()}. If the value of @code{rl_completion_entry_function} is @code{NULL} then the default filename generator function, @code{rl_filename_completion_function()}, is used. An @dfn{application-specific completion function} is a function whose address is assigned to @code{rl_completion_entry_function} and whose return values are used to generate possible completions. @end deftypevar @node Completion Functions @subsection Completion Functions Here is the complete list of callable completion functions present in Readline. @deftypefun int rl_complete_internal (int what_to_do) Complete the word at or before point. @var{what_to_do} says what to do with the completion. A value of @samp{?} means list the possible completions. @samp{TAB} means do standard completion. @samp{*} means insert all of the possible completions. @samp{!} means to display all of the possible completions, if there is more than one, as well as performing partial completion. @samp{@@} is similar to @samp{!}, but possible completions are not listed if the possible completions share a common prefix. @end deftypefun @deftypefun 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 @code{rl_completion_matches()} and @code{rl_completion_entry_function}). The default is to do filename completion. This calls @code{rl_complete_internal()} with an argument depending on @var{invoking_key}. @end deftypefun @deftypefun int rl_possible_completions (int count, int invoking_key) List the possible completions. See description of @code{rl_complete ()}. This calls @code{rl_complete_internal()} with an argument of @samp{?}. @end deftypefun @deftypefun 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 @code{rl_complete()}. This calls @code{rl_complete_internal()} with an argument of @samp{*}. @end deftypefun @deftypefun int rl_completion_mode (rl_command_func_t *cfunc) Returns the appropriate value to pass to @code{rl_complete_internal()} depending on whether @var{cfunc} was called twice in succession and the values of the @code{show-all-if-ambiguous} and @code{show-all-if-unmodified} variables. Application-specific completion functions may use this function to present the same interface as @code{rl_complete()}. @end deftypefun @deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) Returns an array of strings which is a list of completions for @var{text}. If there are no completions, returns @code{NULL}. The first entry in the returned array is the substitution for @var{text}. The remaining entries are the possible completions. The array is terminated with a @code{NULL} pointer. @var{entry_func} is a function of two args, and returns a @code{char *}. The first argument is @var{text}. The second is a state argument; it is zero on the first call, and non-zero on subsequent calls. @var{entry_func} returns a @code{NULL} pointer to the caller when there are no more matches. @end deftypefun @deftypefun {char *} rl_filename_completion_function (const char *text, int state) A generator function for filename completion in the general case. @var{text} is a partial filename. The Bash source is a useful reference for writing application-specific completion functions (the Bash completion functions call this and other Readline functions). @end deftypefun @deftypefun {char *} rl_username_completion_function (const char *text, int state) A completion generator for usernames. @var{text} contains a partial username preceded by a random character (usually @samp{~}). As with all completion generators, @var{state} is zero on the first call and non-zero for subsequent calls. @end deftypefun @node Completion Variables @subsection Completion Variables @deftypevar {rl_compentry_func_t *} rl_completion_entry_function A pointer to the generator function for @code{rl_completion_matches()}. @code{NULL} means to use @code{rl_filename_completion_function()}, the default filename completer. @end deftypevar @deftypevar {rl_completion_func_t *} rl_attempted_completion_function A pointer to an alternative function to create matches. The function is called with @var{text}, @var{start}, and @var{end}. @var{start} and @var{end} are indices in @code{rl_line_buffer} defining the boundaries of @var{text}, which is a character string. If this function exists and returns @code{NULL}, or if this variable is set to @code{NULL}, then @code{rl_complete()} will call the value of @code{rl_completion_entry_function} to generate matches, otherwise the array of strings returned will be used. If this function sets the @code{rl_attempted_completion_over} variable to a non-zero value, Readline will not perform its default completion even if this function returns no matches. @end deftypevar @deftypevar {rl_quote_func_t *} 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 @code{rl_filename_quote_characters} appears in a completed filename. The function is called with @var{text}, @var{match_type}, and @var{quote_pointer}. The @var{text} is the filename to be quoted. The @var{match_type} is either @code{SINGLE_MATCH}, if there is only one completion match, or @code{MULT_MATCH}. Some functions use this to decide whether or not to insert a closing quote character. The @var{quote_pointer} is a pointer to any opening quote character the user typed. Some functions choose to reset this character. @end deftypevar @deftypevar {rl_dequote_func_t *} 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 @var{text}, the text of the word to be dequoted, and @var{quote_char}, which is the quoting character that delimits the filename (usually @samp{'} or @samp{"}). If @var{quote_char} is zero, the filename was not in an embedded string. @end deftypevar @deftypevar {rl_linebuf_func_t *} 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: @var{text}, the text of the line, and @var{index}, the index of the character in the line. It is used to decide whether a character found in @code{rl_completer_word_break_characters} should be used to break words for the completer. @end deftypevar @deftypevar {rl_compignore_func_t *} 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 @code{NULL} terminated array of matches. The first element (@code{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. @end deftypevar @deftypevar {rl_icppfunc_t *} rl_directory_completion_hook This function, if defined, is allowed to modify the directory portion of filenames Readline completes. It could be used to expand symbolic links or shell variables in pathnames. It is called with the address of a string (the current directory name) as an argument, and may modify that string. If the string is replaced with a new string, the old value should be freed. Any modified directory name should have a trailing slash. The modified value will be used as part of the completion, replacing the directory portion of the pathname the user typed. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to @code{opendir()}. The directory completion hook returns an integer that should be non-zero if the function modifies its directory argument. The function should not modify the directory argument if it returns 0. @end deftypevar @deftypevar {rl_icppfunc_t *} rl_directory_rewrite_hook; If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike @code{rl_directory_completion_hook}, it only modifies the directory name used in @code{opendir}, not what is displayed when the possible completions are printed or inserted. It is called before rl_directory_completion_hook. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to @code{opendir()}. The directory rewrite hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. @end deftypevar @deftypevar {rl_icppfunc_t *} rl_filename_stat_hook If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. This function modifies its filename name argument, and the modified value is passed to @code{stat()} to determine the file's type and characteristics. This function does not need to remove quote characters from the filename. The stat hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. @end deftypevar @deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. The function takes two arguments: @var{fname}, the filename to be converted, and @var{fnlen}, its length in bytes. It must either return its first argument (if no conversion takes place) or the converted filename in newly-allocated memory. The converted form is used to compare against the word to be completed, and, if it matches, is added to the list of matches. Readline will free the allocated string. @end deftypevar @deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called in lieu of Readline displaying the list. It takes three arguments: (@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length}) where @var{matches} is the array of matching strings, @var{num_matches} is the number of strings in that array, and @var{max_length} is the length of the longest string in that array. Readline provides a convenience function, @code{rl_display_match_list}, that takes care of doing the display to Readline's output stream. That function may be called from this hook. @end deftypevar @deftypevar {const 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: @code{" \t\n\"\\'`@@$><=;|&@{("}. @end deftypevar @deftypevar {const char *} rl_basic_quote_characters A list of quote characters which can cause a word break. @end deftypevar @deftypevar {const char *} rl_completer_word_break_characters The list of characters that signal a break between words for @code{rl_complete_internal()}. The default list is the value of @code{rl_basic_word_break_characters}. @end deftypevar @deftypevar {rl_cpvfunc_t *} rl_completion_word_break_hook If non-zero, this is the address of a function to call when Readline is deciding where to separate words for word completion. It should return a character string like @code{rl_completer_word_break_characters} to be used to perform the current completion. The function may choose to set @code{rl_completer_word_break_characters} itself. If the function returns @code{NULL}, @code{rl_completer_word_break_characters} is used. @end deftypevar @deftypevar {const char *} rl_completer_quote_characters A list of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the substring @code{rl_completer_word_break_characters} are treated as any other character, unless they also appear within this list. @end deftypevar @deftypevar {const 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. @end deftypevar @deftypevar {const char *} rl_special_prefixes The list of characters that are word break characters, but should be left in @var{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. @end deftypevar @deftypevar int rl_completion_query_items Up to this many items will be displayed in response to a possible-completions call. After that, readline asks the user if she is sure she wants to see them all. The default value is 100. A negative value indicates that Readline should never ask the user. @end deftypevar @deftypevar {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 (@samp{ }). Setting this to the null character (@samp{\0}) prevents anything being appended automatically. This can be changed in application-specific completion functions to provide the ``most sensible word separator character'' according to an application-specific command line syntax specification. @end deftypevar @deftypevar int rl_completion_suppress_append If non-zero, @var{rl_completion_append_character} is not appended to matches at the end of the command line, as described above. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. @end deftypevar @deftypevar int rl_completion_quote_character When Readline is completing quoted text, as delimited by one of the characters in @var{rl_completer_quote_characters}, it sets this variable to the quoting character found. This is set before any application-specific completion function is called. @end deftypevar @deftypevar int rl_completion_suppress_quote If non-zero, Readline does not append a matching quote character when performing completion on a quoted string. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. @end deftypevar @deftypevar int rl_completion_found_quote When Readline is completing quoted text, it sets this variable to a non-zero value if the word being completed contains or is delimited by any quoting characters, including backslashes. This is set before any application-specific completion function is called. @end deftypevar @deftypevar int rl_completion_mark_symlink_dirs If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the user-settable @var{mark-directories} variable. This variable exists so that application-specific completion functions can override the user's global preference (set via the @var{mark-symlinked-directories} Readline variable) if appropriate. This variable is set to the user's preference before any application-specific completion function is called, so unless that function modifies the value, the user's preferences are honored. @end deftypevar @deftypevar int rl_ignore_completion_duplicates If non-zero, then duplicates in the matches are removed. The default is 1. @end deftypevar @deftypevar int rl_filename_completion_desired Non-zero means that the results of the matches are to be treated as filenames. This is @emph{always} zero when completion is attempted, and can only be changed within an application-specific completion function. If it is set to a non-zero value by such a function, directory names have a slash appended and Readline attempts to quote completed filenames if they contain any characters in @code{rl_filename_quote_characters} and @code{rl_filename_quoting_desired} is set to a non-zero value. @end deftypevar @deftypevar 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 @code{rl_filename_quote_chars}. This is @emph{always} non-zero when completion is attempted, and can only be changed within an application-specific completion function. The quoting is effected via a call to the function pointed to by @code{rl_filename_quoting_function}. @end deftypevar @deftypevar int rl_attempted_completion_over If an application-specific completion function assigned to @code{rl_attempted_completion_function} sets this variable to a non-zero value, Readline will not perform its default filename completion even if the application's completion function returns no matches. It should be set only by an application's completion function. @end deftypevar @deftypevar int rl_sort_completion_matches If an application sets this variable to 0, Readline will not sort the list of completions (which implies that it cannot remove any duplicate completions). The default value is 1, which means that Readline will sort the completions and, depending on the value of @code{rl_ignore_completion_duplicates}, will attempt to remove duplicate matches. @end deftypevar @deftypevar int rl_completion_type Set to a character describing the type of completion Readline is currently attempting; see the description of @code{rl_complete_internal()} (@pxref{Completion Functions}) for the list of characters. This is set to the appropriate value before any application-specific completion function is called, allowing such functions to present the same interface as @code{rl_complete()}. @end deftypevar @deftypevar int rl_completion_invoking_key Set to the final character in the key sequence that invoked one of the completion functions that call @code{rl_complete_internal()}. This is set to the appropriate value before any application-specific completion function is called. @end deftypevar @deftypevar int rl_inhibit_completion If this variable is non-zero, completion is inhibited. The completion character will be inserted as any other bound to @code{self-insert}. @end deftypevar @node A Short Completion Example @subsection A Short Completion Example Here is a small application demonstrating the use of the GNU Readline library. It is called @code{fileman}, and the source code resides in @file{examples/fileman.c}. This sample application provides completion of command names, line editing features, and access to the history list. @page @smallexample /* 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_SYS_FILE_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #ifdef HAVE_STDLIB_H # include #endif #include #include #include extern char *xmalloc PARAMS((size_t)); /* The names of functions that actually do the manipulation. */ int com_list PARAMS((char *)); int com_view PARAMS((char *)); int com_rename PARAMS((char *)); int com_stat PARAMS((char *)); int com_pwd PARAMS((char *)); int com_delete PARAMS((char *)); int com_help PARAMS((char *)); int com_cd PARAMS((char *)); int com_quit PARAMS((char *)); /* A structure which contains information on the commands this program can understand. */ typedef struct @{ char *name; /* User printable name of the function. */ rl_icpfunc_t *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, (rl_icpfunc_t *)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) char *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 PARAMS((const char *, int)); char **fileman_completion PARAMS((const char *, int, int)); /* 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 = 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) const 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 = rl_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) const 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; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ sprintf (syscom, "less %s", arg); #else sprintf (syscom, "more %s", arg); #endif 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 = getcwd (dir, sizeof(dir) - 1); 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); @} @end smallexample readline-6.3/doc/rluser.texi0000664000043600000240000024023712274460014014734 0ustar chetstaff@comment %**start of header (This is for running Texinfo on a region.) @setfilename rluser.info @comment %**end of header (This is for running Texinfo on a region.) @ignore This file documents the end user interface to the GNU command line editing features. It is to be an appendix to manuals for programs which use these features. There is a document entitled "readline.texinfo" which contains both end-user and programmer documentation for the GNU Readline Library. Copyright (C) 1988--2014 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). 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 also that the GNU Copyright statement is available to the distributee, and 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. @end ignore @comment If you are including this manual as an appendix, then set the @comment variable readline-appendix. @ifclear BashFeatures @defcodeindex bt @end ifclear @node Command Line Editing @chapter Command Line Editing This chapter describes the basic features of the @sc{gnu} command line editing interface. @ifset BashFeatures Command line editing is provided by the Readline library, which is used by several different programs, including Bash. Command line editing is enabled by default when using an interactive shell, unless the @option{--noediting} option is supplied at shell invocation. Line editing is also used when using the @option{-e} option to the @code{read} builtin command (@pxref{Bash Builtins}). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the @option{-o emacs} or @option{-o vi} options to the @code{set} builtin command (@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or @option{+o vi} options to @code{set}. @end ifset @menu * Introduction and Notation:: Notation used in this text. * Readline Interaction:: The minimum set of commands for editing a line. * Readline Init File:: Customizing Readline from a user's view. * Bindable Readline Commands:: A description of most of the Readline commands available for binding * Readline vi Mode:: A short description of how to make Readline behave like the vi editor. @ifset BashFeatures * Programmable Completion:: How to specify the possible completions for a specific command. * Programmable Completion Builtins:: Builtin commands to specify how to complete arguments for a particular command. * A Programmable Completion Example:: An example shell function for generating possible completions. @end ifset @end menu @node Introduction and Notation @section Introduction to Line Editing The following paragraphs describe the notation used to represent keystrokes. The text @kbd{C-k} is read as `Control-K' and describes the character produced when the @key{k} key is pressed while the Control key is depressed. The text @kbd{M-k} is read as `Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the @key{k} key is pressed. The Meta key is labeled @key{ALT} on many keyboards. On keyboards with two keys labeled @key{ALT} (usually to either side of the space bar), the @key{ALT} on the left side is generally set to work as a Meta key. The @key{ALT} key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. If you do not have a Meta or @key{ALT} key, or another key working as a Meta key, the identical keystroke can be generated by typing @key{ESC} @emph{first}, and then typing @key{k}. Either process is known as @dfn{metafying} the @key{k} key. The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the character produced by @dfn{metafying} @kbd{C-k}. In addition, several keys have their own names. Specifically, @key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all stand for themselves when seen in this text, or in an init file (@pxref{Readline Init File}). If your keyboard lacks a @key{LFD} key, typing @key{C-j} will produce the desired character. The @key{RET} key may be labeled @key{Return} or @key{Enter} on some keyboards. @node Readline Interaction @section Readline Interaction @cindex interaction, readline 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 @key{RET}. You do not have to be at the end of the line to press @key{RET}; the entire line is accepted regardless of the location of the cursor within the line. @menu * Readline Bare Essentials:: The least you need to know about Readline. * Readline Movement Commands:: Moving about the input line. * Readline Killing Commands:: How to delete text, and how to get it back! * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines. @end menu @node Readline Bare Essentials @subsection Readline Bare Essentials @cindex notation, readline @cindex command editing @cindex editing command lines In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type @kbd{C-b} to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with @kbd{C-f}. When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. @table @asis @item @kbd{C-b} Move back one character. @item @kbd{C-f} Move forward one character. @item @key{DEL} or @key{Backspace} Delete the character to the left of the cursor. @item @kbd{C-d} Delete the character underneath the cursor. @item @w{Printing characters} Insert the character into the line at the cursor. @item @kbd{C-_} or @kbd{C-x C-u} Undo the last editing command. You can undo all the way back to an empty line. @end table @noindent (Depending on your configuration, the @key{Backspace} key be set to delete the character to the left of the cursor and the @key{DEL} key set to delete the character underneath the cursor, like @kbd{C-d}, rather than the character to the left of the cursor.) @node Readline Movement Commands @subsection Readline Movement Commands The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to @kbd{C-b}, @kbd{C-f}, @kbd{C-d}, and @key{DEL}. Here are some commands for moving more rapidly about the line. @table @kbd @item C-a Move to the start of the line. @item C-e Move to the end of the line. @item M-f Move forward a word, where a word is composed of letters and digits. @item M-b Move backward a word. @item C-l Clear the screen, reprinting the current line at the top. @end table Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words. @node Readline Killing Commands @subsection Readline Killing Commands @cindex killing text @cindex yanking text @dfn{Killing} text means to delete the text from the line, but to save it away for later use, usually by @dfn{yanking} (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.) If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later. When you use a kill command, the text is saved in a @dfn{kill-ring}. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. @cindex kill ring Here is the list of commands for killing text. @table @kbd @item C-k Kill the text from the current cursor position to the end of the line. @item 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 those used by @kbd{M-f}. @item M-@key{DEL} Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by @kbd{M-b}. @item C-w Kill from the cursor to the previous whitespace. This is different than @kbd{M-@key{DEL}} because the word boundaries differ. @end table Here is how to @dfn{yank} the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. @table @kbd @item C-y Yank the most recently killed text back into the buffer at the cursor. @item M-y Rotate the kill-ring, and yank the new top. You can only do this if the prior command is @kbd{C-y} or @kbd{M-y}. @end table @node Readline Arguments @subsection Readline Arguments You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the @i{sign} of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type @samp{M-- C-k}. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (@samp{-}), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}, which will delete the next ten characters on the input line. @node Searching @subsection Searching for Commands in the History Readline provides commands for searching through the command history @ifset BashFeatures (@pxref{Bash History Facilities}) @end ifset for lines containing a specified string. There are two search modes: @dfn{incremental} and @dfn{non-incremental}. Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type @kbd{C-r}. Typing @kbd{C-s} searches forward through the history. The characters present in the value of the @code{isearch-terminators} variable are used to terminate an incremental search. If that variable has not been assigned a value, the @key{ESC} and @kbd{C-J} characters will terminate an incremental search. @kbd{C-g} will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type @kbd{C-r} or @kbd{C-s} as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a @key{RET} will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Readline remembers the last incremental search string. If two @kbd{C-r}s are typed without any intervening characters defining a new search string, any remembered search string is used. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. @node Readline Init File @section Readline Init File @cindex initialization file, readline Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an @dfn{inputrc} file, conventionally in his home directory. The name of this @ifset BashFeatures file is taken from the value of the shell variable @env{INPUTRC}. If @end ifset @ifclear BashFeatures file is taken from the value of the environment variable @env{INPUTRC}. If @end ifclear that variable is unset, the default is @file{~/.inputrc}. If that file does not exist or cannot be read, the ultimate default is @file{/etc/inputrc}. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. In addition, the @code{C-x C-r} command re-reads this init file, thus incorporating any changes that you might have made to it. @menu * Readline Init File Syntax:: Syntax for the commands in the inputrc file. * Conditional Init Constructs:: Conditional key bindings in the inputrc file. * Sample Init File:: An example inputrc file. @end menu @node Readline Init File Syntax @subsection Readline Init File Syntax There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. Lines beginning with a @samp{#} are comments. Lines beginning with a @samp{$} indicate conditional constructs (@pxref{Conditional Init Constructs}). Other lines denote variable settings and key bindings. @table @asis @item Variable Settings You can modify the run-time behavior of Readline by altering the values of variables in Readline using the @code{set} command within the init file. The syntax is simple: @example set @var{variable} @var{value} @end example @noindent Here, for example, is how to change from the default Emacs-like key binding to use @code{vi} line editing commands: @example set editing-mode vi @end example Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, @var{on} (case-insensitive), or 1. Any other value results in the variable being set to off. @ifset BashFeatures The @w{@code{bind -V}} command lists the current Readline variable names and values. @xref{Bash Builtins}. @end ifset A great deal of run-time behavior is changeable with the following variables. @cindex variables, readline @table @code @item bell-style @vindex bell-style Controls what happens when Readline wants to ring the terminal bell. If set to @samp{none}, Readline never rings the bell. If set to @samp{visible}, Readline uses a visible bell if one is available. If set to @samp{audible} (the default), Readline attempts to ring the terminal's bell. @item bind-tty-special-chars @vindex bind-tty-special-chars If set to @samp{on}, Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents. @item colored-stats @vindex colored-stats If set to @samp{on}, Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the @env{LS_COLORS} environment variable. The default is @samp{off}. @item comment-begin @vindex comment-begin The string to insert at the beginning of the line when the @code{insert-comment} command is executed. The default value is @code{"#"}. @item completion-display-width @vindex completion-display-width The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. @item completion-ignore-case @vindex completion-ignore-case If set to @samp{on}, Readline performs filename matching and completion in a case-insensitive fashion. The default value is @samp{off}. @item completion-map-case @vindex completion-map-case If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when performing case-insensitive filename matching and completion. @item completion-prefix-display-length @vindex completion-prefix-display-length The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. @item completion-query-items @vindex completion-query-items The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. 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. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. The default limit is @code{100}. @item convert-meta @vindex convert-meta If set to @samp{on}, Readline will convert characters with the eighth bit set to an @sc{ascii} key sequence by stripping the eighth bit and prefixing an @key{ESC} character, converting them to a meta-prefixed key sequence. The default value is @samp{on}. @item disable-completion @vindex disable-completion If set to @samp{On}, Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to @code{self-insert}. The default is @samp{off}. @item editing-mode @vindex editing-mode The @code{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 @samp{emacs} or @samp{vi}. @item echo-control-characters When set to @samp{on}, on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is @samp{on}. @item enable-keypad @vindex enable-keypad When set to @samp{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 @samp{off}. @item enable-meta-key When set to @samp{on}, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is @samp{on}. @item expand-tilde @vindex expand-tilde If set to @samp{on}, tilde expansion is performed when Readline attempts word completion. The default is @samp{off}. @item history-preserve-point @vindex history-preserve-point If set to @samp{on}, the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with @code{previous-history} or @code{next-history}. The default is @samp{off}. @item history-size @vindex history-size Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. @item horizontal-scroll-mode @vindex horizontal-scroll-mode This variable can be set to either @samp{on} or @samp{off}. Setting it to @samp{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 @samp{off}. @item input-meta @vindex input-meta @vindex meta-flag If set to @samp{on}, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The default value is @samp{off}. The name @code{meta-flag} is a synonym for this variable. @item isearch-terminators @vindex isearch-terminators The string of characters that should terminate an incremental search without subsequently executing the character as a command (@pxref{Searching}). If this variable has not been given a value, the characters @key{ESC} and @kbd{C-J} will terminate an incremental search. @item keymap @vindex keymap Sets Readline's idea of the current keymap for key binding commands. Acceptable @code{keymap} names are @code{emacs}, @code{emacs-standard}, @code{emacs-meta}, @code{emacs-ctlx}, @code{vi}, @code{vi-move}, @code{vi-command}, and @code{vi-insert}. @code{vi} is equivalent to @code{vi-command}; @code{emacs} is equivalent to @code{emacs-standard}. The default value is @code{emacs}. The value of the @code{editing-mode} variable also affects the default keymap. @item keyseq-timeout Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (@code{rl_instream} by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is @code{500}. @item mark-directories If set to @samp{on}, completed directory names have a slash appended. The default is @samp{on}. @item mark-modified-lines @vindex mark-modified-lines This variable, when set to @samp{on}, causes Readline to display an asterisk (@samp{*}) at the start of history lines which have been modified. This variable is @samp{off} by default. @item mark-symlinked-directories @vindex mark-symlinked-directories If set to @samp{on}, completed names which are symbolic links to directories have a slash appended (subject to the value of @code{mark-directories}). The default is @samp{off}. @item match-hidden-files @vindex match-hidden-files This variable, when set to @samp{on}, causes Readline to match files whose names begin with a @samp{.} (hidden files) when performing filename completion. If set to @samp{off}, the leading @samp{.} must be supplied by the user in the filename to be completed. This variable is @samp{on} by default. @item menu-complete-display-prefix @vindex menu-complete-display-prefix If set to @samp{on}, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is @samp{off}. @item output-meta @vindex output-meta If set to @samp{on}, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is @samp{off}. @item page-completions @vindex page-completions If set to @samp{on}, Readline uses an internal @code{more}-like pager to display a screenful of possible completions at a time. This variable is @samp{on} by default. @item print-completions-horizontally If set to @samp{on}, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is @samp{off}. @item revert-all-at-newline @vindex revert-all-at-newline If set to @samp{on}, Readline will undo all changes to history lines before returning when @code{accept-line} is executed. By default, history lines may be modified and retain individual undo lists across calls to @code{readline}. The default is @samp{off}. @item show-all-if-ambiguous @vindex show-all-if-ambiguous This alters the default behavior of the completion functions. If set to @samp{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 @samp{off}. @item show-all-if-unmodified @vindex show-all-if-unmodified This alters the default behavior of the completion functions in a fashion similar to @var{show-all-if-ambiguous}. If set to @samp{on}, words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is @samp{off}. @item show-mode-in-prompt @vindex show-mode-in-prompt If set to @samp{on}, add a character to the beginning of the prompt indicating the editing mode: emacs (@samp{@@}), vi command (@samp{:}), or vi insertion (@samp{+}). The default value is @samp{off}. @item skip-completed-text @vindex skip-completed-text If set to @samp{on}, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile} rather than @samp{Makefilefile}, assuming there is a single possible completion. The default value is @samp{off}. @item visible-stats @vindex visible-stats If set to @samp{on}, a character denoting a file's type is appended to the filename when listing possible completions. The default is @samp{off}. @end table @item Key Bindings The syntax for controlling key bindings in the init file is simple. First you need to find 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 on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon -- that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a @var{macro}). @ifset BashFeatures The @w{@code{bind -p}} command displays Readline function names and bindings in a format that can put directly into an initialization file. @xref{Bash Builtins}. @end ifset @table @asis @item @w{@var{keyname}: @var{function-name} or @var{macro}} @var{keyname} is the name of a key spelled out in English. For example: @example Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" @end example In the above example, @kbd{C-u} is bound to the function @code{universal-argument}, @kbd{M-DEL} is bound to the function @code{backward-kill-word}, and @kbd{C-o} is bound to run the macro expressed on the right hand side (that is, to insert the text @samp{> output} into the line). A number of symbolic character names are recognized while processing this key binding syntax: @var{DEL}, @var{ESC}, @var{ESCAPE}, @var{LFD}, @var{NEWLINE}, @var{RET}, @var{RETURN}, @var{RUBOUT}, @var{SPACE}, @var{SPC}, and @var{TAB}. @item @w{"@var{keyseq}": @var{function-name} or @var{macro}} @var{keyseq} differs from @var{keyname} above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some @sc{gnu} Emacs style key escapes can be used, as in the following example, but the special character names are not recognized. @example "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" @end example In the above example, @kbd{C-u} is again bound to the function @code{universal-argument} (just as it was in the first example), @samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file}, and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert the text @samp{Function Key 1}. @end table The following @sc{gnu} Emacs style escape sequences are available when specifying key sequences: @table @code @item @kbd{\C-} control prefix @item @kbd{\M-} meta prefix @item @kbd{\e} an escape character @item @kbd{\\} backslash @item @kbd{\"} @key{"}, a double quotation mark @item @kbd{\'} @key{'}, a single quote or apostrophe @end table In addition to the @sc{gnu} Emacs style escape sequences, a second set of backslash escapes is available: @table @code @item \a alert (bell) @item \b backspace @item \d delete @item \f form feed @item \n newline @item \r carriage return @item \t horizontal tab @item \v vertical tab @item \@var{nnn} the eight-bit character whose value is the octal value @var{nnn} (one to three digits) @item \x@var{HH} the eight-bit character whose value is the hexadecimal value @var{HH} (one or two hex digits) @end table 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 @samp{"} and @samp{'}. For example, the following binding will make @samp{@kbd{C-x} \} insert a single @samp{\} into the line: @example "\C-x\\": "\\" @end example @end table @node Conditional Init Constructs @subsection Conditional Init Constructs 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. @table @code @item $if The @code{$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. @table @code @item mode The @code{mode=} form of the @code{$if} directive is used to test whether Readline is in @code{emacs} or @code{vi} mode. This may be used in conjunction with the @samp{set keymap} command, for instance, to set bindings in the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if Readline is starting out in @code{emacs} mode. @item term The @code{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 @samp{=} is tested against both the full name of the terminal and the portion of the terminal name before the first @samp{-}. This allows @code{sun} to match both @code{sun} and @code{sun-cmd}, for instance. @item application The @var{application} construct is used to include application-specific settings. Each program using the Readline library sets the @var{application name}, and you can test for a particular value. 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: @example $if Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $endif @end example @end table @item $endif This command, as seen in the previous example, terminates an @code{$if} command. @item $else Commands in this branch of the @code{$if} directive are executed if the test fails. @item $include This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from @file{/etc/inputrc}: @example $include /etc/inputrc @end example @end table @node Sample Init File @subsection Sample Init File Here is an example of an @var{inputrc} file. This illustrates key binding, variable assignment, and conditional syntax. @example @page # 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 system-wide 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 @end example @node Bindable Readline Commands @section Bindable Readline Commands @menu * Commands For Moving:: Moving about the line. * Commands For History:: Getting at previous lines. * Commands For Text:: Commands for changing text. * Commands For Killing:: Commands for killing and yanking. * Numeric Arguments:: Specifying numeric arguments, repeat counts. * Commands For Completion:: Getting Readline to do the typing for you. * Keyboard Macros:: Saving and re-executing typed characters * Miscellaneous Commands:: Other miscellaneous commands. @end menu This section describes Readline commands that may be bound to key sequences. @ifset BashFeatures You can list your key bindings by executing @w{@code{bind -P}} or, for a more terse format, suitable for an @var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.) @end ifset Command names without an accompanying key sequence are unbound by default. In the following descriptions, @dfn{point} refers to the current cursor position, and @dfn{mark} refers to a cursor position saved by the @code{set-mark} command. The text between the point and mark is referred to as the @dfn{region}. @node Commands For Moving @subsection Commands For Moving @ftable @code @item beginning-of-line (C-a) Move to the start of the current line. @item end-of-line (C-e) Move to the end of the line. @item forward-char (C-f) Move forward a character. @item backward-char (C-b) Move back a character. @item forward-word (M-f) Move forward to the end of the next word. Words are composed of letters and digits. @item backward-word (M-b) Move back to the start of the current or previous word. Words are composed of letters and digits. @ifset BashFeatures @item shell-forward-word () Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. @item shell-backward-word () Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. @end ifset @item clear-screen (C-l) Clear the screen and redraw the current line, leaving the current line at the top of the screen. @item redraw-current-line () Refresh the current line. By default, this is unbound. @end ftable @node Commands For History @subsection Commands For Manipulating The History @ftable @code @item accept-line (Newline or Return) @ifset BashFeatures Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the setting of the @env{HISTCONTROL} and @env{HISTIGNORE} variables. If this line is a modified history line, then restore the history line to its original state. @end ifset @ifclear BashFeatures Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with @code{add_history()}. If this line is a modified history line, the history line is restored to its original state. @end ifclear @item previous-history (C-p) Move `back' through the history list, fetching the previous command. @item next-history (C-n) Move `forward' through the history list, fetching the next command. @item beginning-of-history (M-<) Move to the first line in the history. @item end-of-history (M->) Move to the end of the input history, i.e., the line currently being entered. @item 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. @item 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. @item 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. @item 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. @item history-search-forward () Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. @item history-search-backward () Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. @item history-substr-search-forward () Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. @item history-substr-search-backward () Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. @item yank-nth-arg (M-C-y) Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument @var{n}, insert the @var{n}th word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the @var{n}th word from the end of the previous command. Once the argument @var{n} is computed, the argument is extracted as if the @samp{!@var{n}} history expansion had been specified. @item yank-last-arg (M-. or M-_) Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like @code{yank-nth-arg}. Successive calls to @code{yank-last-arg} move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the @samp{!$} history expansion had been specified. @end ftable @node Commands For Text @subsection Commands For Changing Text @ftable @code @item @i{end-of-file} (usually C-d) The character indicating end-of-file as set, for example, by @code{stty}. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns @sc{eof}. @item delete-char (C-d) Delete the character at point. If this function is bound to the same character as the tty @sc{eof} character, as @kbd{C-d} commonly is, see above for the effects. @item backward-delete-char (Rubout) Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. @item forward-backward-delete-char () Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. @item quoted-insert (C-q or C-v) Add the next character typed to the line verbatim. This is how to insert key sequences like @kbd{C-q}, for example. @ifclear BashFeatures @item tab-insert (M-@key{TAB}) Insert a tab character. @end ifclear @item self-insert (a, b, A, 1, !, @dots{}) Insert yourself. @item 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 have no effect. @item transpose-words (M-t) Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. @item upcase-word (M-u) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. @item downcase-word (M-l) Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. @item capitalize-word (M-c) Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. @item overwrite-mode () Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only @code{emacs} mode; @code{vi} mode does overwrite differently. Each call to @code{readline()} starts in insert mode. In overwrite mode, characters bound to @code{self-insert} replace the text at point rather than pushing the text to the right. Characters bound to @code{backward-delete-char} replace the character before point with a space. By default, this command is unbound. @end ftable @node Commands For Killing @subsection Killing And Yanking @ftable @code @item kill-line (C-k) Kill the text from point to the end of the line. @item backward-kill-line (C-x Rubout) Kill backward to the beginning of the line. @item unix-line-discard (C-u) Kill backward from the cursor to the beginning of the current line. @item kill-whole-line () Kill all characters on the current line, no matter where point is. By default, this is unbound. @item kill-word (M-d) Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as @code{forward-word}. @item backward-kill-word (M-@key{DEL}) Kill the word behind point. Word boundaries are the same as @code{backward-word}. @ifset BashFeatures @item shell-kill-word () Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as @code{shell-forward-word}. @item shell-backward-kill-word () Kill the word behind point. Word boundaries are the same as @code{shell-backward-word}. @end ifset @item unix-word-rubout (C-w) Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. @item unix-filename-rubout () Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. @item delete-horizontal-space () Delete all spaces and tabs around point. By default, this is unbound. @item kill-region () Kill the text in the current region. By default, this command is unbound. @item 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. @item copy-backward-word () Copy the word before point to the kill buffer. The word boundaries are the same as @code{backward-word}. By default, this command is unbound. @item copy-forward-word () Copy the word following point to the kill buffer. The word boundaries are the same as @code{forward-word}. By default, this command is unbound. @item yank (C-y) Yank the top of the kill ring into the buffer at point. @item yank-pop (M-y) Rotate the kill-ring, and yank the new top. You can only do this if the prior command is @code{yank} or @code{yank-pop}. @end ftable @node Numeric Arguments @subsection Specifying Numeric Arguments @ftable @code @item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--}) Add this digit to the argument already accumulating, or start a new argument. @kbd{M--} starts a negative argument. @item 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 @code{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. @end ftable @node Commands For Completion @subsection Letting Readline Type For You @ftable @code @item complete (@key{TAB}) Attempt to perform completion on the text before point. The actual completion performed is application-specific. @ifset BashFeatures Bash attempts completion treating the text as a variable (if the text begins with @samp{$}), username (if the text begins with @samp{~}), hostname (if the text begins with @samp{@@}), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. @end ifset @ifclear BashFeatures The default is filename completion. @end ifclear @item possible-completions (M-?) List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of @code{completion-display-width}, the value of the environment variable @env{COLUMNS}, or the screen width, in that order. @item insert-completions (M-*) Insert all completions of the text before point that would have been generated by @code{possible-completions}. @item menu-complete () Similar to @code{complete}, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of @code{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 (subject to the setting of @code{bell-style}) and the original text is restored. An argument of @var{n} moves @var{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 @key{TAB}, but is unbound by default. @item menu-complete-backward () Identical to @code{menu-complete}, but moves backward through the list of possible completions, as if @code{menu-complete} had been given a negative argument. @item delete-char-or-list () Deletes the character under the cursor if not at the beginning or end of the line (like @code{delete-char}). If at the end of the line, behaves identically to @code{possible-completions}. This command is unbound by default. @ifset BashFeatures @item complete-filename (M-/) Attempt filename completion on the text before point. @item possible-filename-completions (C-x /) List the possible completions of the text before point, treating it as a filename. @item complete-username (M-~) Attempt completion on the text before point, treating it as a username. @item possible-username-completions (C-x ~) List the possible completions of the text before point, treating it as a username. @item complete-variable (M-$) Attempt completion on the text before point, treating it as a shell variable. @item possible-variable-completions (C-x $) List the possible completions of the text before point, treating it as a shell variable. @item complete-hostname (M-@@) Attempt completion on the text before point, treating it as a hostname. @item possible-hostname-completions (C-x @@) List the possible completions of the text before point, treating it as a hostname. @item complete-command (M-!) Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell functions, shell builtins, and finally executable filenames, in that order. @item possible-command-completions (C-x !) List the possible completions of the text before point, treating it as a command name. @item dynamic-complete-history (M-@key{TAB}) Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches. @item dabbrev-expand () Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. @item complete-into-braces (M-@{) Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (@pxref{Brace Expansion}). @end ifset @end ftable @node Keyboard Macros @subsection Keyboard Macros @ftable @code @item start-kbd-macro (C-x () Begin saving the characters typed into the current keyboard macro. @item end-kbd-macro (C-x )) Stop saving the characters typed into the current keyboard macro and save the definition. @item 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. @item print-last-kbd-macro () Print the last keboard macro defined in a format suitable for the @var{inputrc} file. @end ftable @node Miscellaneous Commands @subsection Some Miscellaneous Commands @ftable @code @item re-read-init-file (C-x C-r) Read in the contents of the @var{inputrc} file, and incorporate any bindings or variable assignments found there. @item abort (C-g) Abort the current editing command and ring the terminal's bell (subject to the setting of @code{bell-style}). @item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{}) If the metafied character @var{x} is lowercase, run the command that is bound to the corresponding uppercase character. @item prefix-meta (@key{ESC}) Metafy the next character typed. This is for keyboards without a meta key. Typing @samp{@key{ESC} f} is equivalent to typing @kbd{M-f}. @item undo (C-_ or C-x C-u) Incremental undo, separately remembered for each line. @item revert-line (M-r) Undo all changes made to this line. This is like executing the @code{undo} command enough times to get back to the beginning. @ifset BashFeatures @item tilde-expand (M-&) @end ifset @ifclear BashFeatures @item tilde-expand (M-~) @end ifclear Perform tilde expansion on the current word. @item set-mark (C-@@) Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. @item 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. @item 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. @item 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. @item skip-csi-sequence () Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. @item insert-comment (M-#) Without a numeric argument, the value of the @code{comment-begin} variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of @code{comment-begin}, the value is inserted, otherwise the characters in @code{comment-begin} are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. @ifset BashFeatures The default value of @code{comment-begin} causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. @end ifset @item 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 @var{inputrc} file. This command is unbound by default. @item 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 @var{inputrc} file. This command is unbound by default. @item dump-macros () Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an @var{inputrc} file. This command is unbound by default. @ifset BashFeatures @item glob-complete-word (M-g) The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching file names for possible completions. @item glob-expand-word (C-x *) The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, replacing the word. If a numeric argument is supplied, a @samp{*} is appended before pathname expansion. @item glob-list-expansions (C-x g) The list of expansions that would have been generated by @code{glob-expand-word} is displayed, and the line is redrawn. If a numeric argument is supplied, a @samp{*} is appended before pathname expansion. @item display-shell-version (C-x C-v) Display version information about the current instance of Bash. @item shell-expand-line (M-C-e) Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions (@pxref{Shell Expansions}). @item history-expand-line (M-^) Perform history expansion on the current line. @item magic-space () Perform history expansion on the current line and insert a space (@pxref{History Interaction}). @item alias-expand-line () Perform alias expansion on the current line (@pxref{Aliases}). @item history-and-alias-expand-line () Perform history and alias expansion on the current line. @item insert-last-argument (M-. or M-_) A synonym for @code{yank-last-arg}. @item operate-and-get-next (C-o) Accept the current line for execution and fetch the next line relative to the current line from the history for editing. Any argument is ignored. @item edit-and-execute-command (C-xC-e) Invoke an editor on the current command line, and execute the result as shell commands. Bash attempts to invoke @code{$VISUAL}, @code{$EDITOR}, and @code{emacs} as the editor, in that order. @end ifset @ifclear BashFeatures @item emacs-editing-mode (C-e) When in @code{vi} command mode, this causes a switch to @code{emacs} editing mode. @item vi-editing-mode (M-C-j) When in @code{emacs} editing mode, this causes a switch to @code{vi} editing mode. @end ifclear @end ftable @node Readline vi Mode @section Readline vi Mode While the Readline library does not have a full set of @code{vi} editing functions, it does contain enough to allow simple editing of the line. The Readline @code{vi} mode behaves as specified in the @sc{posix} standard. @ifset BashFeatures In order to switch interactively between @code{emacs} and @code{vi} editing modes, use the @samp{set -o emacs} and @samp{set -o vi} commands (@pxref{The Set Builtin}). @end ifset @ifclear BashFeatures In order to switch interactively between @code{emacs} and @code{vi} editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode). @end ifclear The Readline default is @code{emacs} mode. When you enter a line in @code{vi} mode, you are already placed in `insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC} switches you into `command' mode, where you can edit the text of the line with the standard @code{vi} movement keys, move to previous history lines with @samp{k} and subsequent lines with @samp{j}, and so forth. @ifset BashFeatures @node Programmable Completion @section Programmable Completion @cindex programmable completion When word completion is attempted for an argument to a command for which a completion specification (a @var{compspec}) has been defined using the @code{complete} builtin (@pxref{Programmable Completion Builtins}), the programmable completion facilities are invoked. First, the command name is identified. If a compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is the empty string (completion attempted at the beginning of an empty line), any compspec defined with the @option{-E} option to @code{complete} is used. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt is made to find a compspec for the portion following the final slash. If those searches do not result in a compspec, any compspec defined with the @option{-D} option to @code{complete} is used as the default. Once a compspec has been found, it is used to generate the list of matching words. If a compspec is not found, the default Bash completion described above (@pxref{Commands For Completion}) is performed. First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are returned. When the @option{-f} or @option{-d} option is used for filename or directory name completion, the shell variable @env{FIGNORE} is used to filter the matches. @xref{Bash Variables}, for a description of @env{FIGNORE}. Any completions specified by a filename expansion pattern to the @option{-G} option are generated next. The words generated by the pattern need not match the word being completed. The @env{GLOBIGNORE} shell variable is not used to filter the matches, but the @env{FIGNORE} shell variable is used. Next, the string specified as the argument to the @option{-W} option is considered. The string is first split using the characters in the @env{IFS} special variable as delimiters. Shell quoting is honored. Each word is then expanded using brace expansion, tilde expansion, parameter and variable expansion, command substitution, and arithmetic expansion, as described above (@pxref{Shell Expansions}). The results are split using the rules described above (@pxref{Word Splitting}). The results of the expansion are prefix-matched against the word being completed, and the matching words become the possible completions. After these matches have been generated, any shell function or command specified with the @option{-F} and @option{-C} options is invoked. When the command or function is invoked, the @env{COMP_LINE}, @env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are assigned values as described above (@pxref{Bash Variables}). If a shell function is being invoked, the @env{COMP_WORDS} and @env{COMP_CWORD} variables are also set. When the function or command is invoked, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument ($3) is the word preceding the word being completed on the current command line. No filtering of the generated completions against the word being completed is performed; the function or command has complete freedom in generating the matches. Any function specified with @option{-F} is invoked first. The function may use any of the shell facilities, including the @code{compgen} and @code{compopt} builtins described below (@pxref{Programmable Completion Builtins}), to generate the matches. It must put the possible completions in the @env{COMPREPLY} array variable, one per array element. Next, any command specified with the @option{-C} option is invoked in an environment equivalent to command substitution. It should print a list of completions, one per line, to the standard output. Backslash may be used to escape a newline, if necessary. After all of the possible completions are generated, any filter specified with the @option{-X} option is applied to the list. The filter is a pattern as used for pathname expansion; a @samp{&} in the pattern is replaced with the text of the word being completed. A literal @samp{&} may be escaped with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. A leading @samp{!} negates the pattern; in this case any completion not matching the pattern will be removed. Finally, any prefix and suffix specified with the @option{-P} and @option{-S} options are added to each member of the completion list, and the result is returned to the Readline completion code as the list of possible completions. If the previously-applied actions do not generate any matches, and the @option{-o dirnames} option was supplied to @code{complete} when the compspec was defined, directory name completion is attempted. If the @option{-o plusdirs} option was supplied to @code{complete} when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions. By default, if a compspec is found, whatever it generates is returned to the completion code as the full set of possible completions. The default Bash completions are not attempted, and the Readline default of filename completion is disabled. If the @option{-o bashdefault} option was supplied to @code{complete} when the compspec was defined, the default Bash completions are attempted if the compspec generates no matches. If the @option{-o default} option was supplied to @code{complete} when the compspec was defined, Readline's default completion will be performed if the compspec (and, if attempted, the default Bash completions) generate no matches. When a compspec indicates that directory name completion is desired, the programmable completion functions force Readline to append a slash to completed names which are symbolic links to directories, subject to the value of the @var{mark-directories} Readline variable, regardless of the setting of the @var{mark-symlinked-directories} Readline variable. There is some support for dynamically modifying completions. This is most useful when used in combination with a default completion specified with @option{-D}. It's possible for shell functions executed as completion handlers to indicate that completion should be retried by returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being attempted (supplied as the first argument when the function is executed), programmable completion restarts from the beginning, with an attempt to find a new compspec for that command. This allows a set of completions to be built dynamically as completion is attempted, rather than being loaded all at once. For instance, assuming that there is a library of compspecs, each kept in a file corresponding to the name of the command, the following default completion function would load completions dynamically: @example _completion_loader() @{ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 @} complete -D -F _completion_loader -o bashdefault -o default @end example @node Programmable Completion Builtins @section Programmable Completion Builtins @cindex completion builtins Three builtin commands are available to manipulate the programmable completion facilities: one to specify how the arguments to a particular command are to be completed, and two to modify the completion as it is happening. @table @code @item compgen @btindex compgen @example @code{compgen [@var{option}] [@var{word}]} @end example Generate possible completion matches for @var{word} according to the @var{option}s, which may be any option accepted by the @code{complete} builtin with the exception of @option{-p} and @option{-r}, and write the matches to the standard output. When using the @option{-F} or @option{-C} options, the various shell variables set by the programmable completion facilities, while available, will not have useful values. The matches will be generated in the same way as if the programmable completion code had generated them directly from a completion specification with the same flags. If @var{word} is specified, only those completions matching @var{word} will be displayed. The return value is true unless an invalid option is supplied, or no matches were generated. @item complete @btindex complete @example @code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DE] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}] [-F @var{function}] [-C @var{command}] [-X @var{filterpat}] [-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]} @code{complete -pr [-DE] [@var{name} @dots{}]} @end example Specify how arguments to each @var{name} should be completed. If the @option{-p} option is supplied, or if no options are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The @option{-r} option removes a completion specification for each @var{name}, or, if no @var{name}s are supplied, all completion specifications. The @option{-D} option indicates that the remaining options and actions should apply to the ``default'' command completion; that is, completion attempted on a command for which no completion has previously been defined. The @option{-E} option indicates that the remaining options and actions should apply to ``empty'' command completion; that is, completion attempted on a blank line. The process of applying these completion specifications when word completion is attempted is described above (@pxref{Programmable Completion}). The @option{-D} option takes precedence over @option{-E}. Other options, if specified, have the following meanings. The arguments to the @option{-G}, @option{-W}, and @option{-X} options (and, if necessary, the @option{-P} and @option{-S} options) should be quoted to protect them from expansion before the @code{complete} builtin is invoked. @table @code @item -o @var{comp-option} The @var{comp-option} controls several aspects of the compspec's behavior beyond the simple generation of completions. @var{comp-option} may be one of: @table @code @item bashdefault Perform the rest of the default Bash completions if the compspec generates no matches. @item default Use Readline's default filename completion if the compspec generates no matches. @item dirnames Perform directory name completion if the compspec generates no matches. @item filenames Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names quoting special characters, or suppressing trailing spaces). This option is intended to be used with shell functions specified with @option{-F}. @item noquote Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default). @item nospace Tell Readline not to append a space (the default) to words completed at the end of the line. @item plusdirs After any matches defined by the compspec are generated, directory name completion is attempted and any matches are added to the results of the other actions. @end table @item -A @var{action} The @var{action} may be one of the following to generate a list of possible completions: @table @code @item alias Alias names. May also be specified as @option{-a}. @item arrayvar Array variable names. @item binding Readline key binding names (@pxref{Bindable Readline Commands}). @item builtin Names of shell builtin commands. May also be specified as @option{-b}. @item command Command names. May also be specified as @option{-c}. @item directory Directory names. May also be specified as @option{-d}. @item disabled Names of disabled shell builtins. @item enabled Names of enabled shell builtins. @item export Names of exported shell variables. May also be specified as @option{-e}. @item file File names. May also be specified as @option{-f}. @item function Names of shell functions. @item group Group names. May also be specified as @option{-g}. @item helptopic Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}). @item hostname Hostnames, as taken from the file specified by the @env{HOSTFILE} shell variable (@pxref{Bash Variables}). @item job Job names, if job control is active. May also be specified as @option{-j}. @item keyword Shell reserved words. May also be specified as @option{-k}. @item running Names of running jobs, if job control is active. @item service Service names. May also be specified as @option{-s}. @item setopt Valid arguments for the @option{-o} option to the @code{set} builtin (@pxref{The Set Builtin}). @item shopt Shell option names as accepted by the @code{shopt} builtin (@pxref{Bash Builtins}). @item signal Signal names. @item stopped Names of stopped jobs, if job control is active. @item user User names. May also be specified as @option{-u}. @item variable Names of all shell variables. May also be specified as @option{-v}. @end table @item -C @var{command} @var{command} is executed in a subshell environment, and its output is used as the possible completions. @item -F @var{function} The shell function @var{function} is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are being completed, $2 is the word being completed, and $3 is the word preceding the word being completed, as described above (@pxref{Programmable Completion}). When it finishes, the possible completions are retrieved from the value of the @env{COMPREPLY} array variable. @item -G @var{globpat} The filename expansion pattern @var{globpat} is expanded to generate the possible completions. @item -P @var{prefix} @var{prefix} is added at the beginning of each possible completion after all other options have been applied. @item -S @var{suffix} @var{suffix} is appended to each possible completion after all other options have been applied. @item -W @var{wordlist} The @var{wordlist} is split using the characters in the @env{IFS} special variable as delimiters, and each resultant word is expanded. The possible completions are the members of the resultant list which match the word being completed. @item -X @var{filterpat} @var{filterpat} is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching @var{filterpat} is removed from the list. A leading @samp{!} in @var{filterpat} negates the pattern; in this case, any completion not matching @var{filterpat} is removed. @end table The return value is true unless an invalid option is supplied, an option other than @option{-p} or @option{-r} is supplied without a @var{name} argument, an attempt is made to remove a completion specification for a @var{name} for which no specification exists, or an error occurs adding a completion specification. @item compopt @btindex compopt @example @code{compopt} [-o @var{option}] [-DE] [+o @var{option}] [@var{name}] @end example Modify completion options for each @var{name} according to the @var{option}s, or for the currently-executing completion if no @var{name}s are supplied. If no @var{option}s are given, display the completion options for each @var{name} or the current completion. The possible values of @var{option} are those valid for the @code{complete} builtin described above. The @option{-D} option indicates that the remaining options should apply to the ``default'' command completion; that is, completion attempted on a command for which no completion has previously been defined. The @option{-E} option indicates that the remaining options should apply to ``empty'' command completion; that is, completion attempted on a blank line. The @option{-D} option takes precedence over @option{-E}. The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a @var{name} for which no completion specification exists, or an output error occurs. @end table @node A Programmable Completion Example @section A Programmable Completion Example The most common way to obtain additional completion functionality beyond the default actions @code{complete} and @code{compgen} provide is to use a shell function and bind it to a particular command using @code{complete -F}. The following function provides completions for the @code{cd} builtin. It is a reasonably good example of what shell functions must do when used for completion. This function uses the word passsed as @code{$2} to determine the directory name to complete. You can also use the @code{COMP_WORDS} array variable; the current word is indexed by the @code{COMP_CWORD} variable. The function relies on the @code{complete} and @code{compgen} builtins to do much of the work, adding only the things that the Bash @code{cd} does beyond accepting basic directory names: tilde expansion (@pxref{Tilde Expansion}), searching directories in @var{$CDPATH}, which is described above (@pxref{Bourne Shell Builtins}), and basic support for the @code{cdable_vars} shell option (@pxref{The Shopt Builtin}). @code{_comp_cd} modifies the value of @var{IFS} so that it contains only a newline to accommodate file names containing spaces and tabs -- @code{compgen} prints the possible completions it generates one per line. Possible completions go into the @var{COMPREPLY} array variable, one completion per array element. The programmable completion system retrieves the completions from there when the function returns. @example # A completion function for the cd builtin # based on the cd completion function from the bash_completion package _comp_cd() @{ local IFS=$' \t\n' # normalize IFS local cur _skipdot _cdpath local i j k # Tilde expansion, with side effect of expanding tilde to full pathname case "$2" in \~*) eval cur="$2" ;; *) cur=$2 ;; esac # no cdpath or absolute pathname -- straight directory completion if [[ -z "$@{CDPATH:-@}" ]] || [[ "$cur" == @@(./*|../*|/*) ]]; then # compgen prints paths one per line; could also use while loop IFS=$'\n' COMPREPLY=( $(compgen -d -- "$cur") ) IFS=$' \t\n' # CDPATH+directories in the current directory if not in CDPATH else IFS=$'\n' _skipdot=false # preprocess CDPATH to convert null directory names to . _cdpath=$@{CDPATH/#:/.:@} _cdpath=$@{_cdpath//::/:.:@} _cdpath=$@{_cdpath/%:/:.@} for i in $@{_cdpath//:/$'\n'@}; do if [[ $i -ef . ]]; then _skipdot=true; fi k="$@{#COMPREPLY[@@]@}" for j in $( compgen -d -- "$i/$cur" ); do COMPREPLY[k++]=$@{j#$i/@} # cut off directory done done $_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") ) IFS=$' \t\n' fi # variable names if appropriate shell option set and no completions if shopt -q cdable_vars && [[ $@{#COMPREPLY[@@]@} -eq 0 ]]; then COMPREPLY=( $(compgen -v -- "$cur") ) fi return 0 @} @end example We install the completion function using the @option{-F} option to @code{complete}: @example # Tell readline to quote appropriate and append slashes to directories; # use the bash default completion for other arguments complete -o filenames -o nospace -o bashdefault -F _comp_cd cd @end example @noindent Since we'd like Bash and Readline to take care of some of the other details for us, we use several other options to tell Bash and Readline what to do. The @option{-o filenames} option tells Readline that the possible completions should be treated as filenames, and quoted appropriately. That option will also cause Readline to append a slash to filenames it can determine are directories (which is why we might want to extend @code{_comp_cd} to append a slash if we're using directories found via @var{CDPATH}: Readline can't tell those completions are directories). The @option{-o nospace} option tells Readline to not append a space character to the directory name, in case we want to append to it. The @option{-o bashdefault} option brings in the rest of the "Bash default" completions -- possible completion that Bash adds to the default Readline set. These include things like command name completion, variable completion for words beginning with @samp{@{}, completions containing pathname expansion patterns (@pxref{Filename Expansion}), and so on. Once installed using @code{complete}, @code{_comp_cd} will be called every time we attempt word completion for a @code{cd} command. Many more examples -- an extensive collection of completions for most of the common GNU, Unix, and Linux commands -- are available as part of the bash_completion project. This is installed by default on many GNU/Linux distributions. Originally written by Ian Macdonald, the project now lives at @url{http://bash-completion.alioth.debian.org/}. There are ports for other systems such as Solaris and Mac OS X. An older version of the bash_completion package is distributed with bash in the @file{examples/complete} subdirectory. @end ifset readline-6.3/doc/rluserman.texi0000664000043600000240000000377612262617665015452 0ustar chetstaff\input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename rluserman.info @settitle GNU Readline Library @include version.texi @comment %**end of header (This is for running Texinfo on a region.) @copying This manual describes the end user interface of the GNU Readline Library (version @value{VERSION}, @value{UPDATED}), a library which aids in the consistency of user interface across discrete programs which provide a command line interface. Copyright @copyright{} 1988--2014 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Libraries @direntry * RLuserman: (rluserman). The GNU readline library User's Manual. @end direntry @titlepage @title GNU Readline Library User Interface @subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. @subtitle @value{UPDATED-MONTH} @author Chet Ramey, Case Western Reserve University @author Brian Fox, Free Software Foundation @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Readline Library This document describes the end user interface of the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is @url{http://www.gnu.org/software/readline/}. @menu * Command Line Editing:: GNU Readline User's Manual. * GNU Free Documentation License:: License for copying this manual. @end menu @end ifnottex @include rluser.texi @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi @bye readline-6.3/doc/history.texi0000664000043600000240000000433212262620162015112 0ustar chetstaff\input texinfo @c -*-texinfo-*- @c %**start of header (This is for running Texinfo on a region.) @setfilename history.info @settitle GNU History Library @include version.texi @c %**end of header (This is for running Texinfo on a region.) @copying This document describes the GNU History library (version @value{VERSION}, @value{UPDATED}), a programming tool that provides a consistent user interface for recalling lines of previously typed input. Copyright @copyright{} 1988--2014 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Libraries @direntry * History: (history). The GNU history library API. @end direntry @titlepage @title GNU History Library @subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}. @subtitle @value{UPDATED-MONTH} @author Chet Ramey, Case Western Reserve University @author Brian Fox, Free Software Foundation @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU History Library This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input. @menu * Using History Interactively:: GNU History User's Manual. * Programming with GNU History:: GNU History Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables. @end menu @end ifnottex @syncodeindex fn vr @include hsuser.texi @include hstech.texi @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi @node Concept Index @appendix Concept Index @printindex cp @node Function and Variable Index @appendix Function and Variable Index @printindex vr @bye readline-6.3/doc/hstech.texi0000664000043600000240000005047712262620144014702 0ustar chetstaff@ignore This file documents the user interface to the GNU History library. Copyright (C) 1988-2014 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. 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 process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the GNU Copyright statement is available to the distributee, and 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. @end ignore @node Programming with GNU History @chapter Programming with GNU History This chapter describes how to interface programs that you write with the @sc{gnu} History Library. It should be considered a technical guide. For information on the interactive use of @sc{gnu} History, @pxref{Using History Interactively}. @menu * Introduction to History:: What is the GNU History library for? * History Storage:: How information is stored. * History Functions:: Functions that you can use. * History Variables:: Variables that control behaviour. * History Programming Example:: Example of using the GNU History Library. @end menu @node Introduction to History @section Introduction to History Many programs read input from the user a line at a time. The @sc{gnu} History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history @dfn{expansion} function is available which provides for a consistent user interface across different programs. The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are similar to the history substitution provided by @code{csh}. If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing. Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file @code{} in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures. @node History Storage @section History Storage The history list is an array of history entries. A history entry is declared as follows: @example typedef void *histdata_t; typedef struct _hist_entry @{ char *line; char *timestamp; histdata_t data; @} HIST_ENTRY; @end example The history list itself might therefore be declared as @example HIST_ENTRY **the_history_list; @end example The state of the History library is encapsulated into a single structure: @example /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state @{ HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; @} HISTORY_STATE; @end example If the flags member includes @code{HS_STIFLED}, the history has been stifled. @node History Functions @section History Functions This section describes the calling sequence for the various functions exported by the @sc{gnu} History library. @menu * Initializing History and State Management:: Functions to call when you want to use history in a program. * History List Management:: Functions used to manage the list of history entries. * Information About the History List:: Functions returning information about the history list. * Moving Around the History List:: Functions used to change the position in the history list. * Searching the History List:: Functions to search the history list for entries containing a string. * Managing the History File:: Functions that read and write a file containing the history list. * History Expansion:: Functions to perform csh-like history expansion. @end menu @node Initializing History and State Management @subsection Initializing History and State Management This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. @deftypefun void using_history (void) Begin a session in which the history functions might be used. This initializes the interactive variables. @end deftypefun @deftypefun {HISTORY_STATE *} history_get_history_state (void) Return a structure describing the current state of the input history. @end deftypefun @deftypefun void history_set_history_state (HISTORY_STATE *state) Set the state of the history list according to @var{state}. @end deftypefun @node History List Management @subsection History List Management These functions manage individual entries on the history list, or set parameters managing the list itself. @deftypefun void add_history (const char *string) Place @var{string} at the end of the history list. The associated data field (if any) is set to @code{NULL}. @end deftypefun @deftypefun void add_history_time (const char *string) Change the time stamp associated with the most recent history entry to @var{string}. @end deftypefun @deftypefun {HIST_ENTRY *} remove_history (int which) Remove history entry at offset @var{which} from the history. The removed element is returned so you can free the line, data, and containing structure. @end deftypefun @deftypefun {histdata_t} free_history_entry (HIST_ENTRY *histent) Free the history entry @var{histent} and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. @end deftypefun @deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data) Make the history entry at offset @var{which} have @var{line} and @var{data}. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid @var{which}, a @code{NULL} pointer is returned. @end deftypefun @deftypefun void clear_history (void) Clear the history list by deleting all the entries. @end deftypefun @deftypefun void stifle_history (int max) Stifle the history list, remembering only the last @var{max} entries. @end deftypefun @deftypefun int unstifle_history (void) Stop stifling the history. This returns the previously-set maximum number of history entries (as set by @code{stifle_history()}). The value is positive if the history was stifled, negative if it wasn't. @end deftypefun @deftypefun int history_is_stifled (void) Returns non-zero if the history is stifled, zero if it is not. @end deftypefun @node Information About the History List @subsection Information About the History List These functions return information about the entire history list or individual list entries. @deftypefun {HIST_ENTRY **} history_list (void) Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return @code{NULL}. @end deftypefun @deftypefun int where_history (void) Returns the offset of the current history element. @end deftypefun @deftypefun {HIST_ENTRY *} current_history (void) Return the history entry at the current position, as determined by @code{where_history()}. If there is no entry there, return a @code{NULL} pointer. @end deftypefun @deftypefun {HIST_ENTRY *} history_get (int offset) Return the history entry at position @var{offset}, starting from @code{history_base} (@pxref{History Variables}). If there is no entry there, or if @var{offset} is greater than the history length, return a @code{NULL} pointer. @end deftypefun @deftypefun time_t history_get_time (HIST_ENTRY *entry) Return the time stamp associated with the history entry @var{entry}. @end deftypefun @deftypefun int history_total_bytes (void) Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history. @end deftypefun @node Moving Around the History List @subsection Moving Around the History List These functions allow the current index into the history list to be set or changed. @deftypefun int history_set_pos (int pos) Set the current history offset to @var{pos}, an absolute index into the list. Returns 1 on success, 0 if @var{pos} is less than zero or greater than the number of history entries. @end deftypefun @deftypefun {HIST_ENTRY *} previous_history (void) Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a @code{NULL} pointer. @end deftypefun @deftypefun {HIST_ENTRY *} next_history (void) Move the current history offset forward to the next history entry, and return the a pointer to that entry. If there is no next entry, return a @code{NULL} pointer. @end deftypefun @node Searching the History List @subsection Searching the History List @cindex History Searching These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be @dfn{anchored}, meaning that the string must match at the beginning of the history entry. @cindex anchored search @deftypefun int history_search (const char *string, int direction) Search the history for @var{string}, starting at the current history offset. If @var{direction} is less than 0, then the search is through previous entries, otherwise through subsequent entries. If @var{string} is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where @var{string} was found. Otherwise, nothing is changed, and a -1 is returned. @end deftypefun @deftypefun int history_search_prefix (const char *string, int direction) Search the history for @var{string}, starting at the current history offset. The search is anchored: matching lines must begin with @var{string}. If @var{direction} is less than 0, then the search is through previous entries, otherwise through subsequent entries. If @var{string} is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. @end deftypefun @deftypefun int history_search_pos (const char *string, int direction, int pos) Search for @var{string} in the history list, starting at @var{pos}, an absolute index into the list. If @var{direction} is negative, the search proceeds backward from @var{pos}, otherwise forward. Returns the absolute index of the history element where @var{string} was found, or -1 otherwise. @end deftypefun @node Managing the History File @subsection Managing the History File The History library can read the history from and write it to a file. This section documents the functions for managing a history file. @deftypefun int read_history (const char *filename) Add the contents of @var{filename} to the history list, a line at a time. If @var{filename} is @code{NULL}, then read from @file{~/.history}. Returns 0 if successful, or @code{errno} if not. @end deftypefun @deftypefun int read_history_range (const char *filename, int from, int to) Read a range of lines from @var{filename}, adding them to the history list. Start reading at line @var{from} and end at @var{to}. If @var{from} is zero, start at the beginning. If @var{to} is less than @var{from}, then read until the end of the file. If @var{filename} is @code{NULL}, then read from @file{~/.history}. Returns 0 if successful, or @code{errno} if not. @end deftypefun @deftypefun int write_history (const char *filename) Write the current history to @var{filename}, overwriting @var{filename} if necessary. If @var{filename} is @code{NULL}, then write the history list to @file{~/.history}. Returns 0 on success, or @code{errno} on a read or write error. @end deftypefun @deftypefun int append_history (int nelements, const char *filename) Append the last @var{nelements} of the history list to @var{filename}. If @var{filename} is @code{NULL}, then append to @file{~/.history}. Returns 0 on success, or @code{errno} on a read or write error. @end deftypefun @deftypefun int history_truncate_file (const char *filename, int nlines) Truncate the history file @var{filename}, leaving only the last @var{nlines} lines. If @var{filename} is @code{NULL}, then @file{~/.history} is truncated. Returns 0 on success, or @code{errno} on failure. @end deftypefun @node History Expansion @subsection History Expansion These functions implement history expansion. @deftypefun int history_expand (char *string, char **output) Expand @var{string}, placing the result into @var{output}, a pointer to a string (@pxref{History Interaction}). Returns: @table @code @item 0 If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); @item 1 if expansions did take place; @item -1 if there was an error in expansion; @item 2 if the returned line should be displayed, but not executed, as with the @code{:p} modifier (@pxref{Modifiers}). @end table If an error occurred in expansion, then @var{output} contains a descriptive error message. @end deftypefun @deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar) Returns the text of the history event beginning at @var{string} + @var{*cindex}. @var{*cindex} is modified to point to after the event specifier. At function entry, @var{cindex} points to the index into @var{string} where the history event specification begins. @var{qchar} is a character that is allowed to end the event specification in addition to the ``normal'' terminating characters. @end deftypefun @deftypefun {char **} history_tokenize (const char *string) Return an array of tokens parsed out of @var{string}, much as the shell might. The tokens are split on the characters in the @var{history_word_delimiters} variable, and shell quoting conventions are obeyed. @end deftypefun @deftypefun {char *} history_arg_extract (int first, int last, const char *string) Extract a string segment consisting of the @var{first} through @var{last} arguments present in @var{string}. Arguments are split using @code{history_tokenize}. @end deftypefun @node History Variables @section History Variables This section describes the externally-visible variables exported by the @sc{gnu} History Library. @deftypevar int history_base The logical offset of the first entry in the history list. @end deftypevar @deftypevar int history_length The number of entries currently stored in the history list. @end deftypevar @deftypevar int history_max_entries The maximum number of history entries. This must be changed using @code{stifle_history()}. @end deftypevar @deftypevar int history_write_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved. The current timestamp format uses the value of @var{history_comment_char} to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. @end deftypevar @deftypevar char history_expansion_char The character that introduces a history event. The default is @samp{!}. Setting this to 0 inhibits history expansion. @end deftypevar @deftypevar char history_subst_char The character that invokes word substitution if found at the start of a line. The default is @samp{^}. @end deftypevar @deftypevar char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. @end deftypevar @deftypevar {char *} history_word_delimiters The characters that separate tokens for @code{history_tokenize()}. The default value is @code{" \t\n()<>;&|"}. @end deftypevar @deftypevar {char *} history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, TAB, @samp{:} and @samp{?} in the case of a substring search. The default is empty. @end deftypevar @deftypevar {char *} history_no_expand_chars The list of characters which inhibit history expansion if found immediately following @var{history_expansion_char}. The default is space, tab, newline, carriage return, and @samp{=}. @end deftypevar @deftypevar int history_quotes_inhibit_expansion If non-zero, single-quoted words are not scanned for the history expansion character. The default value is 0. @end deftypevar @deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function This should be set to the address of a function that takes two arguments: a @code{char *} (@var{string}) and an @code{int} index into that string (@var{i}). It should return a non-zero value if the history expansion starting at @var{string[i]} should not be performed; zero if the expansion should be done. It is intended for use by applications like Bash that use the history expansion character for additional purposes. By default, this variable is set to @code{NULL}. @end deftypevar @node History Programming Example @section History Programming Example The following program demonstrates simple use of the @sc{gnu} History Library. @smallexample #include #include main (argc, argv) int argc; char **argv; @{ char line[1024], *t; int len, done = 0; line[0] = 0; using_history (); while (!done) @{ printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) @{ len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; @} if (!t) strcpy (line, "quit"); if (line[0]) @{ char *expansion; int result; result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) @{ free (expansion); continue; @} add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); @} if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) @{ register HIST_ENTRY **the_list; register int i; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) printf ("%d: %s\n", i + history_base, the_list[i]->line); @} else if (strncmp (line, "delete", 6) == 0) @{ int which; if ((sscanf (line + 6, "%d", &which)) == 1) @{ HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else @{ free (entry->line); free (entry); @} @} else @{ fprintf (stderr, "non-numeric arg given to `delete'\n"); @} @} @} @} @end smallexample readline-6.3/doc/hsuser.texi0000644000043600000240000004022112262620152014714 0ustar chetstaff@ignore This file documents the user interface to the GNU History library. Copyright (C) 1988--2014 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. 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 process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the GNU Copyright statement is available to the distributee, and 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. @end ignore @node Using History Interactively @chapter Using History Interactively @ifclear BashFeatures @defcodeindex bt @end ifclear @ifset BashFeatures This chapter describes how to use the @sc{gnu} History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the @sc{gnu} History Library in other programs, see the @sc{gnu} Readline Library Manual. @end ifset @ifclear BashFeatures This chapter describes how to use the @sc{gnu} History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the @sc{gnu} History Library in your own programs, @pxref{Programming with GNU History}. @end ifclear @ifset BashFeatures @menu * Bash History Facilities:: How Bash lets you manipulate your command history. * Bash History Builtins:: The Bash builtin commands that manipulate the command history. * History Interaction:: What it feels like using History as a user. @end menu @end ifset @ifclear BashFeatures @menu * History Interaction:: What it feels like using History as a user. @end menu @end ifclear @ifset BashFeatures @node Bash History Facilities @section Bash History Facilities @cindex command history @cindex history list When the @option{-o history} option to the @code{set} builtin is enabled (@pxref{The Set Builtin}), the shell provides access to the @dfn{command history}, the list of commands previously typed. The value of the @env{HISTSIZE} shell variable is used as the number of commands to save in a history list. The text of the last @env{$HISTSIZE} commands (default 500) is saved. The shell stores each command in the history list prior to parameter and variable expansion but after history expansion is performed, subject to the values of the shell variables @env{HISTIGNORE} and @env{HISTCONTROL}. When the shell starts up, the history is initialized from the file named by the @env{HISTFILE} variable (default @file{~/.bash_history}). The file named by the value of @env{HISTFILE} is truncated, if necessary, to contain no more than the number of lines specified by the value of the @env{HISTFILESIZE} variable. When a shell with history enabled exits, the last @env{$HISTSIZE} lines are copied from the history list to the file named by @env{$HISTFILE}. If the @code{histappend} shell option is set (@pxref{Bash Builtins}), the lines are appended to the history file, otherwise the history file is overwritten. If @env{HISTFILE} is unset, or if the history file is unwritable, the history is not saved. After saving the history, the history file is truncated to contain no more than @env{$HISTFILESIZE} lines. If @env{HISTFILESIZE} is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated. If the @env{HISTTIMEFORMAT} is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the previous history line. The builtin command @code{fc} may be used to list or edit and re-execute a portion of the history list. The @code{history} builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the history list (@pxref{Commands For History}). The shell allows control over which commands are saved on the history list. The @env{HISTCONTROL} and @env{HISTIGNORE} variables may be set to cause the shell to save only a subset of the commands entered. The @code{cmdhist} shell option, if enabled, causes the shell to attempt to save each line of a multi-line command in the same history entry, adding semicolons where necessary to preserve syntactic correctness. The @code{lithist} shell option causes the shell to save the command with embedded newlines instead of semicolons. The @code{shopt} builtin is used to set these options. @xref{Bash Builtins}, for a description of @code{shopt}. @node Bash History Builtins @section Bash History Builtins @cindex history builtins Bash provides two builtin commands which manipulate the history list and history file. @table @code @item fc @btindex fc @example @code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]} @code{fc -s [@var{pat}=@var{rep}] [@var{command}]} @end example The first form selects a range of commands from @var{first} to @var{last} from the history list and displays or edits and re-executes them. Both @var{first} and @var{last} may be specified as a string (to locate the most recent command beginning with that string) or as a number (an index into the history list, where a negative number is used as an offset from the current command number). If @var{last} is not specified it is set to @var{first}. If @var{first} is not specified it is set to the previous command for editing and @minus{}16 for listing. If the @option{-l} flag is given, the commands are listed on standard output. The @option{-n} flag suppresses the command numbers when listing. The @option{-r} flag reverses the order of the listing. Otherwise, the editor given by @var{ename} is invoked on a file containing those commands. If @var{ename} is not given, the value of the following variable expansion is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the value of the @env{FCEDIT} variable if set, or the value of the @env{EDITOR} variable if that is set, or @code{vi} if neither is set. When editing is complete, the edited commands are echoed and executed. In the second form, @var{command} is re-executed after each instance of @var{pat} in the selected command is replaced by @var{rep}. @var{command} is intepreted the same as @var{first} above. A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so that typing @samp{r cc} runs the last command beginning with @code{cc} and typing @samp{r} re-executes the last command (@pxref{Aliases}). @item history @btindex history @example history [@var{n}] history -c history -d @var{offset} history [-anrw] [@var{filename}] history -ps @var{arg} @end example With no options, display the history list with line numbers. Lines prefixed with a @samp{*} have been modified. An argument of @var{n} lists only the last @var{n} lines. If the shell variable @env{HISTTIMEFORMAT} is set and not null, it is used as a format string for @var{strftime} to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. Options, if supplied, have the following meanings: @table @code @item -c Clear the history list. This may be combined with the other options to replace the history list completely. @item -d @var{offset} Delete the history entry at position @var{offset}. @var{offset} should be specified as it appears when the history is displayed. @item -a Append the new history lines (history lines entered since the beginning of the current Bash session) to the history file. @item -n Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session. @item -r Read the history file and append its contents to the history list. @item -w Write out the current history list to the history file. @item -p Perform history substitution on the @var{arg}s and display the result on the standard output, without storing the results in the history list. @item -s The @var{arg}s are added to the end of the history list as a single entry. @end table When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is used, if @var{filename} is given, then it is used as the history file. If not, then the value of the @env{HISTFILE} variable is used. @end table @end ifset @node History Interaction @section History Expansion @cindex history expansion The History library provides a history expansion feature that is similar to the history expansion provided by @code{csh}. This section describes the syntax used to manipulate the history information. History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is called the @dfn{event}, and the portions of that line that are acted upon are called @dfn{words}. Various @dfn{modifiers} are available to manipulate the selected words. The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is @samp{!} by default. @ifset BashFeatures Only @samp{\} and @samp{'} may be used to escape the history expansion character. @end ifset @ifset BashFeatures Several shell options settable with the @code{shopt} builtin (@pxref{Bash Builtins}) may be used to tailor the behavior of history expansion. If the @code{histverify} shell option is enabled, and Readline is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the Readline editing buffer for further modification. If Readline is being used, and the @code{histreedit} shell option is enabled, a failed history expansion will be reloaded into the Readline editing buffer for correction. The @option{-p} option to the @code{history} builtin command may be used to see what a history expansion will do before using it. The @option{-s} option to the @code{history} builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall. This is most useful in conjunction with Readline. The shell allows control of the various characters used by the history expansion mechanism with the @code{histchars} variable, as explained above (@pxref{Bash Variables}). The shell uses the history comment character to mark history timestamps when writing the history file. @end ifset @menu * Event Designators:: How to specify which history line to use. * Word Designators:: Specifying which words are of interest. * Modifiers:: Modifying the results of substitution. @end menu @node Event Designators @subsection Event Designators @cindex event designators An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. @cindex history events @table @asis @item @code{!} @ifset BashFeatures Start a history substitution, except when followed by a space, tab, the end of the line, @samp{=} or @samp{(} (when the @code{extglob} shell option is enabled using the @code{shopt} builtin). @end ifset @ifclear BashFeatures Start a history substitution, except when followed by a space, tab, the end of the line, or @samp{=}. @end ifclear @item @code{!@var{n}} Refer to command line @var{n}. @item @code{!-@var{n}} Refer to the command @var{n} lines back. @item @code{!!} Refer to the previous command. This is a synonym for @samp{!-1}. @item @code{!@var{string}} Refer to the most recent command preceding the current position in the history list starting with @var{string}. @item @code{!?@var{string}[?]} Refer to the most recent command preceding the current position in the history list containing @var{string}. The trailing @samp{?} may be omitted if the @var{string} is followed immediately by a newline. @item @code{^@var{string1}^@var{string2}^} Quick Substitution. Repeat the last command, replacing @var{string1} with @var{string2}. Equivalent to @code{!!:s/@var{string1}/@var{string2}/}. @item @code{!#} The entire command line typed so far. @end table @node Word Designators @subsection Word Designators Word designators are used to select desired words from the event. A @samp{:} separates the event specification from the word designator. It may be omitted if the word designator begins with a @samp{^}, @samp{$}, @samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. @need 0.75 For example, @table @code @item !! designates the preceding command. When you type this, the preceding command is repeated in toto. @item !!:$ designates the last argument of the preceding command. This may be shortened to @code{!$}. @item !fi:2 designates the second argument of the most recent command starting with the letters @code{fi}. @end table @need 0.75 Here are the word designators: @table @code @item 0 (zero) The @code{0}th word. For many applications, this is the command word. @item @var{n} The @var{n}th word. @item ^ The first argument; that is, word 1. @item $ The last argument. @item % The word matched by the most recent @samp{?@var{string}?} search. @item @var{x}-@var{y} A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}. @item * All of the words, except the @code{0}th. This is a synonym for @samp{1-$}. It is not an error to use @samp{*} if there is just one word in the event; the empty string is returned in that case. @item @var{x}* Abbreviates @samp{@var{x}-$} @item @var{x}- Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word. @end table If a word designator is supplied without an event specification, the previous command is used as the event. @node Modifiers @subsection Modifiers After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a @samp{:}. @table @code @item h Remove a trailing pathname component, leaving only the head. @item t Remove all leading pathname components, leaving the tail. @item r Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving the basename. @item e Remove all but the trailing suffix. @item p Print the new command but do not execute it. @ifset BashFeatures @item q Quote the substituted words, escaping further substitutions. @item x Quote the substituted words as with @samp{q}, but break into words at spaces, tabs, and newlines. @end ifset @item s/@var{old}/@var{new}/ Substitute @var{new} for the first occurrence of @var{old} in the event line. Any delimiter may be used in place of @samp{/}. The delimiter may be quoted in @var{old} and @var{new} with a single backslash. If @samp{&} appears in @var{new}, it is replaced by @var{old}. A single backslash will quote the @samp{&}. The final delimiter is optional if it is the last character on the input line. @item & Repeat the previous substitution. @item g @itemx a Cause changes to be applied over the entire event line. Used in conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/}, or with @samp{&}. @item G Apply the following @samp{s} modifier once to each word in the event. @end table readline-6.3/doc/readline.30000664000043600000240000012642412262621357014403 0ustar chetstaff.\" .\" MAN PAGE COMMENTS to .\" .\" Chet Ramey .\" Information Network Services .\" Case Western Reserve University .\" chet.ramey@case.edu .\" .\" Last Change: Mon Jan 6 16:34:55 EST 2014 .\" .TH READLINE 3 "2014 January 6" "GNU Readline 6.3" .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. .\" .de FN \fI\|\\$1\|\fP .. .SH NAME readline \- get a line from a user with editing .SH SYNOPSIS .LP .nf .ft B #include #include #include .ft .fi .LP .nf \fIchar *\fP .br \fBreadline\fP (\fIconst char *prompt\fP); .fi .SH COPYRIGHT .if n Readline is Copyright (C) 1989\-2011 Free Software Foundation, Inc. .if t Readline is Copyright \(co 1989\-2011 Free Software Foundation, Inc. .SH DESCRIPTION .LP .B readline will read a line from the terminal and return it, using .B prompt as a prompt. If .B prompt is \fBNULL\fP or the empty string, no prompt is issued. The line returned is allocated with .IR malloc (3); the caller must free it when finished. The line returned has the final newline removed, so only the text of the line remains. .LP .B readline offers editing capabilities while the user is entering the line. By default, the line editing commands are similar to those of emacs. A vi\-style line editing interface is also available. .LP This manual page describes only the most basic use of \fBreadline\fP. Much more functionality is available; see \fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP for additional information. .SH RETURN VALUE .LP .B readline returns the text of the line read. A blank line returns the empty string. If .B EOF is encountered while reading a line, and the line is empty, .B NULL is returned. If an .B EOF is read with a non\-empty line, it is treated as a newline. .SH NOTATION .LP An Emacs-style notation is used to denote keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n means Control\-N. Similarly, .I meta keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards without a .I meta key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key then the .I x key. This makes ESC the \fImeta prefix\fP. The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP, or press the Escape key then hold the Control key while pressing the .I x key.) .PP Readline commands may be given numeric .IR arguments , which normally act as a repeat count. Sometimes, however, it is the sign of the argument that is significant. Passing a negative argument to a command that acts in the forward direction (e.g., \fBkill\-line\fP) causes that command to act in a backward direction. Commands whose behavior with arguments deviates from this are noted. .PP When a command is described as \fIkilling\fP text, the text deleted is saved for possible future retrieval (\fIyanking\fP). The killed text is saved in a \fIkill ring\fP. Consecutive kills cause the text to be accumulated into one unit, which can be yanked all at once. Commands which do not kill text separate the chunks of text on the kill ring. .SH INITIALIZATION FILE .LP Readline is customized by putting commands in an initialization file (the \fIinputrc\fP file). The name of this file is taken from the value of the .B INPUTRC environment variable. If that variable is unset, the default is .IR ~/.inputrc . If that file does not exist or cannot be read, the ultimate default is .IR /etc/inputrc . When a program which uses the readline library starts up, the init file is read, and the key bindings and variables are set. There are only a few basic constructs allowed in the readline init file. Blank lines are ignored. Lines beginning with a \fB#\fP are comments. Lines beginning with a \fB$\fP indicate conditional constructs. Other lines denote key bindings and variable settings. Each program using this library may add its own commands and bindings. .PP For example, placing .RS .PP M\-Control\-u: universal\-argument .RE or .RS C\-Meta\-u: universal\-argument .RE .sp into the .I inputrc would make M\-C\-u execute the readline command .IR universal\-argument . .PP The following symbolic character names are recognized while processing key bindings: .IR DEL , .IR ESC , .IR ESCAPE , .IR LFD , .IR NEWLINE , .IR RET , .IR RETURN , .IR RUBOUT , .IR SPACE , .IR SPC , and .IR TAB . .PP In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a \fImacro\fP). .PP .SS Key Bindings .PP The syntax for controlling key bindings in the .I inputrc file is simple. All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be specified in one of two ways: as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP prefixes, or as a key sequence. The name and key sequence are separated by a colon. There can be no whitespace between the name and the colon. .PP When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP, .I keyname is the name of a key spelled out in English. For example: .sp .RS Control\-u: universal\-argument .br Meta\-Rubout: backward\-kill\-word .br Control\-o: "> output" .RE .LP In the above example, .I C\-u is bound to the function .BR universal\-argument , .I M-DEL is bound to the function .BR backward\-kill\-word , and .I C\-o is bound to run the macro expressed on the right hand side (that is, to insert the text .if t \f(CW> output\fP .if n ``> output'' into the line). .PP In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, .B keyseq differs from .B keyname above in that strings denoting an entire key sequence may be specified by placing the sequence within double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized. .sp .RS "\eC\-u": universal\-argument .br "\eC\-x\eC\-r": re\-read\-init\-file .br "\ee[11~": "Function Key 1" .RE .PP In this example, .I C-u is again bound to the function .BR universal\-argument . .I "C-x C-r" is bound to the function .BR re\-read\-init\-file , and .I "ESC [ 1 1 ~" is bound to insert the text .if t \f(CWFunction Key 1\fP. .if n ``Function Key 1''. .PP The full set of GNU Emacs style escape sequences available when specifying key sequences is .RS .PD 0 .TP .B \eC\- control prefix .TP .B \eM\- meta prefix .TP .B \ee an escape character .TP .B \e\e backslash .TP .B \e" literal ", a double quote .TP .B \e' literal ', a single quote .RE .PD .PP In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: .RS .PD 0 .TP .B \ea alert (bell) .TP .B \eb backspace .TP .B \ed delete .TP .B \ef form feed .TP .B \en newline .TP .B \er carriage return .TP .B \et horizontal tab .TP .B \ev vertical tab .TP .B \e\fInnn\fP the eight-bit character whose value is the octal value \fInnn\fP (one to three digits) .TP .B \ex\fIHH\fP the eight-bit character whose value is the hexadecimal value \fIHH\fP (one or two hex digits) .RE .PD .PP When entering the text of a macro, single or double quotes should 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 '. .PP .B Bash allows the current readline key bindings to be displayed or modified with the .B bind builtin command. The editing mode may be switched during interactive use by using the .B \-o option to the .B set builtin command. Other programs using this library provide similar mechanisms. The .I inputrc file may be edited and re-read if a program does not provide any other means to incorporate new bindings. .SS Variables .PP Readline has variables that can be used to further customize its behavior. A variable may be set in the .I inputrc file with a statement of the form .RS .PP \fBset\fP \fIvariable\-name\fP \fIvalue\fP .RE .PP Except where noted, readline variables can take the values .B On or .B Off (without regard to case). Unrecognized variable names are ignored. When a variable value is read, empty or null values, "on" (case-insensitive), and "1" are equivalent to \fBOn\fP. All other values are equivalent to \fBOff\fP. The variables and their default values are: .PP .PD 0 .TP .B bell\-style (audible) Controls what happens when readline wants to ring the terminal bell. If set to \fBnone\fP, readline never rings the bell. If set to \fBvisible\fP, readline uses a visible bell if one is available. If set to \fBaudible\fP, readline attempts to ring the terminal's bell. .TP .B bind\-tty\-special\-chars (On) If set to \fBOn\fP, readline attempts to bind the control characters treated specially by the kernel's terminal driver to their readline equivalents. .TP .B colored\-stats (Off) If set to \fBOn\fP, readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. .TP .B comment\-begin (``#'') The string that is inserted in \fBvi\fP mode when the .B insert\-comment command is executed. This command is bound to .B M\-# in emacs mode and to .B # in vi command mode. .TP .B completion\-display\-width (-1) The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. .TP .B completion\-ignore\-case (Off) If set to \fBOn\fP, readline performs filename matching and completion in a case\-insensitive fashion. .TP .B completion\-map\-case (Off) If set to \fBOn\fP, and \fBcompletion\-ignore\-case\fP is enabled, readline treats hyphens (\fI\-\fP) and underscores (\fI_\fP) as equivalent when performing case\-insensitive filename matching and completion. .TP .B completion\-prefix\-display\-length (0) The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. .TP .B completion\-query\-items (100) This determines when the user is queried about viewing the number of possible completions generated by the \fBpossible\-completions\fP command. It may be set to any integer value greater than or equal to zero. If the number of possible completions is greater than or equal to the value of this variable, the user is asked whether or not he wishes to view them; otherwise they are simply listed on the terminal. A negative value causes readline to never ask. .TP .B convert\-meta (On) If set to \fBOn\fP, readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing it with an escape character (in effect, using escape as the \fImeta prefix\fP). .TP .B disable\-completion (Off) If set to \fBOn\fP, readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to \fBself-insert\fP. .TP .B editing\-mode (emacs) Controls whether readline begins with a set of key bindings similar to \fIEmacs\fP or \fIvi\fP. .B editing\-mode can be set to either .B emacs or .BR vi . .TP .B echo\-control\-characters (On) When set to \fBOn\fP, on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. .TP .B enable\-keypad (Off) When set to \fBOn\fP, readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. .TP .B enable\-meta\-key (On) When set to \fBOn\fP, readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. .TP .B expand\-tilde (Off) If set to \fBOn\fP, tilde expansion is performed when readline attempts word completion. .TP .B history\-preserve\-point (Off) If set to \fBOn\fP, the history code attempts to place point at the same location on each history line retrieved with \fBprevious-history\fP or \fBnext-history\fP. .TP .B history\-size (0) Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. .TP .B horizontal\-scroll\-mode (Off) When set to \fBOn\fP, makes readline use a single line for display, scrolling the input horizontally on a single screen line when it becomes longer than the screen width rather than wrapping to a new line. .TP .B input\-meta (Off) If set to \fBOn\fP, readline will enable eight-bit input (that is, it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The name .B meta\-flag is a synonym for this variable. .TP .B isearch\-terminators (``C\-[ C\-J'') The string of characters that should terminate an incremental search without subsequently executing the character as a command. If this variable has not been given a value, the characters \fIESC\fP and \fIC\-J\fP will terminate an incremental search. .TP .B keymap (emacs) Set the current readline keymap. The set of legal keymap names is \fIemacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command\fP, and .IR vi-insert . \fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is equivalent to \fIemacs-standard\fP. The default value is .IR emacs . The value of .B editing\-mode also affects the default keymap. .TP .B keyseq\-timeout (500) Specifies the duration \fIreadline\fP will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, \fIreadline\fP will use the shorter but complete key sequence. The value is specified in milliseconds, so a value of 1000 means that \fIreadline\fP will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, \fIreadline\fP will wait until another key is pressed to decide which key sequence to complete. .TP .B mark\-directories (On) If set to \fBOn\fP, completed directory names have a slash appended. .TP .B mark\-modified\-lines (Off) If set to \fBOn\fP, history lines that have been modified are displayed with a preceding asterisk (\fB*\fP). .TP .B mark\-symlinked\-directories (Off) If set to \fBOn\fP, completed names which are symbolic links to directories have a slash appended (subject to the value of \fBmark\-directories\fP). .TP .B match\-hidden\-files (On) This variable, when set to \fBOn\fP, causes readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to \fBOff\fP, the leading `.' must be supplied by the user in the filename to be completed. .TP .B menu\-complete\-display\-prefix (Off) If set to \fBOn\fP, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. .TP .B output\-meta (Off) If set to \fBOn\fP, readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. .TP .B page\-completions (On) If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager to display a screenful of possible completions at a time. .TP .B print\-completions\-horizontally (Off) If set to \fBOn\fP, readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. .TP .B revert\-all\-at\-newline (Off) If set to \fBOn\fP, readline will undo all changes to history lines before returning when \fBaccept\-line\fP is executed. By default, history lines may be modified and retain individual undo lists across calls to \fBreadline\fP. .TP .B show\-all\-if\-ambiguous (Off) This alters the default behavior of the completion functions. If set to .BR On , words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. .TP .B show\-all\-if\-unmodified (Off) This alters the default behavior of the completion functions in a fashion similar to \fBshow\-all\-if\-ambiguous\fP. If set to .BR On , words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. .TP .B show\-mode\-in\-prompt (Off) If set to \fBOn\fP, add a character to the beginning of the prompt indicating the editing mode: emacs (@), vi command (:) or vi insertion (+). .TP .B skip\-completed\-text (Off) If set to \fBOn\fP, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. .TP .B visible\-stats (Off) If set to \fBOn\fP, a character denoting a file's type as reported by \fIstat\fP(2) is appended to the filename when listing possible completions. .PD .SS Conditional Constructs .PP 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. .IP \fB$if\fP The .B $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. .RS .IP \fBmode\fP The \fBmode=\fP form of the \fB$if\fP directive is used to test whether readline is in emacs or vi mode. This may be used in conjunction with the \fBset keymap\fP command, for instance, to set bindings in the \fIemacs-standard\fP and \fIemacs-ctlx\fP keymaps only if readline is starting out in emacs mode. .IP \fBterm\fP The \fBterm=\fP 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 .B = is tested against the full name of the terminal and the portion of the terminal name before the first \fB\-\fP. This allows .I sun to match both .I sun and .IR sun\-cmd , for instance. .IP \fBapplication\fP The \fBapplication\fP construct is used to include application-specific settings. Each program using the readline library sets the \fIapplication name\fP, and an initialization file can test for a particular value. 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 \fBbash\fP: .sp 1 .RS .nf \fB$if\fP Bash # Quote the current or previous word "\eC-xq": "\eeb\e"\eef\e"" \fB$endif\fP .fi .RE .RE .IP \fB$endif\fP This command, as seen in the previous example, terminates an \fB$if\fP command. .IP \fB$else\fP Commands in this branch of the \fB$if\fP directive are executed if the test fails. .IP \fB$include\fP This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive would read \fI/etc/inputrc\fP: .sp 1 .RS .nf \fB$include\fP \^ \fI/etc/inputrc\fP .fi .RE .SH SEARCHING .PP Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: .I incremental and .IR non-incremental . .PP Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type \fBC\-r\fP. Typing \fBC\-s\fP searches forward through the history. The characters present in the value of the \fBisearch-terminators\fP variable are used to terminate an incremental search. If that variable has not been assigned a value the \fIEscape\fP and \fBC\-J\fP characters will terminate an incremental search. \fBC\-G\fP will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. .PP To find other matching entries in the history list, type \fBC\-s\fP or \fBC\-r\fP as appropriate. This will search backward or forward in the history for the next line matching the search string typed so far. Any other key sequence bound to a readline command will terminate the search and execute that command. For instance, a newline will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. .PP Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. .SH EDITING COMMANDS .PP The following is a list of the names of the commands and the default key sequences to which they are bound. Command names without an accompanying key sequence are unbound by default. .PP In the following descriptions, \fIpoint\fP refers to the current cursor position, and \fImark\fP refers to a cursor position saved by the \fBset\-mark\fP command. The text between the point and mark is referred to as the \fIregion\fP. .SS Commands for Moving .PP .PD 0 .TP .B beginning\-of\-line (C\-a) Move to the start of the current line. .TP .B end\-of\-line (C\-e) Move to the end of the line. .TP .B forward\-char (C\-f) Move forward a character. .TP .B backward\-char (C\-b) Move back a character. .TP .B forward\-word (M\-f) Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits). .TP .B backward\-word (M\-b) Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). .TP .B clear\-screen (C\-l) Clear the screen leaving the current line at the top of the screen. With an argument, refresh the current line without clearing the screen. .TP .B redraw\-current\-line Refresh the current line. .PD .SS Commands for Manipulating the History .PP .PD 0 .TP .B accept\-line (Newline, Return) Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with \fBadd_history()\fP. If the line is a modified history line, the history line is restored to its original state. .TP .B previous\-history (C\-p) Fetch the previous command from the history list, moving back in the list. .TP .B next\-history (C\-n) Fetch the next command from the history list, moving forward in the list. .TP .B beginning\-of\-history (M\-<) Move to the first line in the history. .TP .B end\-of\-history (M\->) Move to the end of the input history, i.e., the line currently being entered. .TP .B 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. .TP .B forward\-search\-history (C\-s) Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search. .TP .B non\-incremental\-reverse\-search\-history (M\-p) Search backward through the history starting at the current line using a non-incremental search for a string supplied by the user. .TP .B non\-incremental\-forward\-search\-history (M\-n) Search forward through the history using a non-incremental search for a string supplied by the user. .TP .B history\-search\-backward Search backward through the history for the string of characters between the start of the current line and the current cursor position (the \fIpoint\fP). The search string must match at the beginning of a history line. This is a non-incremental search. .TP .B history\-search\-forward Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. .TP .B history\-substring\-search\-backward Search backward through the history for the string of characters between the start of the current line and the current cursor position (the \fIpoint\fP). The search string may match anywhere in a history line. This is a non-incremental search. .TP .B history\-substring\-search\-forward Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. .TP .B yank\-nth\-arg (M\-C\-y) Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument .IR n , insert the \fIn\fPth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the \fIn\fPth word from the end of the previous command. Once the argument \fIn\fP is computed, the argument is extracted as if the "!\fIn\fP" history expansion had been specified. .TP .B yank\-last\-arg (M\-.\^, M\-_\^) Insert the last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like \fByank\-nth\-arg\fP. Successive calls to \fByank\-last\-arg\fP move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified. .PD .SS Commands for Changing Text .PP .PD 0 .TP .B \fIend\-of\-file\fP (usually C\-d) The character indicating end-of-file as set, for example, by .if t \f(CWstty\fP. .if n ``stty''. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns .SM .BR EOF . .TP .B delete\-char (C\-d) Delete the character at point. If this function is bound to the same character as the tty \fBEOF\fP character, as \fBC\-d\fP commonly is, see above for the effects. .TP .B backward\-delete\-char (Rubout) Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring. .TP .B forward\-backward\-delete\-char Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. .TP .B quoted\-insert (C\-q, C\-v) Add the next character that you type to the line verbatim. This is how to insert characters like \fBC\-q\fP, for example. .TP .B tab\-insert (M-TAB) Insert a tab character. .TP .B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...) Insert the character typed. .TP .B transpose\-chars (C\-t) Drag the character before point forward over the character at point, moving point forward as well. If point is at the end of the line, then this transposes the two characters before point. Negative arguments have no effect. .TP .B transpose\-words (M\-t) Drag the word before point past the word after point, moving point over that word as well. If point is at the end of the line, this transposes the last two words on the line. .TP .B upcase\-word (M\-u) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move point. .TP .B downcase\-word (M\-l) Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move point. .TP .B capitalize\-word (M\-c) Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move point. .TP .B overwrite\-mode Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only \fBemacs\fP mode; \fBvi\fP mode does overwrite differently. Each call to \fIreadline()\fP starts in insert mode. In overwrite mode, characters bound to \fBself\-insert\fP replace the text at point rather than pushing the text to the right. Characters bound to \fBbackward\-delete\-char\fP replace the character before point with a space. By default, this command is unbound. .PD .SS Killing and Yanking .PP .PD 0 .TP .B kill\-line (C\-k) Kill the text from point to the end of the line. .TP .B backward\-kill\-line (C\-x Rubout) Kill backward to the beginning of the line. .TP .B unix\-line\-discard (C\-u) Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. .\" There is no real difference between this and backward-kill-line .TP .B kill\-whole\-line Kill all characters on the current line, no matter where point is. .TP .B kill\-word (M\-d) Kill from point the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by \fBforward\-word\fP. .TP .B backward\-kill\-word (M\-Rubout) Kill the word behind point. Word boundaries are the same as those used by \fBbackward\-word\fP. .TP .B unix\-word\-rubout (C\-w) Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. .TP .B unix\-filename\-rubout Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. .TP .B delete\-horizontal\-space (M\-\e) Delete all spaces and tabs around point. .TP .B kill\-region Kill the text between the point and \fImark\fP (saved cursor position). This text is referred to as the \fIregion\fP. .TP .B copy\-region\-as\-kill Copy the text in the region to the kill buffer. .TP .B copy\-backward\-word Copy the word before point to the kill buffer. The word boundaries are the same as \fBbackward\-word\fP. .TP .B copy\-forward\-word Copy the word following point to the kill buffer. The word boundaries are the same as \fBforward\-word\fP. .TP .B yank (C\-y) Yank the top of the kill ring into the buffer at point. .TP .B yank\-pop (M\-y) Rotate the kill ring, and yank the new top. Only works following .B yank or .BR yank\-pop . .PD .SS Numeric Arguments .PP .PD 0 .TP .B 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. .TP .B 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 .B 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. .PD .SS Completing .PP .PD 0 .TP .B complete (TAB) Attempt to perform completion on the text before point. The actual completion performed is application-specific. .BR Bash , for instance, attempts completion treating the text as a variable (if the text begins with \fB$\fP), username (if the text begins with \fB~\fP), hostname (if the text begins with \fB@\fP), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. .BR Gdb , on the other hand, allows completion of program functions and variables, and only attempts filename completion under certain circumstances. .TP .B possible\-completions (M\-?) List the possible completions of the text before point. When displaying completions, readline sets the number of columns used for display to the value of \fBcompletion-display-width\fP, the value of the environment variable .SM .BR COLUMNS , or the screen width, in that order. .TP .B insert\-completions (M\-*) Insert all completions of the text before point that would have been generated by \fBpossible\-completions\fP. .TP .B menu\-complete Similar to \fBcomplete\fP, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of \fBmenu\-complete\fP steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of \fBbell\-style\fP) and the original text is restored. An argument of \fIn\fP moves \fIn\fP 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 \fBTAB\fP, but is unbound by default. .TP .B menu\-complete\-backward Identical to \fBmenu\-complete\fP, but moves backward through the list of possible completions, as if \fBmenu\-complete\fP had been given a negative argument. This command is unbound by default. .TP .B delete\-char\-or\-list Deletes the character under the cursor if not at the beginning or end of the line (like \fBdelete-char\fP). If at the end of the line, behaves identically to \fBpossible-completions\fP. .PD .SS Keyboard Macros .PP .PD 0 .TP .B start\-kbd\-macro (C\-x (\^) Begin saving the characters typed into the current keyboard macro. .TP .B end\-kbd\-macro (C\-x )\^) Stop saving the characters typed into the current keyboard macro and store the definition. .TP .B 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. .B print\-last\-kbd\-macro () Print the last keyboard macro defined in a format suitable for the \fIinputrc\fP file. .PD .SS Miscellaneous .PP .PD 0 .TP .B re\-read\-init\-file (C\-x C\-r) Read in the contents of the \fIinputrc\fP file, and incorporate any bindings or variable assignments found there. .TP .B abort (C\-g) Abort the current editing command and ring the terminal's bell (subject to the setting of .BR bell\-style ). .TP .B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...) If the metafied character \fIx\fP is lowercase, run the command that is bound to the corresponding uppercase character. .TP .B prefix\-meta (ESC) Metafy the next character typed. .SM .B ESC .B f is equivalent to .BR Meta\-f . .TP .B undo (C\-_, C\-x C\-u) Incremental undo, separately remembered for each line. .TP .B revert\-line (M\-r) Undo all changes made to this line. This is like executing the .B undo command enough times to return the line to its initial state. .TP .B tilde\-expand (M\-&) Perform tilde expansion on the current word. .TP .B set\-mark (C\-@, M\-) Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. .TP .B 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. .TP .B 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. .TP .B 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. .TP .B skip\-csi\-sequence Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC\-[. .TP .B insert\-comment (M\-#) Without a numeric argument, the value of the readline .B comment\-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of \fBcomment\-begin\fP, the value is inserted, otherwise the characters in \fBcomment-begin\fP are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. The default value of .B comment\-begin makes the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. .TP .B 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 \fIinputrc\fP file. .TP .B 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 \fIinputrc\fP file. .TP .B dump\-macros Print all of the readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an \fIinputrc\fP file. .TP .B emacs\-editing\-mode (C\-e) When in .B vi command mode, this causes a switch to .B emacs editing mode. .TP .B vi\-editing\-mode (M\-C\-j) When in .B emacs editing mode, this causes a switch to .B vi editing mode. .PD .SH DEFAULT KEY BINDINGS .LP The following is a list of the default emacs and vi bindings. Characters with the eighth bit set are written as M\-, and are referred to as .I metafied characters. The printable ASCII characters not mentioned in the list of emacs standard bindings are bound to the .B self\-insert function, which just inserts the given character into the input line. In vi insertion mode, all characters not specifically mentioned are bound to .BR self\-insert . Characters assigned to signal generation by .IR stty (1) or the terminal driver, such as C-Z or C-C, retain that function. Upper and lower case metafied characters are bound to the same function in the emacs mode meta keymap. The remaining characters are unbound, which causes readline to ring the bell (subject to the setting of the .B bell\-style variable). .SS Emacs Mode .RS +.6i .nf .ta 2.5i .sp Emacs Standard bindings .sp "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 "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 .PP Emacs Meta bindings .sp "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 "M-Y" yank-pop "M-\e" delete-horizontal-space "M-~" tilde-expand "M-C-?" backward-kill-word "M-_" yank-last-arg .PP Emacs Control-X bindings .sp "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 .sp .RE .SS VI Mode bindings .RS +.6i .nf .ta 2.5i .sp .PP VI Insert Mode functions .sp "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 .PP VI Command Mode functions .sp "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 "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-_" vi-undo "\^ " 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 "\e" 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 "p" vi-put "r" vi-change-char "s" vi-subst "t" vi-char-search "u" vi-undo "w" vi-next-word "x" vi-delete "y" vi-yank-to "|" vi-column "~" vi-change-case .RE .SH "SEE ALSO" .PD 0 .TP \fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey .TP \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey .TP \fIbash\fP(1) .PD .SH FILES .PD 0 .TP .FN ~/.inputrc Individual \fBreadline\fP initialization file .PD .SH AUTHORS Brian Fox, Free Software Foundation .br bfox@gnu.org .PP Chet Ramey, Case Western Reserve University .br chet.ramey@case.edu .SH BUG REPORTS If you find a bug in .B readline, 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 .B readline library that you have. .PP Once you have determined that a bug actually exists, mail a bug report to \fIbug\-readline\fP@\fIgnu.org\fP. If you have a fix, you are welcome to mail that as well! Suggestions and `philosophical' bug reports may be mailed to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet newsgroup .BR gnu.bash.bug . .PP Comments and bug reports concerning this manual page should be directed to .IR chet.ramey@case.edu . .SH BUGS .PP It's too big and too slow. readline-6.3/doc/history.30000644000043600000240000005342212262621035014305 0ustar chetstaff.\" .\" MAN PAGE COMMENTS to .\" .\" Chet Ramey .\" Information Network Services .\" Case Western Reserve University .\" chet.ramey@case.edu .\" .\" Last Change: Thu Thu Jun 27 10:34:44 EDT 2013 .\" .TH HISTORY 3 "2013 June 27" "GNU History 6.3" .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. .\" .de FN \fI\|\\$1\|\fP .. .ds lp \fR\|(\fP .ds rp \fR\|)\fP .\" FnN return-value fun-name N arguments .de Fn1 \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3\fP\\*(rp .br .. .de Fn2 .if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4\fP\\*(rp .if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4\fP\\*(rp .br .. .de Fn3 .if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4,\|\\$5\fP\|\\*(rp .if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4, \\$5\fP\\*(rp .br .. .de Vb \fI\\$1\fP \fB\\$2\fP .br .. .SH NAME history \- GNU History Library .SH COPYRIGHT .if t The GNU History Library is Copyright \(co 1989-2011 by the Free Software Foundation, Inc. .if n The GNU History Library is Copyright (C) 1989-2011 by the Free Software Foundation, Inc. .SH DESCRIPTION Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. .PP .SH "HISTORY EXPANSION" .PP The history library supports a history expansion feature that is identical to the history expansion in .BR bash. This section describes what syntax features are available. .PP History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. .PP History expansion is usually performed immediately after a complete line is read. It takes place in two parts. The first is to determine which line from the history list to use during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is the \fIevent\fP, and the portions of that line that are acted upon are \fIwords\fP. Various \fImodifiers\fP are available to manipulate the selected words. The line is broken into words in the same fashion as \fBbash\fP does when reading input, so that several words that would otherwise be separated are considered one word when surrounded by quotes (see the description of \fBhistory_tokenize()\fP below). History expansions are introduced by the appearance of the history expansion character, which is \^\fB!\fP\^ by default. Only backslash (\^\fB\e\fP\^) and single quotes can quote the history expansion character. .SS Event Designators .PP An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. .PP .PD 0 .TP .B ! Start a history substitution, except when followed by a .BR blank , newline, = or (. .TP .B !\fIn\fR Refer to command line .IR n . .TP .B !\-\fIn\fR Refer to the current command minus .IR n . .TP .B !! Refer to the previous command. This is a synonym for `!\-1'. .TP .B !\fIstring\fR Refer to the most recent command preceding the current position in the history list starting with .IR string . .TP .B !?\fIstring\fR\fB[?]\fR Refer to the most recent command preceding the current position in the history list containing .IR string . The trailing \fB?\fP may be omitted if .I string is followed immediately by a newline. .TP .B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u Quick substitution. Repeat the last command, replacing .I string1 with .IR string2 . Equivalent to ``!!:s/\fIstring1\fP/\fIstring2\fP/'' (see \fBModifiers\fP below). .TP .B !# The entire command line typed so far. .PD .SS Word Designators .PP Word designators are used to select desired words from the event. A .B : separates the event specification from the word designator. It may be omitted if the word designator begins with a .BR ^ , .BR $ , .BR * , .BR \- , or .BR % . Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. .PP .PD 0 .TP .B 0 (zero) The zeroth word. For the shell, this is the command word. .TP .I n The \fIn\fRth word. .TP .B ^ The first argument. That is, word 1. .TP .B $ The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line. .TP .B % The word matched by the most recent `?\fIstring\fR?' search. .TP .I x\fB\-\fPy A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'. .TP .B * All of the words but the zeroth. This is a synonym for `\fI1\-$\fP'. It is not an error to use .B * if there is just one word in the event; the empty string is returned in that case. .TP .B x* Abbreviates \fIx\-$\fP. .TP .B x\- Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word. .PD .PP If a word designator is supplied without an event specification, the previous command is used as the event. .SS Modifiers .PP After the optional word designator, there may appear a sequence of one or more of the following modifiers, each preceded by a `:'. .PP .PD 0 .PP .TP .B h Remove a trailing file name component, leaving only the head. .TP .B t Remove all leading file name components, leaving the tail. .TP .B r Remove a trailing suffix of the form \fI.xxx\fP, leaving the basename. .TP .B e Remove all but the trailing suffix. .TP .B p Print the new command but do not execute it. .TP .B q Quote the substituted words, escaping further substitutions. .TP .B x Quote the substituted words as with .BR q , but break into words at .B blanks and newlines. .TP .B s/\fIold\fP/\fInew\fP/ Substitute .I new for the first occurrence of .I old in the event line. Any delimiter can be used in place of /. The final delimiter is optional if it is the last character of the event line. The delimiter may be quoted in .I old and .I new with a single backslash. If & appears in .IR new , it is replaced by .IR old . A single backslash will quote the &. If .I old is null, it is set to the last .I old substituted, or, if no previous history substitutions took place, the last .I string in a .B !?\fIstring\fR\fB[?]\fR search. .TP .B & Repeat the previous substitution. .TP .B g Cause changes to be applied over the entire event line. This is used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR') or `\fB:&\fP'. If used with `\fB:s\fP', any delimiter can be used in place of /, and the final delimiter is optional if it is the last character of the event line. An \fBa\fP may be used as a synonym for \fBg\fP. .TP .B G Apply the following `\fBs\fP' modifier once to each word in the event line. .PD .SH "PROGRAMMING WITH HISTORY FUNCTIONS" This section describes how to use the History library in other programs. .SS Introduction to History .PP The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history \fIexpansion\fP function is available which provides for a consistent user interface across different programs. .PP The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are identical to the history substitution provided by \fBbash\fP. .PP If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing. .PP Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file .FN in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures. .SS History Storage .PP The history list is an array of history entries. A history entry is declared as follows: .PP .Vb "typedef void *" histdata_t; .PP .nf typedef struct _hist_entry { char *line; char *timestamp; histdata_t data; } HIST_ENTRY; .fi .PP The history list itself might therefore be declared as .PP .Vb "HIST_ENTRY **" the_history_list; .PP The state of the History library is encapsulated into a single structure: .PP .nf /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; .fi .PP If the flags member includes \fBHS_STIFLED\fP, the history has been stifled. .SH "History Functions" .PP This section describes the calling sequence for the various functions exported by the GNU History library. .SS Initializing History and State Management This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. .Fn1 void using_history void Begin a session in which the history functions might be used. This initializes the interactive variables. .Fn1 "HISTORY_STATE *" history_get_history_state void Return a structure describing the current state of the input history. .Fn1 void history_set_history_state "HISTORY_STATE *state" Set the state of the history list according to \fIstate\fP. .SS History List Management These functions manage individual entries on the history list, or set parameters managing the list itself. .Fn1 void add_history "const char *string" Place \fIstring\fP at the end of the history list. The associated data field (if any) is set to \fBNULL\fP. .Fn1 void add_history_time "const char *string" Change the time stamp associated with the most recent history entry to \fIstring\fP. .Fn1 "HIST_ENTRY *" remove_history "int which" Remove history entry at offset \fIwhich\fP from the history. The removed element is returned so you can free the line, data, and containing structure. .Fn1 "histdata_t" free_history_entry "HIST_ENTRY *histent" Free the history entry \fIhistent\fP and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. .Fn3 "HIST_ENTRY *" replace_history_entry "int which" "const char *line" "histdata_t data" Make the history entry at offset \fIwhich\fP have \fIline\fP and \fIdata\fP. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid \fIwhich\fP, a \fBNULL\fP pointer is returned. .Fn1 void clear_history "void" Clear the history list by deleting all the entries. .Fn1 void stifle_history "int max" Stifle the history list, remembering only the last \fImax\fP entries. .Fn1 int unstifle_history "void" Stop stifling the history. This returns the previously-set maximum number of history entries (as set by \fBstifle_history()\fP). history was stifled. The value is positive if the history was stifled, negative if it wasn't. .Fn1 int history_is_stifled "void" Returns non-zero if the history is stifled, zero if it is not. .SS Information About the History List These functions return information about the entire history list or individual list entries. .Fn1 "HIST_ENTRY **" history_list "void" Return a \fBNULL\fP terminated array of \fIHIST_ENTRY *\fP which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return \fBNULL\fP. .Fn1 int where_history "void" Returns the offset of the current history element. .Fn1 "HIST_ENTRY *" current_history "void" Return the history entry at the current position, as determined by \fBwhere_history()\fP. If there is no entry there, return a \fBNULL\fP pointer. .Fn1 "HIST_ENTRY *" history_get "int offset" Return the history entry at position \fIoffset\fP, starting from \fBhistory_base\fP. If there is no entry there, or if \fIoffset\fP is greater than the history length, return a \fBNULL\fP pointer. .Fn1 "time_t" history_get_time "HIST_ENTRY *" Return the time stamp associated with the history entry passed as the argument. .Fn1 int history_total_bytes "void" Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history. .SS Moving Around the History List These functions allow the current index into the history list to be set or changed. .Fn1 int history_set_pos "int pos" Set the current history offset to \fIpos\fP, an absolute index into the list. Returns 1 on success, 0 if \fIpos\fP is less than zero or greater than the number of history entries. .Fn1 "HIST_ENTRY *" previous_history "void" Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a \fBNULL\fP pointer. .Fn1 "HIST_ENTRY *" next_history "void" Move the current history offset forward to the next history entry, and return the a pointer to that entry. If there is no next entry, return a \fBNULL\fP pointer. .SS Searching the History List These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be \fIanchored\fP, meaning that the string must match at the beginning of the history entry. .Fn2 int history_search "const char *string" "int direction" Search the history for \fIstring\fP, starting at the current history offset. If \fIdirection\fP is less than 0, then the search is through previous entries, otherwise through subsequent entries. If \fIstring\fP is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where \fIstring\fP was found. Otherwise, nothing is changed, and a -1 is returned. .Fn2 int history_search_prefix "const char *string" "int direction" Search the history for \fIstring\fP, starting at the current history offset. The search is anchored: matching lines must begin with \fIstring\fP. If \fIdirection\fP is less than 0, then the search is through previous entries, otherwise through subsequent entries. If \fIstring\fP is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. .Fn3 int history_search_pos "const char *string" "int direction" "int pos" Search for \fIstring\fP in the history list, starting at \fIpos\fP, an absolute index into the list. If \fIdirection\fP is negative, the search proceeds backward from \fIpos\fP, otherwise forward. Returns the absolute index of the history element where \fIstring\fP was found, or -1 otherwise. .SS Managing the History File The History library can read the history from and write it to a file. This section documents the functions for managing a history file. .Fn1 int read_history "const char *filename" Add the contents of \fIfilename\fP to the history list, a line at a time. If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful, or \fBerrno\fP if not. .Fn3 int read_history_range "const char *filename" "int from" "int to" Read a range of lines from \fIfilename\fP, adding them to the history list. Start reading at line \fIfrom\fP and end at \fIto\fP. If \fIfrom\fP is zero, start at the beginning. If \fIto\fP is less than \fIfrom\fP, then read until the end of the file. If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful, or \fBerrno\fP if not. .Fn1 int write_history "const char *filename" Write the current history to \fIfilename\fP, overwriting \fIfilename\fP if necessary. If \fIfilename\fP is \fBNULL\fP, then write the history list to \fI~/.history\fP. Returns 0 on success, or \fBerrno\fP on a read or write error. .Fn2 int append_history "int nelements" "const char *filename" Append the last \fInelements\fP of the history list to \fIfilename\fP. If \fIfilename\fP is \fBNULL\fP, then append to \fI~/.history\fP. Returns 0 on success, or \fBerrno\fP on a read or write error. .Fn2 int history_truncate_file "const char *filename" "int nlines" Truncate the history file \fIfilename\fP, leaving only the last \fInlines\fP lines. If \fIfilename\fP is \fBNULL\fP, then \fI~/.history\fP is truncated. Returns 0 on success, or \fBerrno\fP on failure. .SS History Expansion These functions implement history expansion. .Fn2 int history_expand "char *string" "char **output" Expand \fIstring\fP, placing the result into \fIoutput\fP, a pointer to a string. Returns: .RS .PD 0 .TP 0 If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); .TP 1 if expansions did take place; .TP -1 if there was an error in expansion; .TP 2 if the returned line should be displayed, but not executed, as with the \fB:p\fP modifier. .PD .RE If an error ocurred in expansion, then \fIoutput\fP contains a descriptive error message. .Fn3 "char *" get_history_event "const char *string" "int *cindex" "int qchar" Returns the text of the history event beginning at \fIstring\fP + \fI*cindex\fP. \fI*cindex\fP is modified to point to after the event specifier. At function entry, \fIcindex\fP points to the index into \fIstring\fP where the history event specification begins. \fIqchar\fP is a character that is allowed to end the event specification in addition to the ``normal'' terminating characters. .Fn1 "char **" history_tokenize "const char *string" Return an array of tokens parsed out of \fIstring\fP, much as the shell might. The tokens are split on the characters in the \fBhistory_word_delimiters\fP variable, and shell quoting conventions are obeyed. .Fn3 "char *" history_arg_extract "int first" "int last" "const char *string" Extract a string segment consisting of the \fIfirst\fP through \fIlast\fP arguments present in \fIstring\fP. Arguments are split using \fBhistory_tokenize()\fP. .SS History Variables This section describes the externally-visible variables exported by the GNU History Library. .Vb int history_base The logical offset of the first entry in the history list. .Vb int history_length The number of entries currently stored in the history list. .Vb int history_max_entries The maximum number of history entries. This must be changed using \fBstifle_history()\fP. .Vb int history_wite_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved. The current timestamp format uses the value of \fIhistory_comment_char\fP to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. .Vb char history_expansion_char The character that introduces a history event. The default is \fB!\fP. Setting this to 0 inhibits history expansion. .Vb char history_subst_char The character that invokes word substitution if found at the start of a line. The default is \fB^\fP. .Vb char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. .Vb "char *" history_word_delimiters The characters that separate tokens for \fBhistory_tokenize()\fP. The default value is \fB"\ \et\en()<>;&|"\fP. .Vb "char *" history_no_expand_chars The list of characters which inhibit history expansion if found immediately following \fBhistory_expansion_char\fP. The default is space, tab, newline, \fB\er\fP, and \fB=\fP. .Vb "char *" history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, tab, \fI:\fP and \fI?\fP in the case of a substring search. The default is empty. .Vb int history_quotes_inhibit_expansion If non-zero, single-quoted words are not scanned for the history expansion character. The default value is 0. .Vb "rl_linebuf_func_t *" history_inhibit_expansion_function This should be set to the address of a function that takes two arguments: a \fBchar *\fP (\fIstring\fP) and an \fBint\fP index into that string (\fIi\fP). It should return a non-zero value if the history expansion starting at \fIstring[i]\fP should not be performed; zero if the expansion should be done. It is intended for use by applications like \fBbash\fP that use the history expansion character for additional purposes. By default, this variable is set to \fBNULL\fP. .SH FILES .PD 0 .TP .FN ~/.history Default filename for reading and writing saved history .PD .SH "SEE ALSO" .PD 0 .TP \fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey .TP \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey .TP \fIbash\fP(1) .TP \fIreadline\fP(3) .PD .SH AUTHORS Brian Fox, Free Software Foundation .br bfox@gnu.org .PP Chet Ramey, Case Western Reserve University .br chet.ramey@case.edu .SH BUG REPORTS If you find a bug in the .B history library, 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 .B history library that you have. .PP Once you have determined that a bug actually exists, mail a bug report to \fIbug\-readline\fP@\fIgnu.org\fP. If you have a fix, you are welcome to mail that as well! Suggestions and `philosophical' bug reports may be mailed to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet newsgroup .BR gnu.bash.bug . .PP Comments and bug reports concerning this manual page should be directed to .IR chet.ramey@case.edu . readline-6.3/doc/texi2dvi0000775000043600000000000005565711050552143014212 0ustar chetwheel#! /bin/sh # texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources. # $Id: texi2dvi,v 1.14 2003/02/05 00:42:33 karl Exp $ # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, # 2002, 2003 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Original author: Noah Friedman . # # Please send bug reports, etc. to bug-texinfo@gnu.org. # If possible, please send a copy of the output of the script called with # the `--debug' option when making a bug report. # This string is expanded by rcs automatically when this file is checked out. rcs_revision='$Revision: 1.14 $' rcs_version=`set - $rcs_revision; echo $2` program=`echo $0 | sed -e 's!.*/!!'` version="texi2dvi (GNU Texinfo 4.5) $rcs_version Copyright (C) 2003 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $program [OPTION]... FILE... Run each Texinfo or LaTeX FILE through TeX in turn until all cross-references are resolved, building all indices. The directory containing each FILE is searched for included files. The suffix of FILE is used to determine its language (LaTeX or Texinfo). Makeinfo is used to perform Texinfo macro expansion before running TeX when needed. Operation modes: -b, --batch no interaction -c, --clean remove all auxiliary files -D, --debug turn on shell debugging (set -x) -h, --help display this help and exit successfully -o, --output=OFILE leave output in OFILE (implies --clean); Only one input FILE may be specified in this case -q, --quiet no output unless errors (implies --batch) -s, --silent same as --quiet -v, --version display version information and exit successfully -V, --verbose report on what is done TeX tuning: -@ use @input instead of \input; for preloaded Texinfo -e, -E, --expand force macro expansion using makeinfo -I DIR search DIR for Texinfo files -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo) -p, --pdf use pdftex or pdflatex for processing -t, --texinfo=CMD insert CMD after @setfilename in copy of input file multiple values accumulate The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO, TEX (or PDFTEX), and TEXINDEX environment variables are used to run those commands, if they are set. Email bug reports to , general questions and discussion to . Texinfo home page: http://www.gnu.org/software/texinfo/" # Initialize variables for option overriding and otherwise. # Don't use `unset' since old bourne shells don't have this command. # Instead, assign them an empty value. batch=false # eval for batch mode clean= debug= escape='\' expand= # t for expansion via makeinfo miincludes= # makeinfo include path oformat=dvi oname= # --output quiet= # by default let the tools' message be displayed set_language= textra= tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems. txincludes= # TEXINPUTS extensions, with trailing colon txiprereq=19990129 # minimum texinfo.tex version to have macro expansion verbose=false # echo for verbose mode orig_pwd=`pwd` # Systems which define $COMSPEC or $ComSpec use semicolons to separate # directories in TEXINPUTS. if test -n "$COMSPEC$ComSpec"; then path_sep=";" else path_sep=":" fi # Pacify verbose cds. CDPATH=${ZSH_VERSION+.}$path_sep # In case someone crazy insists on using grep -E. : ${EGREP=egrep} # Save this so we can construct a new TEXINPUTS path for each file. TEXINPUTS_orig="$TEXINPUTS" # Unfortunately makeindex does not read TEXINPUTS. INDEXSTYLE_orig="$INDEXSTYLE" export TEXINPUTS INDEXSTYLE # Push a token among the arguments that will be used to notice when we # ended options/arguments parsing. # Use "set dummy ...; shift" rather than 'set - ..." because on # Solaris set - turns off set -x (but keeps set -e). # Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3 # still expand "$@" to a single argument (the empty string) rather # than nothing at all. arg_sep="$$--$$" set dummy ${1+"$@"} "$arg_sep"; shift # # Parse command line arguments. while test x"$1" != x"$arg_sep"; do # Handle --option=value by splitting apart and putting back on argv. case "$1" in --*=*) opt=`echo "$1" | sed -e 's/=.*//'` val=`echo "$1" | sed -e 's/[^=]*=//'` shift set dummy "$opt" "$val" ${1+"$@"}; shift ;; esac # This recognizes --quark as --quiet. So what. case "$1" in -@ ) escape=@;; # Silently and without documentation accept -b and --b[atch] as synonyms. -b | --b*) batch=eval;; -q | -s | --q* | --s*) quiet=t; batch=eval;; -c | --c*) clean=t;; -D | --d*) debug=t;; -e | -E | --e*) expand=t;; -h | --h*) echo "$usage"; exit 0;; -I | --I*) shift miincludes="$miincludes -I $1" txincludes="$txincludes$1$path_sep" ;; -l | --l*) shift; set_language=$1;; -o | --o*) shift clean=t case "$1" in /* | ?:/*) oname=$1;; *) oname="$orig_pwd/$1";; esac;; -p | --p*) oformat=pdf;; -t | --t*) shift; textra="$textra\\ $1";; -v | --vers*) echo "$version"; exit 0;; -V | --verb*) verbose=echo;; --) # What remains are not options. shift while test x"$1" != x"$arg_sep"; do set dummy ${1+"$@"} "$1"; shift shift done break;; -*) echo "$0: Unknown or ambiguous option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) set dummy ${1+"$@"} "$1"; shift;; esac shift done # Pop the token shift # Interpret remaining command line args as filenames. case $# in 0) echo "$0: Missing file arguments." >&2 echo "$0: Try \`--help' for more information." >&2 exit 2 ;; 1) ;; *) if test -n "$oname"; then echo "$0: Can't use option \`--output' with more than one argument." >&2 exit 2 fi ;; esac # Prepare the temporary directory. Remove it at exit, unless debugging. if test -z "$debug"; then trap "cd / && rm -rf $tmpdir" 0 1 2 15 fi # Create the temporary directory with strict rights (umask 077 && mkdir $tmpdir) || exit 1 # Prepare the tools we might need. This may be extra work in some # cases, but improves the readibility of the script. utildir=$tmpdir/utils mkdir $utildir || exit 1 # A sed script that preprocesses Texinfo sources in order to keep the # iftex sections only. We want to remove non TeX sections, and # comment (with `@c texi2dvi') TeX sections so that makeinfo does not # try to parse them. Nevertheless, while commenting TeX sections, # don't comment @macro/@end macro so that makeinfo does propagate # them. Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo # doesn't work well enough (yet) to use that, so work around with sed. comment_iftex_sed=$utildir/comment.sed cat <$comment_iftex_sed /^@tex/,/^@end tex/{ s/^/@c texi2dvi/ } /^@iftex/,/^@end iftex/{ s/^/@c texi2dvi/ /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{ s/^@c texi2dvi// } } /^@html/,/^@end html/{ s/^/@c (texi2dvi)/ } /^@ifhtml/,/^@end ifhtml/{ s/^/@c (texi2dvi)/ } /^@ifnottex/,/^@end ifnottex/{ s/^/@c (texi2dvi)/ } /^@ifinfo/,/^@end ifinfo/{ /^@node/p /^@menu/,/^@end menu/p t s/^/@c (texi2dvi)/ } s/^@ifnotinfo/@c texi2dvi@ifnotinfo/ s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/ EOF # Uncommenting is simple: Remove any leading `@c texi2dvi'. uncomment_iftex_sed=$utildir/uncomment.sed cat <$uncomment_iftex_sed s/^@c texi2dvi// EOF # A shell script that computes the list of xref files. # Takes the filename (without extension) of which we look for xref # files as argument. The index files must be reported last. get_xref_files=$utildir/get_xref.sh cat <<\EOF >$get_xref_files #! /bin/sh # Get list of xref files (indexes, tables and lists). # Find all files having root filename with a two-letter extension, # saves the ones that are really Texinfo-related files. .?o? catches # many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more. for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do # If file is empty, skip it. test -s "$this_file" || continue # If the file is not suitable to be an index or xref file, don't # process it. The file can't be if its first character is not a # backslash or single quote. first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file` if test "x$first_character" = "x\\" \ || test "x$first_character" = "x'"; then xref_files="$xref_files ./$this_file" fi done echo "$xref_files" EOF chmod 500 $get_xref_files # File descriptor usage: # 0 standard input # 1 standard output (--verbose messages) # 2 standard error # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 5 tools output (turned off by --quiet) # Tools' output. If quiet, discard, else redirect to the message flow. if test "$quiet" = t; then exec 5>/dev/null else exec 5>&1 fi # Enable tracing test "$debug" = t && set -x # # TeXify files. for command_line_filename in ${1+"$@"}; do $verbose "Processing $command_line_filename ..." # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex), # prepend `./' in order to avoid that the tools take it as an option. echo "$command_line_filename" | $EGREP '^(/|[A-z]:/)' >/dev/null \ || command_line_filename="./$command_line_filename" # See if the file exists. If it doesn't we're in trouble since, even # though the user may be able to reenter a valid filename at the tex # prompt (assuming they're attending the terminal), this script won't # be able to find the right xref files and so forth. if test ! -r "$command_line_filename"; then echo "$0: Could not read $command_line_filename, skipping." >&2 continue fi # Get the name of the current directory. We want the full path # because in clean mode we are in tmp, in which case a relative # path has no meaning. filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'` filename_dir=`cd "$filename_dir" >/dev/null && pwd` # Strip directory part but leave extension. filename_ext=`basename "$command_line_filename"` # Strip extension. filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'` ext=`echo "$filename_ext" | sed 's/^.*\.//'` # _src. Use same basename since we want to generate aux files with # the same basename as the manual. If --expand, then output the # macro-expanded file to here, else copy the original file. tmpdir_src=$tmpdir/src filename_src=$tmpdir_src/$filename_noext.$ext # _xtr. The file with the user's extra commands. tmpdir_xtr=$tmpdir/xtr filename_xtr=$tmpdir_xtr/$filename_noext.$ext # _bak. Copies of the previous xref files (another round is run if # they differ from the new one). tmpdir_bak=$tmpdir/bak # Make all those directories and give up if we can't succeed. mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1 # Source file might include additional sources. # We want `.:$orig_pwd' before anything else. (We'll add `.:' later # after all other directories have been turned into absolute paths.) # `.' goes first to ensure that any old .aux, .cps, # etc. files in ${directory} don't get used in preference to fresher # files in `.'. Include orig_pwd in case we are in clean mode, where # we've cd'd to a temp directory. common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes" TEXINPUTS="$common$TEXINPUTS_orig" INDEXSTYLE="$common$INDEXSTYLE_orig" # Convert relative paths to absolute paths, so we can run in another # directory (e.g., in --clean mode, or during the macro-support # detection.) # # Empty path components are meaningful to tex. We rewrite them # as `EMPTY' so they don't get lost when we split on $path_sep. TEXINPUTS=`echo $TEXINPUTS |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'` INDEXSTYLE=`echo $INDEXSTYLE |sed 's/^:/EMPTY:/;s/:$/:EMPTY/;s/::/:EMPTY:/g'` save_IFS=$IFS IFS=$path_sep set x $TEXINPUTS; shift TEXINPUTS=. for dir do case $dir in EMPTY) TEXINPUTS=$TEXINPUTS$path_sep ;; [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed. TEXINPUTS=$TEXINPUTS$path_sep$dir ;; *) abs=`cd "$dir" && pwd` && TEXINPUTS=$TEXINPUTS$path_sep$abs ;; esac done set x $INDEXSTYLE; shift INDEXSTYLE=. for dir do case $dir in EMPTY) INDEXSTYLE=$INDEXSTYLE$path_sep ;; [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed. INDEXSTYLE=$INDEXSTYLE$path_sep$dir ;; *) abs=`cd "$dir" && pwd` && INDEXSTYLE=$INDEXSTYLE$path_sep$abs ;; esac done IFS=$save_IFS # If the user explicitly specified the language, use that. # Otherwise, if the first line is \input texinfo, assume it's texinfo. # Otherwise, guess from the file extension. if test -n "$set_language"; then language=$set_language elif sed 1q "$command_line_filename" | grep 'input texinfo' >/dev/null; then language=texinfo else language= fi # Get the type of the file (latex or texinfo) from the given language # we just guessed, or from the file extension if not set yet. case ${language:-$filename_ext} in [lL]a[tT]e[xX] | *.ltx | *.tex) # Assume a LaTeX file. LaTeX needs bibtex and uses latex for # compilation. No makeinfo. bibtex=${BIBTEX:-bibtex} makeinfo= # no point in running makeinfo on latex source. texindex=${MAKEINDEX:-makeindex} if test $oformat = dvi; then tex=${LATEX:-latex} else tex=${PDFLATEX:-pdflatex} fi ;; *) # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex. bibtex= texindex=${TEXINDEX:-texindex} if test $oformat = dvi; then tex=${TEX:-tex} else tex=${PDFTEX:-pdftex} fi # Unless required by the user, makeinfo expansion is wanted only # if texinfo.tex is too old. if test "$expand" = t; then makeinfo=${MAKEINFO:-makeinfo} else # Check if texinfo.tex performs macro expansion by looking for # its version. The version is a date of the form YEAR-MO-DA. # We don't need to use [0-9] to match the digits since anyway # the comparison with $txiprereq, a number, will fail with non # digits. txiversion_tex=txiversion.tex echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex # Run in the tmpdir to avoid leaving files. eval `cd $tmpdir >/dev/null && $tex $txiversion_tex 2>/dev/null | sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'` $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..." if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then makeinfo= else makeinfo=${MAKEINFO:-makeinfo} fi # As long as we had to run TeX, offer the user this convenience if test "$txiformat" = Texinfo; then escape=@ fi fi ;; esac # Expand macro commands in the original source file using Makeinfo. # Always use `end' footnote style, since the `separate' style # generates different output (arguably this is a bug in -E). # Discard main info output, the user asked to run TeX, not makeinfo. if test -n "$makeinfo"; then $verbose "Macro-expanding $command_line_filename to $filename_src ..." sed -f $comment_iftex_sed "$command_line_filename" \ | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \ -o /dev/null --macro-expand=- \ | sed -f $uncomment_iftex_sed >"$filename_src" filename_input=$filename_src fi # If makeinfo failed (or was not even run), use the original file as input. if test $? -ne 0 \ || test ! -r "$filename_src"; then $verbose "Reverting to $command_line_filename ..." filename_input=$filename_dir/$filename_ext fi # Used most commonly for @finalout, @smallbook, etc. if test -n "$textra"; then $verbose "Inserting extra commands: $textra" sed '/^@setfilename/a\ '"$textra" "$filename_input" >$filename_xtr filename_input=$filename_xtr fi # If clean mode was specified, then move to the temporary directory. if test "$clean" = t; then $verbose "cd $tmpdir_src" cd "$tmpdir_src" || exit 1 fi while :; do # will break out of loop below orig_xref_files=`$get_xref_files "$filename_noext"` # Save copies of originals for later comparison. if test -n "$orig_xref_files"; then $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`" cp $orig_xref_files $tmpdir_bak fi # Run bibtex on current file. # - If its input (AUX) exists. # - If AUX contains both `\bibdata' and `\bibstyle'. # - If some citations are missing (LOG contains `Citation'). # or the LOG complains of a missing .bbl # # We run bibtex first, because I can see reasons for the indexes # to change after bibtex is run, but I see no reason for the # converse. # # Don't try to be too smart. Running bibtex only if the bbl file # exists and is older than the LaTeX file is wrong, since the # document might include files that have changed. Because there # can be several AUX (if there are \include's), but a single LOG, # looking for missing citations in LOG is easier, though we take # the risk to match false messages. if test -n "$bibtex" \ && test -r "$filename_noext.aux" \ && test -r "$filename_noext.log" \ && (grep '^\\bibdata[{]' "$filename_noext.aux" \ && grep '^\\bibstyle[{]' "$filename_noext.aux" \ && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \ || grep 'No file .*\.bbl\.' "$filename_noext.log")) \ >/dev/null 2>&1; \ then $verbose "Running $bibtex $filename_noext ..." if $bibtex "$filename_noext" >&5; then :; else echo "$0: $bibtex exited with bad status, quitting." >&2 exit 1 fi fi # What we'll run texindex on -- exclude non-index files. # Since we know index files are last, it is correct to remove everything # before .aux and .?o?. But don't really do o # -- don't match whitespace as . # Otherwise, if orig_xref_files contains something like # foo.xo foo.whatever # the space after the o will get matched. index_files=`echo "$orig_xref_files" \ | sed "s!.*\.aux!!g; s!./$filename_noext\.[^ ]o[^ ]!!g; s/^[ ]*//;s/[ ]*$//"` # Run texindex (or makeindex) on current index files. If they # already exist, and after running TeX a first time the index # files don't change, then there's no reason to run TeX again. # But we won't know that if the index files are out of date or # nonexistent. if test -n "$texindex" && test -n "$index_files"; then $verbose "Running $texindex $index_files ..." if $texindex $index_files 2>&5 1>&2; then :; else echo "$0: $texindex exited with bad status, quitting." >&2 exit 1 fi fi # Finally, run TeX. # Prevent $ESCAPE from being interpreted by the shell if it happens # to be `/'. $batch tex_args="\\${escape}nonstopmode\ \\${escape}input" cmd="$tex $tex_args $filename_input" $verbose "Running $cmd ..." if $cmd >&5; then :; else echo "$0: $tex exited with bad status, quitting." >&2 echo "$0: see $filename_noext.log for errors." >&2 test "$clean" = t \ && cp "$filename_noext.log" "$orig_pwd" exit 1 fi # Decide if looping again is needed. finished=t # LaTeX (and the package changebar) report in the LOG file if it # should be rerun. This is needed for files included from # subdirs, since texi2dvi does not try to compare xref files in # subdirs. Performing xref files test is still good since LaTeX # does not report changes in xref files. if grep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then finished= fi # Check if xref files changed. new_xref_files=`$get_xref_files "$filename_noext"` $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`" $verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`" # If old and new lists don't at least have the same file list, # then one file or another has definitely changed. test "x$orig_xref_files" != "x$new_xref_files" && finished= # File list is the same. We must compare each file until we find # a difference. if test -n "$finished"; then for this_file in $new_xref_files; do $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..." # cmp -s returns nonzero exit status if files differ. if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else # We only need to keep comparing until we find one that # differs, because we'll have to run texindex & tex again no # matter how many more there might be. finished= $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..." test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file" break fi done fi # If finished, exit the loop, else rerun the loop. test -n "$finished" && break done # If we were in clean mode, compilation was in a tmp directory. # Copy the DVI (or PDF) file into the directory where the compilation # has been done. (The temp dir is about to get removed anyway.) # We also return to the original directory so that # - the next file is processed in correct conditions # - the temporary file can be removed if test -n "$clean"; then if test -n "$oname"; then dest=$oname else dest=$orig_pwd fi $verbose "Copying $oformat file from `pwd` to $dest" cp -p "./$filename_noext.$oformat" "$dest" cd / # in case $orig_pwd is on a different drive (for DOS) cd $orig_pwd || exit 1 fi # Remove temporary files. if test "x$debug" = "x"; then $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..." cd / rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak fi done $verbose "$0 done." exit 0 # exit successfully, not however we ended the loop. readline-6.3/doc/texi2html0000755000043600000000000042455411050552171014367 0ustar chetwheel#! /usr/bin/perl 'di '; 'ig 00 '; #+############################################################################## # # texi2html: Program to transform Texinfo documents to HTML # # Copyright (C) 1999, 2000 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # #-############################################################################## # This requires perl version 5 or higher require 5.0; #++############################################################################## # # NOTE FOR DEBUGGING THIS SCRIPT: # You can run 'perl texi2html.pl' directly, provided you have # the environment variable T2H_HOME set to the directory containing # the texi2html.init file # #--############################################################################## # CVS version: # $Id: texi2html.pl,v 1.55 2000/07/27 14:39:41 obachman Exp $ # Homepage: $T2H_HOMEPAGE = < (original author) Karl Berry Olaf Bachmann and many others. Maintained by: Olaf Bachmann Send bugs and suggestions to EOT # Version: set in configure.in $THISVERSION = '1.64'; $THISPROG = "texi2html $THISVERSION"; # program name and version # The man page for this program is included at the end of this file and can be # viewed using the command 'nroff -man texi2html'. # Identity: $T2H_TODAY = &pretty_date; # like "20 September 1993" # the eval prevents this from breaking on system which do not have # a proper getpwuid implemented eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i #+++############################################################################ # # # Initialization # # Pasted content of File $(srcdir)/texi2html.init: Default initializations # # # #---############################################################################ # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init # exists. # # -*-perl-*- ###################################################################### # File: texi2html.init # # Sets default values for command-line arguments and for various customizable # procedures # # A copy of this file is pasted into the beginning of texi2html by # 'make texi2html' # # Copy this file and make changes to it, if you like. # Afterwards, either, load it with command-line option -init_file # # $Id: texi2html.init,v 1.34 2000/07/27 14:09:02 obachman Exp $ ###################################################################### # stuff which can also be set by command-line options # # # Note: values set here, overwrite values set by the command-line # options before -init_file and might still be overwritten by # command-line arguments following the -init_file option # # T2H_OPTIONS is a hash whose keys are the (long) names of valid # command-line options and whose values are a hash with the following keys: # type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info) # linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info) # verbose ==> short description of option (displayed by -h) # noHelp ==> if 1 -> for "not so important options": only print description on -h 1 # 2 -> for obsolete options: only print description on -h 2 $T2H_DEBUG = 0; $T2H_OPTIONS -> {debug} = { type => '=i', linkage => \$main::T2H_DEBUG, verbose => 'output HTML with debuging information', }; $T2H_DOCTYPE = ''; $T2H_OPTIONS -> {doctype} = { type => '=s', linkage => \$main::T2H_DOCTYPE, verbose => 'document type which is output in header of HTML files', noHelp => 1 }; $T2H_CHECK = 0; $T2H_OPTIONS -> {check} = { type => '!', linkage => \$main::T2H_CHECK, verbose => 'if set, only check files and output all things that may be Texinfo commands', noHelp => 1 }; # -expand # if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections # else, neither expand @iftex, @tex, nor @ifinfo sections $T2H_EXPAND = "info"; $T2H_OPTIONS -> {expand} = { type => '=s', linkage => \$T2H_EXPAND, verbose => 'Expand info|tex|none section of texinfo source', }; # - glossary #if set, uses section named `Footnotes' for glossary $T2H_USE_GLOSSARY = 0; T2H_OPTIONS -> {glossary} = { type => '!', linkage => \$T2H_USE_GLOSSARY, verbose => "if set, uses section named `Footnotes' for glossary", noHelp => 1, }; # -invisible # $T2H_INVISIBLE_MARK is the text used to create invisible destination # anchors for index links (you can for instance use the invisible.xbm # file shipped with this program). This is a workaround for a known # bug of many WWW browsers, including netscape. # For me, it works fine without it -- on the contrary: if there, it # inserts space between headers and start of text (obachman 3/99) $T2H_INVISIBLE_MARK = ''; # $T2H_INVISIBLE_MARK = ' '; $T2H_OPTIONS -> {invisible} = { type => '=s', linkage => \$T2H_INVISIBLE_MARK, verbose => 'use text in invisble anchot', noHelp => 1, }; # -iso # if set, ISO8879 characters are used for special symbols (like copyright, etc) $T2H_USE_ISO = 0; $T2H_OPTIONS -> {iso} = { type => 'iso', linkage => \$T2H_USE_ISO, verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)', noHelp => 1, }; # -I # list directories where @include files are searched for (besides the # directory of the doc file) additional '-I' args add to this list @T2H_INCLUDE_DIRS = ("."); $T2H_OPTIONS -> {I} = { type => '=s', linkage => \@T2H_INCLUDE_DIRS, verbose => 'append $s to the @include search path', }; # -top_file # uses file of this name for top-level file # extension is manipulated appropriately, if necessary. # If empty, .html is used # Typically, you would set this to "index.html". $T2H_TOP_FILE = ''; $T2H_OPTIONS -> {top_file} = { type => '=s', linkage => \$T2H_TOP_FILE, verbose => 'use $s as top file, instead of .html', }; # -toc_file # uses file of this name for table of contents file # extension is manipulated appropriately, if necessary. # If empty, _toc.html is used $T2H_TOC_FILE = ''; $T2H_OPTIONS -> {toc_file} = { type => '=s', linkage => \$T2H_TOC_FILE, verbose => 'use $s as ToC file, instead of _toc.html', }; # -frames # if set, output two additional files which use HTML 4.0 "frames". $T2H_FRAMES = 0; $T2H_OPTIONS -> {frames} = { type => '!', linkage => \$T2H_FRAMES, verbose => 'output files which use HTML 4.0 frames (experimental)', noHelp => 1, }; # -menu | -nomenu # if set, show the Texinfo menus $T2H_SHOW_MENU = 1; $T2H_OPTIONS -> {menu} = { type => '!', linkage => \$T2H_SHOW_MENU, verbose => 'ouput Texinfo menus', }; # -number | -nonumber # if set, number sections and show section names and numbers in references # and menus $T2H_NUMBER_SECTIONS = 1; $T2H_OPTIONS -> {number} = { type => '!', linkage => \$T2H_NUMBER_SECTIONS, verbose => 'use numbered sections' }; # if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu # entries, instead of section names $T2H_NODE_NAME_IN_MENU = 0; # if set and menu entry equals menu descr, then do not print menu descr. # Likewise, if node name equals entry name, do not print entry name. $T2H_AVOID_MENU_REDUNDANCY = 1; # -split section|chapter|none # if set to 'section' (resp. 'chapter') create one html file per (sub)section # (resp. chapter) and separate pages for Top, ToC, Overview, Index, # Glossary, About. # otherwise, create monolithic html file which contains whole document #$T2H_SPLIT = 'section'; $T2H_SPLIT = ''; $T2H_OPTIONS -> {split} = { type => '=s', linkage => \$T2H_SPLIT, verbose => 'split document on section|chapter else no splitting', }; # -section_navigation|-no-section_navigation # if set, then navigation panels are printed at the beginning of each section # and, possibly at the end (depending on whether or not there were more than # $T2H_WORDS_IN_PAGE words on page # This is most useful if you do not want to have section navigation # on -split chapter $T2H_SECTION_NAVIGATION = 1; $T2H_OPTIONS -> {sec_nav} = { type => '!', linkage => \$T2H_SECTION_NAVIGATION, verbose => 'output navigation panels for each section', }; # -subdir # if set put result files in this directory # if not set result files are put into current directory #$T2H_SUBDIR = 'html'; $T2H_SUBDIR = ''; $T2H_OPTIONS -> {subdir} = { type => '=s', linkage => \$T2H_SUBDIR, verbose => 'put HTML files in directory $s, instead of $cwd', }; # -short_extn # If this is set all HTML file will have extension ".htm" instead of # ".html". This is helpful when shipping the document to PC systems. $T2H_SHORTEXTN = 0; $T2H_OPTIONS -> {short_ext} = { type => '!', linkage => \$T2H_SHORTEXTN, verbose => 'use "htm" extension for output HTML files', }; # -prefix # Set the output file prefix, prepended to all .html, .gif and .pl files. # By default, this is the basename of the document $T2H_PREFIX = ''; $T2H_OPTIONS -> {prefix} = { type => '=s', linkage => \$T2H_PREFIX, verbose => 'use as prefix for output files, instead of ', }; # -o filename # If set, generate monolithic document output html into $filename $T2H_OUT = ''; $T2H_OPTIONS -> {out_file} = { type => '=s', linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, verbose => 'if set, all HTML output goes into file $s', }; # -short_ref #if set cross-references are given without section numbers $T2H_SHORT_REF = ''; $T2H_OPTIONS -> {short_ref} = { type => '!', linkage => \$T2H_SHORT_REF, verbose => 'if set, references are without section numbers', }; # -idx_sum # if value is set, then for each @prinindex $what # $docu_name_$what.idx is created which contains lines of the form # $key\t$ref sorted alphabetically (case matters) $T2H_IDX_SUMMARY = 0; $T2H_OPTIONS -> {idx_sum} = { type => '!', linkage => \$T2H_IDX_SUMMARY, verbose => 'if set, also output index summary', noHelp => 1, }; # -verbose # if set, chatter about what we are doing $T2H_VERBOSE = ''; $T2H_OPTIONS -> {Verbose} = { type => '!', linkage => \$T2H_VERBOSE, verbose => 'print progress info to stdout', }; # -lang # For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title. # To add a new language, supply list of titles (see $T2H_WORDS below). # and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02 # for definitions) # Default's to 'en' if not set or no @documentlanguage is specified $T2H_LANG = ''; $T2H_OPTIONS -> {lang} = { type => '=s', linkage => sub {SetDocumentLanguage($_[1])}, verbose => 'use $s as document language (ISO 639 encoding)', }; # -l2h # if set, uses latex2html for generation of math content $T2H_L2H = ''; $T2H_OPTIONS -> {l2h} = { type => '!', linkage => \$T2H_L2H, verbose => 'if set, uses latex2html for @math and @tex', }; ###################### # The following options are only relevant if $T2H_L2H is set # # -l2h_l2h # name/location of latex2html progam $T2H_L2H_L2H = "latex2html"; $T2H_OPTIONS -> {l2h_l2h} = { type => '=s', linkage => \$T2H_L2H_L2H, verbose => 'program to use for latex2html translation', noHelp => 1, }; # -l2h_skip # if set, skips actual call to latex2html tries to reuse previously generated # content, instead $T2H_L2H_SKIP = ''; $T2H_OPTIONS -> {l2h_skip} = { type => '!', linkage => \$T2H_L2H_SKIP, verbose => 'if set, tries to reuse previously latex2html output', noHelp => 1, }; # -l2h_tmp # if set, l2h uses this directory for temporarary files. The path # leading to this directory may not contain a dot (i.e., a "."), # otherwise, l2h will fail $T2H_L2H_TMP = ''; $T2H_OPTIONS -> {l2h_tmp} = { type => '=s', linkage => \$T2H_L2H_TMP, verbose => 'if set, uses $s as temporary latex2html directory', noHelp => 1, }; # if set, cleans intermediate files (they all have the prefix $doc_l2h_) # of l2h $T2H_L2H_CLEAN = 1; $T2H_OPTIONS -> {l2h_clean} = { type => '!', linkage => \$T2H_L2H_CLEAN, verbose => 'if set, do not keep intermediate latex2html files for later reuse', noHelp => 1, }; $T2H_OPTIONS -> {D} = { type => '=s', linkage => sub {$main::value{@_[1]} = 1;}, verbose => 'equivalent to Texinfo "@set $s 1"', noHelp => 1, }; $T2H_OPTIONS -> {init_file} = { type => '=s', linkage => \&LoadInitFile, verbose => 'load init file $s' }; ############################################################################## # # The following can only be set in the init file # ############################################################################## # if set, center @image by default # otherwise, do not center by default $T2H_CENTER_IMAGE = 1; # used as identation for block enclosing command @example, etc # If not empty, must be enclosed in $T2H_EXAMPLE_INDENT_CELL = ' '; # same as above, only for @small $T2H_SMALL_EXAMPLE_INDENT_CELL = ' '; # font size for @small $T2H_SMALL_FONT_SIZE = '-1'; # if non-empty, and no @..heading appeared in Top node, then # use this as header for top node/section, otherwise use value of # @settitle or @shorttitle (in that order) $T2H_TOP_HEADING = ''; # if set, use this chapter for 'Index' button, else # use first chapter whose name matches 'index' (case insensitive) $T2H_INDEX_CHAPTER = ''; # if set and $T2H_SPLIT is set, then split index pages at the next letter # after they have more than that many entries $T2H_SPLIT_INDEX = 100; # if set (e.g., to index.html) replace hrefs to this file # (i.e., to index.html) by ./ $T2H_HREF_DIR_INSTEAD_FILE = ''; ######################################################################## # Language dependencies: # To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash # To redefine one word, simply do: # $T2H_WORDS->{}->{} = 'whatever' in your personal init file. # $T2H_WORDS_EN = { # titles of pages 'ToC_Title' => 'Table of Contents', 'Overview_Title' => 'Short Table of Contents', 'Index_Title' => 'Index', 'About_Title' => 'About this document', 'Footnotes_Title' => 'Footnotes', 'See' => 'See', 'see' => 'see', 'section' => 'section', # If necessary, we could extend this as follows: # # text for buttons # 'Top_Button' => 'Top', # 'ToC_Button' => 'Contents', # 'Overview_Button' => 'Overview', # 'Index_button' => 'Index', # 'Back_Button' => 'Back', # 'FastBack_Button' => 'FastBack', # 'Prev_Button' => 'Prev', # 'Up_Button' => 'Up', # 'Next_Button' => 'Next', # 'Forward_Button' =>'Forward', # 'FastWorward_Button' => 'FastForward', # 'First_Button' => 'First', # 'Last_Button' => 'Last', # 'About_Button' => 'About' }; $T2H_WORD_DE = { 'ToC_Title' => 'Inhaltsverzeichniss', 'Overview_Title' => 'Kurzes Inhaltsverzeichniss', 'Index_Title' => 'Index', 'About_Title' => 'Über dieses Dokument', 'Footnotes_Title' => 'Fußnoten', 'See' => 'Siehe', 'see' => 'siehe', 'section' => 'Abschnitt', }; $T2H_WORD_NL = { 'ToC_Title' => 'Inhoudsopgave', 'Overview_Title' => 'Korte inhoudsopgave', 'Index_Title' => 'Index', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'No translation available!', #No translation available! 'See' => 'Zie', 'see' => 'zie', 'section' => 'sectie', }; $T2H_WORD_ES = { 'ToC_Title' => 'índice General', 'Overview_Title' => 'Resumen del Contenido', 'Index_Title' => 'Index', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'Fußnoten', 'See' => 'Véase', 'see' => 'véase', 'section' => 'sección', }; $T2H_WORD_NO = { 'ToC_Title' => 'Innholdsfortegnelse', 'Overview_Title' => 'Kort innholdsfortegnelse', 'Index_Title' => 'Indeks', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'No translation available!', 'See' => 'Se', 'see' => 'se', 'section' => 'avsnitt', }; $T2H_WORD_PT = { 'ToC_Title' => 'Sumário', 'Overview_Title' => 'Breve Sumário', 'Index_Title' => 'Índice', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'No translation available!', 'See' => 'Veja', 'see' => 'veja', 'section' => 'Seção', }; $T2H_WORDS = { 'en' => $T2H_WORDS_EN, 'de' => $T2H_WORDS_DE, 'nl' => $T2H_WORDS_NL, 'es' => $T2H_WORDS_ES, 'no' => $T2H_WORDS_NO, 'pt' => $T2H_WORDS_PT }; @MONTH_NAMES_EN = ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ); @MONTH_NAMES_DE = ( 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ); @MONTH_NAMES_NL = ( 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December' ); @MONTH_NAMES_ES = ( 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre' ); @MONTH_NAMES_NO = ( 'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember' ); @MONTH_NAMES_PT = ( 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ); $MONTH_NAMES = { 'en' => \@MONTH_NAMES_EN, 'de' => \@MONTH_NAMES_DE, 'es' => \@MONTH_NAMES_ES, 'nl' => \@MONTH_NAMES_NL, 'no' => \@MONTH_NAMES_NO, 'pt' => \@MONTH_NAMES_PT }; ######################################################################## # Control of Page layout: # You can make changes of the Page layout at two levels: # 1.) For small changes, it is often enough to change the value of # some global string/hash/array variables # 2.) For larger changes, reimplement one of the T2H_DEFAULT_* routines, # give them another name, and assign them to the respective # $T2H_ variable. # As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold # href, html-name, node-name of # This -- current section (resp. html page) # Top -- top page ($T2H_TOP_FILE) # Contents -- Table of contents # Overview -- Short table of contents # Index -- Index page # About -- page which explain "navigation buttons" # First -- first node # Last -- last node # # Whether or not the following hash values are set, depends on the context # (all values are w.r.t. 'This' section) # Next -- next node of texinfo # Prev -- previous node of texinfo # Up -- up node of texinfo # Forward -- next node in reading order # Back -- previous node in reading order # FastForward -- if leave node, up and next, else next node # FastBackward-- if leave node, up and prev, else prev node # # Furthermore, the following global variabels are set: # $T2H_THISDOC{title} -- title as set by @setttile # $T2H_THISDOC{fulltitle} -- full title as set by @title... # $T2H_THISDOC{subtitle} -- subtitle as set by @subtitle # $T2H_THISDOC{author} -- author as set by @author # # and pointer to arrays of lines which need to be printed by t2h_print_lines # $T2H_OVERVIEW -- lines of short table of contents # $T2H_TOC -- lines of table of contents # $T2H_TOP -- lines of Top texinfo node # $T2H_THIS_SECTION -- lines of 'This' section # # There are the following subs which control the layout: # $T2H_print_section = \&T2H_DEFAULT_print_section; $T2H_print_Top_header = \&T2H_DEFAULT_print_Top_header; $T2H_print_Top_footer = \&T2H_DEFAULT_print_Top_footer; $T2H_print_Top = \&T2H_DEFAULT_print_Top; $T2H_print_Toc = \&T2H_DEFAULT_print_Toc; $T2H_print_Overview = \&T2H_DEFAULT_print_Overview; $T2H_print_Footnotes = \&T2H_DEFAULT_print_Footnotes; $T2H_print_About = \&T2H_DEFAULT_print_About; $T2H_print_misc_header = \&T2H_DEFAULT_print_misc_header; $T2H_print_misc_footer = \&T2H_DEFAULT_print_misc_footer; $T2H_print_misc = \&T2H_DEFAULT_print_misc; $T2H_print_chapter_header = \&T2H_DEFAULT_print_chapter_header; $T2H_print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer; $T2H_print_page_head = \&T2H_DEFAULT_print_page_head; $T2H_print_page_foot = \&T2H_DEFAULT_print_page_foot; $T2H_print_head_navigation = \&T2H_DEFAULT_print_head_navigation; $T2H_print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation; $T2H_button_icon_img = \&T2H_DEFAULT_button_icon_img; $T2H_print_navigation = \&T2H_DEFAULT_print_navigation; $T2H_about_body = \&T2H_DEFAULT_about_body; $T2H_print_frame = \&T2H_DEFAULT_print_frame; $T2H_print_toc_frame = \&T2H_DEFAULT_print_toc_frame; ######################################################################## # Layout for html for every sections # sub T2H_DEFAULT_print_section { my $fh = shift; local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS; &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION; my $nw = t2h_print_lines($fh); if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION) { &$T2H_print_foot_navigation($fh, $nw); } else { print $fh '
' . "\n"; } } ################################################################### # Layout of top-page I recommend that you use @ifnothtml, @ifhtml, # @html within the Top texinfo node to specify content of top-level # page. # # If you enclose everything in @ifnothtml, then title, subtitle, # author and overview is printed # T2H_HREF of Next, Prev, Up, Forward, Back are not defined # if $T2H_SPLIT then Top page is in its own html file sub T2H_DEFAULT_print_Top_header { &$T2H_print_page_head(@_) if $T2H_SPLIT; t2h_print_label(@_); # this needs to be called, otherwise no label set &$T2H_print_head_navigation(@_); } sub T2H_DEFAULT_print_Top_footer { &$T2H_print_foot_navigation(@_); &$T2H_print_page_foot(@_) if $T2H_SPLIT; } sub T2H_DEFAULT_print_Top { my $fh = shift; # for redefining navigation buttons use: # local $T2H_BUTTONS = [...]; # as it is, 'Top', 'Contents', 'Index', 'About' are printed local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; &$T2H_print_Top_header($fh); if ($T2H_THIS_SECTION) { # if top-level node has content, then print it with extra header print $fh "

$T2H_NAME{Top}

" unless ($T2H_HAS_TOP_HEADING); t2h_print_lines($fh, $T2H_THIS_SECTION) } else { # top-level node is fully enclosed in @ifnothtml # print fulltitle, subtitle, author, Overview print $fh "
\n

" . join("

\n

", split(/\n/, $T2H_THISDOC{fulltitle})) . "

\n"; print $fh "

$T2H_THISDOC{subtitle}

\n" if $T2H_THISDOC{subtitle}; print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author}; print $fh <

Overview:

EOT t2h_print_lines($fh, $T2H_OVERVIEW); print $fh "
\n"; } &$T2H_print_Top_footer($fh); } ################################################################### # Layout of Toc, Overview, and Footnotes pages # By default, we use "normal" layout # T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined # use: local $T2H_BUTTONS = [...] to redefine navigation buttons sub T2H_DEFAULT_print_Toc { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_Overview { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_Footnotes { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_About { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_misc_header { &$T2H_print_page_head(@_) if $T2H_SPLIT; # this needs to be called, otherwise, no labels are set t2h_print_label(@_); &$T2H_print_head_navigation(@_); } sub T2H_DEFAULT_print_misc_footer { &$T2H_print_foot_navigation(@_); &$T2H_print_page_foot(@_) if $T2H_SPLIT; } sub T2H_DEFAULT_print_misc { my $fh = shift; local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; &$T2H_print_misc_header($fh); print $fh "

$T2H_NAME{This}

\n"; t2h_print_lines($fh); &$T2H_print_misc_footer($fh); } ################################################################### # chapter_header and chapter_footer are only called if # T2H_SPLIT eq 'chapter' # chapter_header: after print_page_header, before print_section # chapter_footer: after print_section of last section, before print_page_footer # # If you want to get rid of navigation stuff after each section, # redefine print_section such that it does not call print_navigation, # and put print_navigation into print_chapter_header @T2H_CHAPTER_BUTTONS = ( 'FastBack', 'FastForward', ' ', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', ); sub T2H_DEFAULT_print_chapter_header { # nothing to do there, by default if (! $T2H_SECTION_NAVIGATION) { my $fh = shift; local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; &$T2H_print_navigation($fh); print $fh "\n
\n"; } } sub T2H_DEFAULT_print_chapter_footer { local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; &$T2H_print_navigation(@_); } ################################################################### $T2H_TODAY = &pretty_date; # like "20 September 1993" sub pretty_date { local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += ($year < 70) ? 2000 : 1900; # obachman: Let's do it as the Americans do return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year); } ################################################################### # Layout of standard header and footer # # Set the default body text, inserted between ###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; $T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; # text inserted after $T2H_AFTER_BODY_OPEN = ''; #text inserted before $T2H_PRE_BODY_CLOSE = ''; # this is used in footer $T2H_ADDRESS = "by $T2H_USER " if $T2H_USER; $T2H_ADDRESS .= "on $T2H_TODAY"; # this is added inside after and some META NAME stuff # can be used for <style> <script>, <meta> tags $T2H_EXTRA_HEAD = ''; sub T2H_DEFAULT_print_page_head { my $fh = shift; my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}"; print $fh <<EOT; <HTML> $T2H_DOCTYPE <!-- Created on $T2H_TODAY by $THISPROG --> <!-- $T2H_AUTHORS --> <HEAD> <TITLE>$longtitle $T2H_EXTRA_HEAD $T2H_AFTER_BODY_OPEN EOT } sub T2H_DEFAULT_print_page_foot { my $fh = shift; print $fh < This document was generated $T2H_ADDRESS using texi2html $T2H_PRE_BODY_CLOSE EOT } ################################################################### # Layout of navigation panel # if this is set, then a vertical navigation panel is used $T2H_VERTICAL_HEAD_NAVIGATION = 0; sub T2H_DEFAULT_print_head_navigation { my $fh = shift; if ($T2H_VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION); if ($T2H_VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } elsif ($T2H_SPLIT eq 'section') { print $fh "
\n"; } } # Specifies the minimum page length required before a navigation panel # is placed at the bottom of a page (the default is that of latex2html) # T2H_THIS_WORDS_IN_PAGE holds number of words of current page $T2H_WORDS_IN_PAGE = 300; sub T2H_DEFAULT_print_foot_navigation { my $fh = shift; my $nwords = shift; if ($T2H_VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } print $fh "
\n"; &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE) } ###################################################################### # navigation panel # # specify in this array which "buttons" should appear in which order # in the navigation panel for sections; use ' ' for empty buttons (space) @T2H_SECTION_BUTTONS = ( 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', ); # buttons for misc stuff @T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About'); # insert here name of icon images for buttons # Icons are used, if $T2H_ICONS and resp. value are set %T2H_ACTIVE_ICONS = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'Back', '', 'FastBack', '', 'Prev', '', 'Up', '', 'Next', '', 'Forward', '', 'FastForward', '', 'About' , '', 'First', '', 'Last', '', ' ', '' ); # insert here name of icon images for these, if button is inactive %T2H_PASSIVE_ICONS = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'Back', '', 'FastBack', '', 'Prev', '', 'Up', '', 'Next', '', 'Forward', '', 'FastForward', '', 'About', '', 'First', '', 'Last', '', ); # how to create IMG tag sub T2H_DEFAULT_button_icon_img { my $button = shift; my $icon = shift; my $name = shift; return qq{$button: $name}; } # Names of text as alternative for icons %T2H_NAVIGATION_TEXT = ( 'Top', 'Top', 'Contents', 'Contents', 'Overview', 'Overview', 'Index', 'Index', ' ', '   ', 'Back', ' < ', 'FastBack', ' << ', 'Prev', 'Prev', 'Up', ' Up ', 'Next', 'Next', 'Forward', ' > ', 'FastForward', ' >> ', 'About', ' ? ', 'First', ' |< ', 'Last', ' >| ' ); sub T2H_DEFAULT_print_navigation { my $fh = shift; my $vertical = shift; my $spacing = 1; print $fh "\n"; print $fh "" unless $vertical; for $button (@$T2H_BUTTONS) { print $fh qq{\n} if $vertical; print $fh qq{\n"; print $fh "\n" if $vertical; } print $fh "" unless $vertical; print $fh "
}; if (ref($button) eq 'CODE') { &$button($fh, $vertical); } elsif ($button eq ' ') { # handle space button print $fh $T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ? &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) : $T2H_NAVIGATION_TEXT{' '}; next; } elsif ($T2H_HREF{$button}) { # button is active print $fh $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ? t2h_anchor('', $T2H_HREF{$button}, # yes &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}, $T2H_NAME{$button})) : # use text "[" . t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) . "]"; } else { # button is passive print $fh $T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ? &$T2H_button_icon_img($button, $T2H_PASSIVE_ICONS{$button}, $T2H_NAME{$button}) : "[" . $T2H_NAVIGATION_TEXT{$button} . "]"; } print $fh "
\n"; } ###################################################################### # Frames: this is from "Richard Y. Kim" # Should be improved to be more conforming to other _print* functions sub T2H_DEFAULT_print_frame { my $fh = shift; print $fh < $T2H_THISDOC{title} EOT } sub T2H_DEFAULT_print_toc_frame { my $fh = shift; &$T2H_print_page_head($fh); print $fh <Content EOT print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines; print $fh "\n"; } ###################################################################### # About page # # T2H_PRE_ABOUT might be a function $T2H_PRE_ABOUT = <texi2html

EOT $T2H_AFTER_ABOUT = ''; sub T2H_DEFAULT_about_body { my $about; if (ref($T2H_PRE_ABOUT) eq 'CODE') { $about = &$T2H_PRE_ABOUT(); } else { $about = $T2H_PRE_ABOUT; } $about .= <

EOT for $button (@T2H_SECTION_BUTTONS) { next if $button eq ' ' || ref($button) eq 'CODE'; $about .= < EOT } $about .= <

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
  • 1. Section One
    • 1.1 Subsection One-One
      • ...
    • 1.2 Subsection One-Two
      • 1.2.1 Subsubsection One-Two-One
      • 1.2.2 Subsubsection One-Two-Two
      • 1.2.3 Subsubsection One-Two-Three     <== Current Position
      • 1.2.4 Subsubsection One-Two-Four
    • 1.3 Subsection One-Three
      • ...
    • 1.4 Subsection One-Four
$T2H_AFTER_ABOUT EOT return $about; } %T2H_BUTTONS_GOTO = ( 'Top', 'cover (top) of document', 'Contents', 'table of contents', 'Overview', 'short table of contents', 'Index', 'concept index', 'Back', 'previous section in reading order', 'FastBack', 'previous or up-and-previous section ', 'Prev', 'previous section same level', 'Up', 'up section', 'Next', 'next section same level', 'Forward', 'next section in reading order', 'FastForward', 'next or up-and-next section', 'About' , 'this page', 'First', 'first section in reading order', 'Last', 'last section in reading order', ); %T2H_BUTTONS_EXAMPLE = ( 'Top', '   ', 'Contents', '   ', 'Overview', '   ', 'Index', '   ', 'Back', '1.2.2', 'FastBack', '1.1', 'Prev', '1.2.2', 'Up', '1.2', 'Next', '1.2.4', 'Forward', '1.2.4', 'FastForward', '1.3', 'About', '   ', 'First', '1.', 'Last', '1.2.4', ); ###################################################################### # from here on, its l2h init stuff # ## initialization for latex2html as for Singular manual generation ## obachman 3/99 # # Options controlling Titles, File-Names, Tracing and Sectioning # $TITLE = ''; $SHORTEXTN = 0; $LONG_TITLES = 0; $DESTDIR = ''; # should be overwritten by cmd-line argument $NO_SUBDIR = 0;# should be overwritten by cmd-line argument $PREFIX = ''; # should be overwritten by cmd-line argument $AUTO_PREFIX = 0; # this is needed, so that prefix settings are used $AUTO_LINK = 0; $SPLIT = 0; $MAX_LINK_DEPTH = 0; $TMP = ''; # should be overwritten by cmd-line argument $DEBUG = 0; $VERBOSE = 1; # # Options controlling Extensions and Special Features # $HTML_VERSION = "3.2"; $TEXDEFS = 1; # we absolutely need that $EXTERNAL_FILE = ''; $SCALABLE_FONTS = 1; $NO_SIMPLE_MATH = 1; $LOCAL_ICONS = 1; $SHORT_INDEX = 0; $NO_FOOTNODE = 1; $ADDRESS = ''; $INFO = ''; # # Switches controlling Image Generation # $ASCII_MODE = 0; $NOLATEX = 0; $EXTERNAL_IMAGES = 0; $PS_IMAGES = 0; $NO_IMAGES = 0; $IMAGES_ONLY = 0; $REUSE = 2; $ANTI_ALIAS = 1; $ANTI_ALIAS_TEXT = 1; # #Switches controlling Navigation Panels # $NO_NAVIGATION = 1; $ADDRESS = ''; $INFO = 0; # 0 = do not make a "About this document..." section # #Switches for Linking to other documents # # actuall -- we don't care $MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth $MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth $NOLATEX = 0; # 1 = do not pass unknown environments to Latex $EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document $ASCII_MODE = 0; # 1 = do not use any icons or internal images # 1 = use links to external postscript images rather than inlined bitmap # images. $PS_IMAGES = 0; $SHOW_SECTION_NUMBERS = 0; ### Other global variables ############################################### $CHILDLINE = ""; # This is the line width measured in pixels and it is used to right justify # equations and equation arrays; $LINE_WIDTH = 500; # Used in conjunction with AUTO_NAVIGATION $WORDS_IN_PAGE = 300; # Affects ONLY the way accents are processed $default_language = 'english'; # The value of this variable determines how many words to use in each # title that is added to the navigation panel (see below) # $WORDS_IN_NAVIGATION_PANEL_TITLES = 0; # This number will determine the size of the equations, special characters, # and anything which will be converted into an inlined image # *except* "image generating environments" such as "figure", "table" # or "minipage". # Effective values are those greater than 0. # Sensible values are between 0.1 - 4. $MATH_SCALE_FACTOR = 1.5; # This number will determine the size of # image generating environments such as "figure", "table" or "minipage". # Effective values are those greater than 0. # Sensible values are between 0.1 - 4. $FIGURE_SCALE_FACTOR = 1.6; # If both of the following two variables are set then the "Up" button # of the navigation panel in the first node/page of a converted document # will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set # to some text which describes this external link. $EXTERNAL_UP_LINK = ""; $EXTERNAL_UP_TITLE = ""; # If this is set then the resulting HTML will look marginally better if viewed # with Netscape. $NETSCAPE_HTML = 1; # Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0" # Paper sizes has no effect other than in the time it takes to create inlined # images and in whether large images can be created at all ie # - larger paper sizes *MAY* help with large image problems # - smaller paper sizes are quicker to handle $PAPERSIZE = "a4"; # Replace "english" with another language in order to tell LaTeX2HTML that you # want some generated section titles (eg "Table of Contents" or "References") # to appear in a different language. Currently only "english" and "french" # is supported but it is very easy to add your own. See the example in the # file "latex2html.config" $TITLES_LANGUAGE = "english"; 1; # This must be the last non-comment line # End File texi2html.init ###################################################################### require "$ENV{T2H_HOME}/texi2html.init" if ($0 =~ /\.pl$/ && -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); #+++############################################################################ # # # Initialization # # Pasted content of File $(srcdir)/MySimple.pm: Command-line processing # # # #---############################################################################ # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init # exists. # package Getopt::MySimple; # Name: # Getopt::MySimple. # # Documentation: # POD-style (incomplete) documentation is in file MySimple.pod # # Tabs: # 4 spaces || die. # # Author: # Ron Savage rpsavage@ozemail.com.au. # 1.00 19-Aug-97 Initial version. # 1.10 13-Oct-97 Add arrays of switches (eg '=s@'). # 1.20 3-Dec-97 Add 'Help' on a per-switch basis. # 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase. # 1.40 10-Nov-98 Change width of help report. Restructure tests. # 1-Jul-00 Modifications for Texi2html # -------------------------------------------------------------------------- # Locally modified by obachman (Display type instead of env, order by cmp) # $Id: MySimple.pm,v 1.1 2000/07/03 08:44:13 obachman Exp $ # use strict; # no strict 'refs'; use vars qw(@EXPORT @EXPORT_OK @ISA); use vars qw($fieldWidth $opt $VERSION); use Exporter(); use Getopt::Long; @ISA = qw(Exporter); @EXPORT = qw(); @EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}. # -------------------------------------------------------------------------- $fieldWidth = 20; $VERSION = '1.41'; # -------------------------------------------------------------------------- sub byOrder { my($self) = @_; return uc($a) cmp (uc($b)); } # -------------------------------------------------------------------------- sub dumpOptions { my($self) = @_; print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n"; for (sort byOrder keys(%{$self -> {'opt'} }) ) { print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n"; } print "\n"; } # End of dumpOptions. # -------------------------------------------------------------------------- # Return: # 0 -> Error. # 1 -> Ok. sub getOptions { push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0. push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1. my($self, $default, $helpText, $versionText, $helpThenExit, $versionThenExit, $ignoreCase) = @_; $helpThenExit = 1 unless (defined($helpThenExit)); $versionThenExit = 1 unless (defined($versionThenExit)); $ignoreCase = 0 unless (defined($ignoreCase)); $self -> {'default'} = $default; $self -> {'helpText'} = $helpText; $self -> {'versionText'} = $versionText; $Getopt::Long::ignorecase = $ignoreCase; unless (defined($self -> {'default'}{'help'})) { $self -> {'default'}{'help'} = { type => ':i', default => '', linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;}, verbose => "print help and exit" }; } unless (defined($self -> {'default'}{'version'})) { $self -> {'default'}{'version'} = { type => '', default => '', linkage => sub {print $self->{'versionText'}; exit (0) if versionTheExit;}, verbose => "print version and exit" }; } for (keys(%{$self -> {'default'} }) ) { my $type = ${$self -> {'default'} }{$_}{'type'}; push(@{$self -> {'type'} }, "$_$type"); $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'} if ${$self -> {'default'} }{$_}{'linkage'}; } my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} }); return $result unless $result; for (keys(%{$self -> {'default'} }) ) { if (! defined(${$self -> {'opt'} }{$_})) #{ { ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'}; } } $result; } # End of getOptions. # -------------------------------------------------------------------------- sub helpOptions { my($self) = shift; my($noHelp) = shift; $noHelp = 0 unless $noHelp; my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) = (10, 5, 9, 78, 4, 11); print "$self->{'helpText'}" if ($self -> {'helpText'}); print ' Option', ' ' x ($optwidth - length('Option') -1 ), 'Type', ' ' x ($typewidth - length('Type') + 1), 'Default', ' ' x ($defaultwidth - length('Default') ), "Description\n"; for (sort byOrder keys(%{$self -> {'default'} }) ) { my($line, $help, $option, $val); $option = $_; next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp; $line = " -$_ " . ' ' x ($optwidth - (2 + length) ) . "${$self->{'default'} }{$_}{'type'} ". ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); $val = ${$self->{'default'} }{$_}{'linkage'}; if ($val) { if (ref($val) eq 'SCALAR') { $val = $$val; } else { $val = ''; } } else { $val = ${$self->{'default'} }{$_}{'default'}; } $line .= "$val "; $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line)); if (defined(${$self -> {'default'} }{$_}{'verbose'}) && ${$self -> {'default'} }{$_}{'verbose'} ne '') { $help = "${$self->{'default'} }{$_}{'verbose'}"; } else { $help = ' '; } if ((length("$line") + length($help)) < $maxlinewidth) { print $line , $help, "\n"; } else { print $line, "\n", ' ' x $valind, $help, "\n"; } for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}})) { print ' ' x ($valind + 2); print $val, ' ', ' ' x ($valwidth - length($val) - 2); print ${$self->{'default'}}{$option}{'values'}{$val}, "\n"; } } print <| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo) =s | :s mandatory (or, optional) string argument =i | :i mandatory (or, optional) integer argument EOT } # End of helpOptions. #------------------------------------------------------------------- sub new { my($class) = @_; my($self) = {}; $self -> {'default'} = {}; $self -> {'helpText'} = ''; $self -> {'opt'} = {}; $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}. $self -> {'type'} = (); return bless $self, $class; } # End of new. # -------------------------------------------------------------------------- 1; # End MySimple.pm require "$ENV{T2H_HOME}/MySimple.pm" if ($0 =~ /\.pl$/ && -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); package main; #+++############################################################################ # # # Constants # # # #---############################################################################ $DEBUG_TOC = 1; $DEBUG_INDEX = 2; $DEBUG_BIB = 4; $DEBUG_GLOSS = 8; $DEBUG_DEF = 16; $DEBUG_HTML = 32; $DEBUG_USER = 64; $DEBUG_L2H = 128; $BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference $FILERE = '[\/\w.+-]+'; # RE for a file name $VARRE = '[^\s\{\}]+'; # RE for a variable name $NODERE = '[^,:]+'; # RE for a node name $NODESRE = '[^:]+'; # RE for a list of node names $ERROR = "***"; # prefix for errors $WARN = "**"; # prefix for warnings # program home page $PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections $CHAPTEREND = "\n"; # to know where a chpater ends $SECTIONEND = "\n"; # to know where section ends $TOPEND = "\n"; # to know where top ends # # pre-defined indices # $index_properties = { 'c' => { name => 'cp'}, 'f' => { name => 'fn', code => 1}, 'v' => { name => 'vr', code => 1}, 'k' => { name => 'ky', code => 1}, 'p' => { name => 'pg', code => 1}, 't' => { name => 'tp', code => 1} }; %predefined_index = ( 'cp', 'c', 'fn', 'f', 'vr', 'v', 'ky', 'k', 'pg', 'p', 'tp', 't', ); # # valid indices # %valid_index = ( 'c', 1, 'f', 1, 'v', 1, 'k', 1, 'p', 1, 't', 1, ); # # texinfo section names to level # %sec2level = ( 'top', 0, 'chapter', 1, 'unnumbered', 1, 'majorheading', 1, 'chapheading', 1, 'appendix', 1, 'section', 2, 'unnumberedsec', 2, 'heading', 2, 'appendixsec', 2, 'appendixsection', 2, 'subsection', 3, 'unnumberedsubsec', 3, 'subheading', 3, 'appendixsubsec', 3, 'subsubsection', 4, 'unnumberedsubsubsec', 4, 'subsubheading', 4, 'appendixsubsubsec', 4, ); # # accent map, TeX command to ISO name # %accent_map = ( '"', 'uml', '~', 'tilde', '^', 'circ', '`', 'grave', '\'', 'acute', ); # # texinfo "simple things" (@foo) to HTML ones # %simple_map = ( # cf. makeinfo.c "*", "
", # HTML+ " ", " ", "\t", " ", "-", "­", # soft hyphen "\n", "\n", "|", "", 'tab', '<\/TD>
Button Name Go to From 1.2.3 go to
EOT $about .= ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) : " [" . $T2H_NAVIGATION_TEXT{$button} . "] "); $about .= < $button $T2H_BUTTONS_GOTO{$button} $T2H_BUTTONS_EXAMPLE{$button}
', # spacing commands ":", "", "!", "!", "?", "?", ".", ".", "-", "", ); # # texinfo "things" (@foo{}) to HTML ones # %things_map = ( 'TeX', 'TeX', 'br', '

', # paragraph break 'bullet', '*', 'copyright', '(C)', 'dots', '...<\/small>', 'enddots', '....<\/small>', 'equiv', '==', 'error', 'error-->', 'expansion', '==>', 'minus', '-', 'point', '-!-', 'print', '-|', 'result', '=>', 'today', $T2H_TODAY, 'aa', 'å', 'AA', 'Å', 'ae', 'æ', 'oe', 'œ', 'AE', 'Æ', 'OE', 'Œ', 'o', 'ø', 'O', 'Ø', 'ss', 'ß', 'l', '\/l', 'L', '\/L', 'exclamdown', '¡', 'questiondown', '¿', 'pounds', '£' ); # # texinfo styles (@foo{bar}) to HTML ones # %style_map = ( 'acronym', '&do_acronym', 'asis', '', 'b', 'B', 'cite', 'CITE', 'code', 'CODE', 'command', 'CODE', 'ctrl', '&do_ctrl', # special case 'dfn', 'EM', # DFN tag is illegal in the standard 'dmn', '', # useless 'email', '&do_email', # insert a clickable email address 'emph', 'EM', 'env', 'CODE', 'file', '"TT', # will put quotes, cf. &apply_style 'i', 'I', 'kbd', 'KBD', 'key', 'KBD', 'math', '&do_math', 'option', '"SAMP', # will put quotes, cf. &apply_style 'r', '', # unsupported 'samp', '"SAMP', # will put quotes, cf. &apply_style 'sc', '&do_sc', # special case 'strong', 'STRONG', 't', 'TT', 'titlefont', '', # useless 'uref', '&do_uref', # insert a clickable URL 'url', '&do_url', # insert a clickable URL 'var', 'VAR', 'w', '', # unsupported 'H', '&do_accent', 'dotaccent', '&do_accent', 'ringaccent','&do_accent', 'tieaccent', '&do_accent', 'u','&do_accent', 'ubaraccent','&do_accent', 'udotaccent','&do_accent', 'v', '&do_accent', ',', '&do_accent', 'dotless', '&do_accent' ); # # texinfo format (@foo/@end foo) to HTML ones # %format_map = ( 'quotation', 'BLOCKQUOTE', # lists 'itemize', 'UL', 'enumerate', 'OL', # poorly supported 'flushleft', 'PRE', 'flushright', 'PRE', ); # # an eval of these $complex_format_map->{what}->[0] yields beginning # an eval of these $complex_format_map->{what}->[1] yieleds end $complex_format_map = { example => [ q{"$T2H_EXAMPLE_INDENT_CELL
"},
  q{'
'} ], smallexample => [ q{"$T2H_SMALL_EXAMPLE_INDENT_CELL
"},
  q{'
'} ], display => [ q{"$T2H_EXAMPLE_INDENT_CELL
'},
  q{'
'} ], smalldisplay => [ q{"$T2H_SMALL_EXAMPLE_INDENT_CELL
'},
  q{'
'} ] }; $complex_format_map->{lisp} = $complex_format_map->{example}; $complex_format_map->{smalllisp} = $complex_format_map->{smallexample}; $complex_format_map->{format} = $complex_format_map->{display}; $complex_format_map->{smallformat} = $complex_format_map->{smalldisplay}; # # texinfo definition shortcuts to real ones # %def_map = ( # basic commands 'deffn', 0, 'defvr', 0, 'deftypefn', 0, 'deftypevr', 0, 'defcv', 0, 'defop', 0, 'deftp', 0, # basic x commands 'deffnx', 0, 'defvrx', 0, 'deftypefnx', 0, 'deftypevrx', 0, 'defcvx', 0, 'defopx', 0, 'deftpx', 0, # shortcuts 'defun', 'deffn Function', 'defmac', 'deffn Macro', 'defspec', 'deffn {Special Form}', 'defvar', 'defvr Variable', 'defopt', 'defvr {User Option}', 'deftypefun', 'deftypefn Function', 'deftypevar', 'deftypevr Variable', 'defivar', 'defcv {Instance Variable}', 'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME 'defmethod', 'defop Method', 'deftypemethod', 'defop Method', # NEW:FIXME # x shortcuts 'defunx', 'deffnx Function', 'defmacx', 'deffnx Macro', 'defspecx', 'deffnx {Special Form}', 'defvarx', 'defvrx Variable', 'defoptx', 'defvrx {User Option}', 'deftypefunx', 'deftypefnx Function', 'deftypevarx', 'deftypevrx Variable', 'defivarx', 'defcvx {Instance Variable}', 'defmethodx', 'defopx Method', ); # # things to skip # %to_skip = ( # comments 'c', 1, 'comment', 1, 'ifnotinfo', 1, 'ifnottex', 1, 'ifhtml', 1, 'end ifhtml', 1, 'end ifnotinfo', 1, 'end ifnottex', 1, # useless 'detailmenu', 1, 'direntry', 1, 'contents', 1, 'shortcontents', 1, 'summarycontents', 1, 'footnotestyle', 1, 'end ifclear', 1, 'end ifset', 1, 'titlepage', 1, 'end titlepage', 1, # unsupported commands (formatting) 'afourpaper', 1, 'cropmarks', 1, 'finalout', 1, 'headings', 1, 'sp', 1, 'need', 1, 'page', 1, 'setchapternewpage', 1, 'everyheading', 1, 'everyfooting', 1, 'evenheading', 1, 'evenfooting', 1, 'oddheading', 1, 'oddfooting', 1, 'smallbook', 1, 'vskip', 1, 'filbreak', 1, 'paragraphindent', 1, # unsupported formats 'cartouche', 1, 'end cartouche', 1, 'group', 1, 'end group', 1, ); #+++############################################################################ # # # Argument parsing, initialisation # # # #---############################################################################ # # flush stdout and stderr after every write # select(STDERR); $| = 1; select(STDOUT); $| = 1; %value = (); # hold texinfo variables, see also -D $use_bibliography = 1; $use_acc = 1; # # called on -init-file sub LoadInitFile { my $init_file = shift; # second argument is value of options $init_file = shift; if (-f $init_file) { print "# reading initialization file from $init_file\n" if ($T2H_VERBOSE); require($init_file); } else { print "$ERROR Error: can't read init file $int_file\n"; $init_file = ''; } } # # called on -lang sub SetDocumentLanguage { my $lang = shift; if (! exists($T2H_WORDS->{$lang})) { warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" . ($T2H_LANG ? T2H_LANG : "en") . "'\n"; } else { print "# using '$lang' as document language\n" if ($T2H_VERBOSE); $T2H_LANG = $lang; } } ## ## obsolete cmd line options ## $T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} = { type => '!', linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;}, verbose => 'obsolete, use -nosec_nav', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {use_acc} = { type => '!', linkage => \$use_acc, verbose => 'obsolete', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {expandinfo} = { type => '!', linkage => sub {$main::T2H_EXPAND = 'info';}, verbose => 'obsolete, use "-expand info" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {expandtex} = { type => '!', linkage => sub {$main::T2H_EXPAND = 'tex';}, verbose => 'obsolete, use "-expand tex" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {monolithic} = { type => '!', linkage => sub {$main::T2H_SPLIT = '';}, verbose => 'obsolete, use "-split no" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {split_node} = { type => '!', linkage => sub{$main::T2H_SPLIT = 'section';}, verbose => 'obsolete, use "-split section" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {split_chapter} = { type => '!', linkage => sub{$main::T2H_SPLIT = 'chapter';}, verbose => 'obsolete, use "-split chapter" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {no_verbose} = { type => '!', linkage => sub {$main::T2H_VERBOSE = 0;}, verbose => 'obsolete, use -noverbose instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {output_file} = { type => '=s', linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, verbose => 'obsolete, use -out_file instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {section_navigation} = { type => '!', linkage => \$T2H_SECTION_NAVIGATION, verbose => 'obsolete, use -sec_nav instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {verbose} = { type => '!', linkage => \$T2H_VERBOSE, verbose => 'obsolete, use -Verbose instead', noHelp => 2 }; # read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc my $home = $ENV{HOME}; defined($home) or $home = ''; foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") { if (-f $i) { print "# reading initialization file from $i\n" if ($T2H_VERBOSE); require($i); } } #+++############################################################################ # # # parse command-line options # # #---############################################################################ $T2H_USAGE_TEXT = <getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) { print $Configure_failed if $Configure_failed; die $T2H_FAILURE_TEXT; } if (@ARGV > 1) { eval {Getopt::Long::Configure("no_pass_through");}; if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) { print $Configure_failed if $Configure_failed; die $T2H_FAILURE_TEXT; } } if ($T2H_CHECK) { die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0; ✓ exit; } #+++############################################################################ # # # evaluation of cmd line options # # #---############################################################################ if ($T2H_EXPAND eq 'info') { $to_skip{'ifinfo'} = 1; $to_skip{'end ifinfo'} = 1; } elsif ($T2H_EXPAND eq 'tex') { $to_skip{'iftex'} = 1; $to_skip{'end iftex'} = 1; } $T2H_INVISIBLE_MARK = '' if $T2H_INVISIBLE_MARK eq 'xbm'; # # file name buisness # die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1; $docu = shift(@ARGV); if ($docu =~ /.*\//) { chop($docu_dir = $&); $docu_name = $'; } else { $docu_dir = '.'; $docu_name = $docu; } unshift(@T2H_INCLUDE_DIRS, $docu_dir); $docu_name =~ s/\.te?x(i|info)?$//; # basename of the document $docu_name = $T2H_PREFIX if ($T2H_PREFIX); # subdir if ($T2H_SUBDIR && ! $T2H_OUT) { $T2H_SUBDIR =~ s|/*$||; unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR") { if ( mkdir($T2H_SUBDIR, oct(755))) { print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE); } else { warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n"; $T2H_SUBDIR = ''; } } } if ($T2H_SUBDIR && ! $T2H_OUT) { $docu_rdir = "$T2H_SUBDIR/"; print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); } else { if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|) { $docu_rdir = "$1/"; print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); } else { print "# putting result files into current directory \n" if ($T2H_VERBOSE); $docu_rdir = ''; } } # extension if ($T2H_SHORTEXTN) { $docu_ext = "htm"; } else { $docu_ext = "html"; } if ($T2H_TOP_FILE =~ /\..*$/) { $T2H_TOP_FILE = $`.".$docu_ext"; } # result files if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i)) { $T2H_SPLIT = 'section'; } elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i) { $T2H_SPLIT = 'chapter' } else { undef $T2H_SPLIT; } $docu_doc = "$docu_name.$docu_ext"; # document's contents $docu_doc_file = "$docu_rdir$docu_doc"; if ($T2H_SPLIT) { $docu_toc = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes $docu_about = "${docu_name}_abt.$docu_ext"; # about this document $docu_top = $T2H_TOP_FILE || $docu_doc; } else { if ($T2H_OUT) { $docu_doc = $T2H_OUT; $docu_doc =~ s|.*/||; } $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc; } $docu_toc_file = "$docu_rdir$docu_toc"; $docu_stoc_file = "$docu_rdir$docu_stoc"; $docu_foot_file = "$docu_rdir$docu_foot"; $docu_about_file = "$docu_rdir$docu_about"; $docu_top_file = "$docu_rdir$docu_top"; $docu_frame_file = "$docu_rdir${docu_name}_frame.$docu_ext"; $docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext"; # # variables # $value{'html'} = 1; # predefine html (the output format) $value{'texi2html'} = $THISVERSION; # predefine texi2html (the translator) # _foo: internal to track @foo foreach ('_author', '_title', '_subtitle', '_settitle', '_setfilename', '_shorttitle') { $value{$_} = ''; # prevent -w warnings } %node2sec = (); # node to section name %sec2node = (); # section to node name %sec2number = (); # section to number %number2sec = (); # number to section %idx2node = (); # index keys to node %node2href = (); # node to HREF %node2next = (); # node to next %node2prev = (); # node to prev %node2up = (); # node to up %bib2href = (); # bibliography reference to HREF %gloss2href = (); # glossary term to HREF @sections = (); # list of sections %tag2pro = (); # protected sections # # initial indexes # $bib_num = 0; $foot_num = 0; $gloss_num = 0; $idx_num = 0; $sec_num = 0; $doc_num = 0; $html_num = 0; # # can I use ISO8879 characters? (HTML+) # if ($T2H_USE_ISO) { $things_map{'bullet'} = "•"; $things_map{'copyright'} = "©"; $things_map{'dots'} = "…"; $things_map{'equiv'} = "≡"; $things_map{'expansion'} = "→"; $things_map{'point'} = "∗"; $things_map{'result'} = "⇒"; } # # read texi2html extensions (if any) # $extensions = 'texi2html.ext'; # extensions in working directory if (-f $extensions) { print "# reading extensions from $extensions\n" if $T2H_VERBOSE; require($extensions); } ($progdir = $0) =~ s/[^\/]+$//; if ($progdir && ($progdir ne './')) { $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory if (-f $extensions) { print "# reading extensions from $extensions\n" if $T2H_VERBOSE; require($extensions); } } print "# reading from $docu\n" if $T2H_VERBOSE; ######################################################################### # # latex2html stuff # # latex2html conversions consist of three stages: # 1) ToLatex: Put "latex" code into a latex file # 2) ToHtml: Use latex2html to generate corresponding html code and images # 3) FromHtml: Extract generated code and images from latex2html run # ########################## # default settings # # defaults for files and names sub l2h_Init { local($root) = @_; return 0 unless ($root); $l2h_name = "${root}_l2h"; $l2h_latex_file = "$docu_rdir${l2h_name}.tex"; $l2h_cache_file = "${docu_rdir}l2h_cache.pm"; $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H); # destination dir -- generated images are put there, should be the same # as dir of enclosing html document -- $l2h_html_file = "$docu_rdir${l2h_name}.html"; $l2h_prefix = "${l2h_name}_"; return 1; } ########################## # # First stage: Generation of Latex file # Initialize with: l2h_InitToLatex # Add content with: l2h_ToLatex($text) --> HTML placeholder comment # Finish with: l2h_FinishToLatex # $l2h_latex_preample = <$l2h_latex_file")) { warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n"; return 0; } print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE); print L2H_LATEX $l2h_latex_preample; } # open database for caching l2h_InitCache(); $l2h_latex_count = 0; $l2h_to_latex_count = 0; $l2h_cached_count = 0; return 1; } # print text (1st arg) into latex file (if not already there), return # HTML commentary which can be later on replaced by the latex2html # generated text sub l2h_ToLatex { my($text) = @_; my($count); $l2h_to_latex_count++; $text =~ s/(\s*)$//; # try whether we can cache it my $cached_text = l2h_FromCache($text); if ($cached_text) { $l2h_cached_count++; return $cached_text; } # try whether we have text already on things to do unless ($count = $l2h_to_latex{$text}) { $count = $l2h_latex_count; $l2h_latex_count++; $l2h_to_latex{$text} = $count; $l2h_to_latex[$count] = $text; unless ($T2H_L2H_SKIP) { print L2H_LATEX "\\begin{rawhtml}\n"; print L2H_LATEX "\n"; print L2H_LATEX "\\end{rawhtml}\n"; print L2H_LATEX "$text\n"; print L2H_LATEX "\\begin{rawhtml}\n"; print L2H_LATEX "\n"; print L2H_LATEX "\\end{rawhtml}\n"; } } return ""; } # print closing into latex file and close it sub l2h_FinishToLatex { local ($reused); $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count; unless ($T2H_L2H_SKIP) { print L2H_LATEX $l2h_latex_closing; close(L2H_LATEX); } print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE); unless ($l2h_latex_count) { l2h_Finish(); return 0; } return 1; } ################################### # Second stage: Use latex2html to generate corresponding html code and images # # l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]): # Call latex2html on $l2h_latex_file # Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir # Return 1, on success # 0, otherwise # sub l2h_ToHtml { local($call, $ext, $root, $dotbug); if ($T2H_L2H_SKIP) { print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE); return 1; } # Check for dot in directory where dvips will work if ($T2H_L2H_TMP) { if ($T2H_L2H_TMP =~ /\./) { warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n"; $dotbug = 1; } } else { if (&getcwd =~ /\./) { warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n"; $dotbug = 1; } } # fix it, if necessary and hope that it works $T2H_L2H_TMP = "/tmp" if ($dotbug); $call = $T2H_L2H_L2H; # use init file, if specified $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file); # set output dir $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir"); # use l2h_tmp, if specified $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP); # options we want to be sure of $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link"; $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file"; print "# l2h: executing '$call'\n" if ($T2H_VERBOSE); if (system($call)) { warn "l2h ***Error: '${call}' did not succeed\n"; return 0; } else { print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE); return 1; } } # this is directly pasted over from latex2html sub getcwd { local($_) = `pwd`; die "'pwd' failed (out of memory?)\n" unless length; chop; $_; } ########################## # Third stage: Extract generated contents from latex2html run # Initialize with: l2h_InitFromHtml # open $l2h_html_file for reading # reads in contents into array indexed by numbers # return 1, on success -- 0, otherwise # Extract Html code with: l2h_FromHtml($text) # replaces in $text all previosuly inserted comments by generated html code # returns (possibly changed) $text # Finish with: l2h_FinishFromHtml # closes $l2h_html_dir/$l2h_name.".$docu_ext" sub l2h_InitFromHtml { local($h_line, $h_content, $count, %l2h_img); if (! open(L2H_HTML, "<${l2h_html_file}")) { print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n"; return 0; } print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE); $l2h_html_count = 0; while ($h_line = ) { if ($h_line =~ /^/) { $count = $1; $h_content = ""; while ($h_line = ) { if ($h_line =~ /^/) { chomp $h_content; chomp $h_content; $l2h_html_count++; $h_content = l2h_ToCache($count, $h_content); $l2h_from_html[$count] = $h_content; $h_content = ''; last; } $h_content = $h_content.$h_line; } if ($hcontent) { print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n" if ($T2H_VERBOSE); close(L2H_HTML); return 0; } } } print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n" if ($T2H_VERBOSE); close(L2H_HTML); return 1; } sub l2h_FromHtml { local($text) = @_; local($done, $to_do, $count); $to_do = $text; while ($to_do =~ /([^\000]*)([^\000]*)/) { $to_do = $1; $count = $2; $done = $3.$done; $done = "".$done if ($T2H_DEBUG & $DEBUG_L2H); $done = &l2h_ExtractFromHtml($count) . $done; $done = "".$done if ($T2H_DEBUG & $DEBUG_L2H); } return $to_do.$done; } sub l2h_ExtractFromHtml { local($count) = @_; return $l2h_from_html[$count] if ($l2h_from_html[$count]); if ($count >= 0 && $count < $l2h_latex_count) { # now we are in trouble local($l_l2h, $_); $l2h_extract_error++; print "$ERROR l2h: can't extract content $count from html\n" if ($T2H_VERBOSE); # try simple (ordinary) substition (without l2h) $l_l2h = $T2H_L2H; $T2H_L2H = 0; $_ = $l2h_to_latex{$count}; $_ = &substitute_style($_); &unprotect_texi; $_ = "" . $_ if ($T2H_DEBUG & $DEBUG_L2H); $T2H_L2H = $l_l2h; return $_; } else { # now we have been incorrectly called $l2h_range_error++; print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n"; return "" if ($T2H_DEBUG & $DEBUG_L2H); return ""; } } sub l2h_FinishFromHtml { if ($T2H_VERBOSE) { if ($l2h_extract_error + $l2h_range_error) { print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n"; } else { print "# l2h: finished from html (no errors)\n"; } } } sub l2h_Finish { l2h_StoreCache(); if ($T2H_L2H_CLEAN) { print "# l2h: removing temporary files generated by l2h extension\n" if $T2H_VERBOSE; while (<"$docu_rdir$l2h_name"*>) { unlink $_; } } print "# l2h: Finished\n" if $T2H_VERBOSE; return 1; } ############################## # stuff for l2h caching # # I tried doing this with a dbm data base, but it did not store all # keys/values. Hence, I did as latex2html does it sub l2h_InitCache { if (-r "$l2h_cache_file") { my $rdo = do "$l2h_cache_file"; warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n") unless ($rdo); } } sub l2h_StoreCache { return unless $l2h_latex_count; my ($key, $value); open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n"; while (($key, $value) = each %l2h_cache) { # escape stuff $key =~ s|/|\\/|g; $key =~ s|\\\\/|\\/|g; # weird, a \ at the end of the key results in an error # maybe this also broke the dbm database stuff $key =~ s|\\$|\\\\|; $value =~ s/\|/\\\|/g; $value =~ s/\\\\\|/\\\|/g; $value =~ s|\\\\|\\\\\\\\|g; print FH "\n\$l2h_cache_key = q/$key/;\n"; print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n"; } print FH "1;"; close(FH); } # return cached html, if it exists for text, and if all pictures # are there, as well sub l2h_FromCache { my $text = shift; my $cached = $l2h_cache{$text}; if ($cached) { while ($cached =~ m/SRC="(.*?)"/g) { unless (-e "$docu_rdir$1") { return undef; } } return $cached; } return undef; } # insert generated html into cache, move away images, # return transformed html $maximage = 1; sub l2h_ToCache { my $count = shift; my $content = shift; my @images = ($content =~ /SRC="(.*?)"/g); my ($src, $dest); for $src (@images) { $dest = $l2h_img{$src}; unless ($dest) { my $ext; if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext) { $ext = $1; } else { warn "$ERROR: L2h image $src has invalid extension\n"; next; } while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;} $dest = "${docu_name}_$maximage.$ext"; system("cp -f $docu_rdir$src $docu_rdir$dest"); $l2h_img{$src} = $dest; unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H); } $content =~ s/$src/$dest/g; } $l2h_cache{$l2h_to_latex[$count]} = $content; return $content; } #+++############################################################################ # # # Pass 1: read source, handle command, variable, simple substitution # # # #---############################################################################ @lines = (); # whole document @toc_lines = (); # table of contents @stoc_lines = (); # table of contents $curlevel = 0; # current level in TOC $node = ''; # current node name $node_next = ''; # current node next name $node_prev = ''; # current node prev name $node_up = ''; # current node up name $in_table = 0; # am I inside a table $table_type = ''; # type of table ('', 'f', 'v', 'multi') @tables = (); # nested table support $in_bibliography = 0; # am I inside a bibliography $in_glossary = 0; # am I inside a glossary $in_top = 0; # am I inside the top node $has_top = 0; # did I see a top node? $has_top_command = 0; # did I see @top for automatic pointers? $in_pre = 0; # am I inside a preformatted section $in_list = 0; # am I inside a list $in_html = 0; # am I inside an HTML section $first_line = 1; # is it the first line $dont_html = 0; # don't protect HTML on this line $deferred_ref = ''; # deferred reference for indexes @html_stack = (); # HTML elements stack $html_element = ''; # current HTML element &html_reset; %macros = (); # macros # init l2h $T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H); $T2H_L2H = &l2h_InitToLatex if ($T2H_L2H); # build code for simple substitutions # the maps used (%simple_map and %things_map) MUST be aware of this # watch out for regexps, / and escaped characters! $subst_code = ''; foreach (keys(%simple_map)) { ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n"; } foreach (keys(%things_map)) { $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n"; } if ($use_acc) { # accentuated characters foreach (keys(%accent_map)) { if ($_ eq "`") { $subst_code .= "s/$;3"; } elsif ($_ eq "'") { $subst_code .= "s/$;4"; } else { $subst_code .= "s/\\\@\\$_"; } $subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n"; } } eval("sub simple_substitutions { $subst_code }"); &init_input; INPUT_LINE: while ($_ = &next_line) { # # remove \input on the first lines only # if ($first_line) { next if /^\\input/; $first_line = 0; } # non-@ substitutions cf. texinfmt.el # # parse texinfo tags # $tag = ''; $end_tag = ''; if (/^\s*\@end\s+(\w+)\b/) { $end_tag = $1; } elsif (/^\s*\@(\w+)\b/) { $tag = $1; } # # handle @html / @end html # if ($in_html) { if ($end_tag eq 'html') { $in_html = 0; } else { $tag2pro{$in_html} .= $_; } next; } elsif ($tag eq 'html') { $in_html = $PROTECTTAG . ++$html_num; push(@lines, $in_html); next; } # # try to remove inlined comments # syntax from tex-mode.el comment-start-skip # s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/; # Sometimes I use @c right at the end of a line ( to suppress the line feed ) # s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/; # s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; # s/(.*)\@c{.*?}(.*)/$1$2/; # s/(.*)\@comment{.*?}(.*)/$1$2/; # s/^(.*)\@c /$1/; # s/^(.*)\@comment /$1/; ############################################################# # value substitution before macro expansion, so that # it works in macro arguments s/\@value{($VARRE)}/$value{$1}/eg; ############################################################# # macro substitution while (/\@(\w+)/g) { if (exists($macros->{$1})) { my $before = $`; my $name = $1; my $after = $'; my @args; my $args; if ($after =~ /^\s*{(.*?[^\\])}(.*)/) { $args = $1; $after = $2; } elsif (@{$macros->{$name}->{Args}} == 1) { $args = $after; $args =~ s/^\s*//; $args =~ s/\s*$//; $after = ''; } $args =~ s|\\\\|\\|g; $args =~ s|\\{|{|g; $args =~ s|\\}|}|g; if (@{$macros->{$name}->{Args}} > 1) { $args =~ s/(^|[^\\]),/$1$;/g ; $args =~ s|\\,|,|g; @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1); } else { $args =~ s|\\,|,|g; @args = ($args); } my $macrobody = $macros->{$name}->{Body}; for ($i=0; $i<=$#args; $i++) { $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g; } $macrobody =~ s|\\\\|\\|g; $_ = $before . $macrobody . $after; unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_); next INPUT_LINE; } } # # # try to skip the line # if ($end_tag) { $in_titlepage = 0 if $end_tag eq 'titlepage'; next if $to_skip{"end $end_tag"}; } elsif ($tag) { $in_titlepage = 1 if $tag eq 'titlepage'; next if $to_skip{$tag}; last if $tag eq 'bye'; } if ($in_top) { # parsing the top node if ($tag eq 'node' || ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/)) { # no more in top $in_top = 0; push(@lines, $TOPEND); } } unless ($in_pre) { s/``/\"/g; s/''/\"/g; s/([\w ])---([\w ])/$1--$2/g; } # # analyze the tag # if ($tag) { # skip lines &skip_until($tag), next if $tag eq 'ignore'; &skip_until($tag), next if $tag eq 'ifnothtml'; if ($tag eq 'ifinfo') { &skip_until($tag), next unless $T2H_EXPAND eq 'info'; } if ($tag eq 'iftex') { &skip_until($tag), next unless $T2H_EXPAND eq 'tex'; } if ($tag eq 'tex') { # add to latex2html file if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre) { # add space to the end -- tex(i2dvi) does this, as well push(@lines, &l2h_ToLatex(&string_until($tag) . " ")); } else { &skip_until($tag); } next; } if ($tag eq 'titlepage') { next; } # handle special tables if ($tag =~ /^(|f|v|multi)table$/) { $table_type = $1; $tag = 'table'; } # special cases if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) { $in_top = 1; $has_top = 1; $has_top_command = 1 if $tag eq 'top'; @lines = (); # ignore all lines before top (title page garbage) next; } elsif ($tag eq 'node') { if ($in_top) { $in_top = 0; push(@lines, $TOPEND); } warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o; # request of "Richard Y. Kim" s/^\@node\s+//; $_ = &protect_html($_); # if node contains '&' for instance ($node, $node_next, $node_prev, $node_up) = split(/,/); &normalise_node($node); &normalise_node($node_next); &normalise_node($node_prev); &normalise_node($node_up); $node =~ /\"/ ? push @lines, &html_debug("\n", __LINE__) : push @lines, &html_debug("\n", __LINE__); next; } elsif ($tag eq 'include') { if (/^\@include\s+($FILERE)\s*$/o) { $file = LocateIncludeFile($1); if ($file && -e $file) { &open($file); print "# including $file\n" if $T2H_VERBOSE; } else { warn "$ERROR Can't find $1, skipping"; } } else { warn "$ERROR Bad include line: $_"; } next; } elsif ($tag eq 'ifclear') { if (/^\@ifclear\s+($VARRE)\s*$/o) { next unless defined($value{$1}); &skip_until($tag); } else { warn "$ERROR Bad ifclear line: $_"; } next; } elsif ($tag eq 'ifset') { if (/^\@ifset\s+($VARRE)\s*$/o) { next if defined($value{$1}); &skip_until($tag); } else { warn "$ERROR Bad ifset line: $_"; } next; } elsif ($tag eq 'menu') { unless ($T2H_SHOW_MENU) { &skip_until($tag); next; } &html_push_if($tag); push(@lines, &html_debug('', __LINE__)); } elsif ($format_map{$tag}) { $in_pre = 1 if $format_map{$tag} eq 'PRE'; &html_push_if($format_map{$tag}); push(@lines, &html_debug('', __LINE__)); $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ; # push(@lines, &debug("

\n", __LINE__)) # if $tag =~ /example/i; # sunshine@sunshineco.com:
bla
looks better than #
\nbla
(at least on NeXTstep browser push(@lines, &debug("<$format_map{$tag}>" . ($in_pre ? '' : "\n"), __LINE__)); next; } elsif (exists $complex_format_map->{$tag}) { my $start = eval $complex_format_map->{$tag}->[0]; if ($@) { print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@"; $start = '
'
	  }
	  $in_pre = 1 if $start =~ /
\n", __LINE__));
		    &html_push_if('TABLE');
		} else {
		    push(@lines, &debug("
\n", __LINE__)); &html_push_if('DL'); } push(@lines, &html_debug('', __LINE__)); } else { warn "$ERROR Bad table line: $_"; } next; } elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') { if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/) { my $from = $1; my $to = $2; my $prefix_from = IndexName2Prefix($from); my $prefix_to = IndexName2Prefix($to); warn("$ERROR unknown from index name $from ind syn*index line: $_"), next unless $prefix_from; warn("$ERROR unknown to index name $to ind syn*index line: $_"), next unless $prefix_to; if ($tag eq 'syncodeindex') { $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1; } else { $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1; } } else { warn "$ERROR Bad syn*index line: $_"; } next; } elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') { if (/^\@$tag\s+(\w+)\s*$/) { my $name = $1; $index_properties->{$name}->{name} = $name; $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex'; } else { warn "$ERROR Bad defindex line: $_"; } next; } elsif (/^\@printindex/) { push (@lines, "$_"); next; } elsif ($tag eq 'sp') { push(@lines, &debug("

\n", __LINE__)); next; } elsif ($tag eq 'center') { push(@lines, &debug("

\n", __LINE__)); s/\@center//; } elsif ($tag eq 'setref') { &protect_html; # if setref contains '&' for instance if (/^\@$tag\s*{($NODERE)}\s*$/) { $setref = $1; $setref =~ s/\s+/ /g; # normalize $setref =~ s/ $//; $node2sec{$setref} = $name; $sec2node{$name} = $setref; $node2href{$setref} = "$docu_doc#$docid"; } else { warn "$ERROR Bad setref line: $_"; } next; } elsif ($tag eq 'lowersections') { local ($sec, $level); while (($sec, $level) = each %sec2level) { $sec2level{$sec} = $level + 1; } next; } elsif ($tag eq 'raisesections') { local ($sec, $level); while (($sec, $level) = each %sec2level) { $sec2level{$sec} = $level - 1; } next; } elsif ($tag eq 'macro' || $tag eq 'rmacro') { if (/^\@$tag\s*(\w+)\s*(.*)/) { my $name = $1; my @args; @args = split(/\s*,\s*/ , $1) if ($2 =~ /^\s*{(.*)}\s*/); $macros->{$name}->{Args} = \@args; $macros->{$name}->{Body} = ''; while (($_ = &next_line) && $_ !~ /\@end $tag/) { $macros->{$name}->{Body} .= $_; } die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n" unless (/\@end $tag/); chomp $macros->{$name}->{Body}; } else { warn "$ERROR: Bad macro defintion $_" } next; } elsif ($tag eq 'unmacro') { delete $macros->{$1} if (/^\@unmacro\s*(\w+)/); next; } elsif ($tag eq 'documentlanguage') { SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/); } elsif (defined($def_map{$tag})) { if ($def_map{$tag}) { s/^\@$tag\s+//; $tag = $def_map{$tag}; $_ = "\@$tag $_"; $tag =~ s/\s.*//; } } elsif (defined($user_sub{$tag})) { s/^\@$tag\s+//; $sub = $user_sub{$tag}; print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER; if (defined(&$sub)) { chop($_); &$sub($_); } else { warn "$ERROR Bad user sub for $tag: $sub\n"; } next; } if (defined($def_map{$tag})) { s/^\@$tag\s+//; if ($tag =~ /x$/) { # extra definition line $tag = $`; $is_extra = 1; } else { $is_extra = 0; } while (/\{([^\{\}]*)\}/) { # this is a {} construct ($before, $contents, $after) = ($`, $1, $'); # protect spaces $contents =~ s/\s+/$;9/g; # restore $_ protecting {} $_ = "$before$;7$contents$;8$after"; } @args = split(/\s+/, &protect_html($_)); foreach (@args) { s/$;9/ /g; # unprotect spaces s/$;7/\{/g; # ... { s/$;8/\}/g; # ... } } $type = shift(@args); $type =~ s/^\{(.*)\}$/$1/; print "# def ($tag): {$type} ", join(', ', @args), "\n" if $T2H_DEBUG & $DEBUG_DEF; $type .= ':'; # it's nicer like this my $name = shift(@args); $name =~ s/^\{(.*)\}$/$1/; if ($is_extra) { $_ = &debug("
", __LINE__); } else { $_ = &debug("
\n
", __LINE__); } if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') { $_ .= "$type $name"; $_ .= " @args" if @args; } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr' || $tag eq 'defcv' || $tag eq 'defop') { $ftype = $name; $name = shift(@args); $name =~ s/^\{(.*)\}$/$1/; $_ .= "$type $ftype $name"; $_ .= " @args" if @args; } else { warn "$ERROR Unknown definition type: $tag\n"; $_ .= "$type $name"; $_ .= " @args" if @args; } $_ .= &debug("\n
", __LINE__); $name = &unprotect_html($name); if ($tag eq 'deffn' || $tag eq 'deftypefn') { EnterIndexEntry('f', $name, $docu_doc, $section, \@lines); # unshift(@input_spool, "\@findex $name\n"); } elsif ($tag eq 'defop') { EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines); # unshift(@input_spool, "\@findex $name on $ftype\n"); } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') { EnterIndexEntry('v', $name, $docu_doc, $section, \@lines); # unshift(@input_spool, "\@vindex $name\n"); } else { EnterIndexEntry('t', $name, $docu_doc, $section, \@lines); # unshift(@input_spool, "\@tindex $name\n"); } $dont_html = 1; } } elsif ($end_tag) { if ($format_map{$end_tag}) { $in_pre = 0 if $format_map{$end_tag} eq 'PRE'; $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ; &html_pop_if('P'); &html_pop_if('LI'); &html_pop_if(); push(@lines, &debug("\n", __LINE__)); push(@lines, &html_debug('', __LINE__)); } elsif (exists $complex_format_map->{$end_tag}) { my $end = eval $complex_format_map->{$end_tag}->[1]; if ($@) { print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@"; $end = '
' } $in_pre = 0 if $end =~ m|
|; push(@lines, html_debug($end, __LINE__)); } elsif ($end_tag =~ /^(|f|v|multi)table$/) { unless (@tables) { warn "$ERROR \@end $end_tag without \@*table\n"; next; } &html_pop_if('P'); ($table_type, $in_table) = split($;, shift(@tables)); unless ($1 eq $table_type) { warn "$ERROR \@end $end_tag without matching \@$end_tag\n"; next; } if ($table_type eq "multi") { push(@lines, "
\n"); &html_pop_if('TR'); } else { push(@lines, "\n"); &html_pop_if('DD'); } &html_pop_if(); if (@tables) { ($table_type, $in_table) = split($;, $tables[0]); } else { $in_table = 0; } } elsif (defined($def_map{$end_tag})) { push(@lines, &debug("\n", __LINE__)); } elsif ($end_tag eq 'menu') { &html_pop_if(); push(@lines, $_); # must keep it for pass 2 } next; } ############################################################# # anchor insertion while (/\@anchor\s*\{(.*?)\}/) { $_ = $`.$'; my $anchor = $1; $anchor = &normalise_node($anchor); push @lines, &html_debug("\n"); $node2href{$anchor} = "$docu_doc#$anchor"; next INPUT_LINE if $_ =~ /^\s*$/; } ############################################################# # index entry generation, after value substitutions if (/^\@(\w+?)index\s+/) { EnterIndexEntry($1, $', $docu_doc, $section, \@lines); next; } # # protect texi and HTML things &protect_texi; $_ = &protect_html($_) unless $dont_html; $dont_html = 0; # substitution (unsupported things) s/^\@exdent\s+//g; s/\@noindent\s+//g; s/\@refill\s+//g; # other substitutions &simple_substitutions; s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4 # # analyze the tag again # if ($tag) { if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) { if (/^\@$tag\s+(.+)$/) { $name = $1; $name = &normalise_node($name); $level = $sec2level{$tag}; # check for index $first_index_chapter = $node if ($level == 1 && !$first_index_chapter && $name =~ /index/i); if ($in_top && /heading/){ $T2H_HAS_TOP_HEADING = 1; $_ = &debug("$name\n", __LINE__); &html_push_if('body'); print "# top heading, section $name, level $level\n" if $T2H_DEBUG & $DEBUG_TOC; } else { unless (/^\@\w*heading/) { unless (/^\@unnumbered/) { my $number = &update_sec_num($tag, $level); $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS; $sec2number{$name} = $number; $number2sec{$number} = $name; } if (defined($toplevel)) { push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND); } else { # first time we see a "section" unless ($level == 1) { warn "$WARN The first section found is not of level 1: $_"; } $toplevel = $level; } push(@sections, $name); next_doc() if ($T2H_SPLIT eq 'section' || $T2H_SPLIT && $level == $toplevel); } $sec_num++; $docid = "SEC$sec_num"; $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num"); # check biblio and glossary $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i); $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i); # check node if ($node) { warn "$ERROR Duplicate node found: $node\n" if ($node2sec{$node}); } else { $name .= ' ' while ($node2sec{$name}); $node = $name; } $name .= ' ' while ($sec2node{$name}); $section = $name; $node2sec{$node} = $name; $sec2node{$name} = $node; $node2href{$node} = "$docu_doc#$docid"; $node2next{$node} = $node_next; $node2prev{$node} = $node_prev; $node2up{$node} = $node_up; print "# node $node, section $name, level $level\n" if $T2H_DEBUG & $DEBUG_TOC; $node = ''; $node_next = ''; $node_prev = ''; $node_next = ''; if ($tocid) { # update TOC while ($level > $curlevel) { $curlevel++; push(@toc_lines, "
    \n"); } while ($level < $curlevel) { $curlevel--; push(@toc_lines, "
\n"); } $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1); $_ = &substitute_style($_); push(@stoc_lines, "$_
\n") if ($level == 1); if ($T2H_NUMBER_SECTIONS) { push(@toc_lines, $_ . "
\n") } else { push(@toc_lines, "
  • " . $_ ."
  • "); } } else { push(@lines, &html_debug("\n", __LINE__)); } # update DOC push(@lines, &html_debug('', __LINE__)); &html_reset; $_ = " $name \n\n"; $_ = &debug($_, __LINE__); push(@lines, &html_debug('', __LINE__)); } # update DOC foreach $line (split(/\n+/, $_)) { push(@lines, "$line\n"); } next; } else { warn "$ERROR Bad section line: $_"; } } else { # track variables $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o; delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o; # store things $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/; $value{'_setfilename'} = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/; $value{'_settitle'} = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/; $value{'_author'} .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/; $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/; $value{'_title'} .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/; # list item if (/^\s*\@itemx?\s+/) { $what = $'; $what =~ s/\s+$//; if ($in_bibliography && $use_bibliography) { if ($what =~ /^$BIBRE$/o) { $id = 'BIB' . ++$bib_num; $bib2href{$what} = "$docu_doc#$id"; print "# found bibliography for '$what' id $id\n" if $T2H_DEBUG & $DEBUG_BIB; $what = &t2h_anchor($id, '', $what); } } elsif ($in_glossary && $T2H_USE_GLOSSARY) { $id = 'GLOSS' . ++$gloss_num; $entry = $what; $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; $gloss2href{$entry} = "$docu_doc#$id"; print "# found glossary for '$entry' id $id\n" if $T2H_DEBUG & $DEBUG_GLOSS; $what = &t2h_anchor($id, '', $what); } elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v')) { EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines); } &html_pop_if('P'); if ($html_element eq 'DL' || $html_element eq 'DD') { if ($things_map{$in_table} && !$what) { # special case to allow @table @bullet for instance push(@lines, &debug("
    $things_map{$in_table}\n", __LINE__)); } else { push(@lines, &debug("
    \@$in_table\{$what\}\n", __LINE__)); } push(@lines, "
    "); &html_push('DD') unless $html_element eq 'DD'; if ($table_type) { # add also an index unshift(@input_spool, "\@${table_type}index $what\n"); } } elsif ($html_element eq 'TABLE') { push(@lines, &debug("$what\n", __LINE__)); &html_push('TR'); } elsif ($html_element eq 'TR') { push(@lines, &debug("\n", __LINE__)); push(@lines, &debug("$what\n", __LINE__)); } else { push(@lines, &debug("
  • $what\n", __LINE__)); &html_push('LI') unless $html_element eq 'LI'; } push(@lines, &html_debug('', __LINE__)); if ($deferred_ref) { push(@lines, &debug("$deferred_ref\n", __LINE__)); $deferred_ref = ''; } next; } elsif (/^\@tab\s+(.*)$/) { push(@lines, "$1\n"); next; } } } # paragraph separator if ($_ eq "\n" && ! $in_pre) { next if $#lines >= 0 && $lines[$#lines] eq "\n"; if ($html_element eq 'P') { push (@lines, &debug("

    \n", __LINE__)); } # else # { # push(@lines, "

    \n"); # $_ = &debug("

    \n", __LINE__); # } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI') { &html_push('P'); push(@lines, &debug("

    \n", __LINE__)); } } # otherwise push(@lines, $_) unless $in_titlepage; push(@lines, &debug("

  • \n", __LINE__)) if ($tag eq 'center'); } # finish TOC $level = 0; while ($level < $curlevel) { $curlevel--; push(@toc_lines, "\n"); } print "# end of pass 1\n" if $T2H_VERBOSE; SetDocumentLanguage('en') unless ($T2H_LANG); #+++############################################################################ # # # Stuff related to Index generation # # # #---############################################################################ sub EnterIndexEntry { my $prefix = shift; my $key = shift; my $docu_doc = shift; my $section = shift; my $lines = shift; local $_; warn "$ERROR Undefined index command: $_", next unless (exists ($index_properties->{$prefix})); $key =~ s/\s+$//; $_ = $key; &protect_texi; $key = $_; $_ = &protect_html($_); my $html_key = substitute_style($_); my $id; $key = remove_style($key); $key = remove_things($key); $_ = $key; &unprotect_texi; $key = $_; while (exists $index->{$prefix}->{$key}) {$key .= ' '}; if ($lines->[$#lines] =~ /^$/) { $id = $1; } else { $id = 'IDX' . ++$idx_num; push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre)); } $index->{$prefix}->{$key}->{html_key} = $html_key; $index->{$prefix}->{$key}->{section} = $section; $index->{$prefix}->{$key}->{href} = "$docu_doc#$id"; print "# found ${prefix}index for '$key' with id $id\n" if $T2H_DEBUG & $DEBUG_INDEX; } sub IndexName2Prefix { my $name = shift; my $prefix; for $prefix (keys %$index_properties) { return $prefix if ($index_properties->{$prefix}->{name} eq $name); } return undef; } sub GetIndexEntries { my $normal = shift; my $code = shift; my ($entries, $prefix, $key) = ({}); for $prefix (keys %$normal) { for $key (keys %{$index->{$prefix}}) { $entries->{$key} = {%{$index->{$prefix}->{$key}}}; } } if (defined($code)) { for $prefix (keys %$code) { unless (exists $normal->{$keys}) { for $key (keys %{$index->{$prefix}}) { $entries->{$key} = {%{$index->{$prefix}->{$key}}}; $entries->{$key}->{html_key} = "$entries->{$key}->{html_key}"; } } } } return $entries; } sub byAlpha { if ($a =~ /^[A-Za-z]/) { if ($b =~ /^[A-Za-z]/) { return lc($a) cmp lc($b); } else { return 1; } } elsif ($b =~ /^[A-Za-z]/) { return -1; } else { return lc($a) cmp lc($b); } } sub GetIndexPages { my $entries = shift; my (@Letters, $key); my ($EntriesByLetter, $Pages, $page) = ({}, [], {}); my @keys = sort byAlpha keys %$entries; for $key (@keys) { push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key}; } @Letters = sort byAlpha keys %$EntriesByLetter; $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT); unless ($T2H_SPLIT_INDEX) { $page->{First} = $Letters[0]; $page->{Last} = $Letters[$#Letters]; $page->{Letters} = \@Letters; $page->{EntriesByLetter} = $EntriesByLetter; push @$Pages, $page; return $Pages; } if ($T2H_SPLIT_INDEX =~ /^\d+$/) { my $i = 0; my ($prev_letter, $letter); $page->{First} = $Letters[0]; for $letter (@Letters) { if ($i > $T2H_SPLIT_INDEX) { $page->{Last} = $prev_letter; push @$Pages, {%$page}; $page->{Letters} = []; $page->{EntriesByLetter} = {}; $page->{First} = $letter; $i=0; } push @{$page->{Letters}}, $letter; $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}]; $i += scalar(@{$EntriesByLetter->{$letter}}); $prev_letter = $letter; } $page->{Last} = $Letters[$#Letters]; push @$Pages, {%$page}; } return $Pages; } sub GetIndexSummary { my $first_page = shift; my $Pages = shift; my $name = shift; my ($page, $letter, $summary, $i, $l1, $l2, $l); $i = 0; $summary = '
    Jump to:   '; for $page ($first_page, @$Pages) { for $letter (@{$page->{Letters}}) { $l = t2h_anchor('', "$page->{href}#${name}_$letter", "$letter", 0, 'style="text-decoration:none"') . "\n   \n"; if ($letter =~ /^[A-Za-z]/) { $l2 .= $l; } else { $l1 .= $l; } } } $summary .= $l1 . "
    \n" if ($l1); $summary .= $l2 . '

    '; return $summary; } sub PrintIndexPage { my $lines = shift; my $summary = shift; my $page = shift; my $name = shift; push @$lines, $summary; push @$lines , <

    EOT for $letter (@{$page->{Letters}}) { push @$lines, "\n"; for $entry (@{$page->{EntriesByLetter}->{$letter}}) { push @$lines, "\n"; } push @$lines, "\n"; } push @$lines, "
    Index Entry Section

    $letter
    " . t2h_anchor('', $entry->{href}, $entry->{html_key}) . "" . t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) . "

    "; push @$lines, $summary; } sub PrintIndex { my $lines = shift; my $name = shift; my $section = shift; $section = 'Top' unless $section; my $prefix = IndexName2Prefix($name); warn ("$ERROR printindex: bad index name: $name"), return unless $prefix; if ($index_properties->{$prefix}->{code}) { $index_properties->{$prefix}->{from_code}->{$prefix} = 1; } else { $index_properties->{$prefix}->{from}->{$prefix}= 1; } my $Entries = GetIndexEntries($index_properties->{$prefix}->{from}, $index_properties->{$prefix}->{from_code}); return unless %$Entries; if ($T2H_IDX_SUMMARY) { my $key; open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx") || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n"; print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE; for $key (sort keys %$Entries) { print FHIDX "$key\t$Entries->{$key}->{href}\n"; } } my $Pages = GetIndexPages($Entries); my $page; my $first_page = shift @$Pages; my $sec_name = $section; # remove section number $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./; ($first_page->{href} = sec_href($section)) =~ s/\#.*$//; # Update tree structure of document if (@$Pages) { my $sec; my @after; while (@sections && $sections[$#sections] ne $section) { unshift @after, pop @sections; } for $page (@$Pages) { my $node = ($page->{First} ne $page->{Last} ? "$sec_name: $page->{First} -- $page->{Last}" : "$sec_name: $page->{First}"); push @sections, $node; $node2sec{$node} = $node; $sec2node{$node} = $node; $node2up{$node} = $section; $page->{href} = next_doc(); $page->{name} = $node; $node2href{$node} = $page->{href}; if ($prev_node) { $node2next{$prev_node} = $node; $node2prev{$node} = $prev_node; } $prev_node = $node; } push @sections, @after; } my $summary = GetIndexSummary($first_page, $Pages, $name); PrintIndexPage($lines, $summary, $first_page, $name); for $page (@$Pages) { push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); push @$lines, "

    $page->{name}

    \n"; PrintIndexPage($lines, $summary, $page, $name); } } #+++############################################################################ # # # Pass 2/3: handle style, menu, index, cross-reference # # # #---############################################################################ @lines2 = (); # whole document (2nd pass) @lines3 = (); # whole document (3rd pass) $in_menu = 0; # am I inside a menu while (@lines) { $_ = shift(@lines); # # special case (protected sections) # if (/^$PROTECTTAG/o) { push(@lines2, $_); next; } # # menu # if (/^\@menu\b/) { $in_menu = 1; $in_menu_listing = 1; push(@lines2, &debug("
    \n", __LINE__)); next; } if (/^\@end\s+menu\b/) { if ($in_menu_listing) { push(@lines2, &debug("
    \n", __LINE__)); } else { push(@lines2, &debug("\n", __LINE__)); } $in_menu = 0; $in_menu_listing = 0; next; } if ($in_menu) { my ($node, $name, $descr); if (/^\*\s+($NODERE)::/o) { $node = $1; $descr = $'; } elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) { $name = $1; $node = $2; $descr = $'; } elsif (/^\*/) { warn "$ERROR Bad menu line: $_"; } else { if ($in_menu_listing) { $in_menu_listing = 0; push(@lines2, &debug("\n", __LINE__)); } # should be like verbatim -- preseve spaces, etc s/ /\ /g; $_ .= "
    \n"; push(@lines2, $_); } if ($node) { if (! $in_menu_listing) { $in_menu_listing = 1; push(@lines2, &debug("\n", __LINE__)); } # look for continuation while ($lines[0] =~ /^\s+\w+/) { $descr .= shift(@lines); } &menu_entry($node, $name, $descr); } next; } # # printindex # PrintIndex(\@lines2, $2, $1), next if (/^\@printindex\s+(\w+)/); # # simple style substitutions # $_ = &substitute_style($_); # # xref # while (/\@(x|px|info|)ref{([^{}]+)(}?)/) { # note: Texinfo may accept other characters ($type, $nodes, $full) = ($1, $2, $3); ($before, $after) = ($`, $'); if (! $full && $after) { warn "$ERROR Bad xref (no ending } on line): $_"; $_ = "$before$;0${type}ref\{$nodes$after"; next; # while xref } if ($type eq 'x') { $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} "; } elsif ($type eq 'px') { $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} "; } elsif ($type eq 'info') { $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info"; } else { $type = ''; } unless ($full) { $next = shift(@lines); $next = &substitute_style($next); chop($nodes); # remove final newline if ($next =~ /\}/) { # split on 2 lines $nodes .= " $`"; $after = $'; } else { $nodes .= " $next"; $next = shift(@lines); $next = &substitute_style($next); chop($nodes); if ($next =~ /\}/) { # split on 3 lines $nodes .= " $`"; $after = $'; } else { warn "$ERROR Bad xref (no ending }): $_"; $_ = "$before$;0xref\{$nodes$after"; unshift(@lines, $next); next; # while xref } } } $nodes =~ s/\s+/ /g; # remove useless spaces @args = split(/\s*,\s*/, $nodes); $node = $args[0]; # the node is always the first arg $node = &normalise_node($node); $sec = $args[2] || $args[1] || $node2sec{$node}; $href = $node2href{$node}; if (@args == 5) { # reference to another manual $sec = $args[2] || $node; $man = $args[4] || $args[3]; $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after"; } elsif ($type =~ /Info/) { # inforef warn "$ERROR Wrong number of arguments: $_" unless @args == 3; ($nn, $_, $in) = @args; $_ = "${before}${type} file `$in', node `$nn'$after"; } elsif ($sec && $href && ! $T2H_SHORT_REF) { $_ = "${before}${type}"; $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type}; $_ .= &t2h_anchor('', $href, $sec) . $after; } elsif ($href) { $_ = "${before}${type} " . &t2h_anchor('', $href, $args[2] || $args[1] || $node) . $after; } else { warn "$ERROR Undefined node ($node): $_"; $_ = "$before$;0xref{$nodes}$after"; } } # replace images s[\@image\s*{(.+?)}] { my @args = split (/\s*,\s*/, $1); my $base = $args[0]; my $image = LocateIncludeFile("$base.png") || LocateIncludeFile("$base.jpg") || LocateIncludeFile("$base.gif"); warn "$ERROR no image file for $base: $_" unless ($image && -e $image); "\"$base\""; ($T2H_CENTER_IMAGE ? "
    \"$base\"
    " : "\"$base\""); }eg; # # try to guess bibliography references or glossary terms # unless (/^/) { $done .= $pre . &t2h_anchor('', $href, $what); } else { $done .= "$pre$what"; } $_ = $post; } $_ = $done . $_; } if ($T2H_USE_GLOSSARY) { $done = ''; while (/\b\w+\b/) { ($pre, $what, $post) = ($`, $&, $'); $entry = $what; $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; $href = $gloss2href{$entry}; if (defined($href) && $post !~ /^[^<]*<\/A>/) { $done .= $pre . &t2h_anchor('', $href, $what); } else { $done .= "$pre$what"; } $_ = $post; } $_ = $done . $_; } } # otherwise push(@lines2, $_); } print "# end of pass 2\n" if $T2H_VERBOSE; # # split style substitutions # while (@lines2) { $_ = shift(@lines2); # # special case (protected sections) # if (/^$PROTECTTAG/o) { push(@lines3, $_); next; } # # split style substitutions # $old = ''; while ($old ne $_) { $old = $_; if (/\@(\w+)\{/) { ($before, $style, $after) = ($`, $1, $'); if (defined($style_map{$style})) { $_ = $after; $text = ''; $after = ''; $failed = 1; while (@lines2) { if (/\}/) { $text .= $`; $after = $'; $failed = 0; last; } else { $text .= $_; $_ = shift(@lines2); } } if ($failed) { die "* Bad syntax (\@$style) after: $before\n"; } else { $text = &apply_style($style, $text); $_ = "$before$text$after"; } } } } # otherwise push(@lines3, $_); } print "# end of pass 3\n" if $T2H_VERBOSE; #+++############################################################################ # # # Pass 4: foot notes, final cleanup # # # #---############################################################################ @foot_lines = (); # footnotes @doc_lines = (); # final document $end_of_para = 0; # true if last line is

    while (@lines3) { $_ = shift(@lines3); # # special case (protected sections) # if (/^$PROTECTTAG/o) { push(@doc_lines, $_); $end_of_para = 0; next; } # # footnotes # while (/\@footnote([^\{\s]+)\{/) { ($before, $d, $after) = ($`, $1, $'); $_ = $after; $text = ''; $after = ''; $failed = 1; while (@lines3) { if (/\}/) { $text .= $`; $after = $'; $failed = 0; last; } else { $text .= $_; $_ = shift(@lines3); } } if ($failed) { die "* Bad syntax (\@footnote) after: $before\n"; } else { $foot_num++; $docid = "DOCF$foot_num"; $footid = "FOOT$foot_num"; $foot = "($foot_num)"; push(@foot_lines, "

    " . &t2h_anchor($footid, "$d#$docid", $foot) . "

    \n"); $text = "

    $text" unless $text =~ /^\s*

    /; push(@foot_lines, "$text\n"); $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after; } } # # remove unnecessary

    # if (/^\s*

    \s*$/) { next if $end_of_para++; } else { $end_of_para = 0; } # otherwise push(@doc_lines, $_); } print "# end of pass 4\n" if $T2H_VERBOSE; #+++############################################################################ # # # Pass 5: print things # # # #---############################################################################ $T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H); $T2H_L2H = &l2h_ToHtml if ($T2H_L2H); $T2H_L2H = &l2h_InitFromHtml if ($T2H_L2H); # fix node2up, node2prev, node2next, if desired if ($has_top_command) { for $section (keys %sec2number) { $node = $sec2node{$section}; $node2up{$node} = Sec2UpNode($section) unless $node2up{$node}; $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node}; $node2next{$node} = Sec2NextNode($section) unless $node2next{$node}; } } # prepare %T2H_THISDOC $T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document"; $T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle}; $T2H_THISDOC{author} = $value{'_author'}; $T2H_THISDOC{subtitle} = $value{'_subtitle'}; $T2H_THISDOC{shorttitle} = $value{'_shorttitle'}; for $key (keys %T2H_THISDOC) { $_ = &substitute_style($T2H_THISDOC{$key}); &unprotect_texi; s/\s*$//; $T2H_THISDOC{$key} = $_; } # if no sections, then simply print document as is unless (@sections) { print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE; open(FILE, "> $docu_top_file") || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; &$T2H_print_page_head(\*FILE); $T2H_THIS_SECTION = \@doc_lines; t2h_print_lines(\*FILE); &$T2H_print_foot_navigation(\*FILE); &$T2H_print_page_foot(\*FILE); close(FILE); goto Finish; } # initialize $T2H_HREF, $T2H_NAME %T2H_HREF = ( 'First' , sec_href($sections[0]), 'Last', sec_href($sections[$#sections]), 'About', $docu_about. '#SEC_About', ); # prepare TOC, OVERVIEW, TOP $T2H_TOC = \@toc_lines; $T2H_OVERVIEW = \@stoc_lines; if ($has_top) { while (1) { $_ = shift @doc_lines; last if /$TOPEND/; push @$T2H_TOP, $_; } $T2H_HREF{'Top'} = $docu_top . '#SEC_Top'; } else { $T2H_HREF{'Top'} = $T2H_HREF{First}; } $node2href{Top} = $T2H_HREF{Top}; $T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines; $T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines; # settle on index if ($T2H_INDEX_CHAPTER) { $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)}; warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n" unless $T2H_HREF{Index}; } if (! $T2H_HREF{Index} && $first_index_chapter) { $T2H_INDEX_CHAPTER = $first_index_chapter; $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER}; } print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n" if ($T2H_VERBOSE && $T2H_HREF{Index}); %T2H_NAME = ( 'First', clean_name($sec2node{$sections[0]}), 'Last', clean_name($sec2node{$sections[$#sections]}), 'About', $T2H_WORDS->{$T2H_LANG}->{'About_Title'}, 'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'}, 'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'}, 'Index' , clean_name($T2H_INDEX_CHAPTER), 'Top', clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}), ); ############################################################################# # print frame and frame toc file # if ( $T2H_FRAMES ) { open(FILE, "> $docu_frame_file") || die "$ERROR: Can't open $docu_frame_file for writing: $!\n"; print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE; &$T2H_print_frame(\*FILE); close(FILE); open(FILE, "> $docu_toc_frame_file") || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n"; print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE; &$T2H_print_toc_frame(\*FILE); close(FILE); } ############################################################################# # print Top # open(FILE, "> $docu_top_file") || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; &$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT); if ($has_top) { print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE; $T2H_THIS_SECTION = $T2H_TOP; $T2H_HREF{This} = $T2H_HREF{Top}; $T2H_NAME{This} = $T2H_NAME{Top}; &$T2H_print_Top(\*FILE); } close(FILE) if $T2H_SPLIT; ############################################################################# # Print sections # $T2H_NODE{Forward} = $sec2node{$sections[0]}; $T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]}); $T2H_HREF{Forward} = sec_href($sections[0]); $T2H_NODE{This} = 'Top'; $T2H_NAME{This} = $T2H_NAME{Top}; $T2H_HREF{This} = $T2H_HREF{Top}; if ($T2H_SPLIT) { print "# writing " . scalar(@sections) . " sections in $docu_rdir$docu_name"."_[1..$doc_num]" if $T2H_VERBOSE; $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); undef $FH; $doc_num = 0; } else { print "# writing " . scalar(@sections) . " sections in $docu_top_file ..." if $T2H_VERBOSE; $FH = \*FILE; $previous = ''; } $counter = 0; # loop through sections while ($section = shift(@sections)) { if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND)) { if ($FH) { #close previous page &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; &$T2H_print_page_foot($FH); close($FH); undef $FH; } } $T2H_NAME{Back} = $T2H_NAME{This}; $T2H_HREF{Back} = $T2H_HREF{This}; $T2H_NODE{Back} = $T2H_NODE{This}; $T2H_NAME{This} = $T2H_NAME{Forward}; $T2H_HREF{This} = $T2H_HREF{Forward}; $T2H_NODE{This} = $T2H_NODE{Forward}; if ($sections[0]) { $T2H_NODE{Forward} = $sec2node{$sections[0]}; $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward}); $T2H_HREF{Forward} = sec_href($sections[0]); } else { undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward}; } $node = $node2up{$T2H_NODE{This}}; $T2H_HREF{Up} = $node2href{$node}; if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up}) { $T2H_NAME{Up} = $T2H_NAME{Top}; $T2H_HREF{Up} = $T2H_HREF{Top}; $T2H_NODE{Up} = 'Up'; } else { $T2H_NAME{Up} = &clean_name($node); $T2H_NODE{Up} = $node; } $node = $T2H_NODE{This}; $node = $node2prev{$node}; $T2H_NAME{Prev} = &clean_name($node); $T2H_HREF{Prev} = $node2href{$node}; $T2H_NODE{Prev} = $node; $node = $T2H_NODE{This}; if ($node2up{$node} && $node2up{$node} ne 'Top'&& ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node})) { $node = $node2up{$node}; while ($node && $node ne $node2up{$node} && ! $node2prev{$node}) { $node = $node2up{$node}; } $node = $node2prev{$node} unless $node2up{$node} eq 'Top' || ! $node2up{$node}; } else { $node = $node2prev{$node}; } $T2H_NAME{FastBack} = &clean_name($node); $T2H_HREF{FastBack} = $node2href{$node}; $T2H_NODE{FastBack} = $node; $node = $T2H_NODE{This}; $node = $node2next{$node}; $T2H_NAME{Next} = &clean_name($node); $T2H_HREF{Next} = $node2href{$node}; $T2H_NODE{Next} = $node; $node = $T2H_NODE{This}; if ($node2up{$node} && $node2up{$node} ne 'Top'&& ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node})) { $node = $node2up{$node}; while ($node && $node ne $node2up{$node} && ! $node2next{$node}) { $node = $node2up{$node}; } } $node = $node2next{$node}; $T2H_NAME{FastForward} = &clean_name($node); $T2H_HREF{FastForward} = $node2href{$node}; $T2H_NODE{FastForward} = $node; if (! defined($FH)) { my $file = $T2H_HREF{This}; $file =~ s/\#.*$//; open(FILE, "> $docu_rdir$file") || die "$ERROR: Can't open $docu_rdir$file for writing: $!\n"; $FH = \*FILE; &$T2H_print_page_head($FH); t2h_print_label($FH); &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter'; } else { t2h_print_label($FH); } $T2H_THIS_SECTION = []; while (@doc_lines) { $_ = shift(@doc_lines); last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND); push(@$T2H_THIS_SECTION, $_); } $previous = $_; &$T2H_print_section($FH); if ($T2H_VERBOSE) { $counter++; print "." if $counter =~ /00$/; } } if ($T2H_SPLIT) { &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; &$T2H_print_page_foot($FH); close($FH); } print "\n" if $T2H_VERBOSE; ############################################################################# # Print ToC, Overview, Footnotes # undef $T2H_HREF{Prev}; undef $T2H_HREF{Next}; undef $T2H_HREF{Back}; undef $T2H_HREF{Forward}; undef $T2H_HREF{Up}; if (@foot_lines) { print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $docu_foot; $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'}; $T2H_THIS_SECTION = \@foot_lines; &$T2H_print_Footnotes(\*FILE); close(FILE) if $T2H_SPLIT; } if (@toc_lines) { print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $T2H_HREF{Contents}; $T2H_NAME{This} = $T2H_NAME{Contents}; $T2H_THIS_SECTION = \@toc_lines; &$T2H_print_Toc(\*FILE); close(FILE) if $T2H_SPLIT; } if (@stoc_lines) { print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $T2H_HREF{Overview}; $T2H_NAME{This} = $T2H_NAME{Overview}; $T2H_THIS_SECTION = \@stoc_lines; unshift @$T2H_THIS_SECTION, "

    \n"; push @$T2H_THIS_SECTION, "\n
    \n"; &$T2H_print_Overview(\*FILE); close(FILE) if $T2H_SPLIT; } if ($about_body = &$T2H_about_body()) { print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $T2H_HREF{About}; $T2H_NAME{This} = $T2H_NAME{About}; $T2H_THIS_SECTION = [$about_body]; &$T2H_print_About(\*FILE); close(FILE) if $T2H_SPLIT; } unless ($T2H_SPLIT) { &$T2H_print_page_foot(\*FILE); close (FILE); } Finish: &l2h_FinishFromHtml if ($T2H_L2H); &l2h_Finish if($T2H_L2H); print "# that's all folks\n" if $T2H_VERBOSE; exit(0); #+++############################################################################ # # # Low level functions # # # #---############################################################################ sub LocateIncludeFile { my $file = shift; my $dir; return $file if (-e $file && -r $file); foreach $dir (@T2H_INCLUDE_DIRS) { return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file"); } return undef; } sub clean_name { local ($_); $_ = &remove_style($_[0]); &unprotect_texi; return $_; } sub update_sec_num { local($name, $level) = @_; my $ret; $level--; # here we start at 0 if ($name =~ /^appendix/ || defined(@appendix_sec_num)) { # appendix style if (defined(@appendix_sec_num)) { &incr_sec_num($level, @appendix_sec_num); } else { @appendix_sec_num = ('A', 0, 0, 0); } $ret = join('.', @appendix_sec_num[0..$level]); } else { # normal style if (defined(@normal_sec_num)) { &incr_sec_num($level, @normal_sec_num); } else { @normal_sec_num = (1, 0, 0, 0); } $ret = join('.', @normal_sec_num[0..$level]); } $ret .= "." if $level == 0; return $ret; } sub incr_sec_num { local($level, $l); $level = shift(@_); $_[$level]++; foreach $l ($level+1 .. 3) { $_[$l] = 0; } } sub Sec2UpNode { my $sec = shift; my $num = $sec2number{$sec}; return '' unless $num; return 'Top' unless $num =~ /\.\d+/; $num =~ s/\.[^\.]*$//; $num = $num . '.' unless $num =~ /\./; return $sec2node{$number2sec{$num}}; } sub Sec2PrevNode { my $sec = shift; my $num = $sec2number{$sec}; my ($i, $post); if ($num =~ /(\w+)(\.$|$)/) { $num = $`; $i = $1; $post = $2; if ($i eq 'A') { $i = $normal_sec_num[0]; } elsif ($i ne '1') { # unfortunately, -- operator is not magical $i = chr(ord($i) + 1); } else { return ''; } return $sec2node{$number2sec{$num . $i . $post}} } return ''; } sub Sec2NextNode { my $sec = shift; my $num = $sec2number{$sec}; my $i; if ($num =~ /(\w+)(\.$|$)/) { $num = $`; $i = $1; $post = $2; if ($post eq '.' && $i eq $normal_sec_num[0]) { $i = 'A'; } else { $i++; } return $sec2node{$number2sec{$num . $i . $post}} } return ''; } sub check { local($_, %seen, %context, $before, $match, $after); while (<>) { if (/\@(\*|\.|\:|\@|\{|\})/) { $seen{$&}++; $context{$&} .= "> $_" if $T2H_VERBOSE; $_ = "$`XX$'"; redo; } if (/\@(\w+)/) { ($before, $match, $after) = ($`, $&, $'); if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address $seen{'e-mail address'}++; $context{'e-mail address'} .= "> $_" if $T2H_VERBOSE; } else { $seen{$match}++; $context{$match} .= "> $_" if $T2H_VERBOSE; } $match =~ s/^\@/X/; $_ = "$before$match$after"; redo; } } foreach (sort(keys(%seen))) { if ($T2H_VERBOSE) { print "$_\n"; print $context{$_}; } else { print "$_ ($seen{$_})\n"; } } } sub open { local($name) = @_; ++$fh_name; if (open($fh_name, $name)) { unshift(@fhs, $fh_name); } else { warn "$ERROR Can't read file $name: $!\n"; } } sub init_input { @fhs = (); # hold the file handles to read @input_spool = (); # spooled lines to read $fh_name = 'FH000'; &open($docu); } sub next_line { local($fh, $line); if (@input_spool) { $line = shift(@input_spool); return($line); } while (@fhs) { $fh = $fhs[0]; $line = <$fh>; return($line) if $line; close($fh); shift(@fhs); } return(undef); } # used in pass 1, use &next_line sub skip_until { local($tag) = @_; local($_); while ($_ = &next_line) { return if /^\@end\s+$tag\s*$/; } die "* Failed to find '$tag' after: " . $lines[$#lines]; } # used in pass 1 for l2h use &next_line sub string_until { local($tag) = @_; local($_, $string); while ($_ = &next_line) { return $string if /^\@end\s+$tag\s*$/; # $_ =~ s/hbox/mbox/g; $string = $string.$_; } die "* Failed to find '$tag' after: " . $lines[$#lines]; } # # HTML stacking to have a better HTML output # sub html_reset { @html_stack = ('html'); $html_element = 'body'; } sub html_push { local($what) = @_; push(@html_stack, $html_element); $html_element = $what; } sub html_push_if { local($what) = @_; push(@html_stack, $html_element) if ($html_element && $html_element ne 'P'); $html_element = $what; } sub html_pop { $html_element = pop(@html_stack); } sub html_pop_if { local($elt); if (@_) { foreach $elt (@_) { if ($elt eq $html_element) { $html_element = pop(@html_stack) if @html_stack; last; } } } else { $html_element = pop(@html_stack) if @html_stack; } } sub html_debug { local($what, $line) = @_; if ($T2H_DEBUG & $DEBUG_HTML) { $what = "\n" unless $what; return("$what") } return($what); } # to debug the output... sub debug { local($what, $line) = @_; return("$what") if $T2H_DEBUG & $DEBUG_HTML; return($what); } sub SimpleTexi2Html { local $_ = $_[0]; &protect_texi; &protect_html; $_ = substitute_style($_); $_[0] = $_; } sub normalise_node { local $_ = $_[0]; s/\s+/ /g; s/ $//; s/^ //; &protect_texi; &protect_html; $_ = substitute_style($_); $_[0] = $_; } sub menu_entry { my ($node, $name, $descr) = @_; my ($href, $entry); &normalise_node($node); $href = $node2href{$node}; if ($href) { $descr =~ s/^\s+//; $descr =~ s/\s*$//; $descr = SimpleTexi2Html($descr); if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node}) { $entry = $node2sec{$node}; $name = ''; } else { &normalise_node($name); $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY) ? "$name : $node" : $node); } if ($T2H_AVOID_MENU_REDUNDANCY && $descr) { my $clean_entry = $entry; $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /); $clean_entry =~ s/[^\w]//g; my $clean_descr = $descr; $clean_descr =~ s/[^\w]//g; $descr = '' if ($clean_entry eq $clean_descr) } push(@lines2,&debug('
    \n", __LINE__)); } elsif ($node =~ /^\(.*\)\w+/) { push(@lines2,&debug('\n", __LINE__)) } else { warn "$ERROR Undefined node of menu_entry ($node): $_"; } } sub do_ctrl { "^$_[0]" } sub do_email { local($addr, $text) = split(/,\s*/, $_[0]); $text = $addr unless $text; &t2h_anchor('', "mailto:$addr", $text); } sub do_sc { # l2h does this much better return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H); return "\U$_[0]\E"; } sub do_math { return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H); return "".$text.""; } sub do_uref { local($url, $text, $only_text) = split(/,\s*/, $_[0]); $text = $only_text if $only_text; $text = $url unless $text; &t2h_anchor('', $url, $text); } sub do_url { &t2h_anchor('', $_[0], $_[0]) } sub do_acronym { return '' . $_[0] . ''; } sub do_accent { return "&$_[0]acute;" if $_[1] eq 'H'; return "$_[0]." if $_[1] eq 'dotaccent'; return "$_[0]*" if $_[1] eq 'ringaccent'; return "$_[0]".'[' if $_[1] eq 'tieaccent'; return "$_[0]".'(' if $_[1] eq 'u'; return "$_[0]_" if $_[1] eq 'ubaraccent'; return ".$_[0]" if $_[1] eq 'udotaccent'; return "$_[0]<" if $_[1] eq 'v'; return "&$_[0]cedil;" if $_[1] eq ','; return "$_[0]" if $_[1] eq 'dotless'; return undef; } sub apply_style { local($texi_style, $text) = @_; local($style); $style = $style_map{$texi_style}; if (defined($style)) { # known style if ($style =~ /^\"/) { # add quotes $style = $'; $text = "\`$text\'"; } if ($style =~ /^\&/) { # custom $style = $'; $text = &$style($text, $texi_style); } elsif ($style) { # good style $text = "<$style>$text"; } else { # no style } } else { # unknown style $text = undef; } return($text); } # remove Texinfo styles sub remove_style { local($_) = @_; 1 while(s/\@\w+{([^\{\}]+)}/$1/g); return($_); } sub remove_things { local ($_) = @_; s|\@(\w+)\{\}|$1|g; return $_; } sub substitute_style { local($_) = @_; local($changed, $done, $style, $text); &simple_substitutions; $changed = 1; while ($changed) { $changed = 0; $done = ''; while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) { $text = &apply_style($1, $2); if ($text) { $_ = "$`$text$'"; $changed = 1; } else { $done .= "$`\@$1"; $_ = "{$2}$'"; } } $_ = $done . $_; } return($_); } sub t2h_anchor { local($name, $href, $text, $newline, $extra_attribs) = @_; local($result); $result = " $what =~ s/\&/\&\#38;/g; $what =~ s/\/\&\#62;/g; # restore anything in quotes # this fixes my problem where I had: # < IMG SRC="leftarrow.gif" ALT="<--" > but what if I wanted < in my ALT text ?? # maybe byte stuffing or some other technique should be used. $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g; $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g; $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g; # but recognize some HTML things $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # $what =~ s/\&\#60;A ([^\&]+)\&\#62;//g; # $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;//g; # return($what); } sub unprotect_texi { s/$;0/\@/go; s/$;1/\{/go; s/$;2/\}/go; s/$;3/\`/go; s/$;4/\'/go; } sub Unprotect_texi { local $_ = shift; &unprotect_texi; return($_); } sub unprotect_html { local($what) = @_; $what =~ s/\&\#38;/\&/g; $what =~ s/\&\#60;/\/g; return($what); } sub t2h_print_label { my $fh = shift; my $href = shift || $T2H_HREF{This}; $href =~ s/.*#(.*)$/$1/; print $fh qq{\n}; } ############################################################################## # These next few lines are legal in both Perl and nroff. .00 ; # finish .ig 'di \" finish diversion--previous line must be blank .nr nl 0-1 \" fake up transition to first page again .nr % 0 \" start at page 1 '; __END__ ############# From here on it's a standard manual page ############ .so /usr/local/man/man1/texi2html.1 readline-6.3/doc/readline.ps0000664000043600000240000263552312276516305014673 0ustar chetstaff%!PS-Adobe-2.0 %%Creator: dvips(k) 5.991 Copyright 2011 Radical Eye Software %%Title: readline.dvi %%CreationDate: Tue Feb 11 16:57:25 2014 %%Pages: 77 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 %%+ CMSLTT10 CMTI10 CMSL10 CMSS10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o readline.ps readline.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2014.02.11:1657 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}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{A A 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/IEn 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 IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 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 A 1 get A mul exch 0 get A 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/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/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 %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /UniqueID 5087384 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /UniqueID 5000792 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 13 /fl put dup 44 /comma put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5D2579DAAEE12528C23ED8A1A2F34CAD1CE8BA67D0B660E9281F247EC10F816B FBD6B9E8AAAA1DFCC4C9FF1C6AD05C0D776DBF675838C2629826D5337EED815F 4268604A4EED01A2C7842FCAED2E37F7F39F980866DC5BCACA8616749FFE946C A0AB0475DA734C00D99912C544BD31F8A69367D068F0A18EE79FBD4D5385B8C1 DEB92502ACB3B657A54C9BF786D7DC1ACABDF29591D77ACE1D4FE00E935D2858 3733656C79DD1C174C26DD97D462B4323F33B410DEB64244095927C572FA90C6 4C8B709C5B7E4386AEB936C2656B59AAFB74F9E40E680D890903458CB1B2AB8E 6E629F88B51546877F7799B99DECDC13638E2765343988DE2ED33279DEC3FF0E 2255A734F5925608991F068274CB1E5301C5B8623C5878851857B3E665490A7F FCE5A8DC0FFCF3D56BF55E4AB2ACC6743F52B59C1343A1C25BD46A6A3722957E 24A6F4B970A594F67A09BADB6A7B4BEAD3FF97D0734470750FCE29807D315EFE F93BE16F39C0B59D107D1834FDDFD520D8A429FCDCA408C79DEB580081191B43 20650B5375AECFC2DC500E3CA934AFA3D241FE7988892CEA42C8677DE18C43FA C3094F8DCB1D070DE0D32B69E2E1ECB4A82AD9E38D889D05418DF4E3C398FEA7 BFE9B364A389B13BE713F5B2553ACD16C14AAE521B63E8A7DD0258EFFB95646C 18226B01D916D41DDB322F6E83C3E3717FC113BF7D7AFDA2CC03B8175BD7DCD2 AEC82FB156E051F2D87B9F12F81E1F43E822EE27219758B3E237AD772E7B1DB0 19ABCE7BE6A2FC3C7DA0766FB82CEDBAFC19F7EB19C7448C1719C88FE99BCB73 F7DEA427FBFCDF4F00E0FDACD080AF068F7A1CDE18315BD694C60B1DC71DAF1D 1009AFC847156F96D9CD38A764D0EA70E5E9B6E19A2A0B80ECBB84CA44C137F1 4925EF5766F00C22F967F9F68D7637DF0982785DABB8684A5525C6D23DB05B31 026B49433392C8930BD9661B23C2EC0E0BC4F00FFB2587943DFDB4C6864CF1FC 7152CC20860754204B7D4536F3C11460CD2626DEE88BBFE1CAFB5E62C9BA0C8D 514629E5A25C4FDEDF56FA2CFEE1A648E78803062DAA41E3D2CA4400C74C3C33 B77692A278BCC9B4E4512CFE8D71D53750ED0F7BBBC811EDDDAE0E7049BD916F 8D1819A0AEF50E284BCE7CD48517DACB587D2C48AA89062A791DBA7549C22C0D 2B14B2FFB48A05CEFA73D1F81BECD4BE921AEF860B30CC1FEFA6199BB39A8156 1AC9CE55140BD9EFB3B2BCF6FB6645816F11C172C525D9E623FE2041BE9D41C1 A3338195A24873E110DE875B1E4FFD5CA3CC44FF36163C867855620EA60319B2 27A40368957F81B38F6346C45EEF35636B01923E356F2F4279001DF3FF52BA26 B0C523895515658EE61DCD016A839A71ACB5645B4CEF3035843545920F7F6624 B414350819CFBED577BEC9CAF1465EA75DFD39318F02ABF8697621325964DD46 E8206C04B7C5285DDC91EDBB7F76DF9C9448A778F4D62307B2F042B169053544 B3B19D36FF290B4BD1B807749BBF6077BA682539E07B846C9BEE668BC5DC5DEF CFAC349ECCA59B1A46CF89F2C410C648AB50B63BC616BA3D448B1A08A2C10BB2 CA96A7BB2A498E7F00CFFFAC03C1BFFBA166D4948593ACEFB6E1E6D586D24F58 43A02C59ADDAAC725D06E4C4EC1E1F5B2203289908605D950551C23A71E12403 A443576CA8BF7C365ED9ED2AC7FA6B17A786DFD3731967B43B8715028241DA09 934CD93AFE81013D9642DFBA66EA1C024FC804ED884088FA398F065F2AF53163 6ABC66A18AB971A7B494B6EE78A12FEF18EAB42529A1296D054ACA5BF2C386B3 5DC802B67E362B2FC35633487F2C0FC90333508BA50DCA2EBEE2FB939910E7EC 128B7A7AA0F7A7CA91AF854AD2505F5DA70889940C4945BE229F6C2ECD1A8D5A B35F475DA0D33125009C6C3E7730DACFCF279EDC74DFC88630342D1D81315AEF 884EABB7E785653BA2463C48708ECE70A49503575048CC768BB8F13FAECE7FCF 29FAE1045C5C6E475E634DA1A2128A0D16487BF3D62BBAAFF6ABE72FF971C361 E5B530D6C6977137319321BFDB6A526B7AEA07EB6548F6FACAD54C426D3E5207 0443CA8ED660D368BF42FA1107A9503F5FCC4EB8D4C7D2CE580597E4A84EEA31 135D139540C7D5B0AAE65FFE3475C1F2DA4318DB4204677B4C30652DA10155F9 C1CEE50DA12BF2F08521A17641A2F5541EC84195149392FB34E900EE8C130A72 A06E8D5C1C3012486BCBE6F82A8570054C243ADAB55F1BD0A2AC1D73029F6E0A 91230FC5BD62E7C8179271886FE2A3D0A4D55D26A953064E16B99189D714CE51 6C1ED25B47BBBF5494E1C788038B82BFD0D6CE9DB60E49EAF500DF9ED431BE3B 5C5E93A14078C7962DCCF2A34966BC16EC17989C10D2C74FE0DC9306CEB61DF8 A42FB761999A3EB75E31431F568CDEB0A3CC8C5FB6B76B8768086F20D284D302 A144E5CDDB303676D612FE7D749FAF7E0EEBA5D5FF48E3CBBE5046131A8A00DB 21F4A2C8788781CC2D3ED96148B7C77CAA7278CC32284B2BC83BBF542172F186 677F635F73216E1D41D2CA802498C469234B79AF35BE521DF9E633293B1BAFDD 3A0B043626E3CB0EE9072FE09F90B8ABAB28F60C42CD3F2323B7BA4E4F9FF6C9 BEB3D0E12B74799E2321A65B88840470446AFB66E7B9FD92638947923F8942B8 B9182715510969377DE1362216F2EF6B96D4622ABE65EBBC5F7FC397B50DF682 07EEB73A649383B86EB255B9145916EE2E8C326052ECDE0EB367DCB62F7F88B3 6F9F23853CF377EDF5F4B1F0A6DF99EF29F21452D2628A40F589BBA831118DA9 DDF19BB85E5AF7D79F5DB4015D90F3AF189E7D5E9E3585B9D444218B889366E5 7B4B8EB34F4106ED4E54EF08F08581EB40A5B49E214A86251FEB131BCB071406 B322E962F9B14AEBD38747B44F976B30B184AD7667EB5AE3EBA6744D6C8422D8 F4CB40C3216799F46067651DD21F6F763A59E93B9A67484E6CF9EEE3913B6687 BFE8E68087D287651AA7666BA83B0D271A422E3F0FE0C2942AFA64F71B8237F5 31C7F7D6E5D4903D3CA32C77781BD8C959FD6DD1BE80C113B59B39F1941E8770 BF7F8B7139ADF77E2CCADFD99E2A87A5C10802D2D6CE3D9A3830378BE37D8903 B87B38EF25C49FE93C797FEF7114D4BE3A58555F701CE4D8BC2605CEA9725E08 B2460459E5A4CE44793FDF3C212A6B5909B49A4ECA55F53AA3B9AF63A2DDD339 9023D61FF6C29721EF2B49C89320372059FA33F25CF6BC7F64E3B4EC7D7527F9 62A8FE056259BFC788F24506F8F6E9777B693AA26F646A22F3ABA85A6FEE1B41 373D90C3CB55A474A2E5EF80A129F5628CD064B590DEEE7935DE9AF5D68C622C 814452DB304B52DEF5C9490B1366BA1834AC5B27DFF17CAA5722CF783AC8283D B84A3DD19587B204EF584499E78DB2222DCCD50847959B4820CCDC092F88693E 50B9DA33FFEE72C235520F58332A3725BF62BEB005D36FD3CD1B2310B2982A34 A095ACF013BB5C340A21B4537A7BDCD5161377A4818CC44D8A15BE7CACC03D33 11CDF7811E0CF02F6F3213D3B598713F2EDE54E6857A526879C920D085A01997 8DA06915850E5402A4444AABCB08881EDCA2DD068E1455BF9A155C54EF315FAA 279D726F57FC86300BC4D9DFCD4D44EDFDDD4B00DE34948028C7A9255B931CC2 77A0FF40F7ABEC709B67C6EADAD9D24B014DEB4C342E5F37E1CA26A1999CFDAF 50D8E76F1715FA8EF095B88D9A8DF4325572B26753F763F264DA8887E4E5845E 2A01F86149EBDD9CFC21CF2852CE95386DBB1E4DAA2113AA1E0C53746A3AA5F5 78570500FB89E376549E282E2AE990E72C0E77F701FCC977868ED3FBB7C9CCCF CD28795A80AE8787EF1D0C374297819A324504623E12688B08E4782B18F05C75 2E2CD594D0E6C10B002AD61CE491D4B95244E83DB861E36D293C0F556B295FBB 8F045711CD606D024F0F03603629F3BD495183E821D0A1ACD83F3376B62D278A FFD084EF020A119836EB60D0F8A059BAD8D8CCE26A37182E7C89CFC2AB80C724 275E921332ACC5A6991B36A2C7828B632DDDAF04780086F84E1A122461719992 061E3F597C8E6DD8ECE708251DE0DED5DAF913AD4130ED89DD271B17C556F466 A2587876F7954A9888751460B468313DDD88F267BE6C5FEA492A6CF1365AB8B0 D8E872A625799B9BE1859AEFAD98B6F41AE33D0CC069BD36333819995FD9B510 715BC8AC70443A107EB2E34809771DF24D3AC09D47768D3202D809B023FABA7D C6B8CACBEEC4B47082177995C3C00D08446DA56D527D8857E5D3342EC3C42DFA 7E35C992B8C2A50E7374FE57092086613D5A3B4567A9DA3758F48E6817CA3C2D BC552BF4A17E92DFB106E74A2C53DBEA13481DFB9EB64422F5CE073512B67018 46E902A52D5AC8A943C93B1921ACBA76D6DD2DE9077C280E1E6E43ABB9DD11AF E065D8EB102BB53A37F6B491EE341CC8D4D3AE311F122A28F7FC5481CC80E119 EC3E67AEAC772AB31D41151AD51B88122325456163D1E84EFBC5CB9A55BC4C15 7A2D56ABC55E61A49311ECB2C3267F7EAA3C284A0135985EB5E2D4113BDB8433 123A4A4109F6926D9C38D502B5659AF97969C3160BA5E6E32B95AD5D6855D307 89BDDE727683B2F05D6D9E74813CAF8038C03C574183CA79025D33FEBD68811E 1A3B42236EE1CF60614237538CB2C9567612DE1DAB1C864828B9604A5D4A52DF D5012F80352DB0AF93758E8DD4ACEC077160D74FC723F6878B2556690E9ACC91 5B552329E06B87A06E733270BE98C16A30CAE3A798CA80E7A9C3B8733A9428DE 0F4DAFA656E6D01470FA746BB58E686846C29933F9A48932E6AD3A20C7A0FA91 AA45745AF05ABC50D77498AF81E72D0DBF7D6FAF97E5538673C57A6EE39776EE 06BFD30F67A57AC796036A5394DC9A8C75556144497637C28F3C56DBFB21595A D2A46D6C4A0B63508A238B97ACB24499AB5540851B86E273B7B2DED24B458DB1 5280B3F9040C08672F7DFDC4B69C54B92EE3555902BF55D64CFC95A9DD143C18 FEEDB1BEA96762AECDA9DEE705AF2DD54C619328B9A26D019984DEC1EE34F30E CA4EBD5A4AB2C8547C0EB264D47943AF93E281A9E346B6346B809363CD7D67D9 9A8D6A2B1C109C8F226BE11C405F18E0197A47E44B57C1CBC8CAB957A2F60771 CF8DAD0E361FF6891CACF5672997B0357F9A5D16D424F2B32A0256210106B3B8 160B3CF0FB7D28A84FA861B0210F383466B6E69DA79B59D95AA05D608DAE9D56 7A05E3CBBDFA558C8F3A5D5AD9F70AD60FF059AD26041DE8819EDB2746DAB76A 6600D7C708F08D266FE22609BA7462A9378E691E175230E4D4CF6F1FB40BBCE0 31E34EE09023FB7BEB557267986637DD5D9C70E38C14E485BB6CDFE0826F9DFF F5094AABB6719C11474BD877358C603FE16B3A26B8C3CA026E6B29B1868F2AD6 2960CF99DE7E16B18D3480F52585F39D0B45574D4A0008BCD49C3F2B27930B25 3117251BB7116A23C586F7B0706F7F2BB00611C4FA705CC11783E6A1D868E1E4 5685B46356200BACD8C9851AC613169CDF40BBF1B400E21137D00EBA1E782E97 BD6972E405ECD84202049433393B3C283D44AF4C3BDB3D1B700F43AB576B4C7A 195500FEE676D1DE97C32859987267428884E4E58C2D8FB367810741B0FB7D37 4F185ECAE1AF834069503E8014FA13225152CBEDD5A1CB8895DE03E1B1704892 23D2C13F5EE53AD95EBE5C0AE07FE2DD36209897001FF645DB1276FDA49951B2 D319D63FB045B477BE528C3667F0CCB6853E0D31C77ACFBED46251BFD60C1321 D0FD450193208958E91C05E9518F3E2FB9D4B6AFD5084ED2C13DC3E59F85C853 10AB3B7706863D6056954E6E89A23D22FF9D3A868C7A47FAA92C95A5BCAAD7DA 0D145FDAEC7EF719C077D8FFB191CFE21E87736A98965A4A4AB2447B607D02AE 8995550F0BCEFA8BAB7A197C053F69BBA12CB7C01976219DFC6D2A49D415EFFA 66F17762549A09F43FFEC19B4A6CEE65A6903702F1750B263C342E5CD8D26F9B 363D9AF452BBB2B0D5551D412872AC8F781630B293FA0B96FF49893200BDC53E 32CAEA43D4AC2D01FB9212277ADB59C864CED023A8C30665A2BFD059A1031D86 6410CF5A2716F0927A8F9213C73681278B8EC121E0AC73D46A704D6B28D7B003 FD075F4455CABF65FE19A91768983B2B3FCD40AA0194EDEF3C94C06D2787F469 BB045AF387183D001E980E05859D316821023CBC205C505B11DA011D784B7F3A C47E20AD8F87E499D7D77EF84C75093BC67969E7CA8714F55D7945F799D6A640 E6F00FCFE28DE659F36F947324DFF4E79AEFB61EF14ACB3FC078873A17FCB5E1 D3C40C11B5A4327CF96E07F5CA9D62127553EE94BF3C148D9EB83353E9DBFDFD FF9FACBDC8AED20340D2FCA6F3866DF72EE9CC880E4069DAAA2BA5A845DE7FB6 CF7E686BC5CE9A4B6D37890D902CB7641033A7C1B7F974828F4FC8AF251F7985 E576958972852E144094C10EDA802DEE259F7437CD26A1C9094F87ED0697D713 94BF9E15347EF558B9D40243DDD348C7FDC96A1FB6D362BD9D955BAE3F6A2353 84D89A27BB4DABE3CB58A9334971E39215DE41B4DA77FFD32B088EDE2E23A26B 59273A7DC587D70CCDF43BC64BC3CB11B6EF90042B8193C0C4E66D9C7BC7F459 F8FFA1D733503659A2C2BA42C0A1E262D15E97A55E97D746455266507B4B2913 EAB47632D372206F3F1CA23939A281F2CDF5E2DFF06B94560879BE2080E2CBE7 DC93A7869391B1F44A4466B38B2A4A8A8F8774D76B8F2449435B525F2651791D 890D1078533B845F34713FC87A34153D1175B40B7A46F2C228C6405E4652E635 D9DC320111AB934184B34B30A946D74D30894AA99769BCD213FA3494F8C998D9 BE4501663B8CA4441C8A7A0314BE23D451D19E1ED15831DBB29180E023A989ED 4A4C4C92C65637A9DEB914179A4D3735CABEC726E9F431367994E32CA1C83541 ECCB0D463DB8A0316213A3356D7C654F9F5A4C57260485D0FE8ACFB6FA759A74 BC1C53F32A147A9F0B2264AA8CAC642D6D932E462D76F113ED2BE639DC67F8E9 7CEDAC5FC2ED44E4AF3ABB083F3D103378B784E9B0D88DDC98160629B0731AFD 1502AA443FFF69071A8C6E6EA0A309893DF57E550C270B7BA271234BC69DB3DE 7D7A87D9A8450596960F05942E390BD546A9C10501057B96009548EAA8FA3DD9 DE5BACF5AEDAEABC2998F34BB48497E022CF71C4260537F19A7D38679558E405 EEB015B7BDB6092553644D28857CF4FA28E18040C3E6B8DB88289CFB10FD86E1 99D4DAF86714EFA28E61FBB3010CCFB8EFD7C9B6E2B759F276616DDA9F90335A 388DDAC61C577A057434F28CCFB339902BE256D21F4D52DCD450AA5B747D7471 8098E4B634907BE1DAAA43FFAB7E4AA8705E76E9ED086CAF7D73375E7EC6626C FCAE8CE2AB754C256B795BE48428076BF67D614F3FB28AF32DFCD73F17B13E2B B127E86C5726769BA5A5D2045B839E4FB5D382E93851E839D2C0FF5824B72C84 D1C96EE48AFC44DBE54E1844BF709BD50C0E1D456EF920662D905C823C912A13 018EC340C0F4B508F7D8AEAF895AC0CEE8B15A2620DEAF8B4CDCCDCBF40D626E 43CB4C280366C106F7951D505973018D307D9858D32E7360183E68C226060B32 A342BF4CFFDE1AD9B5111CB80734C1E625343148FF2870D1D87DC70E9264E9E9 BA20D962DA30CB7A2755B510F86899FE1430E46E76672E30A1CED0AAAD9E983D 4E3911BB537D48A168F7B3BD46592FD4B07B9CE043BE9DE2148BE10BF8C30C68 76B76138AB34805C6D8B6454E3D5A830407A51B9E1A71DB17668E7A94BB150E7 BEAC13AE7363DEE94E696FEC3627958DC530490FEE0DBDA1ADA7F00848D3C3EA 683757DCB8AFEEA2C95B7B27D8EEC5956AF8E26BC8CFF14DD8A2E6A638C5D6CF E128C7F8BB3A3F27EC922041E857CB68CA824DE6DBC56F68CBD131AAEBD6B0BF 4189A1AFA1108BC42C2697B3C24AD8587EFF5C8B46A995CD881ED98523FC98CA 6A123D37FC9D79F0E9A6E6D9E783D8826A0A07A9EFCD563286710FA3CA4EF170 1B42B440BEF8ABA94FCCF86F0BA118F36F80F6BFFEA5D13CE0FF328CF428D437 EA9076A01A151C0D6CA5A7B8410815A88DD92BBD2A27EF160F39CAA7E0A27549 EE8E1B301374028A8C30504461A0CE8CF9D1AF3BC27182E4FCADBE153FC3BDCE 04B9EF6B6C383FCEEA6DD9D51CFC360A9DDA8F18F28175B3AC453E4387D9CF90 28B44827AEB043F2971C0E6C852882734C9B790DF14ADD37A55E807068431ACE 0BC67F4D03FBB3C611004D0C1E1B9D5CA572191A13820DE990F029E1EC07866B 9307D5B77304C9AA9D987D8E2CB1C302F4EBE5AE1A18EBE36901C6D94A3B4D48 F31301459C87955B6C24F48A98BE883BFBF526DB1DBFAD1D6B23F29E6C32B3C0 CC56550FB658455B8E3F2A76BCF1EBC9F6AAA1200C428465A22FC1C748CA45D2 7427F87D506B90D3C676AD753DDAE196464C9672614D1FC43F0DB91DD9A00B4E 9D8E31DFADEF3AB6518EA1C7BD9BE20AC8C66D0B1CE9737C338E02794640F7F4 F1F2E04CA39971AEBC9FB699ECA8F07569C8AD9833E69DD9EBAF42376BEA1961 9D3312A8620A66BC68607C0B7D723DEF61764B7CA43EBA27ABA5B0F518F40B01 E713AED7BA6E23BA5D866E10638DA78B9BFA68757921C9E766603F884C18E76F 848CE800A1A1E6FADA9E1BC717AF098446AF80924915D0AB86F4A3615D4FD49A A5A844530155E047DF9A6F878677C12391DC8FEE91C90709E3D06F31D10952A6 5B0D30556D0AA5F59DA5637BB280842DF8720816D67F465B48A063BD606B536D 760A402075ABBD70940DFB7EDA04B55B5E36D2B512A6D01E7E97FC90D708EAB6 0F9A77ADCAD63063C5837DDDF800A4D407601B15895E83B58359821426E93994 019B73A5FD9661550718CC3B2F79E9A6A0E7C4984EC1426C0B8EB86DDEAB3FCD D1B467FF32005EDABE59166D2E0564CCD1AF482301D2BFAF138F88E2FEC6AC7F 060555D402304EDECAD793EF9F779F6AC52B1AF86D714F5CDF3C574592E8C742 23204EC2C4C226968B8633554349A2C0A987E2812B8CA402A0A1BC7A16D452A5 76083FA380D36F227828DF913C468AC69C435B2341A590AEE61A44B1A00D5409 B836D6BD6670D5C02A614241941EFF04BB09366E4CCE644F8A3D2CAD5BF9E445 BA296EF46392ECA30976FC566CCD4354D124DA25D9708578214DA5582122D8F6 8EACCEA4CA8F63F15CAB59FDF29AEA5B4480023D6A61878B43B0F9CF1F4C6792 C9B0726B1D5162E665CE4F89BD724CA7B957DDF865F6833BDA3736310595F2A8 58182EFCF9911455FC934CEBD36C3D6E258D948AB4E28D225BAE6C73D7F96E9B EE7BB7FB24CFE23558DB7050113CF8FAAF62E6DF1B05064FA99C2016537F4A60 0C80147EBBB95DBFD8A03B125C464E5917AE0F11D293CB75C8FF18322D788FF9 61593E2CF4FFBDD2A1169A37CD3483C3125A9669231592B85D80FFC5FAABBB79 3E7F46EA5B3F67B0B5802642CC139D752C8A9FC6687CD6380192BBE2864AD792 F84A826F9052A4970DE4725B125874C162F00453A685A329867D237E3FF253B4 0B05384E0452602C3F021E47F5B2D680A5D120B7A7F4E261B1598DA4B55B3AA3 BE47D2C7FB46780153B3A7E124BEEBF25BA598021BF943DDDC3CAC5CC661FCD7 F78EAB069BDD1531684BADB59CB3DAA544A7F38429104399FFD147B2973E02BA 5D7C964A69650D9C5B1C3806A9B0F33478B9B2D8CB730D4E28BDF9C35A0E015E AEE3110714E6E09D51A47EBE4DD5C1A4A7E608B0C5233B85426B1696C88E4A1C 56210C41D7B778DFDAC0708EEEA185E37CEFDE917728E9E2BC9ACE85CEBFF12F 702AE7B7D0288FD933ADDC3AC849D7352613C41BA4A7988A08D24DDF178E3C48 1C7D348E7F5D67A764FDFBF5FB9A20195F4C806ACB59A47F334CE16B5CE3B8AC FC951D49170D29B662A7A6EBEC46EBA01C96E85F8A4559CBC60D675EB6E1D7B3 84C917104B318B9AD8CBAF12CFA478590690265DDB43198C7B7C1C6D5A23DB30 11C1D6AE610ABB2985CB9D00B91860963C316BC83B9F2747AA99CF8EC08CF47C D599CCA471FBD4C2059F8EF134050CC6247E9E56FD480E9B93DC083B0F16D673 7E0A1096C30E9B8B0501BB25516B18471413428F50217BC2EDFD22EC1135D121 DA739DCD4AB3AFDE2AB9407887D1F23CC5778C90D5C32BAA41A094968BB78F81 FE42DB18820C03641895AF1D998B2A0C5C1543FDF91D6562A7D63C136C47AD42 C1B04F7A70393CE6D13D313B63967BBA42F356AFDC81851BA94ACEA54ECAF0AD 8B6D4BC392CD8B4C71CBCD1B31A4FFC431970C88ED7D003EA9964F8829FA69C8 D7BB49B7AE6571ACC901BAECF22D72CF86CE1AC1D831FC5FB5E6FBAF959CDC2D 900A773752D320C730E4A8D8612CDABAB22B6FE49DCA590A05861E2421541766 3230671D0722C743024A8D143E3CA1DC3658F10B9779F4BB5859BBA03E03EA43 68F9B65C04CD618BF61F0110EFF9DAC63DD889230010AFB6EADC13371A34D3A7 CF3879D64242EB295ACFE2A2A7AA7D5919EBA50C38462BD9AC72160A24CAAA4D F467AF4A4102D2C291E4B80543BC7D72AAF725BE15A1CD8499ECF99B73105E15 53F2E4FCBFE1200A418A2207BF2F9D9BCDDDB62500F8394AA90E615D06A805EF BA1006E2C3638FF8AF1D67D3A02F3E5185394D4D83A8E0502759A14F38DB9523 1059BF230DFA29CF3020F2380406A8DBCABC40B50833E5E5253B524E2A4DE292 49117835FBA70CC6B1A7E662B1FF2A5C96AA9CBCBBA454A623CBD4FB0FE35578 3DC8B468AB579AA8D154035EB6F30F961412B5AFE7074F18AB9019AD2E600DCE 5C8376340B88DDFADCB4B1C46D4F63BBFA3631E11BA5DF550A4381B3DD1F1D11 F47DF28562E706A080E38B2E61E03603694816D50D9AE19079228882B70AB605 D5D4836F29B382A61683318A3442770BB18BC376EBC07BBDE01ECA8677702913 2688777C8CB4E87B6692E5E86A54A220F927C3CBF885A78960D307B572F57650 8D817DFB1124BDF3803A828D64EEE5EDC69D3568EF04D2D8C0285568817FA562 08FDB68E1C0B822668CB706C3700BF0C30D72D048B943D50B00889A33003B446 DD7F3E4B35F257B0537E91ED175FB3A32895457989C018A71A1023E096B539FF 1B09C66F77EF13F874F16E6F7D5BFD6EFF37202730AE5231A29B4F91B868C93B CB3D9F38159EB9CCA2E1B3CBF296E27005DF9884F71C733BD4EE3F144D37E20A 65262030DA75AF8151F141693F97E380C5733B92A5615351E506925301308872 09EAC5535D6185652AED2621F4E0D3224128620FB6D9D0B99C3D31B3E20F980A A43A22BDCF8A2779BE4744B76E908354589E1D69A7691884319FDF889A288E89 696E5FEFA1350410F0411CC4B1FA2E4A767A662606978716754FD44FD7161DD6 7CAEA2734F499316BAF6E665DD6C85980CEC818542DC7460B336097E25C47AAB F26FC408465B034EC7173FC10CC7FCE36A9D74786BF2007D0EA403D3F8E90FB9 852B4D1400ED16A4B945C3426617EF47A8118551D0CF6B5E95C525FB8A896FF7 FD7FABA141B597D27499B7D7D97712248CF0DF7976BED02A5D564D59B23F4B18 9F13FB0DC17334A496FE3C2C84F4CFEEC9F89B14A7482AB324DFB201B6B72295 98EFBE2C8A5A58FB4EEF33F4888773533A9D5D73732662192B72A1D5102E2F5E 247C9282EAF1705B5E96C9EDC36111AD5FC2E1FCC606DB766775AF00834B2631 AB76888E6FF3CD6BA444C804770463EF3F5014DB69D860EE563CBA238F8DC2ED 3B5948A27A0D02033850B4B49E15EFD202B0B3ECE75C407F0843FD84D070344E 01D1462A8F7CD73954D75D7CFE22A8F4B69185A3B3081C1D113D9B2FDA91AB0A 5D3FADD335B480F61C6A5C25496F3FAD35449A156A23CCC9C3D5BFF5F1C1D243 607E05B2F81999337A57A673026E7716ABD0395134BE23DC11484F898D9DC7E9 68CBA68E60DD836462767ADBCAB8F3353778FA7B976E01458064B51B5D2F2B53 4E26AA1EB608D072089F858B1C7A7E1C217C8872E44CC5AABC5DE83E10C3986F E5A484B2EF6D8B05F70C499BAF6054C05C10C1D45C8FEF8D493968F065EC4161 B8B04F8588F208C4902D37520724B2CB0299D8120D11B836F8B301229BC57CE8 3DE15D7DD8D829BA7A7F3E39885771A4469E5E4390A60C295926AB828CD91058 93832AC0A6BDC8A6B7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /UniqueID 5000800 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 67 /C put dup 68 /D put dup 69 /E put dup 72 /H put dup 74 /J put dup 76 /L put dup 77 /M put dup 92 /backslash put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD 50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F3693CB8D1F4 7E3376495E6CDA3BD280DEA744D382D720935D605E1E2464A31B86E831A1DB1B BA9185DC43D32993D3B5900F9D5B45EE9D2C607172A670530780EEA08AECBBF7 5F59F645CF7A86ED8CFFAAAE50BEC460C07B11BEAB82765FD18D152AD476B7B6 2D08A8C7B5D8F7B6400C8435E6F08CCDE4234D981D056E7F1B361F478759FFEA 468FDA9D4EE5B8BF0B83506B39C1FD36B16D14D5005202EEA3D9BF656BA60548 A94BAE6159A75BAA549ECB9D5272C475CFF6BC373C60723049295392D4BCA477 3FF6270B7658362D0014743F1686ECB611912E6B82670BCBA93832C4EC9CDD22 BB2FD9FF321840A882A1E2BE9B354E69C9F4C6210564C02DBD96D4BC181B4876 49818380D9DD9424E30DA3E8E3BE7682CE0CDF6CB3F7554ACDAE1812AD3B8AAF F0990BA00B058A1C5CC83A60491B7875821799B231BD9BF1D568ACFAE9E5FE2A 7558D3820A67A6158EA037FDBE8A6EADD8C934380101327B8F1736D996F9699D D64AF938C999C6C93C9DDC7A8F4497FE81DBB787F24EA08ACF82B3C7620088E1 8002FC529C8FAF40A519878DCB79EB5C7C34DD5D6F911D9DA790DAB33E7A8968 A266E95AA808AEC8FD854D1326778821DAAD03ADC0863C83E5D0FE70ABB35619 AB31554DED6142E2E1E26481377AE95C9F32D0EA3DE07F78C6A30FEB98B15F69 296FC94E6DAB5829F1B59672C6A87EE4E2CD3F0D9894D6DC8D7A514B6BABF018 B199CC3A4478821649A7389ED46DBB9AFB7D4FF7696F8DB586830D7F74F0FABD 4BB32F787DFF04CE1E7349704FB5D3154D1BE3CEA0B476C2B787C6E534061EA3 E28F7D8F65EB1FBD8177AA013A6FFC03BAE514112214F67C7957583FA78FA805 29C0AD1C6FF9750CA24D3505C889502833CB71EEAC21B8F2F4D3415372E0FD82 33A937D50F4BC55D381E2E2C831D2CBE4F960978BF7041FBB69C6C9C9246F8DF FA2D5C5875200AE8F9BE1C44F839F446C23E630B74B823FFFC88DC30B931769A 3D5D444376B7138972BE07E5D8215B79288401B0E9E76831250304635714B64B 2BAFC31E2583F26B15B38400125BE793931E7887175D98A1CE1505AD21BD08BA 16BFACB350DB1BB37E647D7A00A48130CA4F7B6FC5CA17FBA73F7737366E906B AA3335A2E51D65DFC79B1D87F109E9CF3F420408BFFC2C399CA6844A3C5D50C2 2B3673FD3A796F654D2624FE5B1E02C1720B91A00B4998F825D9C1EB29885A11 D100A98620A7C186BFAEEC214F0E63A21A28E076D0CFC7DF62A016A21AF198C7 28E5C374A93D0683E91F06858358E1AEFCCAAAF2CDBC382B1C999D489D06AB82 60D4C548B9AA7B011F0382324737A74EF18AE7D5402DB1B8FB15AC162E6E1D2D 371BB20E1F78C962F032B7647A301F771D496B14B11DD63965897BEA60DF1B75 EAED63791A62BA912A8ED5EFD66340D07FD2DD8A9EAA1A98957F8D4B9F0C7142 024FF2918E971B73F5BECDC098C7D011335077F059697C9429CA2E13B03886CA 5D07C7178C2368B4DBA1BE17A074A1565A9DFDEB90F96163829C4F2BE8D537D4 606E7CF1BB667190AEE95B4D68422B7EB84B054D41F6677D840ADA7BED269A8E 8ECEFA88484CDFD6F999D9F51F4431057929706105172AE2635764B326446A07 1BCB5A2277441E0C0C8A6CEDD2D886D794D3495F7CE828E1E9F65C3CB47C2634 1E3BA769EA7DD098296E5CC981916608DC33279BDF53510C8BBA06A0A0E9203C EA569B24DB5EC1DA6254156276944ECB2338CC5679558DFF053863B3E6FDCC2C FAA0D336E9ECA4236917455D8DFA46EAE6ABE8C942E087ADD33E3CE49C2A8C5E 9E4BF0A357D1B9DAD6B2C01D64D65A99EC728DADC5DA83FC279CD60A08971941 638CE3A7E1A298FB9832804EB4752758EE1ED81FA96B60A6AA1004D79AEE456F C3AF0687AD5AA5062DF7F0C8FE7AB78DC6122BD2894DBC59B4126A0D85F34C8D A748048087E7D9E12CF55AA2786E595EF5BEEABD86563204CFD5B1FCE181B2D0 5410E3836E394D0843984362F65D4A55D26C805E15EBF488AEACA766DB081C3E 51267E8BC8B7E4373183CC054B68A4839F842DB22341130D4A1D312DB573060A 7E73FCF514617C3D486651D2C8075E02331EFF65A2CE8B9AB7E35CD969550C2A 89DCE554802F08D5C6163A09E669B7F5C6754138D778CBC5458F40B4B51C9A93 5DD23BEDF12182BD5F1E42B2BFE76F421FD8128DA78F195038907F9EB52268A8 324B1A134148226CD0B235B8A6DBAA8508A7209720E892B910056D55AD5797D4 26ADBC7FC9E6A41F2EFA145DE8707D8AB76970B46D2F2CA4CE11DFB46B9D156A E75210C6F9A2B31DFFB3670CA8E52F322AAD31EB71D3E0C99CA791797650E5F5 FE5EDC86B5B19433B9363A388FBD4C8ECDBDD8281A81AC935371FEAA2B841C98 3E54FCA6C6445C89374981ADF8A974F5D5CACE8E158AAE572AFB2D282E73B1F6 C7150271CDE9FA5E5BB94244F04B0CB671EB2391BB35EC2FFBFC522237F54168 2A4AD8B48C84C4FEAA2602AF9483A1A07570F8E84434F1FD3942A13D3A30C1CA BD7901D49659C85ABFC78124215386C475AA0E229E98A9A2A47E32B46F09AAAD 6C8F0D5FE2E4D4D4BB3B3C3B23EDDAED65004BD410BA829EFFC414DE349F8852 75D4C9567FC887F173EA3E5AB863903C728D65DEAF592F400C803317FF9859E3 1BCB658A0458AA355CE3671C35047760ECFE8AC3A01C3B975F01A02CA21E4CF6 697A9B828DF3FD28BDD625D8502133E85586A0F66386AD428C1E65AF78A65106 188721680B04E7EB756C564859E4F8E16B9DE6B7231F8F8AEC8064CDD8C923AF 7B0888ACFC86AD6E03D83A37C52DFD5BAC714A09727B53ABA05461DA406D894B 81B4B43D3F737939EBB7CEF3C4CA965705411B1EFA1FB6385A6556913A6D32F0 3CDFDC04F88F214763B7E989D288C6B8861504CF5E8A6C67D16FAEE5E6962F6E 0935372016194115F205519805A8FE8EE76676EA3CC75CEF7C7326810BD3BE34 2EC114C3BD2508ABA9206401315D75C4AB6401E9AF3AABA580E47776C6A7D7AA B576D209AF4EF84F37608B2CE84D98008988331C5DEA082E8523E06A7BB59004 CB8C7F4F39B4E83C926CC519163C17FE4CF47F1B66CB444842F494B5C8C1A386 2DD05BED6BF59227A5757410F63CD8BB77AD0AB848E4B8FC85186E222208740C 09B0E47BCCBAC26EDCB9029727EB96521F17A7B32E719001E59C483237D8B9BD 6695799A0C3B80ED9C7D64DC153CBBCEFC22B4B25524BF5B301431F192BC6933 A6DA377691670958B04AA1F7491379CB60C87F3110CF2BEDE95D6611C2A9604E 083B721D51F513E47499871C0E3E504E8EE620CD2E0F450E3035CBCA94242BCB E42CB0E8408A3CCC5575C261F2325EAA2B06D91A65AEC162268D751CBBE9D5DB 469592065418BAFB50E658E286933DC0EDFB9E9F7D82AF9851E71AE9DC4A9DD0 8E01F2533F5C8F83DE9C0D0A49DFC375BA4F32C2BCA5774B702066CAE2647B9F AB7541FEC25269D28A7AB4F1F60F3EEEB5D2EE23408BCC84AE471EB6540A5438 DA807B936F6C27FDC536D2D8471EBE9967B9133A1A5641BE80E64632E61E5E8A 7700465D087E89BFD1C6197B8BA8A41CF2159A0817B5F95351E02E654CAA7978 1FA6571CE47EDE08B7E66A2D0C8EB88AD6E4F287B9809EE5485A94EFFE85A73C 454BF8BAB70BA2000F2B56BB3E0255892C3E4480C147CA11D4C3AB71744BC536 CD21B6DC302B5895BCA9E72285744E93E85D33A86688758A060304E3EF024281 590A765C943980884EAC5298497E7D2460C55EE1BD234C407FC63B9B3029C018 6C86BBBCA5BDCD4300359A40D1281A0211B09B2DF2941EA893F5DB95BDFDD018 6D674A37A25F63722AD62597314CABEC1F3A2460F51E00451D3095DAE1071ABB 17A8DB8BA0E224D420D4A0EFF9EA17FFC7801D36BABADACC27A0AF1879C56628 573059FD22294243357928DB4A835F02B3807067DC963CDE81CF4F69669421B4 88A159B3502CA9619F5B30CD992F3F94EF3868CC695F52C5E0619E88A750D6F4 90DF0CD32D6642A3D19549C733B89391041D0FC126AADC04D882188D9769CAB5 21BCEB131BC5283CE6E9E6F650246B1D59A7A559EB45AADD9A669FC39EDE6CAD FCA20CFE0922C8730D56962F4AD00DDDEE28B1A7C2FA02CC7C59932AC31BD59F E0C837740EA82EE6C804114DE18CA35D8EBDE3F0C16565C2F51A14083F5CDDED C5B7796F9E6717A6A3E963F3DCF7E76DD7F896716193C975F4EA5CC73F6E8C95 C987260A3653AA099EAE36068B7FD793154050D9868D9D30F4E4603AEF7B591E DFD9F478EB30D16AD0496965F5702DCA4BF33541778EA2FAB83C25313F8E694B 43FAD86D47D5E84B51309B3E7991B29E9922E80A34AA1A5B895765ACE2329F92 8A04E9A68A0D9C008EA9E52A114B3F09144C30A00A6E010BEDECB7B955AD1B06 467F156EF79E4AEE257AC357EE49724730D9DE4942E84ECBBFEC6CC7C85CA2B4 3BAE1CBA5ECFEACAA7ADFA4508F1DB7E6C37405439138ED4BF236C1589A319CD 3A5DD32D848C22F07732BCE84FD15F86AF8373AAC85252A8F8EB7F3915B52558 EF02270FFE20521F0347386B3A253A69D9510900F7052A95DE26B29D48D662A9 20A437B9944E0AB22AB623E7C766A752D89A57AE7BA6A64FD96FA05A5FDE6C8E C6084C44FF6732B5B95A844FFBE2BBB234A3A247D4D89B0FECCA87C986912A90 4791231605EE8EFAA7BC7F2FA5551991706DD4A677639A69EC231CEE3B0B05DE AD7C4A221B7B74349DEF428680366F1947D0103D5E4D72AF8579FF824DF89949 6904BD33856ED29B9AB43113DB038902A9DFB2DF3036B99E5508156522E76539 440A83884F8C08F8D8449DE3EBF2E6A775090536040BCB299FDCB7E9AB6AE453 3AD36E109C46221C82265DFA576029157FB1EB3236F1A84FCA1B9B68EA2AE583 6BCFC2D127B1A169A7392AC1AC251A14C32D643D21C5756BB6E39AD478160069 A11B985D9F69B800D339BB0242A9A7199E996B02467F6A1F220A8FC245BF2F45 5AED4D104C5513D3206D57C6DCD93B9428F82CD9938EF6468A165B5A53CF556A 68E702C0A9796DDFC79DFAEB0ED0267BD57D099D407AF32F8F84EECC9C84C57E C34339DD87991056EA0246914D3E2096517B7C0CD1F674CEE593B92129F0BEBC 2ED3DBAF4AA2EC0217DDA3A7265148B433CDBFF63A68C4A33BA2780E99BF8744 D3ECA386BA3872EDA1B99A6191EAA8FE477301A84DDFF5BCA00551286CF62477 10EDF4D58FB980707E202C9C337663C9B16F9283D36D540C75DDCFBD525473BB 027BBA7FD75E952C2ED012B5455FFE95DA7E04C20F8A7D5C11813646516968E4 36259B6A91966E87664978BEA76C2B2E093B2A65591D0EF3D501D91FE135C2BE E97A446B0586BE37201363A10C2F73026DDF0F0B6FCB331272BE349027410D4D 958EC50B66EB7A45A1E818B67ED9A5DCC638D66164772ECEE06A80765C0B259D 1B01A13FA9208182644F5853A8B8C3EBFF7F25C575761E9A49C5275E66B16FC6 625D7E73A657F9B23EF1CECED93FEE2DC83EEF7D695D76D19BA87F83642F6676 C460692CD64AA6FB768DA6008FC1C79E22055261A9A62DD1950F4899A7F6A2E9 21D800038C30183019E084C951394B9F6AA87646410623B996B310E86858BE3E 8C6DA85FEA3D6BCF62D2C3B154104E7CB5FDD42B54F52F8DBBC12087570F4C6E 8173A04835CEA36D2280C5C42B880A498E30C7A77940F28397DD279907693979 077CA5D28515A04B4EFAC1F0C948D69FF108320BF3B5C3C7D642AA0122A49ABA 735B8D950535460E0B2C17475404D8E85DDA4BB68E888250500363648828A193 AEBA46DF8C644FF81A998C5A7E4F9F9435C4F202C3DAF498484A012D4088C4D3 AA9E813A9161BE6F9844167AEB52F29013BFFF51928E5DB7B48BD20D86F317AD 63EDEC755F5A85B2B07C5B0E0A1B7A006D547744462AB0DDDFA9BC20C95DC57A 61D44CB4A45558C68E36DD3F680605C9987B6B6959DE24DD65C874E46D5AE7B0 C54608ACA7D5C7A88FFA06D9F6366E623F036EAF7A9914B0B549747AD58CC031 97036EA1D54D01A736BD6CD796600E5884E90DB6BC5E2CECD68B995D06B26FC5 2B6EBCE4279DA0E33317071FA1801279FB48563890C888BF6F2C1057F9728A95 59D07684FD8997DC446EB635E9A5171C14E2A357C00C30886EF1DFFD229A82B6 42912D02E3AF236F5C773456BDE13F60E8C674B21BD59D4E6444371E28956C23 FCB55999382C3347777CA0CE8BC002CB3DAABC58D52FE542A115FDD96D19061E 1A1DDD098498C9A8E713AFCAF355D2765DAE775FE6F9EA4DE42A066DEE306432 065E7DC31F144697EBD270671A77E6096C0E191C96449F7E94419C752B920EC3 034686DABF9FE674DB5E0744D44A82DE6B3933193F2E91D7A74BD17CA9FCA7AE CF9E5650355DA885806A24A9993F3041038DBB0DA23D74F12B86A329DFAB87CE C06B3F1C7A0D84DEBB870E64E15E251253E82ACEE05186D3ACC88E838F276B99 0729AC02CE325EDFA5BC3F5DA079E55CA302824AD2DA70964AEE86504BBADCAC 44B9244CC456CBEA44517185285515DF5AE0BDD7D98AC8928EAACE6AAE7D93AC E256992BD972DD6E33EF98DE9D9EB30B6D0569DB0B0BB23A1D0F9A6AC788F6AF AF81260D25B767AF16D5F060960E11146384A241CC05185408FE265CFA941DA6 86AC510021788D2767FF5B384A17E60EF2A664207D6344302CA491D7D292D7C5 A6DF93AF2ACDAC6970A16A5D3C78991931163509561A0CF10E7375F7E91F331F B84E8405E9A1881DD4103B575E80F36F7203522282CB5E899DDC42C781963830 BA1051F49DAF440F28847188237492149C74E4A99C3323635BC051B8000986D4 1629B1B7038C98D182481E182D4CA4F1554902D6D88ADEE755E9155861C0D772 CB414808198E4686B722786911914585F81D84501B40684E279C5E6B0B0C2FCA F3538806C4A410EA894CEC8218DE6D2489C6239BA36233871B0F449B4AE9DDC7 F00502EC6E7247BA3A829795C9351B50D312455F1486DECC64D2F159B0003FED E201B29443F8127878BDD436CF7873F22B3FD597EB81F1D630811BE93A51D340 FAB3D607EFF2A65A74E78C792896CCEA1C2F1C36D43F1950453C79A9F0767B08 DA6247B44B703157FDDE2F431089FAA9AF23C786737E921D76BAA2D68C3BC8DB DED8E756624970C823E97C598DEC658E28AE00CB901213CBA0110E625AF40618 D9EA9369F124D089C2CAC832A145474AE476AD16BA5BA3FD9C28122229C3380F AFA46693D5E9A6254C055DAF47FE051751FE7F9284EF39A36C5D25FE6FACB838 17F86520B8F143F8A7DE0615FFE77078603F5CD60DD0DDA9B84F44CA3BDBF2EA 10F6CF79CA3E66EEF95C8E8DF98951933358360BE4A9CA23EDB5F5CD794974F7 1A6708F418D34E6BE5BE645C266229A960C947877EA14415CEA2B238C8191387 100FC1D6A879B129AD2CF7D50EA7FB9E8BF2C80E6609809A0E8CE2A70F2DC54F 3F958E45E63AAF577AC7023F097A77C8412A48A3E608B36F96C39AD6067C60D1 CC7A2E00BEAA799FD75F1F694928003FEB29A8E6EE075C57C789781D3E983115 68AC3B16695D5FF9E2416277288367B040DC47D40D5EE565ED73DC18D23B8EC4 DEC6790571546F0ABCD004B3A6C2360D7BECAD494888E737FD41C0FF1D277891 7DAC83316800F786A16959022C9729ABA334E45E077A69D02EA82FA23086DDC5 BD96F41FE176A7F491EB87181FE64F647980DBA6F210F3260CEAB4E076918F99 D8246512F1BAD74D3C15EC69ED19346B60E59D8A9DC26D00B47741F103DCAE31 A2CB69D1BF659C091044AE0E2796F13C9FB5CEDC3527F90D035EF785A0655296 0C979C70AF9637D7C6E3DDAB3A9E17594FAC3DEA75 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 34 /quotedblright put dup 36 /dollar put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF68682FBA16ECD75C6A6CAF0F577583B72C77BF328E68308B929229A0930D9C 61CEFDC57E376B63ACB4F3DB9B5C602C248B4CA233E2C25E16314CC878BC1B88 6C0706423F71514CC2DBF0D259D87DF704CB718A866DBAAE005180435034AF3D 5EFA02237755986AC73CDEB3B4766710B762312D5F48C59537B158DCEC084C96 19F1F37CD1CFB61C63F6D05F59B2E47137A433DEAA34823395727B67CBC15B6A 857627BBD49BE34F5C7B2EA6C0ADEC83FD5E10907355E926ADFAA74C6CBBFB41 1E37968BC3BD7F665AFE2CF6740125D751CA66148781310C76FD92731C0513A2 0ED792B34207ACE82F3E84425756F6205E70E1BDE989DA786C6234FB98DB8195 737FFB8086D05B4D5C88D80B7DCE555AB3882DA305ED26351BD26ADDA377EAB5 0618D08F7EDFE61938ED5CF78A4BE43408C7C2889C8E81CE04A4C20BDDF31A5D 31BA15A2BE1CFE0AB51E539CE09DFE33808277D947D083C066478F23A4D524A0 D89553E24ADE78EAEB4ACFD51EA3D2E1D5C84024D893F050DAE5314C91EFD93C 91D81F3591168B4EE3B01ED80CDDDAE0FBAB3936EEF02462A6A2895E22D24FDC F93DA61C36998E2297B512FAB1FD39409175426A8A7A56EEA4FA8B0D525E849E 27AB6622A3BE999A30A415B7C8A317D3802BC0B8FA6F89712D9F38D9366BC724 8060287F1B859F13CF627ADBC25002D1610DBCEB93C866520FD018715FCA7ECC 853869B7F55FD5649526F9355BBEFB83E9DA1E05406F8E32C1E112BB9207637E 8B976EC8B51F0D45F717C6BF4BD2B352FD491822DDC1FD074A4DAEC4AD128A62 475A39455847C265210B5B4CC476930162CEE809E3E4DC76250CDBE461FEC4C0 0C40D656D905D6AFB4390B62DD21887206733520E4C95FD857BF38350B03F2AA BD0AD9A87F485E0DB510F8216107EB7B31F81CF5DE76386D475A4CA18133BD84 74E1CC1A9F2BB4013E570EF03C0F93AFF4095EED8F861BA5DB1D28EBEFBBBA0A AD9FA3BCA136A0EACE7D66B63728374A3A5A198D2348E8FB33DCF83C12C77A43 01C57D222B4FD5C3A9B8BBBFAB1A04BE0C1DB269D7C7DFDDF849C849F5592390 32023ADE6B8F65BC17C850FFE3F7154D6ABD89B1EED4ADF354A071B0DF8B22E6 CC94F1660E4C0F9E6E22EB77ED0EE9E3E10459B9AA355E912CE927A429B02152 56CFF25F22E753393188F7B79B49C0F44512626F2BE1339F28FEABCA02052072 2A4B1FDF77C3C092EA151A6F3762571629775247A6AC65DEFBCBC464A5EB0BB4 F2C8AE029BD1172B430088B5786E7CA468E96E826FAB1D8A48A3700F8EF65B63 C6F0EDE8519C256C46808B033DC9FAB61B1D49C8AE59C69176AF3AC875F86A64 6F149241EF5610992222B79B859135D0DA31C438D26A3C8CF43B1D23ED27C852 E8668043F8279A423942A5070D136425ACABEE43E4A45B846F4E7F7DB374E0E3 D066CBF83AC321D26021738105BCED4081EE6AA264737F6862385FF9F3691197 1D924EC2D0DC8019350CD7ECBE9814BD19184BACC9DA9A3A433F950E8B3400C9 84EA3D3DCF2CF050DC3435E1294136E6998104B897A5ED4709B6DC996527A8E1 AAB1B3DA5285EB8AEE64A2D47D29F09004DC142553CE14262D2AE3774A65EB9D 4782B048008979779F56C8D8BAB280B043B49F5AC33462CC5A1157DE60AB3347 831ACEE9CBC3B88AF70F6AFA0C191867F2DF1CA821C6596552C7066932979570 ECDC82CC1A565E4DDC16373B2B976B99BA5F0B92E0FDFD5C0D7DE2197E5C91C7 9EBD346C4643295F769C4B2C15D2429FADBAE9F8DF0B80063F9A3B214535951F A61DDC0F82F21CD0C6E779EBDDF5F660E8262CD10AA422586EED7BA629AA87DE 796AF15A95E1E579AF686729C69646AFA2DF78BC053A65AE1FF65945FBA879B4 A21449B2F252C9601A3E54D1247C5B102D138C0D2CF15616A3E3ED3802608BE5 4BD40194D3526B2F54E7F73D3C0DD86A64D1EAA8A23EA4719AE3E9694C8ECCAE 5CA73829CEE0B8F18CC386797D2A696F3666950E1E9804B899AFDB003C38EDB7 AA93BB2FA9F447DC37AAABB9140A382AD6E69933724EDC6375C6305BCCFD126A 1E962DD9769EFAEA41D4F64FF7818DFFE7ED253836BA51AF3554AF92E3AC3145 990C8FB0867DE7CA55C54D3CE900AD4492B2D3B50907E6B3DE62FC41CBE8C737 760EE51E5C6D9F1CC15CFF852770A3991F86CDD3C188F08FF2AA1CF66D3ED8A4 96C04CD3BC8E97C820FF51DBAC94109C9ACA1C8DEE7E6D43B55A3F3ACADBA997 39FDD65E250335E05CDD9563F70AF53CE842BD51BF75777F269D3895E82A5F20 CFCD667AB094E7DDE057203E2634DCB355054F9DD8A2DD1EF927B0154E7603E1 76D2167B8CF3794CC8977E665AAE5D703AFB18A9C1B94B2EAC6162C36681AF82 E3D62B671C8C274AA208813E57FC625E63296E325E2C31ED632C3136F0919FB6 A34D452892690811A376BF8342F01CACB948360AD003609F3509EE55639B904E CF801A157CA626EC056A683D84AC9D95E327411C7646269A27E297D0C1616947 BCA4D4E4C32BF7A49FBB7ADE2766785B6939FB94029B2880BAC407F736E15B3D 6C2416C48002740A4E6663380089C45FEBC743CD82E6891224A561C003D1F65B B01AECDE888B9DA271C80796B4693072DD1BF68182687CF10C1B4F0FE15EBC6A 695647F5B0C1D1B57FAD61FB1E348C8BBD3B7031A0DC7F7DB374E0E3D066C91A C339E16323C7E4428D2EE11C1079BA8DDD66CC775FE43E1C7D9A454DA6434341 2AD0E5836244D8F9B99F349B12BB4EC608FD760951981D9D7D67FBA77BA1637A 2C1D282B90601F9493B789F09B70B52F2EF2825DED6AFC88E7BF74241D7DEDFD CE064578CE287B1AFB246DA586223BB4D80AB9A542D62A2CC807FFFFC7383921 09C105D198B7D05743D1779154CFF12DC90FC2DDAE7318A9065A81A757C2255E 5832AE7DC10658AE2B5647CB5CD00E4C86AC8DE6E61B7C251F1F52A905F45745 03F255C15ADF31815753145F3F9F1A71382A2996AD2955DD8B1A35CFB2ED77A4 04F9DF20CA177A8A0C4863CA54B6B646828364824C7D41C3B93E473AEE9243F0 A89C4DF01C4322AF90578A9A290C1AB64B77EAA019B739C465BDA098161F8256 9CB8746FDA4FBD95600E6C1AA356F3A2E5DF49312C7AC27D9204EEBDF1A271A3 AACED2042AFB7CBEA4BBBBDB159784008721738BDC79B89E7F5226092A0FEF60 DC87CE9EFC97DA5698D5B4BFEB8F379BD02D7F1A024EF4D10D85AA4E8A0E38EA 1974B3FF78F01CAE5274C223DF459A776B4B31492C4D6F555DAC9A6DE72D42F7 7C28B735E62DA5413F00525CD590107C9D39B41E36C19D316C38A8F29E2D6E5C BA9F47D561E741B96947C368084A78375398EDD47BCA95DA3913705D4DE85882 61BD9681B2FC75CAD1888311CA11322DFCDDC15804BD0C789D1D29562CBA2001 A7B127F68F2914EEB96FBA5169B7ED30FCFA1023FACAA27B9AA8DC42C2C8BBC0 B9AE6327E705B50995BA6ED0B538A693C74CCB6C250F2E2080660A2634D67D1C 2D928502D4D5D5C9C68C0A289DF434CC3B75118690B10738560610DD15BFC537 55B548B55DFE2D08B3682AEA2E22CF0CC35C26E8322378374BA80FF2185C146C 3B2548A38A09796D087F33932C5ED4D513A1C8AB31058AC27B6BF81522692A15 12DEA25281CE4DDC009ECA8ECC714D2066C9BAD6DD7D4244A3C3B1586B501DC0 4A43DF7A21C7DE55DC385B2EA52E96A8182486574857DBA1C7DD7BE38C7F6605 8EB798D6FE20324315A736793F0C6BEE522AD3E582E965ACC07C1F78C784982D BC451B029ED37E2F8492A9770813DF2B1B539C5AECCF93BCCF128F3455C30B45 D7FBEDCC43893291BD3270368500D3BE66EFE9702411375EFE3E10F0AD8E5906 3A70BB8298517DE21FCEF75496E0782BDC1E924E1C6F28D619F5047592830AC5 E06EFC6525E06B7607D65B2927946E73FE9C8CAE65FF1D9E321779E94CDE9085 4C7BAA86BBA2C4A53F0DC10ED188DE1574088A2141DE6FF48450144607B4C1DA C8EDC64EF6246E40CC20CDE7A22F892629475D4DA16DC62C42462393779609F1 B479EFC7EA8C20CDE04DD0F6B6175E997D2ADF32CCC0D351B3D4A5F8E0274D1A 3EEE83F04EB815896C3C727D60E3B85E655186F7A7BB423D1A7CD19296DAA015 204FCF401E9A56F64C697497C61662AA7F4097C0721822BEDD824426324A70BC EE6757B6DD103C370796839A4E76C039B9B5B316FA8F6565B7CDDE544D0991E0 302D896C0885A3542B3B7216F6156BF5554DA7E0129935C31A2154C7110E6061 26B6C1102DFA3512AD1ADB0720992481EA7EFCF4DFC6FFC2605FCC550AE5ADDC E021A7C84541C48A0856E1F2BDB47560AEF2ED181B2F9E9D1B466FD9EABA1D02 8F0D2989D62E03727346FBB96694AA60DB90075A1E4671888FAAC0F5CFCA3FA2 55E024E0A3565639CBD91D4798A4735506E6A03C7A805C5AA651DFD7BFC5FC1E D85DBF025D98281323C7EB5A6AD56C22C139B13F4BB5346A5BFE8DA3DA8F9B40 7ACEF81F3B6D2915E16B56BAD8F23C2B4685B19BE4DE5E0DCA120EB161E620DE FC3691FA087DED6F4ECDBA980E7B3E30BB3383E0FBB3BBB70194162DAB70D516 659E682FEF8B291493F99D78494432E4D68A7212A4F363441C51E317A1C2F60D 2A8CA4321599EBF483D155D14C173AE29B7DFBAB79E26B963EE984CA5D467FE1 AAF9D1AAC02D00DE91D177DDDB891B6C515C8199F29C473CF4618655F70C53E4 CA3A87DADFAB36E523AE2D91B7B8A768679DB1C90077BE6E3D7A2C72B6449348 29F5FC9F6D2799DCB69845958006A46F7EF86830D372AEB56ADD69E33A096411 80D9271F61CA7A28B8073D6E194F6C9BE8E93479E8E64223CE98C31A011E4BD1 9A5746408154A365470CA46C5413C4D55B69328F13C9DA2D22EAD288E2993073 00F51CDE2C443A4ED60821065D493C5D0F2BA5816DD57E86CEB90046E66EED20 CF52F00A23FCC18279248872C297FBE6727A45B4EFF0199C9CE54A8FC5DC2EDC 75CF68CE217318DFDBA3896AA6805CA4F9BE4E7E3A3A2772CFD39365F192F884 13DF92FC39FCE3A1F9D9513BA7161088AEDDD4F8BDD9D414963BF54725802983 64B5306599724F40C2D146F9F9EB50B9C65A211F0E9992C4E2DC925C44BCF9DE A619A551090A28275303FF0D0ACA6B4D00354DD874E53B167BD81B58BA6AA4DF 3DD703EB95199BD02DA951336995D273A6B8A1345A76F043007017B077CA5127 2CFA3215CAB06F857B22C1E1DBD335629B037482372E6CA2EF5E176F66255509 80D0ECD3E933D029C567C4628D8938F576B16835EC112C3F3DC4AA74E8AC43FA 6FA6F42F618B958CC83980D86567FA17E7B821FEBA4888DA6C964F2A7F9E6CE5 04531D53DCD037FBA89A7F840DCE36E251D3896D4735394497035E96D3DA12A7 6AC5A61146701BDA722955BB8EE66E838CB128284158E9CCCB5DF51DA6036CD0 D4029141D01EBC90E0DDD8FB1C884D7243782F62FF196C942212E4D2F7C65788 E8B5C79962FA1941C3F0731D16403412C3FF79C08ACF03034169E676AA39F9ED 4BCE98694FB1A9EEFF44E40267921733AEF80C73743C20C99F49A7323EA27E15 6D5F2C3EC4F7896EC28E3630F66741B723A7860EA5FB584185D77ACF418B79DD 8C8E9B6DE87D17BBEDD558E350F4CE69488A995189CD56AF75677C31897C62CB 07BFA36265AE30FD06D55F59ADF2CDB21E7E13BC9E88EFEEF3F9ABFADFF2B6C8 5275F80D7D4BE9976DF0476D070B9625E7AFB99E6CA526FBCB61554B87F8B1BF 320F79BE2695E7DB5E6E2BA3276275C82A53BC3DDFF0F2979F8C4E5752D130C7 8C9F7CF16E436B823B1A2FD914700A263D3F3DE48BABC99FA90E0316AAB12D95 8C59195EF634E8B29F9CCA10677E46730E1AF19F046BC5239B7C1F430955F158 6E3F0BB2151E5D05C35F4C3E2205440C44B8EB2ABF0612EC6B413FC233126D16 55AAA85F5DDEC3C008C5B559CB9C37B78512FD9FC93A435B68871DDD1D5FFD3B C0045588F0CA5442D7984C1F782E109653AFE579756584D216275663B2B9890F EB3F11B17A58EE8F5A92410DE390807D2E03B522CD0B2DEBD381270710DDC6A7 9F1B8F8E669E65E1354D5ED7953EDF0AEC9119A162B2D1CF3039AD0EFA9DBBCA 9446EC4819D07FA893A019A38E2189F5DE84DB0E4DA2F0C169D25A636DB7D8DA 33BAB84A4331DDE5E29362F174D5618DAC5E1B830E0F464B7B8007A4283E48D8 95DD3F13982278B538767816C211AAF263F1D40DA68AEE2FC007CB4093E14DFB 042AF398DC5029B701DD13AB11473ABEE8EC65D76591C485681529863B61B321 3D9C04C6FC4FAFA0FBAE2252012201C55E0C03F532D68854124B117B2F350654 E000EC5844A178DE9709C32B751EECD46C0713B7989B1835F7F50F64A6147C9F F219283A82E3B86F6F6D29DC37B8A0C9FA4D4D41920C25D3DF33AD39ED08C289 856FEA05AAB6D69577B0D8A5476169ECB15CA63F670F8D1B9C2E820697278597 6BAC78708D8176B3B1576865D0280DC3588E8293A1CC7EF5FC59D9980BAA08EA B093970E06743EA33350BCAF0933D2B009740F9495D7B24B88F46271CF23AEF9 273E1F6F5F1F371508FE264100A16EB6F3F97A66D718166592239AC3009D8812 65A495A9DC01F527B189190A79DEBCFB7FDE92FF64C77BD545EADCCA35076238 C3000C2E27445209E8B4965B25D707B51AFB11B6D80B36FAC32657A2CBD51A82 8A159B3A433760AD4558221A09E94011B682EE29AB16E9234C0AA1834A5AEBDB 957108C46AEE9AE963716EE61BAF4BE54C1A2224A3DB7E3C30DF9D07D652AA43 1AB19D826F7DB18BCA8DD4806DEF031CF933406E38ECED77C7F1229C0A3CF129 AB12BAFD207C68737198A64B573B6A11F3F287A48C92FEEA8306D1DEC14A91E6 4CEB56C3EE69C5C36F68D96A88AF8B1289E41B3410BF2DF7C9A2BD5B9139121F 7AFD6E7DB302E9AC30AE901D4AFB90B05E614BCCAEC67E8F57CA0F4A0B780EBD 55D9239ED6F716F3CB0B3191AE1A4BDC6BCD82AFF7821C120A553E454D00B679 BDC33B347F2E9B4D15223A4C7AB0D321F277E0623550917980B5BBC0607AF56C F10C29146DBE2F6BF9FD8E4879F6FCF8199B446C25E4E65B6214FEA3EC34E4F7 8CBFE934045822A6C961620D2BB3A4B36825E4D8E5BEA28E55868D30B02BF507 F6FAABE950F17B4C4130D9252701F08014068E33A4F20C83CC54FD940C92318D CF76AE0F4522A50DE7C14352EB7C94F746A7F73942129D6BD12A8C843DA6CF89 A6E58575036DC8AED79C892E1AD7AA11EDBF43FA64D625556AEE04D3CD4DDA31 CCCEEE3E3153FCAB30BA65A3A34AECC7663D745DA62838BEDFEAF4F167B0BBA7 222BF55A9626B85DCAD9AAD5FC333A85950710749D55F7C12369941E8AB8DD41 FAD6502A069EA1490B953694860AF8AB930DD5EC009FDBCEFECEAFE298E33727 70ECC760BB8156DE8FC2F2B5A1E03B0F3FC8F7448AF02EEF97FE5A94BB0801AD E83DF738A4D5131E16CA198DEEAB023E253227DF06A26950327409A9722101E3 79D57BC5106B6EC703320192D7DEB89BEFD19000E2E6E43C10FE960551B81D78 50EFE679BE528666AE7CC2FD9826AA224A009C7387A542AADB9403C24F8AE183 3A40BA685BBA9F8DFB6717E1C247C52773DDBAD04D2EFC606C55E4EF7B292595 F03D82D3FFFACB5AB2BDE9406AB2354675CC29FD01D8A625FB22BAF3602A5C08 663A212E29617C2CFE55AD4E251A2F864AFC683984B4D72843B24D321EB85835 00719B26365E467D664A654C692476F0FC1BE27302FB3959D722C3613F846923 FED287F447F5DE22DBB6771FFF56E746DAA399DF493CDCF95B96CC809CEE835C F8D827B1B1F7EF28AB0D91F6224E5C6DA4CFE20F7ADEE7EB834CD7C54447F49F 9B353F9BCE262CACF2867E6F462CB21044202B554CD8C1EF87FB0A863A8CDDED 59D32030EFB62C81136175EB9874B7C627ED7E63AC77F78FBEF2D2E5C2149360 0C8C8278529A79E42FCD4B4551F2593E96F36D15CDB56CF8D6D65357CFA98663 600732BA9F1CE83E0D47647F02FE3EC8443E81B3A7B55E80F3216252AAD626C3 030A9E420221DA91E57CF1B3ECECB36FFD21EAD729CDB7B3C6F35168BEA82F36 E52D0CD46B0A3D962E8CC48B3F35C049FF18AF0E271BF7B03429FD90EA4C68BE 41014CE3A859D138B3D51F53790DE3E7F4BBFF2997FFCB2C189056091633A2A1 03E88A3CF49967B712991DCC769501523EAF0D70895A45DB09A40DB1DB221E79 A1869BFAEE115B3970D0696EE1EEA3F29AFFD16D6FEF99F6EEA625AAADE8EAF9 C23187CC5CD5A9CC9D0A3E76AC308694FA802DA1F900A1D324CB0E622F192647 FE0CDE1A22585CF4FACBBF456AE5AA5F01D255F4B9A4163891DA74E4364625FE 30EB70BFFD698B6B27BF55FACE80B4A55F8370FCD74FD0B29FF8B3EE6F4DE577 3F842ACD7F112C9AA9597AAAADC5C746AB7AF8B97B906B56B3607C72D988831B B5202C6F76BFA5DA8101971CABB1E24D305460305FF0C9C0BA75BF2FE7692F3D DA6971F3F63C81842428B93585E7C2413206969587A556B6E36AC4453394CA18 777FC5D838D4EBFFDEFA1BCDD4064964421E862699C2E2B4BCB800D22EBEAE14 A97744D1EBED19B62EA117EF78B59EDB5DF17647C34BFBD9FCAA296D9E3BEBB6 ED05FFFBE063EF811B18D104AE7B8B4C386164C9B5CF1EB30247AFD937CE04E7 6A35FF92CB0B8DD9239AD1DC8E8608AA924CAB7361D5F48192D24FB92B6D21EF 9D83CB3E13967E2250B32410B86EC6BF4722D31239891479B0C65DE3A5A43E0D A0192649B5F44902FB67DD68A9609B8FB578174D970CB01B9F86248DF15A769A 0B0EF0C116A96A4D2D0A9380137270CBED1CA8C19C486E22E13E1BCAAA65F157 E82A6AFA76530DAA8B27BD83ECAB41121AF2C764CCED122B94FEC74719D22D98 C6981745F42ABD6C0476776584BE443655ACA39F0BE0AAE445C96325F5A69D08 41AB9B0ABD19ED358BEEE6DB94724900250B795404243489FB69928CEA6126A8 2036010760904A7DC8F15D9B05DF3779D1C657FD5162B801996F1F7572BCE8B6 89DB7020F784D2F750BDCFCAF1E66E5D1CF8206D33D104AE44659298387CD149 4E2A992E1548A37C0587752D46EF35357BBCD8DDA9BBFB616898AA1BEAE18180 7AAABCDF3B9D51351EE5CDC490CC365FBCC2325076F696E9C731250A014F635A E0EE366E3515066E0735430AF23D407FC997EB489BECFDFBD65872788AF7E13A 5A216C115DDD2F8FAE684B0F17EC9B53EE00E5966BED1FD155F32B3744F02FC8 592F8C5B7044F0CD6C23BD26FA11C128CF92E1EAED0DECAE1B3CA64EB558A6F0 415DFCBFEC7339822CC12F95F0E151ECDCEDD36CCE14AD2D4F57C9932E2F9FA7 00FB8D7B2C97EE4BFC16F650D0FCFEB70DAB22318CB400BDBCFDB79529F11403 026348DEC4AB352296519895E23B3305A44887739E906DEF031B92A0F41A4411 09BDAECAD78E6A853C0A1973657BAC3A58A4EEDF99C0EBDD974EE2E9D2DE83A4 181A7E72C8CD49EF58369C674D6B7EFC24120A0F245523E85C6E91083F131CC0 B91CC5DB16712011C2AD2DDBF6D7AECF5BDC2E09ECBD88797912330CE1FAF21C D2754C8B16797C577A376B452E96DA49624F063653FDB04098EF11CF1EB5B602 DD7E66675AA3EC317152ABBD1FABC470A4841B347D80E6021D4E290512F91D53 6DBE98C25A17631B93544297FF7CA950B903494DA2F686857C118BE4F2D2F5B4 D63F931457D1507F13FAAF06881670C1F46A11339169B6E859D2F75F9401F5B1 0F6BBF066B6410C522D3647DF86FEB25C1ACB394F2EE034B6FBA1E1F0C166CAC 23AD89FD97B43C63867C86FD5609496B8B58F9E10CD24141A110530EC24ADE79 3A9CAF5E07793AC8B0F9E560649F589FB4312CF3B61FCFAF08B8B62C185A442E 5EA71733D96F429DA0E2343910D9FBB4225C1B6710721B89316B3F12E3A2E39B 4B139D9805B64E831BB2D4D1885094552900CB91275C8052B93B59730F1162B8 76DC1B604C73145C7B9CD5B8B352F3012D8FA03BE0C48998A45C9CE392047BEE 81E8FA2AF78903D4A55CC2F8CE39C3582FFA7C010D879967F28A1FE3D21416C7 30F381F99B01020FE3F35340A770629C16333805AE2830BECF5C40EECFCFE629 67FF0A3A9AF794C5FDD669A18FA5EB93244E6C54843B3868C28D66902429854C E3B70B242CF8652F910465050775B542AF7FE158DE22027F228C48F8D137E1EA E734DA62FC34B5CC44C9ACD3A078C7D4FCA262EE953EC784B134F40CFF645045 71B9E302A1B579793BCCD8ADD3FC027EC85A5770A26A1F71C545784E1998E396 A6E567E1F605A1E89826D328ECF772FB1902F0A05F08F3F7C1DE5A0B1BA02A99 0348A28AED186D63857976EC0B837EA34AE4D781CCB5B07F39C9E788DD15D549 BFA3984DD591CA27AD98FD841C57ACF08A0F62287531043EA497D6F48613133F BD84A9EA1F660F26660147B4C62EC20648FD4D079BCFEDCE8B96A32FAE2B53CE 62557A1C739805245755ABF416A368D238FA86EF6C904EA55516A25F4A8DC805 C9095D78D07E2F79A6C5FC0D4DE4F5A7B14C9809E1141C78705FD9B25A482E44 D994E5718640CC735DE0412DDE3DBD6BC724446933E83655AF78F08094D074D8 6890E72F22E5C1228E8D21444669C7BDF8FBE16454610FABF167A63B62C46673 6CB69B77FB6F0D144CF7B7968668069C819F7D4DEB00343F0AD05B99E8F40DA8 A3608556D5F823F4FE26B10C1A135161F7684FA93A64EC896097D65DAACC6830 EE3ED51E612B7D60C85D0C035BE59D78DAAAB868561015257361686D668FB635 6A4F1B01317B6A07BA91FA9DE649B378CF0C7A37E4BA8FBE74DF0C907DA0047D 2014ACB6F7DE1698A8E689E23355F9A56E5B36F0A5220D010DB6CC174A78BA9F FC79C6ADF5E5FE639264BFAAC91F253876AF829D4A6F59EBB89FA5B00EBB3049 78FAEAD988E030CC48D18FACB55D4683A5F4DCDEBD347C64CFF09E7AF1FAFAB3 750A2C59C2FE52A678AEF44E4D72836F7EFB4DEE537F3FCB1B5F2F46EF3835AD A4725EE1695F778527E6BFB0D9C1574822D31DFD5B47219954E006F5CE225B7D 6957FF7C3400031C01DD55BBE7CA2701D3D38E7B0ACE3F14B57876D9A66BD8B5 42DD5654030E04F002139350208DCA6D83BA9DE34F437E85D5BECDD5E26FCCEC 892C4AE075F7824261A87484135FD125C430448F2FD46C3C3C70B0AF9AC6C683 E22995E1A8BEA75475A817C1B399D6C5D673ABAC95BE3DD7837397C609303655 52442881BE93455BAE061A9A4BFD2824076AAE70418A52FCB61BDDE7B9EFB935 0DFDDB6160FEC9A4409A4A8BBDC5AEECCA8A4978BA93A63270F06D8D08137C8D 87D80FDEE637B74C9F26E0AAF1A42111D751877DF17302D3A09EADDB12B787F6 15FAB9D634DCF45FF7D84597813143C6AA252DD2585BE200F4C0F25C17EE82CD 564F0044838462C828EA8CDC0B4F7D995527A5425ED593FBADD183A1F488AB67 1E9AD1A1041E867D2B988F300D87ACA7F675DC85CFA8A478CF2B8C4F1571CB64 EE2A4F693BA8A7D6F7D0406A4157CA86BA4C64B285186AFAB6387B3D540CC02A 01900D447BDBB936BC0F94EC4EFA96DC2D09FA22440376C718DC6742D24128E4 581C8143652E5E07736BCC0A6E5A1C31A1B8E137A9914EA8A38EC38515582A2A 5F21B9814F1B95A3A231501353800B112149C71F5CFD2E3A55B6179442A55EF9 24834308DDB593652CB134C208A7F84A4E9FCF7D580FCE2AC4AADF08DB7A7EE7 86B8079082EC5A1FF3D45B561B69B9F56C2698EB54888531D945421ADDF26BB4 E4A5AD30D1DFEA597292757F308971BFDED158EC1A793462CFF812E6A809A388 24795AA06078601971152F7EDC2973374DCF2C2D3945CB839E8CB7702F6E435A 0E79F28BCDA3D3AA18B9B9C97673B75DF095B22D658C90D163F8DF0CA86214C0 3D165234B14E373B20F8913638FF228FEFEF111DD0F930968F17EFDD8B87C05E 0A3A895C202389DD7F5EA6855E2841E6DC01323992E8DD4516199CEF2EDD87C9 5C1C8F4085C9B85ACF85316E22EE715FA188632115F151BCEE512805990FF3AB D8F4927DE10EACD49B720FD17EB260CB9F2BE96D7B50EF189E5579166A7DF683 EDB55429F1A54AE9DDE34B4A9AA8DF685F8567967C263E2153458BF1E654E2FE C19BBBBE7409AF5DDFBF32F26D50EFDD0BB09A1D1106D9B963296034E7D6997F 9BD4C3478CCA3549D3086930C6F9DF60D1DC3ABA1A289982699ACD964112E30E A1C568A53D701642DB80E2B2C0B6084B29F6FB73B0A9FCCD3ABEBAD6B3D58FD4 1C5C45606AAF806333B354D19F58467B3C315D65B9A9109708966FB7F498A999 CB0C7DAAC86F9A0F1488D9235A07D6D524BC88C8C212D80143EFFF603406BE2C C3108EF1CEE6F6DCF9A3C3CED684800E0E186EE7435A20F54DF2CA4F5539A6C5 9A5907AEF0DB6AD436FCEF56C198768FAEAEC2D886DD94F7091C44621EED8DC3 5737DD96B7B2860DC4EF1E0A2B7A963CF707C2C29DF918B7D3066652D6CFE261 5D381B08F5711C594C03BC72875C384BC01556D907B0641DCE086EA20C621354 1A2FF32AE1EC09D3F39A11D0FF0A710F4F9E0E7507B6951F96F8FE1E1CA43FDD 34A511B7AE7D87FB7239CD88D1C0E203A6B9AE1AE673AE441352112FC8728874 D6585EDEED161FE8303725036402609F36A62E1EF8C3014C4B67A986C741B5FA 260A32768B2D1F7B23C4BFAE60AF5353AD6C300928427A5A6E942BA44A9BE95A E1D5EA5E14F4FE92129D28F01A3B61E49FC01FEC7367DA93FF88DE296A22D62C B464A027D7F151FCD84811B26FC115932A86F16EBB16EE974B39AAC5643E6EBA 5383F1B29C499B66C09FBE07663CF953FBDFF9AB4F50C2DB63498CB80444A58D 9A91332C23586D1735220BDE76CDE790E86C518C07DC1597ED533CFC62467BE0 9EC9C70EC2A095F634DB70D5D7DF3D45F66318FBF8FB8316538DDEB13136AFE4 84B5151453FC9400CF33D0DE81B429FA70449542CDEF957A23643B31ACC5D310 07BEEA3E2964B17FD1BD27A18D4240C1F445E3B0C177611963A32249F614E521 1C465B1870EDB7B3EA4B003F113776A8D9EBD060201A0EA68C0D1EAF6B414BAC D2CF83F811F5921C0BE37730D093F78B1B58F3E566690BAF966F573370B47AF9 575EB124495710B9DA2F16EB1E33BEF989B63DD525F57B134D15D083326329BC 64CCFC0688BFF7A8D56FC1A6A042A4C5BCA5FBB6CE393B990C33EDED14450F24 1BBC77354E1B4C88A4E7928890379BB6A3083E3E2D29EBA2125F993A97462F01 B8C47D06845FAEA3FB523C5CE5761050F4D7BE3C07EF80FC8A2D96FE16DA2F52 2B50F6518446BF64A0717824F7F8BE9E4734BD4737DB4B613E7E3ED9395672EF E7F61A887996E5B8B44C94EF7D5800D04353C739043E5BE9F2B93AEB49180390 BEA7B15653E02A52C70FFA11E3D6ADF017EECA77E97BA1D5DA509A251D585225 E7FBB89E38482514CCFAE1B3871B36ED6421014B9BC9854247ED67F962F8582B A4471805054B1A62A064E1CDB4CDE6CEADA8C63E5013C99E5F35611C23F93A17 5A39EAC64AC8CBB76B19F15C3E71AFE68FA93AD903E7D2C1CC094AEAADA2EA6C C639BFD4842A2B7C9ACE44433CC181EA2FF9BCDC47FEFFEC9CC0737B7088AF78 29557E8C1F7A825AB31A7E64522EA9F2F3983C1EB14048B4FA453FC04879FB27 A38584B80E4923D449D4C9171936934F8605FDA9905A5FD87CA1C44A31920C26 E1EDEB80B835D8E7A647AE842792BAD46DC5F4E277E534D7641AD2FA14FF177A 0802F81CDE37059B4568A8B06649D7950471FDA7056B675A90FC1FD4B8D380B7 6BE5958AD92772AEB05010F911CC8FE665F72CF3B8174F7558ED94A3297AE918 91512710D7F85D5892572B15A933E98E4498882A26EEB6FCFA55D90D48F4D84C 55E3D32F5F8CD1827A5B5A3DD8B8322EC61558D1BC1E0432D9396F508B5E2B21 4705FA448A68E087CB39A7A3A184A098EA095301A064638156CAF3A2AB163551 3FBA7DA70C080D6F90A2F0F2EC614ADBFDF2CC0FA7A2FD8359014F3189765B48 4EBF26C3B384108AF709CACE708076A951E1336FDB85F6D65CF93A5FCB00E81A AEFD1AC063CF370A5019183C85111E7C94F0B00E84E3B5A1A844FCB9FB350253 59CC1D705A644E174B3132B017E6CF0690FB041A3598E43C5A7379E74A68AF3C 91030D7E1AC1150B848BA3679B9FD4C389B1A5EED00B807798928A080FB8E2D3 9E942BA6DC13C68EA2AEB352854A3DE429010E542C59D89FE3B5F3A2FD4A7CC7 486ADFDC50AA172E0E199B31012D4D6F088082D695410566026F6A3E20F381F0 03B53A3B6478F821E351F8BD8EF78F793DE6AE2C326308AAD96BCF38D0429D2D 849E05706752C6407CBF8E174648D96EB30E797B7C8B4F95495D9B7D0EF1CA0B C228CABA268389ACF9581CD0F51DDB8CE99FD508AFC4A38DCF717734CC076A24 6B28248F8529207CA64F929329B012A25BB61AAC60215C6F1E736F9CA55E80E7 2E9DAAB650FBB96212005B08D389B6DC61EDF075B734DE09B98DF4129F9EC36E 6596E2AC6418DB0C32138AB85430005710C758D7448DF224734D2E3923259B0D FC6B7065C867CA4AA8199093264518584E1AA9FAAE36087116086A2E9AC10CF4 09D3EF67012D1593BB50C9BFC3B59C3600ED250D5C70251E978313933C3C9F59 891C46B03F7A7091E77C557E7053D3812D7D693CB6C7DA4E0F489B207738D7F3 3759FFEEC013B1691AF0C60798CAC322685D26060C9CE6EBF066D53F30F11D25 894358D31207551EB0AFAF3AE1D1B66A6675EBF44C467C6758594A4D01DB0912 EAC8754AE29E0B3C4D99AE6CF89BF5692934E7A07B0177F919FCCA9EBD323E15 374291E778B3FE8A8A6CB9A69858F3278D8419AEBADA50B248D2D8C96EB63884 0C27CB385767F01AD1AEAE9C6406EEBF21B2DFE26C759E2D955A74A28F06F0B9 45E678A9D7813522CAD3A0A91DA860A6C7EF9AEDF3423FDD5558F1CF976280D9 E85944B29D1050C2482B9D97A9357C0B3853F98BF7CE394C71A92FC724AD68AF 6A9918F688DD40C917FA4AB39C175B185896FDA430AA88A9ED2516E8EA77BA83 E45319F24D5E82DC9762FBA0B801B8D0E4F7DE641D4695A9F0A1212F53964508 5A9C4113B36A9605092435B16E6F765DD95A1DDBD7B8697C94A943623025C291 04B695920CF1B9C5554F9DAE95F05DF8B61B73A45FA4D65B8450CBD46BEB6AC9 8CEB6211F698E70F355770ABBEB1951B89FA09CD5E71138F93E2CF3285A28E2A F075019DB6E974A032F5137B07B6A4C63DCA29E3D60137399A43D7FDA58DBC9B 4EAC070EA82F1BF66D7FA3B06E721048AE9B31B7D5A3327AD85A866358D3AF40 F062B1372AEBCB11CA70420FD18657C8687EFDFDD545ECEAA2F2BE2F34A05AC7 7919093131B5849BEDBE80429648434A0302DAA9993A83316718E48CF96BCCFA F7A1D7E186DCF349C7070F7385E8AA028223DDBFF26F66CF215F61F28A6457DD 1DCE4EA972AF73F231900E0A524ECEBCEB05BC23C5B7407643F8AB7D23423C82 0A2534D9F582280D0D2445D3EBC42B471C2458E6FBABA52D938A0EC7876A2304 9D8B04ADCBA20D1101284D4858F97AC95D6DC0111D1573CAFAE8F6F8446C43F1 D3BC51596AD3C2FB6C69F2A9570795CACB459EDC78C52ADFB76E6784DA1B5FEB 3F305ADDE49ADABEB42C5C01EA61946012C921133742255494D32060EE4A2455 5BFDDC076F26692597EBDDEF9EC84E253A3B4219F3F13E6C94E3280E8D28BCA4 E076025C91CC07A384B9962CFE482B734D545E0CFF7B941FA601C10B3E9C2518 BAE689B889CD18AEB0220CCE3617E63906B7D8CFC26F95B5AE3564B4E9EA384D 3BDF74E8436805ABFAADD9CB40A59095F3FCE96C07DE973CA7958B01D74F5046 B942EDD853FEE099584E9D2E935C7745B7FF6BEA18DC184ECEF507D14276C680 E6F07604A1ACA225A52E1C45DC5864068A90B65B98F78357240FB76F991F9364 F00E4602A8701E1025B16B7F1A97F594B6FBD2A321B042DB35AA44F47D2D049B BF97DCB804CE4EE2EDA3C5D6BAFD1B214E35D23ED4F216961419152CC037D1B0 2CA38A5111946C23CFE641DA07FD378590CA88F7743CA51DC77923CA75B681D6 DC69B139588E6560692E351B2ACDAB8CC26A6341CFAFB2C3486DD98915BE765F 4CD20807C525A85B515C0C16621D90623EC943B55F0771FE3737866867A47060 CFAA4542902BE0677A53B77544E2CEFA3C04E2008598250F28688CAA37953C71 6C190F7D4D7C4C63BB198454EBF42AB7EF205BC46C94890A7F694DEB313157D3 53D9CC57F45C8B4B45205B34E3BC4E6E7ABB1637BF2FE53CBDA4DB86D96883DB 13C3E0DAC10A36BBCD0EB98943C82C3D4EC140BFADACE3CA5837657905013F19 5D656E299E99857911C105038B940013CF7120AD119DB6387FB82673C7425E41 3EBD4C898BB6C4CA79327C5C8224755C09F406E7ADC5312F268D28113245C5A4 1FD5187376C43B631A46606B5E4DD342EC3794ADB2668384C6074CD62C8B3FD3 0E250A6010DC25AB2D9C2130372A7ABA5D99A55FFD5C2BFB361B6641950273B3 DAEC41E29B5F4E4BE6C47B6F8B07BA114715715ED44A7EC9E5E02143E9158FEB D74AEC18677F3289490ED44AE41E5E644A88A2608259FD8289F70382ACF1FB65 DFFB6068CB49E42D2BD143E716B2552F79AA583492AD1B0101FD8BCEE7408A15 EC0F74F86AD1E5960B644CB98A0D7EF61BEB88CF986591C7CA593D4C335C2242 FA9BDEC9EF27F959874CB790433050010B76C5C4E8E52F6081FE12B43B68511A F8E44C320C77ADF8BE420B49D01A35B2196D311C54746A890E309014B28AAB43 5494C69A64116E35286FA70DEC52AAF6F01B279BF7C3EEC83C5F83A7E06B86C6 C87AAC3F48CA4A46497A678D42D7F6E5B75EE084986050C72D2AE7403918FA52 9448E84F0C13ED2E05C5046A86B785D6B28FC837CA0679AF787FC6B9E0BB6694 6D9E6D362C0E5D2286AE2C5108059A6F1062FE5BF325ED0AD064CF9ED457D201 920AD9DDC276D4AAE77F4FFFED8C3CDD938EF957C720CDB03ADC8D5802852EE0 3889A623D3CBFE97DEA0AFB94E3E8E4D46A3C58327FE6F23958DF08B80D5F764 08F1EFDF674493B0FDBEB2B19805DED353D9995ADC3DF804E574CAB0E954E3BA 9C76607F322D2155D8473107715EF96A06A85A765F594814198083CF841C120C E1DDF6EB226382EBEC5547CC40BFCF24DA3383BB8CBB1C4E5C71AA04A49A32DB B08E650951358951785012DD855EB6F7BE2606215B61715CDFA9E3B7F74AE31E 19814B61AD49AF25C42C298F52D4F4B1F0D72CA53CD511BF16D59F2E3F7FF3A3 0228445FA2267D52A1049CC43EAC74C474E19CD574DECCDAC37366BA1C533BF2 3590EB9E6E4E402D6B331BA57C25A9DE9CAA3551C2EA3B3B48D1193C811E94E6 477C451A23203C0F901D5DF77A2BC15A54D0289D7E1D5F051DCBB6F97A2C0007 64F1FDE12220479919B1AD7EDE462A28BDF5625FD11BCE29DC73B0F130D7B73E F1C956F0EB7D355530E80263FF95A3FD86C5BF5A8F9280A302EF55B50246177B FCBD3C8B4F29887FE682524ADED4B3EDBE4FE9C3174C072E24631D919E297DA9 785E4CB724A606B8E056E3C12081ABC5E3CA9DF754330539089AF63B85F05938 D871A58BC53C5ACA3A057302E0E5EC036145465AB04210B257753DFA9D75BE9D B57AAE25F11331C4E19B210B39ED8AC74C2A45640C7F914B56CA1D85DDD83ED5 40D1E4370D44FC03C5DE5384AEF8B63BAF7BC7FC32349CB6611FDCC82B91D2C4 BA111BEA7545081D250895C8E5BABE45DCE4FE11BA87E728E08FEB146281A44D 00012518E56AC86BCA87308C247A99C14559D383B85F045BD99EC6EC40C4D2F0 65701599595737E17FF4707E938D4163DC5C5DB95E2F4D4AD8E437F66A3C36A4 C792D1687679DE42FFAB0BC754E5B1E43508C21FBB1A3DC304485C415A686657 EA1A0E90C7322A364B8AE93425E044661F6556651D3F9873A102E87B0B68D8E5 D468CE2F02359FF20CCE5CF53A22D19250A7ECB6940A98CBF7C3E2A664D1861F 86EAACD43BCBBB0D888BAF4B5E90E90D32CA53BCD5660FC10866B9CA92E43DB4 569CEEAE4CFD211763AD75B885B9C65A8AC553E5CBB5F2C4496DFDDEF46C0115 0AE64EE489283932D13FC4DE2ABCA4795F3668C63416EB357062394DA0A826C1 7E6B05CEA77CC0CB3322700F3E1ABF1E6CCF7BAB83B6B4026F03F1BBAD0A10C5 5E8D9828C10AA29C5A2EA82730561D4019A0C6D131B433B9DD9BE471F66C15CA 384266E8C1714EA8585BF507366B7FC0F0F797F40CF4A613FD15F033F88BB3A9 9D5B2654E591B634D49253B2706A31E2F0B2A1C699D0890BC8FD4B25FCCFFF92 809336ADA46928D535ECB86D167A081FCF19AE7BC30E56225E040AD75FB5DE61 52C32A4649F2ECF10D3438E80A50F56FA3A43009C5C845838563EA25421030FA F79825592A51030E21F9BBC1536F33D2CBCFC1C22499C0F80503FCBE9BAF8BAD D35DF34D2875D4E6E83EDE725C829D4A53083484351BF341A8DF8004E20DEDAB 607D9328425085A8F3E757917EBB775ABB9EB9969093AA44B58E092975ED4966 5495E0E7E602F0D3194CD7672495CA11BFB1E80231258EFB746275FFEFCEB535 A718A12D58827F2EB225400C6881451A4BBFDD4B46114779926BD485EFC8DE44 D6DB332605AAA5A7FC1DE0B4C222E49A33C821426D8E368B931D0402AA1B839F 1C5FE1C77C329F8DAC88B72EED01779E9C18ECB4369240460980C264FFE5ED13 5897ABB3A748D0F855EB83796DBBC99917F6FE0C9CDF733AE4CF9A05CB96E88D B81C17897EA2B714F9B83342CA33D092C148EBFE2F5341CCF2CE1E4E1E5CF89C 5AFBD1B998C0806AA39D7BBF68DB42F013A8E1328F1F32542D5636ED8EEA525F 33F5E1204CAA6E8498CBA5F4B4C970F31F0E9D59ECA534D6B886BDE7B5617B46 D0B6E8796F51A4CB169C64A2D5A4D04E53B46373A7824E35CD6BFE1017F733E3 239A0B21E556C96D64CCA81665CEA5A1EFA5B91FEC17BB99DB9B16838A615890 F6A235A1FD3E7746681EED1A73D9C0BA3F5F229B7C4F8BCE672F8535A6332894 8C788FC18113BB20EB0C802995E333737D6EAAFDFFBEC04DA500B28E3B1B9CF9 8A74D155FB6560060F9E8CF4E1EBB3B47043CEC18BF2B764EA71A7F7FABB50FF DE301187D740865EC7CA01A58A315D9E31D38476FC8F20FBC23F3A6658001088 B9FD73F5164E3689210E6C88A83C1894AE8CDBB53E10EDA5C88839D7AFDC3910 66B88A12BABC981BA4099C05EB047042785ECB701932C9CC4F96E8F5A2D20B11 E908D9C619F1D579ECD5ED7998EEE848EE23066FA80292CCF13B0B33B15EFAF5 5878F3CA17A08440DA18802A5C6E212BC7E3B8555E9DF231C1F9571D77E2C8F0 81AF6E1B91E53C1B630BC5A149F863290A8A596F6D4C5205A6149C9E356ECA6A B827C7417010AB2750F020E0BECF6F40A3D356C708FFED6CCF928911AEA0D6C4 A96F2C1F794C9F6B208646C25A60C65B00F7E0A3321F21B25D1064FAA29113B4 8F3D1DD8A9F67AAE5200858A7A4EADAB2326FC8DC5069225F464B34A0E6DBC92 7E960DBC2BE9E03657BF54552699CA523BAEA23D8B0FF3DB605B6802DBDA6421 88D4B5950ADB9DCBF1CD9C6BA643463B09C725460A9B5CED29ABDB2813613A3E 9546615A0E247A13FE0843433BB13DA9F53ECFF4661DED22C2E33542DB518D09 BFDB906B8952BB029BE10DDB9DC059B59E4EC6E7BD2889F2ACC74402D9F96DC7 7D8125154FA2407151A926147689035FC32C0AD2A606A9FE3107B5EE501280D6 C75236BCFD6C422C1216ABDA87DD13B045E541F88D566214E579F8D3E6C8B68D 0BFDBD1715628FF84A2F8778384F9E7B796F299AA3CB76B10C82F9D5CD7B0242 3CF6091D12DE398C69F29F1DD5F11BD467995E35F6E296D48CA8EB7D4671575F 4A53CB37F995A33A39AC6241B7FCAD9C1A8C23E14A9CCC0E233DB1C4888FE4CC 709DDA2563CE6F834131994CEFF5692B0E4945A2CA672913FD17E2A5C58D0EFA 268AFA4A39E948D2084F0AC14F1F59A0AABEED9322A1BEE00959499A657EB681 A32E13A6BFA469078B6E752C48EEBD614A48B8238105D61EC32FCA6D27C0F914 E665E9D87C5EA62B53F1E7C4CE2E7CBF07319ED1608C9E9E3F1258C463C1C100 2554DD5265D35A13B3CD9304BBFF08096EA237C9178F88BAC17EE12E2AA7CD29 CCD7E976F6A102DF7EF4947846F415DED6E60D180B22EC9E91C81227CD167583 BADFA76080A434CA059E64BADA0BEB2B0E91AE2013BA5D23D3FC1ED9519027CF D3E3E2482786E08B3B35D2B6E14BAD2E24C6F437BFE4CCAC08C67F2D61971C9D D30381D9CC8882FB245FD0BBA73EE79C1C5EA7892239B54198CA4F2DB0D77267 38CFA22A1D8A53030602FF834C0717B3E372559D9347215675DA86CBCF01DFF9 C46451FA26844D4B3864D9C6879F3062F8F851B552876BD15CC84504EE8D5B25 E981F9AD4FDCE79FF59366236C19D41126BE0003908E91DFF2A3CE3A42A9ED9F FA8272446D31ACF35067CFA838C0D1D023C7F99F45194550851B4A11584F1EB9 9C0E3967867C92A260D815A28CAA5CC842F313BCF1140C5C2146F2FD25A46243 320A1C5A27725472E5640211DB0F01EA82640C880EB557298E54B1CC27CBDF6E C2AF67684B23B6822210207E45E302AEF4F9DC2F2A3B9B7F321243057D881DFF 5DA582555915ADF2297C99CC0561B26C194B764B7FA2B1837B6C5F087FCB9CF7 D718DD816FDDBC26012531473A1521E63A724D95C73D29987105C38AE741D75F 76B95C4CEAE23A6D1D29B494D089F9B1750243E6C2443C37484721BBAA145979 0B65E86F97F81D1A44D9AFAF762604FA442B33E0B985F8414AC699284C05FA83 802D0ABCB947971C2DCB161661D1F38F96081E974504C00DB0D89D8BE113493A 1A248CE00F8A54DD352BBC2728F509853EE05A1C6FF40C6DF5CD7B2968344F1F 2350E9B88FF8415CE0E113D22DCC6E5980E5FCE557A3BC64E141B4458150347B 168E35237A245A1D1532A7C1E8AA487271BB4DC122C0C75E47AD7E7A1C35BAF1 BB797EA981CC72DC550BFEDAEE0DC722AD62AE9554FE9E822D2BEF7E9EC838C4 4995143A593CF33BD92E37B12D3A8F29DE6EDD8B98401AD25FE73F3505F18369 5A5DF007C4ABA613145AF6A8B7B06F1FDEBAE506DFE8585265ABFE2D662F1ACF BDFADA70EF86FDC577EFAC8B24C7C399CD098E1A0DEB65E8C95C2C773D2B1092 1A39F5AD71DFB6EF8192FA1DA31156D08205792B948D26FA1FA3BC6F5F3275FC BADD90204837A228544B30AE0B0F8470DE34B9C928A980958FF01C481BA1480D 998D4A6D648B97C060EE44AF668BC1546F7309E685C1A00D8227B4B7C5F17E78 A89809823590469C0343177A54DEECC1BCEC612AE333F34981A28F78A0FCAA78 116FD3C17B19EED4E55C01ADF0F8895EEA12D45B4F3A25AB605A263DE932276D 16B9B72BEDEA2FFA8F493D119B2721F72DD3CE0F1DC7365386B63CAFD774D142 388527F0A02394F0C5502E3768ABAB2C080FBE5A832EA82D6FF99C5A65AF5D33 F667F0225B9F319F054C475780DDA9C6F1C8F0FD0505AE8AAEF27D0D1CC330A6 410825436D6CC0842D91EEE3B5F198AD84CD3423177602D521570365078AE6C8 8079A4A0D87E599C0876AED67FFB3FD13886CB536EA2F022326A00A121CAB893 01CD94FFAACCCFEE2B2167FBBC4A62F6B40BEA1AAF1EAC43AFFBD70E53B80039 6CFA90D932D1E597C040D98BDA0B019D36ADFAE872EC1BD91ED628994D071EBC F62659CBDF3EF702D0FA67EB9F95E2BA245F1957EC8BF8D5D1F7271CF8CF3837 A07B3367ACCF0B4C4CFD30A374FA5C9156FEA1F05AD54FEB2C377AAA7911C614 582AEDC105D97B86408C005F597F861D8FED1F401D3AFB853AADA4E81C57D744 227F9ED2E1FA8A46C68679A5561CC83BEBCCC2B432EDC0FBEF5BA4B925B6BA76 965CD982D5CD469FA31C5BB567171AD4D79B62894ADC3BC94749B4FC2D137759 2892026E16A0F372EA323AB51E23C114F30BE247CB5F2BB4E3656F660A8F0C31 25C43E7F0DD10669E2B0819D62A402AC1F403B3B3E42181207A8FD19EC9C9EA2 00CEBB75DB7B7D1969CD18DDEF18B7A20B0D3F702455B4CB9705BDCA36B09397 B76D7ADBB40E2037288F57C2CA99EABB9870E1D1CD7F3F2DDBA010D641BFDBD4 321CC05839ADC1D3ADCA67B2FDD3C5A3B4D703ACE6EF665F7293162B39051CEB 4CEAD2CFDE2AD38C1DEF0076325E869CC4279164A66D8922957AFDA10DDE38BA C8237AFCE135D3EDD082B4E3FCEF82E6402E44F4511F823AECED2B222DB97856 26E846408D556491567CC4259FFC7BD9C0838652714B3CFC61F44C9BEBA4485E 53718997739101069F14B2A1900FA728515D0BA26FAE48BDE871091AB3B6EA90 8C2D42858E8DAD44FD2DDEE93C0785EF10A4EB9185C429750820DEFF528796FF 1F668B63762870C23768712FD62382311C8C4737065E8FFDEF70B3DBACDFF083 49DB6627FA66567048891BA794EDDDC9C5A1C47F60EC1E0B5744C26B4B110900 04FEDC8143AF0DC2B02F29342CE024D6D5876E5DB59D7323A28B265FE2578FB6 2BF0EA9F0D85987E3C7B9C4B8E491D9193D40A5E0BCCCB3E9D9428386881A3F0 CC586A6A6C1B256976F03A0BA5028ACE4E5AFCEC7CA47FAD65FEB559B3F7B0B4 A24316CDABCD387BE5E241A11BA2D3F48A9951FDCBEB6DDB9227B78CACA27A75 371A9CBC4F2BE12D139E79ACBBE5760A3A0A044583B334FF524BB1D5F0FA54AA 6ADBCAC4D6F6C01213D0C6B54BA8554B49765ECFCF8456014B7179876B88FD81 0725C7106266B3B9241E6EE12535771864EFD3C31EA57772239B7DA8B9139C5A 2E3AD47B2A27E560CFD6DA87776E3D66D19A9351B1E352E829A7127BCB0F9713 83E3E5FF6301535F372C38DFB8310CDE0FF24806A4B97B608C8B249EA1D60E76 AACBBE28B7C4A3581F977680F67C5C3A5FB412E481AE7A11417DBB7D8B2ED528 658E92B8B0B1FEDFB8F4DEF05D2CCC42F6B57703A33EDBB4852BE8E975E4C6CF 1085908476EC40C50CA746BD761318481936B71639B24011BF652347BEE3FDA2 FEC5BEBA0F5A5609F5B834DB04746D4395B08B1AD4CC45B7D24099259DE86DE0 F5C0638881A9C92C09B14B24AE8230E47E53B4785B52989911C164A58FDCB167 2B0390701EC7B6287D9C942BD519449A4754C9AC7C0A22BB500B2A32A55208CC 2DE0E516483DE632789471B8D46260290AC32C26FE2E31389A604490A087D0DB 81937C0F9C0B15714F2410133CCCFDB6F0B0FCF95897DA3E0AFD783FD9AD2BE4 6D21A6BE877592E404475471648F8205483B894BE866799E772533AA33728D4E F54C1354822020AFBBFA7B4BEC6F3FD9B26D6EF307618DA000C56ABC87D98643 D543A519FC8D61A2B86C7E18364EAB4D31A48EDC70869DEB8044A17FA8B2CBA5 224851AFB9FE49CD5219376D6EE66772EE27FF6419557E845C2B0426D793CC2A 3165B3EEA6A1A13F421C8CA3E47C93106B0B6202D86C5A31C1122AA3F17A86BD 065EA5A687EA3B1ED324A9F36246919BA50117492866DD545E42A1186979FC71 DDFC98C8A6FDD649B17DEE9FF4AFD78920A75FF69ADEF128077DCB3F5FF601C8 96599F8C9168D7229BE969E5AE9A08166EC40E890D1DD8B62E29AFD2E3B406A8 73396BABAAFC158C6A92390B33598F8C643DD4FBDB760D2D202815DE41E8A471 039F8D61F8033532CD100F07D726D0D92E68338C014C88B274357D554EBCC802 265288D9E554ADA4CB6D1431D0CD94CB3D1A26675EFD6D036BC583D242710A8F 19751007530B1CB76025D04432FBB38D7468FD4203D9A47F7E67C636ACA10E19 A9FA72D3DF82FB37474966A58AA01C5F7568DC7D4668ADE721BA5219CEAAFD3C AE372963DF037ED7574AA890AD12463C5109B5CF23E54DE574CCA937D5C49BF1 F763F6380300887970BB22246FCF5B2B2EB69942748A30BCF9A003BC6FBCA2C7 325284834812EAB44F42921A116B12D184F9EBCDD8B782933A1BA9ED1F33F97B 548D72EDE27B24A0A8714E6A847254763CA5AF040D304D75E376A43F9CF839ED 1D9E2BEDD3C0BB55E19B8C5FD48CD785AAF3FD381CD301C75B6BCD63CDC52D0E 3DB72DFD034AFCBD61DE9C83AB58A593D727B6EAB8217CC38FD5AB57FF1DBF78 01B4CB52D6E888339B00FF527F839026787F743EC13446C2B9BC6C73E24C5E75 29AE3FD77A54E341F0D40DE696FB0C11E12252BE4B039A80618E1B9C824744C6 E918CA1230C1A1B389AE706AC4E4974A204854CF371E655A80CADBB400DD8F8D A6C3C168A237B5DD57E69FFFF2D670268242A54A2A30DF8EE3D6802EB60B8568 F101F3B8081563E133B5589666278217DE793AEDA75F72A50A558EF3C4E2DFB7 6CAEF16C7FC19C7C2EF3A1288E1B77064CC245CB799CA5DE7D709C1DA186AF22 1453CB15AED504F92D27201EB935E397D85983135B606265449423D878AD8B0D C53B9461A91F46AD34F5CB1A3A0264B6305C01273C84CBA9761260A30C36BCA2 F9CF25CB60710671DC2EA7D9D48444E53DB4F4FC0803BF617632C87EB04D54EC B729E72DCCE2B88CF6A4FCBE878615FC4A1728D456E911F904965FF49CF1CE7D 69B4EC40857946FD8A761310B2D2AB5B753D6A47C11C789D682A23E7F80416DF 4834804F7E600AD21CC2930429D479319E970CE129AEC7AEEDB3CBCFCB311693 FA4F4C645405B6C9A6C5DD437F6D8D320C36DB8C34C8883218B913C3B9F3787C DE794BDCF63BE1BE6AD878880243BB1F5DB700A5FEBEB48E8778827FC428A1D5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /UniqueID 5000831 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA 53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F 9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D 84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F 737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC572551C934 9C362FD595A429FDA2D815959461B0CC2A804C1142BD91C7567082699B8E274C 6A22806D6C51B7DA809BE9F612EC537D4FF3122644AE0718BBDC6ADEFE7EDBCB 8C8A76CBB280E70ADFE563C01CB9EB828ECFCD365825941C8B7E1B1401AF773E 0D3E8A6F2D62624F8F5FD1EC3CC76254E4CCB4D8E4DF0D5E6DE10BC1FD8BC325 05E773E0925B6838E0D7ACF12AE32E572F6642EA587806FD2805C9147B873194 788B8162F3C20C915E4909B72D0A62D4A2B63B3825F96C42625DA10FC0E9ADCD 77F50821EC585193A56698ABDF8822AD65F853F06E4171E1A1AC06E5C57691D5 90523A7F03DC50F41C46D72151717149566C2D356C1A75FE76619AE45B9CD605 D3A0B33690F9431CE242042149A2E42BC6A9356F786ED9B7674C243C8AED9D77 636564B36A52EAC1EE25999127F925F8755EA21272E3AFC856EA92F1B1E130A6 9486E1DBE81C78914A157EEF0414901AC8BF313A9F444FB2844405C263105609 9E302C68BACCE64BB7945535F2F9C2872DBA3A602BFDDC2C6438B302B8D96DE5 F537A714B7D2BF4C8B6915011D38800C0922B7089E1F58A5A6DF1D426261FFD3 8496FC59ABEF5653D244E51DC18D750C61F4AFE49961F461F60F05664DF2395B 7CF8112611AD3C6BE0D64AD95CD956DA57C6E641EA2DFB4F84B441D627E68C6A ED7CD840D1B199AD4B428C6FCC8E0E4CE294433A4C8A4F1E498B5ADC74B75490 60C206487C101F03F8704FAD6B22DF1BE74DBB61631B2426EAECE3BC8120EABC A4B87B7D1C47DC03DC1F132E4A4671129F793002C5163D5A341BF2339A0DE9EA F6CE84D02DFA57BBB021EF5B165E47F01EFD7441F57D5072F4649F2C6A9271EC 6333129DC28B1DF6641E7BDE87E27B19D474DA41A43A6F985CFBABDA93BD0C9E 4552DDE651D58874023F062CEF99CCB280E75E6ACD9170013E67ABCFB7765B63 8D5778C5B9294A5F9EB8165B534CCF2345373D744D46DCABB2386EACF24FBFDC 945B43021D51381512993D0CCE214FDF11143F608964E2E4458BC307618FB066 D0A09A1D3986B9B2BEBEF6CCB56B060D92488CED8F8657B779DCD06FAE5DDEA9 AF3DEE61771BEB0106B8446FFF798BDA4522241ED5A3C2201B859CF99E487A9D 6D09F1F4E15771BD8B827C0C6FAC0C68CA005767EEA79C653D10B357B2F35AB8 E27E9A9E1647B8B0695D9B3361D5C4DD1C8502307AB8D589E8E7730CF4E79138 DC663A160F8B48A09E2463A3884F7110DA86DBAC85BCDF0F2FB642D3A32079BF 3EA12A6EC68F1B16886B92C447C6C671D056C625D983A59AFDEDDB11F5CA4607 849A561FF10F2D8AC4C7A07FE97CD0D40EF2FA3C70CBA1003A32B6F1E6AF34CB 297A8161614ECF7582E57A0C28073664DACE0B1F5975CA309A313954912428F3 EB1FD70B512C6BA2807E7DE61C4DEA4AF0F975BD0813D74C3E7DC9B0FC48B19F 8AE1D32B736870819CA75057B963C1AFB107309889506B0905CA55B6F3021515 B0B6A1C0F298421CD24784B89EA18251ECB9E9F76C0A61CB6B61CE4FC18E84D4 C7ED481808433D1AD785D0E66ACC21F5DD37CFE2DAB64F3D23E0BED8A8E21058 94802B93AB33E5B66B126C818CCE25F58852380D0A46A10BAFFA90979FE3C5D6 C1A41AB044D3A12D258AA40B505A7E167FB20697D5607D83C90F512DFBF4B8FB F0AEA744390E9D06FBED2D1D5708EDE5C4365CADB27F9126DE2D0D91448776A0 1CB4091C21D62A253B12FE336DF35BD4B322890B0AAAFE6B917E584156632567 136AB50A591298F50D9B7756AE5B9DC1CA48C08E564BFD1AB5AACA99027E5950 E12037FA2BB52BC7F430096C7CCC2E6E49036B2EDC04602B42047659ED14B344 996D0819CB04E198855E16E34FAB061B23CAB292B6A3A33A692ED38128193D37 C8CC57648A3E641593A39E464E46D260B38391EC6C54A5866E555F46AB175457 7EF1CF14F518D86A975E0741C75816DEABB25DCD1BF501F3F7FDBE8940DD1256 8386A7D8FF00994FD669D6377A279C6833A2D4AFA5BA3B02925B1D4C8547268F 408B524D3F9CEEA491A0A7D81843317C001EBF830C369B61205CF76201FCE5A3 B2A5A6D96F9F22212CEE6D220337B2F0799EA3BC4AE337CB463AAA21C79C57DA 02A2E0A60931AD78E20D5471DA17C2480346818533D131A62C5630ECA98D24FA 03612960B26BEF1FC3A01B45348CF695D4A2C2B69B15EEEEE49B7DB78B03F39D A6694E0E1CDCF75945810A6388412487107C38BC9632D637FA26ADE3EA61F5D6 3D48E4873A03C7DA132CCA34530F27504B51DD425A3E74DFCC5BB227F63B82BB 6C854F5447F3517A794A78753775ACC29A61DD380CBA00EB25730E613C11899D B5542B8F0F4C80FD9ED2073D9A5EFD3D4126F64CCD5B3626B6B8C0014C31C9AF E638C4E9381415F903DE7B554B1BC135138F12926805CA71A11D6551078FA370 08AB0C884EB5EDD95994D4D1C5D8DB1412DF91DDBC521339479DD06F5CDC1A20 0E35304ABAC27079C48B688B3E138026764E6F579503D13E2A87C11903360655 2E3EE587F8DF681F6514BC853425BE7178778B0B95A9107FEB58A69CFC9CC845 D13AA5DA512CCD45886411C0809CCDA5B28F54E5C1EF261C280E0B218F6E28BA 2D97F92962D962F48F753A61FA204411DB939E77120B8069155754B663029E00 D7397C001E098A45D84FC93AA3407F8BE54CF5052FFBD2780E3A78CC0F6292E5 17A6DDB977B817CD9EE2FF76EB1ECD06A7E36D256BA05DC8E523B63FF807E1C4 198E61EF3537B05706F8B58286DB806A9F4380AA85982EF8A053F52E26D28D4E 5EE719E725A624A024AD029984C35E6502FF21CFA2EB865D910F667F810F4A19 855F8051CBBAB71EED5F57ACDF4718EAC86910C8B38FD1EE596E98A0F95BE413 885D92B2412DB15C27E8A88C7DC20781CB6D9197F6063554777A3E2AB59A3369 916C3554B025B6EC0792F09D0396F6AE8CBAAF647CBC58FDA759A4AE2BBA8F01 C9DD5208A58C25210A8F6B8EE44C2E83FB0C5819ACE93D946A822FC5D1A5B329 8B7883E0DA2555B6905EB07D3EFE3A5F5354B7A6DA5FE2FAF2A8DD8ED3A095C3 7D7EE87ED1947EFA55EECB85E9944C9B3D9DB1B2B46A88D2B4F0276188C758DB A7A9B5F9EC59C67A553831CDB326C1C6D38528911BBE5C9CAA2A845B6D34AA1D 4876501B96E9E4515DA1242E6FCA80EDDEA1E3D2DE9C549844D239A9CFB3905E 984FD2AE71E9D356077A261EC502B8D8BAD6C5CE9C1711D65CCECB52D69BBA9C B2A5BF994B7405D09AD22C54D1A8D4893FC7DAAE7D9CAB00AB3FB61F7F56A88E A6146C98CDDA05078DC0387E8B35C5D460D21E19372E6056E5E4B23A2F2FB3EF 1DDB4E5312E0B2A4631C546A7CB1CA2A3EE23795BBFD061A44CA4A2F6F5A5E0C 4560FFCD520E8F235D6B768D119B83163CC1B13547DC447575DFCFFE1E06DDE6 4A0F0AD5C08BBE48432B15FC9D144E6ED679107C81D1117E7A7ADDD5723F4EF5 235E44730BA14F7AA0737B933590C453162240A1E712FF1436BF8CC9312ADD0C 2825E46187ABD85D9661B7A84F57BD78A35E7684F6F9E6ED1B1552D2DE55119A 0C1CE4CD1712EC5A318CF4B9A389C8120F332043129F24E341BA41D5C1FDFEDB B3777549F7ED355DCECBB56EE36622E0F2D22B3F37B0DB808920807577ED7230 35DA36AB230E3D914E653D94859F257149E617D82F5EA6E6D1B6C17C96008260 3730E3370F9F979A98CF71F9E38D592992251AD5B1DFB03FC466DBC7485D641C 97E5FA71484745A41CD87B4C1AB959A4B7E1404E30E8133E5707258A0236461F 58C7F5FB1F0CBDADC204311590FCE4C7B0165690CC869F221EE486217770B65A 980677F4B80A045587EF3F0C71E90DF404BA8F1BD7A3DCAE406A9EBDB2CC2E8D E4D25A8ABF1B4F67D5A1DA34C6F67AD574F71E894A52DA063FBDC6A5F35E2385 14809CDE8D4C549DA24DBD6B41359F474C0ADAB4B17F5FCA1DB304C685687DA8 510292B17FDBA634EAC57DCEF505025DD1BB9AC7D186AB560A57871840FCBA7B 7FC606D2643015E570A3917F89A7586D71AF8CA24D56E71284C979F37F59C921 7E7F33B1F62A556CAD6F0F43B0D31BDC3FC92082C3216A3B4960086D578BB797 0ADDC78CFAE010530E09A86F950BA7DF855D0CF9EEE48E726D32DDBF97469277 0856D2C19F819DD0086BB19C9A445F76C4745E3EEAEF48A86FC7F62EAFBD0D3E E5FE58DA688C278CE3C4806230C33DE2E6927D1A0621910C75FB0F6BBF85FEFE 8F6E8B55E2CC59E2E33F1CE139E08C3195F0BB3653A45434BAF26A3D8D150CEF 52C48C478E651A5F413E89DC60A7A16D7B73F7F90B070AF22F560A7CD2EDE5DF D3136617AA3CBDA07AD5BAE734E54A99C00EA3B4B46511C93D5ECC962E96A35A EB39D6DEEFB06D6E2E4C027A47E8EA8EC2FF0F4A9C84E5D3CF4273E50DFA722B 5D60C918C6981B8627F1B4F4BCC31426317D3EBC95C25B53255557AF2DF70199 1974A9F67FA7E7F545081C54F3103E4A45FE2C439368DA42D72FF4ACBFB14B5A 73597AB5E1EDC92A3A0BF4FFC68E9E74D0244573145959130142D903015C8D82 F0558015D3FD56C45472D1346AD727639D26DD574C9DE0A4FFF51498B78C9653 05CFC327139DE48316D7790E8CD1A9D0D5606ABFAB745F17C5E90244A209CE56 298384344A2A216EDFE7D5E7906BA6E7E03EEC80B10E2F3ADD160ED4A21E5E0B B64BB6FCC7893D6074E8884BAD38B4DFB61F429CE906062D8C37488433BA7FCF F305D8C59C900C6F36BD72C2F48344C6C8B69DDD304212B539C950B9C40ECDF8 01134774881EFFC2E7BBB8465311A852099D9379C7522BF903496DEAAD12D7E8 C662DA12A6DA3E3A99D7DDC0DC81221BFB27F1CF2FC6CC1679F09B89FBF66130 4CD106B99AAEA0AAB0FB6C3C43C2405FB979459C27CFA6CAC2A453157AA7712C E4C4EB0D03E6F4DB648CB2FF46A7BCBCCA740AF8D03F4E032BC1F07B58A28C7F 20C67A9F5DB3036769493076258B474F7F2B11F78E1600A1AD228963B37E86A6 20440597F89F67A08C07AF0CF3E3628C9698B4103B7E296FD5D78491695958CB 4F61366EEBA51C3A7F22D7DFA81FAC74483D6BD1E17718D8608D728D45FFFF41 AA925D4FB248EBA78A31BC2E4EDA9B4BDECF75E69C1572B02724AE0E88A47C2C 2606B0D5A952E0705AC500DDFDBD9653D4CA984EF9CCC2DB8F0E70853D172D61 8510F07D0CEB47AF4BC8EEC06D2AABA4125CE96FD28D9CEFCF6201A70C139900 1AF6D4CF7DC807FD1A8202AB8B0C005067BCD3AEBB482BA2F8B8FA44D3DC7338 CAAA8D46A5EA05B8B1A868493F8B503393678AB75C5F7649332BEFC624F1693A 3E34ECDE22A60891F423950A854F3BB1F6B4959AB0EABFA8955D67F42734C8C6 23F6FC71518A86FF0E1804E7CC09CAA830479D9CC01CD03EDE50DADEDB16FAE7 9CA4ACEC7AAA5E704290A2F7527DEBA2CDC1444F027EC86C81367F54516C1654 5E11FEE3F10FFCA2D74206F365D53655BD8FA76BAA8F8C78696D47591BCE88DC B12AB8176EB03BC115F99B7D88C56F2A3400040637386FB86D093CFC38814F2A F1616AD54EC908AB3AEB11C61E3AE380D99FEA37B1D594559A904278CF2425A6 012729A40062BB0AB84A0FCB86A3F5D04561B93A77CF011F4DE3ECFF5E0B004B 933084F930F0AF3437D59447EEA731352339492A0685B45101CBFB5B8259E6A6 3583582DFF0529E4AA5806AC2F6C9C448B0422C8125CF30259325E05B0A85EFF C20FFAF525F73604DD2CEC421190B3A47875BAD36104DA1D80283DF395B6B87C 961E613CE164B60DC343D3AA6D7065149B412C3CC3FC1BFF415652F99F698B52 31FE11816B341B2E2BEA3F7D7732B5C9E0C754027486D56B1D2268B981B81C30 9FE2AC2F949990068F30403E3243CB7E4A448A4CB05CCC59B9C19CCACD03E428 E423CEAC7B976B59ACEDB3FF08B094AC3E969C99AAF5EA974F3FF61C5C663B53 8878F3885945B1A3299C219976D2842AA5DEBB5428E1A0864CF48BE957C7BE41 66861F3B4BA7CBCEF06B80137F83E351D8CA3D5051BBB3D2E1EFCA8905061D14 643A240BEA6AEFD788B00A807FBCCD4557E191A51D62D9729C98D1FC4BDB776C 781E824E0FB8B5900C41ACCE7831C4F6AB814BC7CB47ED8031DF80F517AA5E44 45046B25AC5F3474135E429142E5BC33D924CBA166596FAF5D25E732C79C2AE5 F3095A5D565B855E15A585FE57EC321B7D904BFB9EA2D724A085F298888EF252 938DFA23FFCFF6A1A1AB9436CC63DA9B560B074BBFD39E552DBB8D174ECDF5A0 FD92ECCD75EF488732377DBF97C7069851AC0EBFC3AC4226A534FDE26B47527B 0DA64B77BA16385223580B784D1E74DE433186809AFE97A7B51514E4F665D14C D1968CDCFBD8E50ACE4D76442D68FF726EB83685DD0FC3B14DAFAAE06A894CB2 D2CDA2C50FFBA709023472951955D39E7467E978DEA8371A935390407C01FD50 C8B393DDF202F0BB76B7572FCAEE5FD588C6F01AAAD38C99B277C501DF5C25B8 56F5BBEB4FD1BB379563093D54247A365CC66E04A09EEB1702FF946B2DA1247E 15D82AD0078AE820CB71AE2481C3B23EB86A5295CA58E00BC638EF541D4644A2 748E7AD3212B1E297F583AC4EEDB93641F2B7C0817245326322B0AF2C2028EBD 6EEA236F8E774B379AA00D7BF9B9AA8D9978649FD1CC8DFD7C145F36E2CAE63D 157480ADE56A69DCA2BA077F8AFCBA252DF716D99442EE7286DC74CEF7F539E4 11EBE1B2914351CF6D12FBD2658285129176D0566F2104CF95589AF2CEFB1DF7 CBA05FDAD557F3279007CF49BB3783470BC974F47408BE287877ADDDC30DB1D1 1ECF880973C5ABEC997DC089A91EC2781B77D4B1BB436C785B9EFDAD04FD6B17 22B53DE2A271A527E2A4A98875A041F5E1DA7BBB96BB550DD32ADEB761B561C6 71266E345FE58024F192ED4D918892CF596AA20791D196AF8034F94F8EC9AB76 625595C86424B94BA9143E035ABB4405A6CD2240CA82A6F38ECFC0629C877482 AC4DB88AFB832A4659B60CE2F2781BA482C8CD801D55C165055B404F1DC8D6F9 7748CAD55829445A5985D4DA6F0B2BAD86A6435CBA6D314712C260C4DA58CD29 BDE901ADAEA60C3AE82F9D52CEB3E29AFDC1E03B4CB387987BE958F3DC449A5C ABA0F3E720378B1FDD5D4B6F8F96432380A83E0664AFD7C9D8F85A0034403E2F 8CBE7840B219589C7E7D7E20A12684F0D01239D1D41CEA6B48361C390BAED783 DC6692FE202F3C7146F8C4B799A4ED5D6558DCF34793CFE86D7AAD1B27CDD541 293E1DFE875F5F397349FFBA48015435855269CE3E82E320EDBF3DBD81243C85 E7235E75A98EE2F7A8F5B2C90E2C213B13B9CB1776B8AF2D5F4753A812B2EFEA E9BEB45F4B3CC3C35DB9526E3B2AE4C1AEA573970E588FFD894EEA7F4F29DF14 61AC620D18337395F04E2F05D2CA8280BFFEC6F56E1862D19E891D753DE8114C 76CB8C88429A0706B68B2FB53D73D80DA80A88519174D0993427FC39CF7CC668 F2FB56CFB3F26F9E2F35743AA8BC2530930EE7B330314BE7A4AB21882FC84522 4AAF8A9B58AB8CA2E316B29EDAEE4A140FBBB591398A86BBB933AC07B0931CA2 086842ED8B3CBA0EA117C5B0FEF0DC8D4293435CF92998916C53346435048556 A36B15C19BE595C8055959299645BE7B56E3A3353F443E90E0A9540E8F5433B8 FCA78FBD369DCFCA049E4EA27E890FE125DAB0AB6DEF649E23F34F2FA46BB1EB CC1A041CF273F94DBAC2ABAD5E225DD6046B03CEDC518E8A13DA56E4AD6E36A4 BB319081EC89978E4215940DD715795D07A61221705ADC30DD8D6343BB3427D4 DB7B910D256F65B9BB9202C482B190C7FEB04EDBF80EF23EB3C17DB117B501BA 3CB89B34300BDB9A0B97ECAC87536EC94FE2D74B48CE2A14C0AB0F50F54E6D7A 88DBC59FF9D3C33D8AD4D3F1CD47F3A4E7E181500A4A96EE73A2954DF83F1D64 9C1257D65FDCD057BFBFC9A18534B5BEE8902ACCA38D313F992FFAAB300FAE74 5D7FE062C4C1AF0EA71A1F4C2D34313BE0F6DB1CA515A9F10DB27560D24B6D0A 6090E9099E59F59C0AD9FF714967B00A741B691A5D11B6042402C5584E487295 F4DCE8FACE662E1FCAF88601F9C076AF879790F742B4B1C00A15642E3ECD4661 995F0151413F513C28A365634A73596D5DFDC010D53C07AE9052A8F9E3C5C557 D5434ECA23B77A3DAF392919FD782EAADDC4D121F91EF04666444661D94783BB 240252B7C302AD0D5DA1994246D768424B449A3D1B160210C0F3296D34D63290 D40FC924B1956C2F21EAEFDBCD302C1DF97ADA7748EF8BE4D9C746706DA02399 04FEB35B54B61AE0131EAFFF5F410E586948EED156937E836A5DEC3204DD8C8E E556B8EDA52064864FB9776CC1E05E6181C549C10F09296924E6FD7BA07CA23E 783F7EFC19B869E903640009A37AB5A47A3F394FAD97F7EF0A1DBEF5C74BB515 70016BE28E8FA12F9A10E15C1EE3B31E4CEFEDEB385FD9B5019A5BD57681F9B1 C05AFD6B83A1FDEF4E4789245BED5F4CBCFC4838A89491FE93FBC5773A89737D 35588EF3CD0C9ECD89FFD27A7FF414A9B7CB89FAD15E692E509C65F3AF36A346 6C8AEFF5AC7CC50262B24F75CFD7C44A977D9A34F89ABAB25A957B3657C76D31 0F02B398202E98A8C65742FF5BB296BA192D3FA12B617A0F3EF5FA1502B4D519 9D2301D2089CB47A16606CA16BED608743AEF37E9DD4BE4B6E90AAD8D12B27CD DD26A6B8B67277DFCC46855EB23EE26492311CF9A8DC0C39241284284DEEA02F 4F358E3A47A2D5A7B349A22E46BFF61BADBE1C86E111B50E7297459F0F18FA3D CE461031BAC0D1DA78AC387DE0EA454005598217978529D5089EACB059D99642 5DF928E23215B6E5DAA35DAEC505AE112EB1F8E127898FBEE7C8A54EDD0C2ED8 C75AE6DA5BDC0BB86086AB7E64DE8EF6A1495D81ED8DE1A59796769164CD417B 46C45C9A3686C7A8FCCAD6F7BEBBCE514655FFFA6228A8312A5BC50538DC2CCD 3E59DD99D6E4147DE8F3983B031C03D07125107E20604545A43BD7880D3423C3 5E0261158F004423D18607C2BF0A39BCB65A685BCF2A391FBA8844C3ACC37067 64B2803C5FDC03D43668E31489BA7004B06E7C4C874834586ECF7B00035DB428 E4421E6A6651393FCA5057DD05AF837AC75AFA4106B354F3026710B5E101CE9D 830602A5D6704780155DE76792D9A3F2EAEE4734B3E1E87C85801C50834DFBC1 DB501193CFA6763795F2387BE9218F33072ACF3DDEB08946119F3C9B71AB2F1F D1FA74C1AABC8668A8770B120DC488F988F68F08FBF4DD6B44104673D927A39F 27E00683A10FA6322F30244431EC032DE80300F6E55414BAF8BE15C308F95A89 E3665655592F74B91FD7F71B7638CA14E0E1C273FAD0B9F84BE5FCF3533DEE1C 9E8E5A654EC3ED9693A38BF2617C0367229D6FDA89B2288827B98A8917C65D11 5F47124E457C20FAFABA69E18044169FEFEAF870ABEBBF08BCE5F3C7E1EF8970 66B5B5AB84F3AC7EB3E55C9546DD38C096F7221AC728ABA58FE76FF090164587 45C0C6C83A858307703AF33E31ECBD76350C9408454F90C04E9F106B659DD02D 5824BAC124F4547215C3A1CC3D38CCB90765731744736903F24271B9D8D3BE66 5790DEA93EBF0C8E5EC7F70721C00205BAF4C7BB4B6637F5C4CB0F2858A7E1F8 93F56B29E08B5CB9185433A3CD281F9AC60576DD1BC993C08D61111347350861 783244234AB06A2B5F94134721164E3F09296B2CC51D09C1CF55211160A43837 3210EFC0B9892BFFC4BA6F4B37F9084382E4C8329C564DC321A88A4AEEE84812 2863DF387D3FD8F5752305598E941412CFC362BD40C1B3F30B42BE007C52DEF6 0570FAEB855BD314989DA4590AD1D4A89BE78DAF819D776F9ECA616B88FFB866 7A0E1F09D20849ACAA5D08DF3C31ACCCB086F55B75310685D4E3ACAED8B1A467 706F72366FE39727DEDC6DBA504D24D9736EAE848E97C61131FABF70740BA88D 50125D6E12D3AF5644475779C0EF186EFC4A63FACA5D8A2A40BBC627FB743DF8 6B2E912FE4499B9D5FB2A75DD37A900A01FAC066796BDBA13C9E32B86F5C272B 4B0480D4FFF49C5097C7590BEEB0224C91ABBCCCFF307BDEFA90E08446BBCA0D 3AE04D1B6B27D672617C8F9F88083E172CA368109A7C982B5B696F74FC9AA09F E1C83A6ADF5A458985D9521953259835D0AE78E1E5F46F4A22F4CC5766EC5220 CD8E11FB08D53D5F37AEB5E88E48D20BF8CC58E870A59B125059639581432D34 99943D762D20ABC4D1D3DB1E97744753DF3B3C975952D6FBF22C0A2BE79551EB 3F63FB6F3F4D95BE06A9C776E7F1FDCE2318EBAF88D9F39CD438EFF576D905E6 EB8984AFB3975CBF69A86E7D7585BC830EF5E23E069147106302D1EE530340F8 347DB627B7A0BA0A446225E964EFE1727EF63CDF7D015C3874D92B642CA3A4C2 BC20830B3475098718D29588F44504B7BBA9B3114A312EACFFE8087F1CAA7273 7C85F63CB022B89433E2FD51F24F08F0026CC3718CFB2E80D116EE6F2F970918 B40D5CD8FAFD1B3521C30FBA07E165F6EFF498A37E458C3C2748F8B76FB6DEC0 E544DDE2A0EB0E8E13FE9F6BFE93419830E428C5D359470838FB7C28317488B4 531ADE2C830507F77705AD6891DD9A9FB229D08EF1AD6320CBFD44AEDF48F270 A5E44BC0FD3AAF090D3AC47AF8E60C24F39E1AA2187387CB1E2E95AFF46D6035 AF7305F28FF3FF34232E62610F4A042BEA25E6DB4C13311FB2373405683C31EC AF28B816DC2DE3A755FA83BA05B76F3A9FFC64402CB2B1FD8DDE4503FB0FAA6C 487A0E98B5FA21D2D0E0C08E95D4853C6B94FA64420B4156F604EC2904AF7517 D37608E12E15E4A0694B6D156D042DCF390D2FBA766FEAC58202134C2D830D5B 6C73AA9ACCEACC970166FFDBCDE630296CD3B2EA3E358F2B664CE2C483157344 22E31B86E17E87BE0D226E3CAC1E28FCA18E0BDDAAA4911B4B0CFC1611DE0D36 9476DA0B14A81808160D1AF72B3596CD9D52F422E49ADB32631337F434445CCE 79AC26BEE9593567E6D3EF1C34F0EB319113EB747A222A9BF802502AB151E8D4 F7D855C4722B69A5C273C55BEBE22C6EFDF368E7A8C96CF52633BFC5D8DFBFB8 4D1869FCF68D5F12805505EF0AFD01C3363A2761E074C8F1B65CFCC31676E8CF 49DAADA1DC8A4083EDAA612B511D11EBB48C8AA68B46C9BE82F02111BCE83751 4B898EF55DEB2B08C623F6BE1116532AD67AEFE0AC912B6B6A0CD5DF0AE34305 3E0A6399F9583688D9A6CC489D3A78C6E91E231AB397870A35772B4B3E2A21B6 323D8D4C0EA2E90AF4F1733AE639682987390BA69229A5B1250C707D7968C24E FD0A41618549071E30C3B9D52726B19169E57944B1B308DCC548D33C37112BD7 F40D3E924A44344EE55DABFDB38BD54527D69F0143F1531CAC341E2F6DD01E1C 2ADF7600DA63A36382CF208CC0A66BAE48C602264F24E531A15167B91BB7AF0E 1C26FFBD08B83BA63CB1AA44C10EFB8BA65C69B6E7D1F9E31E59FA199DE21D04 214497337A255731A41A1007A9467588B8970A4DBA19A82B5AB3F1A625F41986 F30D0FF266F1B01E6C7122CFE08644615006345390CDDC83DC092E21BCA8A10C FC90B8BD2840189AED7E8454F2892A27A5F1EDAF3DCFBBD0B6B70E0D9382005A 453216284D819AE346D6625BBA0649CB036993C81BC8DE47DC0E7A842229D11E CFCF6B6529AFB2982269BD9749D705DA9C50EEED1E170DCEA5FD8911DFACF3EC B611B64A8E5F0E6C832442937EEC88C846E5D1FF75F727D46A06985171BB644F CC176EF60C923F702D7DB188BE640A0576235B348185B1FE7BD4ADCD3672D721 27D2C69A59DBB5DAE9B8D0D4FF08307C836C96966BC34AB4B86291E5128293C1 BCEE06A9753BD16B7A46BD446B44A0D13DC6430C035812F0F7DA4AFD0D28F149 CA679E12FD6B84FADDA55BEE84925D5C31AB08AFC3CB7405AAF3401BAABAA91E DCF901F1C02D33C3067F2C70A7ACFC4C64D6028079AA8E034EF5A5827DA7BC27 EFCCC8D9BC327FC1C7A28391DBC107055EB1E72AF7D7C5B2A0FF5FE8B87FC6EE E8719B150520D46D80A7D04129A78B5D4352885EC2F0F00571842ED025FBCA12 CECDD3C8872BE5A946C227D13DE562E04B14B0E8662A86E99FD207F7CC7C03A9 10E7D4BCF20403E31BA872D19D919A2E62878D85A722A7FDF6C9647077560503 80E15736CC7A15C036E0E393D40EB0869E04875142A7A785270E445ED15A0D31 79682041D4E06BD186ADA99B1114D20BC49EAAB01165403C71FE0753F1DAF1BB CCEEE569B7F35D05AD3A350914F18543F58B4217653FC1DC4E11B6B4F551F3C3 EE7B4E155E96360ECCE1725A52E092247A7122D2CEB207C4515E161C6C7DF458 4CDB8A7D169013D0B88DEA979C0FC29B0823BC382FE5A0A652ADC92C205B2BE1 E56E7F8A6C2CA338DAB9207C4B34D6BFA688651F33A4AC17B9E4E233677ACC38 819100D84A65658C0D534EFA1E4CD6711BF1FD9A3D8ECE96330E30D98D1DCDB6 9ECB183FC19F36D5557E8CDE45A7DEA5F2DBB7B39FB12655900B54383E159B38 BA15EE7BDE96EE0FCA3826ECED79205EF09EC5D22B45E9ADFD8BD63A930BD880 A257596D32D565B22EA79873AFE995AE22D80CFBD17493103EC15203DD451D77 9E5FF077766122DFA39C19A75F725249C5FD6F6172DAB38104C8D9EF17C59976 2608766EEA72D15D016A14B61224D3B7E036BAD6DF9303C09D0303F938190A9D 896E2C51DA6F4BAB7E4125FDD6BD7F9E8F53A7B2BF06767D34539156BAD603B8 0FC62ABC3AE2E2F87FC4A2A02493840EF44EEEE69B4CDBAF94E5F47469A788B2 7DD2B0F561FEE6AF0B9A3A32B4398EF8385B45D44B093E507054F87483CC7A65 54DE0F2D372E93AD7767460E35450ADAA100B66A55774D603E80E977F2CBDAFF 48D50247FCD4A9745C549BDEA2A3A484970AB11C148047C070A67766ADDAA645 A0E69F0A798522A9DBC96C5A3DD2095ADE685AD822A19904F07BC9F124303FDD 2AB94120A04B8451843E2E17D77AB45AA4CC5EB54D656D04EB50408019EB5823 B09E7E03A1FC293CDCFFE0AE30AE4F10A674FA76B89F1C77E0F1D1BE8D7D6340 7D2B3B34817F51067AA93013B2807465E774D3684CBE3461EA7077CB7D3098ED B90F319B4245D49EA0C0E941180CD5DD6E5C7EA09FCEA5BEABCBE65F172EB8CA FD3ECA8939644924DDFF6563CDE2104B71321DB5621BE2BB04A47C9AE0B4C089 1CDEA1F22ACA1AC6D51E2BFDE746AC5AAAF50E6EA8AF1A8511F3174561C72D77 3E31FD25760D29E06BFC439EFD31742A1CA3D80286BEE71D52541FDF1A4562DA 086C6E8FCE2144148757F04199D70F1F5C815167086A7D2425ADF1B847669F22 70D989E9FF76C9B8A78E83359924C0A0B71C0839D813FCF5AE63F122A4B29460 354A69963C86F84B2C45271FD4A55D17EC3AAF29CC912F17BAA000B6AC6C1F8C 16F49AD587D291B5FAE5CFA1C14248CF27C26D7041C10BB062153AB19C533A7D 36DD9F4FAEC118D7F6BE81AC93E5DB9D518D363D2EC9CCA6680DE4CAA10E0853 8AF5620B8126F7CED1C74902DBDD7C57FC66FFC8D9161D81B4D8ED83396CB0B6 969124F5DEB10BB2CF08941FD99C12730F943A156ABD9474E00CF928EF98A85D 4A54CB66168C6353F8AA45E91E303EA35F9A2F9ED1934F01044E8AFF92F6FC5E 23234178CED72963406AB794EF3EF1CC77065B0C34B61ED9B8FB9E012B932B1E C571D76EDAAC5F5D1824D33F3B1870ACE8511C58380CB1EC520251FCE68CF0CA CA867B41EA77DC779335472A31CA940D5AF95226E6DB5CAD012718519743F5CC 953F4C54096155E5208D976A95F949ECD1F60CED24153087E43B5C9852705C63 48A34256DE0CB89A7D3D8672975F67115106B253ED23F3F047F58B28FFB51C95 FA8DC5EE05936CE3FA9DA0FCB262B1352559BA47A777CF7FE5203ED95715BB7C CCAA97D93652BD828F28E0121EEE2636559DBEAC5C1232C9328E59D95F7860D4 E41D8A0CBF0DACD52496D758AEBFBD49FC98786A65FFB437F8F771A68AC6ED14 6ECBADA8180624157386803078C0ECB02BB7B932C39F6DC6E8AAC9332564795F 5230E53F828495C18360B7B3EC221247BEB7442A5EDF74227BAE75A00C20FAF8 573E01A5877EB85DE496E36AB3794AD3515D2AC9E13A955FE19B1F3DEC1E4455 D5ADC17D98EC3C2A9EB4551DD05C6397F9B929DA17A93CDA0960657C6F86118F 393755BFD5E968BE8D0C2ABA8CFABA4FF46921C939C3FBB3B32E00F768796DA9 35B2042C3A83A5FC05ADBBC1A9867CC706272F852B26733ED874A8DE1548B87D 9D603FD4CF61EB969433D53A0066F12EC6B931383A848AB71DF468E6A1C34FDF 72321140796702414E04E0ABD984300B9F9D22F16E401892E6184A67B9434AD1 23C83EDBE48F392B49251F6206E84CE8360F241D651A7F9B62B5DCB8F0DF22F0 AD6ABD8F2B9E908367FEE467160E89680B9378F57D243DA04C1434FFED253524 D0F308D1F311F33DCF829E3B5BA0F07C3EB16C2DB9CE9FAA111C0DC01AEEF1CD FC2A587D9A041DCEEAECB101F1D597CD36FBF647C015B062DE5858F96DC10F74 1021A06EB06F283820B5C0E62DE4671F72985444AE2C17AC2232E6E49B9BA13E 2DFAB0EB4B2B24EFF70A777E892F5B7B7C44153BA6C7AA19FC1315A857F1E564 93990DDDC452691ACC8A681EB658AC0B7C823B7D3A8CB995B30CA3C44C352D0D C4E253B3B694EBB74568E08479B87FDFC05F239297733C494FF8C3BB84558666 316BB7B1969B523A58AB2FF029F806A05B72F6CE07083F9555D982058E10DA3D ED21DA3E40F1E9CA9B6428984A7DFACBD366591AABB0DA6E17F401BF99E2829E C89A71F2AFAD41C3EF856A40473E9C463FD6896C5D2148029F4FAC4C14C92E13 A8FA2A50EF4C33EE9E1BD5C61083DE92CB45F426BC5A58CEAE29E823A8652F19 CF88A03CAF9D697FBDBD8CBA47402061EDC788BF7A89521C86128CE4B4CD0D13 4C7B36766649B401B0D10B686F04711890C1AC5997F2B2D2E0F3D2C8D7DBB266 BBC730A2502FFB7E922F57CF8F52B3583873440D139B22FAF276FEB94F75D912 EF6CFAF3C580F26DB6FBEFCF66A1D4016608E387F69B424D841E4A2DFC840FF4 6497E03BDEE98DB3D397146532B82B54549CDC76D79B8A1CF1B492207AA39B5C C68A13CBDC69BAFAB217AC5A76CF46F20E2903EBD232639EA413005776B1CDB6 76EB3E52310A2D99A5CBCEC16209F5218D91DE873B767DF5A35819F00B3CDAD0 548FBA1EA519D97B3D2A9F09330376D70E07C8FA0E38254EC50DD93473F86E99 AC7021540D5CDF0AA97F7417B80E238C1AECC55286582FA4388218AB1FDFB4D2 61B982926FD6CA5E1F3750C7DFCDD5715869092DBDE4DB0164E551567DC87E7B 003A41EAF47463A0F677BBD3ADCF4709E08ACA108BD076CE993068A6431ED97A 4181BEA89CCFD7BDBBFC892C0F4D15A75FE208DDFFFDB1544062658D9A587ED6 E000F66A1F17080D187A6D8E6527B89E10551AF1F8FEA3AA87384AF4664BE52D 13FCA2C0081613F0CD796CEEB06D03C2BCC2E42C8C1B4D7B23DA0DFA7C84997D 5556977DF44F7224D82CA9DEFFA4A27569C6ACC8AD127D4A39AC6684040E6799 1EFB7A0F795F7AB18C9702D352A5A9BA8D7FE7CA709DFAB6DB9155D2D1368A12 90145D1809E05625C37C0D71E23D0561D47195232FAA5970265F588C82A6DA50 26A66D7CA3ABABA6B937C469583B7B1237AE6DA66DBE7E91B4E80AC1FF8F6945 4FF694AA6D9C3B25029FBDBE37453274D6BE1A7914C8EB57EFDA0C92559F3FEC 72F8E3CE874AFD49FB15BA8E522D8CFDE1C69A840BF0D7E45784642F6680C1BA 894BFD16D7DF40FBD111DB9DF3AACD08AA4EB01BE973C98F6F3AF457AE31C452 0008841418CDBCC2C21339EE42E41ADB6C62ECDEA8BEF8A483402CD363454F66 BBBE0C2DECDC90307A59EF912EC8E4CA6C14993FD67D33954F623BEDDBBFED3F 09C23C55596B72BD878BF68B557A25A25AFEE1A3C605DE39DCA0D586A081E263 4FE2F07228ACC92DE650259A2DE812D1FA36527BECF5DE7AE586123DFFB29942 0E931039D95774E0E961732ACCF261193350DC60116E8C469BC5482B51E717B0 730A03A27EC79ECDD9306DEA21534D2804C745F45CE4B113F20D1CBF8458684A 3462795E7901BCFAD90E2812654EA2966C9064FA05DC20151EB8971CDB9291FE CB6F8A18F05E30EB7BBCC169205D5FF17DC78FF18324EF97E647F64D73F0263A 69C2D2D49119E36D310749ACCEC23F2F435B967598FB71D4AE7465AE82F9C4BB F5C980CBB9C08C9E867073726625B84569ACF09E2D4B7A62E3C824631BEFE27D 54C2D8E5B8511F987E96279EC67672ADAC8A55FD95346A89A5E98273E6805C84 94BAB7BFD758AB05D898EB55947C52B6888D6B16FF3C4F4EBAB8D03BFF4773CE 85A1C9C1FFEA6736CD22E099515496C142D4841450C6493C39308469BB4CD63F CADD4660AF12E09176818321D89D6250962D0ADD925E6360A12E4459F8A35FAE 4B2E60ACA34F95BC7D9F51EAEF17E005D85ACA444093DF4CB08976421B9D41C9 0DD437FEF4E85C68CEEE5C0DBEB7BE7750075ADADD6F53A7D44C3E4457AAE62E C917BD7DFC8E76A0520AC474570DDA5D3B816720DC627DFEE065BF1007129438 875D9ABD264033847491D43C9A9711714AD90BC5FF3CB9D32D14C143991C090D 0E8430AD22ED7992451FDA1E5179FE72472FEB568C83138A47F0277C81857F8D F44A93B07ABC2E874AF2E8ECECBDB9FE26164CE6A7A5DE4DF18648447751EA97 AE6F927FE9090BD42FB13C65ADA216AB7D33C6BCC127F42503E6E90C17653751 79D3FD5583E815AE0440DE02F41042D91FBAF80F7289E7E4F4959EE4E7C6222B 6D23CD8C79736E8325A50A4C9FE3A35CEE9BAF5F51C02932F8FEC830B38F0240 B502334C036F4E1BA4367161E7AB3D4E36F4A2BC9C8B5D37F4527AB9BBBDB585 F8A078 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /UniqueID 5000803 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A 0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A 8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E 5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C 7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E 4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC 717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05A2BF747D5699036377F1A645372E5CF6497D8D4465492780B56 0D7A64F4AACF00DD611A0D4AA2A1B4ABBCE41B0BF87A7351F26E125166E2E07E 2E64639C4DC21B996EB744C784A145F80D07676331178ECAA4967195803AE02D 1A6A04B38D721323251A1B1F656498F5FF255E4F1632DEE1A8C2B197CD7BD5FE 3819B1998273EA5EF8EE032E0638F6DCE419852021D098A19CBA9A2B675BEDDA B6513BFA1F239FFC92CEC9ECC612072E87FBEF1ABEDF6804E605AC8979E970E1 3EB524894E3949BF090C1BB477C45FC0054DFB6B6816C5B0312BB9FA09EA87A0 9A18B9B5E0DA687BAB199267EC6668094D1FA853632DE7124CEAB78BC994D6BF FD8BB4B920B89A68DC0D60BB73AFED84D38925B4E8C4D4E239080FB47F44979B 7660A9C57F1CBCE1AD69AE3E7782796EE69BC910251DF8406ACF78CDED5224AA B13F1E17BB454BD4B5AAAF0143570E5FB2236DD096A2607B8D24EE238110486A 0759B4AA276E3B5AE6BCCD2299EF7EC5C0ADB9E3A838DF0A0541FC56F62684E2 F165BDE1EEC719A7DD44D7251B0D28C63304BA3758C76B1FACD54A4E73C9B32E A49366083906EF8927B6463215012B3927CB643C0292688601AF2348D62292CD 5E20110FDD05739D7EC6A3BD1B166DCC421ABA7901FB926025EF88A54B0E695C 38E9C894A2EF7F33E5D0304268849FC3D2F972148ED6C631EA375D67DEA1F8C3 C44173E5FAD943C81B72D818D7202AB20B77EA0299D4FF7FBCFCD7BDB0C9655A B02646E5BA32F6A7033BEA306BE69EDF532347B24DC7E6BA226C6005EBF841E4 16430F8B4405B2ED05003F10080C12CC74EB07708FDBADB821BFE0DE6C8A3278 C2349EB88B977D15639695B35C35235E00862E70D7E9BF6632E0F2E342FCEE2F 16880A993EA9BF5FE7C0220D844C5920A2C334ED030FE2D062F8549508589F66 66B2E4F66E249A01BE6CC56E73AB21117213B7502DAE7A2CDC2D8788C24F8F40 74B96C17464510BE4F2543E536BB32E943522E9113DFBB56096A34BCF507E7A1 B17451E6AF90ECD2A3E0234FF01F93BF0BF1300FAC48AFAA064419428256019A A55C94130C7A4AF9ED17AF615FFC9C10517B0D210C464C8C0E2B344B31D33886 5264577F17CD7137CCED2612E1B01DBC93A98CDCC6C83A858307703AE11DF924 BABC5FDE240C80CB0B4DE1672AD86C9BC4773E95182C70A6E809D336B71E25E5 17C60BC4C8182FC222EFE5419EEAAB8CB1C04750631F7B4846D75651244286A3 3F87AC81C3DE5937D4545937DF166D02B0505EEF1F744A2A955DBA5AE1FD8453 8E3AC7E38B333C7A741A58472B543C870CD2885E812FC88DC0E3A56D3340144C B6EF013F04707315145E4B41142BB00A2BE5F6D17EDD30DFCBEA3F099010C431 E2D5BD261DCE594B5E0FF7F1E836E88494B7489BABC9A230A7324E122F40DA62 08922179B7EDF55176E4D11F985E6F3CE8B6695BBCCFF8AD96CCE92C0CE3E8D9 C27F103747346DE482B3A922A19BFC5E18C3556B48BF53EDCE941744C43EF096 E36866CF42D145087DE6A41F205D04A802E2E26EBA56BE4BE182B460E8A7DF98 8C160EEF6FFA866EE54AA2541B1595F5B1D0104BCB313E5C886A0519311E2413 CC40CF96EF3E05CCAF796A3FD36BEE034878238A40C77C6205904A9ABC8CCC9C 7E1AA1FEAE4732BE0FCB9BFF9044486A232D39745885AF66470F281F7CD076F3 B11CEB70BC1215D944D65357D0967F83E13EBBABB3576B89AB755A14A4A8D292 5FAE31DDBE3999E4EAE54E5892C6087C4B6436DEE581FAFD1F33A8DB8000B5F0 F644C655674DEF2BAB3105EA12B5550286FC001F5BA1A63F46E30A2EE663C24C F5390CF05D72727D7AF09433ED15A112E199447E0C516C8D2E535D38F5EFF96C 763F51F7A8656D90DA6AD7199EC102AFC5D65DFC505E51E7EEA199D39C2CDF80 B2CE3E35B688B79D566F1737C588D9CBBAD02F9782C7DB3439DD85BEAD21C70C 5628EA55B38F9D2BEFA897974E09C2413E9C51A2400BB2364D650BF71637E7E2 99DF9E4BC127FB7367DD9F74FEC16E339B19FB70A20A4A2E4874E110880294CA C90712CF08AD98C8532E3B730962F63C8F8D3DA209A0E23FA25DD02421B4D4B1 DFAF5D3548FE36B0A1637ADE5CCD1672FBD40A3D1CDBB9499B4C660A27F619AB C06F37FD8EBE08C838060031735E43E74F649456956B785270C84C96EFA7C5FE 2404D77480F5FEE892AF6534497C7AF401A5C9AD95B4B4D186076AB0A32315E4 E6D7185675405E6E483571A3CBA6EF76403567F282B2AA8FFE99D988D612DEBF 7ABD96797B6404CB5CD95D39464213DF90944C3ED33778F3EE4FCBB1A5F961E7 9714553A81472BFF2052561C22720C0C8493D1B2FE75019255AA8014F437FFBF 380BD498D02D7FA6904B4BC147C8D75C4863DCEAD5EA7E6FF41C609583BB7E99 03ECAE65264FD63E13191FBC5B26E034651B737000E6B894C373B58DF4002F04 E2F7ED898A9B029B671A19934263D92A0B8E3F7594FC90F62F937842E614689A 238062D2BFB7C44482AF7C1556760125086F34A76C83B27717F322D190D30308 EBD2A7BAC65B74105193942208DD78056DD569B2BA9FD4066A78DFB0316C1DDF C1B960A6AE6BFD9F7136870100916A9F8598C1647E1A9F86A26A83111433584C D0F4804BA5C3754AA9C93A9054C4591D38CC05AD1433EE5318458AEBD77ACA20 5B1FC97F62B5A90E3B75C7A15FBF4EA4B0A8D1134E117D38C82781A68A3EE04B 80DB2BE38196EFB1CFD47A5DC9874A15F21D156A23DAF2C7D31147D76599F8FD 4A575532AD29F7203964BE4C153AC914516D33A54F97B9BA83562DB89D40DBF3 4AA7BE547EEF84D1917B9620FCE9E5FC8771BA045C6BA72DC3CEA88BC85FCE2C BD04E17AE45A9D871930CC49F4F93447F43312888794162962428B915A6DF5EE 0758D1D24AEB9792A9AED3489EA635140874BA43FD7FCD56103FECC4F4306C09 8F06A031F5C639184AFB5C97A5ED69D6A974D6BA2144B4ADCE8F1285ECE7AA41 BE46EB5473C5E6327ED45E1BD5D2721856E2751E85112A44A04F54556B41DBBC 224A1C1C434FC53BFE371231544C64E64BEF27AC008BD468B51708C46ADA959D 68C73A16515F09230DEAA0408245960D54D12C1E3AA868E5DDD8ABCAC5363927 4C6EBFAE8F7B31C89BB7E1196C4C9FC9AF846006E838F7245B134766D83698D0 85E95121BFAF5669E54B918FB792E8F7EAD1FD1EFAEB2AC98A1144F4A2081500 2FE1E7CD3E1FFF00BD79CCEBC18EB0552EA5776E6A52E1AA30E3CA1FCBEF057D EFE38381A5E9A53B3ED386008C162188E393E81EEFCE3D59300CB1E5845150C9 35D129A662146D504FC1DC23DB26E958D628DD312A2682654356C3F3221269FA A8725F1D52B5CFD7ED9FCBD8F4D2CF53CD7FF2BF435E75732BD9868155B6A9FD 4511BEB18944423CAF5B2FE4EE6AB1CCE21927537FF3ACFE2D3344A471FEFB32 D3E944E0DF6115BA76E5FD1C6141FE96C397B59F7D3270A605727DCAF2BC0D4A AE8D84FDEA284931A6DD9AFF9CA3AF16D21187533B45F77515F6FA432FCF53C7 DCFE593148D2286D448A5922B774F0200EE756E982B3B4F8050D93E031488398 8BF46569A6B233A0B2AC6DF78385C9A649DE07BE3CCF13DF7DDFE5F163D523AE 46077B52147BC1C7BA80BA33607004F0B289CAB47DCADC7466F743973A546CEC 939AB3A938BB362C529C4F71232FB9341EFF9A7CDDFB740BEB573F009E19E9AB 79AFECE39A6D28F0A70937175399A045C2C1AB3DCA0ECB1F7167D07440F53910 B8123E6C1E5EF4F5A1FDDF00D1AADBBA2182D35624A8170D346E40B117781931 C79988553558F7696EFF44C0A4FBE8058D7A94F0E7C8C8B584E6790D59CDAEBA 5B634EBB57DEF241E9823194818E6DE24985F2AE341E878C9665827155CC918D 7C3CF4E508303382907BAE5DBFF39C75A49103AC5E604FF20C2649C30A70BC1A 63B54D38C541D76E7616B6132C94D9366ABECB27D33CEE252FD573BE533721BB 4311CB5557376E17EC4952692396BA291A5E593396441707B48037A84F515C13 C58D372418B8DA762B731A8B15BA74837F2A6A1A1446289B247E7A6F05081B32 E928FA2A972826D39C4A2CBB68274054BD284EC26411D07CE7BC2D06D64E2690 C724C07CD5BC7F2DE4859F83F548DC0CCA56B9FE4E1DDC62E4B943B9F395508F F98E980279D2E7C13DE18A22A76CFF59814F2FFCE93978552A0F4E01D78B3C01 B45A9CF8FDEB42A166A0E7678201526CF4773259EAED7B4099865DB5AB295C98 FCBB1521D8624B87EE1CAC6B9B460E76D4B4E4D0A4BD69CA06A02D9AE0DC14D5 55C47B7FA78A0BC299545C89FCD1A5449D45FAC62E38A42319DC318AC386563E 4CFA1E3E137ABEF3EA7D9DCBC7BCE914902EC7D7B1AE6C9E19E739EBF1BCBDB9 983829702832E22044F9A5B475718374F1A60FA48508D815F6810008C1299759 EC776C0E70ACE3F719FE1E9DD554CABCE3937F54F38D5CC3C1392070A07964F4 26B7CB30915F7586B31C04BAA3CA5EF956DA352C6A8A2A1356924727A8EB829A 48C9A8894D29C2C196C0B731B6724BBBD84FBB94AC9B9DC80C435C5387D625AB 6538076BECB3C21D19FAB3551075687E1C43CDD9BE49CC506D3423B5C2A6754D 87CA10D3686A4FCA91AE60466045A328F996EDDD3918E2F56C029D1992A2A1A2 78B2E95B99C822822F3630378ABECE2C2318010BDD2A492E112602BA2E092693 54DBFD0367AF9552B11E043BB544644B079ACEA1BA6123CAB40F9E7B2ABF6969 A8BFED3FA9C3CD76CE6DA595C63956DD27A87F256A7801330F603F21DC8195DE 04BE9EA43F308B2888F5EC1D51DD43C6B44363FD277DB689FA2FED1D4B587210 3F2B7305713987C9FB5B6992F23646F5AA9DFC71C0B3B411CBF369315255C1DC BE9357E76156A356902148517DC6EEE64AABAFBF106ECF4E55485756C801AD0E 81961033CFA0B2DE0B96B88B38DB562AC046F65F058682E139C0F882CD795096 9557336AC81FB537E37CDBBEC64975FF3BFA899236778283770D540257D3524F 8B5ABC38B9DD4A240502ED8AF2A7496295A793CA1D6CBA7C2C50E60880B73E96 84E0E5C85B07EDA8DD48A8249D6EE25273D3510333287C71DD0ED8032EE04848 0410C1E0785B071430F4053AEB3042D5B9C3E34E4B854D42EE5044DE5941DFE1 AB6DE585C02B5FEC52F0C565E6A5635C377AA57607723A9D246639CF06A2F4EC 90CEE93C2EA2C419F3AD9CAFEAA6B2ED3F2D4F9F6330FAC9972903786AC09B7B DD51932A1378BED9BD5434078442B9C13CF156FCB4060CF81F98D5EB8011DDBC 049806FAEC29F3841CF0BAD050713FF0CA75F4058F86C388E179710300A21312 72915D0C9DAE32B1D6C092A9E5990178E8A11C6A2B525E0D9E006C135D1BF185 FC7A58576F23CDE582A0512E54798B634B2E5A06F4A107D2685EC1578583515D 19230589279FB9BA66E6DFE827387C5FB1E491CE19739A4532C5CBE869174A29 F1E27164210F9D924B835E9CFD9356643C3DFEFDD21D733DEAADE25DDF15EF88 17A9360BB2281613734FF66126A90DB9AE008F6DAFAF9DCA23A882A38A0F478A E6465F8391002417637A87303A9168632C68A031EE4DEAB32D7E6FCA721FA484 3D01D2877B2CE55A8F3665388FD2791200FE69D692EE6C266DCD65014A9BB1E9 27C1F5E6857D5923F56D3AA916E50802FFBD561FB9894C1A75022818A6CD8EC7 06DA976DD2609CF7023B0D2258311F321E064D956CB8D55C1A4CEE12254DD6EC 68680A52FCD777EF99456BA60807741E0845C47E4F8A93E11F4CDBA611DC4B50 3B5F83C5475663090CF0450893E076132C6D25147C260D4D731A03C715BB80DF 727864AEA432A5C95E688313C1C62C95E154E00E5F00713D2B27E2F64F7200F2 C52B3C95376242DB2233B50B988214FD47A88F3C4F15001EBBF541BE75CDC0E0 D4087F5DCF70B0814207C43690D2D9A2AF382423515B7277E4D3A990D4CD0F25 9BDBB2350A8ECDE52D641B901E94E524E9FE6612037EB6EAD9C3A887B45F3B02 2F60C45F88E147512CD1D4A967AD6FFE126F3C4E92FE3117E38FB2A662D90B1E 12C80B32C9C547C7EB719063E25157F726885481D0B2EC9472A0108693BE337C 2D7EFFD1285B4F507316529357529D3245AE2D18A4DDAE37225D682D8D20574B 0DAA73817D1B70CD37B2501CFD087C0DBD704C544DEDFE282788DE15703E9D81 F5A1AE011E6DDAE53728D2FAF938EAB8ACAC0D07F32CE8E8C8E8C0262A76D9DE B533DA266E44B2A36DB0E19710EC9B9E99E9C1DB500D0D8A293EEC71628E9842 A8CA8C99F9CC5B6B26E4C96F7D840C84D827299489D0F9C7E952A91F78EDFFDB 83554679AD863C2C64DC49A33E74AA4F58DDEBC9807A92372E227EC0CACCA61C 629C34C083A21F278CBD8747BBD7D00AFC2BB546FEE02DE9892EF88FAC0EADD0 4EE10387D6386E77C462864180AC2F655ACA5903C751F060835DBC1F72AACF0B F4F48B83FC85E9A3EC662222907A796938C8CBB946801696FFD8630E897170A4 759BC269834173D8EBDC70CB16EC918CC68DBC61D8A53EC5F6F63732FD4D7EC6 234CFC1408CEE045CD2739C71BBD175368731CDF9CC19DB87B7B974FEE39BC9A 80948277A9676968840537A4DAA22EA9D970FC096ADB6172577DC54FD7B57BA8 7925FADBA77E5707C51B8EC45FE227B13966B45C39DCF0F315EB7A6149134803 E18FB6CB61F252E09A7720804C6941615CD2B01FC5F8B8E12D3DD1D4984D0E16 0E4E3342253C6CCF6EF407DF245C19FB550CAABF4A4F6B0E251D2EF04F18BFAB A10FFF86ED39BDDC366595AA6D4B1DABA39FBAD8620E7638FBF54E34A26487D6 2EA281D9D2251055C510A401023A14F3B97193C2B038FFD1C728AD75A186721D 23CE5865389B0E47DB6F3DCA265B878950B567895A10EDB5A6B3F3FCD30FAB63 C6D09D90D2FB1C05D8839D0B4EC950006F996447840C8DC888EA71794A23C27D D77453DD43121B9B78FE67913896A0B65033060072CBE1992DCA145C1C88A88B B516B239797B9B709045266E742BF9907803FD36953C9299BF788D3BF01E9134 9FEAE5F30EE1A8E7449093FDB9992D74493DAB0BA265D3974992F5D4ED79D6BF 99EAAA95DFC89ECB4799BAEFC10012A5610194CA9DDDCDB009BD6436BF30B1B4 401B2E4B6FC0EDF60FB188878A822073165F0E0399ACBC7E72770F960AC46061 F89852A0205A8A7813450A60A16014AD433C45388A3166C15D900597B37DB638 9DB6D76BFC3395CE83ABE084B5DF3E616D5E13CA29C7BC6C19737C4CFA04B514 7727C2383D4DC36CFF04142A1425D1A420DAD27EC6A779FE4FA9E8E44B0A71AA 2DB0DD4C5A4AD2EA39F0FCDBC0CFA81644CD6F86683FDB5D97E7FB3B4C5C9BF0 C3F0E49BB2031EFCC6770FF520FC24631DF7DB8D2B5A7E672F6352ED95C3EF41 80B53CB4780B779A2C870E935E1F774C2B83299A9FDD5447EE674A157B7B51A9 DB721193CA4545B4EF0D312DF015F1491AAF251B16872B689C2938053BD3843C 9E4B4DA7B1A9ED3DE85A2D848C5DD26F4B3D6CD96835915EE86169803C6ABA5D BC878F9502190EED465E574E5730EDCCA3B4D5FE7B1BFE3F5AF5FBB466475A0D E6D2724FB9C11AC63B3424F422DFFD3B72A168522CD943D7EF214A36B19F3C1F 8FCD50591ACD2E4525078561EA379982D47A010D6B7C325E8566BB370E6188F9 40F7934B2DCA11D58A5EA2A42FA79F8F5A69E4C8313E2ED201C6AA5E7FD5BA87 3F819A807799AC8084E2FAE69516236284A571A5A3CEB8CD0A73AB1D67EDE888 1A69184D68842D02BACC239C898DC171A8EA05B8D2811A865BFE2AFB428AB6FD 012B295903DE73A0D3A393E0D9D766FF470401C335AD8623A5EDB7B0F35332AF CAD6E222B741973EB894361A862317BE692CD4B855E4042F7228A83C14CA28DB 926EC8CC9BFFE3BF98AE8923E6B6BCB248663774FC2DA52C5FDD448A5B85BD76 6493998AE13C84B4D8C1CA3FF66982244E7197928E8CB91C71D60CCF1F6BFF74 1FBE8FC9E0285ED3AB5610393B7D11301D8945C71B3AD01F1E7F97E9BB9D8737 C4D113FF9B84E8D84CF3D04C01AD7E9F586FCF5B20FC9662A5D6440478134FAC BC580FF2FDBCF7A494AD744A9289B8358D2A14F6DC4ADC0A343D857D2EDB65F3 4D97B49CC92601B90D63C5650F895A2485A18617B7BC02EA2A9FF1E0D777F393 D7A6DD6AE36E73BFCB74560E398583E0B716650B24FF5F54AA73346A01D76967 97E8E1C8B6DB6B4BCB511EFF3237A40960F3EE230EA142EAED3F73CD0B13F23D A1D51F490DB90D37ECCEE52B9EC135E26F36E509535752FF6F9135A1DAC1AC81 3701EE34956ED7BAD6C8CF1D70B9CAEE2644F94B10935F9DD1B03C5D356AC0AD 0B6F327DA139D31FF65498675D193540EAEFC3FB8A119ADC74536C152DA82D2C 0B523263DDC88E048ACC64DB32B259989488476CB0D351243A09A2BA6697D0B0 6C8D52A51C0F631E9EEFEF3A2042A2EEBE5046FB670C75B4157F7B5AB507FD34 6F52BCBA13FCDF4C923DDF9908ABBB26521FE2A7F9A0BAEB7EF7E82830E596BD 6CB249A0F61C0FAAECEEBCF556846411E352F468F7F6B404B3BD3B92712D362C 4A84545661FEE4B5FA52A7A7C461B9F7ACC3E8321B30068F609DA42857078152 1A00EC0B51CDC27C8B505B00E49BD1439EF1C861173182EA5BC4CBEE7CF73255 57E6AD9AEE58B43D54F6E22DB3B8F5F9D58EEB756B672547B521CB7D82E78B26 32C27B3F93E5122482F87852C2F357E666AEEDDC369BB5DEA3E02EF8CC69DC4E 31F677ADE63DE168D6A500055E06FF746F5FE59864319FB3E49DE62F5E2D7005 596F22D88796164AD412D3B254E8D5F7E7CAE3EF1D35D67733BA291BADDE92CF 70BADEBB6169228447DB4A99473D865A7E105DC43421491AB8563C62C215EBF1 564E27BB8C008B2617DB934E0665D7208C441321AB5EFE9FF1743C357A9C2E5C 4AF4039F16367C6B9837A08924300E6ABD2AB033C146DE6B2821DD9172E5D7F1 53785578BB227092E8ED1BBB8E0CB70C2E23E640AF20828C09FDC2421ADA6DC8 2D117F0E3DF208E70F00C9C410E8F77FB1221D1C07F6C25C1930D0F2DC601025 EE0B877941CC9F82621D4712CB9DE0BAFFCCA38DB1CE1896D6A5FB876CE944CE 97A297BF3468B264B32B7C8BDF5777F197F64EE9BD2C6676BA50752CFB9F5051 3C14D6D0658F7D4841B9F3C47B9522E1696F32838ADB3E877FDF5339F6721A8C 7F39D070D9912AAE0A69B6E1E27F4727513D78AD9F1128079E3100D0B559B179 FBF88885A0681A7847F26D70D8F7A3286E4958DD615CED53147A5A50D06D55F6 45808222273C6F6A972D49873290654057517F1E067197C5A863324BAE696A25 F250DC419B5428EA0655E118F77B1545494C94EFA32D34434C0916BD6C62F9C1 2506EC7CEE3456B012DEF7C87D19DCD3F197047F3C57B2391A238839884A3F19 CC0B1814255F4DD8977E61513F7FADF4BB98315C72F84B4792243022B827DDA7 FEF9E1434C631FBBD0CE34CCCF4CFC655D0F9BF1E22B91FA21D95C6AD6B0C098 E987D92C862954B2CFD8E8CC0132432A40ADC155F8A0F97FC03B38B9738B4317 CBDBB8E7B4BB929F6D39338AA69A5A11BE27316BE370800C82706772CE33E367 29A80B24D41F520D993098C4B04F0F62F9C74679BC076706F0969545AD65D6B0 44900379A36E940359B6BCDD0F3F5FB0A8F30BD5456EED4DF5CE72F7A7B93858 14BE51729E4F8AA97DD6D134279E88C3EF28D61D7937837DF831BC8A314F2D3C 1353E96806AE841A57EFAD644C8D884758880415F91E7683A88CA150493EC28D 6C7272E3465DFC48645B2F722ABFC1943CEA4B5ABCF8D76C3D032F1B3264E7E5 06690EFDEBE83EBF967085035A199297BBF94EB3D884AD4C0DFB476B85E6BFBF F69BCB9E57ED6753285C36AB62CB8C98E676D4D23C44416DFDA957CB93EF7E78 8379C6328FD6711EB9B45D10681B56591EA22DB43DDEAFA65FFCFDA65075C6F1 FF96A492130ECBCF265425FABDE849C62767F6B36895CCB19CF177B8BA4C7163 D9DF847A42072F60B3911D8DA23A30D63C7FEE986F939CB35F7C47298D6596F8 9BD7354FC35915C0CA8CF2A60F2DE21F355C74E605DBECE35A70FA12BDD3D915 729B3D75FC8CEB2BF67DAC531BFD24A2E975375F85D7AC7CACCFBC62FE51F11F F877377CAA80F8FD8DEB1B1FA7C1ABC73B88D4ADEF4D045708657864418FB434 7DAEE52F2E2AD61680B4E5E229C12EEAFCEF8184B3B03D16BCCFF6E0EACDE3D8 CDC8D9185DC2672784EABC5E55C8F45AE77BD18C9FDC3189D24E3C93CA20A916 1750AFEEB67F95016FCEE6BF60016FE2097AB01CA18B0EE0CEB254976858635D 13D51A80F202A59A66B54E81972AB98BF9BC188EB653F43FD0EE5E7740487B5A 6102C31D939943905FCCB91C95F54E69CEBB4F4A66027B2D03AE23F09D91B676 4EAF654BBCB61F084EB153BFB0839D882ECDA35D1AC2C1863A3C5F0523FFB7A1 A707C2D48E8B2F421A192E898960D888212D488816628740CD9F9FB6EE1DC21B 82725168913244FE38347B234317F127026147CDB4BBF8BA9274C987193DBA07 0DE6596DE26FAB1618D77E552AC34F71D0B77AD262314963C69EC171C1EA0706 905BD2BAE70C9806CC263DC44FEFD2E7742538B2C62D782D6FE9AFB6464BD9F7 7C537D1CB46E93F998D0AC153BFF65D71F72DD0FBC30E427C94BEA08A51FEDD0 E9BC9C656715B761EED9E0DF6F1430BBC2F5FD6F2D5A31FEA89F7D3B8ACB3524 56D36998729CB9EB6C464A709387869BB5D9062A5798B9C3F6906CA8E9C1A53C BAB4CFB6D6CBAFB766754CA2D15E927872427EDD9E73BD16C3BF4DCC479B7550 1623FB8E04B11986EF4A3916248BA3328BBC2DF30E994B20ACD597FF14B91032 274884EFFF7E94BDE8963D41E9CE9F192C84AA7B2FD2F6242B9828F54759ADBA 352CECEE86152B06D785DF2781CB339BB1B1571FB31D18C3CC831B15736FB91B 3C95834BF98DC3B42C9D32804F0E1B0418C30E944E103B1B381FA9B54CC41994 78B4BFFE0445D1499C19B4577513B2324B7A3A752047C36449C2EAB3506DD87A A5A7FAE639C0A70E71A32DB71FF4D8C741A8FCA4A26C886DBB89AB5ED74F7B53 025F00F3E5832CAD54696CEA99BF7D37950143F74A1A31B139374778438D0DCB 75D125317E14B837147FAE2B7DC6BBDE62AEA6D74C7D8B2EACDEFFB5A61763E8 5CD01EAB644B4FE0CE573B681C201BE621EF353ACB26BBC14DB249CFB079F488 1ADF1C4E19CF04159792E40A5E63EB9DCFECFF901DE04D02604C195C315AC187 34DB4F6C850E9BD424D3971CC3091A41D5B8F5020B3C79E72B99A1CAE66C959F 55E4C6C1C1C34DCEB68E8806967C638D01E8103A6E886609E5276FC013ADB053 AE2806AFD0E6CDAFF0D97E75AFF72A027F2817FEB32964ACD45FEA9534996A50 53ABD80249F5890C69BA0D650BB7F0AEC076CC809EDA4BCD8265F334DB581361 329C2530144ED7073D99EE1959AB477C6149B3A6547F024AF983BE69BDB9BF4D 827728F2423F648185B1FC0AC9C7ACC727AD43FDB6B0D433C8172EB74B8B8AB1 8C0C2C0357458E197A842358705883EC22E7162967172C0519820D5994DF9D7F D50B52AAE696F603985E3504742D31C0B69D77552E9396F18C71DEDA17BFFE67 E1415DD4BD373819A33CBE990992973DA11CEFBE7B81DC910273B315B82B8861 63B2E66BFC29A213D5526427B723B4856DFCF3559FD701F77857812B0C6C0FDC 4AFFAC54B1CDF29E882BC2E2E9BA0319BB084DA04A82539AEABE7FB793B7AB28 E755B8B1CB2F0EA0329B29816B127EEAB2E16B99B9FB1BCDC5ED2A5322F3A271 99A1981B3212711FE1DCB32D0638EF932D00B3C04F896BF7DC7F67EF8F3DB82B 0536D186F24BF7ED544AE148F24F6CD5D81059F55AB8E24128F755991F89CBFE 75DB53CAD6129E392EDF60FAB2C90396568683A0C996C46358975676C6A8E3CE 131C90FA98570DB4E576B4F669CDE352F19DF7652C97F2357C4C8F0716E5C290 1354DBE5105A874C105F541DBFD7E6A63B1231BDB998EDC392678D1EF93183FB 0815568798BDF68665F37205546A6528225B3B91B3A80C0F433C8888B45BFF9E A972D7C29B2647DF29806C4113613512C117061E7DE70F763D097A7CF236F371 4BB3BFDE60B73EC884BDAD2E7864F24BED01210DA9F229F7A87D3CC0B3AEF75D D8B763EF2B7591B8D2CC201A635C82B771BFDB42FA533E321B587735AECDB3DB 071FAEBC9ECB06F06A0EB364ED723D12EB6E7BB479AB013624ABD11060CFFFF3 5FE5CC50E86F9224466913EC8167158FDFD81438BC1522685CDE8A038F0C8A35 8AA1FA8E38ACEB99E18B55075D594DF39FF874DE7E7E6C95C677F35B2DF0F203 B78369144DD99484A35F26414874463458FE0F6D2C63481260398F5FD319DED2 19C9DE91CE63155DF12CE842E67B8DF8E61149FC4563C4ADC280E564505F0F80 2B6CD6BCDEC7AC194C372BE1A4FBB457739A8AFC4A7727E37E2D3E5AA30E7461 FD43AA99CF8EC08CF47CD67B820899D75935C6DFD775619CA2D52E4FE3A5B0E5 3D1231BC641544611EB461A1991FC02E040C574272D428419F6D0AEF4285DD7E 4731CBF498243B66ED76F66CE3F33DC996BD10334741D351DE2294D268EF045E CB360B89A5E9690FF21C91E396E686C67B5570A1FE2182A5E78DA735C70162F8 E978C1E449853FA9B6494F2C38F5FF2A27F8E9DA96EFC069145C844402B0223C CAC1AAF9E74C8576E524A2E5F072DA0297AF5AE4F1B0F1E3BF24989DD836C057 D18E755B8296E8402CEDD8F34A258ACC0D34D341ECA9889F4B2A06FB778D591B 157DDC8D7F54A289F918E980C367E46575F05CB8C847000C6CFCC939867C78AF 8A0980B0352250C063F3960D06E88A86694879A6DB159C2C5CF831ABD393A174 C9BAB470B7EF87F10A5C3EBA5716279D525D51323BA98E262B1EAEC96A61163A 44F84EEBD3CDE74822FC6ED53FA7C30A4167B1BF8BB9D3347665A33DCA967641 E4739C8A7ADC90369E7C236D812BD03144A282176D5E906B55D1274AD6B5ED2D CBC01CAC7B92D8D919D25D80F0E0CD744B33F303C43E0D9F1F0E778056C43E1B 5A300D823B0070C69DDC9CEF534DA19FFEA924A6D20D50D3CEAB46949288EA59 8428450CE0960400BA1EF843C4D538C6A2087D3E1DB7AD847898602ED66F9366 3F8E07233BE8331D36C159E8602B8193A5534030BEB136E24B24886D063694C6 4A86C6F0B74CBAD19B83C2637AE35A07221F79860B87754A8042CB7489B0648F 50BD0B93ABE34188C91AE0846406F063DE6FC2FF17D3E39B758A9182F258E2F2 8FAD163152FFDBBC23B122523A2BC4421B025B0D8E876F80F12977AD02F2C393 F8DBA9B7DE3D98B21C2FD1BFC42AFB3A6B0C303E94EDEE21B704737CA349ED48 8332A075AB14489FBA412E4950BAC4F79BA0DC7EB6AFD1D43311E04F7047C851 02612F1BDF9549A1C5A4E096C7946749A9E6FD356FAEEEE03C196042B6689913 2912AF6EAE06BDA5E9F7A85CC503E22008CDFDB0F51DAB9C7821BDB79D1E7477 16E244E95AAA34AD1B2084506F7C22CE2EC64C2EA5E2E2424E265173B01CAC83 5A14B1FA3CA554535FB71CFD640E6F04917771589AFD81CDF19B80F2338A462C A7931133B7609357EBBCD05DC82B6909139C5D9ECC63511CC7FF28601260C7E9 B3253E2B8655135DF5AC5EA5F037233C61495895D1499C5A00B13A90B8B3A886 42F3F12F7A902F5520AE4F8E5AD9380EB5063BB93D98476969FA47F2BF6EB1A3 94D15CB620277C1D586661CE897F3526DC5B52C447FAEB44FD3377DCD023293C CD7A75809CE202165BBDD0311E1E793B9E44C747FBCF9AB319C9F3BCA0F65881 D85A2549005C27CD2A477C5DEBE1BCA541DFD153BD6357215CB195A53CB1AA0A 636FA25E28420EDCB036BDC3AE3D522E912C00EA6061E8EFC7176DB1D106BCC9 F7420AA98E67899D2AB3B63A14B966D06BB785067DE6EDFAEA7567367DF1B9AB 24C2194360006894B979EC31B09E92440945036AFB89155DA483FD44C1F9515B 4B576CD51A079C22C668B72EA35E21930B701E7AEC08100BFCE2891AEC0CAFD4 A71401645287CE15CE5C4A94409B207D1A8B13DC9D1CE2CF6E09696E7793BC1D 8766A4FEFD11FB4A3B13B32A5E994D010370A0890D85A500FAB60F60D8EC607D CD3B7657B32A4B99C89BCDB0162BDAEE9CCEF0B52C54C8EB5CF320DCD9803405 10B060667538413E9BB43F15C72510A68AB688C9512FE05E87AF5CD4C2717FBF F0B5E605CE4360D89C7BA422C2A867710CF0668BB684E83FCD47888C92216068 B03655C718AB989492A6D432275B1F64005849A85ED0D167C121134A59996BB3 8029B44938C401192B96DFECFC6C7EA90EEC009AE79F2D94926581B2073B81F1 E995224D452AA32115134F7C8B0AFCBAFAD316F2DED91212E5E2715A9A0F59BA 787C811A7CE37859B9BFD4B6648010C449AB624401ABBAD5D22623A05B127FD5 F6C3FDE7966A3AFEB0BB98B38E8DAA05643EF7A9242F48837F2552AA6E449594 9BE7E93EAA719FEB29077A5B86C14B5F47B1B86D9F1EE50A9BEF6F6FB2DCC4C7 D3EDA4FA1744310A2C5BD39E8EFF9831D2E91698BCE0D2E9769525F934D7F08A FB4DF1732A46D4CD48BF73322E25BDDA632CBCD9F0571779CA52A60775ECAAF0 04A6ED054E9527CC85F67D2C480D6BA074A3D73D5386C7D3B06AFA386C931512 AA015585BFE18F6B5B79140570B655295A0C56F6D3FFB790185D4F1A10F0AD18 C143DE30A7FAAF80239CAFA2DF1CEB743341B05E8FE1D90FE3C0F75398B6FB76 28FDF55AF051AAD341AF59A6FDAE8B1BC878A52E5FC2B504D4C113979D7E7524 F44C86A5C12F5546024D792A0E4FF98AC19EC3850D88DBE34B4C2BBBBDD77E62 67219B59243B4DDDBB88AB7AFEEE234F08DCA63F51508BEB43BDC3B00A3A6F9A B4EB5EBB12D928D2E1901A0D9799F82676F6E158A6E521D11EADC606176809CB 82687208E6F491C6B92901015A67A67508A68FD8F910A41FCE333AC61A17F772 13FBB7DDCA5C17263946D38738E019B016BBC294F89083A2E8AA6A9433272CEA 42C8A243DF05FE3AB837F0793AE36FB9B1378B7DF1D50CB48DAE3F9CECEFEE6B 7E372802B2A19C7C1BBB14D3B061C5DC6FB29EAAC558386C58D87E1CBBA07AE8 B66DE0AC1AAD4D714C00B528E0A10D54AD7D99A3F5459BCBD196C0A86DA69508 C4C780D2000407BCF22ECA07C1FA37DA0E05CD0D1A78AA64AA9F4682F2F2F05F 0D219E2D4A1B55D836B36397586C46E54F7E7B56B969EEF401B7BA9AB3B71491 0B33E2694C3B10AE3702DFA3EBA9A42888E2FA495B521FB5B860EBECD878EE73 720ACF8DB674DB5C4A3418E5C4B1B93E8BD5FD6FCB334BF3C93D6825201A02F8 A8BD1F64CEF4D6E8BC96948226D8E0C34A7C65978BC66563B39BB41098EA4DBD DA6D7CB34A411B9A789775C2559A9F90B7F643551156FDA8B8C3B368E666A546 0D9458F1BF0649BBAFCB8A2B0B35633A873D5F9B0E55A1A1EBA070DB4636B725 BAD1250138E0A08B59DDC3BAC64DBA14313B8937275F8E8A506F6D6EA691FA5A D37453B2619C027CC5E6DEDF6C6EB248F182A7349A21CE744152BED4F91508AF AEC8563F1894734EC9BEEE05A1CA429BA1A134CFB7D7D533595CEBEA887EFE8E 8D41BB1711FD033A6D6707CDCD2F1F3D02DDAAB98311AD5BA5DA9EDF971FBDD4 BB4EF7EB3641CDEF6CC694948ADB8D94D39106C7D4E8E788627991A6AE33D7DA 81FF3259C745D3C3F53FF8CC0FDE715D61801FE115F534FF3FB04CF5324979D7 2AE393F01B9B84992F16390825059AE1560CA637AE72CA56D3CA686CE9514E1F CE1859CFCEABB3DF9FBD8F0E3A1E8B1ECF291081A63A86128BDF2DB251287810 DEE008FD4F5ED49D0BAB3E7638B975CF6C8528B9B8BBF490F9632F83A060AF42 1469997731E304C44B80503B391B9632C15D209556CD5FB94EC7CF4C98B51C7F 284ABF771FB70ED5F1CCBF4AA789AA9CF8C9EAF42F9C9725D87820C10282679C DA104A08E1AE5F01DD4399211C62C5F3370C9D159923447D15C2056A0F840203 62903BE8B5B1994C9D7C6052077E5446D54444628AE19229209F815677ECC5D6 45E6E1CDC2FF1AC81EFB1D73ABAEEFE54E185E3A817C0506CD754393CAA3D30A B2F401490D83B72BD07B4BF1D1ACE8AE0AF145A3CEA0E05439EA8EDE1C4597AE B5E866BFC94E30C9E8D8884DC900862E23767B9F8781F5623B4F5F74592F11E2 DD253253D176019798665BE833997D2ED432380DDB144EAB37C7756C6F729B0B D13D8D02951BF2C016DA02873E4B589EDA8021397BDE47000E0BBDD2AD8D5160 C7E9F69831FAEF84C27C7342C8CE4092278F767ABD3C7220870D40EF9AC505AC FB5F3E1BD3F0905F71AE8751C4E6BE02B392874356C7F25B37B16D7E8848A9C5 08FDC51948C71D3031BA695B44891D7C56F5A06113C1DF9E7A5B2306053AB76C 18B3BFED61C8E196494FCB0408DCA9389D6DE9611CB19B793D286011E9AD6E78 CFD74396029C4ABF7075143A71D14EF93B2053A0E8C8789E176D500DA7945DD4 B7F805169681F4033DA8A2941F8BAB7E4A1A0971E017FECCD8738DA3186B0DB8 8C63476272C63364DF6C3CA5D9847A6D81736F0BE388AF95A7F9B5663F55E3DF 1C740E4358B349DE17A63CA2282B03065A66D9FE3D6BDCEF932193E5F2E2D150 47984A57B31A7AEB54A101DF328A74040317529842B4A5A20E3448077C331626 9A5EA78E5EBFB81778BD4C9B392186E3C811EE82CFDD6A57E050DA15478791A9 65CAAEE28B55362594BB58EDC4D01FD54CA7EC5C4D2A3FBC6F399D5F35EC2256 EA0B1472A99F3349DD62F3931F193C322608E6452472E00EC22BC13E2E17949F 9F00E979D5D5E38CE6C6EB9CFD7B05E724CB49EFCBB211953A36EBB3A3E18498 8CC2B96F8FDE18C678282C0A707ACF03CC41F735E5A4173B45A9312944D69B2D 4D448C4914D987DE531C6D3EADE9C94F9E6F978AF50F6C25CF8586185FB7CAA8 5C428C606709C5FA5ED63CE6C0456664A552BD6B6AC8A321A97807279CCDD27A EA484CFEAE6FC10413A373A9E041D3CC05B48BDDE5DC89F1B9D140F95C9370F7 1126CAF6256DDC8081BB304F294398A5B5994800684B097444BB35D4D293E782 F61C8EA1AB2886CB6911B260127D8A2D116C3AB62F07920E37E0405F516F47D4 C4E865E9606301B86A9013E5244E1C145D515251089F62C780C17B1C2A605DA6 4E8F113081631041C38512469AAFFBA750A16A4921C2B809CAFD80F17DEE5BBC 6A00C67E59A4C3B1C34DA41EF7D4CC836CBA67ACD86822FBCD160ADC54D10A5C CD5A1C1D01AABBB900776AFF0BE76CCC484037C34D348A7BE0B15109BB114DD6 F0EACCA18800AEA8692D875F761C574B90F586ECB60183D3DD81C3B1C0EF1822 3FA0688E244FAD05F5AA4490DC6E0F515E174DFC2F26821E9C4B189830EE8D14 56BD9EE6BE690E62E2688D180B231704148F643873BAEF2466099D01E98D0A22 8CAD70DF0140C21585651CF257F62248FE2418DE3087907355F88886BE1DAD3F 043C30DF1CAA28F327A71B8EDFB5470F64298B899596DD2236B23058E3339E8B 82A8B27BD3ED46D1B5F2CBC333B4AB6C8314B26320134D8B8479F2824DD9AF44 D5F10F431F64B832D1881F59E8832C8935765E9C1ED9768EB864E3847F4F4928 71D2CBB138BCA7085D5E619C17BD6513F53293A9F419A74077EE0F97BDFFE479 CD960D5603C2CF26A3B4B3A6372F954041FEB600A528FEC76BF86420CB8FE902 C978E8D7A3D317683FAA98F299611F900FC0C38E267B9D2295AB317A0C65CDEE 214DE4298121B7385D9AC35D23ED48BC980D8BDF0ED1B3DF469E74B2FEB07B5C F26F8C6A61D4B1EF1F95EC93F618CACF0674C625BD9E960299A92E12BA082080 7DDB8D06817185AE7FB28174B530DD2EE84660606AABF27A171C33BD15173A09 69DDAAAE380C89FBB4FDDF271D3FB5CD0A2D62A1F1BF8EEF00A9FE22FDEA08B5 32E6995008D17A9B885BFCBB80E9AE1E3A4E75A8820AE2A7845D366F29CAE72A 9D41A40B32DB7F477E218C646A28FFDA6E58EA290AF7E19DCB764FFFFF8248E5 179AED3D8F1B91480B3729C79B3C96B3AEF105E11E370AC65F47F58917FC5EEF 68C5F518D1079ED2182CA6B149F76312133A4BAABC1E1862CBAE7AF59AADF2C8 FE748103948695737AD7BEBC52DF8C4BEE11C346D0E9B07338A1E82B86B8AF42 88A49CA23BA88579F911319AA8B7DEA4CCA6387BA33B217D02D121FD38FBD51B C100B95B21D41606B40B9A11CC731F10A8F4B86C572FD9AADCAB4CAF8F27353A C05EE5A9F372B1FD74B71522A6F9248F838630A8DE2429CFC5B34161E83B0B38 9713AFB911C246E5ECC6AB86CFC463B46D0358841EC85787E055ED7C5513B0E7 960D05F0BDCD5DEF56CDB808B755396E2F16F43B6D58BD13DB0A6B9FCA646521 5B114C3DE7253500A6D89A0DAC7F9EBD1E14D7EEBF8EAC1ADC5EA574781EC870 7C820F1ACBA1986CC55F78DB10F9F76E9392FC9265F3B370988CC56BAA379B46 E5DBF4FC5C1A5EBFC1DEE04AD79977B8B9213DB98649B6F9AC0F99F53A449CA9 FA33BED4F5EDE8D1B53EEDCACB0A883976C98DD719BE5C2A0A948535BE0B324D 4CD123FD9E346FB8E5C5AB593049CD5330D34DEB46C4AD0D21BF6E5D715B8A62 40E0BDA591D2727E4245B29089FCE0A2238B7AB0798FED91B6F8CDD6C2FCA085 3993743912D66BC8049C30643F9362D510575CE4926D53858A1BD2B8309CA46F F93B3941D0822B182AE4DCDAAEF090AB4DCDBF403E4BED69B62ED62530AC3A6C EDCCE216FFD057C8A388145720BED9D31A89D149E9A26AA4DDFE8EE93924FEB7 97A0DCDEFC84F9266A86D2B88495F4A9B1D33248BB0861BC4D38825D1EE3C930 11077737AC6E307B12ECEE27F82B554F40053CA24D2520DDAC7F547407A77196 41E85341D1D1C10411003E66708BC4FF4F31AF6E689321788C59D63DF263FE23 71FF6C27BA99A5D9C16E08CECE622CDB8517D14644BD03A5E7DFA8DF8AED725B F6AB8971EC1AD359AA0290B31A2DC818DD2BF80EDB07EB81F7787965ACBDEEFC 05337DFFABD0786D1C71B192B04618A00E90E0BB3BB704D1AA86E1FE5AE09B9B 256B82ABFCE181CC45745A0B2E51B1B780A91FB2387EFF75ACDAA8AC13B1F44B 81AB96DF1D9CF587DC8B9F926D02F81C8BABA56DFC79E25883453E84E22CADAA ADB64593275CCFFF770B53ED4F4F1B0A76DF0D5AD96FEA25AC42B8C350061A2D 1C97513C9F7F921ED913F321CFF95EF57FA1E19A9D3F3C927568888E1E7DFAA2 D12525815F2C65B72737B4AD9BD64F922526C3527693B552ADFA10C281F99A79 26513709301215BEEA51BAB631ADD6DB698BD96006913FBE8AAF394A051ABA45 D4C7F093DAC9707CF64509D64A39EFA0207910A575932F928CE105E6A2745088 4D23F6EBEBDD583037106433728693D9D24462F3E75DAB68059ABCB05B2B5633 D46ECEB9E1A9CD67317F5D1197DED31050A102F739792CE307D6928681542F39 954589A5187E9FF713B1D0A3E5515C5C0F935B7921E4B37E12F0638352EA1447 7C5BB21D4CB3181B1C056A3B4D98396DF351BA384FF61A170C1FABB51B025E1A 206FB57FCA26D929BB232A9CC3249C1A0400FC039D3EBB543812C5918D6219D0 882DD96CFA770A03BE1D0494C090D5F5EECEB305435FFD740824EB85E59CCCB4 AA411710DC67EA2489430D8C08423F00C499323ED1BAA4EB1B5089424F898D86 BDF5CE56C028B107B8972433EDA77EE397A193B1793BE61F8DCC0273A0FCED9F 8A98FE8D1A49469C3A4ADEF38888A1199DBAB63DE30E56B82E55C6B31D70FB4C 5F9514DF02B648CD3FD6860E426DB1D853910F1F96EA328759229347ABF6C503 A7B6A63D729001711890C1AC5997F2F352F3130C760F49D0510DEC22B51A7FB9 F2A7EC4939171B82F24440AA058C5522681A0A97BDE06B15B88DB1F1246A095A E89230E74BB7B404806FD2FE9F698C167954184129B40CFCD711D69D7C1B4F8A 7D2A8D496A7EA0FDA901AD9D79D067614D868290F804649280671903D1085A1C E2E3C0ECEC635D975D66CDC5312568AC5C85F87804BE7E60EF787F5B97DB71C9 4DB5F1AB7069B1B411319D3D70E1554D56120E2E5C9D474DAA7C93D5371A9DF6 10A823F3105FF629CB8A2D564545638B9203283F6D70E4CD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 44 /comma put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05 43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624 2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30 712D165DB5ADED89056FBDA355CE0DE5DDF2A52DB851879E39085EE9D44EF757 9B4BEE1ACDB865002ED4C5A98683AC13D9E1F818EE88E0A0408E13888A023B87 31F35E750C4DE7EE68DFCC0211A2860C0988F6E682EF84373DB982BA28162A69 64E9CFC6ACE0A25114F95EB7FAA7E99A68533FC4888AE57C5C104B219CFCB938 DA518553B57BB2D9E462A5A68F1E8E0044F1FBC52560D53A6C2EB0393AF5CBB1 55D81F9DC2C643F2E2DD0129C306FA3A787149550BF32119399076BC885D150C B3584CB2DD79AA0B27FF0D59D7CBC477D5A29F789E37CF19F32D9D3F6914961E AADE5423667209A686D8BB6F2293659E91D09CFE321C53B34D830CF72F00D3E5 FCD3B6479BD4C862429A52E964B3BF8B81906F32517E927023C2AB14AAE1BC5B 6B0B906F420772505D76FFF558C9D3BC3E980A1FCC61E9AF4B9A9843EC4787D7 C41C6DEC165A5299444976F34F301F2950FAF95C529BF7A74514AF883C50B4AB C21227588FF0A57D1CCD8A91EED659F63BCE43D5ADD1F3CEDD661CA2B68654B7 01E17109377F92C75135E060CD805F98FF47DE13FEB6C7FEAC15DBF630016448 6C7F12BBDDF1C248C3B8FCDB8DF5F93357AF164A7114606087697E5021AFED3C 0F775E02982C4599496B71E4B6F3271396CB9B581F70DCBB0435F111D2216D73 0C78C0A5C2AA5D2A40758BC181BAEAF2641B439D4FA6EB46D03338BD95820ED2 D57CB7AEE41EEDD77FA59FFD1DD7B805B567A1164AE77D8DB5F49E8779938D9C 875AABA87925BBA4B374E59AE9780D231EC4D1B192E7CCFC31D87F5378200532 F64EFA6055C148898D5E67ACE7363D8AC3CA2050EE8C47DD1EE29FDB882A31B5 E8116DCBA78D5B9329DF559EE4F7855222AA01E676A7CEE978D9881121BBB96E DEA72B73FDB70E170B93BE01C4159319F4FAE38ACA41966CCF60A8F9424C098E 69210A0ADB89D2CECD169D5448BB34DEE20D9905BAE45DE37F41259185F8B175 B8EB2AAC102E05940B494BCB1F3B79458F0086AF241B063D7EDDE676BEA3055D E3D18A35A848A22F9B4B79DEBAF97466F8158D8E782331B673D4FF9C12177DD0 CD62BCF177DDD0F950A8652AEF529AEE43BD52DD513F8D6585B85F4896B45B58 6F0FC7FFD12BAE6B0E477C9D6510F6E87E3B4D75C9DED5592CE95B6E8ED406AD D71F59197A116377319BA68A214FF237B591757AE362289F2782350C12666847 91F72F0A88E56827097522C55B3F44D76ED3EAB90B7ED0ECC3FEF34DC3C0D391 6E06E03715926E3AA986E3C5DC076EF9CC0F5B71FFD3F02ED339B1CAFBCB04B3 D7B17B617003BE14730CA3341A003EFBCDC8A176BF4467440389BFDB7D331823 CB278DBE285E6732477E017A2A9B1AEC5C113A491EEC6141D7B9C435091FAC4B 6C393AC995DC79F0046B3CB03CC01F714A30BFA08052C0BC7C888B1E615AF648 256AB8F551EFB544240131B54C3415265C6716F9E852DC4973525332CD5B181B A4DE4E041BFCD79E978E572C2A53A7395F23977E60B61057111B47AD35A580A8 769AF52AA9067CBE946298D77FACCF06BCEF0514943EE8AABD1C54B9378F0BDC CFE0D81EB1BF9D0082FBF97648C763009B41E8610D6904DBDD4F1C5D82E6A663 2F6F7C4F99B83C0A327A90E16092E7963848B243A7E718E078A209B1A830D978 73588ACBD3E1F872900D4C3879524F139FFCA71066C96424771C19E5FFA0285A D0E051214F11F4D7557C8B376B7E6DABD206AE08307F20F12755B39306B35011 E5EEF050AF9118DCE00ACA6B266E66C0C63D579D7D90134D82268773D570B7CC 5E4C183ABB09646D3B9E70D06E2CDCB9EA0B108A6DA4E3AEC5733CCC0A14EB34 1D39DC8EF3308FF55CCF1F736B2DCBCC90207D6D484216A28C5BC32775C91D2E 78A63A01BB22EC15E69860AF1EBA0D74EA154F044CA403E210291D18489EB661 40786D375568D52BE04A49C51F2E294329192552E084BE826B25EC6A254D891F 6C34A8B08ADD1BFB2FEE17B28CEA54E4FD352E2A01C649D05BA5E72722D42F5F A2C90C27FECEA6E5C21B0DF46E6571358C04287147DB535DC397A958A90F9A64 6A60053642B8607ABC3EBD65B1A46F4B22017F945D059975D7A2A465E13651D1 96D111DCA6B3AEFD4F3B5C0B51E968F9C6E1C365A390850BBEE64AF381E7929C 9EE72908432B77B9D58B0DEADA36802520B699766400B2B04AC92014D99C669F FFC0E2127416F71925E7579213FA266F9803C197F2F0722B37C78C03A505C76A D86B400C039466E4D2E2DC5CEE614932A0B8600811EE809E21446D12A4A30D8D 32C6AB1BDD383C05897CB4A08F719102D38ECD71359273F623865600455A040E EBE2FE4D6D031A0F96FBD7CD0EDF88C6D092755EE07DBDD793FFF279D1C5BFC5 4DB4D3E4BFA1A8850A608BD6F635A7AD717C45407607FEF9E14576EAFFCB5EFB 2B8C1B12CB88CD3D70FDD0458443046F85CE4DAA12FA4BAF6FB1673A1D3C48CF 2F891D1BF832037885457B4E46A2D2418AEE1B46C30EE4E524723B7842C9DFD2 60A72B6AA65B88031BD577A546CB320EF9E2B980DB8E85BA6652FD2BF20BB637 2753016E7800E540154727C01E6ADEB5422B91D5C20F9E8B2B2AB9109EF13F05 15DA2ED05ACAF566A51BED58221EB434CBB6EC3CC34C083DCFA54694A1E9FD7D 2FA520B3DA37095B92844CCB2958E86484759AF1657B5B6966E70E21F720B0DB 51F4C3D14EF63A60A5383CD166AC41860949F52A9EDEEBE352C64DE286D9FA70 7030FA4357196B56E8FF52E2264DD8DB2AC5057E448DAB1B828DAA153393C805 A57328D0583339DD7AFBD7A9A5B0D67FA92C62046F8F9B2FD8FB424EC1165936 486A469AAB12FF9490BA39D4AF4EB41D682F278423016AA6C173A2ADA81AB2A6 919412F56463799ABD6DBCC68A96C67C18E793A4B84027DD9CC233310E84E4A3 1941DA5DBBBD462F7C7605ECBB28F46E6089E9B911CBE04C207C579BD999ACDA F9A39FFA4C396166DBA3A7286D8A6830B975CFBB9CB99DCF36A3057015218BC9 C05CCB01B514AF78D5E3F6DCEDE6816E64719DB53CBDADDC52C3E05E2075813A 9238E39CE61E0C17DBCC3D5A321950FDFA8F7DA670821C1F37032E6C52EC0BD5 81F698295732C4248C634449F3F8DD016D07583818161066DA6D1F8F97F09423 E887B17579B2B6AF2F4D18DA593C0A0E7DCD4A21AB3D7E657D12E07FD63F5B23 2F362D1664E293E7D85957D450C025C5B9B2E8889283D8C8D395B135AA50942B AE668712615EDC2100EB5EA761360E565F06A23BFD436DBFFAAFAF6E583E84B1 AB02C5418E41B8CDEEF026EE19139441F33DA61F28E6218B0F2C7FC79D2A3AAE 5C7270F0032E465BAB57AD5323F4851D4C231A66D4038562DCE696F2DCFB0F7C B85AA1DF6068D85C017C5C95064FD4F0C3EA966E1E94CA3C9C9A76AF0B5E981F 4CC71CC9C686EA4ED348CE57AA6BD30A16F7111E092D81B6675F7EFDB30E4411 C0CC449A53D60F13BB248ABFE7DEDD56A03A675707AF1B1F13829E41C9226504 FBF20B944E575731B7FD1D1D16B18275E7AC756800BEA08B3DB6F505127B6BB1 2E49246603B265FEC2DCF02330C86FBCF9C9F83D335E363744CD49AA4CADCC4C EA2D570C6B130166F100436E50118D56630E2B596F44D37275D61DCC9C9D365C DD280B1E3C50F7CA3CF3A7AE08FD2451ECAC08092472D660BF787D04D3C3B936 7292F46A57441B15E7398C7A2E139DE61729D049484B9E9E29632795AF3C198E E450BD4E843FFC0B8EB45D3F0BCD408A33F6B9E6B83E19317183654B196D9FC2 BF327E50BF4F5CC83989D88683FAA8851FD91BCC64C797370809623DEA519BC0 0F6637F304BE66317FBF98F8C700D28D74B643FCE8517454412D0F56D4DA901A 8C8890F98BDCC83B836F806A4BE2349868E7722D6D8A260FC3FCFD39AA2DE620 E8F5EB6FD9466F7135C436F9E86937631BA472EA77E9FD4BB9E5772AF4E19232 712783E10A83A065E1DBE7F3DC45CE16D1BB35113470C88FD7BACCCEE874208A 43D915B0B6D0A497D55D5D4ECA65FBBE334EA902D71766F00B1D950FE2F1EC77 E4ED0E969DCC78C7F04BFE7D03F1113DD85A47FDD921E4714A59EFD829D62F1C 98876969C68FBA644BFF55B3FEF54D99E081FB6CBDA470A2952E29F52FBB59FF 778B2A9327D0E12964F34E1537E81251B2C910E6F75497A01EF0F24A3C85B421 AAEB193514A26869B53A9C7974CCAD5FA2CD9E3598353D755B04597048C5F740 81CB4F80AF5EC07078B84458A0EDFD58301CF24967ABDC5CE8B6A9737748C494 0F16EFF7D430328DC9B04E0770C70E68BA005506E86737776B763EB88E64C5A6 F5EAD4C4356F4A196900B9D3878A0DFB898496EB0C85EE207C50C868909D0847 87E9D16DB5DDA440CAE1D609EDAC8D96E0E83BB67C74AD1271559593CB4733C3 58D54577B35CB1CF9B954A9C422482682732835019D1FE22D6A0A6EA8950D25C E30AD2985C44267209498029F8FE133A435BD5009CB0A8A1099E95B34BBAD9E1 8FB64C79F6E1D8C09553B35A952ECEE66360621077435F8E6E64C1C6D7713BC0 91DB1434B9CF86CBF48B2FEAA908AED5691CC81C09D87EFC6FBFFC2D1F79EE9A 836F333D6B473375BC8F6E8102B0C24700FF38BFD7025963C86218DC1E077559 D4B80B68208E317E47E4B6816F04775C64DFBF621883955BF81D0DD586B4AD09 CC10EDCB8A82C0B6D4A7056BA14A113DF3B35C7300D43772EEC5C0309A741CD1 1A26C2C80D520DBD1EF1256B746BDA0D34DEBA442BCD33FFB6F103EABC60C585 D885AAC3E1B6452B48A66C83F918E918EFA6034829C898440E436AF1A3D81AE6 E74AF9E8F505D5DBD7BB58432C5AFF73C5406D78C8BD85181E5345803B2D1F98 0C81540F82A04C357AC31E9AED37BD4E8D5FDD95B058AF5AAC0E1D35A7D11095 31D1F8AFD1DA22506B8E1B9D72D91BC9F19D308C7FE6B85C2B8D5109276092FC 718C3892052A890B3F785E57F91E83FDCCF702117E5E81A123C53218F4B74355 65BD683FB87D87527BEFCAEFDC83C019E7FF741486E3CC1597B6A2E493D35603 92B57EF508876C54193887DAEED97A41B66FB83412239066EA2E1C0617FF7B10 8BDA62531DA6C6F8F06B7F150DFB3F6905A2B7076442F7C4780A41F6628E3207 1D1FB86627C40A84D9894B73FFF000CDBBE088CFBBB241FF16C982353936EB17 743EE092F93894D92E9BFD73E382FA5E618B21AFE8E593B35EDC97D82D5FF8BF 485605DBEF4C1C533AF217EB31852B6D05ABE12BB50F307C0F59500B5F89CA28 D7FAB89BBFE04B93474B3E6E863F5BD37222A6EDFE81FC5AEDDFD128DBDC1ABC EDF98F9D5AC4888493B4208D2B7C937BED3A271F4C0DAF78D3F5809B3697E28F 8C8C00C6AE930844D3B54C6C52E0F48DD76BF562C67D4B035AF36201AB990445 6DDEE6DF82A8E4242787B565E8DCEF69D54DE590019CD5189053A04342E2515A CCD0D4F3DBC7ED1FFC82F35407DB1D4D5A322B7957A40C30B3DAF4CF44CD096B B8C19BE6005DB525A0462BB49665589DBBDB111CD21AC2F7B6AF3F61D6A97FEE 5103DBE08AF0826660BCCA78410A361CA68950DD6A0AE6408C5964CC8C73741E 4ABABF4EB49D61BE53561577CCF022347C3DFE48F5913E45F1C7E39A1747A0FD E41B5800AD5FFCC50DA109F2B38743A9566FE6098A85D27C1E3C069FACD059A4 7E4A706761CEDADAE28FAFD44A8C3F9CAD93CA94FAB838D8053CE56E0B0A4AF8 CEC76D72955D888BAB4ED03271BFEB2A41EBD7F7CE463286D25F49894E8E6BEC 18346F4AAE8B7C2524D586C937020B6FEA4A69562275E28C1CCC37987E6CB9E4 27F47C1B45D60889D8C40A5E3CAF5E67DDDFB2EC9C87142074CDBE0FB508EE5D 7F9ED4996F009B94E0FCBC38938DA56EF7E86ACF4ADC049CB2CFC6B9E2B4CA10 699D52B2ECA9AB025A104109637D50744B218924373D1D0CD1138D516408B64A DF3E3A16F462AF6BE00DCA51EC0DFBB796313B65D01E6CE4160E071B17979990 D6337DB92F3F112025DFB0DDD1E1EC1108F55EAE8F96788A1894F59B525F9935 CE8818B66542CD18D019EF18D77DB8FA541BB47445DCDDA30156033BC031C191 5039096D293D1A34FA2EF1551E243E1D88A55EE6E2736DD1A725A06F6A78A520 BCAD87F68AFC45540ADA3D8DE97841178A7FCC969C159FD2B6F5153F4912198A A555B9250AA73454E9DED6FE1060661BEA6283FFDACABCB0207B3A48E036C39F 731833C66AE165844344678A3D9A70AA3910473EE01100585DC37E364C3DCE0C E81306C3DF3C6EFAA67A8DA1F07B0D7B0E919F4C6E7897A4B3AE49A29ED10788 83FAE69A32A97E36A29BF854831F84534C1F36D962AB49551028505A5FB3B84F 6F0D66A06D333596DFA8F3384D6C74022523B58F1E96BA619278F79B6D24C63E 138E241ED8ABB23DFEEE6B7B2B7E16568AAD039DFD22E5B42AB5B458FB8E7239 57282147B69E6E3A3C5C70BCA065826FAACC8552FC0DEE5560FBC1084255DAA7 2E8D48ACFB4C3AA1C28F0A6F7D0A6AC1293AFA503A96B664169944D0F31B4618 C09B8D108D0F77B9485D1ED26C487FBB8B47F83F782A0206B625A4A81A350D75 A1DDB921F0610A4DEFB93C2288CEAEBE0AC68F757D11D49F3052946BBF4B11CA 2B9171A4A18D8C5C095703ED5F10D93C6EA3B4E46E0C9E9BFF3AC1CBDEB4E019 123CF2099D469FEFD70066B214C0C76C0B2E0F4110DCF2FC8E8619707E025927 8D5E5CD3C4950A055ED20CF299DC3127B7FA0AD747533CE11921DC4F110B6ED9 21B9BA08CC207FE021DE4CC5285829F47A92636B0DB68ABFE8E26A50E36BFD2D C2641EFD86B588DF3AA72309788AE3ECFE10347F41F051BF51F54F05007C21B2 8B4F64329200E21994516DF419BB3E10224A92D7E5B7682D0FB7097EC5672780 77DE4BC4B1A343611F79CCF778793766CC0E01795A83B3171421F40A144966CD 41A188F56F3D54E6578732D53E21156993E78B903572BC184C87DB3FAE64D5E8 597D06D882D5C0DA5F8F8AB03014C5886E836F601A0C4ACFF9EF81B986E9D053 55BA66A303FDD1AEC853A9E30DC0C1F42E850C02FE9216A86E9527C1BED627D1 6554C85BA07015A2A7A7F00FB51C14CC19DDB920C41DBF56DA249930D58C034C BDBF98F17F143EE5C635BBFDD3BC81E4A1805085AE6CC28FE3EB47C2818C35BC ADF57AC82D142E1AFB16106AB08A3DFE989519E5C5903F2D8C42B13FB114857D 35B75B239DEDC70163B181AA43D7F9B964EEF1E43CCC9959AADE728DA6D08463 854EC66A8F2114A2200EAD92D5003C357C0B42C113A0CF1095D6375B613FD68A ED6048680853B5621B55CA62EECF5C4F77F909D7BF361C53F8B90D853930267C A79CC67A446B0087B2B4FE074C242C8F3D8F203E73B1FFDB2433010E00AE80B5 27709B16EEF0EF42DDD56B46D1C0BFEB89B5194A2285C9C2F9B62541C0F86BE7 ED1903968B13FDDE177F877EC6B9ED63DFB5DC4D26385BD85E27B86B5AAF00C4 427FF5CCD7D539D7912CB8E0FEDFCD4641CFE9922C4A3A67A72C363A18E2BAF1 15B2C145CA6A6C07461E113517D6383A03120286883493139D48E18DCBA93714 A936C2232F79E6482E870BCC7E1C22355316A34D521EF8405E91BDC56C0F6DDD FC53DD99D9837771A89B5B8CC3F176A2A9815AC1B6D2E43C394C43ADC530C84A 763886ED0DFB2AC863D8EAA55572732446A31953620D920AFF34E2590F1B29C8 EF50348330B6C718E8C23165CD739392185CFB2970BC2148CDE2D7D3C1A244BF AAD43899E41254AB30FEB10016E5F11AC0185761F73ED6285E041132B9F094D5 FFCFB4C932DE1CB65666A1B7BCF0A610BBA9578B8414B90FE0F6D5E83C8B9335 D487A8380FBE1570A01B995284559454E89DB607E434BEA9582AF8900C1CAFA5 9411C8BD17F37969432F7CA0E7C676D77511DC2037FA3461C763809022E1A8D8 6646FC08A21541654A5735BFEA2FA68D9995AE458C11C41D563418A13D5FEFE8 E7E3E3A601A362CA2422A749AA1B226D35110B03270B6C620F851A3F50D34707 08FB5DCDB10D33AAD6728B0E76AAA7E98767D997F144ACAE9884F8DE2B3FBCEF DE7463CED6C95DBCEA9AE9EA9E666B366C5FE334D03B0097EE7148A3DF2978B6 FED5E4C262DB969A775F941AA6653FFDB7066A24FC6E19EA0868AC065D5863DA 0BACA600CA715BC1A23AB469530F4D7730131556FA1B3CF3C78F2B37EBBB801E F108203B858D2CE1E432E9319BF6CF57137216505A8DF7F307E70DE9A2387853 7C028D25FEA6C83C2558AACA0B903E4DE917B872C8226FA349F587E482ACC697 2F8726CAD12A19032AB62E3814AC6D2C3B36C09DD4E4D8B518DFE2C21306FCDE 0F030AB52B41116486DB9E5BECACCCF97C0CE60CA33F5E81E2B1E118F79F07F8 51F02CB58E8F9C63A81D61D6AE819C82E5F473C9AB135AFA3495C8363A3555B8 7EF46153D5D277B5759558BB7FA70D96D2B0F26EC3C984DF063A14463DF7BEA6 398F4CC4E105522C359F8352D6A858A7AABA0FBB87168C7D00D96E1B3F15AA2F 19F1838AA08018509DF7443DF50AF59511119F193D4F5B3EE8AC9B2FB7D19240 CE2F356E4BD77087232CD182E5ABAE8F6E5C47B5F26F4EB75052CBB82F3A9AC8 FCC913DABB75A51F49247BBE4369FC52A6A24344DF6926F3DEF4D4A2847A583D FCEFA3EEFDB13FF245D6A0B0D1B17BB4A1C4D6E94D577F9936B1079766C46960 29B365FA82CAD68EC00CA7A4B89B4F06BD1B0790B22C5067B2D26AA3F178C749 A146A1651DD02F0397673C670E06E6BF5EA920FCE3FD23BE3DC25D9BE67A168F 07B8D5EE0A2A97DDEDED6A2707CC2BBB455A07FC27258E85A640C51802B19ED9 E9F43E95A190486D28B70FFDF5D89E3326F9F8E223470849C3070250A94F854D 871A511960C2B4C857AB6B83C6F56E99146C9B1A4FC2D3D192EE0AD1B448F573 7BDE711B9E3C47EA284063F1F8490A6DAEBF52677F8C20EB7D6A9086084296E2 AC144156509A91CCA3DE861398DEFF7E74C844A3ACAA79B860579AB910E5E1A3 4C5A81109B1BBF9DA1C2C81928353A443031AF58B5E1A545EDC5613CB726B3E4 169FCE4503C5FF09A1F402F99D4EBF27B3D8DCB127D6BD615584C311E3C1FE4E B288205B3E9281BDBC52A949E8DAAFF4FE860943E7810B65B4B000A5D42A6F01 10626E1596DF0C854CE2F3407FE0E864EF4138422F16CFE2C65525E3972E42C9 A27BA1895C8F2C386FB300CD73EC7DC03EA0846E3DC5B843C1FFAC25BA59F47E AC3787E294EF256061CB16EE09FC5295F5803BD3F24F6C4188E206EEFFD2580D 94BCE1E6F9C606698BDB3218301D3765973C2B75AA913443CE6B1D7438F805E2 5D5ACC016A8DD0B71E5D7EE45E019C0B7BA0C149B9158021B6F472426C655275 C645CF768BAB03DC70A9488A06BF62BA784F44A74CAA79E4332DD8BC1FDD95DC 3736404A100258673E4895B8E22B1A123E0919D5CC599CDFCE0BD96C10BFE421 0CB3A7F194A2442E2AE8153C0B531D05F1704C4C63F8CA19990EE5A7D08176B2 38839E6BBE2CA42F629F7EF5163B64DE09462BE9C202455EB083C529F48AA41B 7E0342F4C28AD3DBDDBA75880CD30B272A212B5C3987D27EA1726956CBA39A5E 4C83EC82BBDE3103C0BC11B5E03D951DD80D863D6AB24F1412B31EB47A1C92E0 038E8796D09C6F32FE27EF73BAA5718CC8D84178C53313D4FA7720E706AB0B16 8D264C86CE1CEA0DA942FBC8DF04241F2F84BD46A97FA6CA390A8A791FA8CA47 085D532C8B72D9AC204A8F2711CECC595AB286C4608FBD36C82A2FF545602010 41B69445CEA932843CD24B22261E1532E848148BEA74579989C0F3450468BDB2 11E0247514C2C2ADC66820A65FB9C7683D50D5961C2122CAFCAB27AE613DBA6C 911BCBEEA62D981B55615D47FF6E49C7348A680BFFE06EF9DE6E19DAD5424965 DCDA1B655D803CE8581BA0AB7EAD32B7EC4C9CBE0BCC74DF132F5EDC9D50B438 D87A96B3FF181058A150FBA16390766BFC98CE986C3875D8C6F15F78D88268E2 42ADD540D06525B10F6E80F114E8DAF907F31B639FC62E1B824F3B245083F708 C50D9CBD333CD4BB33F0AD549BC51BB611DDA9CB4520ABA377847C5F4C7644DE A3AAE8A48CFA03011ECA539AE646F47988982E09DFCDDB5E25DDC32772885AAB BF9555F6FF946A53E9656D625DF441C32CC63137FE4AFF164836EFC6718A8DB7 B4D81E86F3D4D1A0DF6DD22ACBC23A2ED878B9BD43617DF539EB4431E7E49CED 22EB650937C1188C750CA36E20C8F374DE68B7C79007729BE085772F7A3A8DBC 9BF36220846630924F317CA350E9173D618F81DADACFFDE09E710299BF6001FE B5CF89F66F623A5F7CED70EE024B8ACEAD657F63F7CAA773B59B5620E72FC26B 4678042E0BA4F75F5596600CCDFD7972806E1F3CF64C7EF3D88240C4A2A8E81B 07B93F8060719905C7F7E877C4FCA35F46ACF97F7128EA1FDAB570ACC9B8CA88 957A8F91D301336210FD59D3C5F365E822B90076231477F49C3CB4EC2792024D 6864AD523326123254C7AE2D9C11D30A4ADD2CB8D8CA14CCFEE0FEDC8C49D2F4 99C69EA518C7EE58E94403C4C20DB99DE800588BBF79C27C3A6F03D653F3C15C 8238B0E8E607D425028405BE81042E33EC2B5595677AB24EBD08BF1858CBC0B0 154D1E3CAFD2780D6A73BF7D8DBC5B800D4328E4F14955F6D86A2F5934A4EC50 B2D7ADF53A532D6484677807839039F9BD047FDB0680C50BF89D3924716F80DD 0B421DFBCD32F4A7C454B4B91C6C8639BAB5598951DAC178E2320BE563AE0F14 B96CCB98F51AEE99B83098EF77FAC10D8B88FB29B839C094785F46A377BD655A 68787E5A6DBFE78ED1F304AFCFBDBD481348A65D004646E03B5AAB0EDA67A779 B9014D14750AA488D8DF9C9DD347AE5B68DCB3C28986D9F09C48612B8795BA3B 702415A816258790947FBEFBE2B85BA0913BFF1C4F35C7464DCD0EAF8397A769 8677C8DA5F89253B1C3AB2F41C3C5448F17C5DCCB18DE110CB9020B9E26F0BD5 E0806485FDA93F3B54AA9B9D445090A23123BB399318B4771EC426CDDBAB6BEF 8E24B165DEFDAEAB660649754283A4A3BEA95522F058D118C7892EAACF376CAC 877028063F1C0429B5AACC47CA6874B8A83C75B78A64D21CD14214EEAB0F4FB4 D26FBEEB479ACBF5740230C9943EF7B6983AFB683855A877CDB8238CCECD8156 DF9271A64D6148560A81EB5DE5F20564E2EA814A974DAA436AC36F107B289E90 111B28D488CDED75CF61C3FAC18581D21E7B517271FE4284CFD0865A6FCEFA3D E26B649A2F392FF3A6A0A781E090FF5A98594BF0341D065E8E68B0A0969DF7A5 71356D718C2933003D218218BDB35BF0AC541180635FC8CA3C777008B09FBCF8 8BAAE9D764AC5A8CA2E88E11247E8512B6FED52E7C2339CED4E4F82BE578E342 6DE6129998C520F77AA5032191A68F101D9451651C003B33D9A0DA25E241ABA3 A29AAAF4B3C81DEF8C36A52C0D8A42999B63199295BB479F171599CC952C7F59 B18BDA62685B45AE1CE46CCE2311789C46E155ACD5A8838C6E392F5CC2551401 399F83BCBD4DB6BD9DF2EF4676D900EE843BD07D9CACDBAA05855AE2F7993A7A 2FB0937F06186306D7C788FB26B536C1915E570863E5FB2D91C63E6FDEBA34D6 A2D27DE682224614ACB3A799B3604026FF9F9EE56ED3A9380E1BA58057A036C5 5550170FFA61924C47BED31688796BEB3927C3CBDC9CBCAA0BE5D685D7DE241B 24C6EABDAA52B245BBA14D214CB61FF044B0EC7CB8731958F61D65D7268C7FAA B5BEAE3192ED338920EBDE9B6F625E10CA87520C72223FDE13C7BD49FFE99DC8 5DB87EA56CD6C06C8C7AC6C193340E9F913C83B62CD5BD580F5CC6B6D8C1470E BD09AE843D9EF28CDEA143B7206DBAC3B896CA9D6169DD634B30C41D73310BE2 DABB707A86A5FFE942BCC7A75FB92EAE77EBCDF26DA07B07D8ACE98C3277995D B7B1198233DC78136FBE39D3DE9B6F1F62BBB311D451B46D7AE0FB28A3EE7AD9 323547D3399AA95E95811CBB50C5EF6680363FC8F7C7E5230B9DB9815F8697FD 047161AC68896D17821504A87A73775544F932495C55174EF14A8350BC2C055F E095F53B4955170A06721543827E3F1C90CF48866685B359147BDDF8FC42C423 3A6ECC23FB9353B3B6B90C3E8CA4E4E930AB97B2A5B8E348F9242F479FB85CF6 C67ABD6A09ECF1CFB93CAB1960FDBFDFE108570395385765077565E82107CCF4 95612493959FEA678C601C03115D6947A0B14492B04053FBC7CCDBC058DA2D32 44E1CB3FF3B4F3582002245707F20494E04D681627A2D084AFC1B8144F5A21A5 088FDCA63E160ED588C28FCFC523623415D2632F2104245379D9BC5E067E63DA 3A320036E60A2A65F56997572166E8E6DD4AFDB39F1F84AFF1D5E05366F0E2D9 0FF1BDD6A98C9405CFB576E4C96F747E4BBE12569018B5123CD9EB8A5C0CABF4 63833B489B792596B97231202AE359E0D9648F7A350EA0304B7AEF575212C851 788EFD372B9A3220E6C647A317FD31663D1F6E6B0F14F7A8EC8E7A7C291792C8 A9EFD4191C8381B62E8BCC7B14C8755FE1613758E94FBA6EE7F9DEAB356EFFFA 20D359112A8CF8AA6EB2990DBD57020993A4C0D3BACD910A25F318009C253F49 CF460E81F4B942F009BE7909AC9EF593E7050DA6F7E0588F7D70B7E5E3982855 29752C3FED27CC39C420E8A1A27CC22335798C214CFF18359B85F84CAB375769 035A617724D498437B8AC8E7C3DB12389DA206D271D4406913F37EB48C820E07 245E5E87E4F2CF38FA332B539A8FC1F5A2162A1353DC27C2064FBDDFE12FF7E3 9A6A7690B8E0730C0F9B78F275DF43F5F5FEB0360C0DF657152846DD8AF2186E FF6E19B7E53E8F992451E1CD7E888417D3168D1299CA31BA75DC2EEC6DD751FC FFF946411A8C48E3A5C98535A58FA490DE9F0C5ACBB228A5255C48BA98736095 7CE11E73BF3C403915FA14A4A8144BD6AD1D79843688BD5BAC427FF96B6C17E6 82266F1204D00801F0274E8C05587957458527D7EADE10A03C301578C8BC4111 334DE9BB4B78FEFB8154CE0ACBB95316CF7B5A1BB4547722DDF513E013A23B3B 3899293091E25619C0ADB9B66E3C54DE2A257A5BE8CFCAA337DB1D7A01383F99 F5457952EDA9C68E89BDF8E7B3F557DD20834C428A4DFA5B957A0BE481889125 02751A25A687F5CC5E679329CF50F644BDDF436E1E3178CE27E0B87115FB5A98 23065CEE85BE84BD37DBC82D94ECFD6FF88284F98848C73E5155D425609CA6D6 ECC71922CAC6F81B37D3A0BED469A5A879673F4D7E623D77F2C9533417FFCBD2 BB09CEDA826AD2945904619620E7A759BD3BB2E799ECF66FF19194510973CABD 46EE7FF5B8609B79469720FC8F934AB53A4A39E583EE43E1E3568CCB96A7877A 923F66B2F7EBA572ADB047DD9D9F25E01F7681A4B06C05FDB062FD346DC244FA B3A054BD47B48626907A7CF81674F3535DAB490E275E776154471A5F8BBC9F8D D811CCD6B26E085A660AB44533C4A3FE8B1511595399832368D022623D945C09 B65F2E7B404E11A0BB3AE589BA84520F06EED018D09245CE627E358E24FB4690 A617620ACBBEC71D374AC3C96D7ED04DC0893C1034226AC9D70FFA094491B64A 2EE7DACACD7B4712B218AED6786E85A97A0662C261E99FDD6322998B1F95E08E D035A977C2DB94793DA2D90F3A14D4EC9A879CD3DDE7B874872E117ABB74A699 16BE210CE77A1F4BA087E7E5E6F0666CA396FA06E9D7582105FA8E9B702B5654 7323554BEC4DC645EF7259FAD81D36725394F94C1F1B0DDCB992F4F6692C879D D8DF61F743B5BFAECCCDC1C7A16925D8E99D7D1BCA04A6ABA8E8327063B97FC3 095EC36F6062A93AA99E39DEECFCB507BD677899A2F170F612785DE13B89C7FA B32BAE429661C35EC5CA6F6916F6FAE1B03BCD6D1EB88DC99656BBC40DACBBEA C5CBEA244B3A44EAD417B65554C8CCFD173CB9ADA94F5D55E802E032BE53F6AE 4C024EB9D647CBCD0D05F4CB0E49C7D1E9F573129B46E1168DA84DF1F7E9E657 A1C37AD37489AA8509AE5B71C4183A5BC9726687C167702EAA26DC959B3553D0 FEF8B04A46FEA60A7B66F83246725DB510C0D7F9A4C274BDF5BCB8EB9EB0A5A4 52D7E328AE40F0E80F7C388EE93E434F2B6ECE185FE729F5C25F4169043CEC9A 42B0D432D25F97A3F4F2849F5E11B0F2D7AE49F4FE5C59C4181664F8938F9B7C 6DDF4EF92EA98AE49948AC5A70AAE737835C9DC33973AB817E1AD6C5DDF42BDD 5F5CE7EB9570DCBA106D45D2B31876F1C5BC94D2733E603D7DDC1AB7332E66BB EA9A3A8E95B7372BCA6F841B22C2B6C914710373CC20009E07E417F709A540AC 78D58511DFB85F629AF125DB14480979C68AE774184EE8759064288C0E794D76 E6F80729725D0A6ADC875D58D6657F0ABFCA16FD200C48A45028B4283E3008D2 244706006EE511A84882C5CA0E307ED3A9A4F50450900684A655918269F1D146 86656A3600C0391A4C6857F24B3ACCEE4E782FBDC0EB487A85A2B575364C905A 40E70F0866ACF299D231D624949692ABA887D56A0D94065A3FD6FB30E9EBC027 755DC262C0912EAE5D330614DFC41F66B3B00461682C16EE71FFB95AC0670259 8C58380A0ABB59BD43798091F979D6800E92EFE12F50B499589267198C9E6602 5B4B6EBD6461F78D7F24E647F4FE4E4844460ADF4CFB5CF60B1FA0D42D02B836 3615E35FD7E0E6866206485BE7C4BC920431799F14C89C17D4F82E7ACF1C012F 40BA05E3337D56EB9B56CF8444402109A9E3DF297369C6B9CFBBC781E17DEA3B 68886370468B45066C6D6158E16924079282177EF599F66ECA50BBC316E9935C 7C8047EB708F831FCD7EC7BAC3CFF9DF196CA7CD583F9F69A65676A69D957C31 B98C1512D62AD24A9A860C34B9B5699BDBCFF4FAF504F3A6EE72F75F0AD14BEA 716C41BDC36A7B8213E98A57D120D5CD3E1009BC546EFFF690D73E026E7F32FD D60ABD6DC5057B11 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /UniqueID 5000798 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 13 /fl put dup 42 /asterisk put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B1422DEB13896DD78CB7B7F400EA5A6CD639D9CC828F 52311A11F2A84E566DE98826F1E28D55FB08ED70950205DE52C207CF14238446 084FB4DCE04C781858BB4E0744C023EB0B563769751AF1D807EED20E4AFFDC46 3C1510C782FD92902761F7557FEF701AA67B20A9B019C760B2BBA8A048BA3681 35DB440925CABA05B8A13B2D30D14FA875D3E200A018C78BE2E930457BC33AD2 FE3610314A268E9A30EB41F7C771758410E7D1179567B22CFEB5163F7CADBC40 4D40860E83BD5DF2BAB4822B55B863D0793D3B60F0DDDB6DB993711C4C7C2F39 31D02C7D8EE36FFF8FF2179534EE4F2DF388C96C9AF6978D929610EBAA615EE2 FA163D8C52E5810E94456BE63570A6878E791DF4958E60C057FAE0FFA4C2B7F6 192AF8786E14A6C6379C6E13A9C528A198B8EC8654AD69CCB5C209964A2B26E4 E636DDD749286B80A5C22474B49FC5C093A8215D49B30ADA383485030AEE93AF BABB827D996E563D1681528F54353D1245ED78D1915CFBB5595E3B9272ACF503 8FEE0B65C4CD9D5783F948ECAB51BA25F77DFA440C1D8B636FF6A15E6BB0800B AD6C7A22C4F0BF6C9A19F0E696B103D8150AAA337C303ABE10C87D87549D150C 2D9665F99AADD64A1B526D040C348128ACF21D2A5D1899C792CD26066E790D69 0A373E2593B4F664CD294B5D50067184BD254567C7E039257B015A8035A9BF1D A3F89E96EEA10C232662807A2DD6879D4FE3B18BACD337B4CDDEC7087DEC661F AC34BEF100A17D5655BF009AE2567AA2BA92CA36BBD484C0EAD74D4FE21FA8B8 5491388DA8672F56F41E7C30F3F197EAF49964FE2AF95552535CCC10AC5C97D1 AB5261EC411D9DAB8E026F2D94BB0B79E658B6BEC5B6B9E25FC7480E3F6D56A6 B9F108C12EED6C256D83F44963B5A238A2DF31D8DBCC094FD7E418A5FE9A7F0E B109CC36C470721D58E734978E0FAB9EC8F41861C3F4B3BBFB6C8F84A5EE765D DD4C22AB092309BCF1CDEFCA32AC3388BA7BBED00FD861FD4EF03149E02BBBD3 1C8018D21A106F904C843DA6DBAEE2BF7CD7B8D86847AC43F604FF64DF793204 FE06EA0B0C7ACD4CCC3065B8727D44E1D74D4DD6F6CB53063B7191A67366931E 0D23AA2723BDC2EF7D50C3A6F64C9B976F05DBC76408D53F62A405FE327B5B25 BCE72C26BC228ECADB62A519E63CF8A3B04C4D062450B2574E0229E06A9A7462 408BC437C205190531A6F12E5A6D4DA06FC9EF4DA672068EAA35774FD3FA080D 55FDE55CCDEB252BC73D67A3144134F9D69249F6D17E016EFDFE4AA09E5E046B F11E637EA411DE91500B463BCC7B19F950BAAE92EEC173269351CBE593A1A5AE C925C401F920FA1F0F83D852A52DCB027B5D3E57D9E8088CE19356FB19AC86BF CD2A136D406ADE7A5FE0CD8DCAF7F2FC3E8B4544CE2E95D3FAA8F989FC165615 7C6D210FFC9F0DF1C08D1B45D43A5EF2F93CDAE23FC90EF4E466EEAA3A4A3697 ABCD9C5A5BE58B59C0204408FDE6E4FB41344144B26DEEA6EA4F457FF8A5D2EE 8767F2D06A4B67F5A0EE498E1B41ED786DCE79EF41A944180B08B21E8FFAA9CC FB91BFBC9003CE1715236930AB6CD3CE157C0C58DB2CE030C67A50758FC70AA6 1B3C0216FBD233650A71AD9984998025F432635BC2E324C1B71DD7076E8F6198 D22F064B062B8BA565FE5691F3E012834B107C7122A77EE958B7E5CA7ADABCDF 5571F16E9DC6BFB0250ADFAB806C525BDF196FCA4FECFDDC0872C36F2554F408 87BA9EA3A28FA8DC3A9732C839C6C3E084658607A7BCDC6F41EFED4E2728D1E2 225C58B7CDAF34323B03FB947B5408A52569913C7C4161819310D93F10490D67 7D0EE1CDF4E87F168375AABC22FB587A8C5F6CB9A859350AA1DD4358DE9C6B20 EF559F152B300F2E64636F77F4A0CE640AF8A7AE8360D6212A5498CC8C3BEB12 F53AAA78FEEF32B34EC6843BF23B8E5D4CFFF9ECC814325EE583BFFEB41C23F6 BAABAE49BCE4B79189F29FDCA6C2D75038F3C6E4FBF49A91616E5D117BBDE868 689601C05D7B1E59897739A10A0A67B016276FAC9211F2DB649CE848A280722F 3DEC1E57A1FC9AED529C9149D2947CA2271511378A5C500E75A0CECAE417E06C 15B12747E262751D0FE4CCCDB3B1D67681A806ED0FB8826A0461AEAC1B7607B7 589946D0F4F143C6BA44D9D30EE39F819E58DECF85FFF15067F1D4D132026E11 E92D8982A412650F50E47FB2BE419BC956FFB44DDA87BC624A21A19AF4FF5D89 3C6677B1FF3A6FD710DEDED18CED4DF2B56795EDAD8A5B294656C004D6D11714 530C6C5ECB42BA9262DDC017F9557A26D6C9B9C7C22707AC15EFBCCFE44B5900 C998E96AF0F7D2AAA6C485D43341B61FA18B49DA1F6EE5701F1857C3C86A995E 29DB86FA21968AAE20BCB8688091455FB6A0EF0E9B6392EC7A5D7655D5D16BCB 1DFB0E4558B1004827BF9D4654DDF544C2FE55734033AFD5BE72C3D4C7B65FF2 20F0DC9D002B39E9907654ADE76C6657344B204313165C5BC8B83FF1491BDA7E 6131F288185DFCBDCA7C1A7FFC657CA8675C74E06E1AA443746A22008DF927AC 5881F10FACCAA1768DC7333028377102BC172C8C6CC9ABDE03E713998B94E754 3D6E2C6888AE1A2BC97D3889D7029A29024A7E7AD5ABD49AEB017CEC22E3EFBF 6B84D9E1AAFC10BF9C6FF5E48DDC7DEC1D2AA3E792AD3235B2F393B76EEC9A3E ABEE96053ADA7DA5BB45C95EBEF25DAA88BE8EEC4EF136D897FE64524C0EFE43 D63CA15B1FCA343EDF23ADDF377996A4E1A53267BC3BAF6B285A4CB005D2BDA2 5EFD69B3887328607E232028283DEF0044A7A15270769BA9107A4B79B7CFC6B7 3604CC85349B379376D5008A2B17273B813076C95C10B157BB69667A4824B683 B632253D2E737619FC6900EDA79B5180CC1DDB88B20635BB3DF6883AE42DF139 A1F6639DED98535F93ADBA68811EECC99FACE6071F52053B3AFD104F00313A55 0AD686E2C197E923037F46A827C47BA1C63758E4649CE51B20A4B2CDC8ABE57C 3D6C144DE423FBDCAC75123402DEAD6DE2FD83DC2539BF892049FA5D55DFAA1B 9C3AD6EAEF48405F18001E1B51A1E827C3BDDD90A30ACA4E5EBBC133E838C6BB 0C0C98B4CCDD56E0305FD2B57F8FB83428C7B73F2400F524BA965C41D96479DA 72A24A6F6EC62BA7AB59ECC4F95BDA474DA969AA4504CB6DBF29FFE4FA0970B6 977BE7FFE0FF0E55F07B54A868B77628D7BF68E94EE9464ED13145BDD22043E2 78DD0E6D657821E8C369C54B6B299B29185332B866BAFA3962E1624A5FA9057B 2DB20773F149BF122D9DED1698F0ED17B4FCA7DAF88EE05517C6F539DD21440A 77925C9B5CB194DBB9546D655EDF04D82C39B4895F9AF2306D106F1033BD9B30 11F07A7D57CD5B86EBD84F4EAD872F9814613E12BCC804EEBDAA3CCD8C89AFE4 33197ED56846C977C7954A258194F3DC4CE9093C895CBC8E827E47C8D34F6A80 19C0A62076AEEA73A5172717A20D0E524EDCD042BEC8F03D3E84A1A2C97D2BD5 E506A0DB7B65CD39A24B5247CC08127C60B9ED3B407086CB959D89FC4C2F8A93 B7AB0ECECD0120E1B5A8ECBD94EC12139D401D1E30231AB3A99BABBE4714FE2C A0CC0E9365DC01F66B64D4460E01E90AFF3359642AA28426B7CBE41017F8BABE 9235EDAD39964692BCF9CEE94C4F29ED3483640176BF591BF710BA93946A3C95 C7D4CF5D16357F2E6DE5A4CC7D7EAA546B9510943B9CB9DEC062B475FCBF55C8 5CCA579CAD0A2FFA8B3901820125D46443F6A353FE05ACFCF3FDA5DEC17CD9C6 8D6565A29B18C26AE80F5B93227A1A91522A0A93DB41DC5F9CC831735FF97BFF 0DD9C81020E1169AB923D51693C8B11AF7A7234E2F3D7B49A66C80645C2E4059 B7F15327A4A4D807460570438BCCAEB863C520DEE2DB628BFEEBDA37EFE63FF1 0D6EC66E7EE5F314E2A62E37752D0B8EEE6AE77E4255456CADA7EBB4EAC07122 CA742E1AAED581A1CE3158C790882134ACF3EBAC983A876C218643183E2E9129 98F8B54F1AB36F057416DA1D6438607B8AE7043F1EE1D25CBC0D68718AFEDCF1 9E0645079AF0B4FBA0F8B40720BF428CD87225C7FF285AEE6F048B5983F458DE 15FBD918F9198FEC7F9DBC08B1CAD5890684579E540E5A22D79CCAD378CA3185 2337C8006CB37CA031B719E61DC45138C87B47C880D00CB789127D4F31FEFE7B CB100BFC256ABEECA695D0DF90DD780F6BA088B74BF09AE7EF73141E7337C89B 69DCD842F5AD3881613EA235FD37DB2817E33427AECF0ED55BEEA7EF410C1376 7350BAF850481AC0635A9220EE2485DB9A35CA9544B79D067D4C82C8CE937AA4 5CE2860777D75888A90FB9603E2B4FDCBE41C011B45320054362A143ACE9383B 65ED71622EDA39FF82D8E88FD7F5E9D947663296ED93FC16A95F04961938B836 FB1267C5A512B0AB28B32292449EC3F03825409CD01007B7B28349B7B7EE496B EA4CC3B9A877BF627C35908FAA85D10AC7D9B9BB65C201E7E4B4C671236B3C60 B1CCE5C51BE24C2FA060EF9539CEAB6A640744CEAACB9AFAEFEA785AFF8473AF 0D0A134031F4A38FA62C154CC4FA4DF334DB857DA6774395F59CCE2915EB2F94 C3D803C2467C862FD10F6A7685A5FECBAAB4B15C12C7AF04029755FAF352F76C DE91D1EC35C345E0CDF3E808735A5A63C8BA55914099750C737C6ECA4F80AD57 02343BC5417C62B5DC9AAF73B5B6435744A983B8E3FF3F1305CC8A32C2301DE9 1BD2903185BC29CC5E1D79F5733D1D011A8015D03C7246601DB2EF01F0E3EAB8 CA11EA8A0A5C254FD12398089580CD9E6C53274D97ECE50370719E5CB0483EFE 210FAC6FA0FCD278369828B62A7EDE838CFEACF2A60177FDBA6E41CB5FB0D23A 57D8A8D455B1153F49064CDB898E93FA620735F3448F827055B8EB37074295FF 1C4B609EFADEA7CB1D8A6C3D57FD6D3DDDA663FE44736CCCA8E1E92B49A06E92 7616DFEBBD028713B618CAC526534B7E8D2275659E56B0BA20489EFB7B376D5D 72EDCFFA2C9C4EB029B53989F064537D7DC4A656B32B8BE82337930238D5C796 09DE101C6546A7E33CA597E4E8F609D22401239C22DBECF530874E7EEF014807 AB37D0882E4569B95D07E1AC3A7C37D75C1C6060DAD38CB8F6628004FB410A81 81F3D6F9D375B3A01C76E9A5A816A3BC4DF9FFFA5DBC469879D63BDCD499EA88 9053B0FC67214D53852D53F072A65098D5F4D21353CCF45A7C72B87FAB90F0D1 7A0A7C2785610C8A01EBCA23C8DF59A6056CEB54C7CED7ED2F6C35A65C9AB4C8 EF3E4753136F2ECA5D5093B70C4A70045DFAC28A854F0B96790849EA3E276C62 25B21178758B5769350F9A6380ACFC3726B4655AA6CF9EED9582B88706E6EC7D E82DFBB3EA1C9D3E39C64E1632AD04A6AFCE6DEADC7473C2E57FDC36C52DD63F 31EFD2F1645AC7C004D572655616FA55B74489CD7BC7B94B49D6690A6D6E29D9 6D39014FED4A381C1424BB4EFB306790942709635DB330D4DC506AC34E9E6375 2D54D9731506DED192E59F4BD5826DA59B907875C8ADF5402A969D3A1ECE6DD7 2C8F3F13B291F3E32DBF307F0A9A2F1486D7F72AB88D4D10C0B2058438D328B4 7F10A539111C51C8247CC6DA45F29DA7A70E981EC9C44531A748FC9DED39C4E3 B0A65D6DAC8423208B20B06371AAE8396BC29C9C3A49A49488F50517C0BCB217 566EFBF97F0EF490D3E0F3AFFB17C8BD4297A36B63700EA93C52365B0E88155B 9525FBFB909A649A9846A16F77E19225F9DDE5C2835D7426AFAD563CB7BFB410 5935CFC756CE19D2989A84F22CA3E9AA90621749AECA3C8A81702C418846AD87 CBA63197A06EC59179E27ECD7CC714E7F69EB20422E28F9B3CC032389950DFA7 27B63A98B7AD8EA93D178092061DA799F93A67E5B32199DEFF93910E0B9D4E23 E5C2C11E51CB75884081C918386B7639D79F82BB55DEFF63EDF40A04CA551F16 19F0974E82C34CF257776C9A6F694E5850B5C5BE3C5E61AA23AD12A03A4030E7 6A1F40695A02AB9CFCFD19B9CF3606B8F84F2C0327436F2C79E6A6DC9399E5B1 27D646FA17BA49440B8FC385FCC45EC0A5F6731ECA5645538D909C4E3733E6A1 41D02CB5C7072D729144CA7C1B009862F18EDF7053E10185CBB8F6E0891BDBF8 26396E41C63F0DDE5D7A24501EAAB8245C50D0492220ACFF27025746D11872B5 00B93A493B39E118D666C221812B6BEC53DF9B5A04AA992774D03B0CF6DBEFF2 838113D0195ADFEBC6010CA8F578F0984A5DD3C857500DF8C6C77A1136092B72 FF85EE75214628BC2513DC49FDA1B418724BA32FD67CADE1C5FEFB1F3248365A DC1E5275B7A9E243BBD0E595CFCFA2900CD2F53B72B6CF3D489C410E00F3A105 E38E714498930C5D0F57AA3388B0A71BF3B003B54BFA359955E433247B0463B0 5D19E7D67C38263E366844533EFBA2EB840FC31D0DE664753FB3927D9C914683 A1FF0CD308D9A07AAB051BA6681A316389F9AB00C41C7CEA170A79DC52D605F4 965F8CABD2D68C7795055DD0E391386ACD1D0E532671082D805DB80C8A461673 3CC4AF55C1ED96E3B5B7C708470E487C1E2ABE73B8BD55B7FC7E39CBD3AC38A3 1B3CFB02BEB17D460A1FDFA29A6EFE4371B996D2E4CA5DE19DF3912309095775 C792112C84BE3765FAF21BEBFA04CDE0CEDB38BD6192E23F81F496895D7393FF 1073BA5C3A8C865206A3CB68A98A3BE586565EEF92786C99ACE1FDD50D60C103 A936D1946B216300939904B4AF2B8F4D63B4F7255535291109D55D8C39152DFD 0BBBE256FD2F892362D90AE9CBDDA6F729427848FCF97424122452F4F15664EA C7FEE09C6B19995BFA5E5F57714F01C892DE78E3EBF82824E38C53B8877D515F A126028A78DC60D1F7866540EEE5DC1077F72A4A04C4053FE19A686955D91D11 0513CF5F50081F3A267BCC6D30F1B0D543C392B4008E56C59CB0E7AF7ADC59E4 16EA70B6F6FDFAAD57999AF5D192CE1C71C398D5A8D62A821422A9EB79224FFC 9403BE1E9B39E87E81AFD3E08942BD0EFA615E921CC865C7E13968EEFFBB96DF 58502A5E3A6B80EED40FA7EEE9DF32B60CE70154B5F9DC4265B4AAC0F8B872CA 659FC2162A0BFF85F55C45152964EF354A49B743CB88CA1C0550CA213F523B5F F8CA3E0E111A18C61850454D8B5CAB4BB9FF96F0E10A1C92DEF460ECDF06F71B E09EB607B2980A08187C6DF5BD91F63DD006AD0C2F8A3DBB5C9BA0897E711DFF 3B4BCAF937785A3CAE7A554013A71E7D0E7A2DB6A652A9859C6C475D9F9D41C0 25CA2595350B3F013FC3C152D3B3C511508A4E16452ACFCB4DDFF29DDFD01D3D 09F7624AE4A50813D70229FA5B012E2689254EA3BFDECCD3DB9D43B2B77FAD26 007A632D14845C7B2656242F0D78AF4883F632150367A685D6045C0AB7EC32BC 77E0BD7E208E2887B211E2100756CED3C8FEBFBF37D5DB921C7A1AAA536A746F 640EB7808987F463F71BF35A0EDC8CD2DB64C0854AA3CA221B73627A48FD7E6D B64F7967B0153C1BBBBE45A4073864F143223F946672181D1A8A97D3EE4DF997 633E5348F62EF49BD8DB1111584E38F7735A6B205DA659ADBA809842DA07A86D 15AC9439CB432BCB8AA975A0CEA982F27F7AFA17BDBC07BB5A66AC79CBB2BB4F 7FF4E5494D71319122CAFF0DD7C139AE2FD469DEFD76AF10A93CFE5C32A41C21 BC116AD3E2F8416FEA532BEB14033D93E1F188FCBB649B21389A38EDD20E039A D0491C711C671B2303D541A1CFB4724EF133964BB1EBAE34C0735755D8457393 6F0D6F0DACAB0DC46AFA06FF37A42080737F8AB7829BA634C43A47C538CAD587 0449F1AB88F5B1BB56FEB516E8B43C15E0FB4DE1225A21A1698FFDE9FFB22124 228165B5115679E215876B0B29DA91B21747D304262ECF1D9394F2DEDD8D6A4E 3D3FEDE27E41B64A179A226A806263972A3EE59F21BCB40E4B332EA7FBB2A138 E34F68A0DBDC6F4562F9E3D2FADC975BC0A8EE8D8780CBCD3873A49911A5ECB3 A3E081BF3ADF691C08E04B6316845C5BC2E42DCD519D71D032163E32D48A16D2 D5223CFA7CB6525C13A28217246F1578A5403F509EDC3309140F7BAB188FB97B 9C35B6B3B10EEE8A5C8048CCA9A4BEB397A4F57817B4EE4CA387F4ECE353A1B2 F0C00CB0D563C4C664561D817D4F7261145425622D09818C7019A12E191FE6D0 F4647FECE6A520C96FDFED6A365B668D335CFD199FE9549171DF5199AB83A3EC 83C7B8C00DE6BF293287AC50E5D0A81284647881C083A7879BBDBF68452EADB4 149ED27C084F2E7ED50D556FE790372F4629073C7634062868C0F01954043259 3C98E2F40C4A2B277B9BEE035DE673FBC8B3FE5542FAACF076C5F875F3AF5ECA 501ED2AC96892754A4DC0845E847756EFD5407AFFE0AEEFE8941B22F8B3C2C85 DE6CA54594767E0B8596FAD54C90AE3C4EFA793120D0F308032D0E7DC3206EF1 0C681D9DBC0FBC26330D5B44C0BEAF71F1DCE7E69EF10B18A01A29EB8D83FC2A 73B4FB230A3036D527D7F6DA5903420C7A6283FFC85E51083EEE085B21B94468 BE4AF9BC00636ECB2B75B686EE93ED5E1C42A7B00FC2F845C531EFC55EDBB672 0C26C9D446BE286149B7A63CACDE7D20015D21CF191A2A9F42218E31A82679CD F9255900BE3AC0D2D33398E0F70D1B3486E541A0B6169FE7A94BE41B2593F639 2CFB3489ED6C46B9C81D564D0E92FF2F28FCF99D1D4738316FA44232D8291A84 EA761C63655548D1A892F281F839085554D4D3E98884458B3C183EEB6B19B234 D887657FA7F09D6918930207EC00EB91FA17D8D904D9C577606880609F6C86F8 40D31234EFFBDC53059FCDB658FE10A1E1167E1BEED54BFC71846DBDE91CD695 75C3572DAC845B5199EF98BEDD79B08500B08012B728502325CDBB8013BFFB1E 088DBD1AE35601F4E9B2A4BD7E8158596A47AB71D66F35EA9575D8321D17503E F28B0B5B78A99ADCC93CCBD359DA2CBEE7CEE3B087FEDB4667C9F6E8B82BEA09 9B5A3ECB3A09A03CD6C7E12160CD9D70B18A885ECE9B3E91C1791411893ABD3D 4108F07CF8BEC447895F931F33561256330BF27F73852446045415066A5817DE CC1BB3C3718A79565127354CD687F5FF1EBA545F286C7870260882F92870BAFB F3F9C7D44FEB6087260BE7851BBF2779EA23B55C22BB40B610493070139FAA4D 439613BEEECD27538EF4068436BD321725E7C192776C9AEEBC63CC817E9192C3 3B2F08C429654E590CD321C73699642B678011B2042027E811F18DCED3F04B1B B71DC8C88EBAFE715BE890E9B418236CFAD3992F118118CEA637EE33D4773B7D FA50CE749EE655CBD34DE654ED2C599B423AC51BE1C002B7065A80634E514896 4896E7C6D88BE2B1F77A333F2680BD616C5B511F624F48519A64FF0C6367D012 006F86BBA304AFC449D8A44B782804B2BFECA070C16443EE01B7D347A00815BE A877AD0842B71807389860B01837A1667B1CA974C702674B9923F477AA3A3A2E 7C68840F054C33E4C961161EF96BEBD0C22AE027D6C66C1512502C09EE2068D9 E8DB81F1B3BE98A8D5378773344A8075FD17E6ED95884D1450D841127C94E8C1 547D7E5EA2B1C7CC0685C7140CC128F24D36AD6E9304490553F57C0BF0254E96 64E8BE7D5E66A3707F97B62DAF7FFA0AF208B1E048CF8C1C9FBDF47758BEA9EB 8A8746E826B8057B8C2AE11AE60C8BA1857BCA4C910F35D9F10BBC4196AA4B09 BFD5EA6DD1144D26B7F890E4879C5B5771EFB5430FF2CC75A7338532AA4EBBB6 99E319B3CCB5558A149C541A15462DE5AEE476682F356C8F22EB0CFA3EEDB735 00B7AB93075F8B08F0A590279395358AA45B494E6BABA94AFF8FB367C80934F4 7EF060E35F81F66E223B1414D05EE51AD56033EEDCBFA3148E8DE3D2AD5F9896 6207C8D9DD991262C989EF4FF4BA86235BFCB7BEC2C730AB6EE2F5771D92FB32 FDB235CEDD9C638780268C77EB39AF593F5DF2E1F5906F14D53544D54E94905B 2E4096AA8AA145AAE060E76CB6D6097F6D1048A15B38B2C58568C325471CE949 D7EF40FA6168CFFCDA2EBAFC3BAD6DF806A94C22E58C73C7C181CF0ACD76AE12 9749989C31BA69C7965DC0D8F82AD88B68C18372C68E1491ADF11156778ADAF8 5D4F99A31F105F1C3B60E7754F6CD843675D6BEFA92F0D1E5C66227FB44EDE14 1FC8430DFC4A78DB842D74FD209CB8E31FA51E21237B2FDCFEE3554FDB48899F 44090D381999A8251C873317A95EC0D40ACB3B072F8F08E43E9080F7AD582176 B65F5A582E30F703F2A0C47D1808FEB30F6E637629471BC3B41B5D31593AF3BF B828EDAA29AEF1CE8B6591B19F22A9C5C8E2A22B55F0F5DEC7E6B8FEA0674109 DFA90E882091ACCF93762A05148F8DFDEDB896855D674FBFD692FDF0B8FCA95B 722BE85B32C776B59A13D1A2554F39DB9701E3B3D71A560E05060D0DFDAB6D6F 34FA50CA902AB69D62188D39809A5D724D887AFA0963BA6ABC05ECACA701FA71 BE8204871B373A02E8B91E110A17DC99FD87CBEDD32E9A4C48A344D157EC3D21 665CEC66C67B204C9D9FBF164C026F1915D3A766DE2A2DB4CCD990A463A93906 1EFA2DAFF7A7947F2931B5655E4DC0BA96EB7E5F598D435F5AC39FE5626C25CA 8ACBBD0CAFC62D33B27A350B866241061022A0B446795B9EDF3D7980BE2A1465 8E4840818466F9CFDFEE203E565B6E6EE9F933884F84EC1E23A8644CE4A79E79 841662C13FF90FFC75FE328E65D0284C7792BA60E1C1D0E2CB3ADD2DA5AC1EC8 CE9974A7210B748B60C28F7F655355EDAFBA2DE76E1157950C62800D65263B2D CD97D6E7836C0EF36E2A2B7B916E8D58B35B32776D24BF4E125EA9DC3C2D9DD5 2CFED715F7661D61F59A282622FA6C76F044F6501B33FAADE63D747A72D847F8 F99013B92BA34A89E07C61FFF30CED15B2E616EDA7B0B0D42EFA3916C7095975 9F2F4450D8144B2D718A3C230A4C2F787D01BC12170DB2CA342B3D1F97217C77 D8CAA9E4B48515AF06CC97C03F5750A8B41A645FB7EC8D88C460C86CC304FAEB 87421BF12B8EB0C2096B17DFEA3A88F68767D69ADCF4BD64CE1ED3302871E855 5E12A7E7A04D0D0734DDA06493D557B2FD8BD3A23712AEB746E0DB51CED4388D 55A67F19F85BA6278E4912C7110D855A246A8C540EBE1E4239F19DC97F928552 F6C126AEB1F11F4E21D96BB525C70927F92A7754992277B53FB85124D0408FBB 9A6FD79F32F972CB5CBF16CC7FA05ABFD4D739FA496BE03A427072DB47918B50 43ADEEA672A4340F63FE51AEB92BB16AC4AAD2AEADB2A9B604CB00063F235A83 14C7BC354A2DD6B74F13E82CC1E5B83830F60A0FAE73897B8E12D4FF851366A1 6C0761E01B7C71F9F7DB08DEBAD2C72705DAB8DA582AA2F0447A3C8AF5671685 B6372068D64F25DDAAD9D610141569704CD86724839DE2E3BA2847DC3466E69C 851F7764B043FA59A4307A434631DBA05A77D988A6A3E2274CB5A8E6BF71B50A D3C52395BB8CB53E9007B2F67B98677EBE4F233274414432B8B19F969BDB6D55 B202EC30D26608A13D1F19E323148EE41F481EC45E38A69D8E6BD54F3CD5A91E 55ABAC1492AAC8641B0173011C5A5DB8847EA2A6F96E01C400F6F138703C14C5 C6C1501D1EA70AB40D32AB3196A07E940F93F96560B3F0FCCF70409EC14715B0 42F53DD3238E1237C2A966BB5D32E76C7673C21E2E0501B37FBAEC23AE80793F 9EDB34CB6716DADFAE94AA34D206D38248E541A2A725B951990270B105793603 6551779DAC75BA668368DD12D1C1064A7E7CB744F81E6F63133427F01A4A2C36 BFD7080607CA7C4EC983F47977A762546387DF1DB87696F922E19A7C1FA1214A CC77A031A170A8463CA0F8E5B74522745659E412122CD7F96FA9DB92BBBD5F85 025FF8C64861237F7ECC20775F36375C7B3C2F93B53D10DB66A4950F8FF9F93A 27F086E7CD3AC08533101F56BD358B042D60522FC8CDA226C8170EF702DCADF3 AFAB85B8429DCCB9949BB2FC5EC59A4D5BA820803A9D58CB0F27E328A8038090 426668CEFCFCA4ADDABA1CAB0E0C526E153BBA35A154B4E170C25356A553B5C7 F924E4088487FFB070100C3C13F3D492BCE5FC75798F3906C8CA0B38B9B52733 0783E8615695E6F53F72EF10EF84E7B6BA3EAF3832F1AF96CD57A4B13353AF83 8ADF52C46480220E4CA48D5BB8BBF9EBC9F0DF4149790613DBB0A7E3FC41BBE4 655D1669645BCC6F6F319C490E8C9344A3A086DAC8AA514B0E4A6002C7564CC8 119074B5CDE906BD7EBC7C14718F2113D11A28FEFD1C94AFF1B142BA226F6637 6A0E546E8FC0EF0E6B8DB79553628574E0A7F08AAA6321025F4ABD65472705FD FD3999052A4D4F8E4584771EACBBE44BDBD9ED9A9123D2A3A15F96C18AC8C7A5 6C17BDFCAAAC60BF88D651888DA06F227F567037E2A55DC24C6131A94C89012C A91F160A0F7DAFA03B15E502B51C0DED7FDF093DF4DABAE5705E5823DBDA1C11 380972EFC4789A590C34CE915B30E27604991017A95E18D07AA8E52428F5EAD5 560F43B0326D715CB7A486201E38FEE71D15E19F23493374AEC3051DA6EF471D B6F70E319095E0D74B6D5284F4C02BEBB4659D35F6854E225CC85B252BB2E3BC 1FD3CE07B39200BF9E5072C05B7CBCA2834CB5C07AE54305B96458A59E9CCE4A BCA04748F660DA3BF17D2B915CE0E5B1D327C65FF8B645DDD1FA9D0D48F9BCAB 243C1603E9423004FE6A55440300178BD9C433780B453684E6E159FBA89A1A7F 4C55BEA025B9DA02BAD177E925E3848DD56684D6D7A306D8580F9B454DD394B9 766F6E623F1E233E658E0DF75D9666238B166292663B770EDD964B910CF01426 5E296C3533AA94DE3C7C7A5A7C66650CE904429640C38937F4AD35E29CA2CC34 CD2B4F23B41EC48501CC6695B7A592572C7805950F21014BB34F07785EFB9B46 87F6C196EB98BC0488BCF83D0E35E74DC5D28F631FBAE2AF84ED00F9478ADD41 E55E6478709D133C00E9736A5B1244B3F7E1AEE4144E1C12962F841DBB2EC103 8D6B21DEE565927696C30B32786B0BE9EF519CF5CD028D1D9DB8D8DC69182DA0 9CE848EF34B3AE757213641E0A5DA73D0851E1B78A34D13DC88FEDAE88E6A36F F093E4F8C24EBC3C9E49BF6A4E73F4626D854D9EEE82472F7CAF7C70E6233374 7261842E3CC9ECAD676580F4FA0FCF333D00EFD80A775578480CAD913E6DE76F EA34E2D59E5C313DC36206FB843658462800DCF5AFFB5B569907F9614D993852 20DAF6F9EE86C6DE02C734EF4C399023865AC14A79A02FAC18C6DB6224C7D525 A16240E267FA34BF98285B923C1FF866E21C9CAC949A55C53A54A0CB0BBE0F00 41D3B45490BD44FD8ADDA5B83EF45F74D68ECF3406DCB2E212DC93801D571DDF A39518F7FAEC9B48DFAE47AFCCFB1E1C6FF0F88EF736D17F7A786E1904816C09 02CFF0AB99C67AF35A7373ACD5AD404770FB25EB4492996EE31F9E015E0D1D35 91BEF50A2808002231F85CFE55EFB82E25355E4747007AB4F8E13CC859F692A4 6274A88508498CF85A6407B9D604C0EC3E82E28D8EBCD654EF88286164800DF6 5DE8617392C671942DB149AF1CA200B16BD11C9A08DB458F0F5FFB345EA6404C 498E9D5F9974F14118463D5A43A7E882B272A6215560F7F09FD7B2041C08006E B9154AE60BBD9293909621E8085F24C506B1381858B9F23AEBC2F5B3FE9E8B46 B0D1F94A8E3DB22B42135731CB33B8BBED9B0717A0E9D46800F1E38D9DEA3C0D BCF7C39527556C9C8DC7385180249E6FC4F4D7C0FF0D6E8B441ABF5F3E630782 097EEF387F129D44D7B228F9B1406C6CC2096215CA07454B341DFAE7EF513DA9 476F91A4FF009F4AB1DA8F0B1D9A1AFF2609A37B709525EA79897EB7AE543E9E A6ECC2C09C4B50F2C05ACF7A115E6CED8A532908D1F29092C519529145130524 B57C13B5A58F3AF9F07ACFD03B974534CB7E0AAB902627099C1C2AC04F6BAAFC F74D21BA432022214F300A1DB1BD681BFB27D63119B0A1CCBE145395C15264C7 82520AFFF25975EECFB1093766E4D29B233367F842B725F40381439CB20A6172 75B4BE58EC62C2AAAEAAF52A3FB9383064E38CF69F44D6BCD5938DB6F7160D26 4537BE55A15193F4DB40937960C186B6BA5258A83B53B40986B72819D85A4C8D 691EB3CA85F1E83E1333EC2F6B46068EB59F89124B6151CB22892B8EB702078C 2924DCBC26F745ACDAAD84FA33254EDD96D6E61609105A65117D49C807F394B2 014160CF85023EEA048816572EAA27183A02CA9E7F2D6D732F1D0012CED3313C AA2CC72C658303B22356912EB88A49B0343E9479CE65881E65DF43ED475DD0BF 7EA2B1C2BD686213841019D221A675162D02E78816B9D3659B1BD478EB28FDF2 D4CFD378F4D6EC98474E3B28177DDEB81889CFBD29F476D674AD4CC74C8DB777 FB1E175B03F65A59658BBF3A0E0B8039136041DD1ED2A25AE05888DAE3D20FEA 210D2A2EAFDDE2ECAEC1E7F085E47C9AD131B40F1A59C3CC0A7BCEE24E2B18FA 0D5A7BAA52C4054B54B6A9033CC3E346407B69905470AD16E5A74680795E56F2 8697231A95068D78AAD19297734E09B93B0620F58AF72456BE2C0F7563E578E5 4D3E03D4891460692127ADA0E0676ED9FC379E1EB2C9A73254D5D4565A9E6E61 FF5CD7CF907E31A30A2A3D892B73DBA3A42E7FED37EF8BBDE88E3901EF507E8D C99F6D32DFA4799DF696F9541FEC06CCCF4FF2B2E374FA11F8BEA527D116857F E904A85EB3B876FFA226C570DBBEE692224782D90827B22FBE62CE501BEB28CD FA5BAC22843F80B64C01EEAAD90CC2627A90945C9E946F4E6BB1FFFE9F39A806 052746A36D4E591090D72206620BB8E38C05A088DC2467DE7516C128127508BA 746416EB47E3ADC8A9B77F2FA2E80CFB614481D9F232949CE0E7A746EC6671CF 86DC2FC324E6A97398E72F74F6B730E3998ECF8FC047954E3D0AE023A4536F77 7E921A53D3A732E80EAB5D9736F131FAEC1A269FDEF4C26996A150ACC14B0723 72946BC954B9E3A8878DECF71CBCB2C72111F5A9A55614EBC9E2D01D7BAF74FA 3BE2CE3DC63B6A993129A627AC8CC80FD09248A8F8838019F66C99B4271A682F 386C8CF988290B5C07E1133ADD623C6B62F719C128B3D4F33CF34F1A44074768 5C9205957EF01DD3E4F818E8DEA19B520B9ADA0D62DA4BF4BD36F287EAB92DF7 664436D8282E9938B47394DE9F4E91ED8A9DD0CA6887F404D90DAC9685C3EF4F 5855DA4329A1BFB3A61F064F61197AFD54AAE2752FC1FA2D233E4952E6F77BDE FC97A410B543CF4D52A3FE02FCFA5C4CF9A37EEF946E2077BDBABEB28372FF34 B4F037F4DADED2EACE026F6535CDE726EBF37E5E4456B7548E2CA899A73A4615 462891A41E81824D4A9C0732C4B02BDB94399F202B7EED6E0F72D81532374173 D0B6C753CAE68998EA8D869CC05A6F7AEB9CA27AB0044201D596C3265CDA1B79 023F49245B0757E69EEF30AF41018DE7B3D521EC4E4AE4D304C1A4BD3F01E406 1AAA7E0062B61E711204A5BF5ADE97885AAFE3F8375FDB8EC3B21FBC1EA92520 7D0E19BE2CC2FD1282A98791F993A0D96C9141DAB5EE8CB671ABC34B1E9C6435 1E65E95EEA4DD47E0C1CF9C9C687C623C8EB2916FB86973C2469616B9A0CF8A6 3D7F2B327DFBEBC63C7058DECD155475D297EBF1445E0D72D03493DA80020845 BB7E57BC1E7C0A03114EDFD47D95BAE5C58D9168ED879B965F16BCC424DDC51F 4659AA4FF9EC747811E937DE5A7832C1BA3DC99379CA36CECFDDF73697630805 728EB9E00F5BBA4DA9C1A71BC3588BBD6EFBE78325B38C9FEBBB35FF6AF34B68 604B713746811458FA69AFB294FC71620732C7C53A8E936F2333565861018476 390548AAC2C080C642A20B6E4C03F6A50E438A11211E737AD15A0CEC2BDC3C7A 082A90AF6AD020A8AAD22836B7197719A374758305D39EE8ED0A1A28E5981719 9DE1CF42A2B8093223789402C7DF57D9D85232311A1104063D3CDCC7994AE6E9 3208AC98DF93B4D0572DDBB1526457292420B85AE4B45EB5D89B9A078FE8DB1C 84A8AFC65D712ACE75770929F58092E9D1FAA8021EB562A83AD3976A4F293B1F 78F622CB4771F383FCB1AB8CC3FBDDBB8BE2F04A4E25395C3123AF12C254F5BC 4DF587C94797236D4D17CC6F94DACCCBDB46F1F5ED3E99728F512D0E51D69346 9412EBF63747C346962EC8DBFAD170D5251F1F3C93BA929D7FDA7F5C83845F0B 12E294108AD94F87D3157E6024A8F24E935B61D119567ACD5F7E9B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /UniqueID 5000828 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510 6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D 098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337 900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B 41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149 7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA 2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD EA43428C6F79C332342E15F75B08A1ED360B3511F823E75AD49BA7AE63B19238 2AFE8FAC2715E2FDC895E95036D23127557837506A3B542B0E4651CE2B89C252 31EE8ADC26E2C04E8E30A9CA12F066CE01953BE7867171FF6C7E834742C36C3B 58E74E4B482CB85FD4D24DB03D753F260A585D552CDC9E1941446F2F5B45FF24 2DA4932B973139F328E7E92828B900BFD398B6F41DAA0D6861C66AA7F5E3299C 87A5925CE0E0F9E09AAE0792954A1F2C0AAA8288DEEFFE579E38A3CE8A943EB4 55322A87C1634074EBEC25F724DC1BCC1BC10458CA6C4395659B0DB6B612C151 557CC669D8DC37769E59A5AC6BF061C79FEE265DBB59520EB8FFEA273601D1E8 2984B8AE31AE343F37D03E2BF97DC48AFE50BB6138C7B9F9B5E28672A37BD8F5 8F8C98DC43DB22C6537028798198E2D3B0453ED72487267D653DD50F1BBBDA92 833A987A95FC1F275B90B581B4BB62B6863A4CFAE37F715EDF3EA5A33679FEB6 4847ABB4B3D170C275B9F1AC3156D731198DACE0B051674E85B758500AC9FBEE ECC75EBBD85F8D62AAA328FB09C6526F853077AEF7EFBFC2B6A29D6D508B1E19 EAFA4C67EEE44045B9F15B9762B3DDF5CE5C18B23A5C2F73A1F6DF7F8679AB78 843AA41FD2A7DC02B45B729EB76C66A89F5F76E5C4A0C0563B1EC5E75D72EE35 A7F1FC89216B60D82F6F2B8DBE85E4FF4D63712C689E696F60B52AB622C2A4F9 37C380775EDB72638D3F81F61D8D74C76D813DDFFF35ABD9A502F2BC7FF65754 2A8660A5A53E0CDC2E8A95B6E33CA153EB711DC796D313C8183D707D3F0E3EE8 BA65E0FCE3F1C07F3D93F77056688B5496AE35A6BA0B59619DE78640A8C3F7D9 7DC5E94894E1E63A7D80600B945B1CCA50F1B85F57673C6CE09EFC4E229D4635 48AB466118D273BAF7C1B52A067A88C00EBFA7FCB378F1575BC0145F294E6F7F 8007602C6560476FA20BDB91831B22404DB1C4C167594B1216C25226D262FEC6 F5D0DBAC4B8D743C669CFF2068CB9BCD2DAE8CD6EE1B33BBF7514C4941AFCDD6 89B75F67339B25AB6E267BCCC5E2118879AACCECB5CC2865802BDB4D7581F5A0 E81AB0F7AA143FDBE743E16D028E46BDA94AC2CBA77DBEFBFA32E462EBCDBDC5 B86B63333A0C05C65D4B351948D03668F7A86A8A1388C4604675EA7384F3398E 49404AFCE19832C975A668FBDC29D06268085022982F01A2DA1DA8B8DD5F4584 75F98D7606BD6A45A403CC026A4BD1AFA63E1BC1034C1F617E14A1EE9543BF7E 1ADB8019F7AFE089150EBFC613C414955363C43E0D82ACBB01251C070E7F1040 602A58B2BF55094DF2BCD2689320899F987472681D0933A4BE78C2ED69D76E60 2C437D4D3EA9C8D25588F1689224D92CDC65AC636325718AF7EA47946CFF07C2 DC0FF0BE3642ABB0CC38BEB60E00B41D45DCEE44A71F11B99CC4CC22C5A0C62C 074F3C2FB093560B7FE9B3AAEAF3B563D1D646046174516991A196A915CE6918 CEBF16946487E546C6E433A5C5B9FB7D5B97F2B4B202F892CF5121199EB48642 4448B45EDB617EDB931969D53B9C200E954B4A6DA6617E3A56D72EF332FB941F 4694BAF21CAF8473EE2767CB5434E955C5A08DB04F67508AA1F5CFAE25FBC9B3 9FA855CBF2DFBD04C656532230B8A2A0B33C7EC74BF3EB2877DA369035C976C2 F3227355AE2E740152A344AC5E0CB3D04A1D4273A54A35BF8B1F24797246B5E1 CFD5D260F4D5E5131120AEE3B3BF1308B9E55026C969C5451EDA76E0F06E75F2 6DCC258952B63FE0B7B99B39D5563AB4F7CDE57AA7490C71E3CD9EB563E0A9C0 8C54E64E3B537A901395E33847C6FF75C2B6FC3536E8F990C18A6623A00AB558 272AE4D142503BF0B82A13EB6088D27E0D8B319D6BCF1E0E8EE94C9ADD6D4645 A5B0FBD17AF7CB1E1ADDD2D822A76F6B9338B6B459D4A67631292AA028A8B976 8F9771C890FFDF7751F3079E36D8F92AFB62BBB960A45891B5FABC8E5BDA1348 5AC23D29879FA27A392E3DE732D78EFF7168F2FB7B0841C8B3729FFA2B515885 C699663626473D04C1421BE24259C91B9FE8F63DC99929D9741F37E67CF70E38 3C489E823CF0F62B020CF576753734C989AA1A360A21A137DFD644ED2197032C 3DEAB8E7A1306D8DF7E36DDD52A895488E63701D6A69E634EC862DFCDAC01BA2 56DE73FC77027F65B89BF3188686026D0C2A2F22DA92B8DA0F6476F6252D8066 D9F0AEAC5E6F09120646EF77CC81FEDB1BC8E3197E9CCA12C941152387E71286 E00B8ED61DBA85D2EF5550663A1D2C7233D6FDEDBE947241585C4B9580E7A700 5081C957D863FD2DBDBF56CE8DA67E3D6A8A47C3BF38478D3D4D72A803DEC0D5 797CC1ED5B005CFE4A46CF549FEE756419351B89B8DDF13BC2EC18939901BA5D 37ED1DBCE8DA072938DFA9585444FA6F09CC32C7098E2ACCEEEDF7D117235385 BD95CE9C7C997491613FA253743E7D0B03348072F516B7436A78435B19C828FB 1712254A679503CE81FF1761ACA3C3BEC0C1E2736A2908C7A8D6F30D86F7DD00 1BA2200908FA4180273E50863CA552868F1EE5EC1D8D47AE159B4A42C65F3D7A 73332A618CEA966BFA32B9AEFCE9C7CD4678B2301FC1DB91964486B62E28DD60 11D123711C6A2D190F6FB97ECE36679247507514606287D049455AB9CCF928CE CB2C62D55BBC4DFB1F8A033B7D42D8D1119D71F616205A91B48C7C83CB2D0B39 15824D6F324A9CB64E6C09D65C478F8753905E1A0B094D310123FBB7CBC4CF71 08D6381228C2B6C393E8055AF7D226FFBD9CF19379B4E7F75938D5A39E3410D5 4E2BB197AD202DB623844B156AD0FD80AE4CB0E8B7831CECF25E15753FE27E19 A8CF57C78C6D1CD021C6FED91E81AE1F09F1F9CE7D8CB480EB559729BAFB507D B99DE23E7D3A9FD04345DDC7E8E498F2229CC33A991418E69A9366ECB375C42E 69E1B73DC94401E5E7AD9CFE8086432F8026224CD42D9A1EFDB1B3B0D5BE74A9 186F30C774BAF35F25D4B0B1C9C791CAA87015D3A7519184FCE9DB2439A98A49 0DA01A0A9ED463382DAAA05555106902836A46E3651871D20B65879902C0D93E C8C3358A8F64CD0CA264614EBE741ABEC13F29CAC4625A1A7301889D9A994416 24BC8C7816579FB7D7AF946DBB3D911457CB2D0CE74BD645CE388BEDA28CA1F6 EF4DD197628362D38ED6499657B1E45D1DDE460ABE0EC838DF3BBD2B90FD2245 6DC211B771E1ECC3E294F1B767BA0F3D041BF4DB159EF01C3AC7C00281A675A7 BECDF043A5EB64CB6D99FC8E7876EA1216F005A7A63EBA79549D5B6C33FA47BE 38466B6D62D3D00C52D9BB7AB23DD4A4C896D3A5890E8C57B7ED5A627CC7EA4C 0BE63CAA285E1A35808FEE0ADB1FF9EA3B18EC1040560B1FD950D7EF32F7F958 5ECEFC1C01A98E4DCB69934F9314316D3CBC0AD4A1F68346CD40AE6E3A804EA5 7286646FB2A7ABFE62B300F72A0484CC51D34D3FA2B292D308D605576D56EFAD DB68453A08E5B45720C99964B02A5F517A7CA00F6976CF1F6CAEBCDC1772568D 14129CB82DDE0705F45EABE56EA4DC5AC1656105957F509F2E8AA72FE5C2F830 38F2BB415C413D54F348903AA6B614A3AE99EC4B800D4AA2677BC588B5813A94 F5C2FC3F8B09E58B00DA92C2946D5B9FD8DECF4E0B49BF16A81A6F19EA1FBA6A 41FA0D679E6CA980C541395DD15AA0C203335ADF3B0D48D519816D46681993D4 A857426475A068E6C30E75E1201524D6B5EEA7BFCAA429AD5DA4504B245B23D1 9E5E2498B1F63A7E2B7CC42C3E5B75F075006FC833724FC05AE4157F640E7D1F 48C35EC8DF3DDD461EA211E48B2B3E628BE4A523680BC78FAC41FA1FCBC6FE81 17AC84A895CB2CC9CAE4D77FE1ADC8C8A4797A3F1D00E090282FE2116D5848BD 1E61B36613A89BECE27188CBE9E0C7ED75385BDC63BBC9C55E2191F1186917F8 423A10D8326896DF44D7B2A5AC320B1818771EFCC9C20D7E5BD5291ABE762A50 5148AE49289CF337FE6F2B6A369C557D6AA731ACF3BB97E38306F77A94C6EB2B B7846ABC4F32E886B0C66A806C27B4EE3CE94297C19714C889943921426433BF 19002E5C083BA89BF31D8F5A2602BF058A8C5C78DA421DA74A4E2DCE034D6510 C4720403654A84BD4000C074522F9D2D7ED733AC6B46232C69E21496575EFA86 D24B2A8DC064071F35AA926565BF09130B4F96A8150A2E3EB36355535D866B67 17B9F62C47A065E28261990D79E64DE2E4C5CA8E3B6D215925200D982510F150 8B0562589AA66EC47508F0A5AC15B06078A83B911C15232963F6B59BEDF57A57 1322DB18C44E6CA9154AF9084CC02095987FA65AFB0D896551415EC9D45BE803 BD428A107A492BBA8AD075A89112B3FE451399E061AFB98FBDDDEC71DA7BCFB5 2833E5299591FC86BF14F7B324F7F3EBAD36DDFB77313F1ACC40D0E4805D5B04 FB965C08CEC682A07412118A17C4549C0A96F397C3FB466C6D888F5A407D43B7 761962E8CBC5C7E27AD0A3605336CA17DB4CC1593C64E66285117EF7CCFE1A17 203C9F1ED41FB4FADFF14DE66F78E87A9028C853A757204F81CC7F425FC7F8A2 509611BDE84D0F549F5614C814C3E88851F9FE74506EB52C5BCEE4F21DB52BBF 31940BC2156EF38908869732038D1EA6E39B5417E547DC412CDB0B1F1DA09E65 07B13C1C9C962D1A9F7A0EE6187B92874964B3C5E20AFAE716E33C3E999A4FC9 462899118EA9CC961A7D704FE46A872BCF77491F70DEE94E1335196FD787579E 30A01C29CBCA08F301889C27910B03E20B4DA1363F6F5896007F71CA90E1DC57 9C6BE8898B3E2AC201895AB1223CEC56C003299D9C0947320DA9D9DA474D59F8 1EF5F4720AE0FCA1A8E55A2B9CD79801FECDABE6E5FDDDA140226714304D6EC0 AE2BDDDD1A02E3C01D6A46682D801A7BD61C1737358EDAD7D993D9006B56BC43 2467A2A0B58C33FE4BCFD8DAE939184D45DFC23F5B597D788F14319EB52B1FCE DF8C405005CEFF39D4167B66082A38209A7A8E1D5E73D87CE049BDA2FFDD49C6 3DA02E5D6405E2F54C921F6E2CF9F1E18268DCE0D0C960D477C8525CE5FEE998 82ACB08902CF6FF1E437468C519FDD447A2661C381A999E8724AACE9F461E629 998539472CC9355A9E55989EB7CE1FEC9D313A160294AA55910F4F8E55BFB917 BC77A51055CCC1772D0021AFBC1E79B289B539ADC3E99D9632919F8BD17A1B91 BA25661178C5EE19D4CEC42744B52F04FFC27A2E3C044BAEDCBFE020A896BA3E 79A6451ADECB932F183CD599F694DC8393E1F878737113E3DCBA11F22D46F028 6FA7CF148F2CFEB03F61D40D6A0D30451723E7C91D4BE58E6976FBDB89D50F4B 6EE65D2DB6465545038E094E333A015E79737CEDA211F913D831E78032B2626B 0FB1E7E20CAD4E01BF398E9C4965BF91136D4AE83029E5F3A6339CE3C8FB64DF E5925D739FD720AE38EFBA0E32E74317DD35363F19EEC4806EA840F2A77AAE2C 8752B4B786378B134F5A376A1F0BDF8FE6F0B247D4A28248D0693988D696E7B3 4B937A41277C56A182BC2BE08D57939398C3CC125A74905ABE953028EB2A8A0B 9BEB795D484BC979809506C8FA55AD6135FA66A0FAEC7EF53F5F91B37D8515DB C93CD4EF0A12CF0F9C3CD06C57FC9646A15810910EACA53BCBAEFF4AC568CD8D 13DE144FF06FB3F1A6CE76ACC351297DE4D7E755561C1EEBBD39F1351D1731C2 16AAFFB586C680F588B62AEC37650017928769C53E032EEADAE9E5361F28F78E 1841C1419290D1A453C63EBEFD3C99B5F8A72548393E2C6B1C95A43CB19EC099 4DA22BC088E6E95FC177B3D00DB7B3652D8C5DF1682DE9C3D22796AF78149E7E A951D0A46EB6EFDA46594BF4D608E3C4BF9406EC7A09D3A8D6623D79FB609222 C8B1257CAB63C810A5C6983BD16FE6322E5CACDF56B91FDD46AA8B292210D3D4 B59BE801C1B5A425CF5F5774968D510C017C3EA4D7B86C8555A96D4F0163DD8D F1FD9DA5D9D15999E626DB68763C5CD22EF18C747BCA003DA4354FD484A56552 D0A96B7FF1958035AE04025DF7F67EB52B468D63D735CC8EA34484B7E18136F9 9D4C0966C79990ED629A87C033A52F4C96295E3D3CCD4B476188101B94E214B0 7B4C4463CEB3C81E8838D0FFC9BA36CB0A39173105C90BF8A6FE12A0B3749045 7CA9DB29EE500088F3FFD13BAC41782854B25955B23118FF880BF20D66E30C4F 164FD408E5E5636976D9D2686192BE5AE7B2C96A911C290B749344C0B630DF9F B3FD98F2E62707541A128058A5F22E05922103A39A95C1B7F6F807A5F3A21A25 50EBF0F5950A45C9B864D2785C24F30108BB15A3E5468902D83B5F3CFBE1E359 BD129E494D769A371B26967AC8D715BB742EA20B414D5ACBB4B25A5770A80E7F B315EC73D3AD78C7BEC227661C2EFDCED86C4240D38267BF1EE26C506CF00382 8E7F86509AFABDA5ABA519C6CDA52703B40DB3502D72E8308725E660F107F4A9 026DFE14CF4BCFD2F4832F6AD1550CDBDB5644CA52899F4641C5897D4F907931 185D13C33184D78EAE54BCC164076DB74D99F52C064216C7FAAC977CFB69B150 A78A2052E4EE7090A7465324648976E1C3F19F146328BA460DADED492AA74BFD 04AE08FD24AC871D21CF7CC808495ECA5E73B26D97EAE5F9BC435D53BF2C1BD9 0A9004BFC44EBBF6683D52781943814C3C942BDD9BF95F1661761119B49AED7B D9376B6124A4DC87B9D7DDB2386974A6E02B29AC5A994617F3F988B692EDC47E 6C948C5071CFE0D680E018950F545831B5EBE3C19BF384A51DF56F3CC7757B8D 037FDB95F4D1878C407B8C1DF1CA9E9236C468E9B8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /UniqueID 5087402 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 110 /n put dup 111 /o put dup 112 /p put dup 115 /s put dup 117 /u put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB099C6CEA5044ABACC419174664232E97B29 ED32362D219AF109E5D8CA751EB1F9F31BDD08C93AE018E5269AC327FEC67D99 588CA80F068AEB94A7B943BAD5EC8D89C0B8D153B4345E77A5AD9B4522208A33 DA92CDF765B44123C6EBAA06D629EB9E8D0FDD29BFD60EB582CB369474767FE4 C0947F27DCFE0C8BD3CF5131E706E02ED136DBCE6363CB5CA637E08C3D832037 5AAA88B746B6D915EE72D7B458C55598DA6284F362D2DBF06C51DB50A9FFFB5E EBFD69D8D06AB0A6DF2D03F6E14FF290B1A1531109E43892B82B29395910021F A6EA74B8420A14FC189741ECF67F81686BD3C5559DAF75DF9FEF3346CCC35AC5 37A1E30C2602945974A2359EE3183A1AA568978F7732C35BE2B9224C27161748 515E5899B0387F0640DE1D712F390A8A026FC5C5A893E98F46B418B7B32BEF07 AD0EEA87737D929180B2BE697D0DFD46CF307E4FF76BC03492E66633F1357848 AA5A594EB8CC5913E76602C9CF8B7428F67965D5BAAA29BD6C978EF6B22B0BEF 4203B223443554971EFE558FD2F51D01B35D2194A1F6820293385CF12DC1ED73 79EA6082A30796D5EB72A67C5DB42A01F18CCBFEBE2F10B091C43C2CBACD8914 D665B340281C1EBF92249FBDAA577CB7769974B669DA0B74E822EE5DCF3A32D8 9C6714D8C82CE9BF3F16E6336094BC55381E73A96D45B7A70AE00F9CB8348E08 2A64E4B40B3BD0A653B423C5D3C1ECB62F5E05393FB8C9B0C44AB26F6BF796BF 5B51601913014ED708B97731A5642351ECD0F6CA9C06832E0BCD0055E9BA51CB 7242CD34AF0B75F3594AF9235C42B974074665C5B6C934B08E5C7F55638E7DB5 312BC541A8000E69A92ED6C63AA6485A50DFAA1DCF9B0DDAD23C43DF22F3000C 0CBF6F8F64F37BDF8F8DF321FD8F42C3FF774A388F9C033572B177A493814ECC BE19595AD285F11763857603EAE0D6AED509225CACBC49351E6BF1457BD11490 EDA1C3DD6DE8C7036464CF80FE562CDA51ED2EB92BBC79252FA79EAFE5E6BD4F DC16AB83B2C902A9027BA4AE30ABADFF6D513BEA850FF35416E76FE62D8E88DC 69F0C60921B33BA59FA3EDC8F532B47FF2A5E5680BEFCDAEA4474DFA2F8FD68F 74B5837A22984A7534A5321B83459E436AE4C498702EA14A77D3F78DAEA47BA0 1BE6CFAD95132683BCE0601F3EDDEFF5207FD5FF3CC9093ABD946CC7C1076DB9 4DAF08C682269CEE980159541D92FFE484B7440E5AC58D7707BAE579605D1EB6 42C396807AA13B3ACEDBF3A465CBD56F076FA9319E43907B6522904F92483537 6102700CEAA52EE916B80AA4C5F8C98C9AC9557F97784F075D37A83649D632F5 82A519507162012A671F3B4DBAC454D920606E9C87CADCAA1172A04E445A28A7 0FA9545E5FFD15302664B5C2C4F479C8C760C2A015F5F5CB51EC6C0260154D37 4A65B01E58B458ED0FEBBE74884C9DF7D50770153FB498E94F65475A5EA6A687 543DEA3156D3E5CEE23923120DF4D561D2C082F1F3BFC5039A1DFC1C9C3A328E 6F879AB979F2C177FBA357FD63F8CC21E8AF632D6B01A3AC3EA7DE91C17B8120 42E78A1AA2E04581B1C434A8147DBE81A87C73782DAF4BD5F309280FEA22DBAF 586AF386182364E45D7DEAFFA74E338E875B64B13CFC909B30E074D777D347ED 3A58A82D5F6A6E913054F9FABFDD9ABD8BBF54DC3480F3A90965A0081092714B D77604CC7275050DBCCC800BCD8E2BA540B18CB07AF27D66F8887A571685600F 3FF8C7A4966A8CF8CB25DE0495CD4E048999ECE6579AFA82D1644FE160E2D3F0 EE7CE89045332B172425D7D1443E8DD9043A12042ADD7EC106CB4DAAEAB310E5 85F93869A1C519DC0E3CF8F4C05030F0BF7054C5859A74ECE7D6FC5644C5B84A F3EDF0C4B2DCDD0D193599CB3CA00464A90AB55674F884001EC896726A9B374B 3A73AECDCBE06895E87FCE6267091C6CED0E779DEC36D8CC35184E00247AB90C 37161FFEE7CABFD7499859042093BCAE22D6B811FD16EFBC8AAE6283881C12CA 98E0792640063169F76B18EF543AFE7951E82EDB1DB9597F2F9C959B69943379 CC7F5BDBD1BAFF7C77AD8D504D5F17E1B7DFFC515AC237748D33FB6B9D7DD903 2F3E9768290A90A5FC5EA516A94C1885B17676D33CE4124CED1359E473305B02 03C28731C0FC52B18FC14360C9494FF2A86AEE929E4022ACB78C02ADD6174FD0 D35105BB00643F6560A9CCBB3E5CE2F79F0EB9BA774D27DC476867C991598380 F77CC0444500CF43DAB8D729B31EA5A3184F178F82622A8B711A9CA6A770971C 521C44969E814B44D8E1927C283E6A38B78D7C258630730EA463FEEEAB263838 2A517BA176D1C137AAE7430532FFB0FFCA8BF110DECB42B1A7A9457A9ECCABFA D6CC11CD925518857AAA8498CEF35377CF92FEA77C09E6AE25DB2D09F1E355BD 7F7F5C72A76315F3C2B6BEA1AF7BA5D0E8000778A0FB2C60FF677ADBA9156A11 A5B0B7AE92DB368571C040FD7A29C3DF384CCC29A0E9F40FA385630D23AC1E97 C15C06848761CC7D19D208BC115A6A2933056BCEB3717CE2488E86D0B0D6D276 22B2FF1E77FA719372BE62A5B6E10D3DFCA57DE70AE16C57718B86C58B6A7F3D C6DD45D7559F9A0ED8889E707FE7622997F2D573F7688621245E0FB3D34A08C6 40B72F4BDA0394CBF90735B9E6B3928AD56F50FEF9A5DA8B195008164EC03424 7F5317FB8157C33F6903FD6D4B4728F82F1B02046DA16F4285DF088E08A136FD 1366494E3F5AEBED4B48B3B9072BC811A700940FF4B2A51C0434ABF225B37BBF E4AB11F394332D66393420D4B843CAB6AAD9C32418CFE6A2A1260BF430E61176 4B1762E3C9F1727BA47AAE4C7589E7099A56F5E1CB6BD64C0C8D026ED60EAFBC BAD1476E98F5F12ED94BDB1E4B0D8FE9E36CF40DA6F5B2E1BC41EF5F7CB49825 EA5058FF7C49C5FA11F9F9F575AB4D8237FFC2573F94B695CBE9BC44A1BB26DD C6E55627BA16E5197CADA519CC7302DBE77F1FE4CF68C558D8F6E264 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /UniqueID 5087386 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A 60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E 71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 F1795501020D5FF0AD25584C1D47BE08ED6CE96278050BA67680A3B973613647 A93FAEC756FC253B3693FA2D6491B276EF45751EFB306961788E7C15297A5822 AFC5A2DABD0DBBFF0BE135267EA6B9D1B4E4760ED14895FFE1F8C3F564830001 EFA901B8442BD2D98561BAB9A0FD939E0F856E4D2EB04A9A4496704109B8A84C EA06AB0999427B3B1BE776004AE906D0F22159C051D88CF573A0255D99B56781 CF326CD11919AA40B096769CD6D0ADF3ACEC7957621084ACF21AF1F265416628 86B67FCBDE9370D4F5C6F5CC67EBB0A2727E074090DBCA459AFA1A4778AED4C9 AE5400775223E684BFCB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (readline.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 133[34 41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 1[21 43 38 23 34 43 34 43 38 39[38 38 38 38 38 38 38 38 38 38 2[26 21 30[43 43 12[{}39 74.7198 /CMR9 rf /Fc 134[39 39 2[39 39 39 39 2[39 39 39 39 2[39 39 1[39 39 39 2[39 19[39 27[39 39 2[39 45[{}20 74.7198 /CMSLTT10 rf /Fd 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fe 129[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 3[39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 33[{}86 74.7198 /CMTT9 rf /Ff 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fg 133[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 18[52 52 1[52 2[52 52 9[52 16[52 42[{}33 99.6264 /CMTT10 rf /Fh 134[65 65 89 65 68 48 48 50 1[68 61 68 102 34 65 1[34 68 61 37 56 68 55 68 60 7[93 1[127 93 94 85 68 92 3[96 116 74 96 1[46 96 1[77 81 1[89 87 93 7[61 61 61 61 61 61 61 61 61 61 1[34 46[{}52 109.091 /CMBX12 rf /Fi 134[48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 9[93 1[68 66 51 67 1[62 71 68 83 57 71 1[33 68 1[59 62 69 66 64 68 15[45 45 1[25 30 25 1[45 28[51 51 12[{}51 90.9091 /CMSL10 rf /Fj 134[44 1[60 42 49 30 37 38 1[46 46 51 74 23 2[28 1[42 1[42 46 42 1[46 84[51 12[{}19 90.9091 /CMTI10 rf /Fk 134[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 1[48 2[48 14[48 48 1[48 1[48 2[48 48 48 17[48 48 2[48 5[48 39[{}37 90.9091 /CMSLTT10 rf /Fl 135[56 2[56 1[42 2[51 58 56 4[27 1[58 49 51 1[54 1[56 97[{}12 90.9091 /CMCSC10 rf /Fm 197[25 58[{}1 90.9091 /CMMI10 rf /Fn 197[33 58[{}1 119.552 /CMMI12 rf /Fo 135[85 117 1[90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 10[122 124 112 1[120 1[110 1[126 1[97 2[60 1[127 101 106 124 117 1[122 14[81 81 49[{}36 143.462 /CMBX12 rf /Fp 242[91 13[{}1 90.9091 /CMSY10 rf /Fq 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 61 75 60 75 65 7[102 1[139 102 103 94 75 100 101 92 101 105 128 81 105 1[50 105 106 85 88 103 97 96 102 6[37 67 1[67 67 67 67 67 67 67 67 1[37 1[37 44[{}57 119.552 /CMBX12 rf /Fr 129[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 33[{}91 90.9091 /CMTT10 rf /Fs 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 71 4[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35 25 2[45 1[45 19[76 51 51 53 11[{}84 90.9091 /CMR10 rf /Ft 134[102 6[79 3[108 1[54 2[54 3[88 108 1[108 94 11[149 2[144 3[151 1[116 4[152 71[{}14 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Ft(GNU)65 b(Readline)g(Library)p 150 1418 3600 34 v 1873 1515 a Fs(Edition)30 b(6.3,)i(for)e Fr(Readline)e(Library)h Fs(V)-8 b(ersion)31 b(6.3.)3218 1623 y(Jan)m(uary)f(2014)150 4935 y Fq(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F) -11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Fs(This)32 b(man)m(ual)h(describ)s(es) f(the)h(GNU)g(Readline)g(Library)f(\(v)m(ersion)i(6.3,)g(6)f(Jan)m (uary)g(2014\),)i(a)e(library)150 4523 y(whic)m(h)39 b(aids)g(in)g(the)g(consistency)h(of)g(user)e(in)m(terface)j(across)f (discrete)g(programs)e(whic)m(h)h(pro)m(vide)h(a)150 4633 y(command)30 b(line)h(in)m(terface.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fp(\015)f Fs(1988{2014)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f (under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fs(i)150 299 y Fo(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fq(1)135 b(Command)45 b(Line)g(Editing)35 b Fn(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)79 b Fq(1)275 778 y Fs(1.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f (Editing)9 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)39 b Fs(1)275 888 y(1.2)92 b(Readline)31 b(In)m(teraction)11 b Fm(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 b Fs(1)399 997 y(1.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)9 b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)40 b Fs(1)399 1107 y(1.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i (Commands)10 b Fm(:)k(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b Fs(2)399 1216 y(1.2.3)93 b(Readline)31 b(Killing)g(Commands)21 b Fm(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)52 b Fs(2)399 1326 y(1.2.4)93 b(Readline)31 b(Argumen)m(ts)14 b Fm(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)44 b Fs(3)399 1435 y(1.2.5)93 b(Searc)m(hing)31 b(for)f(Commands)f(in)h(the)h(History)11 b Fm(:)16 b(:)g(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)42 b Fs(3)275 1545 y(1.3)92 b(Readline)31 b(Init)f(File)c Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)55 b Fs(4)399 1655 y(1.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)17 b Fm(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)47 b Fs(4)399 1764 y(1.3.2)93 b(Conditional)31 b(Init)f(Constructs)e Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)58 b Fs(11)399 1874 y(1.3.3)93 b(Sample)30 b(Init)g(File)14 b Fm(:)j(:)e(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)44 b Fs(11)275 1983 y(1.4)92 b(Bindable)30 b(Readline)h(Commands)14 b Fm(:)g(:)i(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)43 b Fs(14)399 2093 y(1.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)10 b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 b Fs(14)399 2203 y(1.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f(History)20 b Fm(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fs(14)399 2312 y(1.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)25 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)53 b Fs(16)399 2422 y(1.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)26 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)55 b Fs(17)399 2531 y(1.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)19 b Fm(:)d(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)49 b Fs(18)399 2641 y(1.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)14 b Fm(:)i(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)44 b Fs(18)399 2751 y(1.4.7)93 b(Keyb)s(oard)29 b(Macros)23 b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)53 b Fs(19)399 2860 y(1.4.8)93 b(Some)30 b(Miscellaneous)j(Commands)26 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)58 b Fs(19)275 2970 y(1.5)92 b(Readline)31 b(vi)f(Mo)s(de)22 b Fm(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)52 b Fs(21)150 3212 y Fq(2)135 b(Programming)46 b(with)f(GNU)g(Readline)17 b Fn(:)k(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)62 b Fq(22)275 3349 y Fs(2.1)92 b(Basic)31 b(Beha)m(vior)15 b Fm(:)i(:)e(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)44 b Fs(22)275 3459 y(2.2)92 b(Custom)29 b(F)-8 b(unctions)10 b Fm(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)40 b Fs(23)399 3568 y(2.2.1)93 b(Readline)31 b(T)m(yp)s(edefs)9 b Fm(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fs(24)399 3678 y(2.2.2)93 b(W)-8 b(riting)31 b(a)g(New)g(F)-8 b(unction)15 b Fm(:)h(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)45 b Fs(24)275 3787 y(2.3)92 b(Readline)31 b(V)-8 b(ariables)23 b Fm(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)53 b Fs(25)275 3897 y(2.4)92 b(Readline)31 b(Con)m(v)m(enience)g(F)-8 b(unctions)14 b Fm(:)i(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) 43 b Fs(30)399 4007 y(2.4.1)93 b(Naming)31 b(a)g(F)-8 b(unction)13 b Fm(:)j(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)43 b Fs(30)399 4116 y(2.4.2)93 b(Selecting)32 b(a)e(Keymap)21 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)51 b Fs(30)399 4226 y(2.4.3)93 b(Binding)30 b(Keys)c Fm(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Fs(31)399 4335 y(2.4.4)93 b(Asso)s(ciating)32 b(F)-8 b(unction)31 b(Names)g(and)e(Bindings)18 b Fm(:)d(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)47 b Fs(33)399 4445 y(2.4.5)93 b(Allo)m(wing)32 b(Undoing)19 b Fm(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)48 b Fs(34)399 4555 y(2.4.6)93 b(Redispla)m(y)21 b Fm(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)51 b Fs(35)399 4664 y(2.4.7)93 b(Mo)s(difying)30 b(T)-8 b(ext)28 b Fm(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)57 b Fs(36)399 4774 y(2.4.8)93 b(Character)31 b(Input)13 b Fm(:)h(:)h(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)43 b Fs(36)399 4883 y(2.4.9)93 b(T)-8 b(erminal)30 b(Managemen)m(t)8 b Fm(:)18 b(:)e(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)38 b Fs(37)399 4993 y(2.4.10)93 b(Utilit)m(y)33 b(F)-8 b(unctions)15 b Fm(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)45 b Fs(38)399 5103 y(2.4.11)93 b(Miscellaneous)33 b(F)-8 b(unctions)15 b Fm(:)g(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)44 b Fs(39)399 5212 y(2.4.12)93 b(Alternate)32 b(In)m(terface)17 b Fm(:)g(:)e(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)47 b Fs(40)399 5322 y(2.4.13)93 b(A)31 b(Readline)g(Example)24 b Fm(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)53 b Fs(40)p eop end %%Page: -2 4 TeXDict begin -2 3 bop 3699 -116 a Fs(ii)399 83 y(2.4.14)93 b(Alternate)32 b(In)m(terface)g(Example)10 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b Fs(42)275 193 y(2.5)92 b(Readline)31 b(Signal)f(Handling)10 b Fm(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)39 b Fs(43)275 302 y(2.6)92 b(Custom)29 b(Completers)18 b Fm(:)e(:)g(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)48 b Fs(46)399 412 y(2.6.1)93 b(Ho)m(w)31 b(Completing)g(W)-8 b(orks)24 b Fm(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) 53 b Fs(46)399 521 y(2.6.2)93 b(Completion)31 b(F)-8 b(unctions)19 b Fm(:)d(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)49 b Fs(47)399 631 y(2.6.3)93 b(Completion)31 b(V)-8 b(ariables)9 b Fm(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)39 b Fs(48)399 741 y(2.6.4)93 b(A)30 b(Short)g(Completion)h(Example)c Fm(:)15 b(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)56 b Fs(52)150 983 y Fq(App)t(endix)44 b(A)160 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)446 1116 y Fn(:)20 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)72 b Fq(61)150 1386 y(Concept)45 b(Index)18 b Fn(:)i(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)63 b Fq(69)150 1655 y(F)-11 b(unction)44 b(and)h(V)-11 b(ariable)45 b(Index)29 b Fn(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)73 b Fq(70)p eop end %%Page: 1 5 TeXDict begin 1 4 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(1)150 299 y Fo(1)80 b(Command)54 b(Line)f(Editing)150 532 y Fs(This)30 b(c)m(hapter)h (describ)s(es)e(the)i(basic)g(features)f(of)h(the)f Fl(gnu)g Fs(command)h(line)f(editing)h(in)m(terface.)150 764 y Fq(1.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 923 y Fs(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h (notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275 1058 y(The)35 b(text)i Fk(C-k)f Fs(is)g(read)g(as)h(`Con)m(trol-K')g (and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h Fr(k)150 1167 y Fs(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol) g(k)m(ey)g(is)g(depressed.)275 1301 y(The)g(text)i Fk(M-k)e Fs(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter) h(pro)s(duced)e(when)f(the)i(Meta)150 1411 y(k)m(ey)i(\(if)f(y)m(ou)h (ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Fr(k)g Fs(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s (eled)f Fr(ALT)150 1521 y Fs(on)c(man)m(y)h(k)m(eyb)s(oards.)40 b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g Fr(ALT)e Fs(\(usually)i(to)g(either)g(side)g(of)g(the)150 1630 y(space)h(bar\),)f(the)g Fr(ALT)f Fs(on)h(the)g(left)h(side)f(is)g (generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 b(.)42 b(The)29 b Fr(ALT)g Fs(k)m(ey)i(on)150 1740 y(the)c(righ)m(t)h (ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i (k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 1849 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f (t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 1984 y(If)23 b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fr(ALT)e Fs(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g (Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 2093 y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g Fr(ESC)e Fj(\014rst)p Fs(,)j(and)e(then)g(t)m(yping)h Fr(k)p Fs(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 2203 y(as)j Fi(metafying)39 b Fs(the)30 b Fr(k)g Fs(k)m(ey)-8 b(.)275 2337 y(The)39 b(text)j Fk(M-C-k)d Fs(is)h(read)g(as)h (`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i (pro)s(duced)d(b)m(y)150 2447 y Fi(metafying)g Fk(C-k)p Fs(.)275 2581 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g (their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 b Fr(DEL)p Fs(,)f Fr(ESC)p Fs(,)g Fr(LFD)p Fs(,)g Fr(SPC)p Fs(,)g Fr(RET)p Fs(,)150 2690 y(and)d Fr(TAB)f Fs(all)j(stand)e(for)g (themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) h(\014le)f(\(see)i(Section)f(1.3)150 2800 y([Readline)c(Init)e(File],)j (page)e(4\).)41 b(If)29 b(y)m(our)h(k)m(eyb)s(oard)f(lac)m(ks)i(a)f Fr(LFD)f Fs(k)m(ey)-8 b(,)31 b(t)m(yping)g Fr(C-j)d Fs(will)i(pro)s (duce)f(the)150 2910 y(desired)h(c)m(haracter.)42 b(The)30 b Fr(RET)g Fs(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i Fr(Return)e Fs(or)h Fr(Enter)f Fs(on)h(some)h(k)m(eyb)s(oards.)150 3142 y Fq(1.2)68 b(Readline)47 b(In)l(teraction)150 3301 y Fs(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g (that)f(the)150 3411 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g (missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g (a)g(set)g(of)f(commands)g(for)150 3520 y(manipulating)e(the)g(text)h (as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h (just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 3630 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m (ou)h(mo)m(v)m(e)g(the)g(cursor)150 3739 y(to)35 b(the)f(place)i(that)e (needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g (the)f(corrections.)54 b(Then,)150 3849 y(when)24 b(y)m(ou)h(are)g (satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g Fr(RET)p Fs(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e (at)h(the)h(end)150 3959 y(of)33 b(the)h(line)g(to)g(press)e Fr(RET)p Fs(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g (of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 4068 y(within)c(the)g(line.)150 4267 y Fh(1.2.1)63 b(Readline)40 b(Bare)h(Essen)m(tials)150 4414 y Fs(In)31 b(order)h(to)h(en)m(ter)g(c) m(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 4523 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo) m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 4633 y(c)m(haracter,)f(y)m(ou)f(can)g (use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f (delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 4767 y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g (and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) m(yp)s(ed)150 4877 y(sev)m(eral)e(other)f(c)m(haracters.)42 b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h Fk(C-b)d Fs(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 4987 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g (with)f Fk(C-f)p Fs(.)275 5121 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m (haracters)h(to)g(the)e(righ)m(t)150 5230 y(of)d(the)g(cursor)f(are)h (`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h (that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 5340 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m (haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)p eop end %%Page: 2 6 TeXDict begin 2 5 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(2)150 299 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i(created)f(b)m(y)g(the)g (remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 b(A)23 b(list)g(of)g(the)g (bare)f(essen)m(tials)150 408 y(for)30 b(editing)h(the)g(text)g(of)g (an)f(input)f(line)i(follo)m(ws.)150 562 y Fk(C-b)336 b Fs(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m(haracter.)150 715 y Fk(C-f)336 b Fs(Mo)m(v)m(e)32 b(forw)m(ard)e(one)h(c)m(haracter.) 150 869 y Fr(DEL)e Fs(or)i Fr(Backspace)630 978 y Fs(Delete)i(the)d(c)m (haracter)i(to)f(the)g(left)g(of)f(the)h(cursor.)150 1132 y Fk(C-d)336 b Fs(Delete)33 b(the)d(c)m(haracter)i(underneath)d (the)i(cursor.)150 1285 y(Prin)m(ting)g(c)m(haracters)630 1394 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g (cursor.)150 1548 y Fk(C-_)e Fs(or)i Fk(C-x)e(C-u)630 1657 y Fs(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g (empt)m(y)630 1767 y(line.)150 1920 y(\(Dep)s(ending)29 b(on)h(y)m(our)f(con\014guration,)i(the)e Fr(Backspace)e Fs(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) 150 2030 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g Fr(DEL)g Fs(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i (underneath)d(the)h(cursor,)i(lik)m(e)150 2140 y Fk(C-d)p Fs(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g (the)f(cursor.\))150 2333 y Fh(1.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)h(Commands)150 2480 y Fs(The)27 b(ab)s(o)m(v)m(e)i (table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f (y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 2589 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m (enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g (in)h(addition)150 2699 y(to)j Fk(C-b)p Fs(,)f Fk(C-f)p Fs(,)g Fk(C-d)p Fs(,)h(and)e Fr(DEL)p Fs(.)54 b(Here)35 b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h (the)150 2808 y(line.)150 2962 y Fk(C-a)336 b Fs(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(line.)150 3115 y Fk(C-e)336 b Fs(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 3269 y Fk(M-f)336 b Fs(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f (where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) 150 3422 y Fk(M-b)336 b Fs(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m (ord.)150 3575 y Fk(C-l)336 b Fs(Clear)31 b(the)f(screen,)h(reprin)m (ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 3729 y(Notice)c(ho)m(w)f Fk(C-f)e Fs(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m (haracter,)j(while)d Fk(M-f)e Fs(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m (ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 3838 y(con)m(v)m(en)m(tion)32 b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m (haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 3948 y(w)m(ords.)150 4141 y Fh(1.2.3)63 b(Readline)40 b(Killing)i(Commands)150 4288 y Fi(Killing)35 b Fs(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i(but)e(to)h (sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f(usually)150 4398 y(b)m(y)g Fi(y)m(anking)35 b Fs(\(re-inserting\))28 b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 4507 y(`kill')32 b(and)d(`y)m(ank'.\))275 4639 y(If)g(the)i (description)f(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g (text,)h(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 4748 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g (\(or)g(the)f(same\))h(place)h(later.)275 4880 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i (in)e(a)g Fi(kill-ring)p Fs(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h (consecutiv)m(e)150 4989 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g (killed)h(text)g(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f (bac)m(k,)h(y)m(ou)g(get)g(it)f(all.)43 b(The)150 5099 y(kill)33 b(ring)f(is)g(not)h(line)g(sp)s(eci\014c;)g(the)g(text)g (that)g(y)m(ou)g(killed)f(on)h(a)f(previously)g(t)m(yp)s(ed)h(line)f (is)h(a)m(v)-5 b(ailable)150 5208 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) m(k)g(later,)h(when)d(y)m(ou)i(are)g(t)m(yping)f(another)h(line.)275 5340 y(Here)f(is)h(the)f(list)h(of)g(commands)f(for)g(killing)h(text.)p eop end %%Page: 3 7 TeXDict begin 3 6 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(3)150 299 y Fk(C-k)336 b Fs(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s (osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 461 y Fk(M-d)336 b Fs(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h (the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,) g(to)g(the)630 570 y(end)j(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) f(b)m(y)g Fk(M-f)p Fs(.)150 732 y Fk(M-DEL)240 b Fs(Kill)31 b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 842 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m (y)630 951 y Fk(M-b)p Fs(.)150 1113 y Fk(C-w)336 b Fs(Kill)35 b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 b(This)34 b(is)h(di\013eren)m(t)h(than)e Fk(M-DEL)630 1223 y Fs(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 1386 y(Here)42 b(is)f(ho)m(w)h(to)g Fi(y)m(ank)47 b Fs(the)42 b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43 b(means)e(to)h(cop)m(y)h(the)e(most-)150 1496 y(recen)m(tly-killed)33 b(text)e(from)f(the)g(kill)i(bu\013er.)150 1659 y Fk(C-y)336 b Fs(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m (k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150 1821 y Fk(M-y)336 b Fs(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h (the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h (the)g(prior)630 1930 y(command)30 b(is)h Fk(C-y)e Fs(or)h Fk(M-y)p Fs(.)150 2132 y Fh(1.2.4)63 b(Readline)40 b(Argumen)m(ts)150 2279 y Fs(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f (Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 2389 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g Fj(sign)47 b Fs(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m (t.)71 b(If)40 b(y)m(ou)150 2498 y(pass)33 b(a)h(negativ)m(e)i(argumen) m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m (ard)f(direction,)i(that)150 2608 y(command)g(will)h(act)g(in)f(a)h (bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g (text)g(bac)m(k)g(to)g(the)g(start)g(of)150 2717 y(the)31 b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fr(M--)f(C-k)p Fs('.)275 2854 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g (argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i (digits)e(b)s(efore)150 2964 y(the)j(command.)42 b(If)30 b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h (\(`)p Fr(-)p Fs('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 3073 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m (e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h (started,)i(y)m(ou)150 3183 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f (of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fk(C-d)150 3293 y Fs(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f (t)m(yp)s(e)h(`)p Fr(M-1)29 b(0)h(C-d)p Fs(',)39 b(whic)m(h)e(will)h (delete)h(the)e(next)h(ten)150 3402 y(c)m(haracters)32 b(on)e(the)h(input)e(line.)150 3604 y Fh(1.2.5)63 b(Searc)m(hing)40 b(for)i(Commands)g(in)f(the)g(History)150 3751 y Fs(Readline)22 b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)f(the)g (command)h(history)f(for)g(lines)g(con)m(taining)150 3861 y(a)31 b(sp)s(eci\014ed)e(string.)41 b(There)30 b(are)h(t)m(w)m(o)g(searc)m(h)g(mo)s(des:)41 b Fi(incremen)m(tal)35 b Fs(and)30 b Fi(non-incremen)m(tal)p Fs(.)275 3998 y(Incremen)m(tal)c (searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e (t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 4107 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s (ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i (history)150 4217 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g (far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g (man)m(y)g(c)m(haracters)i(as)150 4326 y(needed)i(to)i(\014nd)d(the)i (desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i (particular)150 4436 y(string,)g(t)m(yp)s(e)f Fk(C-r)p Fs(.)40 b(T)m(yping)29 b Fk(C-s)g Fs(searc)m(hes)h(forw)m(ard)f (through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m (t)150 4545 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g Fr(isearch-terminators)33 b Fs(v)-5 b(ariable)39 b(are)f(used)f(to)i (terminate)g(an)f(incremen)m(tal)150 4655 y(searc)m(h.)71 b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i (a)f(v)-5 b(alue,)44 b(the)c Fr(ESC)g Fs(and)f Fk(C-J)h Fs(c)m(haracters)i(will)150 4765 y(terminate)h(an)g(incremen)m(tal)g (searc)m(h.)78 b Fk(C-g)41 b Fs(will)i(ab)s(ort)f(an)g(incremen)m(tal)i (searc)m(h)f(and)f(restore)h(the)150 4874 y(original)30 b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f (history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 4984 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 5121 y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h (history)g(list,)h(t)m(yp)s(e)g Fk(C-r)e Fs(or)h Fk(C-s)f Fs(as)h(appropriate.)43 b(This)150 5230 y(will)26 b(searc)m(h)h(bac)m (kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g (en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150 5340 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i (sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h (the)p eop end %%Page: 4 8 TeXDict begin 4 7 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(4)150 299 y(searc)m(h)26 b(and)f(execute)i(that)f(command.)39 b(F)-8 b(or)26 b(instance,)h(a)f Fr(RET)f Fs(will)g(terminate)i(the)f(searc)m(h)g(and)e(accept)150 408 y(the)30 b(line,)g(thereb)m(y)f(executing)i(the)e(command)g(from)g (the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will) 150 518 y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g (found)e(the)i(curren)m(t)f(line,)h(and)f(b)s(egin)g(editing.)275 647 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g (searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fk(C-r)p Fs(s)c(are)i(t)m(yp)s(ed)g(without)150 757 y(an)m(y)i(in)m(terv)m (ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f(searc)m(h)h(string,)h (an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g(is)150 866 y(used.)275 995 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e(the) h(en)m(tire)h(searc)m(h)f(string)g(b)s(efore)f(starting)h(to)h(searc)m (h)f(for)150 1105 y(matc)m(hing)d(history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f(t)m(yp)s(ed)g(b)m(y)g (the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 1214 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150 1436 y Fq(1.3)68 b(Readline)47 b(Init)e(File)150 1595 y Fs(Although)f(the)g(Readline)g (library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m (eybindings)f(installed)g(b)m(y)150 1705 y(default,)26 b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k) m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150 1814 y(that)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an) g Fi(inputrc)49 b Fs(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g (home)150 1924 y(directory)-8 b(.)39 b(The)23 b(name)h(of)f(this)h (\014le)f(is)g(tak)m(en)i(from)e(the)g(v)-5 b(alue)24 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)25 b Fr(INPUTRC)p Fs(.)150 2033 y(If)30 b(that)g(v)-5 b(ariable)31 b(is)f(unset,)g(the)h(default)f(is)g Fr(~/.inputrc)p Fs(.)38 b(If)30 b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h (b)s(e)150 2143 y(read,)g(the)f(ultimate)i(default)e(is)h Fr(/etc/inputrc)p Fs(.)275 2272 y(When)e(a)h(program)f(whic)m(h)h(uses) f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h (read,)g(and)f(the)150 2381 y(k)m(ey)i(bindings)e(are)i(set.)275 2510 y(In)26 b(addition,)i(the)f Fr(C-x)i(C-r)d Fs(command)h(re-reads)g (this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m (hanges)150 2620 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g (it.)150 2808 y Fh(1.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 2955 y Fs(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 b(lines)h(are)150 3065 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h (a)g(`)p Fr(#)p Fs(')g(are)h(commen)m(ts.)73 b(Lines)41 b(b)s(eginning)f(with)g(a)i(`)p Fr($)p Fs(')f(indicate)150 3174 y(conditional)i(constructs)e(\(see)i(Section)f(1.3.2)h ([Conditional)f(Init)f(Constructs],)j(page)f(11\).)74 b(Other)150 3284 y(lines)31 b(denote)g(v)-5 b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150 3432 y(V)-8 b(ariable)32 b(Settings)630 3542 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e (the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h (the)g(v)-5 b(alues)41 b(of)630 3651 y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g Fr(set)g Fs(command)g(within)g(the)h (init)g(\014le.)50 b(The)33 b(syn)m(tax)630 3761 y(is)d(simple:)870 3890 y Fr(set)47 b Fk(variable)e(value)630 4019 y Fs(Here,)29 b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default) h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 4128 y(use)k Fr(vi)g Fs(line)h(editing)g(commands:)870 4257 y Fr(set)47 b(editing-mode)d(vi)630 4386 y Fs(V)-8 b(ariable)36 b(names)f(and)g(v) -5 b(alues,)36 b(where)f(appropriate,)h(are)g(recognized)g(without)f (regard)630 4496 y(to)c(case.)42 b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630 4624 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f(set)i(to)g(on)f(or)g (o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the)g(v)-5 b(alue)26 b(is)630 4734 y(n)m(ull)e(or)g(empt)m(y)-8 b(,)27 b Fi(on)d Fs(\(case-insensitiv)m(e\),)29 b(or)24 b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) -5 b(ariable)630 4844 y(b)s(eing)30 b(set)h(to)g(o\013.)630 4973 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m (hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)630 5121 y Fr(bell-style)1110 5230 y Fs(Con)m(trols)44 b(what)g(happ)s(ens) e(when)h(Readline)i(w)m(an)m(ts)f(to)h(ring)e(the)h(termi-)1110 5340 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p Fr(none)p Fs(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61 b(If)36 b(set)i(to)p eop end %%Page: 5 9 TeXDict begin 5 8 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(5)1110 299 y(`)p Fr(visible)p Fs(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g (one)g(is)g(a)m(v)-5 b(ailable.)51 b(If)33 b(set)g(to)1110 408 y(`)p Fr(audible)p Fs(')j(\(the)i(default\),)i(Readline)e(attempts) g(to)h(ring)e(the)g(terminal's)1110 518 y(b)s(ell.)630 676 y Fr(bind-tty-special-chars)1110 786 y Fs(If)45 b(set)h(to)f(`)p Fr(on)p Fs(',)50 b(Readline)45 b(attempts)i(to)f(bind)d(the)j(con)m (trol)g(c)m(haracters)1110 896 y(treated)36 b(sp)s(ecially)h(b)m(y)e (the)h(k)m(ernel's)g(terminal)g(driv)m(er)f(to)h(their)f(Readline)1110 1005 y(equiv)-5 b(alen)m(ts.)630 1163 y Fr(colored-stats)1110 1273 y Fs(If)26 b(set)h(to)g(`)p Fr(on)p Fs(',)h(Readline)f(displa)m (ys)g(p)s(ossible)f(completions)h(using)f(di\013eren)m(t)1110 1383 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67 b(The)38 b(color)j(de\014nitions)d(are)i(tak)m(en)1110 1492 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Fr(LS_COLORS)d Fs(en)m(vironmen)m(t)j(v)-5 b(ariable.)40 b(The)24 b(default)1110 1602 y(is)30 b(`)p Fr(off)p Fs('.)630 1760 y Fr(comment-begin)1110 1870 y Fs(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of) h(the)h(line)f(when)g(the)1110 1979 y Fr(insert-comment)26 b Fs(command)31 b(is)f(executed.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f Fr("#")p Fs(.)630 2138 y Fr(completion-display-width) 1110 2247 y Fs(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 2357 y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 2466 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 2576 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e (line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 2734 y Fr(completion-ignore-case)1110 2844 y Fs(If)d(set)h(to)g(`)p Fr(on)p Fs(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i (and)e(completion)1110 2953 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) 40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fr(off)p Fs('.)630 3112 y Fr(completion-map-case)1110 3221 y Fs(If)22 b(set)g(to)h(`)p Fr(on)p Fs(',)h(and)e Fi(completion-ignore-case)31 b Fs(is)22 b(enabled,)i(Readline)f(treats)1110 3331 y(h)m(yphens)29 b(\(`)p Fr(-)p Fs('\))j(and)e(underscores)g(\(`)p Fr(_)p Fs('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 3440 y(case-insensitiv)m(e)j(\014lename)d(matc)m(hing)i(and)e (completion.)630 3599 y Fr(completion-prefix-displa)o(y-le)o(ngth)1110 3708 y Fs(The)h(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h (pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 3818 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s (di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 3927 y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e (longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 4037 y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) f(completions.)630 4195 y Fr(completion-query-items)1110 4305 y Fs(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h (that)g(determines)f(when)f(the)i(user)1110 4415 y(is)i(ask)m(ed)h (whether)f(the)h(list)g(of)f(p)s(ossibilities)h(should)e(b)s(e)h (displa)m(y)m(ed.)41 b(If)29 b(the)1110 4524 y(n)m(um)m(b)s(er)d(of)h (p)s(ossible)f(completions)i(is)f(greater)h(than)e(this)h(v)-5 b(alue,)28 b(Readline)1110 4634 y(will)f(ask)g(the)f(user)g(whether)g (or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110 4743 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5 b(alue)1110 4853 y(greater)26 b(than)f(or)f(equal)i(to)f(0.)40 b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i(should)1110 4963 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g(is)g Fr(100)p Fs(.)630 5121 y Fr(convert-meta)1110 5230 y Fs(If)22 b(set)g(to)h(`)p Fr(on)p Fs(',)h(Readline)f(will)f(con)m(v)m (ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 5340 y(to)33 b(an)e Fl(asci)r(i)h Fs(k)m(ey)h(sequence)f(b)m(y)g (stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)p eop end %%Page: 6 10 TeXDict begin 6 9 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(6)1110 299 y(an)24 b Fr(ESC)g Fs(c)m(haracter,)j(con)m(v)m(erting)f(them)f(to)g(a)g (meta-pre\014xed)f(k)m(ey)h(sequence.)1110 408 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fr(on)p Fs('.)630 555 y Fr(disable-completion)1110 664 y Fs(If)36 b(set)h(to)h(`)p Fr(On)p Fs(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h(completion.)60 b(Completion)1110 774 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h (in)m(to)h(the)g(line)f(as)g(if)g(they)h(had)e(b)s(een)g(mapp)s(ed)1110 883 y(to)31 b Fr(self-insert)p Fs(.)38 b(The)30 b(default)g(is)h(`)p Fr(off)p Fs('.)630 1029 y Fr(editing-mode)1110 1139 y Fs(The)d Fr(editing-mode)e Fs(v)-5 b(ariable)29 b(con)m(trols)h(whic)m (h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 1249 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f(up)f(in)h (Emacs)g(editing)h(mo)s(de,)1110 1358 y(where)j(the)g(k)m(eystrok)m(es) i(are)e(most)h(similar)f(to)h(Emacs.)40 b(This)29 b(v)-5 b(ariable)30 b(can)1110 1468 y(b)s(e)g(set)h(to)g(either)g(`)p Fr(emacs)p Fs(')e(or)h(`)p Fr(vi)p Fs('.)630 1614 y Fr (echo-control-characters)1110 1724 y Fs(When)g(set)h(to)g(`)p Fr(on)p Fs(',)f(on)g(op)s(erating)h(systems)f(that)h(indicate)g(they)g (supp)s(ort)1110 1833 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m (haracter)h(corresp)s(onding)d(to)j(a)f(signal)g(generated)1110 1943 y(from)e(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p Fr(on)p Fs('.)630 2089 y Fr(enable-keypad)1110 2198 y Fs(When)23 b(set)h(to)g(`)p Fr(on)p Fs(',)h(Readline)f(will)g(try)f(to) h(enable)g(the)f(application)i(k)m(eypad)1110 2308 y(when)h(it)h(is)f (called.)41 b(Some)27 b(systems)f(need)h(this)f(to)h(enable)g(the)g (arro)m(w)g(k)m(eys.)1110 2418 y(The)j(default)g(is)h(`)p Fr(off)p Fs('.)630 2564 y Fr(enable-meta-key)1110 2673 y Fs(When)40 b(set)g(to)g(`)p Fr(on)p Fs(',)j(Readline)d(will)g(try)g (to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 2783 y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h(is)g (called.)76 b(On)41 b(man)m(y)1110 2892 y(terminals,)c(the)e(meta)h(k)m (ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 b(The)1110 3002 y(default)31 b(is)f(`)p Fr(on)p Fs('.)630 3148 y Fr(expand-tilde)1110 3258 y Fs(If)d(set)h(to)h(`)p Fr(on)p Fs(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h (Readline)h(attempts)1110 3367 y(w)m(ord)i(completion.)42 b(The)30 b(default)g(is)h(`)p Fr(off)p Fs('.)630 3513 y Fr(history-preserve-point)1110 3623 y Fs(If)41 b(set)h(to)h(`)p Fr(on)p Fs(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f (p)s(oin)m(t)f(\(the)1110 3733 y(curren)m(t)35 b(cursor)g(p)s (osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g (line)1110 3842 y(retriev)m(ed)h(with)f Fr(previous-history)c Fs(or)37 b Fr(next-history)p Fs(.)55 b(The)36 b(default)1110 3952 y(is)30 b(`)p Fr(off)p Fs('.)630 4098 y Fr(history-size)1110 4208 y Fs(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g (en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 4317 y(list.)51 b(If)34 b(set)g(to)h(zero,)g(an)m(y)f(existing)h(history)f (en)m(tries)g(are)g(deleted)h(and)e(no)1110 4427 y(new)e(en)m(tries)i (are)f(sa)m(v)m(ed.)46 b(If)31 b(set)h(to)h(a)f(v)-5 b(alue)32 b(less)g(than)f(zero,)i(the)f(n)m(um)m(b)s(er)1110 4536 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42 b(By)30 b(default,)h(the)g(n)m(um)m(b)s(er)e(of)i(history)1110 4646 y(en)m(tries)g(is)g(not)f(limited.)630 4792 y Fr (horizontal-scroll-mode)1110 4902 y Fs(This)35 b(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f(`)p Fr(on)p Fs(')g(or)g(`)p Fr(off)p Fs('.)57 b(Setting)36 b(it)g(to)h(`)p Fr(on)p Fs(')1110 5011 y(means)26 b(that)h(the)f(text)h (of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m (tally)1110 5121 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i (are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 5230 y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g (line.)39 b(By)27 b(default,)g(this)1110 5340 y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Fr(off)p Fs('.)p eop end %%Page: 7 11 TeXDict begin 7 10 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(7)630 299 y Fr(input-meta)1110 408 y Fs(If)31 b(set)g(to)h(`)p Fr(on)p Fs(',)g(Readline)g(will)f (enable)h(eigh)m(t-bit)h(input)d(\(it)i(will)f(not)h(clear)1110 518 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h(c)m(haracters)h(it)f (reads\),)j(regardless)c(of)h(what)g(the)1110 628 y(terminal)g(claims)h (it)g(can)f(supp)s(ort.)68 b(The)39 b(default)h(v)-5 b(alue)40 b(is)g(`)p Fr(off)p Fs('.)69 b(The)1110 737 y(name)30 b Fr(meta-flag)e Fs(is)j(a)f(synon)m(ym)g(for)g(this)h(v)-5 b(ariable.)630 894 y Fr(isearch-terminators)1110 1003 y Fs(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e(terminate)j (an)f(incremen)m(tal)1110 1113 y(searc)m(h)25 b(without)g(subsequen)m (tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g(command)1110 1223 y(\(see)45 b(Section)h(1.2.5)g([Searc)m(hing],)j(page)d(3\).)84 b(If)44 b(this)g(v)-5 b(ariable)45 b(has)g(not)1110 1332 y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h Fr(ESC)d Fs(and)h Fk(C-J)g Fs(will)h(terminate)g(an)1110 1442 y(incremen)m(tal)c(searc)m(h.)630 1598 y Fr(keymap)192 b Fs(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h (for)g(k)m(ey)g(binding)f(com-)1110 1708 y(mands.)81 b(Acceptable)47 b Fr(keymap)42 b Fs(names)i(are)h Fr(emacs)p Fs(,)i Fr(emacs-standard)p Fs(,)1110 1817 y Fr(emacs-meta)p Fs(,)99 b Fr(emacs-ctlx)p Fs(,)f Fr(vi)p Fs(,)j Fr(vi-move)p Fs(,)f Fr(vi-command)p Fs(,)f(and)1110 1927 y Fr(vi-insert)p Fs(.)64 b Fr(vi)38 b Fs(is)h(equiv)-5 b(alen)m(t)41 b(to)e Fr(vi-command)p Fs(;)i Fr(emacs)c Fs(is)i(equiv)-5 b(alen)m(t)1110 2037 y(to)33 b Fr(emacs-standard)p Fs(.)41 b(The)31 b(default)h(v)-5 b(alue)32 b(is)g Fr(emacs)p Fs(.)44 b(The)31 b(v)-5 b(alue)33 b(of)f(the)1110 2146 y Fr(editing-mode)27 b Fs(v)-5 b(ariable)31 b(also)h(a\013ects)f(the)g(default)f(k)m(eymap.)630 2303 y Fr(keyseq-timeout)1110 2412 y Fs(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m(ait)g(for)g(a)f(c)m(haracter)i (when)e(read-)1110 2522 y(ing)30 b(an)g(am)m(biguous)g(k)m(ey)h (sequence)f(\(one)g(that)h(can)f(form)g(a)g(complete)h(k)m(ey)1110 2632 y(sequence)j(using)e(the)i(input)e(read)h(so)g(far,)h(or)g(can)f (tak)m(e)i(additional)f(input)1110 2741 y(to)g(complete)g(a)f(longer)h (k)m(ey)f(sequence\).)49 b(If)33 b(no)f(input)g(is)h(receiv)m(ed)h (within)1110 2851 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter)g(but)f(complete)j(k)m(ey)e(se-)1110 2960 y(quence.)c(Readline)26 b(uses)f(this)h(v)-5 b(alue)26 b(to)g(determine)g(whether)f(or)g(not)h(input)1110 3070 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m(t)f(input)g (source)h(\()p Fr(rl_instream)d Fs(b)m(y)i(default\).)1110 3180 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h (milliseconds,)j(so)d(a)h(v)-5 b(alue)26 b(of)f(1000)i(means)e(that) 1110 3289 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g (additional)i(input.)37 b(If)22 b(this)g(v)-5 b(ariable)23 b(is)1110 3399 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f (equal)i(to)f(zero,)i(or)e(to)g(a)h(non-n)m(umeric)e(v)-5 b(alue,)1110 3508 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h (k)m(ey)g(is)f(pressed)g(to)h(decide)f(whic)m(h)g(k)m(ey)1110 3618 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g Fr(500)p Fs(.)630 3774 y Fr(mark-directories)1110 3884 y Fs(If)38 b(set)g(to)h(`)p Fr(on)p Fs(',)i(completed)e(directory) f(names)g(ha)m(v)m(e)i(a)e(slash)g(app)s(ended.)1110 3994 y(The)30 b(default)g(is)h(`)p Fr(on)p Fs('.)630 4150 y Fr(mark-modified-lines)1110 4260 y Fs(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p Fr(on)p Fs(',)g(causes)g (Readline)f(to)h(displa)m(y)f(an)f(as-)1110 4369 y(terisk)f(\(`)p Fr(*)p Fs('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f (ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 4479 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fr(off)p Fs(')g(b)m(y)g(default.)630 4635 y Fr(mark-symlinked-directori)o(es)1110 4745 y Fs(If)59 b(set)h(to)g(`)p Fr(on)p Fs(',)67 b(completed)60 b(names)f(whic)m(h)g (are)h(sym)m(b)s(olic)g(links)f(to)1110 4855 y(directories)71 b(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)f(\(sub)5 b(ject)70 b(to)g(the)g(v)-5 b(alue)70 b(of)1110 4964 y Fr(mark-directories)p Fs(\).)37 b(The)30 b(default)g(is)g(`)p Fr(off)p Fs('.)630 5121 y Fr(match-hidden-files)1110 5230 y Fs(This)21 b(v)-5 b(ariable,)25 b(when)d(set)g(to)h(`)p Fr(on)p Fs(',)h(causes)f (Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 5340 y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fr(.)p Fs(')g(\(hidden)f (\014les\))i(when)e(p)s(erforming)g(\014lename)p eop end %%Page: 8 12 TeXDict begin 8 11 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(8)1110 299 y(completion.)75 b(If)41 b(set)g(to)h(`)p Fr(off)p Fs(',)i(the)e(leading)g(`)p Fr(.)p Fs(')f(m)m(ust)g(b)s(e)g(supplied)f(b)m(y)1110 408 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f(completed.) 53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p Fr(on)p Fs(')g(b)m(y)1110 518 y(default.)630 664 y Fr(menu-complete-display-pr)o(efix)1110 774 y Fs(If)f(set)h(to)g(`)p Fr(on)p Fs(',)h(men)m(u)e(completion)i (displa)m(ys)e(the)h(common)g(pre\014x)e(of)i(the)1110 883 y(list)k(of)g(p)s(ossible)f(completions)i(\(whic)m(h)e(ma)m(y)h(b)s (e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 993 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p Fr(off)p Fs('.)630 1139 y Fr(output-meta)1110 1249 y Fs(If)35 b(set)h(to)g(`)p Fr(on)p Fs(',)h(Readline)f(will)g(displa)m(y)f(c)m (haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 1358 y(set)h(directly)g (rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s(e)h(sequence.)59 b(The)1110 1468 y(default)31 b(is)f(`)p Fr(off)p Fs('.)630 1614 y Fr(page-completions)1110 1724 y Fs(If)j(set)i(to)f(`)p Fr(on)p Fs(',)h(Readline)g(uses)e(an)h(in)m(ternal)h Fr(more)p Fs(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 1833 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) 47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fr(on)p Fs(')1110 1943 y(b)m(y)e(default.)630 2089 y Fr(print-completions-horizo)o(ntal)o (ly)1110 2198 y Fs(If)23 b(set)i(to)g(`)p Fr(on)p Fs(',)g(Readline)g (will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 2308 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c (than)g(do)m(wn)g(the)h(screen.)1110 2418 y(The)30 b(default)g(is)h(`)p Fr(off)p Fs('.)630 2564 y Fr(revert-all-at-newline)1110 2673 y Fs(If)e(set)h(to)g(`)p Fr(on)p Fs(',)g(Readline)g(will)g(undo)f (all)h(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 2783 y(returning)f(when)f Fr(accept-line)f Fs(is)j(executed.)41 b(By)29 b(default,)g(history)g(lines)1110 2892 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h (across)g(calls)h(to)1110 3002 y Fr(readline)p Fs(.)38 b(The)30 b(default)h(is)f(`)p Fr(off)p Fs('.)630 3148 y Fr(show-all-if-ambiguous)1110 3258 y Fs(This)f(alters)i(the)f (default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40 b(If)29 b(set)1110 3367 y(to)f(`)p Fr(on)p Fs(',)g(w)m(ords)f(whic)m(h) g(ha)m(v)m(e)i(more)f(than)f(one)h(p)s(ossible)f(completion)h(cause) 1110 3477 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i (instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 3587 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fr(off)p Fs('.)630 3733 y Fr(show-all-if-unmodified)1110 3842 y Fs(This)38 b(alters)h(the)g(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h (functions)e(in)h(a)1110 3952 y(fashion)25 b(similar)h(to)g Fi(sho)m(w-all-if-am)m(biguous)p Fs(.)41 b(If)25 b(set)h(to)h(`)p Fr(on)p Fs(',)f(w)m(ords)f(whic)m(h)1110 4061 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e(completion)i(without)f(an)m(y)g(p)s (ossible)f(par-)1110 4171 y(tial)43 b(completion)h(\(the)f(p)s(ossible) f(completions)h(don't)f(share)g(a)h(common)1110 4281 y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g (immediately)i(instead)e(of)h(ring-)1110 4390 y(ing)g(the)f(b)s(ell.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fr(off)p Fs('.)630 4536 y Fr(show-mode-in-prompt)1110 4646 y Fs(If)35 b(set)i(to)f(`)p Fr(on)p Fs(',)h(add)e(a)h(c)m(haracter)i(to)e(the)g(b) s(eginning)f(of)h(the)g(prompt)f(in-)1110 4756 y(dicating)43 b(the)f(editing)h(mo)s(de:)63 b(emacs)43 b(\(`)p Fr(@)p Fs('\),)i(vi)d(command)g(\(`)p Fr(:)p Fs('\),)k(or)c(vi)1110 4865 y(insertion)30 b(\(`)p Fr(+)p Fs('\).)42 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fr(off)p Fs('.)630 5011 y Fr(skip-completed-text)1110 5121 y Fs(If)h(set)i(to)f(`)p Fr(on)p Fs(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s(eha)m (vior)f(when)f(in-)1110 5230 y(serting)d(a)h(single)g(matc)m(h)f(in)m (to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s(erform-) 1110 5340 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f(w)m (ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)p eop end %%Page: 9 13 TeXDict begin 9 12 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(9)1110 299 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h(that)f(matc)m(h)g (c)m(haracters)1110 408 y(after)c(p)s(oin)m(t)g(in)g(the)g(w)m(ord)f(b) s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g(w)m(ord)1110 518 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g(duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 628 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g (after)h(the)g(`)p Fr(e)p Fs(')f(in)1110 737 y(`)p Fr(Makefile)p Fs(')c(will)i(result)f(in)g(`)p Fr(Makefile)p Fs(')f(rather)h(than)h(`) p Fr(Makefilefile)p Fs(',)1110 847 y(assuming)d(there)g(is)h(a)f (single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 b(alue)1110 956 y(is)30 b(`)p Fr(off)p Fs('.)630 1113 y Fr(visible-stats)1110 1223 y Fs(If)h(set)i(to)f(`)p Fr(on)p Fs(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s (e)g(is)g(app)s(ended)e(to)j(the)1110 1332 y(\014lename)e(when)e (listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p Fr(off)p Fs('.)150 1489 y(Key)f(Bindings)630 1598 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g (init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 1708 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i (y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 1817 y(sections)37 b(con)m(tain)g(tables)g(of)f(the)g(command)f(name,)j (the)e(default)g(k)m(eybinding,)h(if)f(an)m(y)-8 b(,)630 1927 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h (do)s(es.)630 2060 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g (the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g(the)g(init)630 2170 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)f(to)h (bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 2279 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g (and)630 2389 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m (terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 b(The)40 b(name)h(of)630 2498 y(the)35 b(k)m(ey)g(can)g(b)s(e)f (expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h (what)h(y)m(ou)g(\014nd)e(most)630 2608 y(comfortable.)630 2741 y(In)i(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h (k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 2851 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g (\(a)h Fi(macro)5 b Fs(\).)630 3007 y Fi(k)m(eyname)g Fs(:)42 b Fi(function-name)35 b Fs(or)c Fi(macro)1110 3117 y(k)m(eyname)k Fs(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s (elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 3250 y Fr(Control-u:)45 b(universal-argument)1350 3360 y(Meta-Rubout:)f(backward-kill-word)1350 3469 y(Control-o:)h(">)i (output")1110 3602 y Fs(In)94 b(the)g(ab)s(o)m(v)m(e)i(example,)111 b Fk(C-u)94 b Fs(is)g(b)s(ound)f(to)i(the)f(function)1110 3712 y Fr(universal-argument)p Fs(,)124 b Fk(M-DEL)107 b Fs(is)i(b)s(ound)e(to)j(the)f(function)1110 3821 y Fr(backward-kill-word)p Fs(,)75 b(and)69 b Fk(C-o)g Fs(is)h(b)s(ound)e (to)j(run)d(the)i(macro)1110 3931 y(expressed)45 b(on)h(the)g(righ)m(t) g(hand)e(side)i(\(that)h(is,)i(to)e(insert)e(the)h(text)h(`)p Fr(>)1110 4041 y(output)p Fs(')29 b(in)m(to)i(the)g(line\).)1110 4174 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m(haracter)g (names)f(are)g(recognized)h(while)1110 4283 y(pro)s(cessing)40 b(this)f(k)m(ey)i(binding)e(syn)m(tax:)60 b Fi(DEL)p Fs(,)42 b Fi(ESC)p Fs(,)g Fi(ESCAPE)p Fs(,)f Fi(LFD)p Fs(,)1110 4393 y Fi(NEWLINE)p Fs(,)31 b Fi(RET)p Fs(,)f Fi(RETURN)p Fs(,)g Fi(R)m(UBOUT)p Fs(,)h Fi(SP)-8 b(A)m(CE)p Fs(,)31 b Fi(SPC)p Fs(,)e(and)h Fi(T)-8 b(AB)p Fs(.)630 4549 y Fr(")p Fi(k)m(eyseq)r Fr(")p Fs(:)41 b Fi(function-name)36 b Fs(or)30 b Fi(macro)1110 4659 y(k)m(eyseq)k Fs(di\013ers)d(from)f Fi(k)m(eyname)37 b Fs(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f (denoting)g(an)g(en-)1110 4769 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s (e)f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in) 1110 4878 y(double)29 b(quotes.)41 b(Some)29 b Fl(gnu)h Fs(Emacs)f(st)m(yle)i(k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as) 1110 4988 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s (ecial)h(c)m(haracter)g(names)f(are)g(not)1110 5097 y(recognized.)1350 5230 y Fr("\\C-u":)46 b(universal-argument)1350 5340 y("\\C-x\\C-r":)f(re-read-init-file)p eop end %%Page: 10 14 TeXDict begin 10 13 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(10)1350 299 y Fr("\\e[11~":)45 b("Function)h(Key)g(1")1110 447 y Fs(In)64 b(the)g(ab)s(o)m(v)m(e)i (example,)74 b Fk(C-u)64 b Fs(is)g(again)i(b)s(ound)c(to)k(the)e (function)1110 556 y Fr(universal-argument)39 b Fs(\(just)k(as)h(it)g (w)m(as)g(in)g(the)f(\014rst)g(example\),)49 b(`)p Fk(C-x)1110 666 y(C-r)p Fs(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f Fr(re-read-init-file)p Fs(,)c(and)j(`)p Fr(ESC)h([)g(1)g(1)1110 775 y(~)p Fs(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p Fr(Function)e(Key)g(1)p Fs('.)630 961 y(The)g(follo)m(wing)i Fl(gnu)f Fs(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 b(ailable)32 b(when)d(sp)s(ecifying)630 1071 y(k)m(ey)i(sequences:)630 1257 y Fk(\\C-)336 b Fs(con)m(trol)32 b(pre\014x)630 1443 y Fk(\\M-)336 b Fs(meta)31 b(pre\014x)630 1629 y Fk(\\e)384 b Fs(an)30 b(escap)s(e)h(c)m(haracter)630 1815 y Fk(\\\\)384 b Fs(bac)m(kslash)630 2001 y Fk(\\)p Fr(")g(")p Fs(,)30 b(a)h(double)f(quotation)i(mark)630 2186 y Fk(\\')384 b Fr(')p Fs(,)30 b(a)h(single)g(quote)g(or)f(ap)s (ostrophe)630 2372 y(In)d(addition)h(to)g(the)g Fl(gnu)f Fs(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g (bac)m(kslash)630 2482 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 2668 y Fr(\\a)384 b Fs(alert)31 b(\(b)s(ell\))630 2854 y Fr(\\b)384 b Fs(bac)m(kspace)630 3040 y Fr(\\d)g Fs(delete)630 3226 y Fr(\\f)g Fs(form)30 b(feed)630 3412 y Fr(\\n)384 b Fs(newline)630 3597 y Fr(\\r)g Fs(carriage)32 b(return)630 3783 y Fr(\\t)384 b Fs(horizon)m(tal)32 b(tab)630 3969 y Fr(\\v)384 b Fs(v)m(ertical)32 b(tab)630 4155 y Fr(\\)p Fk(nnn)288 b Fs(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 b Fi(nnn)e Fs(\(one)i(to)1110 4265 y(three)c(digits\))630 4451 y Fr(\\x)p Fk(HH)288 b Fs(the)38 b(eigh)m(t-bit)i(c)m(haracter)g(whose)e (v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 b(alue)39 b Fi(HH)1110 4560 y Fs(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 4746 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g(macro,)i(single)e (or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)630 4856 y(indicate)23 b(a)e(macro)h(de\014nition.)38 b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f(name.)38 b(In)630 4965 y(the)22 b(macro)f(b)s(o)s(dy)-8 b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m(e)j (are)e(expanded.)37 b(Bac)m(kslash)630 5075 y(will)j(quote)h(an)m(y)f (other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 b(`)p Fr(")p Fs(')h(and)g(`)p Fr(')p Fs('.)69 b(F)-8 b(or)630 5185 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i (mak)m(e)h(`)p Fk(C-x)j Fr(\\)p Fs(')c(insert)f(a)h(single)h(`)p Fr(\\)p Fs(')f(in)m(to)g(the)g(line:)870 5332 y Fr("\\C-x\\\\":)45 b("\\\\")p eop end %%Page: 11 15 TeXDict begin 11 14 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(11)150 299 y Fh(1.3.2)63 b(Conditional)41 b(Init)g(Constructs)150 446 y Fs(Readline)c(implemen)m (ts)g(a)h(facilit)m(y)g(similar)f(in)g(spirit)f(to)i(the)f(conditional) h(compilation)g(features)f(of)150 555 y(the)31 b(C)f(prepro)s(cessor)g (whic)m(h)g(allo)m(ws)i(k)m(ey)g(bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s(erformed)f(as)i(the)150 665 y(result)f(of)h(tests.)41 b(There)30 b(are)h(four)f(parser)f (directiv)m(es)j(used.)150 824 y Fr($if)336 b Fs(The)31 b Fr($if)f Fs(construct)i(allo)m(ws)h(bindings)d(to)i(b)s(e)e(made)i (based)f(on)g(the)g(editing)h(mo)s(de,)g(the)630 934 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g(application)h(using)f (Readline.)64 b(The)38 b(text)h(of)f(the)g(test)630 1044 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m(haracters)i (are)f(required)e(to)i(isolate)i(it.)630 1203 y Fr(mode)288 b Fs(The)30 b Fr(mode=)e Fs(form)i(of)g(the)h Fr($if)e Fs(directiv)m(e)j(is)e(used)f(to)i(test)g(whether)e(Read-)1110 1313 y(line)44 b(is)f(in)g Fr(emacs)f Fs(or)h Fr(vi)g Fs(mo)s(de.)79 b(This)42 b(ma)m(y)i(b)s(e)e(used)h(in)g(conjunction) 1110 1422 y(with)c(the)h(`)p Fr(set)29 b(keymap)p Fs(')38 b(command,)k(for)d(instance,)j(to)e(set)g(bindings)e(in)1110 1532 y(the)32 b Fr(emacs-standard)c Fs(and)j Fr(emacs-ctlx)d Fs(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 1641 y(starting)f(out)g (in)f Fr(emacs)f Fs(mo)s(de.)630 1801 y Fr(term)288 b Fs(The)26 b Fr(term=)g Fs(form)g(ma)m(y)i(b)s(e)e(used)g(to)i(include)f (terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 1910 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f(output)g(b)m(y)g (the)g(terminal's)1110 2020 y(function)24 b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g(the)g(`)p Fr(=)p Fs(')g(is)g(tested)h(against)1110 2130 y(b)s(oth)k(the)h(full)g (name)g(of)g(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g (terminal)1110 2239 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Fr(-)p Fs('.)50 b(This)33 b(allo)m(ws)i Fr(sun)e Fs(to)h(matc)m(h)g(b)s (oth)f Fr(sun)g Fs(and)1110 2349 y Fr(sun-cmd)p Fs(,)c(for)h(instance.) 630 2508 y Fr(application)1110 2618 y Fs(The)21 b Fi(application)j Fs(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h (set-)1110 2727 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h (Readline)g(library)g(sets)g(the)g Fi(application)1110 2837 y(name)p Fs(,)g(and)e(y)m(ou)g(can)h(test)g(for)f(a)g(particular)h (v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g(used)f(to)1110 2946 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g(for)h (a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 3056 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey)f (sequence)h(that)f(quotes)1110 3166 y(the)e(curren)m(t)f(or)g(previous) g(w)m(ord)g(in)g(Bash:)1350 3300 y Fr($if)47 b(Bash)1350 3410 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 3519 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 3629 y($endif)150 3788 y($endif)192 b Fs(This)29 b(command,)i(as)f(seen)h(in)f(the)g (previous)g(example,)h(terminates)g(an)g Fr($if)e Fs(command.)150 3948 y Fr($else)240 b Fs(Commands)29 b(in)h(this)h(branc)m(h)e(of)i (the)f Fr($if)g Fs(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g (fails.)150 4107 y Fr($include)96 b Fs(This)43 b(directiv)m(e)i(tak)m (es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g (commands)630 4217 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e (from)630 4326 y Fr(/etc/inputrc)p Fs(:)870 4461 y Fr($include)46 b(/etc/inputrc)150 4660 y Fh(1.3.3)63 b(Sample)41 b(Init)g(File)150 4807 y Fs(Here)27 b(is)f(an)h(example)g(of)f(an)h Fi(inputrc)k Fs(\014le.)39 b(This)26 b(illustrates)h(k)m(ey)h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 4917 y(conditional)j(syn)m (tax.)p eop end %%Page: 12 16 TeXDict begin 12 15 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(12)390 408 y Fr(#)47 b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h (editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h (Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g (re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(system-wide)e (bindings)h(and)g(variable)390 1285 y(#)h(assignments)e(from)i (/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.) 390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) h(function)f(name)g(is)h(ignored)p 3970 2401 42 76 v 390 2600 a(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390 2929 y(#"\\M-OD":)379 b(backward-char)390 3039 y(#"\\M-OC":)g(forward-char)390 3148 y(#"\\M-OA":)g (previous-history)390 3258 y(#"\\M-OB":)g(next-history)390 3367 y(#)390 3477 y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 3587 y(#)390 3696 y("\\M-[D":)380 b(backward-char)390 3806 y("\\M-[C":)g(forward-char)390 3915 y("\\M-[A":)g (previous-history)390 4025 y("\\M-[B":)g(next-history)390 4134 y(#)390 4244 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode) 390 4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g (previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) 390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end %%Page: 13 17 TeXDict begin 13 16 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(13)390 299 y Fr(#"\\M-\\C-[A":)331 b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f (are)h(convenient)e(for)i(shell)f(interaction)390 1504 y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g (backslash)e(\(testing)h(backslash)f(escapes)390 2381 y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") 390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e (to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f (on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f ("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h (available)390 3587 y(set)f(bell-style)e(visible)390 3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) 390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e (characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g (converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j (convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g (eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h (meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f (completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g (he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f (completion-query-items)42 b(150)p eop end %%Page: 14 18 TeXDict begin 14 17 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(14)390 299 y Fr(#)47 b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 847 y($endif)150 1077 y Fq(1.4)68 b(Bindable)45 b(Readline)i(Commands) 150 1237 y Fs(This)25 b(section)i(describ)s(es)d(Readline)j(commands)e (that)h(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)39 b(Command)150 1346 y(names)30 b(without)h(an)f(accompan)m(ying)i(k)m (ey)f(sequence)g(are)g(un)m(b)s(ound)c(b)m(y)k(default.)275 1480 y(In)25 b(the)h(follo)m(wing)i(descriptions,)f Fi(p)s(oin)m(t)h Fs(refers)e(to)h(the)f(curren)m(t)g(cursor)g(p)s(osition,)h(and)f Fi(mark)31 b Fs(refers)150 1590 y(to)40 b(a)f(cursor)f(p)s(osition)h (sa)m(v)m(ed)h(b)m(y)f(the)g Fr(set-mark)d Fs(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f(p)s(oin)m(t)g(and)150 1699 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f Fi(region)p Fs(.)150 1897 y Fh(1.4.1)63 b(Commands)42 b(F)-10 b(or)41 b(Mo)m(ving)150 2067 y Fr(beginning-of-line)26 b(\(C-a\))630 2177 y Fs(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(curren)m(t)g (line.)150 2335 y Fr(end-of-line)d(\(C-e\))630 2444 y Fs(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 2602 y Fr(forward-char)c(\(C-f\))630 2711 y Fs(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(c)m(haracter.)150 2869 y Fr(backward-char)c(\(C-b\)) 630 2978 y Fs(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 3136 y Fr(forward-word)d(\(M-f\))630 3246 y Fs(Mo)m(v)m(e)32 b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 3355 y(digits.)150 3513 y Fr(backward-word)27 b(\(M-b\))630 3622 y Fs(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g (curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 b(are)g(comp)s(osed)630 3732 y(of)d(letters)g(and)f(digits.)150 3889 y Fr(clear-screen)d(\(C-l\))630 3999 y Fs(Clear)g(the)g(screen)f (and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f (curren)m(t)g(line)g(at)g(the)g(top)630 4109 y(of)k(the)f(screen.)150 4266 y Fr(redraw-current-line)25 b(\(\))630 4376 y Fs(Refresh)30 b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s (ound.)150 4573 y Fh(1.4.2)63 b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f(History)150 4744 y Fr(accept-line)27 b(\(Newline)h(or)i(Return\))630 4854 y Fs(Accept)36 b(the)g(line)f (regardless)h(of)f(where)g(the)g(cursor)g(is.)55 b(If)34 b(this)h(line)h(is)f(non-empt)m(y)-8 b(,)37 b(it)630 4963 y(ma)m(y)32 b(b)s(e)g(added)f(to)h(the)g(history)g(list)h(for)e (future)g(recall)j(with)d Fr(add_history\(\))p Fs(.)42 b(If)31 b(this)630 5073 y(line)g(is)f(a)h(mo)s(di\014ed)e(history)h (line,)h(the)g(history)f(line)h(is)f(restored)h(to)g(its)g(original)g (state.)150 5230 y Fr(previous-history)26 b(\(C-p\))630 5340 y Fs(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g (fetc)m(hing)g(the)g(previous)f(command.)p eop end %%Page: 15 19 TeXDict begin 15 18 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(15)150 299 y Fr(next-history)27 b(\(C-n\))630 408 y Fs(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i (history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 558 y Fr(beginning-of-history)25 b(\(M-<\))630 667 y Fs(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 b(.)150 817 y Fr(end-of-history)26 b(\(M->\))630 927 y Fs(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 1076 y Fr(reverse-search-history)24 b(\(C-r\))630 1186 y Fs(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g (line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 1295 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m (tal)i(searc)m(h.)150 1445 y Fr(forward-search-history)24 b(\(C-s\))630 1554 y Fs(Searc)m(h)30 b(forw)m(ard)f(starting)h(at)g (the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')f(through)g(the) h(the)630 1664 y(history)g(as)h(necessary)-8 b(.)41 b(This)30 b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 1813 y Fr (non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-p\))630 1923 y Fs(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g (the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g (his-)630 2032 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m (tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 2142 y(user.)150 2291 y Fr(non-incremental-forward-)o(sear)o(ch-h)o (ist)o(ory)24 b(\(M-n\))630 2401 y Fs(Searc)m(h)30 b(forw)m(ard)f (starting)h(at)g(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn') f(through)g(the)h(the)630 2511 y(history)d(as)f(necessary)i(using)e(a)h (non-incremen)m(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i (the)630 2620 y(user.)150 2770 y Fr(history-search-forward)d(\(\))630 2879 y Fs(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g (the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 2989 y(start)36 b(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m (t.)58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the) 630 3098 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3208 y(command)d(is)h(un)m(b)s(ound.)150 3357 y Fr(history-search-backward)24 b(\(\))630 3467 y Fs(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 3577 y(start)g(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.) 58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630 3686 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3796 y(command)d(is)h(un)m(b)s(ound.)150 3945 y Fr(history-substr-search-fo)o(rwar)o(d)24 b(\(\))630 4055 y Fs(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g (the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 4164 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4274 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4384 y(is)e(un)m(b)s(ound.)150 4533 y Fr (history-substr-search-ba)o(ckwa)o(rd)24 b(\(\))630 4643 y Fs(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 4752 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4862 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4971 y(is)e(un)m(b)s(ound.)150 5121 y Fr(yank-nth-arg)d (\(M-C-y\))630 5230 y Fs(Insert)37 b(the)g(\014rst)f(argumen)m(t)i(to)f (the)h(previous)e(command)h(\(usually)g(the)g(second)g(w)m(ord)630 5340 y(on)32 b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 b(an)g(argumen)m(t)g Fi(n)p Fs(,)g(insert)g(the)g Fi(n)p Fs(th)f(w)m(ord)g(from)p eop end %%Page: 16 20 TeXDict begin 16 19 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(16)630 299 y(the)35 b(previous)f(command)h(\(the)g(w)m(ords)g(in)f(the)h(previous)g (command)f(b)s(egin)h(with)f(w)m(ord)630 408 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f Fi(n)p Fs(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)630 518 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h Fi(n)e Fs(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e(if)630 628 y(the)e(`)p Fr(!)p Fk(n)p Fs(')f(history)g(expansion)g(had)g(b)s (een)g(sp)s(eci\014ed.)150 798 y Fr(yank-last-arg)d(\(M-.)i(or)h(M-_\)) 630 908 y Fs(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous)f (command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 1018 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m (t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Fr(yank-nth-arg)p Fs(.)630 1127 y(Successiv)m(e)26 b(calls)g(to)f Fr(yank-last-arg)c Fs(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i (inserting)630 1237 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp) s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i (of)f(eac)m(h)h(line)630 1346 y(in)36 b(turn.)58 b(An)m(y)36 b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g (calls)h(determines)630 1456 y(the)d(direction)g(to)h(mo)m(v)m(e)g (through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e (switc)m(hes)h(the)630 1565 y(direction)23 b(through)g(the)g(history)f (\(bac)m(k)i(or)f(forw)m(ard\).)38 b(The)22 b(history)h(expansion)g (facilities)630 1675 y(are)28 b(used)f(to)h(extract)h(the)f(last)g (argumen)m(t,)h(as)e(if)h(the)g(`)p Fr(!$)p Fs(')f(history)g(expansion) h(had)f(b)s(een)630 1785 y(sp)s(eci\014ed.)150 1995 y Fh(1.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 2173 y Fk(end-of-file)27 b Fr(\(usually)h(C-d\))630 2282 y Fs(The)e(c)m(haracter)h(indicating)h(end-of-\014le)e(as)h(set,)g (for)f(example,)i(b)m(y)e Fr(stty)p Fs(.)39 b(If)25 b(this)h(c)m (harac-)630 2392 y(ter)c(is)g(read)g(when)e(there)i(are)h(no)e(c)m (haracters)j(on)d(the)h(line,)i(and)d(p)s(oin)m(t)h(is)g(at)h(the)f(b)s (eginning)630 2501 y(of)31 b(the)f(line,)h(Readline)g(in)m(terprets)g (it)g(as)f(the)h(end)f(of)g(input)f(and)h(returns)f Fl(eof)p Fs(.)150 2672 y Fr(delete-char)e(\(C-d\))630 2782 y Fs(Delete)35 b(the)f(c)m(haracter)h(at)f(p)s(oin)m(t.)49 b(If)33 b(this)g(function)g (is)g(b)s(ound)e(to)j(the)g(same)f(c)m(haracter)630 2891 y(as)e(the)f(tt)m(y)i Fl(eof)d Fs(c)m(haracter,)j(as)f Fk(C-d)e Fs(commonly)i(is,)g(see)g(ab)s(o)m(v)m(e)h(for)e(the)g (e\013ects.)150 3062 y Fr(backward-delete-char)25 b(\(Rubout\))630 3172 y Fs(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 3281 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 3452 y Fr(forward-backward-delete-)o(char)24 b(\(\))630 3561 y Fs(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h (unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 3671 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s (ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 3781 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 3951 y Fr(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 4061 y Fs(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h (v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 4170 y(sequences)d(lik)m(e)g Fk(C-q)p Fs(,)f(for)g(example.)150 4341 y Fr(tab-insert)e(\(M-TAB\))630 4451 y Fs(Insert)i(a)h(tab)f(c)m (haracter.)150 4621 y Fr(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o (\))630 4731 y Fs(Insert)g(y)m(ourself.)150 4902 y Fr(transpose-chars)c (\(C-t\))630 5011 y Fs(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g (cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g (cursor,)630 5121 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m (ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) g(of)h(the)630 5230 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h (last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 b(Negativ)m(e)25 b(argumen)m(ts)630 5340 y(ha)m(v)m(e)32 b(no)e(e\013ect.)p eop end %%Page: 17 21 TeXDict begin 17 20 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(17)150 299 y Fr(transpose-words)26 b(\(M-t\))630 408 y Fs(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(past)g(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin) m(t)f(past)g(that)630 518 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i (the)f(line,)i(this)e(transp)s(oses)g(the)630 628 y(last)j(t)m(w)m(o)h (w)m(ords)e(on)g(the)h(line.)150 792 y Fr(upcase-word)c(\(M-u\))630 902 y Fs(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i (w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 1012 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h (the)e(cursor.)150 1176 y Fr(downcase-word)d(\(M-l\))630 1286 y Fs(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i (w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m (ercase)630 1396 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m (v)m(e)i(the)f(cursor.)150 1560 y Fr(capitalize-word)26 b(\(M-c\))630 1670 y Fs(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m (wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h (capitalize)630 1780 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f (mo)m(v)m(e)i(the)f(cursor.)150 1944 y Fr(overwrite-mode)26 b(\(\))630 2054 y Fs(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) h(switc)m(hes)630 2163 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m (t,)i(switc)m(hes)e(to)630 2273 y(insert)30 b(mo)s(de.)41 b(This)30 b(command)h(a\013ects)h(only)e Fr(emacs)f Fs(mo)s(de;)i Fr(vi)f Fs(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 2383 y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f Fr(readline\(\))c Fs(starts)k(in)f(insert)g(mo)s(de.)630 2520 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s (ound)c(to)j Fr(self-insert)c Fs(replace)k(the)g(text)g(at)630 2629 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h (the)f(righ)m(t.)126 b(Characters)59 b(b)s(ound)d(to)630 2739 y Fr(backward-delete-char)25 b Fs(replace)31 b(the)g(c)m(haracter) h(b)s(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 2876 y(By)g(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150 3081 y Fh(1.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 3255 y Fr(kill-line)28 b(\(C-k\))630 3365 y Fs(Kill)j(the)f(text)i (from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f(line.)150 3530 y Fr(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 3639 y Fs(Kill)h(bac)m(kw)m(ard)g(to)g(the)f(b)s(eginning)g(of)g(the)h (line.)150 3804 y Fr(unix-line-discard)26 b(\(C-u\))630 3914 y Fs(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f (b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150 4079 y Fr(kill-whole-line)c(\(\))630 4188 y Fs(Kill)37 b(all)g(c)m (haracters)h(on)f(the)f(curren)m(t)h(line,)h(no)f(matter)g(where)f(p)s (oin)m(t)h(is.)59 b(By)36 b(default,)630 4298 y(this)30 b(is)h(un)m(b)s(ound.)150 4462 y Fr(kill-word)d(\(M-d\))630 4572 y Fs(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f (curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h (the)g(end)630 4682 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fr(forward-word)p Fs(.)150 4846 y Fr(backward-kill-word)25 b(\(M-DEL\))630 4956 y Fs(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40 b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g Fr(backward-word)p Fs(.)150 5121 y Fr(unix-word-rubout)d(\(C-w\))630 5230 y Fs(Kill)32 b(the)g(w)m(ord)f(b)s(ehind)f(p)s(oin)m(t,)i(using)f (white)h(space)g(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 b(The)31 b(killed)630 5340 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f (kill-ring.)p eop end %%Page: 18 22 TeXDict begin 18 21 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(18)150 299 y Fr (unix-filename-rubout)25 b(\(\))630 408 y Fs(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e(white)g(space)h (and)f(the)g(slash)g(c)m(haracter)i(as)f(the)630 518 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g(sa)m (v)m(ed)g(on)g(the)f(kill-ring.)150 693 y Fr(delete-horizontal-space)24 b(\(\))630 803 y Fs(Delete)33 b(all)e(spaces)g(and)e(tabs)i(around)e(p) s(oin)m(t.)41 b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 978 y Fr(kill-region)d(\(\))630 1088 y Fs(Kill)k(the)f(text)i(in)e(the) g(curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g (un)m(b)s(ound.)150 1263 y Fr(copy-region-as-kill)25 b(\(\))630 1373 y Fs(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h (the)f(kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m (t)f(a)m(w)m(a)m(y)-8 b(.)630 1482 y(By)31 b(default,)f(this)h(command) f(is)g(un)m(b)s(ound.)150 1657 y Fr(copy-backward-word)25 b(\(\))630 1767 y Fs(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) f(are)i(the)630 1877 y(same)31 b(as)f Fr(backward-word)p Fs(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150 2052 y Fr(copy-forward-word)26 b(\(\))630 2161 y Fs(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h (bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630 2271 y(same)f(as)f Fr(forward-word)p Fs(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 2446 y Fr(yank)f(\(C-y\))630 2556 y Fs(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h (p)s(oin)m(t.)150 2731 y Fr(yank-pop)d(\(M-y\))630 2841 y Fs(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 2950 y(command)30 b(is)h Fr(yank)e Fs(or)h Fr(yank-pop)p Fs(.)150 3165 y Fh(1.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m (ts)150 3345 y Fr(digit-argument)26 b(\()p Fk(M-0)p Fr(,)j Fk(M-1)p Fr(,)h(...)f Fk(M--)p Fr(\))630 3455 y Fs(Add)d(this)h(digit)g (to)h(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f (new)f(argumen)m(t.)630 3564 y Fk(M--)j Fs(starts)i(a)g(negativ)m(e)i (argumen)m(t.)150 3740 y Fr(universal-argument)25 b(\(\))630 3849 y Fs(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g (argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m (y)f(one)630 3959 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h (leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 4068 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) m(y)f(digits,)i(executing)f Fr(universal-argument)630 4178 y Fs(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h (otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 4288 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 4397 y(or)28 b(min)m(us)f(sign,)i(the)f(argumen)m(t)g(coun)m(t)h(for)e (the)i(next)f(command)f(is)h(m)m(ultiplied)h(b)m(y)e(four.)630 4507 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)h(initially)h(one,)g(so)f (executing)g(this)f(function)g(the)h(\014rst)e(time)630 4616 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e (time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630 4726 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g(not)h (b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 4941 y Fh(1.4.6)63 b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 b(Y)-10 b(ou)150 5121 y Fr(complete)28 b(\(TAB\))630 5230 y Fs(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g (b)s(efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 5340 y(p)s(erformed)29 b(is)h(application-sp)s(eci\014c.)42 b(The)30 b(default)h(is)f(\014lename)h(completion.)p eop end %%Page: 19 23 TeXDict begin 19 22 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(19)150 299 y Fr (possible-completions)25 b(\(M-?\))630 408 y Fs(List)35 b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s(efore)e(p)s (oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 518 y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i(columns)f (used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 b(alue)33 b(of)630 628 y Fr(completion-display-width)o Fs(,)g(the)j(v)-5 b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)38 b Fr(COLUMNS)p Fs(,)630 737 y(or)30 b(the)h(screen)f(width,)g(in)g (that)h(order.)150 883 y Fr(insert-completions)25 b(\(M-*\))630 992 y Fs(Insert)30 b(all)h(completions)h(of)f(the)g(text)g(b)s(efore)f (p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s(een)e(generated)630 1102 y(b)m(y)g Fr(possible-completions)p Fs(.)150 1247 y Fr(menu-complete)d(\(\))630 1357 y Fs(Similar)d(to)g Fr(complete)p Fs(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f (completed)i(with)e(a)i(single)f(matc)m(h)630 1466 y(from)37 b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39 b(execution)g(of)f Fr(menu-complete)630 1576 y Fs(steps)i(through)g (the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i (matc)m(h)f(in)f(turn.)630 1685 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g (of)g(completions,)i(the)e(b)s(ell)g(is)g(rung)f(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 1795 y(of)f Fr(bell-style)p Fs(\))e(and)h(the)h(original)i(text)f(is)f(restored.)57 b(An)36 b(argumen)m(t)h(of)f Fi(n)f Fs(mo)m(v)m(es)i Fi(n)630 1905 y Fs(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e (matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f (used)g(to)630 2014 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g (list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s (ound)e(to)630 2124 y Fr(TAB)p Fs(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m (y)i(default.)150 2269 y Fr(menu-complete-backward)24 b(\(\))630 2379 y Fs(Iden)m(tical)36 b(to)g Fr(menu-complete)p Fs(,)d(but)h(mo)m(v)m(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g (p)s(ossible)630 2488 y(completions,)d(as)e(if)h Fr(menu-complete)26 b Fs(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 2634 y Fr(delete-char-or-list)25 b(\(\))630 2743 y Fs(Deletes)41 b(the)e(c)m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)h(b)s (eginning)e(or)h(end)f(of)h(the)630 2853 y(line)50 b(\(lik)m(e)h Fr(delete-char)p Fs(\).)96 b(If)49 b(at)h(the)g(end)f(of)h(the)f(line,) 55 b(b)s(eha)m(v)m(es)c(iden)m(tically)g(to)630 2963 y Fr(possible-completions)p Fs(.)35 b(This)30 b(command)g(is)g(un)m(b)s (ound)e(b)m(y)i(default.)150 3148 y Fh(1.4.7)63 b(Keyb)s(oard)41 b(Macros)150 3313 y Fr(start-kbd-macro)26 b(\(C-x)j(\(\))630 3422 y Fs(Begin)i(sa)m(ving)h(the)e(c)m(haracters)i(t)m(yp)s(ed)e(in)m (to)h(the)g(curren)m(t)f(k)m(eyb)s(oard)g(macro.)150 3568 y Fr(end-kbd-macro)d(\(C-x)i(\)\))630 3677 y Fs(Stop)e(sa)m(ving)h (the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m(to)i(the)e(curren)m(t)g(k)m (eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i(the)630 3787 y(de\014nition.)150 3932 y Fr(call-last-kbd-macro)c(\(C-x)k(e\))630 4042 y Fs(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard)f(macro)h (de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the)630 4151 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m(eyb)s (oard.)150 4297 y Fr(print-last-kbd-macro)25 b(\(\))630 4406 y Fs(Prin)m(t)30 b(the)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned) e(in)i(a)f(format)h(suitable)g(for)f(the)h Fi(inputrc)k Fs(\014le.)150 4591 y Fh(1.4.8)63 b(Some)41 b(Miscellaneous)i(Commands) 150 4756 y Fr(re-read-init-file)26 b(\(C-x)j(C-r\))630 4866 y Fs(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g Fi(inputrc)27 b Fs(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d (or)i(v)-5 b(ariable)630 4975 y(assignmen)m(ts)31 b(found)e(there.)150 5121 y Fr(abort)g(\(C-g\))630 5230 y Fs(Ab)s(ort)d(the)h(curren)m(t)f (editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5 b(ject)26 b(to)i(the)630 5340 y(setting)j(of)g Fr(bell-style)p Fs(\).)p eop end %%Page: 20 24 TeXDict begin 20 23 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(20)150 299 y Fr (do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p Fk(x)p Fr(,)g(...)o(\))630 408 y Fs(If)e(the)h(meta\014ed)g(c)m(haracter)h Fi(x)34 b Fs(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g(command)h(that)g (is)g(b)s(ound)d(to)k(the)630 518 y(corresp)s(onding)g(upp)s(ercase)h (c)m(haracter.)150 667 y Fr(prefix-meta)d(\(ESC\))630 777 y Fs(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 b(.)630 887 y(T)m(yping)30 b(`)p Fr(ESC)g(f)p Fs(')g(is)h(equiv)-5 b(alen)m(t)31 b(to)g(t)m(yping)g Fk(M-f)p Fs(.)150 1036 y Fr(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 1146 y Fs(Incremen)m(tal)h (undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 1295 y Fr(revert-line)27 b(\(M-r\))630 1405 y Fs(Undo)33 b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 b(This)32 b(is)h(lik)m(e)i(executing)f(the)f Fr(undo)f Fs(command)630 1514 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.) 150 1664 y Fr(tilde-expand)d(\(M-~\))630 1773 y Fs(P)m(erform)j(tilde)h (expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 1923 y Fr(set-mark)d(\(C-@\))630 2032 y Fs(Set)33 b(the)g(mark)f(to)i(the)f (p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g (supplied,)f(the)h(mark)g(is)f(set)630 2142 y(to)f(that)g(p)s(osition.) 150 2291 y Fr(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 2401 y Fs(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h (sa)m(v)m(ed)630 2511 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s (osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 2660 y Fr(character-search)26 b(\(C-]\))630 2770 y Fs(A)f(c)m(haracter)h(is) f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s (ccurrence)g(of)g(that)g(c)m(haracter.)630 2879 y(A)30 b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s (ccurrences.)150 3029 y Fr(character-search-backwar)o(d)24 b(\(M-C-]\))630 3138 y Fs(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s (oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) g(that)630 3248 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f (searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 3397 y Fr(skip-csi-sequence)d(\(\))630 3507 y Fs(Read)i(enough)f(c)m (haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f (as)g(those)h(de\014ned)630 3616 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g (and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m (trol)g(Sequence)630 3726 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fr("\\)p Fs(e[)p Fr(")p Fs(,)g(k)m(eys)f(pro-)630 3836 y(ducing)31 b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e (explicitly)j(b)s(ound)c(to)i(a)h(readline)630 3945 y(command,)f (instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f (editing)h(bu\013er.)44 b(This)31 b(is)630 4055 y(un)m(b)s(ound)d(b)m (y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 4204 y Fr(insert-comment)26 b(\(M-#\))630 4314 y Fs(Without)36 b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36 b(of)g(the)g Fr(comment-begin)c Fs(v)-5 b(ariable)36 b(is)g(in-)630 4423 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f (curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g (supplied,)630 4533 y(this)k(command)h(acts)g(as)g(a)g(toggle:)55 b(if)37 b(the)f(c)m(haracters)i(at)g(the)e(b)s(eginning)g(of)h(the)g (line)630 4643 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)31 b(of)f Fr(comment-begin)p Fs(,)e(the)i(v)-5 b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 4752 y(c)m(haracters)42 b(in)d Fr(comment-begin)e Fs(are)j(deleted)h(from)f (the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 4862 y(either)31 b(case,)h(the)e(line)h(is)f(accepted)i(as)f(if)f(a)h (newline)f(had)g(b)s(een)f(t)m(yp)s(ed.)150 5011 y Fr(dump-functions)d (\(\))630 5121 y Fs(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g (their)g(k)m(ey)h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 5230 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h (output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 5340 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fi(inputrc)k Fs(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k (default.)p eop end %%Page: 21 25 TeXDict begin 21 24 bop 150 -116 a Fs(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(21)150 299 y Fr(dump-variables)26 b(\(\))630 408 y Fs(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h (output)f(stream.)630 518 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g (supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m (y)g(that)630 628 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fi(inputrc)k Fs(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c (b)m(y)k(default.)150 787 y Fr(dump-macros)c(\(\))630 897 y Fs(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences)f (b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 1006 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e (supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 1116 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e Fi(inputrc)35 b Fs(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) d(b)m(y)630 1225 y(default.)150 1385 y Fr(emacs-editing-mode)e(\(C-e\)) 630 1494 y Fs(When)30 b(in)g Fr(vi)g Fs(command)g(mo)s(de,)g(this)h (causes)f(a)h(switc)m(h)g(to)g Fr(emacs)e Fs(editing)i(mo)s(de.)150 1654 y Fr(vi-editing-mode)26 b(\(M-C-j\))630 1763 y Fs(When)k(in)g Fr(emacs)f Fs(editing)i(mo)s(de,)f(this)h(causes)f(a)h(switc)m(h)g(to)g Fr(vi)f Fs(editing)h(mo)s(de.)150 1996 y Fq(1.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 2155 y Fs(While)32 b(the)g(Readline)g(library)f(do)s (es)g(not)h(ha)m(v)m(e)h(a)f(full)f(set)h(of)g Fr(vi)f Fs(editing)h(functions,)f(it)h(do)s(es)g(con)m(tain)150 2265 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f(the)g(line.)52 b(The)34 b(Readline)g Fr(vi)g Fs(mo)s(de)f(b)s(eha)m(v)m(es)i(as)f(sp)s (eci\014ed)f(in)150 2374 y(the)e Fl(posix)e Fs(standard.)275 2509 y(In)f(order)g(to)i(switc)m(h)g(in)m(teractiv)m(ely)i(b)s(et)m(w)m (een)d Fr(emacs)f Fs(and)g Fr(vi)h Fs(editing)g(mo)s(des,)g(use)g(the)g (command)150 2619 y Fk(M-C-j)36 b Fs(\(b)s(ound)h(to)h (emacs-editing-mo)s(de)i(when)d(in)g Fr(vi)h Fs(mo)s(de)f(and)g(to)i (vi-editing-mo)s(de)g(in)e Fr(emacs)150 2728 y Fs(mo)s(de\).)k(The)30 b(Readline)h(default)f(is)g Fr(emacs)f Fs(mo)s(de.)275 2863 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Fr(vi)f Fs(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g(`insertion')g(mo)s (de,)g(as)h(if)f(y)m(ou)150 2972 y(had)f(t)m(yp)s(ed)g(an)g(`)p Fr(i)p Fs('.)41 b(Pressing)29 b Fr(ESC)f Fs(switc)m(hes)i(y)m(ou)g(in)m (to)h(`command')e(mo)s(de,)h(where)e(y)m(ou)i(can)g(edit)g(the)150 3082 y(text)35 b(of)f(the)g(line)g(with)f(the)h(standard)f Fr(vi)g Fs(mo)m(v)m(emen)m(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g (history)f(lines)h(with)150 3191 y(`)p Fr(k)p Fs(')d(and)e(subsequen)m (t)h(lines)h(with)f(`)p Fr(j)p Fs(',)g(and)g(so)h(forth.)p eop end %%Page: 22 26 TeXDict begin 22 25 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(22)150 299 y Fo(2)80 b(Programming)54 b(with)f(GNU)h(Readline)150 527 y Fs(This)24 b(c)m(hapter)i(describ)s(es)e(the)h(in)m(terface)h(b)s (et)m(w)m(een)g(the)f Fl(gnu)f Fs(Readline)i(Library)e(and)g(other)h (programs.)150 636 y(If)k(y)m(ou)g(are)g(a)h(programmer,)f(and)f(y)m (ou)i(wish)e(to)i(include)f(the)g(features)g(found)f(in)h Fl(gnu)g Fs(Readline)g(suc)m(h)150 746 y(as)c(completion,)j(line)d (editing,)i(and)d(in)m(teractiv)m(e)k(history)d(manipulation)g(in)f(y)m (our)h(o)m(wn)g(programs,)h(this)150 855 y(section)32 b(is)e(for)g(y)m(ou.)150 1085 y Fq(2.1)68 b(Basic)45 b(Beha)l(vior)150 1245 y Fs(Man)m(y)39 b(programs)e(pro)m(vide)h(a)h (command)f(line)g(in)m(terface,)k(suc)m(h)37 b(as)i Fr(mail)p Fs(,)g Fr(ftp)p Fs(,)g(and)e Fr(sh)p Fs(.)63 b(F)-8 b(or)39 b(suc)m(h)150 1354 y(programs,)29 b(the)f(default)h(b)s(eha)m(viour)f (of)h(Readline)g(is)g(su\016cien)m(t.)40 b(This)28 b(section)i(describ) s(es)d(ho)m(w)i(to)g(use)150 1464 y(Readline)35 b(in)f(the)h(simplest)f (w)m(a)m(y)h(p)s(ossible,)h(p)s(erhaps)c(to)j(replace)h(calls)f(in)f(y) m(our)h(co)s(de)f(to)h Fr(gets\(\))e Fs(or)150 1573 y Fr(fgets\(\))p Fs(.)275 1707 y(The)f(function)g Fr(readline\(\))e Fs(prin)m(ts)i(a)g(prompt)g Fi(prompt)i Fs(and)e(then)g(reads)g(and)g (returns)f(a)i(single)150 1816 y(line)g(of)g(text)h(from)e(the)h(user.) 47 b(If)32 b Fi(prompt)i Fs(is)e Fr(NULL)g Fs(or)h(the)f(empt)m(y)i (string,)f(no)g(prompt)e(is)i(displa)m(y)m(ed.)150 1926 y(The)k(line)g Fr(readline)e Fs(returns)h(is)h(allo)s(cated)i(with)e Fr(malloc\(\))p Fs(;)h(the)f(caller)i(should)d Fr(free\(\))f Fs(the)j(line)150 2035 y(when)29 b(it)i(has)f(\014nished)f(with)h(it.) 42 b(The)29 b(declaration)j(for)f Fr(readline)d Fs(in)i(ANSI)g(C)g(is) 390 2169 y Fr(char)47 b(*readline)e(\(const)h(char)h(*)p Fk(prompt)p Fr(\);)150 2302 y Fs(So,)31 b(one)f(migh)m(t)h(sa)m(y)390 2435 y Fr(char)47 b(*line)f(=)h(readline)f(\("Enter)g(a)h(line:)g("\);) 150 2568 y Fs(in)23 b(order)f(to)h(read)g(a)g(line)h(of)f(text)h(from)e (the)h(user.)38 b(The)22 b(line)h(returned)f(has)g(the)h(\014nal)g (newline)g(remo)m(v)m(ed,)150 2678 y(so)31 b(only)f(the)h(text)g (remains.)275 2811 y(If)40 b Fr(readline)e Fs(encoun)m(ters)j(an)f Fr(EOF)f Fs(while)i(reading)f(the)h(line,)j(and)39 b(the)i(line)g(is)f (empt)m(y)h(at)g(that)150 2921 y(p)s(oin)m(t,)30 b(then)f Fr(\(char)g(*\)NULL)e Fs(is)j(returned.)39 b(Otherwise,)30 b(the)f(line)h(is)f(ended)g(just)g(as)g(if)h(a)f(newline)h(had)150 3030 y(b)s(een)g(t)m(yp)s(ed.)275 3163 y(If)c(y)m(ou)h(w)m(an)m(t)h (the)f(user)g(to)g(b)s(e)g(able)g(to)h(get)g(at)g(the)f(line)g(later,)i (\(with)e Fr(C-p)f Fs(for)h(example\),)i(y)m(ou)e(m)m(ust)150 3273 y(call)32 b Fr(add_history\(\))26 b Fs(to)32 b(sa)m(v)m(e)f(the)g (line)g(a)m(w)m(a)m(y)h(in)e(a)h Fi(history)38 b Fs(list)31 b(of)g(suc)m(h)f(lines.)390 3406 y Fr(add_history)45 b(\(line\);)150 3539 y Fs(F)-8 b(or)31 b(full)f(details)i(on)e(the)g (GNU)h(History)g(Library)-8 b(,)31 b(see)g(the)f(asso)s(ciated)i(man)m (ual.)275 3673 y(It)f(is)g(preferable)g(to)i(a)m(v)m(oid)f(sa)m(ving)h (empt)m(y)e(lines)h(on)f(the)h(history)f(list,)h(since)g(users)e (rarely)i(ha)m(v)m(e)h(a)150 3782 y(burning)28 b(need)h(to)i(reuse)e(a) h(blank)g(line.)40 b(Here)31 b(is)e(a)h(function)g(whic)m(h)f(usefully) g(replaces)i(the)f(standard)150 3892 y Fr(gets\(\))f Fs(library)h(function,)g(and)g(has)g(the)g(adv)-5 b(an)m(tage)33 b(of)d(no)g(static)i(bu\013er)e(to)h(o)m(v)m(er\015o)m(w:)390 4025 y Fr(/*)47 b(A)h(static)e(variable)f(for)i(holding)f(the)h(line.)f (*/)390 4134 y(static)g(char)h(*line_read)e(=)i(\(char)g(*\)NULL;)390 4354 y(/*)g(Read)g(a)g(string,)f(and)h(return)f(a)i(pointer)d(to)j(it.) 533 4463 y(Returns)e(NULL)h(on)g(EOF.)f(*/)390 4573 y(char)h(*)390 4682 y(rl_gets)f(\(\))390 4792 y({)485 4902 y(/*)i(If)f(the)g(buffer)f (has)h(already)f(been)g(allocated,)629 5011 y(return)g(the)h(memory)f (to)h(the)g(free)f(pool.)h(*/)485 5121 y(if)h(\(line_read\))581 5230 y({)676 5340 y(free)f(\(line_read\);)p eop end %%Page: 23 27 TeXDict begin 23 26 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(23)676 299 y Fr(line_read)46 b(=)h(\(char)f(*\)NULL;)581 408 y(})485 628 y(/*)i(Get)f(a)g(line)g(from)f(the)h(user.)g(*/)485 737 y(line_read)f(=)h(readline)f(\(""\);)485 956 y(/*)i(If)f(the)g (line)f(has)h(any)g(text)g(in)g(it,)629 1066 y(save)f(it)h(on)h(the)f (history.)e(*/)485 1176 y(if)j(\(line_read)d(&&)i(*line_read\))581 1285 y(add_history)e(\(line_read\);)485 1504 y(return)i(\(line_read\);) 390 1614 y(})275 1767 y Fs(This)27 b(function)h(giv)m(es)h(the)f(user)g (the)g(default)g(b)s(eha)m(viour)g(of)g Fr(TAB)g Fs(completion:)40 b(completion)30 b(on)e(\014le)150 1877 y(names.)41 b(If)31 b(y)m(ou)g(do)f(not)h(w)m(an)m(t)g(Readline)h(to)f(complete)h(on)f (\014lenames,)g(y)m(ou)g(can)f(c)m(hange)i(the)f(binding)150 1986 y(of)g(the)f Fr(TAB)g Fs(k)m(ey)h(with)f Fr(rl_bind_key\(\))p Fs(.)390 2139 y Fr(int)47 b(rl_bind_key)e(\(int)h Fk(key)p Fr(,)h(rl_command_func_t)c(*)p Fk(function)p Fr(\);)275 2292 y(rl_bind_key\(\))29 b Fs(tak)m(es)35 b(t)m(w)m(o)g(argumen)m(ts:) 47 b Fi(k)m(ey)c Fs(is)33 b(the)h(c)m(haracter)h(that)f(y)m(ou)g(w)m (an)m(t)g(to)g(bind,)g(and)150 2402 y Fi(function)39 b Fs(is)f(the)h(address)f(of)h(the)g(function)g(to)g(call)i(when)c Fi(k)m(ey)48 b Fs(is)39 b(pressed.)65 b(Binding)38 b Fr(TAB)g Fs(to)i Fr(rl_)150 2511 y(insert\(\))c Fs(mak)m(es)k Fr(TAB)e Fs(insert)g(itself.)67 b Fr(rl_bind_key\(\))35 b Fs(returns)j(non-zero)h(if)g Fi(k)m(ey)47 b Fs(is)39 b(not)g(a)g(v)-5 b(alid)150 2621 y(ASCI)s(I)29 b(c)m(haracter)j(co)s (de)e(\(b)s(et)m(w)m(een)i(0)f(and)e(255\).)275 2774 y(Th)m(us,)g(to)i(disable)g(the)f(default)h Fr(TAB)e Fs(b)s(eha)m(vior,)i(the)g(follo)m(wing)g(su\016ces:)390 2927 y Fr(rl_bind_key)45 b(\('\\t',)h(rl_insert\);)275 3080 y Fs(This)25 b(co)s(de)i(should)e(b)s(e)h(executed)h(once)g(at)g (the)g(start)g(of)f(y)m(our)h(program;)g(y)m(ou)g(migh)m(t)g(write)g(a) g(func-)150 3190 y(tion)33 b(called)h Fr(initialize_readline\(\))27 b Fs(whic)m(h)33 b(p)s(erforms)e(this)h(and)h(other)g(desired)f (initializations,)150 3299 y(suc)m(h)e(as)h(installing)g(custom)g (completers)g(\(see)g(Section)h(2.6)f([Custom)f(Completers],)h(page)g (46\).)150 3559 y Fq(2.2)68 b(Custom)45 b(F)-11 b(unctions)150 3719 y Fs(Readline)28 b(pro)m(vides)f(man)m(y)g(functions)g(for)g (manipulating)h(the)f(text)h(of)g(the)f(line,)i(but)d(it)i(isn't)f(p)s (ossible)150 3828 y(to)37 b(an)m(ticipate)i(the)e(needs)f(of)h(all)g (programs.)59 b(This)36 b(section)h(describ)s(es)f(the)h(v)-5 b(arious)36 b(functions)h(and)150 3938 y(v)-5 b(ariables)27 b(de\014ned)e(within)g(the)h(Readline)h(library)f(whic)m(h)g(allo)m(w)h (a)g(user)e(program)h(to)h(add)e(customized)150 4048 y(functionalit)m(y)32 b(to)f(Readline.)275 4201 y(Before)37 b(declaring)g(an)m(y)g(functions)f(that)h(customize)h(Readline's)f(b)s (eha)m(vior,)h(or)f(using)f(an)m(y)h(func-)150 4310 y(tionalit)m(y)48 b(Readline)e(pro)m(vides)f(in)g(other)h(co)s(de,)k(an)45 b(application)i(writer)e(should)g(include)g(the)h(\014le)150 4420 y Fr()28 b Fs(in)33 b(an)m(y)h(\014le)f(that) h(uses)f(Readline's)h(features.)51 b(Since)33 b(some)h(of)g(the)f (de\014-)150 4529 y(nitions)e(in)g Fr(readline.h)d Fs(use)j(the)h Fr(stdio)d Fs(library)-8 b(,)32 b(the)f(\014le)h Fr()c Fs(should)i(b)s(e)h(included)f(b)s(efore)150 4639 y Fr(readline.h)p Fs(.)275 4792 y Fr(readline.h)d Fs(de\014nes)j(a)h(C)f(prepro)s(cessor) g(v)-5 b(ariable)31 b(that)g(should)f(b)s(e)g(treated)h(as)g(an)g(in)m (teger,)h Fr(RL_)150 4902 y(READLINE_VERSION)p Fs(,)20 b(whic)m(h)h(ma)m(y)i(b)s(e)f(used)f(to)i(conditionally)h(compile)f (application)g(co)s(de)f(dep)s(ending)150 5011 y(on)35 b(the)g(installed)h(Readline)f(v)m(ersion.)56 b(The)34 b(v)-5 b(alue)35 b(is)h(a)f(hexadecimal)h(enco)s(ding)f(of)g(the)h(ma)5 b(jor)35 b(and)150 5121 y(minor)f(v)m(ersion)g(n)m(um)m(b)s(ers)f(of)h (the)h(library)-8 b(,)35 b(of)f(the)h(form)e(0x)p Fi(MMmm)p Fs(.)53 b Fi(MM)45 b Fs(is)34 b(the)g(t)m(w)m(o-digit)j(ma)5 b(jor)150 5230 y(v)m(ersion)29 b(n)m(um)m(b)s(er;)g Fi(mm)f Fs(is)h(the)g(t)m(w)m(o-digit)j(minor)c(v)m(ersion)i(n)m(um)m(b)s(er.) 38 b(F)-8 b(or)30 b(Readline)g(4.2,)g(for)f(example,)150 5340 y(the)i(v)-5 b(alue)30 b(of)h Fr(RL_READLINE_VERSION)25 b Fs(w)m(ould)30 b(b)s(e)g Fr(0x0402)p Fs(.)p eop end %%Page: 24 28 TeXDict begin 24 27 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(24)150 299 y Fh(2.2.1)63 b(Readline)40 b(T)m(yp)s(edefs)150 446 y Fs(F)-8 b(or)31 b(readabilit)m(y)-8 b(,)33 b(w)m(e)d(declare)i(a) f(n)m(um)m(b)s(er)e(of)h(new)g(ob)5 b(ject)31 b(t)m(yp)s(es,)g(all)g(p) s(oin)m(ters)f(to)i(functions.)275 585 y(The)j(reason)h(for)f (declaring)h(these)h(new)e(t)m(yp)s(es)g(is)h(to)h(mak)m(e)f(it)g (easier)h(to)f(write)g(co)s(de)g(describing)150 694 y(p)s(oin)m(ters)30 b(to)h(C)f(functions)g(with)g(appropriately)h(protot)m(yp)s(ed)f (argumen)m(ts)h(and)f(return)f(v)-5 b(alues.)275 833 y(F)d(or)37 b(instance,)j(sa)m(y)d(w)m(e)g(w)m(an)m(t)h(to)g(declare)f (a)h(v)-5 b(ariable)37 b Fi(func)42 b Fs(as)37 b(a)g(p)s(oin)m(ter)g (to)g(a)h(function)e(whic)m(h)150 943 y(tak)m(es)27 b(t)m(w)m(o)g Fr(int)e Fs(argumen)m(ts)h(and)f(returns)f(an)i Fr(int)f Fs(\(this)h(is)f(the)h(t)m(yp)s(e)g(of)g(all)h(of)e(the)h(Readline)h (bindable)150 1052 y(functions\).)41 b(Instead)30 b(of)g(the)h(classic) h(C)e(declaration)275 1191 y Fr(int)f(\(*func\)\(\);)150 1330 y Fs(or)h(the)h(ANSI-C)f(st)m(yle)i(declaration)275 1468 y Fr(int)d(\(*func\)\(int,)e(int\);)150 1607 y Fs(w)m(e)k(ma)m(y)g (write)275 1746 y Fr(rl_command_func_t)25 b(*func;)275 1885 y Fs(The)k(full)h(list)i(of)e(function)g(p)s(oin)m(ter)g(t)m(yp)s (es)h(a)m(v)-5 b(ailable)33 b(is)150 2051 y Fr(typedef)28 b(int)i(rl_command_func_t)c(\(int,)i(int\);)150 2160 y(typedef)g(char)i(*rl_compentry_func_t)24 b(\(const)29 b(char)g(*,)h(int\);)150 2270 y(typedef)e(char)i (**rl_completion_func_t)24 b(\(const)29 b(char)g(*,)h(int,)f(int\);)150 2379 y(typedef)f(char)i(*rl_quote_func_t)c(\(char)i(*,)i(int,)f(char)h (*\);)150 2489 y(typedef)e(char)i(*rl_dequote_func_t)25 b(\(char)k(*,)h(int\);)150 2598 y(typedef)e(int)i(rl_compignore_func_t) 25 b(\(char)k(**\);)150 2708 y(typedef)f(void)i(rl_compdisp_func_t)25 b(\(char)k(**,)g(int,)h(int\);)150 2818 y(typedef)e(int)i (rl_hook_func_t)c(\(void\);)150 2927 y(typedef)i(int)i(rl_getc_func_t)c (\(FILE)j(*\);)150 3037 y(typedef)f(int)i(rl_linebuf_func_t)c(\(char)i (*,)i(int\);)150 3146 y(typedef)e(int)i(rl_intfunc_t)d(\(int\);)150 3256 y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)150 3366 y(typedef)h(int)i(rl_icpfunc_t)d(\(char)i(*\);)150 3475 y(typedef)f(int)i(rl_icppfunc_t)d(\(char)i(**\);)150 3585 y(typedef)f(void)i(rl_voidfunc_t)c(\(void\);)150 3694 y(typedef)i(void)i(rl_vintfunc_t)c(\(int\);)150 3804 y(typedef)i(void)i(rl_vcpfunc_t)d(\(char)i(*\);)150 3914 y(typedef)f(void)i(rl_vcppfunc_t)c(\(char)j(**\);)150 4090 y Fh(2.2.2)63 b(W)-10 b(riting)41 b(a)f(New)h(F)-10 b(unction)150 4237 y Fs(In)30 b(order)h(to)h(write)f(new)g(functions)f (for)h(Readline,)h(y)m(ou)g(need)e(to)i(kno)m(w)f(the)g(calling)i(con)m (v)m(en)m(tions)g(for)150 4347 y(k)m(eyb)s(oard-in)m(v)m(ok)m(ed)f (functions,)d(and)h(the)g(names)g(of)g(the)g(v)-5 b(ariables)31 b(that)f(describ)s(e)g(the)g(curren)m(t)g(state)150 4456 y(of)h(the)f(line)h(read)f(so)h(far.)275 4595 y(The)e(calling)j (sequence)f(for)f(a)h(command)f Fr(foo)g Fs(lo)s(oks)g(lik)m(e)390 4734 y Fr(int)47 b(foo)g(\(int)f(count,)h(int)f(key\))150 4872 y Fs(where)35 b Fi(coun)m(t)k Fs(is)d(the)g(n)m(umeric)g(argumen)m (t)g(\(or)g(1)g(if)g(defaulted\))h(and)e Fi(k)m(ey)44 b Fs(is)36 b(the)g(k)m(ey)h(that)f(in)m(v)m(ok)m(ed)150 4982 y(this)30 b(function.)275 5121 y(It)23 b(is)g(completely)h(up)e (to)i(the)f(function)g(as)g(to)h(what)f(should)f(b)s(e)h(done)f(with)h (the)g(n)m(umeric)g(argumen)m(t.)150 5230 y(Some)40 b(functions)g(use)f (it)i(as)f(a)g(rep)s(eat)h(coun)m(t,)i(some)d(as)h(a)f(\015ag,)j(and)c (others)h(to)h(c)m(ho)s(ose)g(alternate)150 5340 y(b)s(eha)m(vior)i (\(refreshing)g(the)h(curren)m(t)f(line)h(as)f(opp)s(osed)g(to)h (refreshing)e(the)i(screen,)j(for)c(example\).)p eop end %%Page: 25 29 TeXDict begin 25 28 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(25)150 299 y(Some)33 b(c)m(ho)s(ose)h(to)g(ignore)g(it.)50 b(In)32 b(general,)j(if)f(a)f(function)g(uses)g(the)g(n)m(umeric)g(argumen)m(t) h(as)f(a)h(rep)s(eat)150 408 y(coun)m(t,)29 b(it)g(should)e(b)s(e)g (able)h(to)h(do)f(something)g(useful)f(with)h(b)s(oth)f(negativ)m(e)j (and)d(p)s(ositiv)m(e)i(argumen)m(ts.)150 518 y(A)m(t)i(the)g(v)m(ery)g (least,)h(it)e(should)g(b)s(e)g(a)m(w)m(are)h(that)g(it)g(can)g(b)s(e)f (passed)g(a)g(negativ)m(e)j(argumen)m(t.)275 658 y(A)27 b(command)h(function)f(should)g(return)g(0)h(if)g(its)g(action)h (completes)g(successfully)-8 b(,)29 b(and)e(a)h(non-zero)150 768 y(v)-5 b(alue)40 b(if)f(some)g(error)g(o)s(ccurs.)67 b(This)38 b(is)h(the)g(con)m(v)m(en)m(tion)j(ob)s(ey)m(ed)d(b)m(y)g (all)h(of)f(the)h(builtin)e(Readline)150 877 y(bindable)30 b(command)g(functions.)150 1118 y Fq(2.3)68 b(Readline)47 b(V)-11 b(ariables)150 1278 y Fs(These)30 b(v)-5 b(ariables)31 b(are)g(a)m(v)-5 b(ailable)33 b(to)e(function)f(writers.)3371 1473 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_line_buffer)390 1583 y Fs(This)30 b(is)i(the)f(line)g(gathered)h(so)f(far.)43 b(Y)-8 b(ou)32 b(are)f(w)m(elcome)i(to)f(mo)s(dify)f(the)g(con)m(ten)m (ts)i(of)e(the)g(line,)390 1693 y(but)k(see)h(Section)g(2.4.5)h([Allo)m (wing)h(Undoing],)f(page)f(34.)57 b(The)35 b(function)g Fr(rl_extend_line_)390 1802 y(buffer)29 b Fs(is)h(a)m(v)-5 b(ailable)33 b(to)e(increase)g(the)g(memory)f(allo)s(cated)i(to)f Fr(rl_line_buffer)p Fs(.)3371 1998 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_point)390 2107 y Fs(The)30 b(o\013set)h(of)g(the)f (curren)m(t)h(cursor)e(p)s(osition)i(in)f Fr(rl_line_buffer)c Fs(\(the)31 b Fj(p)-5 b(oint)9 b Fs(\).)3371 2303 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_end)390 2413 y Fs(The)27 b(n)m(um)m(b)s(er)g(of)h(c)m(haracters)h(presen)m(t)f(in)g Fr(rl_line_buffer)p Fs(.)36 b(When)27 b Fr(rl_point)f Fs(is)i(at)h(the)f(end)390 2522 y(of)j(the)f(line,)h Fr(rl_point)d Fs(and)i Fr(rl_end)f Fs(are)h(equal.)3371 2718 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_mark)390 2827 y Fs(The)36 b Fi(mark)42 b Fs(\(sa)m(v)m(ed)d(p)s(osition\))e(in)g (the)g(curren)m(t)f(line.)61 b(If)36 b(set,)k(the)d(mark)f(and)h(p)s (oin)m(t)f(de\014ne)h(a)390 2937 y Fj(r)-5 b(e)g(gion)p Fs(.)3371 3133 y([V)d(ariable])-3598 b Fg(int)53 b(rl_done)390 3242 y Fs(Setting)22 b(this)g(to)g(a)g(non-zero)g(v)-5 b(alue)23 b(causes)f(Readline)g(to)g(return)f(the)h(curren)m(t)f(line)h (immediately)-8 b(.)3371 3438 y([V)g(ariable])-3598 b Fg(int)53 b(rl_num_chars_to_read)390 3548 y Fs(Setting)34 b(this)e(to)i(a)f(p)s(ositiv)m(e)h(v)-5 b(alue)34 b(b)s(efore)e (calling)i Fr(readline\(\))d Fs(causes)i(Readline)g(to)h(return)390 3657 y(after)i(accepting)h(that)g(man)m(y)e(c)m(haracters,)k(rather)d (than)f(reading)h(up)e(to)j(a)f(c)m(haracter)h(b)s(ound)390 3767 y(to)31 b Fr(accept-line)p Fs(.)3371 3962 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_pending_input)390 4072 y Fs(Setting)26 b(this)f(to)h(a)f(v)-5 b(alue)26 b(mak)m(es)g(it)g(the) f(next)g(k)m(eystrok)m(e)i(read.)39 b(This)24 b(is)i(a)f(w)m(a)m(y)h (to)g(stu\013)f(a)g(single)390 4182 y(c)m(haracter)32 b(in)m(to)f(the)g(input)e(stream.)3371 4377 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_dispatching)390 4487 y Fs(Set)24 b(to)h(a)g(non-zero)g (v)-5 b(alue)24 b(if)h(a)f(function)g(is)g(b)s(eing)g(called)i(from)d (a)i(k)m(ey)g(binding;)g(zero)g(otherwise.)390 4596 y(Application)37 b(functions)e(can)h(test)h(this)e(to)i(disco)m(v)m(er)g(whether)e(they) h(w)m(ere)g(called)h(directly)f(or)390 4706 y(b)m(y)30 b(Readline's)h(dispatc)m(hing)g(mec)m(hanism.)3371 4902 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_erase_empty_line)390 5011 y Fs(Setting)47 b(this)e(to)i(a)f(non-zero)h(v)-5 b(alue)46 b(causes)h(Readline)f(to)h(completely)g(erase)g(the)f(curren) m(t)390 5121 y(line,)f(including)c(an)m(y)g(prompt,)j(an)m(y)d(time)h (a)g(newline)f(is)h(t)m(yp)s(ed)f(as)g(the)h(only)f(c)m(haracter)i(on) 390 5230 y(an)36 b(otherwise-empt)m(y)i(line.)58 b(The)36 b(cursor)g(is)g(mo)m(v)m(ed)h(to)g(the)g(b)s(eginning)e(of)i(the)f (newly-blank)390 5340 y(line.)p eop end %%Page: 26 30 TeXDict begin 26 29 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(26)3371 299 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_prompt)390 408 y Fs(The)26 b(prompt)f(Readline)i(uses.)38 b(This)26 b(is)g(set)h(from)e(the)i(argumen)m(t)f(to)h Fr(readline\(\))p Fs(,)d(and)i(should)390 518 y(not)h(b)s(e)f(assigned)h(to)h(directly)-8 b(.)41 b(The)26 b Fr(rl_set_prompt\(\))d Fs(function)j(\(see)i(Section) g(2.4.6)h([Redis-)390 628 y(pla)m(y],)i(page)h(35\))f(ma)m(y)g(b)s(e)f (used)f(to)j(mo)s(dify)d(the)i(prompt)e(string)h(after)h(calling)h Fr(readline\(\))p Fs(.)3371 814 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_display_prompt)390 924 y Fs(The)31 b(string)h(displa)m(y)m(ed)g(as)g(the)g(prompt.)44 b(This)31 b(is)h(usually)f(iden)m(tical)j(to)e Fi(rl)p 3031 924 28 4 v 40 w(prompt)p Fs(,)f(but)g(ma)m(y)390 1033 y(b)s(e)j(c)m(hanged) g(temp)s(orarily)h(b)m(y)f(functions)g(that)g(use)g(the)h(prompt)e (string)h(as)h(a)f(message)i(area,)390 1143 y(suc)m(h)30 b(as)h(incremen)m(tal)g(searc)m(h.)3371 1329 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_already_prompted)390 1439 y Fs(If)36 b(an)g(application)i(wishes)d(to)i(displa)m(y)g(the)f (prompt)g(itself,)i(rather)f(than)f(ha)m(v)m(e)h(Readline)g(do)390 1548 y(it)c(the)g(\014rst)f(time)i Fr(readline\(\))c Fs(is)i(called,)j(it)e(should)f(set)h(this)g(v)-5 b(ariable)34 b(to)f(a)g(non-zero)g(v)-5 b(alue)390 1658 y(after)38 b(displa)m(ying)h(the)f(prompt.)63 b(The)37 b(prompt)g(m)m(ust)h(also)h (b)s(e)e(passed)g(as)i(the)f(argumen)m(t)g(to)390 1767 y Fr(readline\(\))30 b Fs(so)j(the)h(redispla)m(y)f(functions)f(can)i (up)s(date)e(the)h(displa)m(y)g(prop)s(erly)-8 b(.)48 b(The)32 b(calling)390 1877 y(application)g(is)e(resp)s(onsible)g(for)g (managing)h(the)f(v)-5 b(alue;)31 b(Readline)g(nev)m(er)g(sets)g(it.) 3371 2063 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_library_version)390 2173 y Fs(The)30 b(v)m(ersion)h(n)m(um)m(b)s (er)e(of)h(this)h(revision)f(of)h(the)f(library)-8 b(.)3371 2359 y([V)g(ariable])-3598 b Fg(int)53 b(rl_readline_version)390 2469 y Fs(An)34 b(in)m(teger)h(enco)s(ding)f(the)g(curren)m(t)g(v)m (ersion)h(of)f(the)g(library)-8 b(.)52 b(The)34 b(enco)s(ding)g(is)g (of)g(the)g(form)390 2578 y(0x)p Fi(MMmm)p Fs(,)39 b(where)d Fi(MM)47 b Fs(is)36 b(the)h(t)m(w)m(o-digit)i(ma)5 b(jor)36 b(v)m(ersion)h(n)m(um)m(b)s(er,)g(and)f Fi(mm)g Fs(is)h(the)f(t)m(w)m (o-)390 2688 y(digit)i(minor)f(v)m(ersion)h(n)m(um)m(b)s(er.)60 b(F)-8 b(or)38 b(example,)i(for)d(Readline-4.2,)k Fr (rl_readline_version)390 2798 y Fs(w)m(ould)30 b(ha)m(v)m(e)i(the)e(v) -5 b(alue)31 b(0x0402.)3371 2984 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_gnu_readline_p)390 3093 y Fs(Alw)m(a)m(ys)32 b(set)f(to)g(1,)g(denoting)f(that)h(this)g(is)f Fl(gnu)g Fs(readline)h(rather)f(than)g(some)h(em)m(ulation.)3371 3280 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_terminal_name)390 3389 y Fs(The)28 b(terminal)g(t)m(yp)s(e,)h(used) e(for)h(initialization.)43 b(If)28 b(not)g(set)h(b)m(y)e(the)i (application,)h(Readline)f(sets)390 3499 y(this)h(to)h(the)g(v)-5 b(alue)31 b(of)f(the)h Fr(TERM)e Fs(en)m(vironmen)m(t)i(v)-5 b(ariable)31 b(the)g(\014rst)e(time)j(it)e(is)h(called.)3371 3685 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_readline_name)390 3795 y Fs(This)30 b(v)-5 b(ariable)32 b(is)g(set)f(to)h(a)g(unique)e(name)h(b)m(y)g(eac)m(h)i(application)f (using)f(Readline.)44 b(The)30 b(v)-5 b(alue)390 3904 y(allo)m(ws)29 b(conditional)h(parsing)d(of)h(the)h(inputrc)e(\014le)h (\(see)h(Section)g(1.3.2)g([Conditional)g(Init)f(Con-)390 4014 y(structs],)j(page)g(11\).)3371 4200 y([V)-8 b(ariable])-3598 b Fg(FILE)54 b(*)e(rl_instream)390 4310 y Fs(The)40 b(stdio)i(stream)f (from)g(whic)m(h)f(Readline)i(reads)f(input.)71 b(If)41 b Fr(NULL)p Fs(,)i(Readline)e(defaults)g(to)390 4419 y Fi(stdin)p Fs(.)3371 4606 y([V)-8 b(ariable])-3598 b Fg(FILE)54 b(*)e(rl_outstream)390 4715 y Fs(The)34 b(stdio)h(stream)f(to)i(whic)m(h)e(Readline)h(p)s(erforms)e(output.)52 b(If)34 b Fr(NULL)p Fs(,)h(Readline)g(defaults)f(to)390 4825 y Fi(stdout)p Fs(.)3371 5011 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_prefer_env_winsize)390 5121 y Fs(If)28 b(non-zero,)h(Readline)g(giv)m(es)h(v)-5 b(alues)29 b(found)e(in)h(the) g Fr(LINES)f Fs(and)h Fr(COLUMNS)e Fs(en)m(vironmen)m(t)j(v)-5 b(ari-)390 5230 y(ables)41 b(greater)h(precedence)g(than)e(v)-5 b(alues)41 b(fetc)m(hed)h(from)e(the)h(k)m(ernel)h(when)e(computing)h (the)390 5340 y(screen)30 b(dimensions.)p eop end %%Page: 27 31 TeXDict begin 27 30 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(27)3371 299 y([V)-8 b(ariable])-3598 b Fg(rl_command_func_t)57 b(*)c(rl_last_func)390 408 y Fs(The)34 b(address)g(of)h(the)g(last)h (command)e(function)g(Readline)i(executed.)55 b(Ma)m(y)35 b(b)s(e)g(used)f(to)h(test)390 518 y(whether)30 b(or)g(not)h(a)f (function)h(is)f(b)s(eing)g(executed)h(t)m(wice)h(in)e(succession,)h (for)f(example.)3371 737 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t) 57 b(*)52 b(rl_startup_hook)390 847 y Fs(If)34 b(non-zero,)i(this)e(is) h(the)f(address)f(of)i(a)g(function)f(to)h(call)g(just)f(b)s(efore)g Fr(readline)e Fs(prin)m(ts)i(the)390 956 y(\014rst)c(prompt.)3371 1176 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t)57 b(*)52 b(rl_pre_input_hook)390 1285 y Fs(If)35 b(non-zero,)j(this)d(is) g(the)h(address)f(of)g(a)h(function)f(to)i(call)f(after)g(the)g (\014rst)f(prompt)f(has)i(b)s(een)390 1395 y(prin)m(ted)30 b(and)g(just)f(b)s(efore)h Fr(readline)f Fs(starts)h(reading)h(input)e (c)m(haracters.)3371 1614 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t)57 b(*)52 b(rl_event_hook)390 1724 y Fs(If)40 b(non-zero,)k(this)d(is)f(the)h(address)f(of)h(a)g(function) f(to)h(call)h(p)s(erio)s(dically)f(when)f(Readline)h(is)390 1833 y(w)m(aiting)30 b(for)f(terminal)h(input.)39 b(By)30 b(default,)g(this)f(will)g(b)s(e)g(called)h(at)g(most)f(ten)h(times)f (a)h(second)390 1943 y(if)g(there)h(is)f(no)h(k)m(eyb)s(oard)f(input.) 3371 2162 y([V)-8 b(ariable])-3598 b Fg(rl_getc_func_t)57 b(*)52 b(rl_getc_function)390 2271 y Fs(If)30 b(non-zero,)h(Readline)g (will)g(call)h(indirectly)e(through)g(this)h(p)s(oin)m(ter)f(to)h(get)h (a)e(c)m(haracter)i(from)390 2381 y(the)21 b(input)g(stream.)38 b(By)21 b(default,)j(it)e(is)f(set)h(to)g Fr(rl_getc)p Fs(,)f(the)h(default)f(Readline)h(c)m(haracter)h(input)390 2491 y(function)f(\(see)i(Section)g(2.4.8)g([Character)g(Input],)f (page)h(36\).)39 b(In)22 b(general,)k(an)c(application)i(that)390 2600 y(sets)31 b Fi(rl)p 635 2600 28 4 v 40 w(getc)p 835 2600 V 41 w(function)f Fs(should)g(consider)g(setting)h Fi(rl)p 2234 2600 V 40 w(input)p 2487 2600 V 39 w(a)m(v)-5 b(ailable)p 2867 2600 V 43 w(ho)s(ok)36 b Fs(as)30 b(w)m(ell.)3371 2819 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t)57 b(*)52 b(rl_signal_event_hook)390 2929 y Fs(If)27 b(non-zero,)h(this)f (is)g(the)g(address)f(of)i(a)f(function)g(to)g(call)i(if)e(a)g(read)g (system)g(call)h(is)g(in)m(terrupted)390 3039 y(when)h(Readline)i(is)g (reading)f(terminal)h(input.)3371 3258 y([V)-8 b(ariable])-3598 b Fg(rl_hook_func_t)57 b(*)52 b(rl_input_available_ho)q(ok)390 3367 y Fs(If)28 b(non-zero,)j(Readline)e(will)g(use)g(this)g (function's)g(return)f(v)-5 b(alue)29 b(when)f(it)i(needs)e(to)i (determine)390 3477 y(whether)42 b(or)g(not)h(there)f(is)h(a)m(v)-5 b(ailable)45 b(input)c(on)i(the)f(curren)m(t)g(input)g(source.)77 b(The)42 b(default)390 3587 y(ho)s(ok)25 b(c)m(hec)m(ks)i Fr(rl_instream)p Fs(;)d(if)i(an)f(application)i(is)e(using)g(a)h (di\013eren)m(t)g(input)e(source,)j(it)f(should)390 3696 y(set)34 b(the)f(ho)s(ok)h(appropriately)-8 b(.)50 b(Readline)34 b(queries)f(for)h(a)m(v)-5 b(ailable)35 b(input)e(when)f(implemen)m (ting)390 3806 y(in)m(tra-k)m(ey-sequence)f(timeouts)e(during)e(input)g (and)h(incremen)m(tal)h(searc)m(hes.)41 b(This)27 b(ma)m(y)i(use)f(an) 390 3915 y(application-sp)s(eci\014c)22 b(timeout)g(b)s(efore)f (returning)f(a)h(v)-5 b(alue;)25 b(Readline)c(uses)f(the)i(v)-5 b(alue)21 b(passed)f(to)390 4025 y Fr(rl_set_keyboard_input_ti)o(meou)o (t\(\))e Fs(or)24 b(the)g(v)-5 b(alue)25 b(of)g(the)f(user-settable)i Fi(k)m(eyseq-timeout)390 4134 y Fs(v)-5 b(ariable.)48 b(This)31 b(is)i(designed)f(for)g(use)g(b)m(y)g(applications)i(using)e (Readline's)h(callbac)m(k)h(in)m(terface)390 4244 y(\(see)d(Section)f (2.4.12)i([Alternate)f(In)m(terface],)h(page)e(40\),)i(whic)m(h)d(ma)m (y)h(not)g(use)g(the)g(traditional)390 4354 y Fr(read\(2\))39 b Fs(and)g(\014le)i(descriptor)f(in)m(terface,)45 b(or)c(other)f (applications)i(using)e(a)h(di\013eren)m(t)g(input)390 4463 y(mec)m(hanism.)k(If)31 b(an)g(application)i(uses)e(an)h(input)e (mec)m(hanism)i(or)g(ho)s(ok)f(that)h(can)g(p)s(oten)m(tially)390 4573 y(exceed)38 b(the)e(v)-5 b(alue)37 b(of)g Fi(k)m(eyseq-timeout)p Fs(,)k(it)c(should)e(increase)j(the)e(timeout)i(or)f(set)g(this)f(ho)s (ok)390 4682 y(appropriately)d(ev)m(en)g(when)e(not)h(using)g(the)h (callbac)m(k)h(in)m(terface.)48 b(In)31 b(general,)j(an)f(application) 390 4792 y(that)e(sets)g Fi(rl)p 832 4792 V 40 w(getc)p 1032 4792 V 41 w(function)f Fs(should)g(consider)g(setting)h Fi(rl)p 2431 4792 V 40 w(input)p 2684 4792 V 39 w(a)m(v)-5 b(ailable)p 3064 4792 V 43 w(ho)s(ok)36 b Fs(as)30 b(w)m(ell.)3371 5011 y([V)-8 b(ariable])-3598 b Fg(rl_voidfunc_t)56 b(*)d (rl_redisplay_function)390 5121 y Fs(If)36 b(non-zero,)i(Readline)e (will)h(call)g(indirectly)f(through)g(this)g(p)s(oin)m(ter)g(to)g(up)s (date)g(the)g(displa)m(y)390 5230 y(with)27 b(the)g(curren)m(t)g(con)m (ten)m(ts)h(of)f(the)h(editing)f(bu\013er.)39 b(By)27 b(default,)h(it)g(is)f(set)g(to)h Fr(rl_redisplay)p Fs(,)390 5340 y(the)j(default)f(Readline)h(redispla)m(y)g(function)f(\(see)h (Section)g(2.4.6)h([Redispla)m(y],)g(page)f(35\).)p eop end %%Page: 28 32 TeXDict begin 28 31 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(28)3371 299 y([V)-8 b(ariable])-3598 b Fg(rl_vintfunc_t)56 b(*)d (rl_prep_term_function)390 408 y Fs(If)24 b(non-zero,)i(Readline)e (will)h(call)g(indirectly)g(through)e(this)h(p)s(oin)m(ter)g(to)h (initialize)h(the)e(terminal.)390 518 y(The)37 b(function)f(tak)m(es)j (a)e(single)h(argumen)m(t,)i(an)d Fr(int)f Fs(\015ag)h(that)h(sa)m(ys)g (whether)e(or)h(not)g(to)h(use)390 628 y(eigh)m(t-bit)e(c)m(haracters.) 53 b(By)35 b(default,)g(this)f(is)g(set)h(to)g Fr(rl_prep_terminal)29 b Fs(\(see)35 b(Section)g(2.4.9)390 737 y([T)-8 b(erminal)31 b(Managemen)m(t],)i(page)e(37\).)3371 915 y([V)-8 b(ariable])-3598 b Fg(rl_voidfunc_t)56 b(*)d(rl_deprep_term_functio)q(n)390 1024 y Fs(If)36 b(non-zero,)j(Readline)e(will)g(call)h(indirectly)f (through)f(this)g(p)s(oin)m(ter)h(to)g(reset)g(the)g(terminal.)390 1134 y(This)d(function)h(should)f(undo)g(the)h(e\013ects)h(of)f Fr(rl_prep_term_function)p Fs(.)49 b(By)35 b(default,)i(this)390 1243 y(is)30 b(set)h(to)g Fr(rl_deprep_terminal)26 b Fs(\(see)31 b(Section)g(2.4.9)i([T)-8 b(erminal)30 b(Managemen)m(t],)j (page)e(37\).)3371 1421 y([V)-8 b(ariable])-3598 b Fg(Keymap)54 b(rl_executing_keymap)390 1530 y Fs(This)35 b(v)-5 b(ariable)37 b(is)f(set)g(to)h(the)f(k)m(eymap)h(\(see)g(Section)f(2.4.2)i ([Keymaps],)g(page)e(30\))i(in)d(whic)m(h)390 1640 y(the)c(curren)m (tly)f(executing)i(readline)e(function)g(w)m(as)h(found.)3371 1817 y([V)-8 b(ariable])-3598 b Fg(Keymap)54 b(rl_binding_keymap)390 1927 y Fs(This)35 b(v)-5 b(ariable)37 b(is)f(set)g(to)h(the)f(k)m (eymap)h(\(see)g(Section)f(2.4.2)i([Keymaps],)g(page)e(30\))i(in)d (whic)m(h)390 2036 y(the)c(last)g(k)m(ey)g(binding)e(o)s(ccurred.)3371 2213 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_executing_macro)390 2323 y Fs(This)30 b(v)-5 b(ariable)31 b(is)f(set)h(to)g(the)g(text)g (of)g(an)m(y)f(curren)m(tly-executing)i(macro.)3371 2500 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_executing_key)390 2610 y Fs(The)30 b(k)m(ey)h(that)g(caused)f(the)h(dispatc)m(h)g(to)g (the)f(curren)m(tly-executing)i(Readline)f(function.)3371 2787 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(rl_executing_keyseq) 390 2897 y Fs(The)35 b(full)g(k)m(ey)h(sequence)g(that)g(caused)g(the)g (dispatc)m(h)f(to)i(the)e(curren)m(tly-executing)i(Readline)390 3006 y(function.)3371 3184 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_key_sequence_lengt)q(h)390 3293 y Fs(The)30 b(n)m(um)m(b)s(er)f(of)h(c)m(haracters)i(in)e Fi(rl)p 1617 3293 28 4 v 40 w(executing)p 2032 3293 V 41 w(k)m(eyseq)p Fs(.)3371 3471 y([V)-8 b(ariable])-3598 b Fg(int)53 b (rl_readline_state)390 3580 y Fs(A)35 b(v)-5 b(ariable)35 b(with)f(bit)g(v)-5 b(alues)35 b(that)g(encapsulate)h(the)e(curren)m(t) h(Readline)g(state.)54 b(A)34 b(bit)h(is)f(set)390 3690 y(with)k(the)g Fr(RL_SETSTATE)c Fs(macro,)41 b(and)c(unset)h(with)f (the)h Fr(RL_UNSETSTATE)d Fs(macro.)63 b(Use)39 b(the)390 3799 y Fr(RL_ISSTATE)34 b Fs(macro)k(to)g(test)g(whether)f(a)h (particular)f(state)i(bit)e(is)g(set.)62 b(Curren)m(t)36 b(state)j(bits)390 3909 y(include:)390 4064 y Fr(RL_STATE_NONE)870 4173 y Fs(Readline)31 b(has)f(not)h(y)m(et)g(b)s(een)f(called,)i(nor)e (has)g(it)h(b)s(egun)e(to)i(initialize.)390 4328 y Fr (RL_STATE_INITIALIZING)870 4437 y Fs(Readline)g(is)f(initializing)j (its)e(in)m(ternal)g(data)g(structures.)390 4592 y Fr (RL_STATE_INITIALIZED)870 4702 y Fs(Readline)g(has)f(completed)h(its)g (initialization.)390 4856 y Fr(RL_STATE_TERMPREPPED)870 4966 y Fs(Readline)e(has)g(mo)s(di\014ed)e(the)i(terminal)g(mo)s(des)f (to)i(do)e(its)i(o)m(wn)e(input)g(and)g(redis-)870 5076 y(pla)m(y)-8 b(.)390 5230 y Fr(RL_STATE_READCMD)870 5340 y Fs(Readline)31 b(is)f(reading)h(a)g(command)f(from)g(the)g(k)m(eyb)s (oard.)p eop end %%Page: 29 33 TeXDict begin 29 32 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(29)390 299 y Fr(RL_STATE_METANEXT)870 408 y Fs(Readline)31 b(is)f(reading)h (more)f(input)g(after)h(reading)f(the)h(meta-pre\014x)f(c)m(haracter.) 390 576 y Fr(RL_STATE_DISPATCHING)870 686 y Fs(Readline)h(is)f(dispatc) m(hing)h(to)g(a)g(command.)390 853 y Fr(RL_STATE_MOREINPUT)870 963 y Fs(Readline)g(is)f(reading)h(more)f(input)g(while)g(executing)i (an)e(editing)h(command.)390 1130 y Fr(RL_STATE_ISEARCH)870 1240 y Fs(Readline)g(is)f(p)s(erforming)g(an)g(incremen)m(tal)i (history)e(searc)m(h.)390 1408 y Fr(RL_STATE_NSEARCH)870 1517 y Fs(Readline)h(is)f(p)s(erforming)g(a)g(non-incremen)m(tal)i (history)e(searc)m(h.)390 1685 y Fr(RL_STATE_SEARCH)870 1794 y Fs(Readline)21 b(is)f(searc)m(hing)i(bac)m(kw)m(ard)e(or)h(forw) m(ard)e(through)h(the)h(history)f(for)g(a)h(string.)390 1962 y Fr(RL_STATE_NUMERICARG)870 2072 y Fs(Readline)31 b(is)f(reading)h(a)g(n)m(umeric)f(argumen)m(t.)390 2239 y Fr(RL_STATE_MACROINPUT)870 2349 y Fs(Readline)25 b(is)f(curren)m(tly) g(getting)i(its)f(input)e(from)h(a)g(previously-de\014ned)f(k)m(eyb)s (oard)870 2458 y(macro.)390 2626 y Fr(RL_STATE_MACRODEF)870 2736 y Fs(Readline)31 b(is)f(curren)m(tly)h(reading)f(c)m(haracters)i (de\014ning)e(a)g(k)m(eyb)s(oard)h(macro.)390 2903 y Fr(RL_STATE_OVERWRITE)870 3013 y Fs(Readline)g(is)f(in)g(o)m(v)m (erwrite)i(mo)s(de.)390 3180 y Fr(RL_STATE_COMPLETING)870 3290 y Fs(Readline)f(is)f(p)s(erforming)g(w)m(ord)g(completion.)390 3458 y Fr(RL_STATE_SIGHANDLER)870 3567 y Fs(Readline)h(is)f(curren)m (tly)h(executing)g(the)g(readline)g(signal)g(handler.)390 3735 y Fr(RL_STATE_UNDOING)870 3844 y Fs(Readline)g(is)f(p)s(erforming) g(an)g(undo.)390 4012 y Fr(RL_STATE_INPUTPENDING)870 4122 y Fs(Readline)h(has)f(input)g(p)s(ending)f(due)g(to)i(a)g(call)h (to)f Fr(rl_execute_next\(\))p Fs(.)390 4289 y Fr(RL_STATE_TTYCSAVED) 870 4399 y Fs(Readline)g(has)f(sa)m(v)m(ed)i(the)e(v)-5 b(alues)31 b(of)f(the)h(terminal's)g(sp)s(ecial)g(c)m(haracters.)390 4566 y Fr(RL_STATE_CALLBACK)870 4676 y Fs(Readline)44 b(is)f(curren)m(tly)g(using)f(the)h(alternate)i(\(callbac)m(k\))h(in)m (terface)e(\(see)g(Sec-)870 4786 y(tion)31 b(2.4.12)h([Alternate)h(In)m (terface],)f(page)f(40\).)390 4953 y Fr(RL_STATE_VIMOTION)870 5063 y Fs(Readline)g(is)f(reading)h(the)f(argumen)m(t)h(to)g(a)g(vi-mo) s(de)g Fr(")p Fs(motion)p Fr(")f Fs(command.)390 5230 y Fr(RL_STATE_MULTIKEY)870 5340 y Fs(Readline)h(is)f(reading)h(a)g(m)m (ultiple-k)m(eystrok)m(e)i(command.)p eop end %%Page: 30 34 TeXDict begin 30 33 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(30)390 299 y Fr(RL_STATE_VICMDONCE)870 408 y Fs(Readline)40 b(has)f(en)m(tered)g(vi)g(command)g(\(mo)m(v)m(emen)m(t\))j(mo)s(de)d (at)h(least)g(one)f(time)870 518 y(during)29 b(the)i(curren)m(t)f(call) i(to)f Fr(readline\(\))p Fs(.)390 672 y Fr(RL_STATE_DONE)870 782 y Fs(Readline)d(has)g(read)f(a)i(k)m(ey)f(sequence)g(b)s(ound)e(to) i Fr(accept-line)d Fs(and)i(is)h(ab)s(out)f(to)870 891 y(return)i(the)i(line)g(to)g(the)f(caller.)3371 1067 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_explicit_arg)390 1177 y Fs(Set)39 b(to)g(a)h(non-zero)f(v)-5 b(alue)39 b(if)g(an)g(explicit)h(n)m(umeric)e(argumen)m(t)i(w)m(as)f(sp)s (eci\014ed)f(b)m(y)g(the)h(user.)390 1287 y(Only)30 b(v)-5 b(alid)30 b(in)h(a)f(bindable)g(command)g(function.)3371 1463 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_numeric_arg)390 1572 y Fs(Set)45 b(to)h(the)g(v)-5 b(alue)46 b(of)f(an)m(y)h(n)m (umeric)f(argumen)m(t)h(explicitly)h(sp)s(eci\014ed)d(b)m(y)h(the)h (user)e(b)s(efore)390 1682 y(executing)27 b(the)f(curren)m(t)g (Readline)h(function.)38 b(Only)26 b(v)-5 b(alid)26 b(in)g(a)g (bindable)f(command)h(function.)3371 1858 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_editing_mode)390 1968 y Fs(Set)25 b(to)h(a)g(v)-5 b(alue)25 b(denoting)h(Readline's)f(curren)m(t)g(editing)h(mo)s(de.)39 b(A)25 b(v)-5 b(alue)25 b(of)h Fi(1)32 b Fs(means)25 b(Readline)390 2077 y(is)30 b(curren)m(tly)h(in)f(emacs)h(mo)s(de;)f Fi(0)38 b Fs(means)31 b(that)f(vi)h(mo)s(de)f(is)g(activ)m(e.)150 2304 y Fq(2.4)68 b(Readline)47 b(Con)l(v)l(enience)f(F)-11 b(unctions)150 2526 y Fh(2.4.1)63 b(Naming)41 b(a)g(F)-10 b(unction)150 2673 y Fs(The)24 b(user)h(can)g(dynamically)g(c)m(hange)h (the)f(bindings)f(of)h(k)m(eys)h(while)e(using)h(Readline.)39 b(This)24 b(is)h(done)g(b)m(y)150 2782 y(represen)m(ting)30 b(the)h(function)f(with)g(a)g(descriptiv)m(e)h(name.)41 b(The)30 b(user)f(is)i(able)f(to)h(t)m(yp)s(e)g(the)f(descriptiv)m(e) 150 2892 y(name)g(when)g(referring)g(to)h(the)f(function.)41 b(Th)m(us,)29 b(in)h(an)h(init)f(\014le,)h(one)g(migh)m(t)g(\014nd)390 3024 y Fr(Meta-Rubout:)92 b(backward-kill-word)275 3156 y Fs(This)84 b(binds)h(the)g(k)m(eystrok)m(e)j Fr(Meta-Rubout)82 b Fs(to)87 b(the)e(function)h Fj(descriptively)94 b Fs(named)150 3265 y Fr(backward-kill-word)p Fs(.)63 b(Y)-8 b(ou,)43 b(as)d(the)g(programmer,)i(should)c(bind)g(the)i(functions)f(y)m(ou)h (write)g(to)150 3375 y(descriptiv)m(e)31 b(names)g(as)f(w)m(ell.)42 b(Readline)31 b(pro)m(vides)f(a)h(function)f(for)g(doing)h(that:)3350 3551 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_add_defun)c Ff(\()p Fi(const)32 b(c)m(har)e(*name,)h(rl)p 1885 3551 28 4 v 40 w(command)p 2309 3551 V 40 w(func)p 2519 3551 V 39 w(t)g(*function,)g(in)m(t)565 3661 y(k)m(ey)p Ff(\))390 3770 y Fs(Add)j Fi(name)41 b Fs(to)36 b(the)f(list)h(of)g(named)e (functions.)55 b(Mak)m(e)37 b Fi(function)e Fs(b)s(e)g(the)g(function)g (that)h(gets)390 3880 y(called.)42 b(If)30 b Fi(k)m(ey)39 b Fs(is)30 b(not)h(-1,)g(then)f(bind)f(it)i(to)g Fi(function)f Fs(using)g Fr(rl_bind_key\(\))p Fs(.)275 4056 y(Using)g(this)g (function)g(alone)h(is)f(su\016cien)m(t)g(for)g(most)h(applications.)42 b(It)30 b(is)g(the)g(recommended)g(w)m(a)m(y)150 4165 y(to)e(add)e(a)h(few)g(functions)g(to)g(the)g(default)h(functions)e (that)i(Readline)f(has)g(built)g(in.)39 b(If)26 b(y)m(ou)i(need)e(to)i (do)150 4275 y(something)34 b(other)g(than)f(adding)h(a)g(function)f (to)h(Readline,)i(y)m(ou)e(ma)m(y)g(need)f(to)i(use)e(the)h(underlying) 150 4385 y(functions)c(describ)s(ed)f(b)s(elo)m(w.)150 4578 y Fh(2.4.2)63 b(Selecting)41 b(a)f(Keymap)150 4725 y Fs(Key)f(bindings)e(tak)m(e)j(place)g(on)f(a)g Fi(k)m(eymap)p Fs(.)66 b(The)38 b(k)m(eymap)h(is)g(the)g(asso)s(ciation)h(b)s(et)m(w)m (een)f(the)g(k)m(eys)150 4835 y(that)29 b(the)g(user)e(t)m(yp)s(es)i (and)f(the)g(functions)g(that)h(get)h(run.)39 b(Y)-8 b(ou)29 b(can)f(mak)m(e)i(y)m(our)e(o)m(wn)h(k)m(eymaps,)g(cop)m(y)150 4945 y(existing)i(k)m(eymaps,)g(and)f(tell)i(Readline)f(whic)m(h)f(k)m (eymap)h(to)g(use.)3350 5121 y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_make_bare_keymap)d Ff(\()p Fi(v)m(oid)p Ff(\))390 5230 y Fs(Returns)23 b(a)i(new,)g(empt)m(y)f(k)m(eymap.)40 b(The)23 b(space)i(for)f(the)g(k)m(eymap)h(is)f(allo)s(cated)i(with)e Fr(malloc\(\))p Fs(;)390 5340 y(the)31 b(caller)g(should)f(free)g(it)h (b)m(y)f(calling)i Fr(rl_free_keymap\(\))26 b Fs(when)j(done.)p eop end %%Page: 31 35 TeXDict begin 31 34 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(31)3350 299 y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_copy_keymap)c Ff(\()p Fi(Keymap)30 b(map)p Ff(\))390 408 y Fs(Return)g(a)g(new)g(k)m (eymap)h(whic)m(h)f(is)h(a)f(cop)m(y)h(of)g Fi(map)p Fs(.)3350 579 y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_make_keymap)c Ff(\()p Fi(v)m(oid)p Ff(\))390 689 y Fs(Return)31 b(a)g(new)g(k)m(eymap)h(with)f(the)h(prin)m(ting)f(c)m (haracters)i(b)s(ound)c(to)j(rl)p 2909 689 28 4 v 40 w(insert,)g(the)g(lo)m(w)m(ercase)390 798 y(Meta)24 b(c)m(haracters)g (b)s(ound)d(to)i(run)e(their)i(equiv)-5 b(alen)m(ts,)25 b(and)d(the)h(Meta)h(digits)f(b)s(ound)e(to)i(pro)s(duce)390 908 y(n)m(umeric)30 b(argumen)m(ts.)3350 1078 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_discard_keymap)c Ff(\()p Fi(Keymap)31 b(k)m(eymap)p Ff(\))390 1188 y Fs(F)-8 b(ree)30 b(the)g(storage)h(asso)s(ciated)g(with)e(the)g(data)h(in)f Fi(k)m(eymap)p Fs(.)41 b(The)29 b(caller)h(should)f(free)g Fi(k)m(eymap)p Fs(.)3350 1358 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_free_keymap)49 b Ff(\()p Fi(Keymap)31 b(k)m(eymap)p Ff(\))390 1468 y Fs(F)-8 b(ree)32 b(all)g(storage)g(asso) s(ciated)g(with)f Fi(k)m(eymap)p Fs(.)42 b(This)30 b(calls)i Fr(rl_discard_keymap)26 b Fs(to)32 b(free)f(sub-)390 1577 y(ordindate)f(k)m(eymaps)h(and)f(macros.)275 1748 y(Readline)45 b(has)g(sev)m(eral)i(in)m(ternal)f(k)m(eymaps.)86 b(These)45 b(functions)g(allo)m(w)h(y)m(ou)g(to)g(c)m(hange)g(whic)m(h) 150 1857 y(k)m(eymap)31 b(is)f(activ)m(e.)3350 2028 y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_get_keymap)c Ff(\()p Fi(v)m(oid)p Ff(\))390 2137 y Fs(Returns)29 b(the)i(curren)m(tly)f (activ)m(e)j(k)m(eymap.)3350 2308 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_set_keymap)49 b Ff(\()p Fi(Keymap)30 b(k)m(eymap)p Ff(\))390 2418 y Fs(Mak)m(es)i Fi(k)m(eymap)h Fs(the)e(curren)m(tly)f(activ)m(e)j(k)m(eymap.)3350 2588 y([F)-8 b(unction])-3599 b Fg(Keymap)54 b(rl_get_keymap_by_name)e Ff(\()p Fi(const)31 b(c)m(har)g(*name)p Ff(\))390 2698 y Fs(Return)h(the)i(k)m(eymap)f(matc)m(hing)i Fi(name)p Fs(.)49 b Fi(name)38 b Fs(is)c(one)f(whic)m(h)g(w)m(ould)g(b)s(e)f (supplied)g(in)h(a)h Fr(set)390 2807 y(keymap)29 b Fs(inputrc)g(line)i (\(see)g(Section)g(1.3)h([Readline)f(Init)f(File],)i(page)f(4\).)3350 2978 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_get_keymap_name)f Ff(\()p Fi(Keymap)31 b(k)m(eymap)p Ff(\))390 3087 y Fs(Return)h(the)i (name)f(matc)m(hing)h Fi(k)m(eymap)p Fs(.)50 b Fi(name)38 b Fs(is)c(one)f(whic)m(h)g(w)m(ould)g(b)s(e)f(supplied)g(in)h(a)h Fr(set)390 3197 y(keymap)29 b Fs(inputrc)g(line)i(\(see)g(Section)g (1.3)h([Readline)f(Init)f(File],)i(page)f(4\).)150 3387 y Fh(2.4.3)63 b(Binding)42 b(Keys)150 3534 y Fs(Key)34 b(sequences)g(are)h(asso)s(ciate)h(with)e(functions)f(through)h(the)g (k)m(eymap.)52 b(Readline)35 b(has)f(sev)m(eral)h(in-)150 3643 y(ternal)30 b(k)m(eymaps:)40 b Fr(emacs_standard_keymap)p Fs(,)24 b Fr(emacs_meta_keymap)p Fs(,)h Fr(emacs_ctlx_keymap)p Fs(,)g Fr(vi_)150 3753 y(movement_keymap)p Fs(,)41 b(and)h Fr(vi_insertion_keymap)p Fs(.)71 b Fr(emacs_standard_keymap)37 b Fs(is)42 b(the)g(default,)150 3863 y(and)30 b(the)g(examples)h(in)f (this)h(man)m(ual)f(assume)g(that.)275 3992 y(Since)d Fr(readline\(\))e Fs(installs)j(a)g(set)g(of)g(default)g(k)m(ey)g (bindings)f(the)h(\014rst)e(time)j(it)f(is)f(called,)j(there)e(is)150 4102 y(alw)m(a)m(ys)34 b(the)f(danger)f(that)i(a)f(custom)g(binding)e (installed)j(b)s(efore)e(the)h(\014rst)e(call)j(to)g Fr(readline\(\))c Fs(will)150 4212 y(b)s(e)25 b(o)m(v)m(erridden.)39 b(An)26 b(alternate)h(mec)m(hanism)f(is)g(to)g(install)h(custom)f(k)m (ey)g(bindings)f(in)g(an)h(initialization)150 4321 y(function)37 b(assigned)g(to)h(the)f Fr(rl_startup_hook)c Fs(v)-5 b(ariable)38 b(\(see)g(Section)g(2.3)g([Readline)g(V)-8 b(ariables],)150 4431 y(page)31 b(25\).)275 4561 y(These)f(functions)g (manage)h(k)m(ey)g(bindings.)3350 4731 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_key)c Ff(\()p Fi(in)m(t)31 b(k)m(ey)-8 b(,)32 b(rl)p 1403 4731 V 40 w(command)p 1827 4731 V 40 w(func)p 2037 4731 V 39 w(t)f(*function)p Ff(\))390 4841 y Fs(Binds)h Fi(k)m(ey)42 b Fs(to)34 b Fi(function)e Fs(in)h(the)g(curren)m(tly)g(activ)m(e)i(k)m(eymap.)49 b(Returns)32 b(non-zero)i(in)f(the)g(case)390 4950 y(of)e(an)f(in)m(v) -5 b(alid)31 b Fi(k)m(ey)p Fs(.)3350 5121 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_key_in_map)e Ff(\()p Fi(in)m(t)31 b(k)m(ey)-8 b(,)32 b(rl)p 1769 5121 V 40 w(command)p 2193 5121 V 40 w(func)p 2403 5121 V 39 w(t)f(*function,)565 5230 y(Keymap)f(map)p Ff(\))390 5340 y Fs(Bind)g Fi(k)m(ey)39 b Fs(to)31 b Fi(function)f Fs(in)g Fi(map)p Fs(.)40 b(Returns)30 b(non-zero)h(in)f(the)h(case)g(of)f(an)h(in)m(v)-5 b(alid)31 b Fi(k)m(ey)p Fs(.)p eop end %%Page: 32 36 TeXDict begin 32 35 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(32)3350 299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_key_if_unboun)q(d)e Ff(\()p Fi(in)m(t)32 b(k)m(ey)-8 b(,)31 b(rl)p 1978 299 28 4 v 40 w(command)p 2402 299 V 40 w(func)p 2612 299 V 39 w(t)g(*function)p Ff(\))390 408 y Fs(Binds)43 b Fi(k)m(ey)53 b Fs(to)45 b Fi(function)e Fs(if)h(it)h(is)f(not)g (already)g(b)s(ound)e(in)i(the)g(curren)m(tly)g(activ)m(e)i(k)m(eymap.) 390 518 y(Returns)29 b(non-zero)i(in)f(the)h(case)g(of)g(an)f(in)m(v)-5 b(alid)31 b Fi(k)m(ey)39 b Fs(or)30 b(if)h Fi(k)m(ey)39 b Fs(is)30 b(already)h(b)s(ound.)3350 737 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_key_if_unboun)q(d_in)q(_ma)q(p)e Ff(\()p Fi(in)m(t)32 b(k)m(ey)-8 b(,)32 b(rl)p 2345 737 V 39 w(command)p 2768 737 V 40 w(func)p 2978 737 V 39 w(t)565 847 y(*function,)f(Keymap)f(map)p Ff(\))390 956 y Fs(Binds)d Fi(k)m(ey)36 b Fs(to)28 b Fi(function)f Fs(if)g(it)h(is)f(not)h(already)g(b)s(ound)d(in)i Fi(map)p Fs(.)39 b(Returns)27 b(non-zero)g(in)g(the)h(case)390 1066 y(of)j(an)f(in)m(v)-5 b(alid)31 b Fi(k)m(ey)39 b Fs(or)30 b(if)g Fi(k)m(ey)39 b Fs(is)31 b(already)g(b)s(ound.)3350 1285 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_unbind_key)d Ff(\()p Fi(in)m(t)31 b(k)m(ey)p Ff(\))390 1395 y Fs(Bind)36 b Fi(k)m(ey)45 b Fs(to)37 b(the)f(n)m(ull)g(function)g(in)g(the)h (curren)m(tly)f(activ)m(e)i(k)m(eymap.)59 b(Returns)35 b(non-zero)i(in)390 1504 y(case)31 b(of)g(error.)3350 1724 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_unbind_key_in_map)f Ff(\()p Fi(in)m(t)31 b(k)m(ey)-8 b(,)32 b(Keymap)e(map)p Ff(\))390 1833 y Fs(Bind)g Fi(k)m(ey)39 b Fs(to)31 b(the)g(n)m(ull)f (function)g(in)g Fi(map)p Fs(.)40 b(Returns)30 b(non-zero)h(in)f(case)h (of)g(error.)3350 2052 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_unbind_function_in)q(_map)f Ff(\()p Fi(rl)p 1814 2052 V 40 w(command)p 2238 2052 V 40 w(func)p 2448 2052 V 40 w(t)30 b(*function,)565 2162 y(Keymap)g(map)p Ff(\))390 2271 y Fs(Un)m(bind)f(all)i(k)m(eys)g(that)g(execute)h Fi(function)e Fs(in)g Fi(map)p Fs(.)3350 2491 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_unbind_command_in_)q(map)f Ff(\()p Fi(const)31 b(c)m(har)g(*command,)g(Keymap)f(map)p Ff(\))390 2600 y Fs(Un)m(bind)f(all)i(k)m(eys)g(that)g(are)g(b)s(ound)e (to)i Fi(command)i Fs(in)d Fi(map)p Fs(.)3350 2819 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_keyseq)d Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)h(rl)p 2036 2819 V 40 w(command)p 2460 2819 V 40 w(func)p 2670 2819 V 39 w(t)f(*function)p Ff(\))390 2929 y Fs(Bind)43 b(the)g(k)m(ey)h (sequence)f(represen)m(ted)g(b)m(y)g(the)g(string)g Fi(k)m(eyseq)j Fs(to)e(the)f(function)g Fi(function)p Fs(,)390 3039 y(b)s(eginning)27 b(in)h(the)h(curren)m(t)f(k)m(eymap.)40 b(This)28 b(mak)m(es)h(new)e(k)m(eymaps)i(as)f(necessary)-8 b(.)41 b(The)28 b(return)390 3148 y(v)-5 b(alue)31 b(is)f(non-zero)h (if)g Fi(k)m(eyseq)i Fs(is)d(in)m(v)-5 b(alid.)3350 3367 y([F)d(unction])-3599 b Fg(int)53 b(rl_bind_keyseq_in_map)f Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)h(rl)p 2402 3367 V 40 w(command)p 2826 3367 V 40 w(func)p 3036 3367 V 39 w(t)565 3477 y(*function,)f(Keymap)f(map)p Ff(\))390 3587 y Fs(Bind)25 b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g (the)g(string)g Fi(k)m(eyseq)j Fs(to)e(the)f(function)g Fi(function)p Fs(.)39 b(This)390 3696 y(mak)m(es)30 b(new)f(k)m(eymaps) g(as)g(necessary)-8 b(.)42 b(Initial)30 b(bindings)d(are)j(p)s (erformed)e(in)g Fi(map)p Fs(.)40 b(The)29 b(return)390 3806 y(v)-5 b(alue)31 b(is)f(non-zero)h(if)g Fi(k)m(eyseq)i Fs(is)d(in)m(v)-5 b(alid.)3350 4025 y([F)d(unction])-3599 b Fg(int)53 b(rl_set_key)c Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,) h(rl)p 1827 4025 V 40 w(command)p 2251 4025 V 39 w(func)p 2460 4025 V 40 w(t)e(*function,)565 4134 y(Keymap)g(map)p Ff(\))390 4244 y Fs(Equiv)-5 b(alen)m(t)31 b(to)g Fr (rl_bind_keyseq_in_map)p Fs(.)3350 4463 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_keyseq_if_unb)q(ound)f Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)565 4573 y(rl)p 632 4573 V 40 w(command)p 1056 4573 V 40 w(func)p 1266 4573 V 39 w(t)g(*function)p Ff(\))390 4682 y Fs(Binds)k Fi(k)m(eyseq)k Fs(to)d Fi(function)f Fs(if)g(it)h(is)g(not)g(already)g(b)s(ound)d(in)i (the)h(curren)m(tly)f(activ)m(e)j(k)m(eymap.)390 4792 y(Returns)29 b(non-zero)i(in)f(the)h(case)g(of)g(an)f(in)m(v)-5 b(alid)31 b Fi(k)m(eyseq)j Fs(or)c(if)g Fi(k)m(eyseq)k Fs(is)c(already)h(b)s(ound.)3350 5011 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_bind_keyseq_if_unb)q(ound)q(_in)q(_ma)q(p)e Ff(\()p Fi(const)32 b(c)m(har)e(*k)m(eyseq,)565 5121 y(rl)p 632 5121 V 40 w(command)p 1056 5121 V 40 w(func)p 1266 5121 V 39 w(t)h(*function,)f(Keymap)h(map)p Ff(\))390 5230 y Fs(Binds)g Fi(k)m(eyseq)k Fs(to)e Fi(function)f Fs(if)g(it)g(is)g(not)g(already)h(b)s(ound)d(in)h Fi(map)p Fs(.)46 b(Returns)31 b(non-zero)h(in)g(the)390 5340 y(case)f(of)g(an)f (in)m(v)-5 b(alid)31 b Fi(k)m(eyseq)j Fs(or)c(if)g Fi(k)m(eyseq)k Fs(is)c(already)h(b)s(ound.)p eop end %%Page: 33 37 TeXDict begin 33 36 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(33)3350 299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_generic_bind)d Ff(\()p Fi(in)m(t)31 b(t)m(yp)s(e,)g(const)g(c)m(har)g(*k)m(eyseq,)h(c) m(har)f(*data,)h(Keymap)565 408 y(map)p Ff(\))390 518 y Fs(Bind)27 b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g(the)g (string)g Fi(k)m(eyseq)j Fs(to)e(the)f(arbitrary)g(p)s(oin)m(ter)g Fi(data)p Fs(.)390 628 y Fi(t)m(yp)s(e)34 b Fs(sa)m(ys)29 b(what)f(kind)g(of)g(data)h(is)g(p)s(oin)m(ted)f(to)h(b)m(y)g Fi(data)p Fs(;)h(this)e(can)h(b)s(e)f(a)g(function)g(\()p Fr(ISFUNC)p Fs(\),)h(a)390 737 y(macro)h(\()p Fr(ISMACR)p Fs(\),)f(or)g(a)h(k)m(eymap)g(\()p Fr(ISKMAP)p Fs(\).)40 b(This)28 b(mak)m(es)j(new)e(k)m(eymaps)g(as)h(necessary)-8 b(.)41 b(The)390 847 y(initial)32 b(k)m(eymap)e(in)h(whic)m(h)f(to)h (do)f(bindings)f(is)i Fi(map)p Fs(.)3350 1028 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_parse_and_bind)e Ff(\()p Fi(c)m(har)31 b(*line)p Ff(\))390 1137 y Fs(P)m(arse)f Fi(line)35 b Fs(as)29 b(if)h(it)g(had)e(b)s(een)h(read)g(from)g(the)h Fr(inputrc)d Fs(\014le)j(and)e(p)s(erform)g(an)m(y)i(k)m(ey)g(bindings) 390 1247 y(and)g(v)-5 b(ariable)31 b(assignmen)m(ts)g(found)e(\(see)i (Section)h(1.3)f([Readline)g(Init)f(File],)j(page)e(4\).)3350 1428 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_read_init_file)e Ff(\()p Fi(const)31 b(c)m(har)g(*\014lename)p Ff(\))390 1538 y Fs(Read)h(k)m(eybindings)f(and)g(v)-5 b(ariable)32 b(assignmen)m(ts)g(from)f Fi(\014lename)37 b Fs(\(see)32 b(Section)g(1.3)h([Readline)390 1647 y(Init)d(File],)i(page)f(4\).)150 1844 y Fh(2.4.4)63 b(Asso)s(ciating)41 b(F)-10 b(unction)42 b(Names)f(and)g(Bindings)150 1991 y Fs(These)30 b(functions)g(allo)m(w) h(y)m(ou)g(to)f(\014nd)f(out)h(what)g(k)m(eys)h(in)m(v)m(ok)m(e)h (named)e(functions)g(and)f(the)h(functions)150 2101 y(in)m(v)m(ok)m(ed) f(b)m(y)e(a)h(particular)g(k)m(ey)g(sequence.)40 b(Y)-8 b(ou)28 b(ma)m(y)g(also)h(asso)s(ciate)g(a)f(new)f(function)g(name)h (with)f(an)150 2210 y(arbitrary)j(function.)3350 2391 y([F)-8 b(unction])-3599 b Fg(rl_command_func_t)57 b(*)c (rl_named_function)e Ff(\()p Fi(const)31 b(c)m(har)g(*name)p Ff(\))390 2501 y Fs(Return)f(the)g(function)g(with)g(name)h Fi(name)p Fs(.)3350 2682 y([F)-8 b(unction])-3599 b Fg (rl_command_func_t)57 b(*)c(rl_function_of_keyseq)f Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)565 2791 y(Keymap)f(map,)g(in)m(t)h (*t)m(yp)s(e)p Ff(\))390 2901 y Fs(Return)h(the)g(function)h(in)m(v)m (ok)m(ed)h(b)m(y)e Fi(k)m(eyseq)k Fs(in)c(k)m(eymap)h Fi(map)p Fs(.)47 b(If)32 b Fi(map)j Fs(is)d Fr(NULL)p Fs(,)g(the)h(curren)m(t)390 3011 y(k)m(eymap)k(is)g(used.)60 b(If)37 b Fi(t)m(yp)s(e)42 b Fs(is)37 b(not)g Fr(NULL)p Fs(,)h(the)f(t)m(yp)s(e)g(of)g(the)g(ob)5 b(ject)38 b(is)f(returned)f (in)h(the)g Fr(int)390 3120 y Fs(v)-5 b(ariable)31 b(it)g(p)s(oin)m(ts) f(to)h(\(one)g(of)g Fr(ISFUNC)p Fs(,)e Fr(ISKMAP)p Fs(,)g(or)h Fr(ISMACR)p Fs(\).)3350 3301 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e(rl_invoking_keyseqs)g Ff(\()p Fi(rl)p 1710 3301 28 4 v 40 w(command)p 2134 3301 V 40 w(func)p 2344 3301 V 39 w(t)31 b(*function)p Ff(\))390 3411 y Fs(Return)f(an)i(arra)m(y)f(of)h(strings)f(represen)m(ting)g(the)g(k)m (ey)h(sequences)g(used)e(to)i(in)m(v)m(ok)m(e)h Fi(function)e Fs(in)390 3520 y(the)g(curren)m(t)f(k)m(eymap.)3350 3701 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e(rl_invoking_keyseqs_i)q (n_m)q(ap)g Ff(\()p Fi(rl)p 2076 3701 V 40 w(command)p 2500 3701 V 40 w(func)p 2710 3701 V 39 w(t)565 3811 y(*function,)31 b(Keymap)f(map)p Ff(\))390 3920 y Fs(Return)g(an)i(arra)m(y)f(of)h (strings)f(represen)m(ting)g(the)g(k)m(ey)h(sequences)g(used)e(to)i(in) m(v)m(ok)m(e)h Fi(function)e Fs(in)390 4030 y(the)g(k)m(eymap)f Fi(map)p Fs(.)3350 4211 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_function_dumper)c Ff(\()p Fi(in)m(t)32 b(readable)p Ff(\))390 4321 y Fs(Prin)m(t)d(the)h(readline)f(function)g(names)g(and) g(the)g(k)m(ey)h(sequences)g(curren)m(tly)f(b)s(ound)e(to)j(them)f(to) 390 4430 y Fr(rl_outstream)p Fs(.)36 b(If)27 b Fi(readable)33 b Fs(is)28 b(non-zero,)h(the)e(list)i(is)e(formatted)h(in)f(suc)m(h)g (a)h(w)m(a)m(y)h(that)f(it)g(can)390 4540 y(b)s(e)i(made)g(part)g(of)h (an)f Fr(inputrc)f Fs(\014le)h(and)g(re-read.)3350 4721 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_list_funmap_names)d Ff(\()p Fi(v)m(oid)p Ff(\))390 4830 y Fs(Prin)m(t)30 b(the)h(names)f(of)h(all)g(bindable)f(Readline)h(functions)f(to)h Fr(rl_outstream)p Fs(.)3350 5011 y([F)-8 b(unction])-3599 b Fg(const)54 b(char)f(**)g(rl_funmap_names)d Ff(\()p Fi(v)m(oid)p Ff(\))390 5121 y Fs(Return)25 b(a)i(NULL)f(terminated)g (arra)m(y)h(of)f(kno)m(wn)f(function)h(names.)39 b(The)26 b(arra)m(y)g(is)g(sorted.)39 b(The)390 5230 y(arra)m(y)28 b(itself)h(is)f(allo)s(cated,)j(but)c(not)h(the)h(strings)e(inside.)40 b(Y)-8 b(ou)29 b(should)e(free)h(the)g(arra)m(y)-8 b(,)29 b(but)f(not)390 5340 y(the)j(p)s(oin)m(ters,)f(using)g Fr(free)f Fs(or)i Fr(rl_free)d Fs(when)h(y)m(ou)i(are)g(done.)p eop end %%Page: 34 38 TeXDict begin 34 37 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(34)3350 299 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_add_funmap_entry)e Ff(\()p Fi(const)32 b(c)m(har)e(*name,)i(rl)p 2252 299 28 4 v 39 w(command)p 2675 299 V 40 w(func)p 2885 299 V 39 w(t)565 408 y(*function)p Ff(\))390 518 y Fs(Add)g Fi(name)38 b Fs(to)33 b(the)g(list)h(of)f(bindable)f(Readline)h (command)g(names,)g(and)f(mak)m(e)i Fi(function)f Fs(the)390 628 y(function)d(to)h(b)s(e)f(called)h(when)f Fi(name)35 b Fs(is)c(in)m(v)m(ok)m(ed.)150 838 y Fh(2.4.5)63 b(Allo)m(wing)41 b(Undoing)150 985 y Fs(Supp)s(orting)34 b(the)i(undo)e(command)i(is)g (a)g(painless)g(thing,)h(and)e(mak)m(es)i(y)m(our)f(functions)f(m)m(uc) m(h)h(more)150 1094 y(useful.)k(It)30 b(is)h(certainly)g(easy)g(to)g (try)g(something)g(if)f(y)m(ou)h(kno)m(w)f(y)m(ou)h(can)f(undo)g(it.) 275 1240 y(If)40 b(y)m(our)h(function)f(simply)g(inserts)h(text)h (once,)i(or)d(deletes)h(text)g(once,)i(and)c(uses)h Fr(rl_insert_)150 1349 y(text\(\))26 b Fs(or)i Fr(rl_delete_text\(\))23 b Fs(to)29 b(do)f(it,)h(then)f(undoing)f(is)g(already)i(done)f(for)f(y) m(ou)h(automatically)-8 b(.)275 1494 y(If)20 b(y)m(ou)g(do)h(m)m (ultiple)g(insertions)f(or)h(m)m(ultiple)g(deletions,)j(or)c(an)m(y)h (com)m(bination)h(of)e(these)h(op)s(erations,)150 1604 y(y)m(ou)38 b(should)f(group)h(them)g(together)h(in)m(to)g(one)f(op)s (eration.)64 b(This)37 b(is)h(done)g(with)g Fr(rl_begin_undo_)150 1714 y(group\(\))28 b Fs(and)i Fr(rl_end_undo_group\(\))p Fs(.)275 1859 y(The)f(t)m(yp)s(es)i(of)f(ev)m(en)m(ts)i(that)f(can)g(b) s(e)e(undone)h(are:)390 1982 y Fe(enum)40 b(undo_code)h({)f (UNDO_DELETE,)i(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)f(};)275 2127 y Fs(Notice)32 b(that)f Fr(UNDO_DELETE)c Fs(means)j(to)h(insert)f (some)h(text,)h(and)d Fr(UNDO_INSERT)e Fs(means)k(to)g(delete)150 2237 y(some)d(text.)41 b(That)27 b(is,)i(the)e(undo)g(co)s(de)h(tells)g (what)g(to)g(undo,)f(not)h(ho)m(w)g(to)g(undo)e(it.)41 b Fr(UNDO_BEGIN)25 b Fs(and)150 2346 y Fr(UNDO_END)j Fs(are)j(tags)g(added)f(b)m(y)g Fr(rl_begin_undo_group\(\))25 b Fs(and)30 b Fr(rl_end_undo_group\(\))p Fs(.)3350 2552 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_begin_undo_group)e Ff(\()p Fi(v)m(oid)p Ff(\))390 2662 y Fs(Begins)32 b(sa)m(ving)g(undo)d (information)j(in)e(a)i(group)e(construct.)43 b(The)30 b(undo)g(information)h(usually)390 2772 y(comes)42 b(from)f(calls)i(to) f Fr(rl_insert_text\(\))37 b Fs(and)k Fr(rl_delete_text\(\))p Fs(,)f(but)h(could)h(b)s(e)f(the)390 2881 y(result)30 b(of)h(calls)g(to)g Fr(rl_add_undo\(\))p Fs(.)3350 3087 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_end_undo_group)e Ff(\()p Fi(v)m(oid)p Ff(\))390 3197 y Fs(Closes)29 b(the)h(curren)m(t)e (undo)g(group)h(started)g(with)g Fr(rl_begin_undo_group)c(\(\))p Fs(.)39 b(There)29 b(should)390 3306 y(b)s(e)h(one)g(call)i(to)f Fr(rl_end_undo_group\(\))25 b Fs(for)30 b(eac)m(h)i(call)g(to)f Fr(rl_begin_undo_group\(\))p Fs(.)3350 3512 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_add_undo)48 b Ff(\()p Fi(en)m(um)31 b(undo)p 1517 3512 V 39 w(co)s(de)f(what,)h(in)m(t)g(start,)g(in)m(t)g (end,)f(c)m(har)g(*text)p Ff(\))390 3622 y Fs(Remem)m(b)s(er)k(ho)m(w)g (to)h(undo)d(an)i(ev)m(en)m(t)i(\(according)f(to)g Fi(what)r Fs(\).)52 b(The)33 b(a\013ected)j(text)f(runs)d(from)390 3731 y Fi(start)h Fs(to)e Fi(end)p Fs(,)f(and)g(encompasses)h Fi(text)p Fs(.)3350 3937 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_free_undo_list)c Ff(\()p Fi(v)m(oid)p Ff(\))390 4047 y Fs(F)-8 b(ree)31 b(the)g(existing)g(undo)f(list.)3350 4253 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_do_undo)c Ff(\()p Fi(v)m(oid)p Ff(\))390 4362 y Fs(Undo)22 b(the)h(\014rst)g (thing)f(on)h(the)g(undo)f(list.)39 b(Returns)22 b Fr(0)g Fs(if)h(there)g(w)m(as)g(nothing)g(to)h(undo,)f(non-zero)390 4472 y(if)30 b(something)h(w)m(as)g(undone.)275 4678 y(Finally)-8 b(,)32 b(if)f(y)m(ou)h(neither)f(insert)g(nor)f(delete)j (text,)f(but)f(directly)g(mo)s(dify)g(the)g(existing)h(text)g(\(e.g.,) 150 4788 y(c)m(hange)40 b(its)f(case\),)j(call)e Fr(rl_modifying\(\))35 b Fs(once,)42 b(just)c(b)s(efore)g(y)m(ou)h(mo)s(dify)f(the)h(text.)67 b(Y)-8 b(ou)39 b(m)m(ust)150 4897 y(supply)29 b(the)h(indices)h(of)f (the)h(text)g(range)g(that)g(y)m(ou)g(are)g(going)g(to)g(mo)s(dify)-8 b(.)3350 5103 y([F)g(unction])-3599 b Fg(int)53 b(rl_modifying)c Ff(\()p Fi(in)m(t)32 b(start,)f(in)m(t)g(end)p Ff(\))390 5213 y Fs(T)-8 b(ell)41 b(Readline)g(to)g(sa)m(v)m(e)g(the)g(text)g(b)s (et)m(w)m(een)g Fi(start)i Fs(and)c Fi(end)k Fs(as)e(a)f(single)h(undo) e(unit.)70 b(It)40 b(is)390 5322 y(assumed)30 b(that)h(y)m(ou)f(will)h (subsequen)m(tly)f(mo)s(dify)f(that)i(text.)p eop end %%Page: 35 39 TeXDict begin 35 38 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(35)150 299 y Fh(2.4.6)63 b(Redispla)m(y)3350 508 y Fs([F)-8 b(unction])-3599 b Fg(void)54 b(rl_redisplay)49 b Ff(\()p Fi(v)m(oid)p Ff(\))390 617 y Fs(Change)38 b(what's)f(displa)m(y)m(ed)i (on)e(the)h(screen)g(to)h(re\015ect)f(the)g(curren)m(t)g(con)m(ten)m (ts)h(of)f Fr(rl_line_)390 727 y(buffer)p Fs(.)3350 935 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_forced_update_disp)q(lay)f Ff(\()p Fi(v)m(oid)p Ff(\))390 1045 y Fs(F)-8 b(orce)41 b(the)f(line)g(to)h(b)s(e)e(up)s(dated)f(and)h(redispla)m(y)m(ed,)k (whether)c(or)g(not)h(Readline)h(thinks)e(the)390 1154 y(screen)30 b(displa)m(y)h(is)f(correct.)3350 1362 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_on_new_line)d Ff(\()p Fi(v)m(oid)p Ff(\))390 1472 y Fs(T)-8 b(ell)31 b(the)f(up)s(date)f (functions)g(that)i(w)m(e)f(ha)m(v)m(e)h(mo)m(v)m(ed)g(on)m(to)g(a)f (new)f(\(empt)m(y\))i(line,)g(usually)e(after)390 1581 y(outputting)i(a)f(newline.)3350 1790 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_on_new_line_with_p)q(romp)q(t)f Ff(\()p Fi(v)m(oid)p Ff(\))390 1899 y Fs(T)-8 b(ell)25 b(the)f(up)s(date)f (functions)h(that)h(w)m(e)f(ha)m(v)m(e)h(mo)m(v)m(ed)g(on)m(to)h(a)e (new)g(line,)i(with)d Fi(rl)p 3106 1899 28 4 v 40 w(prompt)i Fs(already)390 2009 y(displa)m(y)m(ed.)41 b(This)28 b(could)g(b)s(e)g (used)g(b)m(y)g(applications)i(that)f(w)m(an)m(t)h(to)f(output)f(the)h (prompt)f(string)390 2118 y(themselv)m(es,)h(but)e(still)h(need)g (Readline)g(to)g(kno)m(w)f(the)h(prompt)e(string)h(length)h(for)f (redispla)m(y)-8 b(.)41 b(It)390 2228 y(should)29 b(b)s(e)h(used)g (after)h(setting)g Fi(rl)p 1590 2228 V 40 w(already)p 1920 2228 V 41 w(prompted)p Fs(.)3350 2436 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_reset_line_state)e Ff(\()p Fi(v)m(oid)p Ff(\))390 2546 y Fs(Reset)36 b(the)e(displa)m(y)h(state)h(to)g(a)f (clean)g(state)h(and)e(redispla)m(y)h(the)g(curren)m(t)g(line)g (starting)g(on)g(a)390 2655 y(new)30 b(line.)3350 2863 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_crlf)48 b Ff(\()p Fi(v)m(oid)p Ff(\))390 2973 y Fs(Mo)m(v)m(e)32 b(the)f(cursor)f(to)h (the)f(start)h(of)g(the)f(next)h(screen)f(line.)3350 3181 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_show_char)c Ff(\()p Fi(in)m(t)32 b(c)p Ff(\))390 3291 y Fs(Displa)m(y)i(c)m (haracter)g Fi(c)k Fs(on)32 b Fr(rl_outstream)p Fs(.)44 b(If)32 b(Readline)h(has)g(not)f(b)s(een)g(set)h(to)g(displa)m(y)g (meta)390 3400 y(c)m(haracters)27 b(directly)-8 b(,)29 b(this)c(will)i(con)m(v)m(ert)g(meta)g(c)m(haracters)h(to)e(a)h (meta-pre\014xed)f(k)m(ey)g(sequence.)390 3510 y(This)k(is)g(in)m (tended)g(for)g(use)g(b)m(y)h(applications)g(whic)m(h)f(wish)g(to)h(do) f(their)h(o)m(wn)f(redispla)m(y)-8 b(.)3350 3718 y([F)g(unction])-3599 b Fg(int)53 b(rl_message)c Ff(\()p Fi(const)31 b(c)m(har)g(*,)36 b(.)22 b(.)h(.)11 b Ff(\))390 3828 y Fs(The)20 b(argumen)m(ts)h(are)g (a)g(format)g(string)g(as)f(w)m(ould)h(b)s(e)f(supplied)f(to)j Fr(printf)p Fs(,)f(p)s(ossibly)e(con)m(taining)390 3937 y(con)m(v)m(ersion)45 b(sp)s(eci\014cations)g(suc)m(h)f(as)g(`)p Fr(\045d)p Fs(',)k(and)c(an)m(y)g(additional)h(argumen)m(ts)g (necessary)f(to)390 4047 y(satisfy)e(the)f(con)m(v)m(ersion)i(sp)s (eci\014cations.)74 b(The)41 b(resulting)h(string)f(is)g(displa)m(y)m (ed)h(in)f(the)h Fi(ec)m(ho)390 4157 y(area)p Fs(.)63 b(The)37 b(ec)m(ho)i(area)f(is)g(also)g(used)f(to)h(displa)m(y)g(n)m (umeric)f(argumen)m(ts)h(and)f(searc)m(h)h(strings.)390 4266 y(Y)-8 b(ou)34 b(should)e(call)j Fr(rl_save_prompt)29 b Fs(to)34 b(sa)m(v)m(e)h(the)f(prompt)e(information)i(b)s(efore)f (calling)i(this)390 4376 y(function.)3350 4584 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_clear_message)e Ff(\()p Fi(v)m(oid)p Ff(\))390 4693 y Fs(Clear)29 b(the)g(message)h(in)f(the)g (ec)m(ho)h(area.)41 b(If)29 b(the)g(prompt)f(w)m(as)h(sa)m(v)m(ed)h (with)f(a)g(call)i(to)e Fr(rl_save_)390 4803 y(prompt)38 b Fs(b)s(efore)h(the)g(last)h(call)h(to)f Fr(rl_message)p Fs(,)f(call)i Fr(rl_restore_prompt)34 b Fs(b)s(efore)39 b(calling)390 4913 y(this)30 b(function.)3350 5121 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_save_prompt)49 b Ff(\()p Fi(v)m(oid)p Ff(\))390 5230 y Fs(Sa)m(v)m(e)44 b(the)f(lo)s(cal)i (Readline)e(prompt)f(displa)m(y)i(state)g(in)f(preparation)g(for)g (displa)m(ying)g(a)g(new)390 5340 y(message)31 b(in)g(the)f(message)i (area)f(with)f Fr(rl_message\(\))p Fs(.)p eop end %%Page: 36 40 TeXDict begin 36 39 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(36)3350 299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_restore_prompt)c Ff(\()p Fi(v)m(oid)p Ff(\))390 408 y Fs(Restore)44 b(the)e(lo)s(cal)i (Readline)g(prompt)d(displa)m(y)i(state)h(sa)m(v)m(ed)g(b)m(y)f(the)f (most)h(recen)m(t)h(call)g(to)390 518 y Fr(rl_save_prompt)p Fs(.)69 b(if)41 b Fr(rl_save_prompt)d Fs(w)m(as)j(called)i(to)f(sa)m(v) m(e)h(the)e(prompt)f(b)s(efore)h(a)h(call)390 628 y(to)37 b Fr(rl_message)p Fs(,)f(this)h(function)f(should)g(b)s(e)g(called)i(b) s(efore)f(the)g(corresp)s(onding)e(call)j(to)g Fr(rl_)390 737 y(clear_message)p Fs(.)3350 918 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_expand_prompt)e Ff(\()p Fi(c)m(har)31 b(*prompt)p Ff(\))390 1027 y Fs(Expand)41 b(an)m(y)j(sp)s(ecial)f(c)m (haracter)h(sequences)f(in)g Fi(prompt)g Fs(and)f(set)i(up)d(the)i(lo)s (cal)h(Readline)390 1137 y(prompt)35 b(redispla)m(y)h(v)-5 b(ariables.)57 b(This)35 b(function)h(is)g(called)h(b)m(y)e Fr(readline\(\))p Fs(.)55 b(It)35 b(ma)m(y)i(also)g(b)s(e)390 1246 y(called)22 b(to)g(expand)f(the)g(primary)f(prompt)g(if)i(the)f Fr(rl_on_new_line_with_prom)o(pt\()o(\))15 b Fs(function)390 1356 y(or)25 b Fr(rl_already_prompted)c Fs(v)-5 b(ariable)26 b(is)f(used.)39 b(It)25 b(returns)f(the)i(n)m(um)m(b)s(er)e(of)i (visible)f(c)m(haracters)390 1465 y(on)34 b(the)g(last)g(line)g(of)g (the)g(\(p)s(ossibly)f(m)m(ulti-line\))j(prompt.)50 b(Applications)34 b(ma)m(y)h(indicate)f(that)390 1575 y(the)28 b(prompt)f(con)m(tains)i (c)m(haracters)g(that)g(tak)m(e)g(up)e(no)h(ph)m(ysical)g(screen)g (space)g(when)f(displa)m(y)m(ed)390 1685 y(b)m(y)41 b(brac)m(k)m(eting) i(a)e(sequence)g(of)g(suc)m(h)g(c)m(haracters)h(with)f(the)g(sp)s (ecial)h(mark)m(ers)f Fr(RL_PROMPT_)390 1794 y(START_IGNORE)32 b Fs(and)k Fr(RL_PROMPT_END_IGNORE)30 b Fs(\(declared)37 b(in)e Fr(readline.h)p Fs(.)54 b(This)35 b(ma)m(y)i(b)s(e)390 1904 y(used)30 b(to)h(em)m(b)s(ed)f(terminal-sp)s(eci\014c)h(escap)s(e) f(sequences)h(in)f(prompts.)3350 2084 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_set_prompt)d Ff(\()p Fi(const)31 b(c)m(har)g(*prompt)p Ff(\))390 2194 y Fs(Mak)m(e)d(Readline)g(use)f Fi(prompt)h Fs(for)e(subsequen)m(t)h(redispla)m(y)-8 b(.)40 b(This)26 b(calls)i Fr(rl_expand_prompt\(\))390 2303 y Fs(to)j(expand)f(the)g (prompt)g(and)g(sets)g Fr(rl_prompt)e Fs(to)j(the)g(result.)150 2500 y Fh(2.4.7)63 b(Mo)s(difying)43 b(T)-10 b(ext)3350 2694 y Fs([F)i(unction])-3599 b Fg(int)53 b(rl_insert_text)d Ff(\()p Fi(const)31 b(c)m(har)g(*text)p Ff(\))390 2804 y Fs(Insert)g Fi(text)k Fs(in)m(to)d(the)g(line)g(at)g(the)g(curren)m (t)f(cursor)g(p)s(osition.)45 b(Returns)30 b(the)i(n)m(um)m(b)s(er)f (of)g(c)m(har-)390 2913 y(acters)g(inserted.)3350 3093 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_delete_text)d Ff(\()p Fi(in)m(t)31 b(start,)g(in)m(t)g(end)p Ff(\))390 3203 y Fs(Delete)40 b(the)e(text)h(b)s(et)m(w)m(een)f Fi(start)i Fs(and)d Fi(end)k Fs(in)c(the)h(curren)m(t)g(line.)63 b(Returns)36 b(the)i(n)m(um)m(b)s(er)f(of)390 3313 y(c)m(haracters)32 b(deleted.)3350 3493 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_copy_text)d Ff(\()p Fi(in)m(t)31 b(start,)h(in)m(t)f(end)p Ff(\))390 3602 y Fs(Return)f(a)g(cop)m(y)h(of)g(the)g(text)g(b)s(et)m (w)m(een)g Fi(start)i Fs(and)d Fi(end)j Fs(in)d(the)h(curren)m(t)f (line.)3350 3783 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_kill_text)c Ff(\()p Fi(in)m(t)32 b(start,)f(in)m(t)g(end)p Ff(\))390 3892 y Fs(Cop)m(y)j(the)g(text)i(b)s(et)m(w)m(een)e Fi(start)j Fs(and)d Fi(end)j Fs(in)d(the)g(curren)m(t)g(line)g(to)h (the)f(kill)h(ring,)g(app)s(ending)390 4002 y(or)f(prep)s(ending)e(to)j (the)f(last)h(kill)f(if)g(the)g(last)h(command)f(w)m(as)g(a)h(kill)f (command.)51 b(The)34 b(text)h(is)390 4112 y(deleted.)51 b(If)33 b Fi(start)j Fs(is)e(less)g(than)f Fi(end)p Fs(,)h(the)g(text)g (is)g(app)s(ended,)f(otherwise)h(prep)s(ended.)48 b(If)33 b(the)390 4221 y(last)e(command)f(w)m(as)h(not)g(a)f(kill,)i(a)f(new)e (kill)i(ring)g(slot)g(is)f(used.)3350 4401 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_push_macro_input)e Ff(\()p Fi(c)m(har)32 b(*macro)p Ff(\))390 4511 y Fs(Cause)c Fi(macro)33 b Fs(to)c(b)s(e)f(inserted)g(in)m(to)h(the)g(line,)g(as)f(if)h(it)f(had)g (b)s(een)g(in)m(v)m(ok)m(ed)h(b)m(y)f(a)h(k)m(ey)g(b)s(ound)d(to)390 4621 y(a)31 b(macro.)41 b(Not)31 b(esp)s(ecially)h(useful;)e(use)g Fr(rl_insert_text\(\))c Fs(instead.)150 4817 y Fh(2.4.8)63 b(Character)39 b(Input)3350 5011 y Fs([F)-8 b(unction])-3599 b Fg(int)53 b(rl_read_key)c Ff(\()p Fi(v)m(oid)p Ff(\))390 5121 y Fs(Return)29 b(the)g(next)h(c)m(haracter)h(a)m(v)-5 b(ailable)32 b(from)d(Readline's)h(curren)m(t)f(input)g(stream.)41 b(This)28 b(han-)390 5230 y(dles)e(input)g(inserted)g(in)m(to)i(the)e (input)g(stream)h(via)g Fi(rl)p 2226 5230 28 4 v 40 w(p)s(ending)p 2583 5230 V 38 w(input)h Fs(\(see)f(Section)h(2.3)f([Read-)390 5340 y(line)40 b(V)-8 b(ariables],)43 b(page)d(25\))g(and)f Fr(rl_stuff_char\(\))p Fs(,)f(macros,)k(and)d(c)m(haracters)h(read)f (from)p eop end %%Page: 37 41 TeXDict begin 37 40 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(37)390 299 y(the)34 b(k)m(eyb)s(oard.)52 b(While)35 b(w)m(aiting)g(for)f (input,)g(this)g(function)g(will)g(call)i(an)m(y)e(function)g(assigned) 390 408 y(to)d(the)g Fr(rl_event_hook)26 b Fs(v)-5 b(ariable.)3350 585 y([F)d(unction])-3599 b Fg(int)53 b(rl_getc)48 b Ff(\()p Fi(FILE)30 b(*stream)p Ff(\))390 694 y Fs(Return)20 b(the)i(next)f(c)m(haracter)i(a)m(v)-5 b(ailable)24 b(from)c Fi(stream)p Fs(,)k(whic)m(h)d(is)g(assumed)g(to)h(b)s(e)e(the)i(k)m (eyb)s(oard.)3350 871 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_stuff_char)d Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 980 y Fs(Insert)h Fi(c)39 b Fs(in)m(to)34 b(the)f(Readline)g(input)f (stream.)49 b(It)33 b(will)g(b)s(e)f Fr(")p Fs(read)p Fr(")g Fs(b)s(efore)h(Readline)g(attempts)390 1090 y(to)27 b(read)g(c)m(haracters)h(from)f(the)g(terminal)g(with)f Fr(rl_read_key\(\))p Fs(.)36 b(Up)27 b(to)g(512)h(c)m(haracters)g(ma)m (y)390 1200 y(b)s(e)i(pushed)f(bac)m(k.)42 b Fr(rl_stuff_char)27 b Fs(returns)i(1)i(if)f(the)h(c)m(haracter)h(w)m(as)f(successfully)g (inserted;)390 1309 y(0)g(otherwise.)3350 1485 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_execute_next)d Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 1595 y Fs(Mak)m(e)37 b Fi(c)42 b Fs(b)s(e)35 b(the)h(next)f(command)h(to)g(b)s(e)f(executed)i(when)d Fr(rl_read_key\(\))e Fs(is)k(called.)58 b(This)390 1705 y(sets)31 b Fi(rl)p 635 1705 28 4 v 40 w(p)s(ending)p 992 1705 V 38 w(input)p Fs(.)3350 1881 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_clear_pending_inpu)q(t)e Ff(\()p Fi(v)m(oid)p Ff(\))390 1991 y Fs(Unset)42 b Fi(rl)p 729 1991 V 40 w(p)s(ending)p 1086 1991 V 38 w(input)p Fs(,)i(e\013ectiv)m(ely)h (negating)e(the)f(e\013ect)h(of)f(an)m(y)g(previous)f(call)i(to)g Fr(rl_)390 2100 y(execute_next\(\))p Fs(.)59 b(This)36 b(w)m(orks)i(only)g(if)f(the)h(p)s(ending)e(input)h(has)g(not)h (already)g(b)s(een)f(read)390 2210 y(with)30 b Fr(rl_read_key\(\))p Fs(.)3350 2386 y([F)-8 b(unction])-3599 b Fg(int)53 b (rl_set_keyboard_input)q(_tim)q(eou)q(t)e Ff(\()p Fi(in)m(t)32 b(u)p Ff(\))390 2496 y Fs(While)41 b(w)m(aiting)g(for)f(k)m(eyb)s(oard) g(input)f(in)h Fr(rl_read_key\(\))p Fs(,)f(Readline)i(will)f(w)m(ait)h (for)f Fi(u)g Fs(mi-)390 2605 y(croseconds)31 b(for)g(input)f(b)s (efore)g(calling)j(an)m(y)e(function)f(assigned)i(to)f Fr(rl_event_hook)p Fs(.)39 b Fi(u)30 b Fs(m)m(ust)390 2715 y(b)s(e)h(greater)i(than)f(or)g(equal)g(to)h(zero)f(\(a)h (zero-length)g(timeout)g(is)f(equiv)-5 b(alen)m(t)33 b(to)g(a)f(p)s(oll\).)45 b(The)390 2824 y(default)31 b(w)m(aiting)g(p)s(erio)s(d)e(is)i(one-ten)m(th)g(of)g(a)g(second.)40 b(Returns)30 b(the)g(old)h(timeout)g(v)-5 b(alue.)150 3018 y Fh(2.4.9)63 b(T)-10 b(erminal)41 b(Managemen)m(t)3350 3210 y Fs([F)-8 b(unction])-3599 b Fg(void)54 b(rl_prep_terminal)c Ff(\()p Fi(in)m(t)31 b(meta)p 1670 3210 V 41 w(\015ag)p Ff(\))390 3319 y Fs(Mo)s(dify)42 b(the)h(terminal)g(settings)g(for)f (Readline's)i(use,)h(so)e Fr(readline\(\))c Fs(can)k(read)f(a)h(single) 390 3429 y(c)m(haracter)32 b(at)g(a)f(time)h(from)e(the)h(k)m(eyb)s (oard.)43 b(The)30 b Fi(meta)p 2376 3429 V 41 w(\015ag)39 b Fs(argumen)m(t)31 b(should)f(b)s(e)g(non-zero)390 3539 y(if)g(Readline)h(should)f(read)g(eigh)m(t-bit)i(input.)3350 3715 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_deprep_terminal)c Ff(\()p Fi(v)m(oid)p Ff(\))390 3825 y Fs(Undo)31 b(the)h(e\013ects)h (of)f Fr(rl_prep_terminal\(\))p Fs(,)27 b(lea)m(ving)33 b(the)f(terminal)g(in)f(the)h(state)h(in)e(whic)m(h)390 3934 y(it)g(w)m(as)g(b)s(efore)f(the)g(most)h(recen)m(t)g(call)h(to)f Fr(rl_prep_terminal\(\))p Fs(.)3350 4111 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_tty_set_default_bindi)q(ngs)e Ff(\()p Fi(Keymap)31 b(kmap)p Ff(\))390 4220 y Fs(Read)37 b(the)g(op)s(erating) h(system's)f(terminal)g(editing)h(c)m(haracters)g(\(as)g(w)m(ould)e(b)s (e)h(displa)m(y)m(ed)g(b)m(y)390 4330 y Fr(stty)p Fs(\))30 b(to)h(their)f(Readline)h(equiv)-5 b(alen)m(ts.)42 b(The)30 b(bindings)f(are)i(p)s(erformed)e(in)h Fi(kmap)p Fs(.)3350 4506 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_tty_unset_default_bin)q (din)q(gs)e Ff(\()p Fi(Keymap)30 b(kmap)p Ff(\))390 4616 y Fs(Reset)j(the)f(bindings)e(manipulated)i(b)m(y)g Fr (rl_tty_set_default_bind)o(ing)o(s)26 b Fs(so)32 b(that)g(the)g(ter-) 390 4725 y(minal)40 b(editing)g(c)m(haracters)h(are)f(b)s(ound)e(to)i Fr(rl_insert)p Fs(.)66 b(The)39 b(bindings)f(are)i(p)s(erformed)e(in) 390 4835 y Fi(kmap)p Fs(.)3350 5011 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_reset_terminal)e Ff(\()p Fi(const)31 b(c)m(har)g(*terminal)p 2151 5011 V 41 w(name)p Ff(\))390 5121 y Fs(Reinitialize)26 b(Readline's)f(idea)f(of)g(the)g(terminal)h (settings)f(using)g Fi(terminal)p 2977 5121 V 40 w(name)29 b Fs(as)24 b(the)g(termi-)390 5230 y(nal)32 b(t)m(yp)s(e)g(\(e.g.,)i Fr(vt100)p Fs(\).)44 b(If)31 b Fi(terminal)p 1753 5230 V 41 w(name)37 b Fs(is)31 b Fr(NULL)p Fs(,)h(the)g(v)-5 b(alue)32 b(of)g(the)g Fr(TERM)e Fs(en)m(vironmen)m(t)390 5340 y(v)-5 b(ariable)31 b(is)g(used.)p eop end %%Page: 38 42 TeXDict begin 38 41 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(38)150 299 y Fh(2.4.10)63 b(Utilit)m(y)40 b(F)-10 b(unctions)3350 503 y Fs([F)i(unction])-3599 b Fg(int)53 b(rl_save_state)d Ff(\()p Fi(struct)30 b(readline)p 1702 503 28 4 v 41 w(state)h(*sp)p Ff(\))390 612 y Fs(Sa)m(v)m(e)f(a)f(snapshot)e(of)i (Readline's)g(in)m(ternal)g(state)h(to)f Fi(sp)p Fs(.)40 b(The)28 b(con)m(ten)m(ts)i(of)e(the)h Fi(readline)p 3518 612 V 40 w(state)390 722 y Fs(structure)g(are)g(do)s(cumen)m(ted)g (in)g Fr(readline.h)p Fs(.)38 b(The)28 b(caller)j(is)e(resp)s(onsible)f (for)h(allo)s(cating)j(the)390 832 y(structure.)3350 1030 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_restore_state)e Ff(\()p Fi(struct)30 b(readline)p 1859 1030 V 41 w(state)h(*sp)p Ff(\))390 1140 y Fs(Restore)23 b(Readline's)g(in)m(ternal)g(state)g(to) g(that)g(stored)f(in)g Fi(sp)p Fs(,)i(whic)m(h)d(m)m(ust)h(ha)m(v)m(e)i (b)s(een)d(sa)m(v)m(ed)i(b)m(y)g(a)390 1250 y(call)30 b(to)g Fr(rl_save_state)p Fs(.)37 b(The)28 b(con)m(ten)m(ts)j(of)e(the) g Fi(readline)p 2470 1250 V 41 w(state)35 b Fs(structure)29 b(are)g(do)s(cumen)m(ted)390 1359 y(in)h Fr(readline.h)p Fs(.)38 b(The)30 b(caller)i(is)e(resp)s(onsible)f(for)i(freeing)f(the)h (structure.)3350 1558 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_free)47 b Ff(\()p Fi(v)m(oid)31 b(*mem)p Ff(\))390 1668 y Fs(Deallo)s(cate)25 b(the)c(memory)g(p)s(oin)m(ted)g(to)h(b)m(y) f Fi(mem)p Fs(.)38 b Fi(mem)21 b Fs(m)m(ust)g(ha)m(v)m(e)i(b)s(een)d (allo)s(cated)j(b)m(y)e Fr(malloc)p Fs(.)3350 1866 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_replace_line)c Ff(\()p Fi(const)31 b(c)m(har)g(*text,)h(in)m(t)e(clear)p 2305 1866 V 42 w(undo)p Ff(\))390 1976 y Fs(Replace)41 b(the)e(con)m(ten)m (ts)i(of)f Fr(rl_line_buffer)35 b Fs(with)k Fi(text)p Fs(.)69 b(The)39 b(p)s(oin)m(t)h(and)e(mark)h(are)h(pre-)390 2086 y(serv)m(ed,)27 b(if)e(p)s(ossible.)39 b(If)25 b Fi(clear)p 1422 2086 V 41 w(undo)k Fs(is)d(non-zero,)h(the)f(undo)e (list)i(asso)s(ciated)h(with)e(the)h(curren)m(t)390 2195 y(line)31 b(is)f(cleared.)3350 2394 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_extend_line_buffer)d Ff(\()p Fi(in)m(t)32 b(len)p Ff(\))390 2503 y Fs(Ensure)d(that)h Fr(rl_line_buffer)d Fs(has)j(enough)f(space)i(to)g(hold)f Fi(len)g Fs(c)m(haracters,)i(p)s (ossibly)d(real-)390 2613 y(lo)s(cating)j(it)f(if)f(necessary)-8 b(.)3350 2812 y([F)g(unction])-3599 b Fg(int)53 b(rl_initialize)d Ff(\()p Fi(v)m(oid)p Ff(\))390 2921 y Fs(Initialize)39 b(or)e(re-initialize)i(Readline's)f(in)m(ternal)f(state.)62 b(It's)37 b(not)g(strictly)h(necessary)f(to)h(call)390 3031 y(this;)31 b Fr(readline\(\))c Fs(calls)32 b(it)f(b)s(efore)f (reading)g(an)m(y)h(input.)3350 3230 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_ding)48 b Ff(\()p Fi(v)m(oid)p Ff(\))390 3339 y Fs(Ring)30 b(the)h(terminal)g(b)s(ell,)f(ob)s(eying)h(the)f (setting)i(of)e Fr(bell-style)p Fs(.)3350 3538 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_alphabetic)d Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 3648 y Fs(Return)f(1)g(if)h Fi(c)36 b Fs(is)30 b(an)h(alphab)s(etic)g(c)m(haracter.)3350 3847 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_display_match_list)d Ff(\()p Fi(c)m(har)31 b(**matc)m(hes,)i(in)m(t)e(len,)g(in)m(t)g(max)p Ff(\))390 3956 y Fs(A)k(con)m(v)m(enience)h(function)e(for)g(displa)m (ying)h(a)g(list)g(of)g(strings)f(in)g(columnar)g(format)h(on)f(Read-) 390 4066 y(line's)g(output)f(stream.)51 b Fr(matches)31 b Fs(is)j(the)f(list)i(of)e(strings,)i(in)e(argv)h(format,)h(suc)m(h)e (as)h(a)g(list)g(of)390 4175 y(completion)26 b(matc)m(hes.)39 b Fr(len)24 b Fs(is)g(the)g(n)m(um)m(b)s(er)f(of)i(strings)f(in)g Fr(matches)p Fs(,)f(and)h Fr(max)f Fs(is)i(the)f(length)h(of)390 4285 y(the)h(longest)i(string)e(in)g Fr(matches)p Fs(.)37 b(This)25 b(function)h(uses)g(the)g(setting)i(of)e Fr (print-completions-)390 4394 y(horizontally)33 b Fs(to)k(select)h(ho)m (w)e(the)g(matc)m(hes)i(are)e(displa)m(y)m(ed)h(\(see)g(Section)g (1.3.1)h([Readline)390 4504 y(Init)30 b(File)h(Syn)m(tax],)g(page)g (4\).)42 b(When)29 b(displa)m(ying)i(completions,)h(this)e(function)g (sets)g(the)g(n)m(um-)390 4614 y(b)s(er)23 b(of)g(columns)g(used)g(for) h(displa)m(y)f(to)i(the)e(v)-5 b(alue)24 b(of)g Fr (completion-display-width)p Fs(,)19 b(the)k(v)-5 b(alue)390 4723 y(of)31 b(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)31 b Fr(COLUMNS)p Fs(,)e(or)h(the)h(screen)f(width,)g(in)g(that)h(order.) 275 4922 y(The)g(follo)m(wing)j(are)e(implemen)m(ted)h(as)f(macros,)h (de\014ned)e(in)h Fr(chardefs.h)p Fs(.)43 b(Applications)33 b(should)150 5032 y(refrain)d(from)g(using)g(them.)3350 5230 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_uppercase_p)d Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 5340 y Fs(Return)f(1)g(if)h Fi(c)36 b Fs(is)30 b(an)h(upp)s(ercase)e(alphab)s(etic)i(c)m(haracter.) p eop end %%Page: 39 43 TeXDict begin 39 42 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(39)3350 299 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_lowercase_p)d Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 408 y Fs(Return)f(1)g(if)h Fi(c)36 b Fs(is)30 b(a)h(lo)m(w)m(ercase)i(alphab)s(etic)e(c)m (haracter.)3350 569 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_digit_p)c Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 679 y Fs(Return)f(1)g(if)h Fi(c)36 b Fs(is)30 b(a)h(n)m(umeric)f(c)m (haracter.)3350 840 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_to_upper)c Ff(\()p Fi(in)m(t)32 b(c)p Ff(\))390 949 y Fs(If)23 b Fi(c)30 b Fs(is)24 b(a)g(lo)m(w)m(ercase)i(alphab)s (etic)e(c)m(haracter,)j(return)c(the)h(corresp)s(onding)e(upp)s(ercase) h(c)m(haracter.)3350 1110 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_to_lower)c Ff(\()p Fi(in)m(t)32 b(c)p Ff(\))390 1220 y Fs(If)c Fi(c)35 b Fs(is)29 b(an)g(upp)s(ercase)f (alphab)s(etic)h(c)m(haracter,)i(return)d(the)h(corresp)s(onding)f(lo)m (w)m(ercase)j(c)m(harac-)390 1329 y(ter.)3350 1490 y([F)-8 b(unction])-3599 b Fg(int)53 b(_rl_digit_value)d Ff(\()p Fi(in)m(t)31 b(c)p Ff(\))390 1600 y Fs(If)f Fi(c)36 b Fs(is)31 b(a)f(n)m(um)m(b)s(er,)g(return)f(the)h(v)-5 b(alue)31 b(it)g(represen)m(ts.)150 1783 y Fh(2.4.11)63 b(Miscellaneous)42 b(F)-10 b(unctions)3350 1964 y Fs([F)i(unction]) -3599 b Fg(int)53 b(rl_macro_bind)d Ff(\()p Fi(const)31 b(c)m(har)g(*k)m(eyseq,)h(const)f(c)m(har)f(*macro,)i(Keymap)565 2074 y(map)p Ff(\))390 2183 y Fs(Bind)23 b(the)g(k)m(ey)h(sequence)g Fi(k)m(eyseq)i Fs(to)e(in)m(v)m(ok)m(e)h(the)f(macro)f Fi(macro)p Fs(.)39 b(The)23 b(binding)f(is)i(p)s(erformed)d(in)390 2293 y Fi(map)p Fs(.)39 b(When)28 b Fi(k)m(eyseq)i Fs(is)e(in)m(v)m(ok) m(ed,)i(the)d Fi(macro)33 b Fs(will)28 b(b)s(e)f(inserted)g(in)m(to)i (the)e(line.)41 b(This)26 b(function)390 2403 y(is)k(deprecated;)i(use) e Fr(rl_generic_bind\(\))25 b Fs(instead.)3350 2563 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_macro_dumper)c Ff(\()p Fi(in)m(t)31 b(readable)p Ff(\))390 2673 y Fs(Prin)m(t)c(the)g(k)m(ey)h (sequences)g(b)s(ound)d(to)j(macros)f(and)g(their)g(v)-5 b(alues,)28 b(using)f(the)g(curren)m(t)g(k)m(eymap,)390 2783 y(to)32 b Fr(rl_outstream)p Fs(.)40 b(If)31 b Fi(readable)36 b Fs(is)c(non-zero,)g(the)f(list)h(is)f(formatted)h(in)f(suc)m(h)g(a)g (w)m(a)m(y)i(that)e(it)390 2892 y(can)g(b)s(e)e(made)i(part)f(of)h(an)f Fr(inputrc)e Fs(\014le)j(and)e(re-read.)3350 3053 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_variable_bind)e Ff(\()p Fi(const)31 b(c)m(har)g(*v)-5 b(ariable,)31 b(const)g(c)m(har)g(*v)-5 b(alue)p Ff(\))390 3163 y Fs(Mak)m(e)31 b(the)e(Readline)g(v)-5 b(ariable)30 b Fi(v)-5 b(ariable)35 b Fs(ha)m(v)m(e)30 b Fi(v)-5 b(alue)p Fs(.)41 b(This)28 b(b)s(eha)m(v)m(es)h(as)h(if)f (the)g(readline)g(com-)390 3272 y(mand)h(`)p Fr(set)g Fk(variable)e(value)p Fs(')h(had)h(b)s(een)h(executed)g(in)g(an)f Fr(inputrc)f Fs(\014le)i(\(see)h(Section)f(1.3.1)390 3382 y([Readline)g(Init)f(File)i(Syn)m(tax],)f(page)g(4\).)3350 3543 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_variable_value)f Ff(\()p Fi(const)31 b(c)m(har)g(*v)-5 b(ariable)p Ff(\))390 3652 y Fs(Return)28 b(a)i(string)f(represen)m(ting)h(the)f(v)-5 b(alue)30 b(of)f(the)h(Readline)g(v)-5 b(ariable)30 b Fi(v)-5 b(ariable)p Fs(.)41 b(F)-8 b(or)30 b(b)s(o)s(olean)390 3762 y(v)-5 b(ariables,)31 b(this)g(string)f(is)g(either)h(`)p Fr(on)p Fs(')f(or)h(`)p Fr(off)p Fs('.)3350 3922 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_variable_dumper)c Ff(\()p Fi(in)m(t)32 b(readable)p Ff(\))390 4032 y Fs(Prin)m(t)d(the)f (readline)h(v)-5 b(ariable)30 b(names)e(and)g(their)h(curren)m(t)f(v)-5 b(alues)29 b(to)h Fr(rl_outstream)p Fs(.)37 b(If)28 b Fi(read-)390 4142 y(able)40 b Fs(is)34 b(non-zero,)i(the)e(list)g(is)g (formatted)h(in)f(suc)m(h)g(a)g(w)m(a)m(y)h(that)g(it)f(can)g(b)s(e)g (made)g(part)g(of)g(an)390 4251 y Fr(inputrc)28 b Fs(\014le)j(and)f (re-read.)3350 4412 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_set_paren_blink_ti)q(meou)q(t)f Ff(\()p Fi(in)m(t)31 b(u)p Ff(\))390 4522 y Fs(Set)25 b(the)h(time)f(in)m(terv)-5 b(al)27 b(\(in)e(microseconds\))h(that)g(Readline)f(w)m(aits)h(when)e (sho)m(wing)i(a)f(balancing)390 4631 y(c)m(haracter)32 b(when)d Fr(blink-matching-paren)c Fs(has)30 b(b)s(een)g(enabled.)3350 4792 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_get_termcap)e Ff(\()p Fi(const)31 b(c)m(har)g(*cap)p Ff(\))390 4902 y Fs(Retriev)m(e)e(the)e(string)g(v)-5 b(alue)27 b(of)g(the)h(termcap)f (capabilit)m(y)i Fi(cap)p Fs(.)40 b(Readline)27 b(fetc)m(hes)h(the)g (termcap)390 5011 y(en)m(try)34 b(for)f(the)h(curren)m(t)f(terminal)h (name)g(and)f(uses)g(those)h(capabilities)h(to)f(mo)m(v)m(e)h(around)e (the)390 5121 y(screen)21 b(line)h(and)e(p)s(erform)g(other)h (terminal-sp)s(eci\014c)h(op)s(erations,)h(lik)m(e)f(erasing)g(a)f (line.)38 b(Readline)390 5230 y(do)s(es)d(not)g(use)g(all)g(of)h(a)f (terminal's)g(capabilities,)k(and)34 b(this)h(function)g(will)g(return) f(v)-5 b(alues)35 b(for)390 5340 y(only)30 b(those)h(capabilities)i (Readline)e(uses.)p eop end %%Page: 40 44 TeXDict begin 40 43 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(40)3350 299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_clear_history)c Ff(\()p Fi(v)m(oid)p Ff(\))390 408 y Fs(Clear)27 b(the)h(history)f (list)h(b)m(y)f(deleting)h(all)g(of)f(the)h(en)m(tries,)h(in)d(the)i (same)f(manner)g(as)g(the)g(History)390 518 y(library's)42 b Fr(clear_history\(\))d Fs(function.)78 b(This)42 b(di\013ers)g(from)g Fr(clear_history)e Fs(b)s(ecause)i(it)390 628 y(frees)30 b(priv)-5 b(ate)31 b(data)g(Readline)g(sa)m(v)m(es)h(in)e(the)h (history)f(list.)150 832 y Fh(2.4.12)63 b(Alternate)40 b(In)m(terface)150 979 y Fs(An)21 b(alternate)j(in)m(terface)f(is)f(a)m (v)-5 b(ailable)24 b(to)e(plain)g Fr(readline\(\))p Fs(.)35 b(Some)21 b(applications)i(need)f(to)g(in)m(terlea)m(v)m(e)150 1088 y(k)m(eyb)s(oard)35 b(I/O)h(with)f(\014le,)i(device,)h(or)e(windo) m(w)f(system)g(I/O,)h(t)m(ypically)i(b)m(y)d(using)g(a)h(main)g(lo)s (op)f(to)150 1198 y Fr(select\(\))42 b Fs(on)i(v)-5 b(arious)45 b(\014le)f(descriptors.)83 b(T)-8 b(o)45 b(accommo)s(date)h(this)e (need,)k(readline)d(can)f(also)i(b)s(e)150 1308 y(in)m(v)m(ok)m(ed)33 b(as)e(a)h(`callbac)m(k')h(function)e(from)g(an)g(ev)m(en)m(t)h(lo)s (op.)44 b(There)30 b(are)i(functions)f(a)m(v)-5 b(ailable)33 b(to)f(mak)m(e)150 1417 y(this)e(easy)-8 b(.)3350 1611 y([F)g(unction])-3599 b Fg(void)54 b(rl_callback_handler_inst)q(all)e Ff(\()p Fi(const)31 b(c)m(har)g(*prompt,)565 1721 y(rl)p 632 1721 28 4 v 40 w(v)m(cpfunc)p 978 1721 V 40 w(t)f(*lhandler)p Ff(\))390 1831 y Fs(Set)25 b(up)f(the)h(terminal)g(for)f(readline)i (I/O)e(and)g(displa)m(y)h(the)g(initial)h(expanded)e(v)-5 b(alue)26 b(of)f Fi(prompt)p Fs(.)390 1940 y(Sa)m(v)m(e)34 b(the)f(v)-5 b(alue)33 b(of)g Fi(lhandler)39 b Fs(to)34 b(use)e(as)h(a)g(handler)f(function)h(to)g(call)h(when)e(a)h(complete)i (line)390 2050 y(of)h(input)f(has)g(b)s(een)g(en)m(tered.)57 b(The)35 b(handler)g(function)g(receiv)m(es)j(the)e(text)g(of)g(the)g (line)g(as)g(an)390 2159 y(argumen)m(t.)3350 2354 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_callback_read_char)d Ff(\()p Fi(v)m(oid)p Ff(\))390 2463 y Fs(Whenev)m(er)34 b(an)g(application)h(determines)e(that)i(k)m(eyb)s(oard)e(input)g(is)h (a)m(v)-5 b(ailable,)37 b(it)d(should)f(call)390 2573 y Fr(rl_callback_read_char\(\))p Fs(,)17 b(whic)m(h)22 b(will)g(read)f(the)h(next)g(c)m(haracter)h(from)f(the)f(curren)m(t)h (input)390 2682 y(source.)40 b(If)27 b(that)i(c)m(haracter)g(completes) h(the)e(line,)h Fr(rl_callback_read_char)22 b Fs(will)28 b(in)m(v)m(ok)m(e)i(the)390 2792 y Fi(lhandler)47 b Fs(function)40 b(installed)i(b)m(y)e Fr(rl_callback_handler_insta)o(ll)35 b Fs(to)41 b(pro)s(cess)f(the)h(line.)390 2902 y(Before)j(calling)h (the)e Fi(lhandler)49 b Fs(function,)e(the)c(terminal)h(settings)g(are) g(reset)f(to)h(the)g(v)-5 b(alues)390 3011 y(they)44 b(had)e(b)s(efore)h(calling)i Fr(rl_callback_handler_insta)o(ll)p Fs(.)73 b(If)43 b(the)h Fi(lhandler)49 b Fs(function)390 3121 y(returns,)27 b(and)h(the)g(line)g(handler)f(remains)h(installed,) i(the)e(terminal)g(settings)h(are)f(mo)s(di\014ed)f(for)390 3230 y(Readline's)k(use)f(again.)42 b Fr(EOF)29 b Fs(is)i(indicated)g (b)m(y)f(calling)i Fi(lhandler)k Fs(with)30 b(a)h Fr(NULL)e Fs(line.)3350 3425 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_callback_handler_remo)q(ve)e Ff(\()p Fi(v)m(oid)p Ff(\))390 3534 y Fs(Restore)38 b(the)f(terminal)h(to)g(its)f(initial)i (state)f(and)f(remo)m(v)m(e)h(the)g(line)f(handler.)60 b(This)37 b(ma)m(y)h(b)s(e)390 3644 y(called)f(from)f(within)g(a)h (callbac)m(k)h(as)f(w)m(ell)g(as)f(indep)s(enden)m(tly)-8 b(.)58 b(If)36 b(the)h Fi(lhandler)42 b Fs(installed)37 b(b)m(y)390 3753 y Fr(rl_callback_handler_inst)o(all)32 b Fs(do)s(es)39 b(not)g(exit)g(the)g(program,)i(either)e(this)g (function)f(or)390 3863 y(the)32 b(function)f(referred)f(to)i(b)m(y)g (the)f(v)-5 b(alue)32 b(of)g Fr(rl_deprep_term_function)25 b Fs(should)30 b(b)s(e)h(called)390 3973 y(b)s(efore)f(the)h(program)f (exits)h(to)g(reset)g(the)f(terminal)h(settings.)150 4177 y Fh(2.4.13)63 b(A)41 b(Readline)f(Example)150 4324 y Fs(Here)34 b(is)g(a)g(function)g(whic)m(h)g(c)m(hanges)g(lo)m(w)m (ercase)j(c)m(haracters)e(to)f(their)g(upp)s(ercase)f(equiv)-5 b(alen)m(ts,)37 b(and)150 4433 y(upp)s(ercase)d(c)m(haracters)j(to)f (lo)m(w)m(ercase.)58 b(If)35 b(this)g(function)g(w)m(as)h(b)s(ound)d (to)j(`)p Fr(M-c)p Fs(',)h(then)e(t)m(yping)g(`)p Fr(M-c)p Fs(')150 4543 y(w)m(ould)c(c)m(hange)i(the)f(case)g(of)g(the)g(c)m (haracter)h(under)d(p)s(oin)m(t.)44 b(T)m(yping)31 b(`)p Fr(M-1)f(0)g(M-c)p Fs(')h(w)m(ould)g(c)m(hange)i(the)150 4653 y(case)e(of)g(the)g(follo)m(wing)g(10)h(c)m(haracters,)g(lea)m (ving)g(the)e(cursor)g(on)g(the)h(last)g(c)m(haracter)h(c)m(hanged.)390 4792 y Fr(/*)47 b(Invert)f(the)h(case)g(of)g(the)g(COUNT)f(following)g (characters.)e(*/)390 4902 y(int)390 5011 y(invert_case_line)f (\(count,)j(key\))629 5121 y(int)h(count,)f(key;)390 5230 y({)485 5340 y(register)g(int)h(start,)f(end,)h(i;)p eop end %%Page: 41 45 TeXDict begin 41 44 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(41)485 408 y Fr(start)47 b(=)g(rl_point;)485 628 y(if)h(\(rl_point)d(>=)i (rl_end\))581 737 y(return)f(\(0\);)485 956 y(if)i(\(count)e(<)h(0\)) 581 1066 y({)676 1176 y(direction)f(=)h(-1;)676 1285 y(count)g(=)g(-count;)581 1395 y(})485 1504 y(else)581 1614 y(direction)e(=)j(1;)485 1833 y(/*)g(Find)e(the)h(end)g(of)g(the)g (range)g(to)g(modify.)f(*/)485 1943 y(end)h(=)h(start)e(+)i(\(count)e (*)h(direction\);)485 2162 y(/*)h(Force)e(it)h(to)g(be)h(within)e (range.)g(*/)485 2271 y(if)i(\(end)e(>)i(rl_end\))581 2381 y(end)f(=)g(rl_end;)485 2491 y(else)g(if)g(\(end)g(<)g(0\))581 2600 y(end)g(=)g(0;)485 2819 y(if)h(\(start)e(==)h(end\))581 2929 y(return)f(\(0\);)485 3148 y(if)i(\(start)e(>)h(end\))581 3258 y({)676 3367 y(int)g(temp)g(=)g(start;)676 3477 y(start)g(=)g(end;)676 3587 y(end)g(=)h(temp;)581 3696 y(})485 3915 y(/*)g(Tell)e(readline)g(that)g(we)i(are)f(modifying)e (the)i(line,)629 4025 y(so)g(it)g(will)g(save)f(the)h(undo)g (information.)d(*/)485 4134 y(rl_modifying)h(\(start,)h(end\);)485 4354 y(for)h(\(i)h(=)f(start;)f(i)i(!=)f(end;)f(i++\))581 4463 y({)676 4573 y(if)i(\(_rl_uppercase_p)43 b (\(rl_line_buffer[i]\)\))772 4682 y(rl_line_buffer[i])g(=)k (_rl_to_lower)e(\(rl_line_buffer[i]\);)676 4792 y(else)i(if)g (\(_rl_lowercase_p)d(\(rl_line_buffer[i]\)\))772 4902 y(rl_line_buffer[i])f(=)k(_rl_to_upper)e(\(rl_line_buffer[i]\);)581 5011 y(})485 5121 y(/*)j(Move)e(point)h(to)g(on)g(top)g(of)g(the)g (last)g(character)e(changed.)g(*/)485 5230 y(rl_point)h(=)h (\(direction)e(==)j(1\))f(?)g(end)g(-)h(1)f(:)h(start;)485 5340 y(return)f(\(0\);)p eop end %%Page: 42 46 TeXDict begin 42 45 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(42)390 299 y Fr(})150 532 y Fh(2.4.14)63 b(Alternate)40 b(In)m(terface)g (Example)150 679 y Fs(Here)f(is)g(a)g(complete)h(program)e(that)h (illustrates)h(Readline's)f(alternate)h(in)m(terface.)67 b(It)38 b(reads)h(lines)150 788 y(from)30 b(the)i(terminal)f(and)f (displa)m(ys)h(them,)h(pro)m(viding)f(the)g(standard)f(history)h(and)f (T)-8 b(AB)32 b(completion)150 898 y(functions.)40 b(It)31 b(understands)d(the)j(EOF)f(c)m(haracter)i(or)e Fr(")p Fs(exit)p Fr(")h Fs(to)g(exit)g(the)g(program.)390 1066 y Fr(/*)47 b(Standard)f(include)g(files.)g(stdio.h)f(is)j(required.)d (*/)390 1176 y(#include)h()390 1285 y(#include)g() 390 1504 y(/*)h(Used)g(for)g(select\(2\))e(*/)390 1614 y(#include)h()390 1724 y(#include)g()390 1943 y(#include)g()390 2162 y(/*)h(Standard)f(readline)f (include)h(files.)g(*/)390 2271 y(#include)g()390 2381 y(#include)g()390 2600 y(static)g(void)h (cb_linehandler)d(\(char)i(*\);)390 2819 y(int)h(running;)390 2929 y(const)f(char)h(*prompt)f(=)h("rltest$)f(";)390 3148 y(/*)h(Callback)f(function)f(called)h(for)h(each)g(line)g(when)f (accept-line)f(executed,)g(EOF)533 3258 y(seen,)i(or)g(EOF)g(character) e(read.)94 b(This)47 b(sets)f(a)i(flag)e(and)h(returns;)f(it)h(could) 533 3367 y(also)g(call)f(exit\(3\).)g(*/)390 3477 y(static)g(void)390 3587 y(cb_linehandler)e(\(char)i(*line\))390 3696 y({)485 3806 y(/*)i(Can)f(use)f(^D)i(\(stty)e(eof\))h(or)g(`exit')f(to)h(exit.) f(*/)485 3915 y(if)i(\(line)e(==)h(NULL)g(||)g(strcmp)f(\(line,)g ("exit"\))g(==)h(0\))581 4025 y({)676 4134 y(if)h(\(line)e(==)h(0\))772 4244 y(printf)f(\("\\n"\);)676 4354 y(printf)g(\("exit\\n"\);)676 4463 y(/*)i(This)e(function)g(needs)g(to)h(be)g(called)g(to)g(reset)f (the)h(terminal)f(settings,)p 3874 4483 42 84 v 820 4573 a(and)g(calling)g(it)h(from)g(the)g(line)g(handler)e(keeps)i(one)g (extra)f(prompt)g(from)p 3874 4593 42 76 v 820 4682 a(being)g (displayed.)f(*/)676 4792 y(rl_callback_handler_remove)c(\(\);)676 5011 y(running)46 b(=)i(0;)581 5121 y(})485 5230 y(else)581 5340 y({)p eop end %%Page: 43 47 TeXDict begin 43 46 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(43)676 299 y Fr(if)48 b(\(*line\))772 408 y(add_history)d(\(line\);)676 518 y(printf)h(\("input)g(line:)h(\045s\\n",)f(line\);)676 628 y(free)h(\(line\);)581 737 y(})390 847 y(})390 1066 y(int)390 1176 y(main)g(\(int)f(c,)h(char)g(**v\))390 1285 y({)485 1395 y(fd_set)g(fds;)485 1504 y(int)g(r;)485 1724 y(/*)h(Install)d(the)i(line)g(handler.)f(*/)485 1833 y(rl_callback_handler_instal)o(l)c(\(prompt,)j(cb_linehandler\);) 485 2052 y(/*)j(Enter)e(a)h(simple)g(event)f(loop.)94 b(This)47 b(waits)f(until)g(something)g(is)h(available)629 2162 y(to)g(read)f(on)i(readline's)d(input)h(stream)g(\(defaults)f(to)j (standard)d(input\))h(and)629 2271 y(calls)g(the)h(builtin)f(character) f(read)i(callback)e(to)i(read)g(it.)95 b(It)47 b(does)f(not)629 2381 y(have)g(to)h(modify)g(the)f(user's)h(terminal)e(settings.)g(*/) 485 2491 y(running)h(=)i(1;)485 2600 y(while)f(\(running\))581 2710 y({)676 2819 y(FD_ZERO)f(\(&fds\);)676 2929 y(FD_SET)g(\(fileno)g (\(rl_instream\),)e(&fds\);)676 3148 y(r)k(=)f(select)f(\(FD_SETSIZE,)f (&fds,)h(NULL,)h(NULL,)f(NULL\);)676 3258 y(if)i(\(r)f(<)g(0\))772 3367 y({)867 3477 y(perror)f(\("rltest:)g(select"\);)867 3587 y(rl_callback_handler_remov)o(e)c(\(\);)867 3696 y(break;)772 3806 y(})676 4025 y(if)48 b(\(FD_ISSET)d(\(fileno)h (\(rl_instream\),)e(&fds\)\))772 4134 y(rl_callback_read_char)e(\(\);) 581 4244 y(})485 4463 y(printf)47 b(\("rltest:)e(Event)h(loop)h(has)g (exited\\n"\);)485 4573 y(return)g(0;)390 4682 y(})150 4961 y Fq(2.5)68 b(Readline)47 b(Signal)e(Handling)150 5121 y Fs(Signals)31 b(are)f(async)m(hronous)g(ev)m(en)m(ts)i(sen)m(t)f (to)g(a)g(pro)s(cess)f(b)m(y)h(the)f(Unix)g(k)m(ernel,)i(sometimes)f (on)g(b)s(ehalf)150 5230 y(of)k(another)g(pro)s(cess.)53 b(They)34 b(are)h(in)m(tended)g(to)g(indicate)h(exceptional)g(ev)m(en)m (ts,)i(lik)m(e)e(a)f(user)f(pressing)150 5340 y(the)g(in)m(terrupt)f(k) m(ey)h(on)g(his)f(terminal,)i(or)f(a)g(net)m(w)m(ork)g(connection)h(b)s (eing)e(brok)m(en.)50 b(There)34 b(is)f(a)h(class)p eop end %%Page: 44 48 TeXDict begin 44 47 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(44)150 299 y(of)29 b(signals)g(that)h(can)f(b)s(e)f(sen)m(t)h(to)h(the)f(pro)s (cess)f(curren)m(tly)h(reading)g(input)f(from)g(the)h(k)m(eyb)s(oard.) 40 b(Since)150 408 y(Readline)45 b(c)m(hanges)g(the)g(terminal)g (attributes)g(when)e(it)i(is)g(called,)k(it)c(needs)f(to)h(p)s(erform)e (sp)s(ecial)150 518 y(pro)s(cessing)27 b(when)g(suc)m(h)g(a)h(signal)g (is)g(receiv)m(ed)h(in)e(order)g(to)h(restore)h(the)e(terminal)h(to)h (a)f(sane)f(state,)j(or)150 628 y(pro)m(vide)g(application)i(writers)e (with)g(functions)g(to)h(do)g(so)f(man)m(ually)-8 b(.)275 777 y(Readline)40 b(con)m(tains)i(an)e(in)m(ternal)h(signal)g(handler)f (that)h(is)f(installed)h(for)f(a)h(n)m(um)m(b)s(er)e(of)h(signals)150 887 y(\()p Fr(SIGINT)p Fs(,)e Fr(SIGQUIT)p Fs(,)f Fr(SIGTERM)p Fs(,)g Fr(SIGHUP)p Fs(,)g Fr(SIGALRM)p Fs(,)g Fr(SIGTSTP)p Fs(,)g Fr(SIGTTIN)p Fs(,)g(and)g Fr(SIGTTOU)p Fs(\).)59 b(When)150 996 y(one)27 b(of)g(these)g(signals)g(is)g(receiv)m(ed,)i (the)e(signal)g(handler)f(will)h(reset)h(the)e(terminal)i(attributes)f (to)g(those)150 1106 y(that)33 b(w)m(ere)g(in)f(e\013ect)h(b)s(efore)f Fr(readline\(\))e Fs(w)m(as)i(called,)j(reset)d(the)h(signal)g (handling)f(to)h(what)f(it)h(w)m(as)150 1215 y(b)s(efore)26 b Fr(readline\(\))e Fs(w)m(as)j(called,)i(and)d(resend)g(the)h(signal)g (to)h(the)f(calling)h(application.)41 b(If)26 b(and)g(when)150 1325 y(the)34 b(calling)i(application's)f(signal)g(handler)e(returns,)h (Readline)g(will)h(reinitialize)h(the)e(terminal)h(and)150 1435 y(con)m(tin)m(ue)29 b(to)g(accept)h(input.)39 b(When)28 b(a)h Fr(SIGINT)d Fs(is)j(receiv)m(ed,)h(the)e(Readline)h(signal)g (handler)f(p)s(erforms)150 1544 y(some)39 b(additional)h(w)m(ork,)h (whic)m(h)d(will)h(cause)g(an)m(y)h(partially-en)m(tered)g(line)f(to)h (b)s(e)e(ab)s(orted)g(\(see)i(the)150 1654 y(description)30 b(of)h Fr(rl_free_line_state\(\))25 b Fs(b)s(elo)m(w\).)275 1803 y(There)e(is)i(an)f(additional)h(Readline)g(signal)g(handler,)g (for)f Fr(SIGWINCH)p Fs(,)g(whic)m(h)g(the)g(k)m(ernel)h(sends)e(to)j (a)150 1913 y(pro)s(cess)i(whenev)m(er)h(the)g(terminal's)g(size)h(c)m (hanges)g(\(for)f(example,)h(if)f(a)g(user)f(resizes)i(an)e Fr(xterm)p Fs(\).)39 b(The)150 2022 y(Readline)d Fr(SIGWINCH)e Fs(handler)g(up)s(dates)h(Readline's)h(in)m(ternal)h(screen)e(size)i (information,)g(and)e(then)150 2132 y(calls)g(an)m(y)f Fr(SIGWINCH)e Fs(signal)i(handler)f(the)h(calling)h(application)g(has)f (installed.)51 b(Readline)35 b(calls)g(the)150 2242 y(application's)i Fr(SIGWINCH)c Fs(signal)i(handler)g(without)g(resetting)h(the)g (terminal)f(to)h(its)g(original)g(state.)150 2351 y(If)31 b(the)i(application's)g(signal)g(handler)e(do)s(es)g(more)h(than)g(up)s (date)f(its)i(idea)f(of)g(the)g(terminal)h(size)g(and)150 2461 y(return)28 b(\(for)i(example,)h(a)f Fr(longjmp)d Fs(bac)m(k)k(to)f(a)g(main)g(pro)s(cessing)f(lo)s(op\),)h(it)g Fj(must)39 b Fs(call)31 b Fr(rl_cleanup_)150 2570 y(after_signal\(\))26 b Fs(\(describ)s(ed)k(b)s(elo)m(w\),)h(to)g(restore)g(the)g(terminal)g (state.)275 2720 y(Readline)e(pro)m(vides)f(t)m(w)m(o)i(v)-5 b(ariables)29 b(that)h(allo)m(w)g(application)g(writers)e(to)h(con)m (trol)h(whether)e(or)h(not)150 2829 y(it)34 b(will)f(catc)m(h)i (certain)f(signals)f(and)g(act)h(on)f(them)g(when)f(they)i(are)f (receiv)m(ed.)51 b(It)33 b(is)g(imp)s(ortan)m(t)g(that)150 2939 y(applications)38 b(c)m(hange)g(the)e(v)-5 b(alues)37 b(of)g(these)g(v)-5 b(ariables)37 b(only)g(when)f(calling)i Fr(readline\(\))p Fs(,)d(not)i(in)g(a)150 3049 y(signal)31 b(handler,)f(so)g(Readline's)i(in)m(ternal)f(signal)g(state)h(is)e(not) h(corrupted.)3371 3263 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_catch_signals)390 3372 y Fs(If)28 b(this)h(v)-5 b(ariable)30 b(is)f(non-zero,)h(Readline)f(will)g(install)h(signal)f (handlers)f(for)h Fr(SIGINT)p Fs(,)f Fr(SIGQUIT)p Fs(,)390 3482 y Fr(SIGTERM)p Fs(,)h Fr(SIGHUP)p Fs(,)g Fr(SIGALRM)p Fs(,)f Fr(SIGTSTP)p Fs(,)h Fr(SIGTTIN)p Fs(,)f(and)i Fr(SIGTTOU)p Fs(.)390 3631 y(The)g(default)g(v)-5 b(alue)31 b(of)g Fr(rl_catch_signals)26 b Fs(is)k(1.)3371 3846 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_catch_sigwinch)390 3955 y Fs(If)37 b(this)h(v)-5 b(ariable)38 b(is)g(set)g(to)g(a)g (non-zero)g(v)-5 b(alue,)40 b(Readline)f(will)f(install)g(a)g(signal)g (handler)f(for)390 4065 y Fr(SIGWINCH)p Fs(.)390 4214 y(The)30 b(default)g(v)-5 b(alue)31 b(of)g Fr(rl_catch_sigwinch)25 b Fs(is)31 b(1.)3371 4428 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_change_environment)390 4538 y Fs(If)31 b(this)g(v)-5 b(ariable)32 b(is)f(set)h(to)g(a)g(non-zero)g(v)-5 b(alue,)32 b(and)f(Readline)h(is)f(handling)g Fr(SIGWINCH)p Fs(,)e(Read-)390 4648 y(line)h(will)h(mo)s(dify)e(the)h Fi(LINES)35 b Fs(and)29 b Fi(COLUMNS)35 b Fs(en)m(vironmen)m(t)30 b(v)-5 b(ariables)31 b(up)s(on)d(receipt)j(of)g(a)390 4757 y Fr(SIGWINCH)390 4907 y Fs(The)f(default)g(v)-5 b(alue)31 b(of)g Fr(rl_change_environment)24 b Fs(is)31 b(1.)275 5121 y(If)f(an)h(application)h(do)s(es)f(not)g(wish)f(to)i(ha) m(v)m(e)g(Readline)g(catc)m(h)g(an)m(y)f(signals,)h(or)f(to)h(handle)e (signals)150 5230 y(other)39 b(than)f(those)h(Readline)h(catc)m(hes)g (\()p Fr(SIGHUP)p Fs(,)g(for)e(example\),)k(Readline)d(pro)m(vides)g (con)m(v)m(enience)150 5340 y(functions)30 b(to)h(do)f(the)h(necessary) g(terminal)g(and)e(in)m(ternal)i(state)h(clean)m(up)f(up)s(on)e (receipt)i(of)g(a)f(signal.)p eop end %%Page: 45 49 TeXDict begin 45 48 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(45)3350 299 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_cleanup_after_signal)e Ff(\()p Fi(v)m(oid)p Ff(\))390 408 y Fs(This)33 b(function)h(will)g (reset)g(the)g(state)i(of)e(the)g(terminal)g(to)h(what)f(it)g(w)m(as)g (b)s(efore)g Fr(readline\(\))390 518 y Fs(w)m(as)c(called,)h(and)d (remo)m(v)m(e)j(the)f(Readline)g(signal)g(handlers)e(for)h(all)h (signals,)h(dep)s(ending)d(on)h(the)390 628 y(v)-5 b(alues)31 b(of)f Fr(rl_catch_signals)c Fs(and)k Fr(rl_catch_sigwinch)p Fs(.)3350 799 y([F)-8 b(unction])-3599 b Fg(void)54 b (rl_free_line_state)c Ff(\()p Fi(v)m(oid)p Ff(\))390 909 y Fs(This)38 b(will)i(free)f(an)m(y)h(partial)g(state)g(asso)s (ciated)h(with)e(the)g(curren)m(t)g(input)f(line)i(\(undo)e(infor-)390 1019 y(mation,)46 b(an)m(y)d(partial)h(history)e(en)m(try)-8 b(,)47 b(an)m(y)42 b(partially-en)m(tered)j(k)m(eyb)s(oard)d(macro,)47 b(and)42 b(an)m(y)390 1128 y(partially-en)m(tered)50 b(n)m(umeric)d(argumen)m(t\).)94 b(This)47 b(should)g(b)s(e)g(called)i (b)s(efore)e Fr(rl_cleanup_)390 1238 y(after_signal\(\))p Fs(.)74 b(The)42 b(Readline)h(signal)g(handler)f(for)h Fr(SIGINT)e Fs(calls)i(this)g(to)g(ab)s(ort)g(the)390 1347 y(curren)m(t)30 b(input)g(line.)3350 1519 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_reset_after_signal)d Ff(\()p Fi(v)m(oid)p Ff(\))390 1629 y Fs(This)28 b(will)g(reinitialize) j(the)e(terminal)g(and)f(reinstall)h(an)m(y)g(Readline)g(signal)g (handlers,)f(dep)s(end-)390 1738 y(ing)j(on)f(the)g(v)-5 b(alues)31 b(of)g Fr(rl_catch_signals)26 b Fs(and)j Fr (rl_catch_sigwinch)p Fs(.)275 1910 y(If)38 b(an)i(application)g(do)s (es)f(not)h(wish)f(Readline)h(to)g(catc)m(h)h Fr(SIGWINCH)p Fs(,)e(it)h(ma)m(y)g(call)h Fr(rl_resize_)150 2020 y(terminal\(\))24 b Fs(or)j Fr(rl_set_screen_size\(\))22 b Fs(to)28 b(force)g(Readline)f (to)h(up)s(date)f(its)g(idea)h(of)f(the)g(terminal)150 2129 y(size)k(when)f(a)g Fr(SIGWINCH)e Fs(is)j(receiv)m(ed.)3350 2301 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_echo_signal_char)d Ff(\()p Fi(in)m(t)31 b(sig)p Ff(\))390 2411 y Fs(If)43 b(an)g(application)i(wishes)e(to)i(install)f(its)g(o)m(wn)f(signal)i (handlers,)h(but)c(still)j(ha)m(v)m(e)g(readline)390 2520 y(displa)m(y)31 b(c)m(haracters)h(that)f(generate)h(signals,)f (calling)h(this)e(function)g(with)g Fi(sig)39 b Fs(set)31 b(to)g Fr(SIGINT)p Fs(,)390 2630 y Fr(SIGQUIT)p Fs(,)e(or)h Fr(SIGTSTP)e Fs(will)j(displa)m(y)g(the)f(c)m(haracter)i(generating)g (that)f(signal.)3350 2802 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_resize_terminal)c Ff(\()p Fi(v)m(oid)p Ff(\))390 2911 y Fs(Up)s(date)30 b(Readline's)h(in)m(ternal)g(screen)g (size)g(b)m(y)f(reading)h(v)-5 b(alues)31 b(from)f(the)g(k)m(ernel.) 3350 3083 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_set_screen_size)c Ff(\()p Fi(in)m(t)32 b(ro)m(ws,)e(in)m(t)h(cols)p Ff(\))390 3193 y Fs(Set)d(Readline's)h(idea)f(of)g(the)g(terminal)g(size)h(to)g Fi(ro)m(ws)i Fs(ro)m(ws)d(and)f Fi(cols)33 b Fs(columns.)40 b(If)27 b(either)h Fi(ro)m(ws)390 3302 y Fs(or)35 b Fi(columns)k Fs(is)c(less)g(than)g(or)g(equal)h(to)g(0,)h(Readline's)f(idea)g(of)f (that)h(terminal)f(dimension)g(is)390 3412 y(unc)m(hanged.)275 3584 y(If)d(an)i(application)g(do)s(es)f(not)h(w)m(an)m(t)g(to)g (install)g(a)g Fr(SIGWINCH)d Fs(handler,)j(but)e(is)i(still)g(in)m (terested)g(in)150 3693 y(the)d(screen)f(dimensions,)g(Readline's)h (idea)g(of)g(the)f(screen)h(size)g(ma)m(y)g(b)s(e)f(queried.)3350 3865 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_get_screen_size)c Ff(\()p Fi(in)m(t)32 b(*ro)m(ws,)f(in)m(t)g(*cols)p Ff(\))390 3975 y Fs(Return)e(Readline's)i(idea)g(of)f(the)g(terminal's)h(size)g (in)f(the)g(v)-5 b(ariables)31 b(p)s(oin)m(ted)f(to)g(b)m(y)g(the)h (argu-)390 4084 y(men)m(ts.)3350 4256 y([F)-8 b(unction])-3599 b Fg(void)54 b(rl_reset_screen_size)d Ff(\()p Fi(v)m(oid)p Ff(\))390 4366 y Fs(Cause)30 b(Readline)h(to)g(reobtain)g(the)g(screen) f(size)h(and)f(recalculate)j(its)e(dimensions.)275 4538 y(The)e(follo)m(wing)j(functions)e(install)h(and)f(remo)m(v)m(e)i (Readline's)f(signal)g(handlers.)3350 4710 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_set_signals)d Ff(\()p Fi(v)m(oid)p Ff(\))390 4819 y Fs(Install)40 b(Readline's)h(signal)f(handler)f(for)h Fr(SIGINT)p Fs(,)h Fr(SIGQUIT)p Fs(,)f Fr(SIGTERM)p Fs(,)h Fr(SIGHUP)p Fs(,)g Fr(SIGALRM)p Fs(,)390 4929 y Fr(SIGTSTP)p Fs(,)35 b Fr(SIGTTIN)p Fs(,)f Fr(SIGTTOU)p Fs(,)h(and)g Fr(SIGWINCH)p Fs(,)f(dep)s(ending)g(on)h(the)g(v)-5 b(alues)36 b(of)f Fr(rl_catch_)390 5038 y(signals)28 b Fs(and)i Fr(rl_catch_sigwinch)p Fs(.)3350 5210 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_clear_signals)e Ff(\()p Fi(v)m(oid)p Ff(\))390 5320 y Fs(Remo)m(v)m(e)32 b(all)f(of)g(the)g(Readline)g (signal)g(handlers)e(installed)i(b)m(y)f Fr(rl_set_signals\(\))p Fs(.)p eop end %%Page: 46 50 TeXDict begin 46 49 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(46)150 299 y Fq(2.6)68 b(Custom)45 b(Completers)150 458 y Fs(T)m(ypically)-8 b(,)47 b(a)c(program)g(that)g(reads)f(commands)h(from)f(the)g(user)g (has)h(a)g(w)m(a)m(y)g(of)g(disam)m(biguating)150 568 y(commands)35 b(and)g(data.)56 b(If)35 b(y)m(our)h(program)f(is)g(one)h (of)g(these,)h(then)e(it)h(can)g(pro)m(vide)f(completion)i(for)150 677 y(commands,)29 b(data,)i(or)e(b)s(oth.)39 b(The)29 b(follo)m(wing)i(sections)f(describ)s(e)e(ho)m(w)i(y)m(our)f(program)g (and)f(Readline)150 787 y(co)s(op)s(erate)j(to)h(pro)m(vide)e(this)g (service.)150 970 y Fh(2.6.1)63 b(Ho)m(w)40 b(Completing)i(W)-10 b(orks)150 1117 y Fs(In)26 b(order)f(to)i(complete)h(some)f(text,)h (the)f(full)f(list)h(of)f(p)s(ossible)g(completions)h(m)m(ust)g(b)s(e)e (a)m(v)-5 b(ailable.)42 b(That)150 1227 y(is,)28 b(it)f(is)g(not)g(p)s (ossible)g(to)g(accurately)i(expand)d(a)h(partial)h(w)m(ord)f(without)f (kno)m(wing)i(all)f(of)g(the)g(p)s(ossible)150 1336 y(w)m(ords)33 b(whic)m(h)g(mak)m(e)h(sense)f(in)g(that)g(con)m(text.)51 b(The)33 b(Readline)h(library)e(pro)m(vides)i(the)f(user)f(in)m (terface)150 1446 y(to)d(completion,)h(and)e(t)m(w)m(o)i(of)e(the)h (most)f(common)h(completion)h(functions:)39 b(\014lename)29 b(and)e(username.)150 1555 y(F)-8 b(or)39 b(completing)g(other)f(t)m (yp)s(es)g(of)h(text,)i(y)m(ou)d(m)m(ust)g(write)g(y)m(our)g(o)m(wn)g (completion)h(function.)64 b(This)150 1665 y(section)32 b(describ)s(es)d(exactly)j(what)f(suc)m(h)f(functions)g(m)m(ust)g(do,)g (and)g(pro)m(vides)g(an)h(example.)275 1791 y(There)e(are)i(three)g(ma) 5 b(jor)30 b(functions)g(used)g(to)h(p)s(erform)e(completion:)199 1918 y(1.)61 b(The)43 b(user-in)m(terface)h(function)f Fr(rl_complete\(\))p Fs(.)76 b(This)43 b(function)g(is)g(called)i(with) e(the)h(same)330 2027 y(argumen)m(ts)36 b(as)g(other)g(bindable)f (Readline)h(functions:)51 b Fi(coun)m(t)38 b Fs(and)d Fi(in)m(v)m(oking)p 3107 2027 28 4 v 41 w(k)m(ey)p Fs(.)57 b(It)36 b(isolates)330 2137 y(the)i(w)m(ord)f(to)h(b)s(e)f(completed)i (and)d(calls)j Fr(rl_completion_matches\(\))31 b Fs(to)39 b(generate)g(a)f(list)g(of)330 2247 y(p)s(ossible)31 b(completions.)44 b(It)31 b(then)g(either)g(lists)h(the)f(p)s(ossible)g (completions,)h(inserts)f(the)g(p)s(ossible)330 2356 y(completions,)50 b(or)45 b(actually)i(p)s(erforms)d(the)h(completion,) 50 b(dep)s(ending)44 b(on)h(whic)m(h)g(b)s(eha)m(vior)g(is)330 2466 y(desired.)199 2592 y(2.)61 b(The)33 b(in)m(ternal)h(function)g Fr(rl_completion_matches\(\))27 b Fs(uses)33 b(an)g (application-supplied)h Fi(gener-)330 2702 y(ator)44 b Fs(function)37 b(to)h(generate)g(the)f(list)h(of)f(p)s(ossible)f (matc)m(hes,)k(and)d(then)f(returns)g(the)h(arra)m(y)h(of)330 2811 y(these)h(matc)m(hes.)68 b(The)39 b(caller)h(should)e(place)i(the) f(address)f(of)h(its)g(generator)i(function)d(in)h Fr(rl_)330 2921 y(completion_entry_functio)o(n)p Fs(.)199 3047 y(3.)61 b(The)22 b(generator)i(function)f(is)g(called)h(rep)s(eatedly)f(from)g Fr(rl_completion_matches\(\))o Fs(,)c(returning)330 3157 y(a)33 b(string)g(eac)m(h)h(time.)48 b(The)32 b(argumen)m(ts)h(to)h (the)f(generator)h(function)e(are)h Fi(text)j Fs(and)c Fi(state)p Fs(.)49 b Fi(text)330 3267 y Fs(is)32 b(the)g(partial)h(w)m (ord)f(to)h(b)s(e)e(completed.)47 b Fi(state)38 b Fs(is)32 b(zero)h(the)f(\014rst)g(time)g(the)h(function)e(is)h(called,)330 3376 y(allo)m(wing)46 b(the)e(generator)h(to)f(p)s(erform)f(an)m(y)h (necessary)g(initialization,)51 b(and)43 b(a)h(p)s(ositiv)m(e)h(non-) 330 3486 y(zero)30 b(in)m(teger)h(for)d(eac)m(h)j(subsequen)m(t)d (call.)42 b(The)29 b(generator)h(function)f(returns)f Fr(\(char)h(*\)NULL)e Fs(to)330 3595 y(inform)37 b Fr (rl_completion_matches\(\))32 b Fs(that)39 b(there)f(are)g(no)g(more)g (p)s(ossibilities)h(left.)65 b(Usually)330 3705 y(the)39 b(generator)h(function)e(computes)h(the)g(list)g(of)g(p)s(ossible)f (completions)i(when)e Fi(state)45 b Fs(is)39 b(zero,)330 3814 y(and)25 b(returns)f(them)i(one)f(at)i(a)f(time)g(on)f(subsequen)m (t)g(calls.)40 b(Eac)m(h)26 b(string)g(the)g(generator)g(function)330 3924 y(returns)31 b(as)h(a)g(matc)m(h)h(m)m(ust)f(b)s(e)f(allo)s(cated) j(with)d Fr(malloc\(\))p Fs(;)g(Readline)h(frees)g(the)g(strings)g (when)330 4034 y(it)i(has)g(\014nished)e(with)i(them.)51 b(Suc)m(h)33 b(a)h(generator)h(function)f(is)g(referred)f(to)h(as)h(an) e Fi(application-)330 4143 y(sp)s(eci\014c)d(completion)i(function)p Fs(.)3350 4303 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_complete)c Ff(\()p Fi(in)m(t)31 b(ignore,)g(in)m(t)g(in)m(v)m(oking)p 1929 4303 V 42 w(k)m(ey)p Ff(\))390 4413 y Fs(Complete)g(the)g(w)m(ord) g(at)g(or)g(b)s(efore)f(p)s(oin)m(t.)41 b(Y)-8 b(ou)32 b(ha)m(v)m(e)g(supplied)d(the)i(function)f(that)h(do)s(es)g(the)390 4522 y(initial)42 b(simple)f(matc)m(hing)i(selection)f(algorithm)h (\(see)f Fr(rl_completion_matches\(\))o Fs(\).)67 b(The)390 4632 y(default)31 b(is)f(to)h(do)f(\014lename)h(completion.)3371 4792 y([V)-8 b(ariable])-3598 b Fg(rl_compentry_func_t)58 b(*)53 b(rl_completion_entry_fun)q(cti)q(on)390 4902 y Fs(This)39 b(is)h(a)g(p)s(oin)m(ter)g(to)h(the)f(generator)h (function)f(for)f Fr(rl_completion_matches\(\))p Fs(.)63 b(If)40 b(the)390 5011 y(v)-5 b(alue)24 b(of)g Fr (rl_completion_entry_funct)o(ion)17 b Fs(is)24 b Fr(NULL)f Fs(then)g(the)h(default)g(\014lename)g(generator)390 5121 y(function,)49 b Fr(rl_filename_completion_)o(fun)o(ctio)o(n\(\))p Fs(,)42 b(is)j(used.)84 b(An)44 b Fi(application-sp)s(eci\014c)390 5230 y(completion)22 b(function)f Fs(is)g(a)h(function)e(whose)h (address)f(is)h(assigned)h(to)f Fr(rl_completion_entry_)390 5340 y(function)28 b Fs(and)i(whose)g(return)f(v)-5 b(alues)31 b(are)g(used)e(to)j(generate)f(p)s(ossible)f(completions.)p eop end %%Page: 47 51 TeXDict begin 47 50 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(47)150 299 y Fh(2.6.2)63 b(Completion)41 b(F)-10 b(unctions)150 446 y Fs(Here)31 b(is)f(the)h(complete)h(list)f(of)f(callable)j (completion)e(functions)f(presen)m(t)h(in)f(Readline.)3350 640 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_complete_internal)f Ff(\()p Fi(in)m(t)31 b(what)p 1828 640 28 4 v 40 w(to)p 1948 640 V 41 w(do)p Ff(\))390 749 y Fs(Complete)37 b(the)g(w)m(ord)f (at)i(or)e(b)s(efore)g(p)s(oin)m(t.)60 b Fi(what)p 2208 749 V 40 w(to)p 2328 749 V 41 w(do)41 b Fs(sa)m(ys)c(what)f(to)i(do)e (with)g(the)h(com-)390 859 y(pletion.)44 b(A)31 b(v)-5 b(alue)32 b(of)f(`)p Fr(?)p Fs(')g(means)h(list)f(the)h(p)s(ossible)e (completions.)45 b(`)p Fr(TAB)p Fs(')31 b(means)g(do)g(standard)390 969 y(completion.)44 b(`)p Fr(*)p Fs(')32 b(means)f(insert)g(all)h(of)f (the)g(p)s(ossible)g(completions.)44 b(`)p Fr(!)p Fs(')32 b(means)f(to)h(displa)m(y)f(all)390 1078 y(of)k(the)f(p)s(ossible)g (completions,)j(if)d(there)h(is)f(more)g(than)h(one,)g(as)g(w)m(ell)g (as)g(p)s(erforming)e(partial)390 1188 y(completion.)41 b(`)p Fr(@)p Fs(')27 b(is)h(similar)f(to)h(`)p Fr(!)p Fs(',)h(but)d(p)s(ossible)h(completions)i(are)e(not)h(listed)g(if)f (the)g(p)s(ossible)390 1297 y(completions)32 b(share)e(a)g(common)h (pre\014x.)3350 1491 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_complete)c Ff(\()p Fi(in)m(t)31 b(ignore,)g(in)m(t)g(in)m(v)m (oking)p 1929 1491 V 42 w(k)m(ey)p Ff(\))390 1601 y Fs(Complete)42 b(the)f(w)m(ord)g(at)h(or)f(b)s(efore)g(p)s(oin)m(t.)73 b(Y)-8 b(ou)41 b(ha)m(v)m(e)i(supplied)c(the)j(function)f(that)g(do)s (es)390 1710 y(the)33 b(initial)h(simple)f(matc)m(hing)h(selection)h (algorithm)f(\(see)g Fr(rl_completion_matches\(\))27 b Fs(and)390 1820 y Fr(rl_completion_entry_func)o(tion)o Fs(\).)52 b(The)35 b(default)h(is)g(to)h(do)e(\014lename)h(completion.) 59 b(This)390 1930 y(calls)32 b Fr(rl_complete_internal\(\))24 b Fs(with)30 b(an)g(argumen)m(t)h(dep)s(ending)e(on)h Fi(in)m(v)m(oking)p 3314 1930 V 41 w(k)m(ey)p Fs(.)3350 2124 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_possible_completio)q(ns) f Ff(\()p Fi(in)m(t)31 b(coun)m(t,)g(in)m(t)g(in)m(v)m(oking)p 2534 2124 V 41 w(k)m(ey)p Ff(\))390 2233 y Fs(List)41 b(the)f(p)s(ossible)g(completions.)73 b(See)40 b(description)h(of)g Fr(rl_complete)27 b(\(\))p Fs(.)70 b(This)40 b(calls)i Fr(rl_)390 2343 y(complete_internal\(\))25 b Fs(with)30 b(an)g(argumen)m(t)h(of)g(`)p Fr(?)p Fs('.)3350 2537 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_insert_completions)f Ff(\()p Fi(in)m(t)31 b(coun)m(t,)h(in)m(t)e(in)m(v)m(oking)p 2429 2537 V 42 w(k)m(ey)p Ff(\))390 2646 y Fs(Insert)j(the)h(list)g(of) g(p)s(ossible)f(completions)i(in)m(to)f(the)g(line,)h(deleting)g(the)f (partially-completed)390 2756 y(w)m(ord.)44 b(See)32 b(description)g(of)g Fr(rl_complete\(\))p Fs(.)41 b(This)31 b(calls)i Fr(rl_complete_internal\(\))25 b Fs(with)390 2865 y(an)30 b(argumen)m(t)h(of)g(`)p Fr(*)p Fs('.)3350 3059 y([F)-8 b(unction])-3599 b Fg(int)53 b(rl_completion_mode)e Ff(\()p Fi(rl)p 1448 3059 V 40 w(command)p 1872 3059 V 40 w(func)p 2082 3059 V 39 w(t)31 b(*cfunc)p Ff(\))390 3169 y Fs(Returns)40 b(the)i(appropriate)g(v)-5 b(alue)41 b(to)i(pass)e(to)h Fr(rl_complete_internal\(\))35 b Fs(dep)s(ending)40 b(on)390 3279 y(whether)g Fi(cfunc)46 b Fs(w)m(as)41 b(called)h(t)m(wice)g(in)f(succession)g(and)f(the)h(v)-5 b(alues)41 b(of)g(the)g Fr(show-all-if-)390 3388 y(ambiguous)25 b Fs(and)i Fr(show-all-if-unmodified)21 b Fs(v)-5 b(ariables.)41 b(Application-sp)s(eci\014c)29 b(completion)390 3498 y(functions)h(ma)m(y)h(use)f(this)g(function)g(to)h(presen)m(t)g(the)f (same)h(in)m(terface)h(as)f Fr(rl_complete\(\))p Fs(.)3350 3692 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e (rl_completion_matches)g Ff(\()p Fi(const)31 b(c)m(har)g(*text,)565 3801 y(rl)p 632 3801 V 40 w(comp)s(en)m(try)p 1094 3801 V 40 w(func)p 1304 3801 V 39 w(t)g(*en)m(try)p 1661 3801 V 41 w(func)p Ff(\))390 3911 y Fs(Returns)37 b(an)h(arra)m(y)g(of)g (strings)g(whic)m(h)f(is)h(a)g(list)h(of)f(completions)h(for)e Fi(text)p Fs(.)64 b(If)38 b(there)g(are)g(no)390 4020 y(completions,)f(returns)c Fr(NULL)p Fs(.)52 b(The)34 b(\014rst)f(en)m(try)i(in)f(the)h(returned)e(arra)m(y)i(is)g(the)f (substitution)390 4130 y(for)26 b Fi(text)p Fs(.)40 b(The)26 b(remaining)h(en)m(tries)g(are)g(the)f(p)s(ossible)g(completions.)40 b(The)26 b(arra)m(y)h(is)f(terminated)390 4240 y(with)k(a)h Fr(NULL)e Fs(p)s(oin)m(ter.)390 4379 y Fi(en)m(try)p 603 4379 V 40 w(func)44 b Fs(is)c(a)g(function)f(of)h(t)m(w)m(o)g (args,)j(and)38 b(returns)h(a)g Fr(char)30 b(*)p Fs(.)67 b(The)39 b(\014rst)g(argumen)m(t)h(is)390 4489 y Fi(text)p Fs(.)66 b(The)39 b(second)f(is)h(a)g(state)h(argumen)m(t;)j(it)c(is)g (zero)g(on)g(the)g(\014rst)f(call,)k(and)c(non-zero)h(on)390 4598 y(subsequen)m(t)33 b(calls.)52 b Fi(en)m(try)p 1320 4598 V 41 w(func)38 b Fs(returns)33 b(a)h Fr(NULL)f Fs(p)s(oin)m(ter)g (to)i(the)f(caller)h(when)e(there)h(are)g(no)390 4708 y(more)d(matc)m(hes.)3350 4902 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_filename_completion)q(_fu)q(nct)q(ion)g Ff(\()p Fi(const)31 b(c)m(har)g(*text,)h(in)m(t)565 5011 y(state)p Ff(\))390 5121 y Fs(A)26 b(generator)h(function)e(for)g (\014lename)h(completion)h(in)e(the)h(general)h(case.)40 b Fi(text)28 b Fs(is)e(a)g(partial)h(\014le-)390 5230 y(name.)38 b(The)21 b(Bash)g(source)h(is)g(a)f(useful)g(reference)h (for)f(writing)h(application-sp)s(eci\014c)h(completion)390 5340 y(functions)30 b(\(the)h(Bash)f(completion)i(functions)e(call)i (this)e(and)g(other)g(Readline)h(functions\).)p eop end %%Page: 48 52 TeXDict begin 48 51 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(48)3350 299 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(rl_username_completion) q(_fu)q(nct)q(ion)g Ff(\()p Fi(const)31 b(c)m(har)g(*text,)h(in)m(t)565 408 y(state)p Ff(\))390 518 y Fs(A)d(completion)g(generator)h(for)e (usernames.)40 b Fi(text)31 b Fs(con)m(tains)f(a)f(partial)g(username)f (preceded)g(b)m(y)390 628 y(a)j(random)f(c)m(haracter)i(\(usually)e(`)p Fr(~)p Fs('\).)42 b(As)31 b(with)f(all)h(completion)h(generators,)g Fi(state)37 b Fs(is)31 b(zero)g(on)390 737 y(the)g(\014rst)e(call)j (and)e(non-zero)h(for)f(subsequen)m(t)f(calls.)150 955 y Fh(2.6.3)63 b(Completion)41 b(V)-10 b(ariables)3371 1170 y Fs([V)i(ariable])-3598 b Fg(rl_compentry_func_t)58 b(*)53 b(rl_completion_entry_fun)q(cti)q(on)390 1279 y Fs(A)34 b(p)s(oin)m(ter)f(to)h(the)g(generator)h(function)e(for)g Fr(rl_completion_matches\(\))p Fs(.)44 b Fr(NULL)32 b Fs(means)h(to)390 1389 y(use)d Fr(rl_filename_completion_fu)o(nct)o (ion\()o(\))p Fs(,)25 b(the)30 b(default)h(\014lename)f(completer.)3371 1609 y([V)-8 b(ariable])-3598 b Fg(rl_completion_func_t)58 b(*)53 b(rl_attempted_completio)q(n_f)q(unct)q(ion)390 1719 y Fs(A)35 b(p)s(oin)m(ter)g(to)g(an)g(alternativ)m(e)i(function)d (to)i(create)g(matc)m(hes.)55 b(The)34 b(function)h(is)f(called)i(with) 390 1829 y Fi(text)p Fs(,)26 b Fi(start)p Fs(,)f(and)d Fi(end)p Fs(.)38 b Fi(start)25 b Fs(and)e Fi(end)j Fs(are)d(indices)g (in)g Fr(rl_line_buffer)c Fs(de\014ning)j(the)h(b)s(ound-)390 1938 y(aries)j(of)h Fi(text)p Fs(,)h(whic)m(h)d(is)h(a)h(c)m(haracter)g (string.)39 b(If)26 b(this)g(function)f(exists)i(and)e(returns)g Fr(NULL)p Fs(,)h(or)g(if)390 2048 y(this)c(v)-5 b(ariable)22 b(is)g(set)h(to)f Fr(NULL)p Fs(,)h(then)f Fr(rl_complete\(\))c Fs(will)k(call)h(the)f(v)-5 b(alue)23 b(of)f Fr(rl_completion_)390 2157 y(entry_function)i Fs(to)30 b(generate)f(matc)m(hes,)i(otherwise)d (the)h(arra)m(y)g(of)f(strings)h(returned)e(will)i(b)s(e)390 2267 y(used.)37 b(If)22 b(this)g(function)g(sets)h(the)g Fr(rl_attempted_completion)o(_ove)o(r)16 b Fs(v)-5 b(ariable)24 b(to)f(a)f(non-zero)390 2377 y(v)-5 b(alue,)35 b(Readline)g(will)f(not) g(p)s(erform)f(its)h(default)g(completion)h(ev)m(en)g(if)f(this)g (function)f(returns)390 2486 y(no)d(matc)m(hes.)3371 2707 y([V)-8 b(ariable])-3598 b Fg(rl_quote_func_t)57 b(*)52 b(rl_filename_quoting_)q(func)q(tio)q(n)390 2816 y Fs(A)33 b(p)s(oin)m(ter)f(to)h(a)g(function)g(that)g(will)g(quote)g (a)g(\014lename)f(in)h(an)f(application-sp)s(eci\014c)i(fashion.)390 2926 y(This)k(is)i(called)g(if)f(\014lename)h(completion)g(is)f(b)s (eing)g(attempted)i(and)d(one)i(of)f(the)g(c)m(haracters)390 3036 y(in)33 b Fr(rl_filename_quote_charac)o(ter)o(s)27 b Fs(app)s(ears)33 b(in)g(a)g(completed)h(\014lename.)50 b(The)32 b(function)390 3145 y(is)37 b(called)h(with)e Fi(text)p Fs(,)k Fi(matc)m(h)p 1438 3145 28 4 v 41 w(t)m(yp)s(e)p Fs(,)f(and)d Fi(quote)p 2119 3145 V 41 w(p)s(oin)m(ter)p Fs(.)60 b(The)36 b Fi(text)k Fs(is)d(the)g(\014lename)g(to)h(b)s(e)390 3255 y(quoted.)76 b(The)42 b Fi(matc)m(h)p 1210 3255 V 41 w(t)m(yp)s(e)48 b Fs(is)42 b(either)h Fr(SINGLE_MATCH)p Fs(,)f(if)g(there)g(is)h(only)f(one)h(completion)390 3364 y(matc)m(h,)33 b(or)e Fr(MULT_MATCH)p Fs(.)41 b(Some)31 b(functions)g(use)g(this)h(to)g(decide)f(whether)g(or)h(not)f(to)h (insert)g(a)390 3474 y(closing)22 b(quote)f(c)m(haracter.)40 b(The)20 b Fi(quote)p 1751 3474 V 41 w(p)s(oin)m(ter)27 b Fs(is)21 b(a)g(p)s(oin)m(ter)g(to)g(an)m(y)h(op)s(ening)e(quote)h(c)m (haracter)390 3584 y(the)31 b(user)e(t)m(yp)s(ed.)41 b(Some)30 b(functions)g(c)m(ho)s(ose)h(to)g(reset)g(this)g(c)m (haracter.)3371 3804 y([V)-8 b(ariable])-3598 b Fg(rl_dequote_func_t)57 b(*)c(rl_filename_dequoting_)q(fun)q(cti)q(on)390 3914 y Fs(A)30 b(p)s(oin)m(ter)f(to)i(a)f(function)f(that)h(will)g(remo)m(v) m(e)h(application-sp)s(eci\014c)g(quoting)f(c)m(haracters)h(from)390 4023 y(a)i(\014lename)g(b)s(efore)f(completion)h(is)g(attempted,)h(so)f (those)g(c)m(haracters)h(do)e(not)h(in)m(terfere)g(with)390 4133 y(matc)m(hing)39 b(the)f(text)i(against)f(names)f(in)g(the)g (\014lesystem.)64 b(It)38 b(is)g(called)i(with)d Fi(text)p Fs(,)42 b(the)c(text)390 4243 y(of)k(the)h(w)m(ord)f(to)g(b)s(e)g (dequoted,)j(and)d Fi(quote)p 2014 4243 V 41 w(c)m(har)p Fs(,)j(whic)m(h)d(is)h(the)f(quoting)h(c)m(haracter)g(that)390 4352 y(delimits)33 b(the)f(\014lename)g(\(usually)h(`)p Fr(')p Fs(')f(or)g(`)p Fr(")p Fs('\).)46 b(If)32 b Fi(quote)p 2368 4352 V 41 w(c)m(har)39 b Fs(is)32 b(zero,)i(the)e(\014lename)g(w)m (as)h(not)390 4462 y(in)d(an)g(em)m(b)s(edded)g(string.)3371 4682 y([V)-8 b(ariable])-3598 b Fg(rl_linebuf_func_t)57 b(*)c(rl_char_is_quoted_p)390 4792 y Fs(A)37 b(p)s(oin)m(ter)g(to)g(a)g (function)g(to)g(call)h(that)g(determines)f(whether)f(or)h(not)g(a)g (sp)s(eci\014c)f(c)m(haracter)390 4902 y(in)e(the)h(line)f(bu\013er)g (is)g(quoted,)i(according)g(to)f(whatev)m(er)g(quoting)g(mec)m(hanism)g (the)f(program)390 5011 y(calling)26 b(Readline)g(uses.)38 b(The)24 b(function)h(is)g(called)h(with)e(t)m(w)m(o)i(argumen)m(ts:)39 b Fi(text)p Fs(,)27 b(the)e(text)h(of)f(the)390 5121 y(line,)31 b(and)g Fi(index)p Fs(,)f(the)h(index)f(of)h(the)g(c)m (haracter)i(in)d(the)h(line.)42 b(It)31 b(is)g(used)f(to)h(decide)g (whether)g(a)390 5230 y(c)m(haracter)h(found)d(in)g Fr (rl_completer_word_break_ch)o(ara)o(cter)o(s)24 b Fs(should)29 b(b)s(e)h(used)f(to)i(break)390 5340 y(w)m(ords)f(for)g(the)h (completer.)p eop end %%Page: 49 53 TeXDict begin 49 52 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(49)3371 299 y([V)-8 b(ariable])-3598 b Fg(rl_compignore_func_t)58 b(*)53 b(rl_ignore_some_complet)q(ion)q(s_fu)q(nct)q(ion)390 408 y Fs(This)37 b(function,)i(if)f(de\014ned,)g(is)g(called)h(b)m(y)e (the)h(completer)h(when)e(real)h(\014lename)g(completion)390 518 y(is)c(done,)h(after)f(all)h(the)g(matc)m(hing)g(names)e(ha)m(v)m (e)j(b)s(een)d(generated.)53 b(It)34 b(is)g(passed)f(a)i Fr(NULL)d Fs(ter-)390 628 y(minated)f(arra)m(y)g(of)g(matc)m(hes.)43 b(The)31 b(\014rst)f(elemen)m(t)i(\()p Fr(matches[0])p Fs(\))d(is)h(the)h(maximal)h(substring)390 737 y(common)d(to)g(all)h (matc)m(hes.)41 b(This)28 b(function)h(can)g(re-arrange)g(the)g(list)h (of)f(matc)m(hes)g(as)g(required,)390 847 y(but)h(eac)m(h)h(elemen)m(t) h(deleted)f(from)f(the)h(arra)m(y)g(m)m(ust)f(b)s(e)g(freed.)3371 1043 y([V)-8 b(ariable])-3598 b Fg(rl_icppfunc_t)56 b(*)d (rl_directory_completio)q(n_ho)q(ok)390 1152 y Fs(This)44 b(function,)49 b(if)d(de\014ned,)i(is)d(allo)m(w)m(ed)i(to)f(mo)s(dify) e(the)i(directory)g(p)s(ortion)e(of)i(\014lenames)390 1262 y(Readline)35 b(completes.)56 b(It)35 b(could)g(b)s(e)f(used)g(to) i(expand)e(sym)m(b)s(olic)h(links)g(or)g(shell)g(v)-5 b(ariables)35 b(in)390 1372 y(pathnames.)70 b(It)41 b(is)f(called)h (with)f(the)h(address)e(of)i(a)g(string)f(\(the)h(curren)m(t)f (directory)h(name\))390 1481 y(as)d(an)f(argumen)m(t,)j(and)d(ma)m(y)i (mo)s(dify)d(that)j(string.)62 b(If)37 b(the)h(string)f(is)h(replaced)g (with)f(a)h(new)390 1591 y(string,)j(the)d(old)h(v)-5 b(alue)39 b(should)e(b)s(e)h(freed.)64 b(An)m(y)39 b(mo)s(di\014ed)e (directory)i(name)f(should)g(ha)m(v)m(e)i(a)390 1700 y(trailing)c(slash.)54 b(The)35 b(mo)s(di\014ed)e(v)-5 b(alue)36 b(will)f(b)s(e)f(used)g(as)i(part)e(of)h(the)h(completion,)h (replacing)390 1810 y(the)32 b(directory)g(p)s(ortion)f(of)h(the)g (pathname)f(the)h(user)f(t)m(yp)s(ed.)44 b(A)m(t)33 b(the)f(least,)h (ev)m(en)g(if)e(no)h(other)390 1920 y(expansion)j(is)h(p)s(erformed,)f (this)h(function)f(should)g(remo)m(v)m(e)i(an)m(y)f(quote)g(c)m (haracters)h(from)e(the)390 2029 y(directory)c(name,)g(b)s(ecause)f (its)h(result)f(will)h(b)s(e)e(passed)h(directly)h(to)g Fr(opendir\(\))p Fs(.)390 2170 y(The)25 b(directory)i(completion)g(ho)s (ok)e(returns)g(an)h(in)m(teger)h(that)f(should)f(b)s(e)g(non-zero)i (if)e(the)i(func-)390 2279 y(tion)35 b(mo)s(di\014es)e(its)i(directory) f(argumen)m(t.)53 b(The)33 b(function)h(should)f(not)i(mo)s(dify)e(the) h(directory)390 2389 y(argumen)m(t)d(if)f(it)h(returns)e(0.)3371 2585 y([V)-8 b(ariable])-3598 b Fg(rl_icppfunc_t)56 b(*)d (rl_directory_rewrite_h)q(ook;)390 2694 y Fs(If)24 b(non-zero,)i(this)e (is)h(the)f(address)g(of)g(a)h(function)f(to)h(call)g(when)f (completing)h(a)g(directory)g(name.)390 2804 y(This)h(function)g(tak)m (es)i(the)f(address)f(of)h(the)f(directory)h(name)g(to)g(b)s(e)f(mo)s (di\014ed)g(as)h(an)f(argumen)m(t.)390 2914 y(Unlik)m(e)40 b Fr(rl_directory_completion_h)o(ook)p Fs(,)35 b(it)40 b(only)f(mo)s(di\014es)f(the)i(directory)f(name)h(used)390 3023 y(in)35 b Fr(opendir)p Fs(,)g(not)g(what)h(is)f(displa)m(y)m(ed)h (when)e(the)i(p)s(ossible)f(completions)h(are)g(prin)m(ted)f(or)g(in-) 390 3133 y(serted.)k(It)27 b(is)f(called)h(b)s(efore)f(rl)p 1463 3133 28 4 v 40 w(directory)p 1859 3133 V 41 w(completion)p 2333 3133 V 41 w(ho)s(ok.)39 b(A)m(t)27 b(the)g(least,)h(ev)m(en)f(if)g (no)f(other)390 3242 y(expansion)35 b(is)h(p)s(erformed,)f(this)h (function)f(should)g(remo)m(v)m(e)i(an)m(y)f(quote)g(c)m(haracters)h (from)e(the)390 3352 y(directory)c(name,)g(b)s(ecause)f(its)h(result)f (will)h(b)s(e)e(passed)h(directly)h(to)g Fr(opendir\(\))p Fs(.)390 3492 y(The)37 b(directory)i(rewrite)f(ho)s(ok)f(returns)g(an)h (in)m(teger)h(that)f(should)f(b)s(e)g(non-zero)i(if)e(the)i(func-)390 3602 y(tion)e(mo)s(d\014es)e(its)h(directory)h(argumen)m(t.)58 b(The)36 b(function)f(should)h(not)g(mo)s(dify)f(the)h(directory)390 3712 y(argumen)m(t)31 b(if)f(it)h(returns)e(0.)3371 3908 y([V)-8 b(ariable])-3598 b Fg(rl_icppfunc_t)56 b(*)d (rl_filename_stat_hook)390 4017 y Fs(If)30 b(non-zero,)h(this)f(is)g (the)g(address)f(of)h(a)h(function)f(for)f(the)i(completer)g(to)g(call) g(b)s(efore)f(deciding)390 4127 y(whic)m(h)g(c)m(haracter)i(to)e(app)s (end)f(to)i(a)f(completed)h(name.)41 b(This)29 b(function)h(mo)s (di\014es)f(its)i(\014lename)390 4236 y(name)36 b(argumen)m(t,)h(and)e (the)h(mo)s(di\014ed)e(v)-5 b(alue)36 b(is)g(passed)f(to)h Fr(stat\(\))e Fs(to)i(determine)g(the)g(\014le's)390 4346 y(t)m(yp)s(e)41 b(and)f(c)m(haracteristics.)73 b(This)40 b(function)g(do)s(es)g(not)h(need)f(to)h(remo)m(v)m(e)h(quote)f(c)m (haracters)390 4456 y(from)30 b(the)g(\014lename.)390 4596 y(The)i(stat)h(ho)s(ok)f(returns)f(an)h(in)m(teger)i(that)e (should)g(b)s(e)f(non-zero)i(if)f(the)g(function)g(mo)s(d\014es)g(its) 390 4706 y(directory)42 b(argumen)m(t.)73 b(The)40 b(function)h(should) f(not)h(mo)s(dify)f(the)h(directory)h(argumen)m(t)f(if)g(it)390 4815 y(returns)29 b(0.)3371 5011 y([V)-8 b(ariable])-3598 b Fg(rl_dequote_func_t)57 b(*)c(rl_filename_rewrite_ho)q(ok)390 5121 y Fs(If)39 b(non-zero,)k(this)d(is)f(the)h(address)f(of)h(a)g (function)g(called)g(when)f(reading)h(directory)g(en)m(tries)390 5230 y(from)f(the)h(\014lesystem)g(for)g(completion)h(and)e(comparing)i (them)e(to)i(the)f(partial)h(w)m(ord)e(to)i(b)s(e)390 5340 y(completed.)g(The)26 b(function)h(should)f(p)s(erform)f(an)m(y)j (necessary)f(application)i(or)e(system-sp)s(eci\014c)p eop end %%Page: 50 54 TeXDict begin 50 53 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(50)390 299 y(con)m(v)m(ersion)35 b(on)g(the)f(\014lename,)i(suc)m(h)d(as)i (con)m(v)m(erting)h(b)s(et)m(w)m(een)f(c)m(haracter)g(sets)g(or)f(con)m (v)m(erting)390 408 y(from)f(a)g(\014lesystem)h(format)g(to)g(a)f(c)m (haracter)i(input)e(format.)50 b(The)32 b(function)h(tak)m(es)i(t)m(w)m (o)g(argu-)390 518 y(men)m(ts:)49 b Fi(fname)p Fs(,)36 b(the)e(\014lename)h(to)g(b)s(e)f(con)m(v)m(erted,)j(and)d Fi(fnlen)p Fs(,)h(its)g(length)g(in)f(b)m(ytes.)53 b(It)35 b(m)m(ust)390 628 y(either)24 b(return)e(its)h(\014rst)g(argumen)m(t)g (\(if)h(no)f(con)m(v)m(ersion)h(tak)m(es)h(place\))g(or)e(the)g(con)m (v)m(erted)i(\014lename)390 737 y(in)j(newly-allo)s(cated)i(memory)-8 b(.)41 b(The)27 b(con)m(v)m(erted)j(form)e(is)g(used)g(to)h(compare)f (against)i(the)e(w)m(ord)390 847 y(to)g(b)s(e)e(completed,)j(and,)f(if) f(it)h(matc)m(hes,)h(is)e(added)f(to)i(the)g(list)f(of)h(matc)m(hes.)41 b(Readline)27 b(will)h(free)390 956 y(the)j(allo)s(cated)h(string.)3371 1134 y([V)-8 b(ariable])-3598 b Fg(rl_compdisp_func_t)58 b(*)52 b(rl_completion_display)q(_ma)q(tch)q(es_h)q(ook)390 1244 y Fs(If)22 b(non-zero,)i(then)e(this)g(is)g(the)g(address)f(of)h (a)g(function)g(to)h(call)g(when)e(completing)i(a)g(w)m(ord)e(w)m(ould) 390 1354 y(normally)h(displa)m(y)h(the)f(list)h(of)f(p)s(ossible)g (matc)m(hes.)39 b(This)21 b(function)h(is)g(called)i(in)e(lieu)g(of)g (Readline)390 1463 y(displa)m(ying)37 b(the)h(list.)61 b(It)37 b(tak)m(es)i(three)e(argumen)m(ts:)54 b(\()p Fr(char)30 b(**)p Fi(matc)m(hes)p Fs(,)39 b Fr(int)d Fi(n)m(um)p 3370 1463 28 4 v 40 w(matc)m(hes)p Fs(,)390 1573 y Fr(int)26 b Fi(max)p 735 1573 V 40 w(length)p Fs(\))h(where)f Fi(matc)m(hes)31 b Fs(is)c(the)f(arra)m(y)h(of)g(matc)m (hing)g(strings,)h Fi(n)m(um)p 3152 1573 V 39 w(matc)m(hes)j Fs(is)c(the)390 1682 y(n)m(um)m(b)s(er)h(of)h(strings)g(in)g(that)g (arra)m(y)-8 b(,)31 b(and)d Fi(max)p 2020 1682 V 40 w(length)i Fs(is)f(the)g(length)h(of)f(the)g(longest)h(string)f(in)390 1792 y(that)g(arra)m(y)-8 b(.)41 b(Readline)28 b(pro)m(vides)g(a)h(con) m(v)m(enience)h(function,)e Fr(rl_display_match_list)p Fs(,)23 b(that)390 1902 y(tak)m(es)36 b(care)g(of)f(doing)g(the)g (displa)m(y)f(to)i(Readline's)f(output)g(stream.)54 b(That)35 b(function)f(ma)m(y)i(b)s(e)390 2011 y(called)c(from)d(this)i(ho)s(ok.) 3371 2189 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_basic_word_break_ch)q(ara)q(cter)q(s)390 2299 y Fs(The)44 b(basic)g(list)h(of)f(c)m(haracters)i(that)f(signal)g(a)f(break)g(b)s (et)m(w)m(een)h(w)m(ords)f(for)g(the)g(completer)390 2408 y(routine.)61 b(The)37 b(default)g(v)-5 b(alue)37 b(of)h(this)f(v)-5 b(ariable)38 b(is)f(the)g(c)m(haracters)i(whic)m(h)e (break)g(w)m(ords)f(for)390 2518 y(completion)c(in)e(Bash:)41 b Fr(")30 b(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fs(.)3371 2696 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_basic_quote_charact)q(ers)390 2806 y Fs(A)30 b(list)i(of)e(quote)h (c)m(haracters)h(whic)m(h)e(can)h(cause)g(a)f(w)m(ord)g(break.)3371 2984 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_completer_word_brea)q(k_c)q(hara)q(cte)q(rs)390 3093 y Fs(The)64 b(list)i(of)f(c)m(haracters)h(that)g(signal)g(a)f(break)g (b)s(et)m(w)m(een)g(w)m(ords)g(for)f Fr(rl_complete_)390 3203 y(internal\(\))p Fs(.)38 b(The)30 b(default)g(list)h(is)g(the)f(v) -5 b(alue)31 b(of)g Fr(rl_basic_word_break_cha)o(ract)o(ers)p Fs(.)3371 3381 y([V)-8 b(ariable])-3598 b Fg(rl_cpvfunc_t)56 b(*)d(rl_completion_word_brea)q(k_ho)q(ok)390 3491 y Fs(If)31 b(non-zero,)i(this)e(is)h(the)f(address)g(of)g(a)h(function)g (to)g(call)h(when)d(Readline)i(is)g(deciding)f(where)390 3600 y(to)k(separate)g(w)m(ords)f(for)g(w)m(ord)g(completion.)54 b(It)34 b(should)f(return)g(a)i(c)m(haracter)h(string)e(lik)m(e)i Fr(rl_)390 3710 y(completer_word_break_cha)o(ract)o(ers)26 b Fs(to)34 b(b)s(e)e(used)g(to)i(p)s(erform)e(the)h(curren)m(t)f (completion.)390 3819 y(The)24 b(function)h(ma)m(y)g(c)m(ho)s(ose)h(to) f(set)g Fr(rl_completer_word_break_ch)o(arac)o(ter)o(s)19 b Fs(itself.)39 b(If)25 b(the)390 3929 y(function)30 b(returns)f Fr(NULL)p Fs(,)h Fr(rl_completer_word_break)o(_cha)o(rac)o (ters)24 b Fs(is)30 b(used.)3371 4107 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g(rl_completer_quote_cha)q(rac)q(ters)390 4217 y Fs(A)34 b(list)g(of)g(c)m(haracters)h(whic)m(h)e(can)h(b)s(e)g (used)e(to)j(quote)f(a)g(substring)f(of)h(the)f(line.)51 b(Completion)390 4326 y(o)s(ccurs)26 b(on)g(the)g(en)m(tire)i (substring,)e(and)f(within)h(the)g(substring)g Fr (rl_completer_word_break)o(_)390 4436 y(characters)32 b Fs(are)k(treated)g(as)f(an)m(y)h(other)f(c)m(haracter,)j(unless)d (they)g(also)h(app)s(ear)e(within)h(this)390 4545 y(list.)3371 4724 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_filename_quote_char)q(act)q(ers)390 4833 y Fs(A)34 b(list)g(of)g(c)m(haracters)h(that)f(cause)h(a)f(\014lename)g(to)g(b)s (e)f(quoted)h(b)m(y)f(the)h(completer)h(when)e(they)390 4943 y(app)s(ear)d(in)g(a)h(completed)g(\014lename.)41 b(The)30 b(default)g(is)h(the)f(n)m(ull)h(string.)3371 5121 y([V)-8 b(ariable])-3598 b Fg(const)54 b(char)f(*)g (rl_special_prefixes)390 5230 y Fs(The)27 b(list)i(of)e(c)m(haracters)j (that)e(are)g(w)m(ord)f(break)h(c)m(haracters,)i(but)d(should)f(b)s(e)h (left)i(in)e Fi(text)k Fs(when)390 5340 y(it)25 b(is)g(passed)f(to)h (the)g(completion)h(function.)38 b(Programs)25 b(can)g(use)f(this)h(to) g(help)f(determine)h(what)p eop end %%Page: 51 55 TeXDict begin 51 54 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(51)390 299 y(kind)27 b(of)h(completing)h(to)f(do.)40 b(F)-8 b(or)29 b(instance,)g(Bash)f(sets)g(this)g(v)-5 b(ariable)28 b(to)h Fr(")p Fs($@)p Fr(")e Fs(so)h(that)g(it)h(can)390 408 y(complete)j(shell)e(v)-5 b(ariables)31 b(and)f(hostnames.)3371 628 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_query_i)q (tems)390 737 y Fs(Up)36 b(to)h(this)f(man)m(y)g(items)h(will)f(b)s(e)g (displa)m(y)m(ed)h(in)e(resp)s(onse)h(to)h(a)f(p)s(ossible-completions) h(call.)390 847 y(After)28 b(that,)h(readline)f(asks)g(the)g(user)f(if) h(she)f(is)h(sure)f(she)h(w)m(an)m(ts)g(to)h(see)f(them)g(all.)40 b(The)28 b(default)390 956 y(v)-5 b(alue)31 b(is)f(100.)42 b(A)31 b(negativ)m(e)h(v)-5 b(alue)31 b(indicates)g(that)g(Readline)g (should)f(nev)m(er)h(ask)f(the)h(user.)3371 1176 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_append_)q(char)q(act)q(er) 390 1285 y Fs(When)33 b(a)h(single)f(completion)i(alternativ)m(e)h (matc)m(hes)e(at)g(the)f(end)g(of)g(the)h(command)f(line,)h(this)390 1395 y(c)m(haracter)23 b(is)e(app)s(ended)f(to)i(the)g(inserted)f (completion)i(text.)39 b(The)20 b(default)i(is)g(a)f(space)h(c)m (haracter)390 1504 y(\(`)31 b('\).)86 b(Setting)46 b(this)f(to)h(the)g (n)m(ull)f(c)m(haracter)i(\(`)p Fr(\\0)p Fs('\))f(prev)m(en)m(ts)g(an)m (ything)g(b)s(eing)f(app)s(ended)390 1614 y(automatically)-8 b(.)66 b(This)37 b(can)h(b)s(e)f(c)m(hanged)h(in)g(application-sp)s (eci\014c)h(completion)g(functions)e(to)390 1724 y(pro)m(vide)j(the)g (\\most)g(sensible)g(w)m(ord)f(separator)i(c)m(haracter")h(according)e (to)h(an)e(application-)390 1833 y(sp)s(eci\014c)30 b(command)g(line)h (syn)m(tax)g(sp)s(eci\014cation.)3371 2052 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_suppres)q(s_ap)q(pen)q(d)390 2162 y Fs(If)33 b(non-zero,)i Fi(rl)p 949 2162 28 4 v 39 w(completion)p 1421 2162 V 42 w(app)s(end)p 1755 2162 V 38 w(c)m(haracter)42 b Fs(is)33 b(not)g(app)s(ended)f(to)i(matc)m (hes)g(at)g(the)g(end)390 2271 y(of)28 b(the)f(command)h(line,)h(as)e (describ)s(ed)g(ab)s(o)m(v)m(e.)41 b(It)27 b(is)h(set)g(to)g(0)g(b)s (efore)g(an)m(y)f(application-sp)s(eci\014c)390 2381 y(completion)32 b(function)e(is)g(called,)i(and)e(ma)m(y)h(only)f(b)s (e)g(c)m(hanged)h(within)f(suc)m(h)g(a)h(function.)3371 2600 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_quote_c)q (hara)q(cte)q(r)390 2710 y Fs(When)36 b(Readline)h(is)f(completing)h (quoted)g(text,)h(as)f(delimited)g(b)m(y)f(one)g(of)g(the)h(c)m (haracters)g(in)390 2819 y Fi(rl)p 457 2819 V 40 w(completer)p 885 2819 V 41 w(quote)p 1145 2819 V 41 w(c)m(haracters)p Fs(,)43 b(it)c(sets)g(this)g(v)-5 b(ariable)40 b(to)g(the)f(quoting)g (c)m(haracter)i(found.)390 2929 y(This)30 b(is)g(set)h(b)s(efore)f(an)m (y)h(application-sp)s(eci\014c)g(completion)h(function)e(is)h(called.) 3371 3148 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_suppres) q(s_qu)q(ote)390 3258 y Fs(If)32 b(non-zero,)h(Readline)g(do)s(es)f (not)h(app)s(end)d(a)j(matc)m(hing)g(quote)g(c)m(haracter)h(when)d(p)s (erforming)390 3367 y(completion)25 b(on)e(a)h(quoted)g(string.)38 b(It)24 b(is)f(set)h(to)h(0)f(b)s(efore)f(an)m(y)h(application-sp)s (eci\014c)h(completion)390 3477 y(function)30 b(is)g(called,)i(and)e (ma)m(y)h(only)g(b)s(e)e(c)m(hanged)i(within)f(suc)m(h)g(a)h(function.) 3371 3696 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_found_q) q(uote)390 3806 y Fs(When)31 b(Readline)i(is)e(completing)i(quoted)f (text,)h(it)f(sets)g(this)g(v)-5 b(ariable)32 b(to)h(a)f(non-zero)g(v) -5 b(alue)32 b(if)390 3915 y(the)21 b(w)m(ord)g(b)s(eing)g(completed)h (con)m(tains)g(or)f(is)g(delimited)h(b)m(y)f(an)m(y)g(quoting)h(c)m (haracters,)i(including)390 4025 y(bac)m(kslashes.)42 b(This)29 b(is)i(set)g(b)s(efore)f(an)m(y)g(application-sp)s(eci\014c)i (completion)g(function)e(is)g(called.)3371 4244 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_mark_sy)q(mlin)q(k_d)q (irs)390 4354 y Fs(If)31 b(non-zero,)i(a)f(slash)g(will)g(b)s(e)f(app)s (ended)f(to)j(completed)g(\014lenames)e(that)i(are)f(sym)m(b)s(olic)g (links)390 4463 y(to)25 b(directory)g(names,)g(sub)5 b(ject)24 b(to)h(the)f(v)-5 b(alue)25 b(of)f(the)h(user-settable)g Fi(mark-directories)k Fs(v)-5 b(ariable.)390 4573 y(This)27 b(v)-5 b(ariable)28 b(exists)g(so)f(that)h(application-sp)s(eci\014c)h (completion)g(functions)e(can)g(o)m(v)m(erride)i(the)390 4682 y(user's)42 b(global)h(preference)g(\(set)g(via)g(the)f Fi(mark-symlink)m(ed-directories)48 b Fs(Readline)43 b(v)-5 b(ariable\))390 4792 y(if)38 b(appropriate.)62 b(This)37 b(v)-5 b(ariable)38 b(is)g(set)g(to)g(the)g(user's)f (preference)g(b)s(efore)g(an)m(y)h(application-)390 4902 y(sp)s(eci\014c)31 b(completion)i(function)f(is)f(called,)j(so)e (unless)f(that)h(function)f(mo)s(di\014es)g(the)h(v)-5 b(alue,)33 b(the)390 5011 y(user's)d(preferences)g(are)h(honored.)3371 5230 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_ignore_completion_)q (dupl)q(ica)q(tes)390 5340 y Fs(If)30 b(non-zero,)h(then)f(duplicates)h (in)f(the)h(matc)m(hes)g(are)g(remo)m(v)m(ed.)42 b(The)29 b(default)i(is)f(1.)p eop end %%Page: 52 56 TeXDict begin 52 55 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(52)3371 299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_filename_completio)q (n_de)q(sir)q(ed)390 408 y Fs(Non-zero)33 b(means)f(that)g(the)g (results)f(of)h(the)g(matc)m(hes)h(are)f(to)h(b)s(e)e(treated)i(as)f (\014lenames.)45 b(This)390 518 y(is)40 b Fj(always)49 b Fs(zero)41 b(when)e(completion)i(is)f(attempted,)j(and)d(can)g(only)g (b)s(e)f(c)m(hanged)i(within)e(an)390 628 y(application-sp)s(eci\014c)i (completion)g(function.)67 b(If)39 b(it)h(is)f(set)h(to)h(a)e(non-zero) h(v)-5 b(alue)40 b(b)m(y)f(suc)m(h)h(a)390 737 y(function,)24 b(directory)f(names)f(ha)m(v)m(e)h(a)g(slash)f(app)s(ended)e(and)i (Readline)h(attempts)g(to)g(quote)g(com-)390 847 y(pleted)35 b(\014lenames)g(if)g(they)h(con)m(tain)g(an)m(y)f(c)m(haracters)i(in)e Fr(rl_filename_quote_chara)o(cter)o(s)390 956 y Fs(and)30 b Fr(rl_filename_quoting_des)o(ired)24 b Fs(is)30 b(set)h(to)g(a)g (non-zero)g(v)-5 b(alue.)3371 1141 y([V)d(ariable])-3598 b Fg(int)53 b(rl_filename_quoting_d)q(esir)q(ed)390 1250 y Fs(Non-zero)29 b(means)f(that)h(the)f(results)g(of)g(the)g(matc)m (hes)i(are)e(to)h(b)s(e)e(quoted)h(using)g(double)f(quotes)390 1360 y(\(or)43 b(an)f(application-sp)s(eci\014c)i(quoting)f(mec)m (hanism\))g(if)f(the)h(completed)g(\014lename)g(con)m(tains)390 1469 y(an)m(y)28 b(c)m(haracters)h(in)e Fr(rl_filename_quote_chars)p Fs(.)34 b(This)27 b(is)g Fj(always)37 b Fs(non-zero)28 b(when)f(comple-)390 1579 y(tion)h(is)g(attempted,)h(and)e(can)h(only)g (b)s(e)f(c)m(hanged)h(within)f(an)h(application-sp)s(eci\014c)h (completion)390 1689 y(function.)37 b(The)21 b(quoting)g(is)g (e\013ected)i(via)e(a)h(call)g(to)g(the)f(function)g(p)s(oin)m(ted)g (to)g(b)m(y)g Fr(rl_filename_)390 1798 y(quoting_function)p Fs(.)3371 1983 y([V)-8 b(ariable])-3598 b Fg(int)53 b (rl_attempted_completi)q(on_o)q(ver)390 2092 y Fs(If)93 b(an)h(application-sp)s(eci\014c)i(completion)f(function)f(assigned)g (to)h Fr(rl_attempted_)390 2202 y(completion_function)48 b Fs(sets)53 b(this)g(v)-5 b(ariable)54 b(to)g(a)f(non-zero)h(v)-5 b(alue,)60 b(Readline)53 b(will)h(not)390 2311 y(p)s(erform)28 b(its)i(default)g(\014lename)g(completion)h(ev)m(en)f(if)g(the)f (application's)i(completion)g(function)390 2421 y(returns)e(no)h(matc)m (hes.)42 b(It)31 b(should)e(b)s(e)h(set)h(only)f(b)m(y)h(an)f (application's)i(completion)f(function.)3371 2605 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_sort_completion_ma)q(tche)q(s)390 2715 y Fs(If)29 b(an)h(application)h(sets)f(this)g(v)-5 b(ariable)31 b(to)f(0,)h(Readline)f(will)g(not)g(sort)g(the)g(list)h (of)f(completions)390 2824 y(\(whic)m(h)25 b(implies)f(that)i(it)f (cannot)g(remo)m(v)m(e)h(an)m(y)f(duplicate)g(completions\).)40 b(The)24 b(default)h(v)-5 b(alue)25 b(is)390 2934 y(1,)32 b(whic)m(h)f(means)g(that)h(Readline)g(will)f(sort)h(the)f(completions) h(and,)f(dep)s(ending)f(on)h(the)g(v)-5 b(alue)390 3044 y(of)31 b Fr(rl_ignore_completion_du)o(pli)o(cate)o(s)p Fs(,)25 b(will)30 b(attempt)i(to)f(remo)m(v)m(e)h(duplicate)f(matc)m (hes.)3371 3228 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_type)390 3337 y Fs(Set)35 b(to)h(a)f(c)m(haracter)i (describing)e(the)g(t)m(yp)s(e)g(of)g(completion)i(Readline)e(is)g (curren)m(tly)h(attempt-)390 3447 y(ing;)f(see)f(the)g(description)f (of)g Fr(rl_complete_internal\(\))28 b Fs(\(see)34 b(Section)g(2.6.2)h ([Completion)390 3557 y(F)-8 b(unctions],)39 b(page)f(47\))f(for)g(the) g(list)g(of)g(c)m(haracters.)61 b(This)36 b(is)g(set)i(to)f(the)g (appropriate)f(v)-5 b(alue)390 3666 y(b)s(efore)31 b(an)m(y)h (application-sp)s(eci\014c)h(completion)g(function)f(is)f(called,)j (allo)m(wing)f(suc)m(h)e(functions)390 3776 y(to)g(presen)m(t)g(the)f (same)h(in)m(terface)h(as)e Fr(rl_complete\(\))p Fs(.)3371 3960 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_completion_invokin)q (g_ke)q(y)390 4070 y Fs(Set)41 b(to)g(the)g(\014nal)g(c)m(haracter)h (in)e(the)h(k)m(ey)g(sequence)h(that)f(in)m(v)m(ok)m(ed)h(one)f(of)g (the)g(completion)390 4179 y(functions)c(that)h(call)h Fr(rl_complete_internal\(\))p Fs(.)56 b(This)37 b(is)g(set)h(to)g(the)g (appropriate)f(v)-5 b(alue)390 4289 y(b)s(efore)30 b(an)m(y)h (application-sp)s(eci\014c)h(completion)f(function)f(is)h(called.)3371 4473 y([V)-8 b(ariable])-3598 b Fg(int)53 b(rl_inhibit_completion)390 4583 y Fs(If)28 b(this)g(v)-5 b(ariable)29 b(is)f(non-zero,)i (completion)f(is)f(inhibited.)40 b(The)28 b(completion)h(c)m(haracter)h (will)f(b)s(e)390 4692 y(inserted)h(as)h(an)m(y)g(other)f(b)s(ound)e (to)k Fr(self-insert)p Fs(.)150 4892 y Fh(2.6.4)63 b(A)40 b(Short)i(Completion)g(Example)150 5039 y Fs(Here)30 b(is)f(a)g(small)h(application)g(demonstrating)f(the)h(use)e(of)i(the)f (GNU)h(Readline)f(library)-8 b(.)40 b(It)30 b(is)f(called)150 5148 y Fr(fileman)p Fs(,)40 b(and)f(the)h(source)g(co)s(de)g(resides)f (in)g Fr(examples/fileman.c)p Fs(.)64 b(This)39 b(sample)h(application) 150 5258 y(pro)m(vides)26 b(completion)i(of)e(command)g(names,)h(line)f (editing)h(features,)h(and)d(access)j(to)f(the)f(history)g(list.)p eop end %%Page: 53 57 TeXDict begin 53 56 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(53)390 299 y Fe(/*)40 b(fileman.c)h(--)f(A)f(tiny)h(application)i(which)e (demonstrates)i(how)e(to)g(use)g(the)508 386 y(GNU)g(Readline)h (library.)80 b(This)40 b(application)i(interactively)g(allows)f(users) 508 473 y(to)e(manipulate)j(files)e(and)g(their)h(modes.)f(*/)390 648 y(#ifdef)h(HAVE_CONFIG_H)390 735 y(#)79 b(include)40 b()390 822 y(#endif)390 996 y(#include)h()390 1083 y(#ifdef)g(HAVE_SYS_FILE_H)390 1171 y(#)79 b(include)40 b()390 1258 y(#endif)390 1345 y(#include)h()390 1519 y(#ifdef)g(HAVE_UNISTD_H)390 1606 y(#)79 b(include)40 b()390 1694 y(#endif)390 1868 y(#include)h()390 1955 y(#include)g()390 2042 y(#include)g()390 2217 y(#if)f(defined)h(\(HAVE_STRING_H\))390 2304 y(#)79 b(include)40 b()390 2391 y(#else)g(/*)g(!HAVE_STRING_H)i(*/) 390 2478 y(#)79 b(include)40 b()390 2565 y(#endif)h(/*)e (!HAVE_STRING_H)k(*/)390 2740 y(#ifdef)e(HAVE_STDLIB_H)390 2827 y(#)79 b(include)40 b()390 2914 y(#endif)390 3088 y(#include)h()390 3263 y(#include)g() 390 3350 y(#include)g()390 3524 y(extern)g(char)f (*xmalloc)h(PARAMS\(\(size_t\)\);)390 3699 y(/*)f(The)g(names)g(of)g (functions)h(that)f(actually)h(do)f(the)g(manipulation.)i(*/)390 3786 y(int)e(com_list)h(PARAMS\(\(char)h(*\)\);)390 3873 y(int)e(com_view)h(PARAMS\(\(char)h(*\)\);)390 3960 y(int)e(com_rename) h(PARAMS\(\(char)h(*\)\);)390 4047 y(int)e(com_stat)h(PARAMS\(\(char)h (*\)\);)390 4134 y(int)e(com_pwd)h(PARAMS\(\(char)h(*\)\);)390 4222 y(int)e(com_delete)h(PARAMS\(\(char)h(*\)\);)390 4309 y(int)e(com_help)h(PARAMS\(\(char)h(*\)\);)390 4396 y(int)e(com_cd)g(PARAMS\(\(char)i(*\)\);)390 4483 y(int)e(com_quit)h (PARAMS\(\(char)h(*\)\);)390 4658 y(/*)e(A)f(structure)i(which)g (contains)g(information)h(on)d(the)h(commands)h(this)f(program)508 4745 y(can)g(understand.)h(*/)390 4919 y(typedef)g(struct)f({)468 5006 y(char)h(*name;)f(/*)g(User)g(printable)h(name)f(of)g(the)g (function.)h(*/)468 5093 y(rl_icpfunc_t)h(*func;)f(/*)f(Function)h(to)e (call)i(to)e(do)h(the)g(job.)g(*/)468 5181 y(char)h(*doc;)f(/*)g (Documentation)i(for)e(this)g(function.)80 b(*/)390 5268 y(})39 b(COMMAND;)p eop end %%Page: 54 58 TeXDict begin 54 57 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(54)390 386 y Fe(COMMAND)41 b(commands[])g(=)f({)468 473 y({)g("cd",)g(com_cd,) h("Change)g(to)f(directory)h(DIR")f(},)468 560 y({)g("delete",)h (com_delete,)h("Delete)f(FILE")f(},)468 648 y({)g("help",)h(com_help,)g ("Display)g(this)f(text")h(},)468 735 y({)f("?",)g(com_help,)h ("Synonym)g(for)f(`help'")h(},)468 822 y({)f("list",)h(com_list,)g ("List)f(files)h(in)e(DIR")i(},)468 909 y({)f("ls",)g(com_list,)i ("Synonym)f(for)f(`list'")g(},)468 996 y({)g("pwd",)g(com_pwd,)i ("Print)e(the)g(current)h(working)g(directory")g(},)468 1083 y({)f("quit",)h(com_quit,)g("Quit)f(using)h(Fileman")g(},)468 1171 y({)f("rename",)h(com_rename,)h("Rename)f(FILE)f(to)g(NEWNAME")h (},)468 1258 y({)f("stat",)h(com_stat,)g("Print)g(out)f(statistics)h (on)f(FILE")g(},)468 1345 y({)g("view",)h(com_view,)g("View)f(the)g (contents)h(of)f(FILE")g(},)468 1432 y({)g(\(char)g(*\)NULL,)h (\(rl_icpfunc_t)h(*\)NULL,)f(\(char)f(*\)NULL)h(})390 1519 y(};)390 1694 y(/*)f(Forward)g(declarations.)j(*/)390 1781 y(char)d(*stripwhite)i(\(\);)390 1868 y(COMMAND)f(*find_command)h (\(\);)390 2042 y(/*)e(The)g(name)g(of)f(this)i(program,)g(as)e(taken)i (from)f(argv[0].)h(*/)390 2130 y(char)f(*progname;)390 2304 y(/*)g(When)g(non-zero,)h(this)f(global)h(means)f(the)g(user)g(is) g(done)g(using)g(this)h(program.)g(*/)390 2391 y(int)f(done;)390 2565 y(char)g(*)390 2653 y(dupstr)h(\(s\))586 2740 y(char)f(*s;)390 2827 y({)468 2914 y(char)h(*r;)468 3088 y(r)f(=)f(xmalloc)i(\(strlen)g (\(s\))f(+)f(1\);)468 3176 y(strcpy)i(\(r,)f(s\);)468 3263 y(return)h(\(r\);)390 3350 y(})390 3524 y(main)f(\(argc,)h(argv\)) 586 3611 y(int)f(argc;)586 3699 y(char)g(**argv;)390 3786 y({)468 3873 y(char)h(*line,)f(*s;)468 4047 y(progname)h(=)f (argv[0];)468 4222 y(initialize_readline)k(\(\);)c(/*)g(Bind)g(our)g (completer.)h(*/)468 4396 y(/*)f(Loop)g(reading)h(and)f(executing)h (lines)g(until)f(the)g(user)g(quits.)h(*/)468 4483 y(for)f(\()g(;)f (done)h(==)g(0;)g(\))547 4570 y({)625 4658 y(line)g(=)g(readline)h (\("FileMan:)h("\);)625 4832 y(if)e(\(!line\))704 4919 y(break;)625 5093 y(/*)g(Remove)h(leading)f(and)g(trailing)h (whitespace)h(from)e(the)g(line.)743 5181 y(Then,)g(if)g(there)g(is)g (anything)h(left,)g(add)e(it)h(to)g(the)g(history)h(list)743 5268 y(and)f(execute)h(it.)f(*/)p eop end %%Page: 55 59 TeXDict begin 55 58 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(55)625 299 y Fe(s)40 b(=)f(stripwhite)j(\(line\);)625 473 y(if)e(\(*s\))704 560 y({)782 648 y(add_history)i(\(s\);)782 735 y(execute_line)g(\(s\);) 704 822 y(})625 996 y(free)e(\(line\);)547 1083 y(})468 1171 y(exit)h(\(0\);)390 1258 y(})390 1432 y(/*)f(Execute)g(a)g (command)h(line.)f(*/)390 1519 y(int)390 1606 y(execute_line)i (\(line\))586 1694 y(char)e(*line;)390 1781 y({)468 1868 y(register)h(int)f(i;)468 1955 y(COMMAND)h(*command;)468 2042 y(char)g(*word;)468 2217 y(/*)f(Isolate)h(the)f(command)h(word.)f (*/)468 2304 y(i)g(=)f(0;)468 2391 y(while)i(\(line[i])g(&&)f (whitespace)h(\(line[i]\)\))547 2478 y(i++;)468 2565 y(word)g(=)e(line)h(+)g(i;)468 2740 y(while)h(\(line[i])g(&&)f (!whitespace)h(\(line[i]\)\))547 2827 y(i++;)468 3001 y(if)f(\(line[i]\))547 3088 y(line[i++])h(=)f('\\0';)468 3263 y(command)h(=)f(find_command)i(\(word\);)468 3437 y(if)e(\(!command\))547 3524 y({)625 3611 y(fprintf)h(\(stderr,)g ("\045s:)f(No)g(such)g(command)h(for)f(FileMan.\\n",)i(word\);)625 3699 y(return)f(\(-1\);)547 3786 y(})468 3960 y(/*)f(Get)g(argument)h (to)f(command,)h(if)f(any.)g(*/)468 4047 y(while)h(\(whitespace)h (\(line[i]\)\))547 4134 y(i++;)468 4309 y(word)f(=)e(line)h(+)g(i;)468 4483 y(/*)g(Call)g(the)g(function.)h(*/)468 4570 y(return)g (\(\(*\(command->func\)\))j(\(word\)\);)390 4658 y(})390 4832 y(/*)c(Look)g(up)f(NAME)i(as)e(the)h(name)g(of)g(a)g(command,)h (and)e(return)i(a)f(pointer)g(to)g(that)508 4919 y(command.)80 b(Return)41 b(a)e(NULL)h(pointer)h(if)f(NAME)g(isn't)g(a)g(command)g (name.)h(*/)390 5006 y(COMMAND)g(*)390 5093 y(find_command)h(\(name\)) 586 5181 y(char)e(*name;)390 5268 y({)p eop end %%Page: 56 60 TeXDict begin 56 59 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(56)468 299 y Fe(register)41 b(int)f(i;)468 473 y(for)g(\(i)g(=)f(0;)h (commands[i].name;)j(i++\))547 560 y(if)d(\(strcmp)g(\(name,)h (commands[i].name\))i(==)d(0\))625 648 y(return)h(\(&commands[i]\);)468 822 y(return)g(\(\(COMMAND)g(*\)NULL\);)390 909 y(})390 1083 y(/*)f(Strip)g(whitespace)i(from)e(the)g(start)g(and)g(end)g(of)f (STRING.)81 b(Return)40 b(a)g(pointer)508 1171 y(into)g(STRING.)h(*/) 390 1258 y(char)f(*)390 1345 y(stripwhite)h(\(string\))586 1432 y(char)f(*string;)390 1519 y({)468 1606 y(register)h(char)g(*s,)f (*t;)468 1781 y(for)g(\(s)g(=)f(string;)i(whitespace)h(\(*s\);)e(s++\)) 547 1868 y(;)468 2042 y(if)g(\(*s)g(==)g(0\))547 2130 y(return)g(\(s\);)468 2304 y(t)g(=)f(s)h(+)f(strlen)i(\(s\))f(-)f(1;) 468 2391 y(while)i(\(t)e(>)h(s)f(&&)h(whitespace)i(\(*t\)\))547 2478 y(t--;)468 2565 y(*++t)f(=)e('\\0';)468 2740 y(return)i(s;)390 2827 y(})390 3001 y(/*)f(******************************)q(*****)q(****) q(*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 3088 y(/*)2589 b(*/)390 3176 y(/*)707 b(Interface)41 b(to)f(Readline)h(Completion)629 b(*/)390 3263 y(/*)2589 b(*/)390 3350 y(/*)40 b(******************************)q(*****)q(****)q (*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 3524 y(char)40 b(*command_generator)j(PARAMS\(\(const)g(char)d(*,)f (int\)\);)390 3611 y(char)h(**fileman_completion)k(PARAMS\(\(const)e (char)e(*,)g(int,)g(int\)\);)390 3786 y(/*)g(Tell)g(the)g(GNU)g (Readline)h(library)g(how)e(to)h(complete.)81 b(We)39 b(want)h(to)g(try)g(to)g(complete)508 3873 y(on)f(command)i(names)g(if) e(this)h(is)g(the)g(first)g(word)g(in)g(the)g(line,)g(or)g(on)g (filenames)508 3960 y(if)f(not.)h(*/)390 4047 y(initialize_readline)k (\(\))390 4134 y({)468 4222 y(/*)c(Allow)g(conditional)i(parsing)f(of)f (the)g(~/.inputrc)h(file.)g(*/)468 4309 y(rl_readline_name)i(=)d ("FileMan";)468 4483 y(/*)g(Tell)g(the)g(completer)h(that)g(we)e(want)h (a)g(crack)g(first.)h(*/)468 4570 y(rl_attempted_completion_fun)q(ctio) q(n)k(=)39 b(fileman_completion;)390 4658 y(})390 4832 y(/*)h(Attempt)g(to)g(complete)h(on)f(the)g(contents)h(of)f(TEXT.)79 b(START)41 b(and)e(END)h(bound)h(the)508 4919 y(region)f(of)g (rl_line_buffer)i(that)f(contains)g(the)e(word)i(to)e(complete.)81 b(TEXT)40 b(is)508 5006 y(the)g(word)g(to)f(complete.)81 b(We)40 b(can)g(use)f(the)h(entire)h(contents)g(of)f(rl_line_buffer)508 5093 y(in)f(case)h(we)g(want)g(to)g(do)g(some)g(simple)g(parsing.)81 b(Return)40 b(the)g(array)h(of)e(matches,)508 5181 y(or)g(NULL)h(if)g (there)h(aren't)f(any.)g(*/)390 5268 y(char)g(**)p eop end %%Page: 57 61 TeXDict begin 57 60 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(57)390 299 y Fe(fileman_completion)43 b(\(text,)e(start,)g(end\))586 386 y(const)f(char)h(*text;)586 473 y(int)f(start,)h(end;)390 560 y({)468 648 y(char)g(**matches;)468 822 y(matches)g(=)f(\(char)g (**\)NULL;)468 996 y(/*)g(If)g(this)g(word)g(is)g(at)f(the)h(start)h (of)e(the)h(line,)h(then)f(it)g(is)f(a)h(command)586 1083 y(to)g(complete.)80 b(Otherwise)42 b(it)d(is)h(the)g(name)g(of)g (a)f(file)h(in)g(the)g(current)586 1171 y(directory.)i(*/)468 1258 y(if)e(\(start)h(==)e(0\))547 1345 y(matches)i(=)e (rl_completion_matches)44 b(\(text,)d(command_generator\);)468 1519 y(return)g(\(matches\);)390 1606 y(})390 1781 y(/*)f(Generator)h (function)g(for)f(command)h(completion.)81 b(STATE)40 b(lets)g(us)g(know)g(whether)508 1868 y(to)f(start)i(from)f(scratch;)h (without)g(any)f(state)g(\(i.e.)g(STATE)h(==)e(0\),)h(then)g(we)508 1955 y(start)g(at)g(the)g(top)g(of)f(the)h(list.)h(*/)390 2042 y(char)f(*)390 2130 y(command_generator)j(\(text,)e(state\))586 2217 y(const)f(char)h(*text;)586 2304 y(int)f(state;)390 2391 y({)468 2478 y(static)h(int)f(list_index,)i(len;)468 2565 y(char)f(*name;)468 2740 y(/*)f(If)g(this)g(is)g(a)f(new)h(word)g (to)g(complete,)h(initialize)h(now.)79 b(This)40 b(includes)586 2827 y(saving)h(the)f(length)g(of)g(TEXT)g(for)g(efficiency,)i(and)e (initializing)i(the)d(index)586 2914 y(variable)i(to)f(0.)g(*/)468 3001 y(if)g(\(!state\))547 3088 y({)625 3176 y(list_index)i(=)d(0;)625 3263 y(len)h(=)g(strlen)g(\(text\);)547 3350 y(})468 3524 y(/*)g(Return)h(the)f(next)g(name)g(which)g(partially)i(matches)e (from)h(the)e(command)i(list.)g(*/)468 3611 y(while)g(\(name)f(=)g (commands[list_index].name\))547 3699 y({)625 3786 y(list_index++;)625 3960 y(if)g(\(strncmp)h(\(name,)g(text,)f(len\))g(==)g(0\))704 4047 y(return)g(\(dupstr\(name\)\);)547 4134 y(})468 4309 y(/*)g(If)g(no)f(names)i(matched,)g(then)f(return)h(NULL.)f(*/)468 4396 y(return)h(\(\(char)g(*\)NULL\);)390 4483 y(})390 4658 y(/*)f(******************************)q(*****)q(****)q(*****)q (****)q(****)q(*****)q(****)q(***)45 b(*/)390 4745 y(/*)2589 b(*/)390 4832 y(/*)903 b(FileMan)41 b(Commands)1060 b(*/)390 4919 y(/*)2589 b(*/)390 5006 y(/*)40 b(******************************)q (*****)q(****)q(*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 5181 y(/*)40 b(String)g(to)g(pass)g(to)g(system)g(\(\).)80 b(This)40 b(is)f(for)h(the)g(LIST,)h(VIEW)f(and)g(RENAME)508 5268 y(commands.)h(*/)p eop end %%Page: 58 62 TeXDict begin 58 61 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(58)390 299 y Fe(static)41 b(char)f(syscom[1024];)390 473 y(/*)g(List)g(the)g (file\(s\))h(named)f(in)g(arg.)g(*/)390 560 y(com_list)h(\(arg\))586 648 y(char)f(*arg;)390 735 y({)468 822 y(if)g(\(!arg\))547 909 y(arg)g(=)f("";)468 1083 y(sprintf)i(\(syscom,)g("ls)f(-FClg)h (\045s",)f(arg\);)468 1171 y(return)h(\(system)g(\(syscom\)\);)390 1258 y(})390 1432 y(com_view)g(\(arg\))586 1519 y(char)f(*arg;)390 1606 y({)468 1694 y(if)g(\(!valid_argument)j(\("view",)e(arg\)\))547 1781 y(return)f(1;)390 1955 y(#if)g(defined)h(\(__MSDOS__\))468 2042 y(/*)f(more.com)h(doesn't)g(grok)f(slashes)h(in)f(pathnames)h(*/) 468 2130 y(sprintf)g(\(syscom,)g("less)g(\045s",)f(arg\);)390 2217 y(#else)468 2304 y(sprintf)h(\(syscom,)g("more)g(\045s",)f(arg\);) 390 2391 y(#endif)468 2478 y(return)h(\(system)g(\(syscom\)\);)390 2565 y(})390 2740 y(com_rename)g(\(arg\))586 2827 y(char)f(*arg;)390 2914 y({)468 3001 y(too_dangerous)j(\("rename"\);)468 3088 y(return)e(\(1\);)390 3176 y(})390 3350 y(com_stat)g(\(arg\))586 3437 y(char)f(*arg;)390 3524 y({)468 3611 y(struct)h(stat)f(finfo;)468 3786 y(if)g(\(!valid_argument)j(\("stat",)e(arg\)\))547 3873 y(return)f(\(1\);)468 4047 y(if)g(\(stat)g(\(arg,)h(&finfo\))g(==) e(-1\))547 4134 y({)625 4222 y(perror)i(\(arg\);)625 4309 y(return)g(\(1\);)547 4396 y(})468 4570 y(printf)g(\("Statistics)h (for)e(`\045s':\\n",)h(arg\);)468 4745 y(printf)g(\("\045s)f(has)g (\045d)g(link\045s,)h(and)f(is)f(\045d)h(byte\045s)g(in)g(length.\\n",) 468 4832 y(arg,)782 4919 y(finfo.st_nlink,)782 5006 y(\(finfo.st_nlink) j(==)d(1\))f(?)h("")f(:)h("s",)782 5093 y(finfo.st_size,)782 5181 y(\(finfo.st_size)j(==)c(1\))h(?)g("")f(:)h("s"\);)468 5268 y(printf)h(\("Inode)g(Last)f(Change)h(at:)f(\045s",)g(ctime)g (\(&finfo.st_ctime\)\);)p eop end %%Page: 59 63 TeXDict begin 59 62 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(59)468 299 y Fe(printf)41 b(\(")236 b(Last)40 b(access)h(at:)f(\045s",)g (ctime)g(\(&finfo.st_atime\)\);)468 386 y(printf)h(\(")157 b(Last)41 b(modified)g(at:)f(\045s",)g(ctime)g(\(&finfo.st_mtime\)\);) 468 473 y(return)h(\(0\);)390 560 y(})390 735 y(com_delete)g(\(arg\)) 586 822 y(char)f(*arg;)390 909 y({)468 996 y(too_dangerous)j (\("delete"\);)468 1083 y(return)e(\(1\);)390 1171 y(})390 1345 y(/*)f(Print)g(out)g(help)g(for)g(ARG,)g(or)g(for)g(all)g(of)f (the)h(commands)h(if)f(ARG)g(is)508 1432 y(not)g(present.)h(*/)390 1519 y(com_help)g(\(arg\))586 1606 y(char)f(*arg;)390 1694 y({)468 1781 y(register)h(int)f(i;)468 1868 y(int)g(printed)h(=)f (0;)468 2042 y(for)g(\(i)g(=)f(0;)h(commands[i].name;)j(i++\))547 2130 y({)625 2217 y(if)d(\(!*arg)h(||)e(\(strcmp)i(\(arg,)g (commands[i].name\))i(==)c(0\)\))704 2304 y({)782 2391 y(printf)i(\("\045s\\t\\t\045s.\\n",)i(commands[i].name,)g (commands[i].doc\);)782 2478 y(printed++;)704 2565 y(})547 2653 y(})468 2827 y(if)d(\(!printed\))547 2914 y({)625 3001 y(printf)h(\("No)f(commands)h(match)g(`\045s'.)79 b(Possibilties)42 b(are:\\n",)f(arg\);)625 3176 y(for)f(\(i)g(=)f(0;)h (commands[i].name;)j(i++\))704 3263 y({)782 3350 y(/*)d(Print)g(in)g (six)g(columns.)h(*/)782 3437 y(if)f(\(printed)h(==)f(6\))861 3524 y({)939 3611 y(printed)h(=)e(0;)939 3699 y(printf)i(\("\\n"\);)861 3786 y(})782 3960 y(printf)g(\("\045s\\t",)g(commands[i].name\);)782 4047 y(printed++;)704 4134 y(})625 4309 y(if)f(\(printed\))704 4396 y(printf)g(\("\\n"\);)547 4483 y(})468 4570 y(return)h(\(0\);)390 4658 y(})390 4832 y(/*)f(Change)g(to)g(the)g(directory)h(ARG.)f(*/)390 4919 y(com_cd)h(\(arg\))586 5006 y(char)f(*arg;)390 5093 y({)468 5181 y(if)g(\(chdir)h(\(arg\))f(==)g(-1\))547 5268 y({)p eop end %%Page: 60 64 TeXDict begin 60 63 bop 150 -116 a Fs(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(60)625 299 y Fe(perror)41 b(\(arg\);)625 386 y(return)g(1;)547 473 y(})468 648 y(com_pwd)g(\(""\);)468 735 y(return)g(\(0\);)390 822 y(})390 996 y(/*)f(Print)g(out)g(the)g(current)h(working)g (directory.)g(*/)390 1083 y(com_pwd)g(\(ignore\))586 1171 y(char)f(*ignore;)390 1258 y({)468 1345 y(char)h(dir[1024],)g(*s;) 468 1519 y(s)f(=)f(getcwd)i(\(dir,)f(sizeof\(dir\))i(-)e(1\);)468 1606 y(if)g(\(s)g(==)f(0\))547 1694 y({)625 1781 y(printf)i(\("Error)g (getting)g(pwd:)f(\045s\\n",)g(dir\);)625 1868 y(return)h(1;)547 1955 y(})468 2130 y(printf)g(\("Current)g(directory)h(is)d(\045s\\n",)i (dir\);)468 2217 y(return)g(0;)390 2304 y(})390 2478 y(/*)f(The)g(user)g(wishes)g(to)g(quit)g(using)h(this)f(program.)80 b(Just)40 b(set)g(DONE)g(non-zero.)h(*/)390 2565 y(com_quit)g(\(arg\)) 586 2653 y(char)f(*arg;)390 2740 y({)468 2827 y(done)h(=)e(1;)468 2914 y(return)i(\(0\);)390 3001 y(})390 3176 y(/*)f(Function)h(which)f (tells)g(you)g(that)h(you)e(can't)i(do)e(this.)i(*/)390 3263 y(too_dangerous)h(\(caller\))586 3350 y(char)e(*caller;)390 3437 y({)468 3524 y(fprintf)h(\(stderr,)821 3611 y("\045s:)g(Too)f (dangerous)h(for)f(me)f(to)h(distribute.)81 b(Write)40 b(it)g(yourself.\\n",)821 3699 y(caller\);)390 3786 y(})390 3960 y(/*)g(Return)g(non-zero)h(if)f(ARG)g(is)g(a)f(valid)h(argument)h (for)f(CALLER,)h(else)f(print)508 4047 y(an)f(error)i(message)g(and)e (return)i(zero.)f(*/)390 4134 y(int)390 4222 y(valid_argument)i (\(caller,)f(arg\))586 4309 y(char)f(*caller,)h(*arg;)390 4396 y({)468 4483 y(if)f(\(!arg)g(||)g(!*arg\))547 4570 y({)625 4658 y(fprintf)h(\(stderr,)g("\045s:)f(Argument)h (required.\\n",)i(caller\);)625 4745 y(return)e(\(0\);)547 4832 y(})468 5006 y(return)g(\(1\);)390 5093 y(})p eop end %%Page: 61 65 TeXDict begin 61 64 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(61)150 299 y Fo(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fs(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fp(\015)e Fs(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 y Fr(http://fsf.org/)390 964 y Fs(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fi(free)36 b Fs(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 62 66 TeXDict begin 62 65 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(62)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m (ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g (the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fl(asci)r(i)g Fs(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j Fd(SGML)f Fs(or)f Fd(XML)g Fs(using)g(a)g(publicly)330 2504 y(a)m(v)-5 b(ailable)42 b Fd(DTD)p Fs(,)h(and)c (standard-conforming)g(simple)h Fd(HTML)p Fs(,)i(P)m(ostScript)e(or)f Fd(PDF)h Fs(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Fd(PNG)p Fs(,)i Fd(X)n(CF)330 2724 y Fs(and)e Fd(JPG)p Fs(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Fd(SGML)54 b Fs(or)f Fd(XML)h Fs(for)g(whic)m(h)f(the)h Fd(DTD)g Fs(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Fd(HTML)p Fs(,)330 3052 y(P)m(ostScript)31 b(or)f Fd(PDF)h Fs(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 63 67 TeXDict begin 63 66 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(63)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j (and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e (License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e (in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h (other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f (License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h (the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 64 68 TeXDict begin 64 67 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(64)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 65 69 TeXDict begin 65 68 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(65)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g (section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g (nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s (di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m (ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e (as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i (the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s (di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f (F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m (k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g (same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m (y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m (y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g (not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 66 70 TeXDict begin 66 69 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(66)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h (on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g (is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i (resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g (the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e (b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 67 71 TeXDict begin 67 70 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(67)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f (in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 762 y(See)c Fr(http://www.gnu.org/copy)o(left)o(/)p Fs(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g (distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g (particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h (\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i (the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 68 72 TeXDict begin 68 71 bop 150 -116 a Fs(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(68)150 299 y Fq(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fs(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fe(Copyright)42 b(\(C\))79 b Fc(year)g(your)40 b(name)p Fe(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f (license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y Fs(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fe(,)h(with)547 1646 y(the)f(Front-Cover)i (Texts)e(being)g Fc(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h (Texts)547 1733 y(being)f Fc(list)p Fe(.)275 1868 y Fs(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f (Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g (of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g (alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g (examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m (hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end %%Page: 69 73 TeXDict begin 69 72 bop 150 -116 a Fs(Concept)31 b(Index)2927 b(69)150 299 y Fo(Concept)52 b(Index)150 638 y Fq(A)150 754 y Fb(application-sp)r(eci\014c)27 b(completion)f(functions)17 b Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)43 b Fb(46)150 1005 y Fq(C)150 1121 y Fb(command)26 b(editing)17 b Fa(:)d(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)44 b Fb(1)150 1372 y Fq(E)150 1488 y Fb(editing)26 b(command)g(lines)15 b Fa(:)f(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)42 b Fb(1)150 1738 y Fq(I)150 1855 y Fb(initialization)28 b(\014le,)e(readline)15 b Fa(:)f(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(4)150 1942 y(in)n(teraction,)27 b(readline)c Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)49 b Fb(1)150 2193 y Fq(K)150 2309 y Fb(kill)26 b(ring)d Fa(:)13 b(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)50 b Fb(2)2025 638 y(killing)26 b(text)21 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(2)2025 925 y Fq(N)2025 1056 y Fb(notation,)26 b(readline)11 b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)38 b Fb(1)2025 1343 y Fq(R)2025 1474 y Fb(readline,)26 b(function)12 b Fa(:)i(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(22)2025 1761 y Fq(V)2025 1891 y Fb(v)l(ariables,)27 b(readline)c Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)50 b Fb(4)2025 2178 y Fq(Y)2025 2309 y Fb(y)n(anking)25 b(text)11 b Fa(:)h(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)38 b Fb(2)p eop end %%Page: 70 74 TeXDict begin 70 73 bop 150 -116 a Fs(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)2370 b(70)150 299 y Fo(F)-13 b(unction)52 b(and)h(V)-13 b(ariable)53 b(Index)p 159 610 41 6 v 150 726 a Fe(_rl_digit_p)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(39)150 814 y Fe(_rl_digit_value)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(39)150 901 y Fe(_rl_lowercase_p)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(39)150 988 y Fe(_rl_to_lower)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(39)150 1076 y Fe(_rl_to_upper)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)45 b Fb(39)150 1163 y Fe(_rl_uppercase_p)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(38)150 1415 y Fq(A)150 1531 y Fe(abort)27 b(\(C-g\))11 b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)37 b Fb(19)150 1618 y Fe(accept-line)28 b(\(Newline)g(or)e(Return\)) 8 b Fa(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 b Fb(14)150 1871 y Fq(B)150 1987 y Fe(backward-char)29 b(\(C-b\))8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(14)150 2074 y Fe(backward-delete-char)c(\(Rubout\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(16)150 2161 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))18 b Fa(:)d(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(17)150 2249 y Fe(backward-kill-word)30 b(\(M-DEL\))7 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)33 b Fb(17)150 2336 y Fe(backward-word)c(\(M-b\))8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(14)150 2423 y Fe(beginning-of-history)c(\(M-<\))7 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(15)150 2511 y Fe(beginning-of-line)c(\(C-a\))15 b Fa(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)41 b Fb(14)150 2598 y(b)r(ell-st)n(yle)21 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)47 b Fb(4)150 2685 y(bind-tt)n(y-sp)r(ecial-c)n (hars)15 b Fa(:)d(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 b Fb(5)150 2935 y Fq(C)150 3051 y Fe(call-last-kbd-macro)30 b(\(C-x)c(e\))11 b Fa(:)j(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)38 b Fb(19)150 3139 y Fe(capitalize-word)29 b(\(M-c\))21 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(17)150 3226 y Fe(character-search)29 b(\(C-]\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(20)150 3313 y Fe(character-search-backward)31 b(\(M-C-]\))6 b Fa(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(20)150 3401 y Fe(clear-screen)28 b(\(C-l\))10 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)37 b Fb(14)150 3488 y(colored-stats)11 b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)37 b Fb(5)150 3575 y(commen)n(t-b)r(egin)17 b Fa(:)d(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)44 b Fb(5)150 3662 y Fe(complete)27 b(\(TAB\))22 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(18)150 3750 y(completion-displa)n (y-width)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)48 b Fb(5)150 3837 y(completion-ignore-case)13 b Fa(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) 40 b Fb(5)150 3924 y(completion-map-case)9 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)36 b Fb(5)150 4012 y(completion-pre\014x-displa)n(y-length)8 b Fa(:)k(:)h(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(5)150 4099 y(completion-query-items)17 b Fa(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)44 b Fb(5)150 4186 y(con)n(v)n(ert-meta)20 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)47 b Fb(5)150 4273 y Fe(copy-backward-word)30 b(\(\))20 b Fa(:)13 b(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) 46 b Fb(18)150 4361 y Fe(copy-forward-word)29 b(\(\))23 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(18)150 4448 y Fe(copy-region-as-kill)30 b(\(\))17 b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(18)150 4700 y Fq(D)150 4816 y Fe(delete-char)28 b(\(C-d\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(16)150 4904 y Fe(delete-char-or-list)30 b(\(\))17 b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)44 b Fb(19)150 4991 y Fe(delete-horizontal-space)31 b(\(\))7 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)33 b Fb(18)150 5078 y Fe(digit-argument)c(\()p Fc(M-0)p Fe(,)e Fc(M-1)p Fe(,)f(...)g Fc(M--)p Fe(\))7 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(18)150 5166 y(disable-completion)13 b Fa(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)40 b Fb(6)150 5253 y Fe(do-uppercase-version)30 b(\(M-a,)d(M-b,)f(M-)p Fc(x)p Fe(,)h(...)q(\))310 5340 y Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(20)2025 610 y Fe(downcase-word)28 b(\(M-l\))8 b Fa(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)34 b Fb(17)2025 698 y Fe(dump-functions)29 b(\(\))13 b Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(20)2025 786 y Fe(dump-macros)28 b(\(\))21 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(21)2025 874 y Fe(dump-variables)29 b(\(\))13 b Fa(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(21)2025 1130 y Fq(E)2025 1247 y Fb(editing-mo)r(de)21 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)48 b Fb(6)2025 1335 y Fe(emacs-editing-mode)29 b(\(C-e\))12 b Fa(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)39 b Fb(21)2025 1423 y(enable-k)n(eypad)17 b Fa(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(6)2025 1511 y Fe(end-kbd-macro)28 b(\(C-x)f(\)\))10 b Fa(:)j(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(19)2025 1599 y Fc(end-of-file)28 b Fe(\(usually)f(C-d\))16 b Fa(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)43 b Fb(16)2025 1687 y Fe(end-of-history)29 b(\(M->\))23 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(15)2025 1775 y Fe(end-of-line)28 b(\(C-e\))13 b Fa(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(14)2025 1863 y Fe(exchange-point-and-mark)31 b(\(C-x)26 b(C-x\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(20)2025 1951 y(expand-tilde)14 b Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)41 b Fb(6)2025 2205 y Fq(F)2025 2322 y Fe(forward-backward-delete-char)32 b(\(\))11 b Fa(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fb(16)2025 2410 y Fe(forward-char)28 b(\(C-f\))10 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(14)2025 2498 y Fe(forward-search-history)30 b(\(C-s\))21 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(15)2025 2586 y Fe(forward-word)28 b(\(M-f\))10 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(14)2025 2831 y Fq(H)2025 2949 y Fb(history-preserv)n(e-p)r(oin)n(t)9 b Fa(:)j(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)36 b Fb(6)2025 3037 y Fe(history-search-backward)31 b(\(\))7 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(15)2025 3125 y Fe(history-search-forward)c(\(\))10 b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)36 b Fb(15)2025 3213 y(history-size)16 b Fa(:)d(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)43 b Fb(6)2025 3301 y Fe(history-substr-search-backward)32 b(\(\))6 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)33 b Fb(15)2025 3389 y Fe(history-substr-search-forward)f(\(\))9 b Fa(:)k(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)35 b Fb(15)2025 3477 y(horizon)n(tal-scroll-mo)r(de)23 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)48 b Fb(6)2025 3713 y Fq(I)2025 3831 y Fb(input-meta)19 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)47 b Fb(7)2025 3919 y Fe(insert-comment)29 b(\(M-#\))23 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(20)2025 4007 y Fe(insert-completions)29 b(\(M-*\))12 b Fa(:)j(:)e(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 b Fb(19)2025 4095 y(isearc)n(h-terminators)21 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(7)2025 4332 y Fq(K)2025 4449 y Fb(k)n(eymap)8 b Fa(:)k(:)h(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(7)2025 4537 y Fe(kill-line)27 b(\(C-k\))18 b Fa(:)d(:)e(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(17)2025 4625 y Fe(kill-region)28 b(\(\))21 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)47 b Fb(18)2025 4713 y Fe(kill-whole-line)29 b(\(\))10 b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(17)2025 4801 y Fe(kill-word)27 b(\(M-d\))18 b Fa(:)d(:)e(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(17)2025 5046 y Fq(M)2025 5164 y Fb(mark-mo)r(di\014ed-lines)11 b Fa(:)i(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fb(7)2025 5252 y(mark-symlink)n (ed-directories)8 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(7)2025 5340 y(matc)n(h-hidden-\014les)18 b Fa(:)12 b(:)h(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)45 b Fb(7)p eop end %%Page: 71 75 TeXDict begin 71 74 bop 150 -116 a Fs(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)2370 b(71)150 299 y Fe(menu-complete)29 b(\(\))16 b Fa(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)42 b Fb(19)150 386 y Fe(menu-complete-backward)31 b(\(\))10 b Fa(:)j(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)36 b Fb(19)150 473 y(men)n(u-complete-displa)n (y-pre\014x)19 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)48 b Fb(8)150 561 y(meta-\015ag)15 b Fa(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)42 b Fb(7)150 811 y Fq(N)150 927 y Fe(next-history)28 b(\(C-n\))10 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)37 b Fb(15)150 1014 y Fe(non-incremental-forward-searc)q(h-hi)q (story)32 b(\(M-n\))310 1102 y Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(15)150 1189 y Fe(non-incremental-reverse-searc)q(h-hi)q(story)f (\(M-p\))310 1276 y Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fb(15)150 1510 y Fq(O)150 1626 y Fb(output-meta)13 b Fa(:)f(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)40 b Fb(8)150 1713 y Fe(overwrite-mode)29 b(\(\))13 b Fa(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(17)150 1955 y Fq(P)150 2071 y Fb(page-completions)21 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)46 b Fb(8)150 2158 y Fe(possible-completions)30 b(\(M-?\))7 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)33 b Fb(19)150 2246 y Fe(prefix-meta)28 b(\(ESC\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(20)150 2333 y Fe(previous-history)29 b(\(C-p\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(14)150 2420 y Fe(print-last-kbd-macro)30 b(\(\))15 b Fa(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)41 b Fb(19)150 2673 y Fq(Q)150 2789 y Fe(quoted-insert)29 b(\(C-q)d(or)g(C-v\))c Fa(:)13 b(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(16)150 3041 y Fq(R)150 3157 y Fe(re-read-init-file)29 b(\(C-x)e(C-r\))11 b Fa(:)j(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)38 b Fb(19)150 3245 y Fe(readline)12 b Fa(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)38 b Fb(22)150 3332 y Fe(redraw-current-line)30 b(\(\))17 b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(14)150 3419 y Fe(reverse-search-history)31 b(\(C-r\))20 b Fa(:)13 b(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)45 b Fb(15)150 3506 y(rev)n(ert-all-at-newline)22 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)48 b Fb(8)150 3594 y Fe(revert-line)28 b(\(M-r\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(20)150 3681 y Fe(rl_add_defun)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(30)150 3768 y Fe(rl_add_funmap_entry)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(34)150 3856 y Fe(rl_add_undo)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)48 b Fb(34)150 3943 y Fe(rl_alphabetic)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(38)150 4030 y Fe(rl_already_prompted)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)44 b Fb(26)150 4118 y Fe (rl_attempted_completion_funct)q(ion)25 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)45 b Fb(48)150 4205 y Fe(rl_attempted_completion_over)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(52)150 4292 y Fe(rl_basic_quote_characters)26 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)46 b Fb(50)150 4380 y Fe(rl_basic_word_break_character)q(s)7 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(50)150 4467 y Fe(rl_begin_undo_group)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)44 b Fb(34)150 4554 y Fe(rl_bind_key)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) 48 b Fb(31)150 4641 y Fe(rl_bind_key_if_unbound)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(32)150 4729 y Fe (rl_bind_key_if_unbound_in_map)11 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(32)150 4816 y Fe(rl_bind_key_in_map) 25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(31)150 4903 y Fe(rl_bind_keyseq)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)40 b Fb(32)150 4991 y Fe(rl_bind_keyseq_if_unbound)26 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)46 b Fb(32)150 5078 y Fe(rl_bind_keyseq_if_unbound_in_)q(map)25 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(32)150 5165 y Fe(rl_bind_keyseq_in_map)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(32)150 5253 y Fe(rl_binding_keymap)6 b Fa(:)17 b(:)c(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)32 b Fb(28)150 5340 y Fe (rl_callback_handler_install)15 b Fa(:)k(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(40)2025 299 y Fe(rl_callback_handler_remove)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fb(40)2025 387 y Fe(rl_callback_read_char)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(40)2025 476 y Fe(rl_catch_signals)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)35 b Fb(44)2025 564 y Fe(rl_catch_sigwinch)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(44)2025 653 y Fe(rl_change_environment)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(44)2025 741 y Fe(rl_char_is_quoted_p)18 b Fa(:)f(:)c(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)45 b Fb(48)2025 830 y Fe(rl_cleanup_after_signal)8 b Fa(:)18 b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)34 b Fb(45)2025 918 y Fe(rl_clear_history)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(40)2025 1006 y Fe(rl_clear_message)9 b Fa(:)16 b(:)d(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(35)2025 1095 y Fe (rl_clear_pending_input)10 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)37 b Fb(37)2025 1183 y Fe(rl_clear_signals)9 b Fa(:)16 b(:)d(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(45)2025 1272 y Fe(rl_complete)11 b Fa(:)k(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)37 b Fb(46,)27 b(47)2025 1360 y Fe(rl_complete_internal)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(47)2025 1449 y Fe (rl_completer_quote_characters)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(50)2025 1537 y Fe (rl_completer_word_break_charac)q(ters)15 b Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)g(:)41 b Fb(50)2025 1625 y Fe (rl_completion_append_character)8 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(51)2025 1714 y Fe (rl_completion_display_matches_)q(hook)15 b Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)g(:)41 b Fb(50)2025 1802 y Fe (rl_completion_entry_function)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)45 b Fb(46,)27 b(48)2025 1891 y Fe (rl_completion_found_quote)e Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(51)2025 1979 y Fe(rl_completion_invoking_key)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fb(52)2025 2068 y Fe(rl_completion_mark_symlink_dir)q(s)27 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(51)2025 2156 y Fe(rl_completion_matches)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(47)2025 2245 y Fe(rl_completion_mode)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(47)2025 2333 y Fe(rl_completion_query_items)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(51)2025 2421 y Fe(rl_completion_quote_character)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(51)2025 2510 y Fe(rl_completion_suppress_append)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(51)2025 2598 y Fe(rl_completion_suppress_quote)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 b Fb(51)2025 2687 y Fe(rl_completion_type)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(52)2025 2775 y Fe(rl_completion_word_break_hook)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(50)2025 2864 y Fe(rl_copy_keymap)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(31)2025 2952 y Fe(rl_copy_text)21 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(36)2025 3041 y Fe(rl_crlf)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(35)2025 3129 y Fe(rl_delete_text)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(36)2025 3217 y Fe (rl_deprep_term_function)8 b Fa(:)18 b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(28)2025 3306 y Fe(rl_deprep_terminal)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(37)2025 3394 y Fe(rl_ding)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(38)2025 3483 y Fe(rl_directory_completion_hook)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)39 b Fb(49)2025 3571 y Fe(rl_directory_rewrite_hook;)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)44 b Fb(49)2025 3660 y Fe(rl_discard_keymap)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(31)2025 3748 y Fe(rl_dispatching)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)40 b Fb(25)2025 3836 y Fe(rl_display_match_list)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(38)2025 3925 y Fe(rl_display_prompt)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) 33 b Fb(26)2025 4013 y Fe(rl_do_undo)7 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(34)2025 4102 y Fe(rl_done)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(25)2025 4190 y Fe(rl_echo_signal_char)18 b Fa(:)f(:)c(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)45 b Fb(45)2025 4279 y Fe(rl_editing_mode)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 b Fb(30)2025 4367 y Fe(rl_end)17 b Fa(:)d(:)g(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(25)2025 4456 y Fe(rl_end_undo_group)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(34)2025 4544 y Fe(rl_erase_empty_line)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(25)2025 4632 y Fe(rl_event_hook)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(27)2025 4721 y Fe(rl_execute_next)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)38 b Fb(37)2025 4809 y Fe(rl_executing_key)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(28)2025 4898 y Fe(rl_executing_keymap)18 b Fa(:)f(:)c(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)45 b Fb(28)2025 4986 y Fe(rl_executing_keyseq)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(28)2025 5075 y Fe(rl_executing_macro)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(28)2025 5163 y Fe(rl_expand_prompt)9 b Fa(:)16 b(:)d(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(36)2025 5252 y Fe(rl_explicit_arg)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 b Fb(30)2025 5340 y Fe(rl_extend_line_buffer)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)40 b Fb(38)p eop end %%Page: 72 76 TeXDict begin 72 75 bop 150 -116 a Fs(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)2370 b(72)150 299 y Fe(rl_filename_completion_desire)q(d)7 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(52)150 387 y Fe(rl_filename_completion_functi)q(on)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(47)150 476 y Fe(rl_filename_dequoting_functio)q(n)7 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(48)150 564 y Fe(rl_filename_quote_characters)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(50)150 653 y Fe(rl_filename_quoting_desired)15 b Fa(:)k(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(52)150 741 y Fe(rl_filename_quoting_function)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(48)150 830 y Fe(rl_filename_rewrite_hook)28 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)49 b Fb(49)150 918 y Fe(rl_filename_stat_hook)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(49)150 1006 y Fe (rl_forced_update_display)28 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(35)150 1095 y Fe(rl_free)15 b Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 b Fb(38)150 1183 y Fe(rl_free_keymap)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)40 b Fb(31)150 1272 y Fe(rl_free_line_state)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(45)150 1360 y Fe(rl_free_undo_list)6 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)32 b Fb(34)150 1449 y Fe(rl_function_dumper)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(33)150 1537 y Fe(rl_function_of_keyseq)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(33)150 1625 y Fe(rl_funmap_names)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(33)150 1714 y Fe(rl_generic_bind)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(33)150 1802 y Fe(rl_get_keymap)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(31)150 1891 y Fe (rl_get_keymap_by_name)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(31)150 1979 y Fe(rl_get_keymap_name)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(31)150 2068 y Fe(rl_get_screen_size)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(45)150 2156 y Fe(rl_get_termcap)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(39)150 2245 y Fe(rl_getc)15 b Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)41 b Fb(37)150 2333 y Fe(rl_getc_function)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(27)150 2421 y Fe(rl_gnu_readline_p)6 b Fa(:)17 b(:)c(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)32 b Fb(26)150 2510 y Fe (rl_ignore_completion_duplicat)q(es)c Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)48 b Fb(51)150 2598 y Fe(rl_ignore_some_completions_fu)q (ncti)q(on)12 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)38 b Fb(49)150 2687 y Fe(rl_inhibit_completion)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)39 b Fb(52)150 2775 y Fe(rl_initialize)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(38)150 2864 y Fe(rl_input_available_hook)8 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)34 b Fb(27)150 2952 y Fe(rl_insert_completions)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(47)150 3041 y Fe(rl_insert_text)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)40 b Fb(36)150 3129 y Fe(rl_instream)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(26)150 3217 y Fe(rl_invoking_keyseqs)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)44 b Fb(33)150 3306 y Fe (rl_invoking_keyseqs_in_map)18 b Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(33)150 3394 y Fe(rl_key_sequence_length)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(28)150 3483 y Fe(rl_kill_text)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(36)150 3571 y Fe(rl_last_func)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)45 b Fb(27)150 3660 y Fe(rl_library_version)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(26)150 3748 y Fe(rl_line_buffer)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)40 b Fb(25)150 3836 y Fe(rl_list_funmap_names)16 b Fa(:)h(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)42 b Fb(33)150 3925 y Fe(rl_macro_bind)16 b Fa(:)g(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)43 b Fb(39)150 4013 y Fe(rl_macro_dumper)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(39)150 4102 y Fe (rl_make_bare_keymap)18 b Fa(:)g(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(30)150 4190 y Fe(rl_make_keymap)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(31)150 4279 y Fe(rl_mark)15 b Fa(:)f(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)41 b Fb(25)150 4367 y Fe(rl_message)7 b Fa(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)33 b Fb(35)150 4456 y Fe(rl_modifying)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(34)150 4544 y Fe(rl_named_function)6 b Fa(:)17 b(:)c(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)32 b Fb(33)150 4632 y Fe(rl_num_chars_to_read)16 b Fa(:)h(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)42 b Fb(25)150 4721 y Fe(rl_numeric_arg)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(30)150 4809 y Fe(rl_on_new_line)14 b Fa(:)i(:)d(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fb(35)150 4898 y Fe (rl_on_new_line_with_prompt)18 b Fa(:)g(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(35)150 4986 y Fe(rl_outstream)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)45 b Fb(26)150 5075 y Fe(rl_parse_and_bind)6 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(33)150 5163 y Fe(rl_pending_input)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)35 b Fb(25)150 5252 y Fe(rl_point)12 b Fa(:)j(:)e(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b Fb(25)150 5340 y Fe(rl_possible_completions)8 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)34 b Fb(47)2025 299 y Fe(rl_pre_input_hook)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(27)2025 387 y Fe(rl_prefer_env_winsize)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(26)2025 474 y Fe(rl_prep_term_function)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)40 b Fb(28)2025 562 y Fe(rl_prep_terminal)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(37)2025 650 y Fe(rl_prompt)9 b Fa(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(26)2025 738 y Fe(rl_push_macro_input)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)45 b Fb(36)2025 826 y Fe(rl_read_init_file)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(33)2025 913 y Fe(rl_read_key)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(36)2025 1001 y Fe(rl_readline_name)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(26)2025 1089 y Fe(rl_readline_state)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(28)2025 1177 y Fe(rl_readline_version)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(26)2025 1265 y Fe(rl_redisplay)21 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(35)2025 1352 y Fe(rl_redisplay_function)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(27)2025 1440 y Fe(rl_replace_line)11 b Fa(:)17 b(:)c(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)38 b Fb(38)2025 1528 y Fe (rl_reset_after_signal)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(45)2025 1616 y Fe(rl_reset_line_state)18 b Fa(:)f(:)c(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)45 b Fb(35)2025 1704 y Fe(rl_reset_screen_size)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(45)2025 1791 y Fe (rl_reset_terminal)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(37)2025 1879 y Fe(rl_resize_terminal)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(45)2025 1967 y Fe(rl_restore_prompt)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) 33 b Fb(36)2025 2055 y Fe(rl_restore_state)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(38)2025 2142 y Fe(rl_save_prompt)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)40 b Fb(35)2025 2230 y Fe(rl_save_state)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(38)2025 2318 y Fe(rl_set_key)7 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(32)2025 2406 y Fe(rl_set_keyboard_input_timeout)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(37)2025 2494 y Fe(rl_set_keymap)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(31)2025 2581 y Fe(rl_set_paren_blink_timeout)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fb(39)2025 2669 y Fe(rl_set_prompt)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)43 b Fb(36)2025 2757 y Fe(rl_set_screen_size)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(45)2025 2845 y Fe(rl_set_signals)14 b Fa(:)i(:)d(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)40 b Fb(45)2025 2933 y Fe(rl_show_char)21 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(35)2025 3020 y Fe(rl_signal_event_hook)16 b Fa(:)h(:)c(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)42 b Fb(27)2025 3108 y Fe(rl_sort_completion_matches)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)44 b Fb(52)2025 3196 y Fe(rl_special_prefixes)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(50)2025 3284 y Fe(rl_startup_hook)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)38 b Fb(27)2025 3372 y Fe(rl_stuff_char)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(37)2025 3459 y Fe(rl_terminal_name)9 b Fa(:)16 b(:)d(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(26)2025 3547 y Fe (rl_tty_set_default_bindings)15 b Fa(:)k(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(37)2025 3635 y Fe(rl_tty_unset_default_bindings)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(37)2025 3723 y Fe(rl_unbind_command_in_map)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)49 b Fb(32)2025 3810 y Fe(rl_unbind_function_in_map)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)46 b Fb(32)2025 3898 y Fe(rl_unbind_key)16 b Fa(:)g(:)d(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(32)2025 3986 y Fe(rl_unbind_key_in_map)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(32)2025 4074 y Fe(rl_username_completion_functio)q(n)27 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(48)2025 4162 y Fe(rl_variable_bind)9 b Fa(:)16 b(:)d(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(39)2025 4249 y Fe(rl_variable_dumper)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(39)2025 4337 y Fe(rl_variable_value)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)33 b Fb(39)2025 4583 y Fq(S)2025 4700 y Fe(self-insert)28 b(\(a,)e(b,)g(A,)g(1,)g(!,)g(...)q(\))9 b Fa(:)k(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(16)2025 4788 y Fe(set-mark)27 b(\(C-@\))22 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)47 b Fb(20)2025 4875 y(sho)n(w-all-if-am)n(biguous)14 b Fa(:)h(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(8)2025 4963 y(sho)n(w-all-if-unmo)r(di\014ed)23 b Fa(:)13 b(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)50 b Fb(8)2025 5051 y(sho)n(w-mo)r(de-in-prompt)9 b Fa(:)j(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(8)2025 5139 y(skip-completed-text)11 b Fa(:)h(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)38 b Fb(8)2025 5227 y Fe(skip-csi-sequence)29 b(\(\))23 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(20)2025 5314 y Fe(start-kbd-macro)29 b(\(C-x)d(\(\))c Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)48 b Fb(19)p eop end %%Page: 73 77 TeXDict begin 73 76 bop 150 -116 a Fs(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)2370 b(73)150 299 y Fq(T)150 415 y Fe(tab-insert)28 b(\(M-TAB\))10 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(16)150 502 y Fe(tilde-expand)28 b(\(M-~\))10 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)37 b Fb(20)150 590 y Fe(transpose-chars)29 b(\(C-t\))21 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(16)150 677 y Fe(transpose-words)29 b(\(M-t\))21 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(17)150 929 y Fq(U)150 1045 y Fe(undo)27 b(\(C-_)f(or)g(C-x)g(C-u\))6 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(20)150 1133 y Fe(universal-argument)e(\(\))20 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fb(18)150 1220 y Fe(unix-filename-rubout)30 b(\(\))15 b Fa(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)41 b Fb(18)150 1307 y Fe(unix-line-discard)29 b(\(C-u\))15 b Fa(:)f(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)41 b Fb(17)150 1395 y Fe(unix-word-rubout)29 b(\(C-w\))17 b Fa(:)e(:)e(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fb(17)2025 299 y Fe(upcase-word)28 b(\(M-u\))13 b Fa(:)h(:)f(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)39 b Fb(17)2025 559 y Fq(V)2025 678 y Fe(vi-editing-mode)29 b(\(M-C-j\))15 b Fa(:)f(:)f(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(21)2025 767 y(visible-stats)7 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 b Fb(9)2025 1009 y Fq(Y)2025 1128 y Fe(yank)26 b(\(C-y\))14 b Fa(:)g(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)40 b Fb(18)2025 1217 y Fe(yank-last-arg)28 b(\(M-.)f(or)f(M-_\)) c Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)47 b Fb(16)2025 1306 y Fe(yank-nth-arg)28 b(\(M-C-y\))c Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(15)2025 1395 y Fe(yank-pop)27 b(\(M-y\))22 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)47 b Fb(18)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF readline-6.3/doc/history.ps0000664000043600000240000151101712276516305014577 0ustar chetstaff%!PS-Adobe-2.0 %%Creator: dvips(k) 5.991 Copyright 2011 Radical Eye Software %%Title: history.dvi %%CreationDate: Tue Feb 11 16:57:26 2014 %%Pages: 24 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 CMSL10 %%+ CMSLTT10 CMSS10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o history.ps history.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2014.02.11:1657 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}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{A A 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/IEn 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 IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 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 A 1 get A mul exch 0 get A 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/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/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 %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /UniqueID 5087384 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /UniqueID 5000792 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 72 /H put dup 83 /S put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 104 /h put dup 105 /i put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 118 /v put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5C7A69BCDFE8ECE3C5F1C047BDAC4B2DAF36832BB25487385C650FC3C30A0894 2CEB8973FA2E6C749D88789C550C32B2230FB689F0DB5E9F5E2A8133F6477232 AD8B11FBDB46362C03A2967EC7E875CC0D0C94437517736307F4B8887FD275E2 E346171058EC303E62B84EA810FCEBB2905DC186B95AFC6AD4127429E71BFC7B 79E612C18501DFE5AC0E7921BF1C6BD483FD867BC2938609EE52C0271A7ED1FD EFEA3CC6F0872C28108F7EBBF5BF770C0BA6C712275E1239FA44736247CBAAD5 B856D7BD6E5E186AC4C3913293D99529B8F9EAC85FE548406DE5D90A058F1106 F98799495DBB3A05C04BD649053FD29380E217942F71F70C30735423F6F13DC7 F5015DA9043FA42C173D55CAF2F4419B78FF473EA32F1D9CBF39A8FE95BCC238 18762B74BB01E3C1A16BA03D8ACAF3911F4540B0380C71A587A3935D91E28F1A 726585BD5B7DBE7EDFA7AEF1C229A6B641DE844681E630F99516B2597A017D31 D37090CE6BB8078645068614985C5B2F0BABADF22F895E198BCC15CE58596999 BAD4143D84939903284508FAB20269A4CEF627F5498EE70D41B0F123880B680F B004DDC927339C58FA023E7859D68CDF0BDC80C682B27F74034B1504F242B6F8 1920A9ED6566B7B423242B4CC75114C0128EBF99E5609DA559E0BC5463506624 A7833CD5A834C6C082D797940090B12CAD35B2AAE796B0550FD7BCCF142DF000 14433A1D8E062D5207D5E38FC52F40EEB801924DC4B86318921169C7F112991F DA63181543D42A274390AF57791BD9AB85DE31338F5131E0F8E914B126EF5B2B FEDF4CEFCB3FAB423EE2021A2D8761ACD1B59B8A9BB23D4218042307E484EFC0 157825F1BD6E1D523CE620E159D1A91B4EF0DBFAC9967E6C64960E96045A86A6 B2AFCF21664A704661344F2B8EDE6F118DA3489F03F9BA2DF35DE06DC843B544 6A9665CD685F3EA8125501337D3D039A7A20A69945319C2F6F3FC4F44DA78EAA 73C8BD090AA8C9D2AE858A1B9980375150B6AEB708E365D92A33CFB8F642626A AF74411CE1DFA7A9B62EF1CD2DAC4E5575DAE436A65A71B1418AC11E31ABD7AB F79F18CC4063D04D629A1A05A5DAB4C473CC5665A315BF1B163C9BB372A846BF 0AA1C997ECD15A231C3BD4FD5EBD0F3EE4BCC573C891636572A75314282E4770 738C4CD4E71230409EA873F16CF1D79BF8B9D6A91FC2B10112958F65E77DAD5A 6698A5F4EAA1305634F6B5F4FCFB4ED01074CCFE4A716660BFAACF18B72289E1 2A17630A94699E2A1BD960438C77F7F10BA883CB2046E89C63D99A32A2457E35 182EB3D5EB81841AE33E7203015795FA97DCB17BB6C4BE1C39B7DAE297CD9ED4 A59FE7A1E816B04DAD86E4A3D0F951A9357BEC5619407EEF700397636C1228B9 B2F296281350C23CEE1D869C4B895055CA53823F4F7EDDA13852C352BE7DCD8F F3A61799D445E7D7D297D4CBAD7F8FE89BCABE2D909D8880D76CE3FAA6B253C0 F50F4755B4CB54F6664369DCBA5155F6786FFBB998359BDA06D7C9347A8F04A5 7DC778A5E2BF9E46CBE6493F71BA1590EFF98DA779BC4F16A0E3C65300075109 EE0D26E453BD84D8DB29F008BA36A2EF07B89FEF779E5A5B5853AA7B9B772ADE E9B6A00B0AC7F31A39DEF7A9D6454D0F598F0BF61BA6E5F2E03B2F14E95B0822 D8FD612178B079E347C4A450E35876E64BAAAA1DFCC4C9FF1C6FCAB22732A826 C8C1B277C4778AF880731746DEB1D6B13BEC1C0302469AA73DB6FA641CA5E18C E69694439509E39668443555D82D48982CDBF1CDF03816478F4DD0385F607B2E 5DCBE14CD2862B98D50272A90500929A29FC28C5082714DC267DAE4473D7364C E7811D0AF5DDE878E238A3AD7D5443B4F00F21ED24500CEBD0B151B6F0BA2438 370EF5A8CE6E7831AA484B4D1B5B7A81EC2EA6097583C0BD5A7EEA6053E92356 A40D995C1D5645DA2A09820F481FA138F53833A66AE99895A9742DC5470C03C1 3D173F63839B6621E7C31A5EAE998A8DC48AABE64E88C4E9B2508B4F0E99CD92 529CE2D03F2F81F93AA3B9AF63A2DDD311FAA11FBF9BE796C32DDDBAAB62BE9C 28EE2F7DD5E19A37F5827E75EF663BCA362A7EEBE5A0EA4A9E439E2D984C6D9C 91064251634647EE73B9B64FF9D4582CFB4CF50A28D45B4048131FD9F44E3343 0B33961F25DC7A3699CFE9C6D0B53FED7CDA1D360824AD00E38C1523120A5DE2 8F1147C45F72B4DF23C28A17550430AC498252B325F677CE0A5FAA5F161F5DC1 89A0BF14074AB50827E4BF106FBC2DD43B1FEBBE54E3957E1D7061C174BE9377 1F6BBD30784F58DA5D2B3FBD83183E2B068CB76FE7C2418EEB63B7E32E3434BE 5A5C4AD422D2E318279A852A3342621E4B5144714B8DBC3884F71696B0F0D077 769D265281874C1C8FE0735534968B9FDF4BBAD71EAE9CED26F3CE9ABE551DA5 ABE186B6714528F6A0A4778B1B40BC5E002629EB57DCA82BE5B78F0C62C0C348 6D0ACF7CCE2C86F7E95C001887FCEE5705717C0091725C749D0925F25DA3ED5A 007EA1B516141490873FE59D98D7F675A1CE88677A4D60A4935BFF205976E3A2 4AB183DC8CE6BA6EEFDAC1A9CF8AFB8F1D7C149649233A0B3B1029BFC68FC0BB 6DDB38A35BB57C11213542C9FEF471B5E534316D4758279135435F94956D6F96 2A3FC58287046368CDD9A702027BC1EECA0ED3E9A193B5B5884520EEE6EBD6C1 831289A3D59F528C571BA2BC4CF48961747BC5DAE646F4FAF597992149A836D3 2729D399F25BD0797C2AC6EB1AE699B32A33F0473069E93939A764B0A4EE04CF 179E3D99F05FAFB15536C12FBAC1AEA67BFA14066CB75F5E31D49D98D58C3093 C305082867C632753BE5934925D668589D7228E3264D28347014DAEFBB9B1525 26B812D07A3A26C3A3743EAB6D3BEF4C95CA337D9EE2EFAB61B3DB4ADED6F8E6 E3F2B5DEAA52520859106369FABB1296A8F0EE110947AC99CF23759F114D0C39 1FC7207B0558CBEFB9728C76DA4E415851D843C568DD513ABB62827EBF4549E8 6CDAD8F188EB40A2DD4F9A2F65907A40B6FA144CDE6783DF345707C81AAD30FA 9DCE1EBF7546127868731D78E42C9ED2EE38F457D8F46314527B547EDD5B7599 B41DBE7B2EA465605A77D28C64450D2A5FB03BB394F6B4F64B19BD6912EF2F3E 1C741F20850731AFC9A0522261989BDBDEFF4E8900D7C95772EF37EF9498EBD9 019E8727D57B7EA83C91030D7E1AC11579525763417730CECABDA5E7DB8612E8 A52CEA8B3DB8C6B8523FBD6D66D33B3ABE53B079F609315FC8353C21CD4039FB 31CF443F5DC600CAD9A5E71666A0C75A65F0D419A0C15CF7229C291E7FE165A6 5EE33E97D2A634D6C032F79BCE3C2805BD9B4D5C1AC257FF84D2BAB0FD3AA650 5CD776C77E31A42595E05861A21EB576B8D011DA7A9CD6BE2C936127A2A53080 0A4985B2993E887D1A102ABFF6D8256141C609A7C1EC0CE0117F552658D447D0 20F22F401E828DDC2F021AB0746F9725B1D5830E54A87CDA8B587D34D3B29D4F 1A423821CE6869EEFC900E23098B8FA08C859B1068BFB0782E41C966167A1354 87F9D93588BC44957D374DD379C681FC1176804ECFD862E17A7327CEF06F8AE1 F9F9D1925081EC834F796046453C9EB521C8B1C698D84EB79C028A299AC1A2F7 B100CD9A47E543D607556CBE5A5FF7AACAB7940B72232D8EF35EA7446747CC09 015A94D27EBB6EAC17D8CA55CF38E7666A079B26DF6A0BE875A1F7842ACF8373 61566F41BC0C1299CF3718AE15E134891C8558A53524C8F5DB8059F9D8FF1A8D D82E318B7150643A06D2C80774553D4C2304A4B3AEC55FD925E786F3A66225EB 3604AF69E905667B1758CD3389EC8885C20BB52DE35D8C1B278F2EB1303E788F 21A511C1454F87837A881C9792B45C40D11A13B7098BD0B6F64CF5E3FDAC55D2 A714F7640D6B06B478DECF45AFD52889B9DEF8382DCF1EE772E9CB017184658A 4E7A7453DB9AF243913A16F0C070C4B18D5BFA472910904DB558FCA985B7A736 9BE39DC1B3243D4590382F831FE37D18018810B3CC1F9B1C423A80EB89D27AAF CD36773E0685D37CBDD85A21593330984D922ACB83382D4BD9C6A8E211150546 45FD89E96BF623167F5810E647FD7DCEC31DF1EE3E56B7480AE7C89FEEDF7437 31605633742CF0B3CEA5C9ABCAAC619595710550CBEC15DEBD4C8E856E4D67CE 61958B5C07E803DF29129DB3E22CB7B44ECC460902FE007AE0EB00BD40F82019 A49EABAF85C7E924FF5E86F4213FB27D13D7C8F42A3ACCAE2B128B7BB80A25DC 8D92A3BD5A141972AEF7109C9195BD575C11B09D0F0331588DF55D0F5D60A3CE 02BFCF3CE21541359B661E382013B4AF90FA5DCD62A89957AD8F5360DE680AE9 5DA8AAE4A6F8B014A728C20B0AC74AC27BED3ACC7FCDB1C68B8F8DF366E9A36E DD93A05D8492B9A8B0FB802FE1A565196CA99FA13414D31C6FB973646EEE0AB5 2DABA1E971CECE0E73E91564ACA84D820F04A1B9BB26DA23A6C9C72BE9080BCE BC6215C814B0DD42560A4698926E1D690DED244ECE4C6FBA0EB382768430CEE3 C177DF89DCA9366A9B7CA0E20AAFA9AF212B7276F59162B8C17E320FB90305BD 5170B906C1ED3919B05B1F5A53A568A6386B58BCE199866661CBE1A0987B7DD8 2324A14ED46E8188F1F0923AAF31262E810258AEA306D5D1F69BE45838BB628F 76F06EBC9C1E6AC7D79751B9CF754B357F3BE729B4E2DF79B8CDAAC20B9025A8 028B9BD70AC9F99703BB98F10C1078120A61EB88F9D5C28A18525BEA63320AFC 9E47683FCE5D25FCCAE1DE61B8FC1A07410930A9C727FE0508E5BA44E88AFEF6 EEC310AAD6108D35474A6630E1C46DD554C863037C5AD8A30A0CB5A4BC253761 73ABAA059099A509332E7AE9322E238917BEE64568F25D8D86A7E701DB05C26D 23B198F113E5D5DA82B73D761039EA0D875882A81C7D01153C2BB5199E734A4C 6E1ED3792206DC26E3E5B9F07DD32EDBCC5858802FE37AF59C1389B3F1584906 3E6B654BAF5F2ECF1B46CFB191A71A474D2FF0079C04984101F28D14B9E02598 051C970501305764635FBB7B430183A6DBD1148C44F4A72E038B91279644CDC9 6FE5F66685DF70965070F07B2A6FDB9513A3F043C6B4A2C994938ACFB5FE28E9 EFB9C29764D389A24AB87AB2F3DEEC12B5366709379DF99701B806F55C9C1363 F4E15C65E9FFFF0E34B41851D55E64617DAC2A4A1995BFDE0B8A6731A7D6FA1B A8E8454B75550D126DAB2504427DC6271E7C28E1819F82FB8F1E8187C263E1D5 D1D0B5FFC753DFFE8E89AFDC8877EC86B065F6E0DA28C0B1AB4641B6E7489DDC 510E61285FB5F86D41EBB00E910A4366AC1032D6C3A25AE9475F9D3E471EA2C4 CFC8AF583E8FD32A343DB232D62E4B74B1324D954898E62E0F78BC9242B6A987 8CC59BC0D782B43D1413ECF446E96A3F01D2417B8824045B88C5088BA527654C B91FE8DCA8A3F496183F09DF6DBD82F838544FF3F0629017D1C66F17F95E9354 74262F963D7628C34B8C611EFD8562E2EF4CC046F3A76F947175DD5BA4512571 554C97FF31FBDA97D43878C1F25FE8B7FF39072FC5AED9D4915D422F2123EBCC 5166D067E22BD4DFEC3B6E900DF26360BCED7B19C93E9A2F8840F8D2AEC81319 5A89E68D2A058DFF7739A26EA3AC51ABC4EC64E8FE3D048904EA84F8157250A5 2E15EE3DFFF6F7EB09B7E9F5588F3972FB237E9D2C9B21313B395C5BEF3DC9F6 1A1A6427A8B3073DE01BC97BAB5E4EECF579ABA2BC1C5CFA1595D84644C1E878 5F43039E33720474549DA92981179E57A5F1863E5E4AEE339B1D17BEA23F4179 BB99C81D0F0C03C7570AF9D1A449C429A1CB1CEF96593B9A96DADB85EF029054 6A447C0C7248B93CC89279777A7F13FA1DFDC2AA8D15DACF142564F775918344 06EE270BB9C547A8B42F39A4935E10F1A8EA693886E260AE4892183939A74856 6350ED2C30CB64D6D8C93C1FB50FC422531BB8EAF0D14035C68A5E57D8B63540 E2BA0FA8F85181C14509D681F26BFB2C3B743FE3BCA00815451316A048921FFE 3D1D9A3A3965EFAC0674D04D2277AD29872ABFEA2DCACCF96CB82EDC82EC69B0 801B6978E72C99952C47C550FBB02D8E94207DD447F49FE64A9F5E901E0E468F 4577E7D4D60B27E5759EF294AB176792134256FC15EEF6BC7AC4C3BCFD6785D2 C1A0EFB848D460B6514016CDF5E8B71448B4DDE0D284A3BCD092FCA2CD74A775 323E459AC86A80B28095FB9BC6DA2BDA3FEDAACC0200FE06C5F06A72316B081B 912204EEF94EF4058A5EC1A03C8D93FC2538C7D10F21F251C3AB960FCA92CD6E AF30FFD61A99BA9A71B1C5C3CAD50DB5030779FCB1A08EC63E618D37C268C6BB 20D3A28842D0691BC06A3AB8EEED418349484EC7A59D138896A25B96C28809C9 0EBCC502554C43D32EF03B0FFBB60E4FB8DF595F9ED1B22CAB3E64A00E1DD989 D99FF3D9F4FA909160953B21DEFB2304F1BA6670C0B4682BA3DAFC72D6D099B5 E99EA8FE6C0EBDC55538BA3A640A6629B8FD2176614F0DA0F18F38D9C45277DA 6740C92A79DF260F7BAC06624A0A234E9469325651B78EB1225E80B16E0BD886 F51AF93935A7C3A89D53C843175D5A1F203711A6CA3B274A7C701CD0C220C2E9 97269E4303F7A0A0BDD6152853F3AF6706A2131E03049CDBA341AE64B471096E D9F137DF915F647433457E21039254ADD4AB7151D10DAAF847F7C2F944E37109 6A96944FD625921097D50747CB3FF83F63D20AFF8DB8E41A09291C1EC88D203D 3E14E4399F99FA2418ED6123B4F10AB77C5BF70865F724154DE8C865AE961311 339384697B5EF13A2AB683C61BE6A1DBD398D658E3AAD218D7215A54C9EBC6CB 3B871F31B92C54DD21C949D92156F5CCEDA66B011B897E6FC35280E265EE85CB 1F4C2A9986D66EB0DF6F7964746660AA9C33ADA1EC442F58EA0395F191E4D5CB 1AC70CA61217ED3CDE65FE557B65609D2341A285A0A4839DE7B18D0FBB613A01 EA65695AF6670F966383AA9F7CE593E1F3F5D6166EB9428BAAA28A23C97E9A0D F94EB513F606EE7820624A30E8F649FBD0575B9154DF540B552B468B2EA04AEF F6988F7738E03B7874B6D3F559C27450986317C6AA14FDAFBCC02ABC67654294 00DD505D2F43ECED8B66CBDFFAD7F2B6BC7A6274A2357B8788C5AB7247C4B1B9 CA86A93FDE5929F55591356DF98D8639D5377F95E905C9405D7B3FDB6AB0B544 AC1D25EE715175AB14D3A744FC162B17D77AB78CEA2D77D40F8C51F3D81DD7D7 C739085563C4AE733983955162C3BC0FFE1786895DAD7D74B8182D24B0EC5A3F 1BE40E4AA7D1B6AC054521E4866C33295DB285B46E60EDFF6FA713DE9B898B2B 77F28006E0B0CF79735C5DC43DFA7CD12CF97F5088C3E1B6D03FE6E0C6FA2117 D04D3461B5BE775E42459EF5B575D103CE04C81BFDAB13DF159B57E185CE3820 826237956BD1DB20DC1050C7B5FE5952C5969C23287133C916FD1F7C118144F2 245C3DFDAAE1F894A316E509DDF8791ABD3184308979425D8F2111FED08AA1A6 B04DCF4C55C97A6D88BE68B894A320C4C076F6FFE08061D5A3C948BABF51A203 021A9A44AD02FB503721B2A1774DD40BCC58703589BB5BB12F61ACC2C2436787 7C6F29B020E6DDE82A63B151CAF36614ABB824AE419D7CB40BF13EE125E79AF7 02341AAE559D60B7C4A04E6670BC98BD77C42D64EDFE41A627152A7DD2003505 DE4C76D7B8C81A3026E997E813DFF174DE463D25BD6E0B16AA31925ADD94C833 D97840E6769F89A78C17ACEE219A53E43178C0DE73E2E788ABEE172D57263E82 F3D410B0C8379CFCB8C8B9221112FD0105D71BDF413E9BFDCD9663D25EFABC20 9F08D3CF23F02E5A5A59DEC8CA302DC74EC2EB8E0BFCEF3ED01F780BC0014EAD B19082BE83A0950764B2FBE500ADD51CADFE1CE5841B7B50ADF05395066BEC82 ADD6BC011F6A6307212D32B34E6B18C777B80E69B1E080A0CD32BEC890506FFB 3EC595E5CA6998459702E6D63583D2C19BD5014BB715322469B59BC9CB4401B9 9D3CBB92E68702A96130575FEFADF62F4D5AD8C72A46DDAD10095F11559DC2A5 7A959BD8FF401A02178431C47EF1A7AB7C01ABFE023D54E3AB9B5F70337A4EDE 49DCE9AEC1387D4438F6EC6F0C8A7951404730385BE0F063662732EBC81000F1 5DBBFA0C9FB29D09AB4A5A1B88DE884F26B43509B1A5112B010953AD98BC9BB1 880523106EAD24FCD78EEE1211AB56AD9EC5B78A45CA152EC72D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /UniqueID 5000800 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 97 /a put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6291 4663BAB0C9AF29F46951712C354B1EB67CF3FFF6DB1FD83F056774CC7F2283B2 49B075479604C9B305D9C4587AC495570DF9C4F05525921AFF53D81C0D5AB7B5 6F00251395F7675345C050C6679867C964E82EE6981E93684B0B28AEEE03B79E 4C26DF3A514E97F57A397BEA4315C09652254E780916102F48220688AF69BE44 0C2CD2F43A576F4606BF4F1817C78B7068368AE36D593EC32F0C344B0D728A55 089C518FC3D903FBF3FC98EAC7567224389B666D105516F48B7F46FF5A13572C AA7A87B6AD749B9718946CFD1AE8B6D3CC90CF6A87B9B2F0C2F56D5FDA37CB61 6AC4D8EFFF054CC016233A437E615F13A2A393CF269C603D2D57683047A0685A E19032F5857E84E9DF2D16FCCDCE2C3679DD509E5A6058CC9FD78A7846017FD0 178C712CA8D1B9A9D2DFEF19887D01D19B7C3AB4A02D5CFDED33131B7E46AB35 3091A04328F530A8296C6F35EFA6182ABBB64C78682160034BC4D9F68EFD6000 0B844CCF122E632068853944E646E33AA88CB79B127254FB45132447BA9D7AC4 219AD1D5FD4D77723C4026768A051FFCF2AF1B7E22D2D598D0BB54669B0B81F6 E010506C1FFF5BF04BC512CD766A955212B373C41EFA8733798257736CFF8B51 52BE941B6791353A134E451A83BEA38C0A187DDFD23C2B7EEAC1A2505D0355DF 840C695952357E8780A6C9F47BD189EAC599A7C278B5E1E61467EB671953C2A1 C71E035F3C66D88DF56CD37A37A400BB39D5CFB15A5007F9B339A5DD70ECA10C BA6B38B84502FD74512D99E4B8E06409664C7523EB035E6188DD37140CD7FE55 3878C6AA72F2065C7DC50D34DF0308A2798BA4E69E96AF19B916002EFAD38731 EF1E8CB091AD21DBB2CDF345E5833EC2E51984A841B3EF04E0AE87D470288B7D D42BB81C4A732FDED84096C947AC915AC401AED151DB68FAAC3A721833673B14 3F7BB8111DC05BB7F707A9F57ABAD8B53337203640BA33B1689C9E431991EA36 EEB231066F374E62432DDD055189844E5695469DC4511CFFD616FC4803C864D0 873874A028907E5D0B8308DB5A19C65348926A62DF837AC247E7D6A55E23C696 5313A67FFD96DE214B403B5A8CDD93E4CA1945C89EC9057D0456621EFCC1C42F 61E7C1DBA1F6EDE6A4BDD6D319C6341059F62609F14EF9E82C965D20C44BCBC6 06B539365913C49FC2942C94E574415896FD459F5BCA2AE963891433545C5A11 A85AE5ACC8E5995CFEA2482BD2BB3CC844F2D3A83821ADD3724A180D1F042206 00581E061573D63C543AC5B9585B2A5D201A84A3434595C18761BEFDD00CA4E7 2956D4486197F5AA7024E5FBE2FE197BB6491508E89A67574A63AE346019D4D7 D4D23DE0B9D1D544ED82E0068BEDC5CB1E953204D731D9FA5AD7E8567E10B3F9 F54F745A44FE06E6B2CEF76DCE87281F2D4B57C343844CAC894C1E3074873B21 CC6DD0DDB106CBC6FF0DC13CE3132E9B86DC5DEAF638C0B240151ECC41DEABCA 0F1573C9B6A83E176FE8B160770AEB16E1AC0BE350165E28DBE259ED7BB1200D 83708D25774547C2D86354CD161F8DF70140EEB8DFEBF8B916005C5A5D3C1D59 6FBD8EAAC2A93F3061E700D2CD04E803DA26401743B9AC7CCBA5F99E88E401C0 453CBFB8309877E1003A65A898AF76F89C54FE4D5A4B51F07920967757FEEE7B 0836ECB7F66E922DAF520F32D9ECD0B83CD7719CB95579B6FC27D6E3E7DE3E8B 03965C6925CF9FCA4F06EDFE9EA48244C7A315B866D6B3F5C767B2B15FBCCD5E A609DB4FCAB2C2246D320DF17D60DEBD6C2E78FF32CB7D120E9D1251E0866D14 8B393910D9FBB4225C1B384BAD153C2B1FED53725B3F4FA46CB6DB649F6F1380 9ADDBD04FFF2A8F3E53A6AFD44A55A1C394E2FCC723EFE4A30FE24963472BC9A F349542BDE1FC7CE25DF0484ED3A1A344007FD9BDB04E863BBFB60996570557A 71EE4C77B244331147C5A70059A74064B3F2556E0B70E3A4BE685712379C35A4 E616230DD8C716EFC1E318BFC8770272A3A7DBA0E0EEB60419207B6B2855124E 70575EB86D2DABC9738141D3C2DAA80F4488F1AA94B3F0FAA24683F2370B1ABF 6D06D5C0BB9063171E0F8FA31D56A9793738B7653E05EC4D5F136BA8C6BE6256 2B0B79DAF5F989CEF8E5F0F42888D8EC9A32F2074DC9174776DEC9C3166E5B81 F44F7AFB85FF7F7E244D3D64856D71340A13B267D04F25CD68126F443E1215EB 3615891A22B8A27FACCABEAEDAAEF7F7DF4C0BB15C1B652ED6033A76C4538F10 324713DB4683F0A7C272895A0D9AAED5BDEC07080F9F19D61934A6B344216873 A618463B816701EAF3F507FA0C10FC3BD12A1118E5357F2C502DD25315363362 D0FA6C0BC28691C752DF717A651E8B0FB5B88696BC3ED7E23020CA9D6BD8D03F 7292E2C07399C40B9EDB7D161908BA250227EF489C16217EBDC6C3465481973B 72146FB3051DF328ADBD7A98986E7227821E2C24DF994A24884266AD2BCF0AC6 B36A938DAF8E8A40AB859290FA078CEDAC6B0210A181ADBC199AAEE6793F4F61 5504E4CCFD6DCA48F246F7F969633C70C5667B663E229592963ACD8A6982C6F8 F52F5116DEEEDE61302F89D92EE1CE0B1BA22CF9F017D7747394BC2ED5BC0141 6B247B07D0D2CFDAF75ECFCFA5D1CCE76CC9FFEC345B1B3A34194EDB4C75A06A B03502F7702D368F2BC048F42CDD18829CA3D96CC07946DB257A3580787A5C40 802A085E900E4785B1B9081DF4F0CC55CD292B034B4FFDC1E8326FB3170653CB 844636627878DDFFDE6CD0F6D8EE3FAC7AF79E03C3238AB517874DF858BF4D17 971BDC9EE0152E969BB876784D35317FF452AE220819D1F48DEF67D8F296735D BF445BD8815B21C3D9CB5A262DFCE53AC150206B32889B1E6A6C48452AA56EE8 E66A7F99EE0F7B5AA66109DA632FAA425646350E58EE8D9FDDAF4DAFCC33DADD C64D2A62092406E28C9483DB256D0BE9876D3E95F2715264B842193BF2860BA0 98A8DBD3043742744C8C60E4AF996C733570050B09D1CDEC63CA7AAC157CA349 B9E6188BA077DFE2FFAC844F6B6C3152670DB3C7FD149DDE67054B869A6EB19C C8756AD1987CEE857262450FC870503F54A0B2A6574F9BA63F43B72DE9CF0528 52BEE0FE270AA0D2E6B0D87B361CEFCB7F4635E4ACB38311428542A954C551D9 BF33B8194311C20FA0D97D411ECED2312DA77197E09239660AC6A9465B06E3A3 2AE9EAACF07AAE6D297DA00E3A366B0465E48117600936C8EFAB79D9D2A156E3 EF0EEA375EBAE7DE404ADACBDBB45F830E8BD185C8348316EE978598A80C83B7 24F89C1BA0BCCB2AA96B71D51BD66C3B87F58F9951F9872033109BE5CF1B4D68 B17EE96C0AA378FB7E1163A6F6BC130AFD2666C214414383D9E0EBCD993C7A32 0206A4DA1040CBE19B348701EC6015EF37BD273A46BDB64CDD80927BCB9D7B49 B5F7F69DB66215CFBAA85F8CE86B788520DE516F36F7ABC6AEB7EDAA268F8523 6008CA78284EA582E23C0F6E09B8C67C24711D65FC2C7C3AF48F8630D6AB7516 CC29F74199D60E0EDE2F50B3A1CE95354CBD122E1DEB06128527016F23E8696B 053936A66BBEF29330F33D578CF456CC65EF39AC87BF10B0C677C4E6D8B06915 ECFF2EAA9CF67139BA9249D581E9243AAD3E59FDAAC3B28A87758412D6F5D8F8 F79EC4C47A045BA16D3D6AE0F9AFB29C7A20DEA61B932FD7240087F64EBC6379 DC0E3F1DB7388853857E457D3B09536455528047E4DA6AA7938E3F656986B61A 21E73D3773CC66D813DC3DDD01C5E60E3CC098764E3C4EB309B6482A10F2C928 B10AF5138C4225967A8A801F0DEE929E63B1A16FCF9A4D75723BD63EA3458FC2 E3218E41839E091E134B655ED4049352A59B9BB7447BE1987ADB2C8309ABC25F 6743C6CBA2C0049869BCF800838E8356B5754274ADBCDA4F42034B5F49B971A9 E2FF41AC8951BDC0BCB23F90919477D227FB3DE0C205C53C6D1D4A995212AF25 06255B0BA2AB068CCE1685842774F1325B2594DD2C59BF414C6235879089A789 6AD3DCEA1F8271CA3F41269AA934CC3A60C25A91FC73FCAA66D7068176C8F777 01002FEB2343AB559B310FC5ECAE480FE0FC6A3D10B6037831852A654E2C326A 4EB26FE7155EAE63324E6796724B435522DC5935691F11D0B1DA1040F720768A DCEE90219413C6358C7A602B978339B22103890EC4ACB3425DA4A1DE274BF619 281DD83B9FBFFF431B06164A34F15CE90D76642D0587036FBE526ABFF1FA0694 526C25F271910751C5DB07ACB4429059B6B9C5644FFFE2C622F5F7B6ED859249 DD3E98EF0C0D6E0DB6CA03DD87BB9331797889A65C4708FE9A696041FC5D1EBF 107589B49CF9A04EE49AFBD59FA7FE9E3DAD2C46F44F6F54237302E498B80C61 A975FFF794971CB55252D049E414DB833A05BFB0AD2FF340D73893A3286A17AB C4ED27AE133D7FFD9FF0F2C9B96E83E566EBA52E5626CAACC6A569327C4F74C3 ECF1DA1AA4E562073458A21785766FB65F487CB2DB656C438FCD2D6D33692FF7 AA14958C5AAF35F8056304978BCA5901BFF9879441A81CBD9C270230A19269BF 110EE3382AC29404412E2B975D6C11CC5AD1825E10F74C632A7F54834C6BC433 0EA2A0B303057D8AF4C222CE233E408D02E0E8DC600BAA5A6D14025CE0459A34 B57B8CB8AF49A804EBDFED5276AD608FF1C8A9F299B9B5802225ACC1016F627C 9F457B3CDA742A6EC8507782C5009DD5F26090A1FB624186840F174609517773 DC17E6EF8DEEBDABCD84172AEAE450A585EA54FFCABB66E652B885000A457D7D 17B159385131907E7B82A978B73ECE7ADFA85E755CF11D4123BBE0991BB733E6 17F193AB516AF3D0D2A17FE00A9B3264953206CE596101D32EC850F5A5890CEF 00C261F646555B7BC183 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF6868298CD26E5B9EF345BFA3EC2911E2B96A0B40AEAB95BDCCEE38F5EC170D 3BFB792D2DDA7E57BD2FB7669484EF9322A1BEE009594901095DE2BA9A15A0EE 4DD77404CEF16EA6C31FC04A8FBDEF27B9FC1AD3264388B0B12D8E476305B912 30B51624D4605C45B514473F327DC3EE8BA69032A95301CF714F225A92C253D0 D943C80B9CD0524C5B87A8D052D2E47A9725EF869D3B89097CC13CA9BC695FF8 A9468004450A76A13B7EE78A03CC18917EC44036C2DD237344E594569B8F2DDB 21F7619180B8C760741961CCBE54FD6DD07C4CF73B346099234A1EFFEFC88574 6324E4232BA18A38EC9F0B780C298877EF0AF42C1EBC2EB52DB64A1E1E352503 36AA29953A073B864FCB31BA938A4163D000A159ED4D345331FA1EB4009CFF67 1D107BABA6AAA48075C6C50BC7683929EC146594E55B01D4F5B582328284068B 2AB05CE92EEE1DF4557DFC8FEF287CB7F961F4F1828EA48B0ACF5C63E1EEC8FB 6A0EFF132268B7DDF7B465D4A21B05993F4A4CFD168A700D04A7303BC2C00391 392C3FF97E770E6FAFFFE501242B20B4F7B6C17331C64BDBA3E59695E176CC79 E7632AC6D2E920AA048BD1EBCF9909D8C314D2EF3CFC5CF88D8570BAA814D467 96D86CF4415C5B739FA6FE7B4C228F06268D28EE33381982E7B005C26D2604B3 AA363CA4732B9BB0E4D4EE50556D777258A7BC232087C9F00B0D5EF70270B40D 3071E14E4E5AB5AF1C686C5A7C268D36A0787DC9300D4CFA004F89A73FFEF780 E6BBC957E31B764159C3ADF752E6E1A6C3B5B855F8A483497A347B601E3C8DE0 362D76B715916113CBD2D3765197074104C7E17B87670CDD5C227A1467BD678A BE442F196034B02132850CCB77143C2873447FDB8767C462C63916D9D4A13198 B7910E1B274B27644DFB2E8372C8CD55E6E2AA5CA952A079E1E6389927495921 CA39D69ECB4DF382FD2DC213EE382BA1A48CA886CB6AEF2B0C50CAB47B1FC40B 2C95E13190C92480439E3C56188D162C294F24987AAF4E15E8FF7ABBFF2A12FD AEB884FCFFD671EEB94CC075B815C6A45549EC23DB85923F4C37221641B75CE0 C5C8FA8403C2C9FFCB66CC74C5160D6C7042DDFF33A954DD01C8E21B21F8F364 F6FC735507D0DB5F68F2D8B520AAA7E0F1D503211339F9466006E9A148F39874 A1488F1F0458409D442D2BF5935A655AD4656A8411543F58C63DFF9C4FE56256 7F9F876B56BEB208F9DCA363D2E0F7DF3CCAFD5F9674675BF622CBFC2D1CEFA2 7A5323971101D3641E99D84197B00D67436843EB9CF74C273062159C361A07C6 E3F1E0E4666ABFD5C9AA8F914F05D02EE1906FCB66E421C73243257170617FEC 2F02D5A7F3347CC0D290E52FA815C4D5D2A16A4D4A5E0B50165B0C5C77B675F1 0EF343D70813346EC4D7384A9D9A091984AF29C810F8C3D4247D37F91C5DA967 747890DFFB25E67F6FB766168487AE8BD8E49C55BC1B68B831E3F510BA1DA3A3 9F810B865FA98AF89696CF7489BACBC1033A1C929023588E9E03FAD6D901DC52 A2F5EB74DB679A16DE42F7B47BCBE16617EDC7328A2CEB2C23733D98ED753C66 502DD2FC75CE2905A429B5B56C62C1C0FCE17144D96E0C615E7FEA48EFA05D9D 344ED266BD96C3296D6005D289228C62D572167E369AC65724E0E62AEAF608C3 423FD37E586D41B2AF9B10E0A36312AC1A6F61418BEBF528932FE61881636837 47CFEDDFEB25F7FC156AC7D6E78D608A91270FF6D1D510E8CD61C289F3E7960C B6093B333A0CA3CB8BE51107C5C1C085B3CF6D6F61379420AC1E5D9A3FABF084 80D6C719D93BF74A99D681726C81F9F83949E06A560F3B3905C0766134533256 6CEECBBE3EDC220193964706085526386391260838C2E885C88F882E29F31F69 149CB1B4B788BE82AEBD32B5A8F07D1F537D85077B4BD1FF945EED4BB41B79FC CA0B25D1D761129A6043D701AB1F6655C06DF7B0891C3C5224977B9464A6A794 5FAC6547F7548402420976CA3A644E5A7CD7F64974B71872B02756FF6A135EE7 BA60B9974A0A2CFA4E46D91B929A3A0DECDF44C39CC06BC2105538856718CF59 59B1D9BD88735ED4D83C17A67031178B43CFEB4C301E551D708F5F08E80E5A1E 5579CDA06C9902E412052CE7714A8BE29DF9911F556899F819A7FC2565522182 20918E8C476DFC00F79BCC4248BCAC6615891C3115B30A39B365044CDA0AB26F C8966DB46FB9FB7B7BB37C48B7CC4852C8C05A57D92ED8E6AAE6EE5A60BC81B8 C0B22E5E74610495094F12BA6D60DA3190C4CAC7F46D740005264BDBCDE61FB2 50B8DF1CBF41195E616F4595F7860F1538363D529E3E3FD2D408B56CE034521F 3D9AD6C30174D0AC1A9F9151C8C8DB6E7624290CEB82632679BD0A01EC30B3CF FCE72F32F4443E137EA554CDEF84B62CFE21A5E8BFB2EE52C87CBD603C8E0FC7 35A9ADA5E49FC4C7E3F1538C84761186C045B9F11074F8061F0F4BE061D22C85 2BDC140F6CCD858B1A4E9AE9444B4EE3DAEFF4E3760A8B851ED3B9780F990595 36210570D82E9DE83AFB3A20D0D955F69FD838B6F9F785231A84D8BF9F434665 CB62D518CD5F4623711E022DF76D2CF20202FBA15A1D1070FEA87D6BE954DEE0 370280ED09237334FCA7AFB1A0CBC9A153A25A929BEF57B202A5889958A9AEDA 535781A11DA8E2BB5C885BCB83053BEDE8436846C7B54B41703839F861F95D5E 3C34C4DC8FAADB39D20DC53F642A28B92D0BF1B02876E348B088AC9B2C55DB06 808BA40658ABE50D6956C9B1201C8D3D97CF9ACBE1FCDB7E7C02D1BB8D87AE61 2902D77900C11D1DA6CE808C425A7EC0B31BBDC690E98A09AB656294A1B17E00 2D12DDCAA5E0F1B44EC9D7CDFB5E916045F5CE852D3FF3E8D421A11356EB4392 F7DA22AFA6C18C7F507F5D8892E8F1DF11E5CC965A61D732F12EFA8339951645 CC3AF8C3EC88C5B372729EBBD3530439E0E8AE43B43CF57A5258AE8AB259EB71 9E1F057688B110D4177CF54B1D56D2EAB6B1DB603D6536EA9B9EA11DD57E7F3E DB574B05043CEDD701DF8C0982EE726187EAF637ADC279BF7C83A244D3EA9800 F9797A4D3E4D5F6669B49D2B37CC9BB1C9244B54DD62A5C4BE533DF46F618D3B 9FE2203DC6C75B25AD6B49B2A760D3604F156ACD80CF5458FEEA64E243B2E527 E750720E97CCFFE2322734D5DD0FB1A8FD8FA77AD87AA1C8EA1B023F70BCCF92 624F9A6B0B27B5C8A5AD21D8C08F62BA1738359A4D78439A7A580D605929D6D7 60790297E11930F43BA89832A2D351CAD0F77AF8BB70A2DD5DEDD4B34FCBC714 C2BEA2C26F768EE44D27F39021F5AC95FEF199F6ACC4A2F3109E081A3AC7F42D 1767C2A82683BED075A3293189784AC8D12F17FC3C15B83915E0425926D6069C 16D58DCF97B1D8E1021F51C47BDB1286B5F9CB60A2B2B7D3F219F20C8651DCCF 80B30FC5B20DD6D887BD571450A3A005F5980E90A649DEDD316A452589B2BBA4 BE8625C231E5D4886124B24580C7795F7B3D063667F400C18150A80DEA255943 B9BC4E1F0A0E5F5BFEF9F7322C836AE892F91A4B3291F216F99654C54BDEB5DD 87563AEAEED8D8E65D1B60795F1011C3CC63B8FAA15B381E04E1FBC2A5BA5EC8 B76DCA2AE3686F7D71CF0662338C5E468C0E8155715EE8DD963FA7C257214DB0 6E523E1370D0F14165FDEF1C9D2F9DDDB4C61DC764B946DC40BB897E8A0BD7A9 A7D9B684B5899E1A8F4CF9FF67EE19B4FCB61AA4463C5F06309C7B10A131AC21 63E04A69A223818185F44D48ED721CCCD98737DF4BD3CF6924C6EF30372E9E38 22B3230829B054EC1B8B42D29059AB5E706E5EBD6CAFA57502005BB170E5B471 8BC330C11C068849A61C37E5AEDFF994D9A53E73E12D3F7BF63CD6C435055F5C 875056658B8141B78E3E5050E3F8209CEDC015445893B5B798DED6777B98017B 4B9766F79E20DE51B4081215A072BF3BFDA0AA741D3EAB7F35138C2B32982453 5681A66A99A21F0663C8B559FA49AD7B854BD648335DC7B8F72EA85CEC66231B AE8F8FA55020FEB0FDA90055CE8255D02C0E2FCC829AEC8EFBAA08071CDD03E3 9FE8C4F28DB460E0AE8514E319ADE43559B190D9104C78DEB8DCD9E1B2118746 3DF257B5DA0A52F0F6F0F70352C2B1F851F14F3251A2CEF2B15590E4E80363ED 652CEA14D0CD2FAF8CD0CD6A7888159FEFC0A3D8978F49D85DC8BFBF33FEE7B3 C0B040618510F483EF114F46A509E86D08D9470B9A6293083E6FBD511C388D8E 5A16B5777FC9FF933366757609163E9567B121906BAAB48B1D3CEF9D0B1028C2 18E9B6536DDA27ACD9816D2D1D5571038F936FE496081B801485F9CCAFC7EE0A 34D2BF741863A5F639D9D4E123EE90AEB355314E4E38F3F4C243CAD3112A0504 48BBD089B189203DF7ED4933819A0C1D57ED8AE20B2B15F19F8A0CFD927CAC50 116B04C25A4E5B20C4C5864A8DCF8CC9BDF5CEA59D1EC52EF62CB642A8FCF1C9 3E036AA4DD6F4ADBA4F8CD013C622F831397B8640936910C6D1F82ACC6451C68 760E14BF5B7845762DFE0037BABBE5046C5F3CE3874702EE51D1A463F3B86C69 7C758A4B1960E1A796F07859A9B1860AE5BC7D5703E63A37B9334D67613241C2 5B606439A6AB29FA7386317DB876D26FAC05188B4C59672F2CD9A750A0E70CD5 AD69A8609AB0C78F625E7749C770391D5426D9C3CD1CD7D37445D9718C07A37B 5BECECE3E6F3147731D5C12C4946F88A7C82500F8C495FFA7E2FFF6A9C2F0BFA 8EF861E6C369C8DF969B5FB0F02CAC74E8E080B16BEF1CF0D1A81E90FA1612F1 FCF086961FDD981A8698FBDCE44A80E4290B7B553D9F46BDF6E346627437903D 499C80A29BE6E7A2C03D943D23C41F1B85C92FE922EE3A3E0601565564C55116 17F01B2DC9FACA12AC59950EA410D5533B0C31D89FA68D07E9FF1139554C7920 FF84CB51E13B7FA3EE6A32DDD9FCC192B576A871CBC9E04C5C66ABED560AFF24 6D6271979BC7D04F7287E32F52B1D2DF60B7D7A53A7D776FC36D70E9C6F54E97 44F15C5ABF2547DB40EC913EF0B9597A721563C3664E74E7283E9030CAE36B7A B14E781BC772691347ED48EBAFDF23EDC452EE8A118A840A185B7C1DFB7F3AF1 A2D64EFBA1C9F662A35F3B46CC8E2D7E7A7F63F9BFEBB6E4A6DB8FF0BDC83E9A A70438435C3B8A780F7F92578501656FF963ED66A73921E014A46385450D26F5 B73EDA0630201BEE50325B0F76B55E77BC55F4401251D083225EA5777F42A7C7 748FAE7C22E6A17E04BA9F6D451B35A63DA6F3D80B0365E159B3E993E0DAA242 2212784C9651F9A0766F473DF743748FAF491CB69728C2473ECC5524E0F2997C 2650BC1F945EDA4CE833980E706C4D413F7929804A0B1D182E26052876D6B836 01284296115233D90D2D0FE83317D4AA206A67207BD899DAC1D726C937A34193 F0B6EEDECB391C6434144275295014BA4283D4346BCC495AE3EC6EE9C4FA7711 BB6004D39D7BE17FAF0241F2798C36C451BCC4227899837FC244BEC3432ADE1D 9E4F47F45E9B1D2C832FEF6896C92A207AAED7AA924520D096F983D66DCAF476 83A2F6F1844E7EC5195EDD3E5FBD0FBAABACE5D13BF754BB2B0CC8FC633D83BA 3BB65BD9837B109AC1B5B255298E6B65AE4CEC0FFE24DDC3D1883FB0D6F8FE65 94D0A898278E0313303CF7DE2E37BE0152A1D4CDBA04ED61D54555B1B107D9CC C08C89BD2A19050191867EFAB8FD582226B03D7ACFA97C6D404BF99F39EAB7AA 9AA9397B57CD7CAC1B338C21579A593D7DE1241E6F77366CAB10C3FAA772C663 BD1051F9D791A84C35196E74D28D342553D344199CBEF83D3A6ABF05A4779B16 EAC70F7CEE167132D04BE5F56F8F20927DC3C7A20239AC6AAC2B57BBC83174D6 25F59228ED58B5D492B16ACF3EECA04054F59247A8E318B6F5A09F0A8B3820B7 2CE711056E3A3ED9300B6F2DFE2C665D7C3351D40A779FEDA09B406E804BFFDB 9831478F237DAF6352CADC53D6AE85A14E5FC7C0C1BA4009FF962FAA52499506 C6F3C18BD4C13C1272D844EE151CB5A0DB0188AB7FA2DD47A6A2CE8554A7CB82 C0CC30593F062451363778FD5A8D39C60835825D63CF3BEF323C8CBEF3055F61 294FE558C7542977A3C520DE15A984C6D82041E06C356FD7BE75D601CB95816F F05AA3F53144B7D768F6732339FB8E6A068F8E021C1BDDB26572385FD1B3794A 0E1C780576819CA271C78010D8416F6B19912227CE781CDF6AFEC335138203D0 ADEA0617451CE0BEB024CDE135922C72FE0932F10589F0FF9F1DA721D32B1583 8D032EB9049E4AC34B3AF16C4DC1A85CDD8B047035ED7D50CF8D9D02621BF6C8 2CCAA23DE753C7B0B8818B68D625F44A54689C0B1CA36FA7C68A567FDAB813A1 8B34DFF1300D5E42067F51ADDF7DC9BEC7D4376D304A417741E17AE427639676 407472CBFAABB5AB329AA7CCF130B3EC6DD588A1F44409FD239238B1A8884382 F04198DD7C5DC5E2288FE0B206C9D9516D468AA6E2B1183E2E906F9DE47C9209 578321590CF839C9FFD5FBC3393FFC75322B4E703EFE69534745D579B74AAE3A 2336823D2DD5F477F39AA9386736476F5C0B1CB19457D44AD6417BA503475D23 51A99BDC97751E7172363DB670AA50D21920E98BC1DE7349EF8B8C1E72CACB47 557B3E2BC30454F75CCC41B84A67648E894AA0A43C5A2BFB5BEE8D0BB07910B3 47EDA7B547EF357C2553933E0BDC0F05D596E4C55B33AD63E924164DEC1934E4 58F937DADD65AC866E4EA2BF02D36C54AE3E3727A8FF9F3658337D2BFAED5908 5BE3C1F4503843FFA47C83B3D9CBF1DF2AED7A6B97A7E68CB6B9E5420E70C5C4 36843B29D902584DF95CCD8C34647E87E2335371DCD89E495A92033BA482A62A 0D2D3A7BB06506E42A4926CA0AFF80EC8DA63D7B73E8A04B25312F03251B512D 76BBFD76C1F5207FD6A8E69ED9BF063C7DDD0FD4C6974BBC531429EBB55BB715 0D08FCB2F80275425FE42E87AEDCE78D2BDC07CED8BC49D260D1671BA0ABDDB8 98E0F7BA7EDA086F4E3585157A71CCEEA35750B9DC3195E3396F1161EE1E1D25 E6FE6E0B022A9625B5866B8EF59DFE5391AA7F033886402C654F4834F4E43138 EBAAA758DFC8C27356F012F4D0F398EB8D013678059D8419C2D947F3FB2BDA1F 70A5FCB549BFFAC288ACA7051BDAEA41A4AE0341035B4365A63C553DB80CE429 02670706A74AD397B49AF535067EB07CC3CB86704ED45301DDFD5238E7DF5ADA 8DF465E45F7514D7A0BAA202305CEC73032FC09294480796251045AFBCD6B081 8EE4481D29E817C7DC32539B364076672596DC24CA8AC45D60A8536865FB475A 3DB48E98C675A8BFA39792AFD17B5251D56F0D5C27E229DFA75FA3560E7ECFBB 8164E4FF15421846BA40EE13146A316D530287CC8652B58804B95C53F6FA9DF6 F84DE1E222C5D69E45E12C06C97E672D456E21B95584F8371FE34ECB0E6174BB 468EA60BB0C06B3DF48D996D9083F70181799CECC224FE60736CFCC6F246E5E2 EF465A6B1B411ACB7474A59BECA5935DFD15F5C18160D4AD4DE9767D6213C35E 08AB18F834CAB32013AEB8C634DD6382D4C7E49F10BC5113214A18A5EB31A0D6 923630A849327C1CAFEA3B8F5EBA83668E03EBE084ABC1A4C1DEFB333ACE0696 EB20FAB6FE6E61D38457C8E10D8FB7595C627E8FBE2D5563C4D50A6E1F3DCFF1 F5A2DF1A62301665C0E44C2257B4516B515FC995A52D4DBD54B3D4EFBFC63A8D F07C27065CFE19527AE04A9CA14935B7399E30EF88D2B63891A58044D7CE07F2 916EB8E9C65388A73956B3D82B4B41AC378B4B75AC304A32339CA7701636B6A3 84254743EA5F8525897D4FB054698031D1FFF4C971A10440212DE812752425D1 E71B02AAD20E994357EC8436BF1B74F016DD41D6B1F6C1578E4B261ADE5A7B31 2ECA2C16294C9309F200AE0AB5BDAF2BBCB3E97B0FC5556BD8208E50CDEB88BD F137D2F72258B6E41092F1256CA4AD867338DE757E29298F404FF94F247A805B 40524952A6D8581F065B11B6324F9F2821A3AAC2E7A583771EEE640F2FD0975D 299EACAB2A99942480DCCC95BC7CEA846EB1B2423FCE304596A2581583450455 CD1D56843DF8FFBA723FBE4A4AD8E539828BF48BFB4D0C4EAA68EADB81A2C58B EBF89CF83017DE3382BEF407B493FA5EEF810C740C3C8B646292AECE9A5180CE 07ADE6E6B2935B90BC521D3ECBE25B43F14DABCF49F378C26CDD2B27C690EAE1 E888EDC3C963F55F1AD13C8FBED4BE0BEFEF31C0636913B47205DB1D0DDDBEEF 4441A3DE9825160AD57948567EDE8660567998D41A0AE2D9A9B5BD4207F2A0F3 EE82DDE22D16C32A583613E0EC2BA331EA91042B8FA2865A8A7DE1BDAD0B6D33 3DB1409222AAD20577ABAA7A2DD6B302803FC7B4244ACFF725E37CB5926563D2 82AEF220424600581E25001DE71E1385C9D690747BCE051539AB8B03B2EA77BC 39B27AA8F63CA37E3886C50E125D3886C5132869596039589AD6A8421C8B7AF8 B0EE2872AF974A4B779F09DC1DF2BBF673A7FB32BD1BF3D8D99A94E1BCDFEF81 37B2D7BBB80ABEC1EAD544448E6A49DF730A1B7F63267C9DDFE81131867F0C0A 8D2B37E8B0AF2A6265C57CF9BCF98A01998081E7BBB94DD53FCAE52F3F5010C7 AFB011FC6FA98FFDF173FA0F935D33EC3DE55890BFAD217870974C00CBBB6C67 1CC558F6FB2C30B28B9987721722A27EBFA924A382569E3D7C47A3220F21EAB9 1011D71B104BAD1A47CDD9CD64487A8E9721CABFDB83FDEC748EBF0D08E77CFF 1A54D0B3ABF4024DAA403436C9F6CABF3B6CA7089776ACB183AC01C8E7F287FF 9DA7959C4B7D73F00976AC5C3E4B810DBCCE732E4C9ED9EF8006AFC7314F0055 FA3FAEC780434F273ADD7D07C2006E4B755B24A26341AA5AC2DCE258F8B03409 188109067E22F078E093A76FA372C87CAD401794D94317B2665DCC7E21FDF901 E1511307385B6EE148FE1666BB616351F48A8082ABF94040CDB058DD584364F8 CBE3E94DBB8A2450D18D435FF5C8CF2DBA1EB562E957A83F184C9F3CC43C1860 E6FBEE91C4D240C61D7A7D554A17B90D0A9CE1E7AAF7840846B3F1A1BB9926A7 CF8E9DA56DB81D35CB3687E9818CE74C0336DF7B2CEFD8BC432268AC93EB34E2 3D361A8387BC92B459F645BC069A49628D7382E22EB249BC7CAAE98AC55FBD24 F570D8D654B54710B809234AA2E662D2ACC44E1FE1AA63A497FDD94A46B9D1BC E37B29430A5E0C2E592F13BE227CD9A6556E9A0E1C3EAD9DCD742D1F9CF62014 5EA4510003418D1881C4EF1589A8B9EFB52DDBB67BCFC4E55B134A3C2E31AC1C 4658B592EF69C2E23E335499A35B91A58DF9A947712DD55BDCDB7E0AADD53E29 2777329340EC29A51E9020B8EBABB7B066113ED3A4791D3FBCABADC40CC45FB6 8744DC0116379D2649B216366C6FC83999E1FC558EEE5E17E13A12B252E5F7A9 E760CD51C96C1B4815BFE37D4D39621BCD10DA9428CF186E61E9921585C1944F DDC084DC9216FAB69CF54E456D47F65B3FB02F34B0CC998E12E41110A4791465 19780824EE2AC1B799655553375ECB24149100E539C23829944BCC82211A85E8 6A2D3559BBC0EDFEC2DA02AE3BB86A9E30AD5BF95E5CD956297C1F6AE85D0768 1F9D96DD8EAAAD78CFBB543E913951A78D3262CF08BE0DDE7D870FDA94C51A1B 1F8544122EDB7653E66D772E3EBCBCE4419F17500D8469EF4FBF93144B20DCD7 39B815E0B09D0BC3283E8B7A907F203EA3B22924419C1C3A8DEEAD335FD538F6 0D5ED1581BB64FAD4979D67D51F18B047E096747FC50C6A2B48377E458038374 7FF93A3A46E09ADA5A844EAAA3EEFA1625510D3AB7A74764FFB229725FDA314A 72CCE353A9693869F26CB904505B089DE6D41825336318DA00DAFD986779D4DE E8DC47E496A9936DD3CF46719D5E832E3B7C85B44D16D4BB588CADCCB90CBBF3 3589F08AF2AF77D7ECC3AB68D6409221B2ED853012C693C522407B4E97DD4F89 9EAA4CDA6C85F8B65F5E165399F6CA79550965F3AAF7D875CA947FD6BC42A4DA 1AF797BDBAEE65A1C3BAF00E8E48FE567E757715166DD2757F7DE6C45FE4B3FC A0C76D12FCB66B4CE9CCB47060AA5CB3FD427BCA5B549A4AF34CA654D9421C26 9EA4106806950525CA856624E9EFF9DC5B598AE4AFE928447D0704D4EE99DF07 69AC51F4D3163B7424059ABA4381DBBBD5C8C7DEEF723F163AE69C48962C34D5 7514F73FAF946C121EA5848C29E127DD0FDACDCB6B1AF4414EA369093282383D 0213B391666CF596FAB2AA27270FC273E32B90D3209091D8360A0D50F8F28D23 F7B8B097E2FCF2DCE92A7D5AB68EE680B691C2DC7BB846FD5132EB5789A30B8E 9B849C18E8560E9F49764CB89FE01E2E9968C769BAF6B44E08E45E563EB14BC0 70601E5133AAC33723E934677518C54A235EE9E4A832B363DE44FD82D37BEEF1 E9C842EF2570C97C3C5D6C0DE94DED4DC5B6681E4A04BAA725F0D9061B16C431 8ED6859AA5E5BF254BD3C29F100293FEF2D0D6EDAF428490E13B06527B5FCC90 54768BCE8007EAA2EB1AE14F3F577CC243BA416AB6E43E92EC4FC99775BC1D92 CECEA05EB8ADDA826E364921ABE388295AAEC6678C08D26415B2725025C70089 9F12735F37C45F00218EA2E398A8CB173086C43B2A7EE4C95852110F8DCD12DD 64AEA60156E560E8D8D84285B523515EC15888E9912C6C1AB91290E1D57D7595 1DF73319FCA62BE7C04F4E9968F7E453C384899736D48EE6FF64DF1260057C37 3082E207F796CE6AB2271E3F31AD2FF83B99FC3DF2826C07F4E4CD05077DCD69 A3B9EC76BC02C12A468AC4C0D7D83FD4BB4BC8ACF9C312CE3144E76D2F3C6246 A210DCC9834608CD0A52CC551FBC059B88BC2CEE954AC6B5811281737EC83C8D 72B39D016B0ECCED40BDC58706910851447C80E3FFFA9D57898204F9815DB6DB 1EB38FC10637CC50768703AF9FAE89A94B424A3C647A7870B26970954CEAAD68 E069ECBADBFC0519C33AEECE55AA93C75B6CF907DF65B98C7A9B043E4BB5840A 88DBB212EA2E86888D36B76D270926739B48D6435C1547D703FEA7B989CA60A4 87CDF9DF654919F730787D58680BAD0E5B506FDC2BF0C89569CFAF6BE11F80B2 07D69B417562178E087AE3AE9380CAF8CEEE40FD3989BB50E8521963B0617401 2996B2C32A3F03B7F312A211B605932233E7C230FA084BB912BFB20E85D721C9 532D22AB85802085C715206297C09713C3142039602BA9D607F7A52FEA25B0D9 FDB7E9FB15499E3DE1E47CCF2500BA8B8798497469DF248B8244493738C81815 1008200E9457B4CCA5740897B17F8832515EBAA84A237E17542B359F173E7868 64E99FD8159C9051E876C235E434BD5920F55084DD7F31C6FD2B6CB58E5FF307 0AF6020EA9012AEA47F9BCF018C30885988ADD1A630C2F1CBBCFD5A2C95028AA 6FC89D43E089957267B6F94C7F4E05FCFBAC85E879D27F7BA921FEDB4B551F9F 3B5D3197C0FCFE264D45F6C1181BA26796006B94BEFDC342C7CCDDBFAF332F8A D96D8D6C52ACBB10C871DAA7162501071CBC04CE01D8FDBAB48393E59ACCF1C3 9EE4972D7DABC3E639B1C2722F346553DA9E9F163DCE4CC7CB2D1B966F561A07 8862C3230BDB104C55DE3436ACA77800229637A6DFE1F041DB4B45B2D1A5481A 6641D77981CDA367CD23E64AD5355B484930C7B09B47ED6C79851844099A68C7 1F4E6ABBDDD7490259E856C267804A4EAF61246AB4C1233F025EE81793312479 CECC3813C2D887855573122E59FAD0B85DBD9AF66203F4618F22D6D56E1F7323 2BE1ABF7702D8BACA8AAB9FDEAB48E3ED56BC0D3E4696505E16473CAD93D0559 54E8991E7F146F4D4C9E3DFD35012F5830B57FA04BA42BEC724E5708FFB6D521 B209D2F6CDA86560921C705D6A99F822DD3B182B0BAC8AB381653298B82C86E5 098FBC2E1E30DDA83919362D1BCF4D91702B16E849E032B44EC2482369B4C342 211E7382390388FDDAC362431B45DCB55FEAA7C48C30996C47B0E21BB32FAA7B 14D6F0DB95C450B59975CE25D65E727148BC7400E00C249A415AA52DA829F547 8D7AF32D029BFB27EA195EA3E8A038493FE5BDDFD89597C420CA1ADDD2D5AE9D D3BF13CE3B530D78BB7413F47056F663395BEAFAF4002BAA6E9FFD3F1F0C7C72 03592F5627EA49F1C0E8C95813E1C30BC256C99A2F34A027D4552B650B0376EB 9BC2482C80F19BD6F9315C71A185EB246091F6D7D019637100B555077B1549FF 27446A2CA0C8C815B6CCEE95CF19B78908DEDB25C1F9A5E6C36FFE65E0A8F694 8A3E847529C50351F6CF88F1F3B901A78378BAE535678A6C60D7DF4A00505B14 FAFB1A1AE87CE09E1E90769C046C11309AA7BD8476AFAAC0EA48E6D32842E0FA 10CEE024B1B178D8B9A15E29F825E42564A8F8F1E1F1EC760FC03F1D5773DB78 E177A95C3D2E3FFEBA469404A866E662D217FEF7A99D6BEDF9F144A2A8B97542 9423BDE10EED471B99F70661A7AC7A260C6C32EB4D00F21F7A3A5257EC597EE4 885981989562FB08DBFCE4ADCBE6D9A1C92F6E9FF65A23BDF943835BBB7C29C4 0D7C987B626819583D4D52DA32BF7DF15C21BE5BB64B575C7F4B149AC539ACBD A49DF3F0480DCD61E3C14BBC956DE5D968E74DF4141BEB0106E6C5F7828E4F77 4EC7F0775CF320C26323EBD09354B3E2A52973E75E54CB42F6B0F5C10AE8A8E6 EB93124C15AD140C971D2E2D9C2B5275F93BA3B01556B72B7630CBE7AAF3D997 E82D11875B82071FE770B13C232388C07F2E6F7E9C6930F4D7379BF74FC3436C D301123050BECE20F2BF95FAD2E57FC50203EE6EC6D9420BF8C218D3D2F8B236 6572EB16DE1CB2AF00CF19C56BFD8D333FE1DA4494933BAD214701819B0C2ACE FD02F0682306A6B0039002B0B7095D992A30CB675CDA3D4B196C447F102DB4B2 FCE3AAF81D94B2FA40B31EAC2BEC613654B1D885EA590F675E6106BFD0575B1B 4AA50D0583A2BA2F79AFC2EF5640A9EDF12F6BFE45ADBBBA43B773B36DE8DD60 C4BB8FB6F09A334FD947877A785AFCC4F9D366326F5B609ABF1E0CB8942560D7 68D0FA410EB83A9BE859840A9E024FDF850DCBF5FA8D649B40505AE64B1BEEA3 6776EC44EA3298203B09990EAAA5FA937CB648A0377173CAAED6432A38B48DC7 906B730B6BFEB2B9B166526D1E8D4110C6A2A4CE1ADD2D0C9C179621F7867669 31D3A28EA97D1281E80B4B6A4F223D1FF77F8960CDB83E5768F3A8FE52120CA6 15164AA799E18FCBFD91697783BA537FA897D58726F5F3BAC1F0B20B57583374 35837E9EE8DD0DE39B6CFB69EE47ADEE4624EDF65E43781EDD056024FE108280 29E5A39815F494C65020B91F68D1187F815ED8A312150B414D9DA84F542E0F15 32351B82F2322C9200F987E477807E9E4051D4057240E99D42E6852164704F26 81A939AF1E3BD237C4FA341C702F7AB978F63CBA8DF745DC2C57AD5511D89AE5 B4A80BFC57B1A5CA1A110D3BD5859EF41959EB364DF07CE50F709B30EA099EB9 01C010ED4F4DA9AB062BB8E10F515559D2FEEE69C579859E43962AF7640A705B 2C3086E862AB4297EF9625C58AF049BDC0840F9562D8D8BC686CDECA7D4259C7 4C86D8C92909BAB7FA09AA2E83B4089B246F8B4AB7A086C5B9943773C496C62E 9E6344BBD213B44C821CDDA42B1BE933F74BC8FDFD0A85070F50D4881C7E875E DD689E97ABBF6AEEA6E8C8BA377BF3E4A8EEBBB1D47FBDAEC3B88462A62CF500 727EF93FD166092861FB67303490DCC4504B759BE754808BEDD580E6DC38223B E02EE2D9BB8F32E2D3386376F8E49A853F7C81650DBD33E23437EC98F4A6F7EC 12705E52817A7B647F4CDE1B173EC370C78589E329D93C35895CA8B3EA2B945D E30630DBCB2B8ACC49846C7835869202FB5231ED9167F307CBA31D2DC0B423D8 65DE2E24CABD53913C01C388F64BB66976FE3B0B421AAE861E0C0D495D5E0B26 1D207792F1072BABB49156544C024118BF0D239BCB1AEF8AB7F38EEB34C88CEC C7401AA6177E9B7849AAA081334E04A2205077A90C0377A363F22091678371F2 36A088CF84558630C3F370FE00FE97209AF40D77C6F70B1B4028F1680FF6268D EC09B05DB3F8DEE17678CFC46AE78E02DD01454A9A8ABBAE157086DDC92AD22B DBE7861A2909232DE46FFDB6FC84989B2B137C564FE84961BCD663B592FF2A85 A65D7B595113AA7DA8463F852A28233A754591A5F2D7F70649A12EB8CFA35361 1410C7E2F08EB5353A91CBF2109D6E279758B8E458DC7737369AA35B330A9229 B73DFB9E1745410440E440DEC966C0B21349149E08D57740773B1F17161217AE B0605236A44353081EA2248CBE9E8F4A0CE1499354F6475C10346F337227B8C0 2474942B49CF891C5D0953B1015203B1BFE0A7528C900968D16A876AFD9BF28F 43EAD0516A38FE48F7091219A717617CEF422F7E2054F3E40D7D6239F6744E44 86F62AD7ABB61DB0E75B245B44E7A6FF9D72DAB469A07D8046DAA059CA891766 1420C7A397CEFC7CBFC41A09C54FEC6E77312347C14CB8D87B313A0E7F2CABEF CEAC4B9E15C279A18BABC098027A02EEA025F481769AAC7A89F9F419A9EE5908 351B0D25A2F9FB805227F0ABC3D4A87C63C59E80B1BF915FBB1E1E164568CCEB 1EB5B1A19180F370EBF2DD11827844584475357DE9E31A138874E567B8E1DA93 FC5D6084A3737CA8EE391773F3F91C243AF33013891B4E7DCBA7BBE1E06C5031 C3C0FD60806B7052C5F7B069BFCF4F879914D9C2827EB53C505D5C738E1564D1 1FE8A3EFE5B3EDE0B766E816FF02473739FC5BED647CEB758C6D7457ACD5E352 1C3F13E6F1DBA43FACA8FB3D257B24902EBC64B10C7701AD3850BD845140C3D1 A6CB630AFD8E81ED647D65D7F51803369D37DA44F36D8AC77976AF53B9C4E56C 84D5969C27EE9DA518FBBD8430D5769AD02F28B6036D5D8AB73C784734C22D5C 7200D0A706326DB04C52907DC99648D46F2741B3A9BADAF9040F2CA68642156D E597FD6BDBB5658C87501440DA17A44557EDDEF1C576F8FE343A6E2DE27CDB35 8E62AA7C8367E3E44DA6E435DA063BAC3DE82D73AA2A147CC5A844187D29B83C D12D91B9018718B53C9CB11CABDC9F7A8848C19E73E1DA7067632DFED7994B8D 3A5E1260D0315558BA94389D996A960836FD9C7570F02C453129DA181B2BB9B6 56BDBA69A47729BB3EE50403667025273C0FA725D6742B32DF5E58BAF48BA6BD DB77F2571F3643E792CC757B8F1AABD13B60965B5F1AEFC5108B68126149F4F5 F54E72341790C7D75372F0550FF3C9FA8844DE0C6E71C261F94C2A763C6853CB 6179437BFB20949F530804A81C8C71B2E04531E2F3E0C158040763FF38F69682 F8FE6FC7F914C9BD77FD51B7F533FADAC22C819B6F7E3094BA3B4F96A74E43BF 240DB5BC95B8577597AB79D6ECCAB0D65EE279F5CB8527B05BB521EF2F7F23C8 42349BEDFD0E303A7969A9383A6290B9ACFF7C7D402EA8A7C9517F01C28D31A7 5B705C785F6418B802A18AB458C03291A0751FB55AB25515926778649BF7DC53 8E94F949469AB3EEC16FCA42F98220A5EAEE73D6E82C71779E8892B2BE652796 E12C2B6E3D535037013D60F8211EBA7119383CEE9B06981BFB98666749064BEF 338B4AD1C6300DA217F38EBF093C867A7B019F1C8F4C64226FAEFC38027AC7F3 A528689C44EC4CC0D0612AEF76650826D2B16F53675A57273A78A911647D112A 193F579ADA161BB62859141F9893013F55D636A595E532BCA11F26E5846724EE E6F3026983BA6E24C1E462CB599D2C6F3E7C0803244D9A773D1DE70325786EF5 C42D2E9F3DDA5F7108E3C28357AD1F088404AFF56EF5BC9ABC92A32BD46FAD66 4BF53BD32E3A6781F4DA33E25E0075638D941389DCF2D5F3FA3C9AD7DC26BC19 28D04510B6DC27C7C6EF0EF6189968C8759920E15F65108B389BAA1D2047B977 E1818381DF9FC5FC217DBBDCA80BAB7B98E7A00A97AA3BD47EF50ED526FC8583 1FF5B2B4B470642E3F575F4C0B1FC5EBBDA263F89E6D644E2F56DBC6FB50D23A A04A2ED571997F30657BEDF19D268F69D7A624FB11BBE30E94448708D077A238 CD4543C8E805BC0DE96A0F4E14E721CA75A34DF4F911034DCAF94C190380D55E 77BBA860C105DCBA06BB201281A02830F8FE7951855ECD7E13A2514B2EC6A93D A40D690A17709E21DA5305E3DFFB395708581573005A777EAFA0403B2F6ABC0B EAD09C5C3E2B111D8E3687DDA302B8AC5B11341E916A63832439057BC72B2E67 7BAA5ECF2A8FB4D60751A1F209BA3F80E2BDDD496106EE382F0B704B94A7EB2D 1659474F5B80774BB710BA2A744794A74061970230B044218212BF7C908A9F5C 8575922D7E0D13FE10CC1E548C182F402346C6E256C3C77E871703214488172A 76E46E6B5BF7B7704AA57E3C8CE8EABC9F8BF0A53538F3A09F27ABC005117354 39F733BCE06C01F617CA9552C01B0ECC3AD05D9C04E67CB7C194007C4C64A460 726BA5371B9B33A713C6B3D69A6DDA20E104580E1CCF7B0958E5086B31C28AF0 D645B982521DDF76581C7DE21C7FA385F5A5AE637169427D13300AA66B53DBCC 4CC79A0320A2C5379B7A9A54AC967163DBFB993753FA7AF4E4F7AB3710BDBF8C 3F10A9BCC0BB17ADB5C5727895910CD7CA7F4923F00B07FD16318E0A53633A3B 0501EA6D8851CB557D80120DF270B85DC721881CD897BEB71CD7EEC64CA12990 E8E580E138EF6F9EE2F8EBD3DDC3C5F63AAF381ECC7350379646788EDDE61725 C72975D2DBD54F7E7B5B1DCF78969BBCFDF726C8F7CB93F39CA28715C943C782 5CD1C1DDB42404E24E079ECB45A8C3625039AAE73D365CDE69473537D4E575A1 1D017E12D1FB54B41D956915EB6315A82EF3CA876200D5CF0973CE5F56649FEB F62747208C08C8C61A0AE81FC3A538B16DDB109177C7A686A256CF37D55DBDA7 8F807AD40060A99A44BEDF27C3B7178199E750C91119A7AF35496F6F1ACBD666 B5E1C8F49FF59AC5C5648011E2D0F7F85596705D4DF9CA26541624DD059E8E70 4E74F1743A6C6DFE15BF1FAC3CD9A004F3AD0828489706818A60C1661B9E09D3 3F18885643D21E8EFFA14F48E22ED8124BFBB4398024C177B02C760A59F7C0CE E1B619449022B819131DDCD178F826A0C2E9389C2B8B44B229F954FEB4D5FC0E CA84B53501FC1767BEED2381CF24BD89BAC6BFE1868C78416159F6F933E7C828 DB743BC92B2EC3DC2DBB0E14F569EF1BCFF9182C04627D1E2BD48EF654850CD8 7151797484EAFF38C38F8577737F5EE125EF08565E4F6E6603CB9CAFA165A355 4B06608C939495934D515A13D319F3F8C4C1425363C897D025D28BF1A4BFA09E 0F97561179C2C0F030F0B6A3C8591537506D9FDF232AC0BC848E517E61F2AB95 88D386584AB5F92CE4C68D1F419A32576D47EA6CEF4B37946B1E3DAB1E67FED4 A5B70D62A9F69C227C21C8AB490DB86DFB4CA788B6CBFF8F02B920F739B141DE 1A095167465D82714F492EA9D2B4F7BF14719BAB487EF25F8BD1B377FEC95E66 F3D7020294E06E743A606D61B27DE20252F211737C4026FF7B9B4945DBFC9809 8E1594CE15A1D7E5270B7448CDEC0E7D728AF99771E64A43B27A041FCE6B963D 42B6E1975F5F8F8C26602DC75D04ACF27CB1DA2B0841529E26CE6A1D0E5E9B31 0C191C39FDB29C4505CAAC095E91619AD29468DE658EFE5D5198FE5EEFB0A2E1 4D6A7F1BBBBE87D543592D0E658FAD7B5A002D6464C9A413D8952C533DAE8507 B88888C8BFC31C3F8838653527A3AF640BB9CF67FBB5844FA83E7D9D51D801F5 62C12CA2D6070801067033521249A56C5B0B77B19811FAD4951E34A6CE5CA1A8 443E4C5B72CAD2FFE1650FFF90A91EE8D7DD95D77F681C1858857EC9C449AA1B C0D7145473917BC9E1D8D6A691C91E1A9DBABCAB74BB080F506E992C1A974E26 00C556FE22EA28DF85CE94B3898AD28F137ED56D605CE095BAD1AC60BC6B73CF 85EA4ED98FC0ED5971DC5A75F289698FB94A4FEA6479479FB2A9BFED1859F69D 1EDF8BEFD567FA71B725B11D55B06CF0E95F817DD67612B41AD48934A4D5ED7B D888DD698395041DB1C9290F599BF0ACD24AD9EEE1ABCFEFABFFEEA96A02D292 C78CBAF56DC3AE9E909A2856E2614E2EB9D4F46289AF8248CACE1CFF69C66F94 F5B939A523DD14332C225110DA3446A4818FDD67B5D16FDACA990DDE72B9F10B F3924237D2B6069030B76DECAFFA70FE97F5C5C684A750AC53EE37B1E27C5910 48BDAC0DE147D16BEA29E4A67AB88588CD8F3B50C4EA3A18D81778949CB17F14 E4B19BBB9FE53ED4105C05FC9180CFF9F59F956CA0A6D11230499F04724051CA B98968E61ED0DF26ACB0D0EB7EC9BA825547B42F4A439AF0F1B4D4F9F4518ED9 4A80B709484E08438B6D103CA4F0C7C8CE75889EC2C501A375FD8D91722D5FF8 195D24FB5D569630D94FDEFA35A8D881FF0271B3D451A884D106735D4A2361A6 D71626BBDF60991E20045C1B980FDCA1F436C1EC063C9B454E55062FE19F88B3 C84211C2D38911CCC65C1B10931EBC9D633FF04826D1875DE425E69D60905013 3280E96B205088FA4C3AA2665B595DC5BE5AFF1C29FE961869F3A03AC93569CF A1EF8D26E4FCB55CC541FAD73B55A60A9AFDB07C4F26B7AAD34193D5D3E55B6E 53B7E8C23EF6AF8D363C59A59C1C5DF268B43E3BDE031C960662E3B308BDE103 5717C31227ED287DE82B9C1923F0FB2885C2AA2839273128EA545CB9704CC989 C4B324BB68E070E9F0810137F4B1FDAD4B7E959872BDB8929AE4855EB15D88BF F1A10FDD74B735B9EE49465875B67070F6D6CA219A64FA86934A4CB5EDF7073B B814B8C9892EF9A90129E3C0D84BC60C0DAED6A7CA8EF9164BAA7B3B11736AF8 C58302F9578CAF243178E37C0CC8C3C9544AFA68952BF4B02890A0D000645694 7AEBF900234A5374E199A5D90F10E57A1C123DEA596AC51BFD29DF7433141F90 E0656BECAFED14399A3CB3A7CC99D5B2A8F88FAF17C9EEE84C08D0EADBC15B41 7B21B8BF97FE52CEB94EBA37CEEB39EF757F7FC8A76B150796A27C646D5C85DD 69AFE8AAF7465D0BE73B348CCD8E6493AACB6CEA5C15A9636C2DF301E5C7F72C B8C6BA861E90D2015817619C9A013CA9E7D22D26C6E8393187F8179E1693EDEA F2531A7555FF7BA758D3792108786E9745DC6B235D02AEC8A65A45CD310169BB F8AE3BA1C8A88A4C2A8C2C730F428FDDE333C75558417E41F95D6DC547E0AE93 134F547C8F7BCA1D2FF766A9E2A2C799C529348871F5A56D5B8ADEA3B2A11DF0 545A0A5930AC1EB9B33D296DB9F1E8B815B741D855622350EC35DA65E002610F 4EBA010D0E018E168377533CC24CF7F4B79C90FD7C4AFAD40756621200E45012 6C65F1359854128910451346DB93A34374EBE00140D3BB639CC14901E7C448EA B7C6F6D76DD96CDB8910BC20869B7E235BEA990DC962554C1D92EC9625813BAC 252E58DF9D422C9C3645A999A3F25B5ECBE2B43926E2E9951E47DDC1E302FAC5 921AF039D110CAB81962ED99254457E99A142A2F3230492827806417B1480691 BE5511A7C1FAEC3B11745B30A10B8DDBFCBAC3B3B8122115F3E869C36AF8584C ACCD78A3B88E09C7AC348187D3D9B650827FACB330B2492DA961EAF8CBBE87C6 8ADD19B167EBE1A73EEFD7CC9239DBE4E8438A4A16A28F97A1C6CEB14F543C23 238478AC9630CDC4CD3A01C8DF7E06C8B8F033A32D2B4BF1C23CAA5366367DDC D3CA457D69489D0C84E56D50796B28F8BD089108F4D8C7FF554CC68309055B12 9F910D46D48AFF711073F5453D8DE7A781FD9DF4CF4B28799093DD8FC2055BCE E8129ED81391F18F26EED523B9BCC59E941DDED79B23E74FC37BFAE9724A9E24 5304601310BE6FF3B480C7BA9E0B72E4C6FC8BE2A0A9407109E1770ABC56FBC0 A8A44AC1496D3F41A74B8AB00435E679E7B107C133F3669697E8341B70DEDED3 48D6BCDD9BF9D336F25E5739A9CB1420D6F1813D1282C0E0EFBFD8DDE2C66089 8B82A466300D6356A3257222AD8B28F8185085218997DFE0FE1A1CE1AF554B98 A1699E9068CB49374FDEFFA433B638B71284FAA1211B65898C3C056802FD3AD2 3AA4F680922D437146E4F7DEC9CB8ABF1A8EBFCCFB7DC9B3BCE38C8C4F2A578F 51B3AA15BD2BA58496CF4BF26DB0DE0CE1214674239166AAA4A25606920B81D2 A0AD21E24B3AC6A74368F9E7F116BBA02DD2AECEC99F41BC3D955D43C2E22F2C 7C81B1EB554351D47461805FEEF5CB89426AD58246617F6E5135F7F735822D2A 8A41C2A685086F145175154762EB694EF1A877670A51C4A86139E64063A80933 61B9C6111F450BE26BB644316FE30986368945EFA43F6BD4BE3840F578C6B7E5 64E8BB87AF2A7E2F4A8B1AA257C2DEB9C8BDA8A5274E5076756B3E942A44F1BA D26498BF571F450D904733A0F796238403E5A781E640330D70AD296F6D74B679 B0B1168B656E9B28E4BC7026FD15197875D89A72696FD7B20A3EE4ECA24B78B6 6391F8DE690ED48966603F2186424B17A28CD3B64BE1E3768D8AE01954A4DC91 CDD6F3A30D3C4EB5F9C2CE00A5A64086FFE87EBD9B4ED432FE59DDBA942F72B0 F6B3C8CA4CCFA5DD2BB195FBE297F6E65CF6C06E9D4475EA2C41D61D39F0B25B 889E1EF856FF0817142ABA12DE2C80A2FBE0C0D98A60952D93E3AB87C644D4AA B7CD2011876AD53DE27BB957F69F4C4E48B292D916CEE8BDCF3AA2FF9C72E580 EB5482E26EB7719FC7BEBAEA7102D55048289FBEF5C5829D96A437F4F7CA57CF 9FDE380071F7859DC68EFD00288063EBAC1112227AF649694E3D2D63B6AFDD3C 7702EEE2F4ED8D760D2023EE1193D3266AD408AB8A3FFBBF6FB9FB1E8E849F75 D79AA064A146C42EBEC6B1F5B77A02D9C92DFE729DB8F03C6E67E9587346ADCE 213F08F02AE6C6D2340E8F041B212A760F0EB6D4C4F7AD11C0C7D003C384E9EC 8009BBF3B5351BAC77CBB2DEC5547D9C9F2ECFEBCAB4D48B5985E891E51C7BFA 0A02C7B166565EE79D8D5BDCA41C79C69399102BAB4561B1171CA99A57550363 3231BB3E3F48BEAE734E65310AFB89A170D7D2C23690D07050E6246647B2A3C5 BF170818138683EA1B4DEA8C2F018D0FD5778BEA72C72E6CDA1458BC8D1E553D E61050AA240D0677D9DA9D9C22810CBC6C0E441C02B27BEF9BB48027E07FC495 9E83F67BE50872095AD837B6BF75C0B5669091CD4923EE8929877CD0BBC624F9 17B90C8D5FCE286F68DE2FC1508373EE9F9FA6F5A3978C75F52DDC397E368A0B 57F5B40322053BBAFE6C7F8F293E0E3BACFE054A8AA7DCC3FF253F58C75B9D12 4669407237089506FE8CC6A24A1025C8B4673B48FF3174C042C4D66BE2AC584F 6A346027B020024CB9816965E99F62488D47EF144740C30CDDD2562F6BAC56EE 04AE0AA4421F68C2525130D92002CE82F361624166C24F7C2B11C69310B93719 0947BA4E74BA25398727049E1E8C94669B709718B2BA25D889BA48D66B0A9EF9 173C6CF93116BC0DCE2DD62D2A936341BA360D901BF23D9A6579977464D12A3E 14A083FB37A4049BDC5F4D9E8D49D05FC4213B01CFB0231D2B03F552F366846B 7AB75D68EB74D57CA505C571AE2086BBB8072B00881A57AEBE38304FD73F20D1 B3A3F4DBA7CD736A475A04B7785C64F8802DD8483C75E50F385FE63D063E7ADB 0FC45DC313B0585C605D1529D226FE08FF7ACA26E0CB2C1B23444E976107731F 1795EE18D69C11B9969542AA52BF0D3C4D00862494DF946B74718DB8FC586DAF 64BAE620E3C1512720B0ACB343DA448A0419975CD986B40D91192158129232C5 85E18BBA914D219AE5979CF98BC9A4006687095BB53215DEE575D4FF7FDFE94A 25A05F1CCE048E2F7A801C7AFACD586C218C1A04B43F167EEA5D6A4EC9DB4FB8 C2E56225709D9AF95C88DFFF3B7EB9C337069278D51F0824C96DF582C630BEE2 C4DFA3E9C9CE76D1B52A23CBAAC840EEC8B3786D45834D55942B46B6B4C612AF BFB077F21E0F7F0EC6436BDF1704EAC52789C75F7900EB441EF83E37C780A699 2E3B2F5222D7FC4440FFBD93A01205FC7E64CBE9849BD01FD4448B343FEA4101 9FFF4E1527F81F4DF3FEE2F42953C4BD655A50BDC6EFC02E25A5D8695544E166 7ECC195622F1911EE8D637DCEFD8686B01A130671BA5597768246CEEDB1DC252 214E01AB3AF7AB7E3D766C1FF37CFEFC2FBD4448DE566042D46B3F2A0CD85D27 52F4CBBF632139E86B8A2669321B4488AEE0E3EE016440B026BA4F3CDB798BF5 1E026DE9653F2851D1B095C7272112CC642066872578C2063921B1F1DC1DC37E 6FCA614E9EDC7EFBCADDF112E3127B753D0DBA1F920964D69C779343ABB1B56C EEF95475F7CCE12C08A5AC0502C65284DD6F34C8FC31E6D696D9B1075B6CA4E6 8857AE5D9267CF640DBEB733B3FA1DF1EE67D578445DA58492A8BC190AE91CAE DFE1F1C833312BD85578E1D63F8E593432BE3D4A9307127750DD9F9509660664 92F85F9C97860433F1190C2448AAEE97CEFD9E048681D41D17F5CD3B8C6C3AC9 E7D46179623C806085BB5D23E6ED26B2D900515216EFC224A9F25660536467B8 B47665F6514284E567397A7AC78784A8CF47B61DDC9A66B74C04FADC5074B8C0 476EAE541AB9F94E990FFC31CD94CAA9E93966096383C1951B00C4E79B51A728 7526A4FD3A5F6E9D673555CD7142C94EDE73E8A3295341698D777405898E3B4A E149CB4E9EF567CC18C35C3BA9354CDE55382A6569A8D0B2B7453E5008347B32 8B5745431E577B3525D343EEE8C0CE5CBE1CC6D3FD13AE8C5C9F672B10451183 3BDB33698C0D220902195138EF44A545EA6092A79C9F4AF24D73B735E3733FE6 67E47D76CE584299B16295BE997949021F949E035F49593BC128DFA89182F89B 2FC9EDE36D2010B1BA62A6D900B00C4524AC6981F0DDEE41043ED7500F574409 C275BD142BE36AD2F5B08121EB0EFD58E8EDF388CEE211D4FC3C2D04D09E8757 17CF2869D202B2302BF7F5741F4DF47C1D76962A3DE9E718ACF684751BD968F4 6B3488D623E734451674276CE47A465AE3F50B50A938C17DAEDBD7E40737FC3D 35A709ED283B930E0381A174F3804E78BDF8B8761BC37179A96FA636127145B8 639577E80613C9A547AA8C3441C85E8408C0C4C1A5143A3179F9366DECA49F47 324BCB48FFBF44DC15A98DF0A4F9331BCD908E5D516881A82ADA22B906A85015 6643813BFBBFBD2790451F64AF61E0252CA23D2C44BB92D546B50DF7C2F5F3B9 560117B9EC0D5DEC65A4404FD7CAB019E50B6C468DA7B5D2239F298DB98C83EC 8611CDF1D5207EE2F8F817958D2ECDC5557BA2D8023B69FE98BF4ADEBA5610DD F12B997F1D998441952BD2EB089AF2C6CC99FAD2E7E9AF14648BF99A09355470 F32C0A511E8A02FE7E24F7E535020C6FA0FC4D9015532467666B0192BAE64768 756C8AC401A71864A830359DEAC2919113979FE4DA48292EFC5DDD97A53377ED CB29E122DACB9C126F687AD2684F4EF885727C84F09CA8C579D48ADEF1F47859 DA6848081327E0316788D90F3F59452FC9EBDA175845FF0FD6178A0582E20436 4BCE9A140877B4DE31EC9006341568BDCCC9DF9DDA0B086DCF1D5A8BCE4060B4 1F13F5A274242B4A0990BE59BC8DD36A2AC264258E19CFDC1AA63432D07E9DFD C35528A40580887195D79101345AEBBD0041A765274D09780B2BE95BD42CD1E6 A5B490374097FA0E5B6F196A3C47C18E8499717C07A36BF3DEC7064845253515 E0299143BEED08AE775CADA4F8ACEB96D70F08779BEBF179B2BFB0DCB0F1C126 35B6BAB5C1F755CC9C40D5506135F11A22F802A9F3C79342B6FB9522729E681C C4A93373F8E6DB2CABFA5B7CAB4C243C975EFF5C5D634D4D311EEFADBF115E41 1C3EA696F82803A071B80E18BE67F7828DB353FDE5B51073E86E68486CDCE01F 5D79F3E3DB087505FCEF1F9B01908F1D9FE1EBEB25B6DDB40C119D5B28DECDDF 0F579BBDE6CA59B903368E3460730A756FBEBA62903512DEFDA5CE765C479DC4 5658ED736D9EEE0CCA46CD2676C475FD3F8E2BFEEF43E7B959F19468FDEDAB2E BDFF5ACA6119413724BA04E9B006C4AC43CF2A16FFDD90A1E46F52C661328295 B245F8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /UniqueID 5000831 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA 53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A20114 2248276B7E4F8924750C8361FDB1FA328B434499FE5DF14B96C1F5D03F1F2702 C77057AF82D3982C5EF8EA40D0B923249FD9810464A9EF6D1A99402DDF08120F FE77568235A193F5DAF57231E5095D4EF505A0FCD8E538D53C5E23E226B487CC 568F94438B050A4ACB53340A4054B02E8F4D8BB42E72FFD1124BFA91C22F3F76 3F3015809D6EA1CDBF7827ECF8893F550132A618BCA2B9CEC7A329460CF59E2E 3F0E70D05F42D3E37130429C984D24F49529F647CFCB675C7CB79749E35DBA8E E8A0B56EE8FD852899BA52B789CF2A5D4F1C948FD5F5C57DC8475E65C83FC690 28EDD11C5A7149D68B924EF92D73A70D37AFBB433D1563A034361A4415C1722B 7599BA7ABFB5D0189D99B2C48024088699820761A73762B4BEA323121D893572 DB414C845757270E9F21A5B2BBDEABEC09C5D030ACDBF5FD8FB7F9D62F13A93E AB6060F37CA8DFCFEFDF62CF0222FC4298247FF97BEFB153EB48A5654F570E17 1E1DFD669AD81A441A98F39A41352DD1447E6B923B88395230C74CF703375B82 8200F0186280DD3701067721E2DA2947A499A0974C5ED5C7BF3A226319D5E60E FC29B2484C062A0FC798C291CD5DF9CCDE6D548E2FD14853CBF563792BB38EA2 29E2FF53230B91825B5D239571581541B8BC60EB5CC943808DE2E587CD56AED3 BEC3DAA382464FA0DF0DCFC029DAB0DD3E3180ACFD8C81AC0484F0C096DCBA59 430CF139C30F8E45F15CCDCBBE3F96907ECC42F00DA70994C7E3DA894A5E4367 9131033E06F1AF4FE22FBBC261B490641D914837EC2715CB72E5DE97FDCAB119 77C8401699DE82B21695A2BBA34DE7E23FA3E4506CA817F20331D0710D2C9B08 F03F2C3322E96BFB5064EC80EF4DFEBD8367BB7EDA4344562CCD23259F7ACB48 04A9AD253332216DEF772A5438B95FCE3393CCBD5CFD3564B70A6B785E3FB2B5 A90A86D161B6F70006DC30254CFE76B55FEE58F2DEDC34C6DDCBF1A75674F657 2214FB982FDB68CFA80DE2485479759CE3DC6A7E73ED2BC4F1E12B16DA41A1C5 7BFC746498B0388AB63258419384F06BB89531E3CE7A320CC929BBA524CE6B78 7E9523EAEDAE6E724E6172A76C8B844B721C4CB17E831211FCB830B1ADDDAF2B F101C2E3F973E3EBF963B70A5B403CEF7E3D869AE8461BA22A21944F954F0784 911D337209C32F1ED5585735149343A8DF86749E395907A4DF47E3DD955632F4 2119F02BC4688C047960306B85C79FA5011A0A947B3D998078763E196AFC24C3 F4C5B764B1A90C2FC34808D92BB87AAA5328D35AFC5F6036147C906B7D1A3499 65C100A777CE69E53BB32D79075918510681B6932CDD71EA32D2B8D624249414 E5490FA6B660AB817752C9A70ABAD21AB8B1227D4C87532ECC8B504902FD53BE 5A130CFFCCE869C76BDE799CB07BE6E8A364CC42FCF642314329FA02D641D85A 20F2B7E13DEA7FF35CD9BA932B1ADC1BC32DD07EB048F4E87C200FC186942E89 9CA9E82EFC02119549CBA415130B0D98A471C970EB1EF7A3E8B7B8242F7E81C8 EF86B46A99759F12C62138634EF26C0D0942BAF165A40347CCCA16FC278F875A B0CC1515417283D9D093ACA02D40284BDF8604CF49C1BC391A14BF2FA0D2CBF0 FC6C63080242FB76CD082CD5F8B74D44AA03208458D4E76D5979CEED233CED2A 111A6D222DA6023A10721B41C8E3AAF75B687A8BFC5719E21101D005BB811172 4621B2493D36C2E4834F7187895F9AA31F67C06EF7F4C77B220D4FB889F8ED08 B29E10164249A7D5B7E5F0984DE91C1C5B28439EBD117BD235B700F0A962F781 5D085D110C2E73A70FBF1116A3089843598D04568166C344A1F41758470B6ED7 9184178DF09FEE308F775400B5573AADA47232243060D683C4E7850B70E7D798 802BCF2038A79D9C02702EF781BEDD831FAB3615DAE92498B0618859A00CF942 50187C26853134D471D76842C893C6D041566BC2A51858E41FC0E3DB1672B373 8F565BAE23909602161C8FA3B0A8CFA5B5A525EB95E477627C24707B7BCEDDB0 C8321822C491A5A86355857CB3BA92D4C5DC550FBCBB42A024479E71BC219C3F DE97CDDB5FC69007024B01BA460B522CDCF5D300293F8375127DCB1ABD94DBB5 A08B40555BA14BFC5E23F8165BA7B45154D3FF754428AEE97A1CFF07DFE06AE2 9C4D711D48AFDE0BC3A50FA23D09516EC4CBD986F746CACB8C95BA69DD20B1F2 08841D940741C960DB0E48623644599B17A04E7F500B64569516376156449033 2A8943AC82EBFE91990FCC2C99AEE28247B3D4DA7C5BF4DEAFDFA2CDD3D08BEC E4EAE749EC0F9A6A28850F201E3B2C79E920FBEA1A7F3CBE19F3F3B2BBA2009A 729D26431A31A7A3405F9BAB02A9F451A3591AA29334FCE6E7DAEB68DC34690F E189556BD67A31FE42BAFB929CCB0B6ACC4DC1649B03AE11042803B9A21C879E DA2E857A305DD86DDFDF10BDD0B7FE06FCE80BF6728A9BF434AA27A1FA11A164 D1584D7829EE7053D34AC69CE905871C3166C96740EBF60FE64730C11A63CC23 4EE4318CEEFB38885A3011812172A1C0ED6CAEDF62CDA8CFF9D0081F4B32FBED 6890FAC82FD2128DC38266AF0DE70FD90489229153F5D172B496B937D2BB8D65 2A86CDDB601218AD60E1B68CE245ED1D0E58CA1936908A114FC8C7A1EC53E3C4 64FCE5D1D94C899EC235DDE3748392BD878EBB8005B92F092F6470F435DBD0F6 59FF0448F92A1D6612BC766242754CECD05FDD77F837B411DD4DAF18DE438B44 833E0228C3349A29BDCA5EB57C81832D9703293BFDA307F8B3084AB5E82CAEBF DC71070017586387A94E218DF6DADDA303D892AC7198249FC769E64EB4010725 5704E6FD548FFBBEB2AF71FD922B8205FF782BFEDC44161AF9C6C366B837CC10 D2DAE81100064589CF1FD53847A0FE243383CC02D9C77E08FCF101D3C2C1C5AB 3177425910BB80B7626B8BE707271BF4A40B4143DBFAF11F30606698652A866C AC430FA8C48362C122C3D3E1A6CD487D49ED49B14270869E8D9AB138DFCE62A4 94DE6402E94C6923D5C7AB32B6C1C595ACB6B6C6D4637C0C33E5D278803A29C5 1970489E0DD6220824B012752FC60AF3D0CAFBE07E0D918E62A723A9E71F504D A5284AE855EA175D724B976D989CC7BBFA69019BB3958B7D61978959C2B12719 788FC7AAB8029B8895621F618DD67578AA066BBCC56649293791A1F07307A232 58EF97F617517F20843F0B317C6BC6F3EF64AD70DD35E6B25AEE4345CE0D3DEB 8DF2284BD0EE20D326FD65F759826D48148C4057DA66FE14CC14ED33F79B2F17 69AC90656F331371D13685AC5090A8653D3B256C5FCAE10A86011E25FF042BED D1346BC6046B0FD5BF7B8C2100A5CCE4DCBF9E882191AEF91C300FFB3EF52F03 EECE89C7D8B46A2C8F993C0A47B3494099403E9042EDC07CB6862531B2024899 A378960B55D3FE5998290457BA27337104887CE83A7CCB5E243097A7A86EBB37 600E7AB7655D3003A6E37AB275BDC82FB30F8E7AA1072AE291BC692A7B8C913E 0FE58AE6C100BEE929F86495D735CD59D277728A4C1D8CDB025785F09D14DCFF AC86E32A4A582CC053B4A60519EA32000AC3F372739D6973CE3C2DAB2794D923 AE6379DE839B195DB3A1EF5A7D1C40EC956F4928CC9C9BA7ABE78135DE7E8FE0 0A243119A8A652396BEE0C84C2B0FD19FC42B64CBF9D22CB75663FD43AC3EF1C 555611B1BA1D45F85D27FA3DF97F57C321AFA39566D5796BD7DA9D776214C53E A8ADB3C7478A2E779597D1F66C6E3B027E29C02A32CD02A6C8957ACFED6390F1 11DB06ABFFF7AE18923D4E4EF99EF4E0F58245357A9FF20283BD0A045446CE2B BDD97A4856CE8898CFD1A69BC87A1D8B155A9E3C337AB860D4B9C518580AC24D C89557495A65113EEE53502254B60A6457C73EDE878025E25760D1BF4050755F 7E73C95A73D7D83BCFC1EE63FFBED31D55149F98BBE60CB0075878C088C1C932 B3EBAA3FA7A98E01BBB900BC12C83E90E2E51BBD8F2C1FAA5DCCDAD3E89368C0 2441328E2963044B19A6014289D088C0434921CDAE975E9A547E41089F4B24A5 93435B3698FBBD0D4765CAD1DB922F95AD9452C483B53BAF5091EB7C5627BA57 0B89514654C04DF4552809C7C1EB967137FEA20FA1D92D261632AA66AC66C2BD 4E6584871E1CC55B702F05A97389C51BDA4FB131E9BAAC3345792E0657089179 909CB2EB0529A23BE5FD4AA804492AD5466AAC0B6534A63ABA1DA4EFEE1FC003 160F7EBA31A4BC54C4E327E40DCC1112B17D53D4BC3887FAD8189B8AAC3658A5 B44B1F10ADB62190E9A097637951B18DB403C20D93A65F602EF033D3EBAE895D 02CC3E72176D6BFC26B7AE9024945BC787B07310628D702580C0622EE5B624CE 45F40BD8C49CE83F7F807D586193961D3F2E802A57C299070B2D0F760BAC8879 7D619D7356596434A7822983D64F157ADADEEA2DAC8DDC362504FE79EB29F3D3 84354E9709F5968B0891E10C66EF859EA472E26F0DA704617370757C40FF2A61 6005169BAF7B3F6AC6AD6F4CA4E92B666C5942946303D7E8F284619CFB0C23B3 B2CE3368C46FA4EE95B893B3987FE902D0A553962D230730F00960E5EB7A4095 8DB86FC8FC5E1B519A63A10EB05B239BD980614EBE9F47A630A3E9960D1B1B30 ACF15F2B9BA83899455CB66EDE2804E4FCD5390BC6184AA466B65AF9C273C6CC 4CC9EFDD9DA23C2B6EE6D41897D75622D13639B48A934B71D8B5727FD3716690 9DB0B5CB21D990281E88930682FAC6C5F4E2F6B6275648A15CD4976BD7A2C3C9 3088AFB5C74CC7B013013FC07C1B0F3855B346153B65C1DBDCCE354C46997443 F0D88F3A566016F9DE8CC72E2533AB3D608C3879CA50A44987521E4AA87C7535 70D52212A6E9B20188A29AC8EC5BBDC36E5905AE8A98D98BEDB04CBCB86803E3 9C11481DC384480BA84D6739749755EEA5D13825E2A73CE60C4D9E895213DA3F D17614DE23A4F5BBB77CED37BC0EDD509FC982B6A384D354404888BF640EEE32 011B752126CDC123D644359A67CA221B943FC9F9AD3C21C6A6C200E1116C4EA3 6342DEB13641F27465E8BA07492CE3478456F4AD33F11396C683B645A9265A8F BFEA4B15045B6D086722C4DDCF6636F10B0C7AEF67DF5263BB3C3B0205BBBA6A 3CBB91361E9D6DCA886DA4811976AEEBDF9F693EF2B9C92AEFF1150396924FA5 6773EDDB28EDD632A6AB358D8D9481B681A4132718ADF8114A886D485BFE3B3D 5E4D38E5993452235ACE90DE18F05D3D8BA1BADA1C91E115FB44D97F3950404F BF60DE067BEA3DE4107DD9C602A1F79DB07FE8B9578253DE009329954D4FDFAC 03538C871E0E861A27010FA65520E2D64538E16207EB2E7480E120E7E951E687 53B3A675C2B7A33C87F74C712C6A3F7AECAE4B93B854BBD64B290AD73F418E24 ECC55323BC26742A57ADD9A875D54845CC152A0387796B2D4240D8FD233B7ADC 24320EF503F00864E616875A4A78E5C6812E4C080E1A9ED6FA5BAD10CA19F60E 75E9555D3DD97FA9D4FFFDD0A7F1976A5E6162C9274BCF9B54E70045C2DBCD45 DB89D6132634D5A247EE4D86CAF91169A3828801D6C809BA93731FDB1DAA57FE 32943D7D3777547C5667A36711BBD59519106F08EEA586F6AC76000B4B11F0ED AE10745950A200C4854DB95E19793DA183C0D65EA822A6E4B74D958C3C04C3BF 535B18FAB3A2ED655122C1936B010C5C386C4B7B9F0BE1D3540898DADCEDC7EE 15BD873F84D16075241F458C0CB77190A9AFDBCC06B8F9EF0826EB30ACAD19E7 E6F677680A43F868621D5F159E7D4FA6D02298013A38D07B95215341D825E7D2 6645DC4548F7638FA0E7C6623DB99DD3E5AFF3E98CE808EB2269D04F2974180C 5C6835B702BCB803ECED3E509E11F549D99E104D0072FD0AE0E3368B8BAAE93F D7FE42F04D18D1334487A4E264FE55637FB75AEDC315E26FA1B786EB7DD8B92D FFD25EC6CC2987C62DFFA29E8AD556D63CB52C5AC6892B6E1FF5634AA04381BC 1511469606DF08C618CF6458060F97F504AC0EA6313834D1A7CBF35EFFF4ED85 5E0778A7C485E61DAE41A5962822016DB270FCBAA00F6AEAFA29A4EBAD761C68 209ED228DF25730626741D50E19D1766BB895830397C8C1A72DB3BBA55F7DA7D 4148C1D90B37EF217AC492993BA2CEF9F2842004547AE32AD8A8999B3077AFEF 7672A0D505B382E6A41E9FA2D11C617A44D5AAC2042184266017C39B29540FC6 08B70ADDC1BDC711390DCF933A70D9DAD03EDAF54F8C38C9EFFD8EAD1FF65D45 11AD1CA1BE49E98BEF8BA210FDC8F146CA563F9A51AF0B1178502382A7482EDC EF1E313E3AD947109B58112FC644CF77308D2A8B377F5FB494E28B64E96B3F2D 7DC3A2D3F8E95EADBE7C11F92CC922FE78E07900D69898F357910436C69B63DA 2ECFCFC37CAE957B83C5B9E232E308B5090BB2A99C1A19ECA4763FFE3C9BB3F7 E7A8A66023438A6D0A2320F3CABF171C0B1910141987305A01E08FCB9D07BACB 54F5E23C26E05F97B2D8D4C29C3442EC472FC39C278AD0BE6DC19D91433BB8F2 0745D9639D35B97D9FEFEFDB3AECA7C3765A5E88B59B40E00A0088440F1D6E0E 01792EEBBECDE832E58A843D333DF394AE900C45C42C756D27DCC4B6CF6390C3 8450BC057D44E6E83D6CC28F81E99363615CDB0AAA8DD56BD454491A6E9F6B77 455CA95CF08A14C6326E78AA6FA39CA2053D332E1218056A952D1123C1C73A9F 6021124CAB7F23CC38A67F3FF7AD39041A290926E85E75D9ECBD7C78C05D8E5E F004D7B65CA97608F35E17C91A8C3ABBF76237B4B171AC566A0B9C34F578D551 1FB4317A794CE695A872463510543E212A8E61CBC6D762730E1FCBA388369494 9AB9DAB46D412CD198968F40A60335DFE34F255581923EE62B5A8984E50B34F8 AFF6606331FEECE433749E039AA1B74D4C6A27AA1F6730A86A7EBD67BD70C0C0 0D3999DE78836667371883ACEBFD70A6CD51D417ABEC5B2324D863D8DFBA6918 8ADBB879EE3823AF3DBD47E280814FA603F4B13AA966A7F7114BB0130E518715 C442CB4AE0D51C1F8811B902D25E8B2515DD537E9292429711D725F5613182A3 4AC989EE031908DD115C98349B9695F13969A43395604C2E19CA305FD1D60226 9CDC9C26724DE6F6B4819262B8E8A1114F633933B8E18AF2ED71BBAF27277935 41590F61F257066BC3F5A53A41E4AAC48C871C4CD6AD9FF3781B6038AE360DD7 955A4818950DA028D308779858C29E6D010F28451A3676A3EBF13F4F82A25D3F C470BC73BCA4C342967F3F77A0B971E5AF9AC80D5595FCDE497B774902B89B80 A58E83E55E40AE05E9BBC2C8BF914FAA83EE695EB109B713DB0A3FC67E102096 A7719209AD328C46C3F913A6CB7C78A290749BDE09D0C5C7947C715F1359C493 26A276EB34D9E0D1CCE459296FEC388078992BB794AEA66BB7C80743716FD0E9 E1D47B891D95ABA42352651B832AF5D8777AD257FC26E614C9B1807EB829951A 0153E30FF02B63ED75A314E206532D5A6F02F7D31EF1A4FDAF1DDB327DD36287 EC0226F0823954EB663F735073878B115EF2B0B069543626DD0292BA4C59974A 3710A723D9C00EEB118E98DA3A8934845C44C3F988B4553497248C3342122E2D A76A1FA97E5D1061D824999E0A67025E4BF678088B6B57B444C290DEE9D7C3AB B6848C14EF2FC6776A47BEE20CBFE61F667E9132E00EB96A581B154B437C8E2E 9E16A414F99AB459D532768C7905A37AC6F0DFE133B7D43F58AA2D43C0B63486 E769429461C0C574376291A00DC3E084CA171F9F546AD307098FE9E3AAD1DD61 DADD7AAB91DD6C00DABF4E6BDDD8BDD51D687F2E1B7162301F2B80BFCDDFC3DD EC3AF5030F284E2B869C89A196762FE21725A7F614C16144E0891EC814DF7CF0 5D4D3F66D56EEBAB3F8539D890B7D7C869648B58E6A51793C213A5D5D335E27E 3C6B2105D07E8751915662AA0B8F51FBA97169A66CF2195E09125F056735520E 6FC8AE0C5EBC2BF6380C1C6176B8C51F51772FB260C83C7CD256573AD0F36304 710A857C900B2BE113C5316A1825771F94321863F2E703AE4412E73001758478 94610FA250C774178992AE169A24F246F58632CFC2704CC92439AADC4ECDBE42 A35B595E632698D4AB4A56A8AA56BA77F732643753E34F6A6372BADB7DC4B872 3C336F6A425707F3A484CB46707D39C785419AA3B53A3346E1B51878AF2C93D6 5F81B5D88FD4AD6B0250E16394EF95AECF15B3F00D4247DB499B13FE31B73010 D2494176F67B8437C97401626DF51355C93C404461C4ABB7D92FFFC765E0BE89 84A227B1FEA694D32FCFF15D3EACBF9D33C5AD275B6AB76D2B79A3E0D0F7EE94 2046ACA982FD57F2415B6914733CA58DA9AD53B5169D973C3686FB1EE4CFB94B 8099312D9758B884768E82043A6345CFC2D05AD742B2B50A932D310200EA0207 FA6F0F78DF0F234C27C9A7D15491E6729C7665AF2BC732116EA2A2BD75A83596 6E4381DDD537450C431BFDDF20A784EF02B1FB68D64EA9B4DD4EDBC17AC6C60C 38D99AF68F29D5AE73FCEE7A36E77A46137953E9846F5B8F1E89A5A184AC3B66 9906B2715E3CA27FBD9A51220FC6B0CB3D7A2A1617D3C6B1ED4C98CEF3941EB2 508605E64D3ADA65B6260F0EDF3B483A7FD014F88E32BAAB33541FB16DE5FC99 D77018CE78471A24DC42A3E0CA3979527D049887023D024A3002B37EAEC9AC04 2D5F14E26213FE6047D0F4DDFB27972AF90D39BBD19417C0E7D682DE0F82900F C24B570F2EE7F2191FEF466CEB9846B1F387324D5B12B9795A13D8D454FF23DE 9D9221B1DE88CF14649B6C9F1FEB572D2BB11470C5D4AAF80CDC4E07E72E4FE2 658D8835158AD7B8AD06687BE521A647752838BBEFC0C9356A0CF1B73542B6CD 1DD5606CB6A9F6263B799230463616775209C2B2B8EC69C0FB00BFF103053EEF D164BE0ADD2D7234F5B93D9C79DBACF53630479948CB151A4BA659D490BD6B1B FE49EBEB01949EA4EFD789DC7F584D2D0FF4C2307BD49844C0A09B1152699CFD 00451F12C8041BC3569CDC068613BF42A3505E1E1EF7C15DCE095D4837A3B075 A1B8E329A5A264BD10C3C78FEBF4FD5963C0443E1B36B718ABC713CD4980DA0C 7E7B786EB989FF2DFD627A6132E360712F222988A4E6459225F4438F7464B01A 9B7F2C6EE557F6BF291DDBCF5BB3381F8C5AFD3DCB67CB8D885C38CB5CE49EB3 DA040612837DCE5DB1A56ACC3819EAE607D852BF64EC9BC75371A948541AF8EB DC5BC4583E013D578715034B7753D0BC6F55AB54C87B7FC771B1D0140341736E F99D7610E03ED6EECDD1046ADA13B865E118FB4322880C19BF933549CA1E31BB DE2DB4F370E015CF1DCBC99D792297189D7BDBE5EEDE7E30EE6650F33161D319 6F6BD222E804A6507BA2ACA37284B25E455B0537185DAF8773008BD6EBD113BC 7B27B47AB8E9CC8B6A21BD6FB58E3FA32C81CC3EFE9135234AAE897E191A2600 A6AE60220207E885422BB1B48B2AF4D4CD98554CA3BD3BB720FDA9E8540A1FD0 4B15777D2A23C60AE4E9A80B1A9A6273FEFEBB7AA57DD4931D88934A91490B06 F5AEF60987734D8435BCB113E56FE6F3FB2D3A0C057DF82611163D91E032B44F 3257510434B96168D0A1C91C12F669FAB09961CAA5759CB880F7CC8581FEB999 8D73181255DCDE6852FBF100DB92B70EA8C7E2B82C5C2D1B069E0B126FB09845 1F828A67AA70CD628BDEF776931920AA91A1861662B30367A8B75F7DB9585601 F3BC666F1E422E884A49156FB8DEE987F064788373A9C98B9A01C5E8526B6120 177D3BA99D17A99CFF561B8EA85AA74FB443F02AF95BADB1496CE49FAB52B3AB 6284DDC0B6F8E286FF527B0653FC3BCE3A791536C6662EEF3F21023DCF65B05D 3506D713EB4CAD909E57C9672D911DB320ACFCC0724F25E49DB713B979A9FE44 329918977D00E41BDCB4A8BBC984FD743BAFA0AF1845BE4AE1D47428D124909D BE639284E91D71CF630078EA2FB7408731A88E28A9768961C52E2E3FA37F3FD1 E34F85E189D822C9ECB971D9CD819CA028A138D741DFE1FE8373E3A7C3373270 82AA6B286D19C1DD7D16D61326009A75E2F23A68A5ACBCD453E5516D9198C125 3E3C172A730443463B36110E4B1CE6776077CF23700A36A4A434C641331626E4 4591E792928383A7463F3264DA88C9A22140B0752EB0EFF7BE8B684131FF4F4C 19377AE97D4EF96532FD72DBA9570CF8F52457CA48FB99ED65B8AE6E8AC2F982 03B338CFD36CB681279E9094CA6F110BBD4D633629CFB0C5DA424D2003CBF6DF 1965ADE0281C20C9C872A1B987BE11FF533F03EB9173739D68EA0E2FDE0C5BB2 9428A037DAF9AC7560A3551FAD938B6BA40D5F8F12BE6960325EE234F255DFCB FD86DBAF8B027C2A34C8AA4F0D0EAA3CB020591A784B25BEF370C99AE34E2202 6395AE62B5B71DD4A551BDFCBBFE8F7FA64CFF587EE5B03A8445BF66BF7DF203 6ED5104402FB9B5560FDF3AD85617DFFB4C8D0FB27931073F3CA6C55E6E54E02 82CB95E852170FAEC9D6E26B3B49152C3DBCD5BB22F5B212999D21D23CF371A6 02E8AADD793585C7B8BED25D7E6FC8509848EF83DA8B0CEBACFA64D22BFB0772 D5C50A431235520DE11BE4F280049613E70B53629E6D79305EC6333BC8485378 25630D8BD49F12963C1EDA7FEECE66B6989C18598F9F1D0E1DF584F83303AF24 29A47FA93BEB04D73913C112AF4F17BEC47D7A7658FC08346AFE4B2A7146BD61 5DC0395C52A0920393DBCBFB31CAE13E8B0C1AD9BE8AFC3CA81066890BB79CAC C8B083ED7853EB74795371A2C72983CD9F35C771C0707D9140C22F7E9D148D8B D8FD578E160ADA08568B9ADB7075F426097A0C3BD72C557D7B8D808A1D24BA33 06E970953C6A952AB7B9FA9DBD3AF93F39D953992396CB4A8CA699916FC666C1 BF279C4ADF1615EE65BF22C3DC916B0F9F7B2CC54EBEBFC9E6F47290896130AE DE1B1B599CCC39208D4142D529A8BF191B99B1C49E60F969647EF6FF5304103C 235F10E72AA15473AD31B7DFDCEBFEA40B73D98528B9BA34115E2D428AF84702 BD9B3296285CABADD2038A505F67CBC6226A942561D5076803C8E57012BDC5D0 143BA3A2F5C501AF422AEFB95116C5C40BFFACF1BF7F663D35551F8B270ADFA1 7C29847D1FC9C91188A3E30D35A357033C213FD9C4AAFFDFCEE8E56D0F494570 377825DB4DC78A2E4910321F7A99CA19D8F63B6AC5DB9DD3D25A6B7BD9B59A0E DB5F0A25DEC3BBC96B3D26FAB85CE144D7834A1CE02AC05898F11B8415A3CF25 AC20EA39612951A5AA6246DD379656C8E42007491461F6C237C6A21A4633ABC7 9096E45DCEFBFE5750F7D223C6D00DF0974B98FD99190E48E04D6AF706F3C9C2 4CC83AC842856F85563B0D48DF0B04B2FD6F3FFDD891F608782ED50A2C3BE1B9 2CBAA891ADDB4D65F2651F1DAD6C4A0A77B25F3B6867EAF356D30ADE19D406B6 B96E61E18FA814F25A4EC9A7DB9A97E7062DCA91768C2C57FB065B001D966263 21276E0CBB1ADB60360598561888946F39E0AAB25881B90D6B08698243086340 5EEA694B7CCCC012165C4E32F2272314252B5C937BB54329C078C37E8BBEBD96 82813CF7DFFDAB3F2DE684630B10BCD386D19E8E653E220F4403C5831EE96069 94F23EAD50696129006B8CC3160DE8086C978E92886169CADEDDC53C6D0EB174 DE2D95EE0AF5754A954E7806D202964D8E679CD7F93B8E5BBE02AB2417524888 1AC98AE1FA2D369C70C0179F086FD3B2A759D6219B6BC48252F970893C5C1DE9 5CCEA71B1A0F10BBECD9A63D30F6469E0AC94EFF99322190057B2FD5A1507AA3 D242FF2C3DA7CA93452BD6C658831FEFA2A2D0282EF662C3B0B8220176860CB9 4E2BA62E6E57048875EAF30B0093B782764422692D0067375843F96647735D41 8C19C1ABC9D8B0BDF3D97F21C5900BA2D9E45A0979B21FE7CA2FD50319EBE343 8A16E6DF19AE467FB3C19FDCBA1017211E259A3D8EC4714E38C8405C5B008626 175E959124BDE96372905BB9555798DF405DE23830F3F26BAE7058034A0FA2FC 0BE9640C22D88A8547FA1938DE72515AC0847A820BB6116C81FDC85DBCBB4BC7 D81815E0260D9FA0E759375A9E4721CC2204F4CE00D0CA74E51871FA34875C68 0B1E05DE1DCDDD21BF3AEF51482BBC19DC6E1AF3C2E3C915102FCA956BA86CFB 9FA5F50BA977A472DDDB35E477ED5AEA56C005157C7AC7627E529F60BDDB7422 BF4C061D7029C0F85DE7D266263FD23FA9EEEBE58ADA311BB0D36FF1FF0802B1 299762D3930C34D69EE4CE17AAA7326835A4D553BB045C4A216A4AEA82AF36FD 73944CB69AE75F9E79369F833EDF5930646C3BE057F457B21BC52206693E19F9 A390AB95E0FCBE021308220B9DCFA3A2C43627F105464F41CA9ACBF51DD01816 87595BFA78440BDE4C69A41DAC308F5D19720E1F01C2B3829160738FB498B2F9 C52ED576618B3998576443454A07B7784FA0CCC0831461954C05C364D9B0B09F 467043627E67D7FD66D583E92183A52C3EF8C0179E05661D41DF119605ED3202 3B3E1C232040B475CDEA8E0AB92B881720A079F93014937C4BB2450C8A7A6182 820CF7BFD92B71B2924972DF468BD9E120C8C3C96A3D38059DC95E2497BDF251 639DF3BA5D34B763AB8E8716FD5A9B8E1AA0E1C445B5417B16B3A2DE03C1564B 32A17598D24AEB4C51DCDD7D28BD0ECC39BCA860E5FA32FB8DA4FC960E488E52 EC7A3B42A9701DA7CE09FE0DC6844E26960C6B6F1D6EB3C07C903866117B3FE9 D51AD8C654048C70A94434B5A2C6FEA57D5071679FD41EBE6E6EB7C94FA9E49F 13534142F2FFFC56632873F5EDD88190A727A57EAFA05E07EECFB8E901A978FF 66B1B6026D59E36EE4D11B667161B01021B1697EAA4DAE1789C85E90276D6E80 3AE9EF553659116F60CA3790D10BB50E21DFF508E8C13AE909A031F320ED684A 4757DE36C67EF5A61A9382DDE8026F044EE45D9299BE637CE9F3FF1DF2612E94 F1AA8C6C9CF3E7A7DD54EA60DAC781FDFC79FA23A549F9D045B7D33815AD1862 B2443B02B7017DC77784967E9535452F3466796A1A79AFAEF033087852EEED3B F73B887659C3B5FCEFD0B3C6CBE54FDC4997B52331FD58FAB9A3636DA029B88A 85B74A691D803AA3A9C24032582F11E3EE8369B5F3B5E9D121896A29F2E6C65E 48692E4DAD0296BE653A632609DF2C7536DBCDCEBA1F3EA21D6E4848780E53C3 C850611024B2F2CE430F725091F4D94262A1963B6434A3B7F7DD2D48725A9530 D1588A863EF323BBB5A628472E87FDAC1F10EEEDF42334AD39F659AB1D3C174D E9CF07772CC74C112916CCE5E02EA1F813DD7BA5A2B8F5EE63529C4509900B2F 410B7B16E6119ADF83659EC1A742688C1A1699682B90C518B3DE85479C890E29 A99E798A4BB845A982169F7301CF3C4BBF583E6D79AD2E49CEAEC0E7D2311FA7 5756E69122F4CD6AF69057EB6D76BFF0C19343048B230A20361E33297D683AE1 45D1687D84ABD5C8BB836048B9B5E650ABBE68E66EF27C89AE01DE9BF0E1A0EF C5DAD166222EAA95986D0A31AD4FFB210D8DB5582D92AB2085FB6207313E3BD0 0B8D05218DCD8124F8E9AEE538C455AC0F3A121C53A27B963680D625AF421DFF 718D0682B8FC8994D10F80EE7CFEF3C7A22A2622E8B685132DB7AD8B8EB74891 A10B4DCEAE8EE380EDAA8F13931F9D3DCE875161CF52277757980ABFE42A15A2 9427A355A1D0E43D51E5259C1236925DC69CC205D8C4286E7579F990A29F6A98 C0148F081FEE5FEBA4CE1267AE67C854987B9B70A41F730768967A58046D80F4 9FC01AC85AF924C87CF6A97D017E382E2C888BB1C80138263B8E0DA15F82E169 7D23A24302AAB8CADEECA545700D979261D1F7F1142F2C0CC2F3390F58123B88 77DCF0DAC085BAF095BD3E158572FDD033E44E067F0D0447071AA62B1B4FF680 B841E0C19E5443970C937F80966046D7A00A5DD1AF38C18D95AE7732AB983511 30622485D8DFE310AA3613DB5F351C9D1DBA6FCD686E38148967004A5EBCAA78 9B6B31B3244FAA863022D2762D43BDED9A8CFE51DC9A8F545441E3A478F0933E B187A85A04E4857AC883BAC5F42A890C93D38C495F783CAF9780B6D2BF160363 2EC4DAEB9039526E575A4183F9C02B56785C6AD690B48110030507634EA65649 EBC356154C92197E63103FBB8E22D39003AE100B70A920CCF051D95BFA98A5FD 912B94289DDCB7C05C6ED85A75E27FD5F74F86486E23D2988B6DB358F41471AE FAE134BF06EA5B5D1831D9D68FA9791B72D3A2E54D1DE5C2C6A8DA1DBF18C280 C6073F817125B132928E2EFBA35BCFBE39C1B88FFD602D2D216EF0473CAE549D C6D0A2E6E82E68404259516F3591FD433517D9C9FCEFBC9A5CF7B5B27F5AB430 AB18435EC8BB9AC2843258FB72004AF4CF43228AAA717CFCE311ED7A785D1D19 41A7D56339F7D5A6DCBD8C2473738D9EE6F0AED82C56E7CC01CC7812ECE57061 43A65CF7C781FE0994ABAD729D54FF48C029DE1F8473FE2A77EEA482C87C0D31 E3D8B7C0B58C7B93A535B401725657E2B81F602C0EC9D5E38C1AF15718346664 0E95B89D0987153BEF53185D351D2AB2EBB8F88B44580A7C8D9114A1CB01D29A 788656E462955BEB11A3CC309E5349B033F33B0213C10166D67A24C877199DA0 76F0D03ECDB6EED7C23062FAD575FB03D34ECAA6CE3F3EF5A4A4F44B94955424 60598749E3D93B9FF2260A1EED71D6FE5D321F658DB5155130BC84C8AF3CE339 8F16E09681886C2A8456B547144B3E52571AC2E8E30E6CE628C48BE2D08E67C6 D2A79325EF9C6C4B9FBC621FDDCD1A9D62A618E924345ACF81154B583589DB80 6F572ED120A7067A893DFFFD64DBC2D7859B9329E417C0713A5FB0C19B10DE49 864629DAB75E73C3E82198B00E9F40AA40E51D8D64AB90C14E94F51298C8F20E FAEE0DB31426337836E77546A68D0C3BE4AE7E54A693E6645F4C86F0199BDF70 C9960A3CF831EF539CECE72B563E7DAA9423BC14BCB069F045D906DE885D7425 726DA4C547B99590E71B83335247A025A7D3DF1F6C37A9B330A62E8E09462C89 EBAC587566817177EFC52550D10043D933196549C0FE765F2581E74ACC018898 27561470E34FBE6D2A2685E6520A4414D7EE1E8A038E082CD20FDB77811766FA D06186B6AF02B84B0FE903B99ABF0C8C595D951458 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /UniqueID 5000803 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A 0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A 8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E 5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C 7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E 4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC 717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 65 /A put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A594210F B5200157C0F02340FDD61392BE9B0D9C46C1A0C4A3AB05918672D6D6020D3A88 8C18A08AFA6BBD8A513A3C06A29A0FE923ADB6F9996F3516967E5066FAEDE5F2 8317ADC676E012A737EFA5B743C0FEDB224E360B05D089459F860F97BA62BABC E86CF3127088FE3ADCC29BBCC991BF7A13A3A5BE34409C002DCF2B05C095A01A 12BBB5C8F3CE43DCDA76D261E3F7734DE2DB7D9A323CD68D78DB2A5DFBF469C3 D02FFFD3B21DFE7CBA8B9C7F438CDF8944DD5A06583A75079194054F8C06AA13 1698FDF6B55E5B1B11C5AE8BD7FBDB7BA6E90FDCD1802F2EC862FB85A143D7B2 99223ED8525202C26A53ECB0894A7A3A64569699C1C085B3CF6D6F6130C45C7F D74B5E4EF480988AA30EAC8CD07D10E5195B7199058C8B8EFBA9F66BBECEA137 33037B3072C48E8295A2185EB3B83956FB26033581A702C8A2C65FEE3EC92CBE 4FAB38A2F5BCDA2F6F6698E3A87BB14E848E1A67E3FF1DCC92B85461BF16C111 6D3A59FCCE098512A2B17ACB186BBCB369B984A363525211D9B83BA91C2B1EA4 3133C3CB489173988833DF780EBFFB461090B51E5C6454E4ACEFD98F22E80F8A 23ECAE2A7803B9200043E29AE21F7EDB5D73EC2BC7EFEC3468C239A1E1C5A2F3 B6A3D13C41A83DEBED0BAB636582D103823BEAC6FE0A2813A3537BA69283ED3F 0C0341FEDDAA7255D53B115D445AE19E95D61E5F1946460795E0B5A94924ADA7 7EBD05D099BBA699CADC3B92D7A33916E7DA8A03DEDE4BA2E2353BA2E00C2846 4EC20BB3F5FF353BA66C3FC64D1CB02A75801D725C68FBB83A3ABE8B6705CF4B 7FDC6D666CD1F6050A1331B67D29ECD0A841759F877B05413C8CF054B8F7EA6D A6CA92792B6306666422E24544F41569DAEB20C9780998392E7CC944A387138A 1BAF65D7929BE4A78FCB9B17DD352F102CA273C3777B1DE7FFF9453F98FF18D1 469FEBE75A8F761380506431C98690BD9A8263ED21C33B62E4392600C67408DE 17270857F718726F499E15088B9DFB573C2544D85B24A7DADAA627B67F74CA60 6671CE34FB84E0E5054D332ECD422011A3968D9FCAC28875B34AB841C9465B68 94E0C3580377428346B9A6E413A2FE50268147B5372D57AD11EAF6846BF8CBCC 06AA85312B32DEF5E050E7F5707B70D7A941C0C5128D1CB937EF1B8922BE637F B99B74C08A63016F79C7D0E3BB00B59E4DFC3BEC0A5752A55C30BB96EF977EF1 3D74F26B49F38B008AA278CE7A17C1064CB861B8DDF46D3F976E9A138108F567 73611D99EA92C45C2AF926328E572CC81BF847A9649BB287AC03A02FC39172D9 A3B4D22C3552E70D0778DF32050E21EA7C1024164E8BCF21453F5740BC8CE2D9 5FA1D83DFF03AA11A3F41A52AD8A869A943E10D3B88AE27872DC1A111A2CC5D0 D22DDE2211A1768768D62E30EA2A6F04A885E1179E5D7D631553464D8E7F1244 B20AB73C8E70D8028B8EFB5DA46757D6B2CC8B9DC7A715CF4D65DB212C75CF11 9B035A561C37646509147A62C56CA67AFD7379E9A64C0A173BA6ECB5262A3DA6 2F773F744861352351811FFA1C2C67672B1D07496159EDB2A507BF576787E3C9 19E2D2EA67D014FBEA508DB893617833CB27ACEE2C68FF726EB83685DD343ABE 7F1DD74D8FB8B3BBEBC6AF7B9E7376FF7C80634400F3019797803D15F7C2717D 782B4A8F898E5CBDE7B1BE081D84FF3E1C152FD1DD1AED48BBF2B65F5D053BC0 D4E4F6BDDE8C69ED7F226EBF7B015035ACDF873345295B95C0C2692DFE5FEB74 75E396C85116AEDC3450CD36F6027A26FF421B7C76846FEA3F150920EDE891E3 64C4018C941D00F3908FEC9886FE82D95D666A1DB9213C2142AE6A0DD538EE95 B00ACDFB8AE654BA77DF6B4B1ED161ECA048A22AAF0790A3A4335C6936A302FF 29D70D2DF8C4540D8F2931F7C9DDEAC00BC5F1703A6A87A538EEB1A68DE6E3D2 647E7B96753F04AA9CC6B5DD5E845AE299DC558E640A87AD74EF10629CF54972 B337D52BA0C29171B40EDB5D83BADDE664E20C3EFE02F98191F59BC909790849 4C50597F58D1AB3B9AA6F64D2E64AB21C48283E4F6ABA118427C2B1B922A8755 FF7C343D1FF764ED045DE992420B6E41E04B3165928EC4FE4412B62D0B208379 F9A590E9A6F018794E1E12FE6F8C7D46453D48CE166A0E4EE6272EC17DCE6378 8A7F2D6F4C8A91A4B090ACD28CDE453EF7A4E09DF6BF945907D0DB5F68F2D8B5 AE507293CC89CF93CE7DFCE01084364EB7B77185936FC36C4B81E9A422773DE7 5726823F4E8813BBE9220E47A90CF0AB516D27B71056D018CA5CDFEF040E4E7C 9AC97CCD001D3278CEDB46CE3B822A3A31B497EACE560837EF3B38F974D988A3 297D145E05A846700E91F93CE58D2958FC25DFF5A41D1A27253CC8C46BCFF335 C364E2694522E7DC91D4F8B7800A0522414A4B87236FE7C631F88A6AF329A924 C24FEA8A983EBFF4DAFD090B5DF8F39618E4F5728198D28B61407DC8BC95BCDC 6E60808A0DDD1A32AF2875AEA46513E5374748D1F6460310429B46221987A70C B1E2F46212BC84A663DBE4E3FE7203C192530F70366086C933F2B0E30FD08BBF 113B2ECCC7E8DC1671007D16FE6CDCE1CB0E8D031B7CE9B48C79779A8D3A589C 1D7597C8DAC7BE2803411D65A70EAA178D11BE7F34711A204432DA217576D987 1BBFF285951D7C999B88588E3B5BC7D230724D020383312F0BBFBF534E0FAB6B 3BF6A55CC895EE51D20A0B4E1A01D812B578C4992EA47CC711D8E3EA8D9DEA3C 0DBCF7C3AE7C980298636BF4DC2C542897FB1A6CC655E017F4F84E7F2A384055 FD37C57572642B097C7E0EDBD2BA7C8586E9F9FD8153E82AB6763FDDF2AD9E3B 36834ECAE17B59D7826E1531AAC0EDEBCF4AE7800A377ACC1BFB05E63EAF8CE3 2BAFD896869475E53AC2AB7524E61DD2942AD43C860C2E7ADE428E0F49509EC2 0731E2045B788212A7A9B35C18321E48945878C65790FF090C3356FC56235751 61086B3E6093C28D1C4A05C67C67443E183694A297E8871E3D2D2317427C3B3D BA222A6844CE57354F98EEA5105C5B9E8138A8207EBC396DAAB6B82565BCCDFD 0AB8D0EC87B7E48F2AAC5410506F65F0B339C8039D734E331645C3CD95832187 0F411DD65626C26D1DD0760142E421422A6AA0D1B3427F5CAF18F94F8B675A26 DE2FD9DA5DA035B2D10A9A4FAD6ED283525245231B713BA8E7380A2E1640E7EC B71D5B5834FDB10EAF87B09A7AF097E459942104838C99D694C577F0E09A4377 3BE3DE7A29FD7532F91A9C62497077AB3F324B25C81A36715087158259D02F0C 8D585658938CC0F8B571B1E1995E42181F975546F35E4AAC66919B353D8057E3 524C971B275173C6290D3195584997D65503C782FE89EB0BAAA455AAA18ED251 FA5C69588262BB9E2455F1CB84E3CF354A675FC804077E8877617E4AF3ED8CCC 18D370DC068C202728AE1221D729EBF16A3BCADDEF7C42C2C238301818A70AAD 83533334D81BCB61F40FE6EDB0342D81AC5FAB607DD62BC6662EE893FB21DE13 063B0B40B5A024A9312952A5714BCA85FE11E8B6D09441415DECAA00DE3FB459 406F5D9A8092E19E741CA2424948EA7BA566C947DAB9D28B98AA77D94AEB0D7F 7E559E5D14B957AB6CD3FD83C2A4AE51F3DED2E513B55DFBF200B3B3670BDE96 AD79AEC65ABC45CACCC6702EE62E2102F731059CC6166D463D2520A8FE6F2AF5 B8435F3183478991DD7B6070D4AA2B33E0E72E94703A101ED59219678FB9957C 3815AD69C3773FCA071963523513DFEEAB6FADF7A20C240385A988D023C97DE7 09DB24A38B449780E6043E654B4B4832908D618E8CB4E36CB918A84AB2BF7ECB 9AE457FDD2A5D781FA1815A34FF56AE74AFBF4CB7B2601A2108B8F1EC81A58D2 EBDF651CE36FFFC300A584272A885A57D0845304511A9667218DBC8A006B6F09 C26FF3F067A35A3E4D6104C38505F2F5E5B0103A0248FAA450090BD92805FDF4 956D00B6C65A1F6F8EF6CBF055DE9B8C3DA401309E9D1A5F8D5B9C42E381A9F2 28DD10EDD1FF09BA1D93E77B72C4FEF856C8FC9B3D92DDA6F2D8ECABE36EAFA5 B8A1E8A4E4089EACC7AE8F9047C5FFAC46B0CF34B6EEC9B722C2A8C620F9C763 70DD8470CF5E59897BAF1B7CDB58D466939A23D7A7D526FE1F651134A759F66B F1976E1AA94CC23F591C35DAD1318AC66ABC583FAF26296173DC7C6A224CB9F4 24C14A8A6E8D9F089A71E2521328AB021845DACE36C28E1AA24FAFE37D97B3CE 7C8AE13BDDBB8B1FE58872D3DF56EDD7BE1EDDA7DB79C3028BB2F198BB21862E DCDABBC23CD2E06E6D9AF543CE46DB6AA68109B74D99684BD18F865B2C9AF712 7DE56C139D84970D597581E20D48CB129A9967903DA8926B8366801B78120C53 2A841722C41D413BC0BB84E7BBC73B21BBA3B43CE9C7CB147A073EE1EC78FF1E BDBC3B94302421D3C8D9F089DE08A37FC7B12A57D02E45B86631AA21BFCDC7F5 6138D4C8AEB7ECDC02797AE47E051D86ADCF3ABC86C9A6F2F0618C34FF81971F 5BDAAAC37F365F08D95B51D6CD33C7DEF81E249A1CD8BF3315BBB79E8283707E 139A775794EBBF6BB125CFFC5D6A18502A4F13F66CA144D3F656D3709D1BFDE2 A1FC44B07134247E80BF210457173EFE017E4A14C915ECA8A4FD6C0DEBD7C06D 5F972EEA32C544A00237F6F3DF78FADE7F7D2840D0A61265DBBE995202A4ED16 1ECA174F5816C5D4B4B783C95AF5738783BF26F5D4B9378B7E6D447B7E98070E 8CDFE7361DBAD5CAFAF58CBA1560AADE44FFDCBDE273152AA2613C814F503335 3839E6CA04DDAF325D9C77F07CECDFB57D7FAEE159725480EAB33F1BCD394FD0 0F15F0305A3E18EEBD47148FDB94CDB1B7D7DB8E025A980F601874DC6D71D184 6F90DC32C602B958FB9BE1D3F4B1CB4B305A6E7269C9BFD855E633B7B94471E5 56FEE2A16E20FF8FE9E2AE3240A144FEE1C0F114E78AFF93F84F716AAF1B8A4F 9F11521AB3F53C5863EBED83030D195ECC09C4390FEB02DDDA3EF0BD7C0C4438 A253C0C699303ECAF1C7382D337A5B9687F9E6011DC78E196FE2B18A3B38EADC 468E33C629D3D405DE7D41FBB12CFF132CC6D9802D70C04F54B628A8E9D41210 3CE8C6862843A8E083EE10D7CF9A120FBC4B69AE6C8380EB4DFB5507663ED3A6 9C2EE8750CB9A9AD22A1BF9186B8220D8B00B019B63C2B7C92E164AA60EC4DA1 02B3DE588DC27099DC81743D9805326F6B42CA06B677E7D4AED20EB63AEE3B89 BDAF1E8372CE1884FBA89E7C83A21808545270C76ED1649F89A610D9C3189A7A F2AEE8664D6AD2292F0672B3C89C06150762B0A4A93543DFF3FA2DB1962FE0AB 48586F6AD09E6A04C04CF8879A65088C734F4837A7DDE145660A6BF36CB51162 C8BC7BB28D64C64E64F862A44A12AF7E385B67CC99A445F7C000107DC9A56E9E D49369C558C02E96A3379922221AC791E09C06F19FD7DC64046726E70CF9B505 365BB9BA797CDEFA19A71E23EEE381884D257DD7D8027F5EC90069EB8ED1BB95 B7255BAFDFC93CEC8E6929F7C0EF9672008D9714BEDD9FF1FDFBF0E080F39ACC 3F80ADEDD55F3B6886206228C2D8E2F35064F743BD93BCA569C747225DB89170 8B5EA309F0926C8B32814734F7B7C2DEF626D71AE7A754E49795D8B75F9CB234 CF70DDAD4AF5822533E1EB542CA6BB99DD66F0775350E1F31131A31852F51282 040761383E23C17C964585749E9B2EF0EF5EA748DE4934730AE43447E0710955 51275B6F9C1A612C6604D0B1D09B26A9FD62C9E9520B704D434B2B16DE427127 3CF39110004626B8E65C44A7119633E1C94DF3C6BF0BA540D46D66C9C8CA72C0 294122048FDB3E7D50F908F5AC104D7EED52E81090122BDCAC47894634F2A92A 338EEB3504228A6683D44B68FCEA9DCEF44421D9B8E1933B64C065D728823DFB 5DF70DE1D62376BC15C4B6231A021D48D84AB753809BDAD72E532EF43246D1F2 88EAA7B4A577894983E2747B0DD70A427D6A2EF4B42E3A977B6A7D20CEAE6AFB 21FFF39F1F2A2B2816714AA333DCA04FBAD1DF20503F4EB6E30CEAD47A346E3A 69D74D4BD0C51B54B5C76F605744C65942B1488E56C7182774DD7B873C091DA8 907DDC326CC361D6735C5C0256FC2581381DC4EBC4AEBD8A340735E0C7D3F2C4 59956D4D1BB973F1DB6D590BA9B942A7AA5D6310397A58F79507103371198F7C F0ADDD6B002669EF881F2BBE64931622054448851FB5B5A0E20357B73343BFF2 200944A9EB6AFA5A9198FD434D039CDEE4BE3A5F90C3B3C9C61BB9D7559B3DA1 FAB002498CCEEDAC579EF01AF9F3A58504C9866DD6FE78F3C745B28C3EE58781 B59626ED00F0C64B051D830D54CA9B206614ED68AECCF02E259FA03FBE3ACD54 17ABA540FC8C16D20FE9B4282440B61E60BA0FB686DC3E307C59E4616A2E9B4C 62CAE7530030837DB88807406851D67B374C09EE1F90AAF3A78D6D4A4492FA91 C03B19304629F180A3D7E8EA917D5EB749331ECE83A0D6679955D12D46C9DB1D E0E4EF9C3FF4E1B6AE4A22F7C759A8A16B3080FF201120F1B09244D9C61620DD 645DA04D43142261E58D3A4E684B0D3AAEB46A0FB28C17455CCB6FE9ECCB18E4 457A388BA0E9C9466DAB3F62DF10A36A7C95FD2F0D8E84DC97D4CBAD7F8FE89B 88263B87A9C04523E02B97D7C3FCD336345A87BF9A147E4FA218F5F18D0F3960 D957FB484159D578CDCF9E21F257DF6DB79D6FCDD3D00F6314F3BF77D449A278 AAFE344806DCAED6B9F512920977BE229E81F8FE22B64F8EFAED62766B8406CC EE84C8AE16894C9EA54E66D32259F956C74A25AAFF389346BE698E6A75A698C5 7558B5F25F8D98492AEE1EAEDFEC5E053483FCC43B40694D0B259663C5531E95 7F82B715E9B12F112576B30FDB8B57155DA438B145FE2671307D0592B303E523 43A4D6725C26086D10AF33E002134B0DE92FA5C6DEE4982D3DAC7091CAF54265 6AE560EE3384DC844913162E0D81185C1BD361883B1C337AB58DF4FAFB3C6306 9BCB8027578E528D56A6FBE9F300BB6488DA83AEE916EC945D7CD774142580A6 41C27A736CAC86BEBD5219BD2B40B410A9714C0C91B1881269B76AEC48D5741B A9DF610416EAF037FE96CA7B93776C88A5D93CC9B55E7079F2430D89AFA44C1B E71A7854FE3B7DCF1D7BE6D54BD8262055FB34817B67CB91B5961C260C49AE68 27775133A08D6B341D7B75B64A0D260C351F7343B7FBE0EB0122FC9D3AE73FD1 C1C5756428C11CDBF394DC0FCFA3B72BA473F12E574C98A9C8144417A1CBA749 2C0154C5AF36AF937E6EB3E471D9712DFC5314836B9F9B4C4A4400490290E06C D0AE99CB7C6184FDBA152E3270124E37EDBA3F4CE0479AE06A07D6D1027F3257 6CC288D34AE33576F354A66710A4CBC322E84F2FFABFFFDE0060278930BFE762 ADA6491F26CD942CC271A40E951A115A4A7D8388AFDD7784C6FCBE80D247F43D DF6337F61FFE758B82718300E425E31F46CBB6215696D82B1221FA9DD0248B67 611A86380C0A94B886E4DB890A43CEDF5D6A64C527F895BFAD8BB63A5A558B2E 85512CDC3BD8B9DB521B98E698A3E1FFA444CF16EB6039C42E949B78B813586F 207536B44DB02F130F16BDE54971521A3283068574B0ADE05569DA0EBF4CC461 A26FECBD8AD5CEEAB3B2B8287150B29F7A4EA4B928D2F1C9BD5BAA085732DA96 AE1AB11D5FDA1BAE8A983BBBC07B9F76A76685BEDC0665E48556F058235DC523 CCD37A78508A116822E9C8A2A7502D4E62198E188018FF1D85151C1967C4374E F86AA8B4FFFA3BAD27ECF9354C651233AF6093EA2D694A81FF985BBFC01F0A47 679796500067E65955ACD37EF34175696139AE4A7509BD62DC3493E8BF497A57 0E7239F7AD462E888CFAFB967F6C562CC971B0166E6653CC1387F94FFAD25F4B 2EFC280CEB1BD4ECFE160A581777226F51E7767A10F4C686C51299D6B8C6FC4B BBEBA44534FFC12BE42AC28F203656A25696D1B58C3A73CCE75BA3C5DA2A9F0A 336189612F25D0B9F8E838CF810CCC1DEF50B050DFFA0BA45220D5FFB6B49943 3CB0FF60137E1F3D12673789EBBE48D72DA84F1254847CB5233B91708CF001EF C4EB320B4DF2E0834DBAA6440E04AB68B7B21E4B974E0C2CCB03CFB954147330 F38A532869452FE640874B33E1A72049F253B874E475C9EEBB68A81E61F41AAC 83F58B0066FEA92F31F246EC0CE2C5F1B0B251478B56CE35E812EDB26DD3F813 7BE1CF2475F98620CD35239226E358E33461464B9DBCB2F3527638BC61BE2ED3 109E5E4B0A624B69DC91AF1D00F77127285F72C28C349EC6759B0D6F18629B2F 1ED6D58D9D0B2BB2A90288CFE30B93CCE8DCC297FC7C13A1C7C11F20E4658793 243BD703CCB29BB09393911017A123EE58686994600BE9C927F944E584D4D771 0356AF0E564686957D974ED8A3C86432473C775592B0FC05878824AE290576E6 F0BDFE8A8F16DCE952D2B291168CD986856699267AD6FCECDC074413CB047015 AF21BA8DBB3ED19B5AAA9AC81BCBC2332E22ACDCF110A34EB0EB16907FC7C234 C234B42A33ADE4181F000DBEA4AF06BA5F2E78FF5AC28FF8E98A4B3C055C014A 2D60D69EDEDE71B002B3B7B8A27A2BECCA54D654B87CD27A8E0E96B86A4FBE8E 1579E0831A07D887017AC0BB39BB026FE08497F1D65E9AE6607AC517F2F17B97 8F8F1523FF7F1EF2548A0FABC85CFF53ACC7D41E5C69708582428CB991A9F535 44148E7AF8F1D14B074F134D9D33441B87314523FB71F46102B51AE79B94020D AFBB7F8F669995DC67E3B208B44C48FBBB7BBDBF0A2D7B3AC69261234D6EEEA0 588B84EC1B72420133BA048C85E23BA487EBBC77AFB91321996A89156F93F5F6 28A08FC606C5EB27975D4781610834943953D8BF31AD04F1C9E395A0ECD31B54 CDC8106E47AC89ACD96ABB0414B5DD6D7ED1B31088F145EB322D386BEB9DA692 19AA4F2C6CF43F6EF99D8D23AADBE6AF8DF13BFB98766C7FEFB79557EFACB387 402B922526AB45367269CCA302034B5949E7C65202BF9D0DCD4047867DBBF367 A6F1FF8BA687566E58C6647EDBC4CB37558267A0C5C381D44C7EA8921E74D38E 17E10166EA6F512E190B2C91D3C630080464F1CF2F12FA57121E0A1B2681A16D 7D607765A122D5D8846BCE69FC58625C75B493E86713333379E37697B2D94D3E 42FD8D599AAAECCDA5E48A9B42A830A7D279369D1DA857A0B15168F018C7BB83 6BC1D4537324016A60C69568E29057A6F0EC9994414083F4BFEBD2AFD91EF38D CBCAA59690ACA669827D419F216123088168C5EB51AC08ACDA82B519906D92EE 938266B44A8240843D780E7EBB9ED86C8ABACEBA34A31B187E2979ABD14DCA1A 5E0BF40AAFDB924DC5FC80910FD7205639A8BA0819237BF3BED500FB9F3EA43C 5E6AD3AB5A37E02C2F2C98633C98E7B2E3437737D42ABF3D96F04F66186C1775 01453C7DBBEABBB1068D030B6956326AB66B9CF7978313544892E2B2C5F3AF08 47A1A068756CDB0585D9A0C5B6EFE85EA1361ABE902D3D216387E03283FAC255 C1091BD8F7A945C1DDEF7A35C40DDA9C13E30FB7FEF134A874FD5E1E96AC5DE4 8A85FC57335DEE136B20D7FAAFEE8D0A6BC4386ABB41BE77E249546AEADF4B1C 2887ACCF8AE1BEB2DDCC9778678B58741D0E0A580579AE8199A341CFFD2B41C1 6E1A3C0318BA1A3409AF672B5287FA20AFC13E656CB4D8FDFE2EE61528F6465A 61AF81CBB8263AB33F47C08FA9E4D9E17A780A5139D18019FD8CA2011E667E82 8959B30FAB048457F5AF43F2BB98470C94FDE464B6618CD94CE466C1FC3E4FF9 C3E845754F4B64681B56DD4863746094BF86049823A59520E33A898F04BA6AC4 5E3D7ECFE988CE5AD4C8F663C5368B8CCD01050557A7D7E00278A9FE0A15A87C 3462C3F79DD9A8E40F49982468371A39B5FF7FB34E8CDDE2699F68F0FE2A03AE F0688D3524A4DEECBF2CA481F4432C1FDFFAF0D1E1E3466C97DEB6311A2ACC09 8925F52CA7091A4AFEF40BD9C5A8652C95D8BBDF28AD0A55227E71E8317D0722 9AD2325F7DE173123FB29DBA2F72D2B9CCFD98B70106F265BB7B63871B6EA903 2D1898FB0C30619CD89B977CA658B93BC9F4D9ACD0BC4BC6851B84FF187314D7 2B0E93C31616AB69F3BF0575F55652CABBDD48C5C8B4448D0A428A8614B9E18F 10037663D57B362B78084F043C915B3246F03B532BC0565F05239C84E798E8A6 449F4E74DBFB36339ABDA18B8C6560B23710AD64C828165E9876F97D8F848163 85CB50410BDBEDF24E134372ED5FDD71D031264611284572775097788AFA6B5A 71A5E46A24C42A2A7910F323971BF7FDF5631050EFADCAAB2F358ADBFD599D8F 5D6733B5DCEBB1DDB342AF44E409478E619792EFBDFC2093B8D8C9F82136AAA1 C54F2F501AA172E127061D1673D9BA9F85CBE9A960E850F6B16A918A3D253FF0 F5F6AE49470234ABC0C0D800422112C9FC319E359578B2006EA138138093DDFA C2D233EBBD58C5D77BADF9E2289845B1FB3F47FEB6198B0A085BD4959848E9C5 3C63E166ED3E465592A03E1FDB511D4BA371EE1591F4F0FBB45206656B9BD7B7 B65FF730A2821612654D99466614F2BA8BC75D30E26C077F4F9FCD668E42D5DC A0BB9D7BB444A1E06210927D7662CE4066614FA8B7CA773C6EC17745CDFF825B 7A333A53117940951B41965FC92126868E88120744C3E87534680DDE99C18FA5 9D2BF62D96897ED220092B1318649937563ACE23605F129BF334B7EA44D321BF 216766AF7A808D7DFC1B633BEE30C1FCFAEC7A448FCAB915236CC36626F8A505 677610C3FC80276F4BDF14531E2F508B9FF66D78D738FA1931EA3167B390F000 E6396C45BF79635590E561621859C86ED3F0D454E1474A646EC23C8164E86652 4B33D79670B203A70B3F8BF31ECF6EA3CB9F8754C302DFDD8C77A96803AEA2D7 F317C56C176B7315553BD594269F807509AF586E92379220DA095B6428736A4D 7A0539F6383791D95320E2AAC66412F1D6DCE02BC76B734C494B02447B6A7667 F7AC2CE8B45D0E182DEE296FED3F4AC8F7781024F0E9DD3F27519DF6CA7728EE 0D6E0DDD80345FB565BBB020131C253BEB04CFEC1574E14F9F18C8F32A847E51 E7FDD96B03B7A5D865EA49BC12F902146B2A7546E4B183DD2D4DC0A5E061136E 8D7D508BCF6743C363068F5F4C66945706F8DDB2C45ED3B1314A9227283FCF3E C7ED1158DFBBF384BAC2DAD5965DE5299BCE4CDD007411F5F59F0AD9A2F87425 B69F51BF50135C6A204BE25BAE93E669898E75C96840E24DB31D038CD86F760D FF81D1E902DF84D34C9CBDD6122ACC7AA28D7650BB7A775C3CCB2F153FC3BC22 BE131A9428464FFC0EAF8C7F57EBFA2C29D635AAFFFF19AC53755D470FF4B7DD 73C415FC1D778781F40217D3F2F5DC7DBCA79D094D560B81F0D242218F9D2A38 4FDAFE428BB8FAA7DBC855F52BC0EFBA0DC01C83873E60B2F3C7FD91DC777D7C F5F283BF2B5B734868AC1DA079289C6155EF99C4D8E1D34C5BFAEC9CE9FA9333 D1D8AF4B0DBC9D59A5590CE44AC9261F36A6DD2DD0881D9D50007F4B0894CF3B 8C8272D0C4B3A39A80CCCAC27109818B5DEFA81C1C2B7E0A573B9B48838ACE55 EF5161515282833E8150DEE8788B8D8B00AE4F8307D5F1D5246647C07F29424D 5F0DBD2C03E3C343D5396F35C661939A7030EF2106A83DD3BFA4AA4CA658B9AB 0D4A2AFDD3AD28BB125AE06FF20C75007F00EF8330EE3D8C2C78E3B7841FF4A7 F3C4C9018C48E5AAC348541316BD645E277CD0B2BE8CF60CCC906A125C676875 FE02665D04194838B7CA13F8A626ED8BF7C87F37B840676B29519BB8975D82E8 FC0114B2A353E7CB529D48EB9F68D149A62012BFF52622286A27E8312A37A671 F4CD76CEDAA937210F23D8BB98F9023ECA41D96E1A2F5D029233FD55AE298A4B D59A81EC7938973B7CAF060566C2C0AFEA4B59EDBA72528811AD64D8A13E36FD 3F548BA5560FE471AD96043264DD1C23462DE73BC897B99D78E046BE1748D1E9 5CDAEE3A435F4912D9E9B8CA93D797B1D2915CD76969E5BCA245A43F908DC4D0 DAC6FA6A373DDFC7A08DB6A6AC588B7EFFCDCA3E1BDF0520C56754B733DD9905 041A09FFB1EFBC3B3FFA6050B9332B1204653A14F6571253374AE33DA528524D 31381899DFA1B2CF3D72C9B6BEDB29241634137990361EBA4CD5BCDB62DC21B4 D5FC2B9A21CAF382C11DBE86BA81741F8BFF1766D22D57AB5F24A962B5DB12EF C7F42D88A0FF60C870BA009CB3BCDC651AF7B5A4BCA196798F6C605422D029CC EE491C2E183C9F2491BAD7BD1F2CD702EDC0DAA53B8E0D4A6B7BD8145B843F40 FE06393577CF85554BF6ACABF57716476728E4ADBD5038A1085127A94C3B934A C68749266A7194963871D47AE608C69EB7EBAFFD11AA858662DB0F1E9E61464A 9B0790E15B0BB16FC74A17BB6680117F4569D03738114ADC9C23CE8953D7CF05 74EB3755333CF89A7B8D5B2DC855366BBFCC6E20DD0E32CF7389318C6C88D550 67D148436DD3712469468D74304C04ED39C0D7A3F9FAA7821BE32C97A3AF6E3F 1D8D4BABB4B3D170C275B93F054A1C2286F09FD5BF96674A3CA023AD072DA2DB CF505AF5D0B0525E44A212B0F74A48471A1F07BA8780D08E28EDF7B1A9EB1867 725F569CCD4B09BDC0A547B3F0AA0D66743E29EE219972EF32D14C3E04098EC2 8928BFBF73E85DA163D4F388A57A7F3C8F1CA1EBBCF18A5610381B5E02324142 85C2F6FA9BAF812D1FB5C1F15292AEF35FF62A03CC28EB59D3894C60E539C39B A5613031A6238D169875846511ADF80FAC8DFE63CA7D74160D29593666B58DA3 0B5294AF4C2D1135F843762AB3C422DE92ED98F877BCB00CDE1CA9CD5D8B7CB3 036446C65D702EC1C23C309B0F337806F7DDED771449B3A9EA20B755A333EDF5 F89B696A9B03BB9413517D90C39A9E95C9CB769F2BD50C8D5FD32507F8B56D11 61CAF14D5E8868B61135D98F372B7D2186E3DFA3835FE62D8262E789A8FAF0C8 0FFBB593FD31EF404E658912A53BD4064C497CB120B5FA0A6DD080BD11C9409C D77EB713284F74F51636DBD9CAD1B9E7711FBD335B77A848B05AC7DC960E1F13 3E77B2F11F0E54E4AA803B3D7F1F78306A76497D04294884AD6416118340E12C 45FD06D28DEE7C1BEF415FCD58DF2E318B41923E45503B0629CB3006EED8FAC6 C210F4BD5A4413353CA9F51285DE8363E5F638EEDFE47FBFEBCBFD465323DA87 108E47A4CF84EEC3A85FBC10B5D45138AC9FAB37FA441AAF83FBF7982EBE5634 E6A4A48BCA7DF5DCF6967ACB622EA0701460B561C2E6D92A6ED930055B824182 D5A5FD2764F1E752201F4FD676D12CD27DF1DF1CB27F45305D2D330AFE94FA4C DBC7EA3BFA40D03DDE69821DD4A92958AD74D36315852E7EBF2D219CD7C9AED0 EAB86D5F25E476B803B7BB93BA7FCBE1D11AA2FBC9A220D80765C3472C790778 260CE446D86425C94D42578A277FC4D2AFCE76595361E30EE9C1955C07199388 8BA8C12AB248B94692CB459DA11AEF914DE16BF149DBA606E24EC7B043AE62D8 91DBB757EDEE69943594C7A6DAF8BFD5851D2B00F5464CCDCAD5CBCE5ADBDBE9 6DE74BEA23B1B2D90FDB104FB328260D4A5B0C6B0DD6151DD69349FFAC753C8F 7CBABBE0CF9194AE7DFD56F9C89B40697626F34601A2A9E148CBE608C4D897F9 6632004CD3F88A8F802A3CE75A6D61D8CE55C28BC9176D589593420DA9A46344 8549E71A35AB21EA5668C5642D8003CDDC145D62568F9EAA95DA3291B04B61BF 360A837AFE7605188059BF61DE89589435E91221973A8DB7DCFCB0B18085053D 26B172DC3E0B5AEF7D57C374F2EE77CFC61EA4198C7E5EC4B6E52A7491F806DB D625F136163DDF0D713AC99967591E635BEE7E50B1E971F3C4BC29FABBE32243 B14550980DFAC4CCF36444B7AFA3E7352B633ED8BEB673AF5338E5A8C3282CC2 C8FFEC954097D154E710C15F575A756B8F39B378AC55EDDFD55E5781DDBAB59E C43BD669013A274D7F76FC2ACA7FEC49DD5109E849B2D05126EAFB31C504D7C3 3627D1342C4684AAC4FA858706E55226A7769A7BBF82BF73FF7D7CDCBA51AC97 CD83AC15C80515D9CB1D677979EFB4C2552F7A2EB7471EB89A957E42C985F2E6 B947AA0F0FC3B55572A1AAF1952D53CEC9F8FD27914856241EBF3E8AE29ABE5A 0DCF265F1BB5D6DAD6198F48BE57F7F8F2C87CD40CBF8A15BE7BDD93DDFBE583 EE94DB22B55515275FB32806BA1B9521396F41CEC7535EAAE04A9820B12498DE C97696FD05CC175280FBE13452DF7D477FA3C45301FE490C1BFADF83BF021253 6E7BE0FCF9C5F3718FFD75E8FA931F2B952915B8E67FDF9D84B128F1DDB49AAC 9AC6554B5DB294D0E453E89BDD1D9248FE0FC8053FCC529C2C83667F6420ED84 6030488FD33AD5C4239A962C5F33FDD4FBE3C86A3633D8DB63F7160B9FA5AE10 8BED8D48DC0A58F81A1A215F70C5475A68E4A077D02D125BBBC61941009C8027 46A031B3FE7E5226947CE3644A5DE1671557ECF31FDFB298F5647555566E75C6 928BE4D1BCDFF932053C1801B41EDDBE228D86925AEE137B228AF7ACF7BD9F87 DC811BD378144014E05253A2B58E2AD79CDCBCB42884F4A39F7F116EACD630BD D520E476AB1532414904AE1007F2C6E5002F5041274E9AEC93E94772C09587AB BD39259DDC3E244D5CED0B46B96F673C36B647063863BA92028954ED46302AE7 77651DB98422583FCE400F75FBEF8D1F8A3CC55C9B67AD761B4CC811E05C5904 1E34AE480252075C0CB3AC1EB7B9B5378082CE02191E98D4430DBAEBAAE8FEFA F433E966A37409A80370F4C4B6B2A874EA4EFFF46EB59BF0199AFDBECE698B2D 7F379F3A5E84EB8DFE148B9CEE8D107D6B13491C79AC3F1392B133755A403A35 6974207D3928131427E69DAACC415F093BD90CC32B74060B99FC9BBDE3F6968A 2B4AC8C29DEED24B1F7BBEB290280348A462A22CB8BA0BB639EFB004155DCA7E 60840178BD7258D5390C1FDB89F15D06142E9274A9347AC0945404F9C014F850 9CAF4FC3A6564D78F735B5421A471F533304C7D782B9D7E3206AA9AA3072E4A0 6E748AF4045A94662555380DD4AAFB16696B3D4D27AD309EA426D6A1BE398FDC 1B8ECF56073465C3098121A7976A82306343AA7CAF1474E3AA4F559CADD70285 1214957BEC602D40B5C8632A074A34BD030A56202932E3C6C6A686EA5244718F AF3CE79700C6A9B13A88A3681C92D169945F8BA473661C3DBE3101692D53FF95 04373C2B1E34F266C201AD52070351F3AC5AF2E93C763404854BA1F9096C7132 A2245EECC1F7B3A8B92E7CC25EC89295BF53B6852C6C9741162F4955CCFAE324 8F8F260C0207A8DD28723E634AA2D67EF68FFB08DD1B4BA2BD8700AA609FEA69 4C08E47D3413A300D91D5C841143F7A01164DF73DB9A3FFD9A844522C08B14B8 831C2351D62E63E77E594A14BF5392C5529099C34ACA6A0D77C6F20E0C0E09EB 2699988D25751DD4F57BCD2A0909C0C2F726575BCDDBF65926930AA987BBB02B 0613013035A6177A660BDE2DA1E73E5BC00779F4A1A9318C09C86A3CB6C0B985 A842D6DF4CD9F3CD34C480219CB42A61E7C81734E5DB7EAC5DEB55FC887660F5 DDDEF3A7AB149E7FC78961F9A6402A091AFCA068BF043C240E2F9F3F88C16C39 F59EBB4DD51B4E3FD2054ADEF7ECE3D5E17702C4BF9DF301A30ABA4D3F525890 51EE7C7CF2B9ED1F3E01D8F7D66DE3667D9757514C7284222EE658F38E80479A 5F9B3CA56830739556F6619EDBF160909A518218A45D4A55177626DE15797BF0 7A3A0A0DB2316B7C849AC401DE506937E8286EFCB629980E587F55A00846E04F 1B8601D655C7471E23278582002838C5F504BD777459F6FE349FC93BCC1FE8FD DCD897BA751C1687BB8C208C8A850C4C6EBBA17D00210685645324BD9943448E E663A34251A58CBC865F0E0CD8379D842F4DADC69C9118AE18BC3D1F0C781160 B1ABB8CBFE42180966B4B97AD90B7FF8211200FD048C5B28278F4629BE0A8933 FB48A6737A8FC484A9B5508F6F393F8762E2AD6FFA1DEE11879440887323A32B 5BB35A63E0476AE21D53CE319D1D075823CEB48C405C0062AF76CF200A71BF9F 85D86D86783B2351BB0CBD444CFF67BB4E038223B7A6E4F095DACBBBFD906B10 2BA943AE53EAFA56551DCE7237A238E17CC0B6025E13976D653302A1289419B3 943BBCDDBA7958283D81E28C9D6FF72FDA6805DA5B49599B7A6A8B66405F9B8C B30244636D2C57C514BE99A51EB980D5959C9404DFEFE2F2B7F28AF6AE0D2945 C90A2F1286CBF3D5165ACBED0FA764ACA2A25C59C27EC136F9CBC8CFCCD88610 405C9B53E8D59079E93379B3D49AEACDA613AE6E0C438224075C43FADC28385A 5B4E53D0D98AAC983B2BC2B0C59ED2775C94E7CFD7CB60EA0BB3F2A41CEB982E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 44 /comma put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05 43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624 2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30 712D165DB6598B1DA7014496E3367E39C2B1263ECDA94AF1363599B3B91E3345 35E38C1FAA3A2254373D2EFC8A090D9EEC1B9890886F53064FEBF025DEFF64DD 727DDCCE1946D6268F7C1BA2A29C4D2EEAF3464C06966889A2A9474A48C998B7 9FD37B0F77BEC0938C8A4F7DC2F30D810934DD9074A0D4913252219B1705CBAC 670A7070241F1EFF0C74823ACAD9FA869819B991B6D673547E7AA858675FEC15 4E4790AEF4FB6FA3F8A300812A9E42A84A1E5FA0C32CDF7432717B1B7A7A483E D8C59D0AF0A55325EF895A8CF09FAD951C4FA994219F6954E79C036C4F0DA60D 759F935C5AD99856DB6F328F1DE82E6182E6A2623FA9EBEB12439F4CA16EDE63 C435C266CEE4DB3DC956A4298E32FE7AD1A1D82919A2D780ECDD3A9EFD11574C 2E17148C75724C96F6806D9816FF74C1ED53860EC32078E31235F1F0726307EB 571D3D1051B1DFCA062172113B368DF7F927E25B8B5D5C903F954694EA680AB9 5A7ABC4F9811ECCC659600935A2D2B417355CED0E9DE8BF235FB36DB6E4EA73D 800C7241C3425690CE532B53686707C645B40D6E941BE510C80291AD80F2DA2B F4ADCE3CBEE1F8CCF8749E97308D8A3073A64B3CD76EE03470F63E1ED2CB2322 8A8096DDF82AF8324B2A3F80862B1793CA077D2CD22E0944FC49D24570FA2B21 EA42BB32AE43705A0598CD92A5D655BE65388EA131384900D8B4685BFCE716DE 71FDE7E6D31149AFD27E9E5D06B8C065ED8FF07F5BAD5BE43F11BF9B9133848E 0FB1C843F0760B43B880E2F95BA5FAC887180BD94FCD6D373246804B4F707E6C A55EA48C62FF983CE5B83DD415E6B3199F9F79B9F2E18F3D81A2E50C067C8A16 27AD4655FCD22787EBBBC38740A6A0C96F1C5E0612F75A15F13DC8CE2F1E888F 610E3A828DA46E7D6ECDE8CE3051B85E0C570AA0AB2736C44853515983134AE3 09F3A196294C6B1588D5101DD81DB9130B9EACDDB522BDDA775D909B05A0FB5D 4BAC2017418AE9D268458B7859D5F6719D6FF1DDF6F3F1771058610B2B1A16FA 1429B29491E4C240C70462CAD84EDD453B92DAC60CF9787F7EAEDD20AEF16F02 88533ECD8654FC44118D7109E67867D4B627F2C3E5BACD66F44D55B7DE146094 462E3EA9E94018CD6B679E78A506A412F6A63224F5097337B1EFA51AE58E8DAA A77C7108462A4D76C4EA7217892A27D761615BA12EC2461AD67393CE6FB3656C 86EB58528BD1C2AB9339EE79C99363878B2C2D1B0F878903FC334406FFA0E2C6 21C7CD68FC90E302B9D4D12E4E1C316A4DD68408DEB1A969EA71CB7F9D77696D B05E9D7A5F74A78F6148319CC1266DECB2C3DA32CE22BCC9C8DC3DAF75DE40C0 9EB284191D60B67ACA3B6BAD432DFCBEFE767AA7905D56E4D6117C880228108D E845568849BA09DBABFBD2A66D39534824BB4BC38F4456DE7D352E0322B400E1 95153F5C46078216551C9F9AE4FDFE0DDA73A683E7F185657C98548A8EC0CC14 2348E86CA5898D92B737ED43782B68A04D6A87556CF22A2CD17A5460F479AB41 B3EBD3CDF3B1EF9DADB4E47348A5F2BE83548140FE6D3FF4066DC58EAB1F0564 C58DD09B22920000B72B190C0C9E40D1E4F761177967025F42B028404728AB26 7667E6B7FE7D96B736B0BF95650C3B93F9208C0319870D0447C84EDDD311F2D1 B2D97834F9B643BA80EFE63A822A47B5069F7527244F543C9B335AF37601D0F9 0E5B4AA0786E9818F20B9D30F1AFAF94C946FD6F755303A1DF9705E2750F28A7 9032C8BD5075E6544736B27D19088D2EEDF0B15587792D0CBBF16B0BBB8541D8 FD843B5EF247A5789C2131A46BBF89A146F11CE1B2065DED3BAEDB7982DABDB0 96A5BB14CBC12B0E82135DDA2E514ABEE3986A64E1FCD334F62809DEE57C3CE8 4F7149AE9D3CB21E272F62F093DE1B92D646DF2529D415EC0C9F7CA770CCC88E 228413ED2F3875B8591C7A9A93C84176E16FE8A23C751014185DE91EAB2BFF28 A6483034E9D6BD5A0E4579429EA264E8563AB38AF47FBEB47310EF1CD1618F0B 158C0281F7CCCAFA53EA0747A30A76198B42F83CC5A8C4CDD3F21EAC95962683 9636663952CD428830AA9764A093EABDCBDD8E7ED2F9DC4867B0B7856A0DEDC4 501D79DD91A829DC0F6250EBC447488562F2DDC910954B2A064E2DC7FEB6D61E 3BE266D23958B761557EF7AA4B13BEAE7C175150582561423EBC7DD345EEADED 9FF13E29DC064F3CB241DB7C15DA5BD4ED2E4A35C7C678CB3CC968DA32D7E462 5A283ABA6A7C37CBE6AC3F50CDE010C5A58597CFA0D6F2B18FCB7EB1F1F4351A 238EFD32DE3C8669030B448A17D7B8DCC65D4791E86A1356982C4350D3BB7C98 48E7084DD80FBC46E8355FEE4E2843F0E380A2E0DA53DE95F17ECD3439C3E8E4 5BB55B66A3CB5566AB01D52BB475A23CADC961CA7434A5C67112F872111DA282 D4B54B1D8AF177FDD13BDC58E23B567085138423BD1383ED7FE72AD5B4488E00 81939745F9D5EEEC314C158B2B89C96160CE1157A97DF95966E68A20D7C7D1C3 1C0DD39D2B32125ACACD1F0E7031024C645190BAE4017A0EC71A457AA7BD8FDC A046D20573A2BD1B1140A55AC771D9F649F59C8808242F83C0D0E4DD89EB9A01 F6004778FA6DCF36C281A772D1BA8951C4FB2C4008331C86962ED087B35ECED2 0AF6D2997C8A54185EEE781BCE2AEF2B6048F83565091AE2D09E586B6B873263 7968321C68E3FE5F769C954E826B7AF6443DF7C85575D0198BC9D1DA51E57659 4CB4E641B22EA1C0F5271CCDED2CEEB62EDBFB50C87F67095D5433BB06F9A2E4 65FA29E817A77EB3EAC6BC204DC698CE495A9258D396172737E0CE46A0B83EB2 5AD787FD9867C417FEAA6E9A2B82A45A1C113CD61FD52DB3DC784B8CA34B45D4 5BA4A51926490399DA34AFC6EF914D03E89DEA7E8D29E3A08DD7446AB998AC00 11E38EC4CD4AC0CC5443EE9ED3FE03A4A278F2BFDCFF7A329AAA92C197877638 F7EA2CCE9B98E138A8A29105D3FBE66558C38895BFADC76513B92AE600CA52CD 2B3956A59AE3598AE3E4771F88D44C53B8BC449C9EBBC24CDF6474BCEC4CFF67 886EEB78E02D0CDC70A8B57CDE753B26F82BA6A2715658135288ECF075076846 0B2EF7A1A8F85370FC569D9996B2FE538BA27409D3048ED533833B0C38F50681 069E6B906E338DF1A95EA7A207376B5760D0B97C6048E81569438A42FDFA0F5F 982B146210B9DA0C6C6DDE7E4DFD1F82E5BD3C7AB433376459C733A45B100245 3B5866783490B198BF8FE1E584C8AAB115385CB8EF1BDD80440A55618BE07866 991AF27FBCC24BF1BA2BA12C383FF1AFB9E55BF595725DF2BFAB550C24E78D72 6B14E4D06A56F56F4F9B251148942B3C1B164486CFDA0229F5B7F7C0EFA1E537 7DEFA36C979B689C1176354C30CC71CD4F0BCD57255910083F5094DB930A4EDA C7932CF89109B949A0BEA607ACF8D3AA7A776131DBE2107CFBF9B01B36A94AA6 30F3DFDFC9A4E45462CDF9C4F81809302C453CEC88F6A4BCD6D7D8247CBB5401 75249615C893B72E59FADF3218D8EE1F7C4D293117F5123F7E32B5C5A661F3ED ADDE9B641E4621E7799835A368485A9FD6DB7AE67C6B3885F6897B72C6913566 6C0C76696E2B9AC2363D2ED40B1BA1AAD0F057E08084520D3CEA5A4266F1C930 DDBBA464B2598F52E1AE4DD27D3531DF8AACE18308F4F6CA7F242C28385256D2 532A7274D2EB76BC042B262791FCB22DFEB88B58A05BE03B7544903D3286D337 FB76E55A88075085277A3C575C90BA6D9E32348310D7DDCBCDF0A081B4E1B0ED 8B99BF5E7DF1163F3B29AED8E28A4411C081260AAD1886928BDCB86FCD749BFC 1A1CB0FC67710782B39DA2FA325B4268976AD25FCCCAB6C182AE32D875F9DE40 C80A94A879B57E0B2F837B97431AB798C96D701E54F72189346DCB00481A5824 1F97C835D74853A10DB246FE1439522612511F43ECB4AF09230A45A481E5B902 9F4539F15C3FB2935865E926E98E2302B33079748D5766A5FE5DA049A1B9DB0D 6308568B14BEC56F77C9927CCF0F2E8CE7CEA50CC8631377C9528A0C4B74D83C 719C42B43ACA8038CF9E5E459679CE792C7B139DEC9EAC296BC6477F298A947A 24EE80E965F698545EA273D248D4DBECBEBCE1E134BE54C152A6AB4995C1DDA9 111A90359B7E0E5B2A988A23BD4AE672281C8E4AEA7EBEA28F24B7ADBE1E01BD 1D04D26FD410402697D836F44E933843615D845FA80113EC9CC7A69F4DB42B98 6D0CD2E16FAB1658318B8A97A1F34C988784C75AAE519F3AA7288796B3D12095 84301CFA059C88ACCB48D48431D0E9522D2495B690349CE3B483C2285EE1BACE D6CE67E7F3A21BA39704724F864DA1C235DCB8DB56098565CDEF44E305AB8628 735A8C82E7E505FB7275CB96F93365A19A271B92D3B98F4788140106C52F1940 01DE66EC903EEA626B750178E619461F87A60ADF4FBC973250EA990AA83B2ECE 273DDE3BB1365E2188ED6036407055A86070985E2297B78BA239072F9CE4E4EF 93BD74E65A8E16CFF23E74ED2C4E68371C1B3C75FBBF229CA7C9F9A47FEDCF64 B4FC65899D911FFDED2A22D602FDE54A5C2E1E76A614CA7BCB7116BC7E999E9A 3F39606BCA2CE5DA129DCFD3BD54AB968E57CE2F8875C4470F7E698D9D6B32C4 F9027740B601899FAC7D2006B4273390E1589EFC0D93844939EAF512A6F9283D 5B79BB57CAEF154AFEFCD6DA55C60851F816E82F301EB50316436B40480CDC8C E89019440DC665025E354B4BC38B5845BE84A6A32189BF236495D0ADF0C8135C 834E0FD078525A23A318583741C0A1ED8991FEE67A6B08B76F2752794A1D9802 C1DC7963C44F094AB682F837A924DE22831B7CAC3E7F64F20D22AD2E4778084B F9699DF59CCD03721DE396B7E67FD5C96BFB4BC5444F499AAEF31154410C2556 8D94D6959DD3995EE172CC7566EF0153021E08E0B729CC91F38B7BF99AD3E578 07B364D653874D0EEF20C1BB350D62B486F338957279EBF6B9F1D031C8BE8304 CD3824423843E184B750FC44CDEAF1FBB62647CFFD159C6FD0CD03A5B2B5C5A6 BA96A3B3F2175E77B2503B7A31296C3800D40D08B1D05CCE4F4AD9C5B8517DD4 CBEB91317E2897DD3A87F207AE00A5563A12F784B35067F7C5F90B0E759566B1 F4719B6999FB99D4DBCAB822F414D1E56437E804F298A33ADC3BC529A4EA12EE 0E187D2B42A39F5D441076C0172A3FEC9EC49E4B4B7D2F14A06030D729C4DCF2 E95A9FC23833A7A552EB73CE347A708EA75833A66153B3597226AA3502F405FE 2F0089D65BA3BD10B6E56D3D2AE1A4F0F57BB4E7D614692947C507145DC09140 36A2FEDA5218BEC7C73B14EFFFD1DCED9C2F05BE603AABAAF449FF8274F63C8E B9BCC8EE19B6768FC3E240AC120A077985D7BCA277FD06B8443C4054B6E5ABEC 65DB5B6CF2608AF1A35C0C250286AE6ACAC5AAD9F1E84D1554B703787DEAB48B B6543964A4C4AC2E10A6F52E585C3615BD921A7EF6FF05B56BB06F6C16870F58 EF65326F9BC799F033FD4719F85E577CA11E20D52BD6A92A1459B54CD0FE1C45 6022225FB9F637808ACED409924D2BED4904B1A6F5DBAD0BCAAB333252D9C447 E1292928ADB52C414EAC5ED54461423F4A745F2ED469665686AA3F6DBF914753 54DA90D47DC2036B888BB3E8C81BD96B6636D4985E984881B499631D913DE2D0 1F873D57A48F9392565BF27D26B9126CABD10487328114DA1398B4DA422C28F7 0F7CAC19FA6B2DAC11B14A4E1BA4D0FCC14C5581D90B100B617EDE37195A67F2 6DC5371AEBC0A60D1E9E8D428C91DE7147E937463D3A83A5753FEF4F3D852FA4 3BB4E2826F8B7FCDF057E81BAE3EA08B88C5E347A9AADF338541E6EC02DEF8BE 7B759CD47BB9278B8629BB7596CE548B323465C7ECE9BA5592B48F50BD0F4951 E844F5603136866A4C5FB0C77ED355E6A3F87446488A24862B1D40CA4DE8D2E2 69F4354A49227A5E67A5891FAB0EDDCF3DA61D73F4B2D46455006271E2E0BB13 70742CBBED0D47D41E67ACB89590756AF739890A55DEB3D7CD5635E0F29E9492 46BCCC5B8ABE6338B2A6ECE693B7D122BCE504473B21AC6FFDB70FE1CC44AA9A 61DED2E1DE627A05AA6AB2BF2F6422FE9289E11D89F01B258BA82B3044190E93 FCC3F51275C66BC7AE817748C20E9219B286D4CB3FCD571C998D6CF54AC0D01D 0FC050EFAEADFC4FB61CE293186009A31354B3CA20660A7B313FC47A7D539E35 7AB260BEFE7E78BCD3FF014C25470192B83FD8EAB975A2F25F25F7B3DA8D3920 9DF9BBDCBAAFCB8D1F9C266911FE077D122BF2FA2C456292022C06B2A96134D4 03736C80CB87AA5739F79265B104B9B283887E87D3260A465A2DE3C094B54C2B A719FCB674F0C533B5292AECA87BD9E1FAE18FA59B527C9635B77A0C45ED0143 BE4619A37DDED3C900D0D4AE9E29CCD4A6E69B6F411C044B62DF38C8E972A5BA F854FCFD80D9E30D9B90C31508D48E1A4CBAD9975AF4789777EED902926695AD 30FE874641C1B6BBD9E1BB245989761171D76889C92AAE8A1A2C38D44EEFAFF9 987B900CECB3A6E605206F3400788C15D43A709E9102C9FC4C684661CD8F4E4F 3D2CB2E680D49E047C3E0B37F8DD9B5B61450CF233911B65CE6CF06A00D5AE59 198DFC3FFAD98F7B4D1FC954F0F8055CD1B69BB2E2B70DA9FA38FA35156278A2 C435743D67A19A6B6E00B9439C0D87BACE1BD70F35B957EE067E1761DE46926A BFC6EDA3B9FE5CE82263F920C8315F4AD330AB6BFE13EE717546963CDB255B6A CBA0813A3EECB29E69A4431D9DB1AFD0AEC7DDDDA1687111F2617121B67583EF DE27ACD00BDE56BB8B24E6B3A3667C7AA290A79565CAA5A39B92A6A11E169FD4 7AB929769405DE2304F19279DDF488E5850C8D7CC06D8496045CAA536B874437 5D12F4222F7BC3424D9BBEC58E3C915BCC8AA2305FA6E3A6C8F7572F31FEB8BE 67115FF318D1B739290E0D86DF67BBF7FE2D7DB4CE34A8E72088F136EBEB1699 BF088B5F1174356C62AE6C05C1112DDF7F125C4439FBCD41EB205CF446CC5CE0 4087A97383F17D4D85E88FCA852A4111DDC13B76BE2D31D63B5B80A6633DE83A C68FD3FDA1D4DD30C209A403F431D7C0B902086D705E715CC98993A65B4536E0 60ED2902D3C6BDB9FE7824823E9D4DD4CEC7AE050D8D24C5FF51260E843ED9FB A3E5D974CF96944C02C355F9983BADB66964A497BF5ADE9DBAE5C8A91FAC4F4A A221832EA664846F6768D695CE6F4A57019B7EFBA228AC627D8E0FAE8E751DAC B1D1070C0B041533047DABCEB90E6DCA94A67E07561275074785873E30931043 D88F686F5C9DF58C68FBF02EE9601B100C2853483977D5DFE6B9893964249A1E 85024E3EBD3E5522CA0D42A7F8D8096125D26203D91E93F7F53AC3B169B23274 E9A7F6A82A485FB1DEA2A3856468A614788A7FF667786E31A7BFF05AD49511FD 1BBDF9C122DF2F4A90216071D2F40C4090A3E75C4722E7DD31F20E6534FC9D2D 2B11C29FA0B9F3C12CAF72B22D7EBA6AA3F46064EC7AD5B568C146C4D11E1120 1CC423CC64CDA283B703F2B6CC53B03FEC8184A1E12E0E64911380DA56B54C87 7E20DF53C6C1A8A3B8A51364C2190C0040829B21CFE32DFD3EBAD356AB714AFE A9F3F17F640B7FA4F1D1932AC77BD494673A92D722106C6FA707A8941A6E06B7 B6B784846119D6004970B75D63D4B36167792E976662CF7863690F69C6509065 F8A6039B0A121CDED1873FC0CA517465C1E882E7A6EDC6BD75C93E67832DA0F5 3F0390D36BF3BBBFA1B77A24291EB5823D6181A089791510A76D296E93A24F0E 522C9EAC4B02C645D46263E0CDFA9248B9725C0089FB2DA78F7682E7BC5BE375 CFFD2591ACDA56B9BECBC342B9CE42F5BC408D3916FCD13D26BAA1453B8AFD94 6F276E545ACF4CAFB8BFD01E1F6EB808E994579C520EB85621580E36C867FC29 D82C550E3F35DB262099FD8A37EFDA8A86C63C598B31AF3FC5D6E1BDC48D8B36 0ED11930A54BD46D85C1A89C1F18F604A77985EF33730705399F862C735CB471 7A517CA778890CDFB9C35698D33F6A38A67A631F24DB95DB22D7586A416CF5AE 0F119125EF16AFF97225C3C373E7951287022EC3CD188766105957157C3C1A01 BA2F130290B5F98CE4445952368130FE3468186ECD90E24BF958039E4C724A4F 4EBE6713B7D2F93B08EEF45A6989AB58D57DC8881794CF1171FE178660EAF026 395BD7395CB6B7BE49DBBA28CBC30231825E89394F10A831CCC58DF042B9581D B88EC2324279CE19DA29B876FC0825ED9185111496559F3F4CD7EA3E69B3A2E1 B630894A968F3565AD07F2616A8BB372EE1CA0A58EBC41B3AB02665CC948A506 2A9DAC0FEC368BB04F932DD9715CEF6E0CA2159BA9DE52C6AF32F29D55162322 6B2E952C516B41C52538D91F7C64B521489227A3F826D87808D7F38202C6F885 2FD6038A468040FD5177838E5950F3B171F6E2153970DD9C6F6E78963944DE0B EFC46867EB5A50230BAC696C793853E25A114E8E01B14FA2E91D2403958DC8A2 D24D31077B4253B5C483641D635534EC6AEBD65B7C81536CBC3485BA387B9205 7D813C9FFF6DDE964833FC7D47C07158C23408428AA82F8A2A6F299C0DB08D79 3570679F5C034238C73C916057A96E52AA459ED450609B8D6464FB024A5A371D 91CB9BAED1C113250458869F997E6315685AFA17E5C328906B4FC9A78E539913 5928CDA343416B4C0242063E9C49122EDB38B9063450CCDBAEC1C16C15E948CB F970CBA676162360A81647F39EBEDD54B9C53328529C640983B5BE0F04595E73 A6D84F5CFD86E1DA42F7BE7EE33441F3FCE0E9451442D89D8302CC76F39CC7CF A5E6DA8CE227CD42C4F99DB10D829D85153BF7A08CF72FB88DFE10D08CFA5060 CD6421C8EB301AFC38A80243D2D370368D052927DBB3826841995BBDB2EFBFC8 4F51617E83234AA906DEC34BEB84BC0C511D28A87CCAB72D216BAD9E0F952108 44E369E2454C0BBADB42C925FD4E9C93EEEF2536F78392C409EE0C303996E8DD 5BB7B707572A73EC0AD84F9BA5D2CE3DA82341D24D6E0B262805BA7327EB65F0 B63B291C25DA70E6A96D5CAB02E7DB6BDDA2D7C396D53683990B6D4A1D71B5FB CBC19A35861EF6BC34AE92E91E83373DFEA17417A7E2CEF7AD0EF3F225ECDD34 A4689BFA6A8BC960D1A52B6A76DE5F14313C9C71A362E0E994A3CB4558DB50CD AC27CE99DF1365F0F41A0330E09230E6F0ED06AEDC01884896B7573BE864191E 68DC62FAA0EB8287BBFC5AD4A727BB6B86559C56DE8E80AD99705154061ADF05 4AD4CDCDB4EFA9B54DDEAAAE2A958852394157EEED67711709EF83D7D3F00552 85F2D406430AE2811102D65E8A2A07F89B54EF5FDDFA18F61D4B085F64A5380C 22174B1BEE78F87A2C26F536E19237664DAD98E133A61BFD8FA5FEC3EB1C46A2 C6F08BE7796A48C7ECF465D6C37F17FBE0BEF0D86EF0D15B3837296D54F6AA71 EFE01EC5E9757DBBB47C75FAAE85A54C120706B7773F333E18743CDD7F4CC731 2AFC6D802559241F6DAEF43CEE59F17C822287B4E4329C78FFB4DB8C7DB43AA8 18D7D6FA43777D86FC8ED11D9F224AD16B465ED8E336C25F2378F0E95331FE7F 3B3311FE4FCE9A9ACB68D7C593BBF9CC3F673AD543E7478AAF5C63E3A693E1A4 51DC5A57EA09877B108DA38C5B0E20D2C8CF289176771F8C37C5B4E27B226444 415DEE0B03787D6B75CA699CB7A523896278997313ADB1B18376B60836E67425 D2AE291D57D98FD81920B43A27B94C4C744C88319202882DD992AC629C7863CC 4449BF8A3B3E5EA87DB73DC6FE8154B5A6A8B901F48DB794DA5CF68C8BFC5B7B 0871E3CD12C3AC4FFB89E9DF8CF6EE7DCBAC75C2FBF6D438FA3A9E3E9ED28F64 0ACE37249776819C76B27DC7BC143B0DD9AC2616654A07C89E8C802594743887 8DE2A0652A749D10490B1D1AE370F4AE264A99CD5E18499F49E0FFDA8AD5C1DE ABFF4F31BD58BD70130BD06F7C9572DBADBC772599D6E8387C9843C26E735767 2511AA31CDA3319F04E28C3CB6E237ABFD25755C83CAED8C8EAC611B76EB320A 42B8A30198E25B3437E92A4A25A24E47441D27053BA43646A4789C9528B39D20 AEFC8122CE90D56367DA42FC11667053F0965D517E29F5ECE2B299359074FAAC 55DEE7B2990842659F7291201F64BC1C8894AD4F4E96652F3F5B961987822D33 A4395C5F14A725292E57033E54FFAC2ECDD9DCC87E2679FA9C66C417931083F6 F0B744B1B778842A06A6B37ACC004498963FC7CF1FB974E541048D9EA7AE0A31 8F4CC57829591FC768CE6DF3F2D1799497C0AA490BE315E7D18D0FD16603B76E 774BAA198A68EEAF6FB9F7231E1FAFF9FA79ECBEC159EB5C0DED1E8AB66518E5 5D7756A9B7A28FE7A252F49F9C0ECBE8F0479518A43F100FB331EC3AE7CD14AA 8C430E37B4681B2FFFF4B4DA18FD1CE2FE96173A9D83DE9AF9F1D10A51374A68 217AC73D2ACFFF9EA4634AFA242A3F6151F631938D3519F72684DB67059BA07E 3043F72CCACDEF6686F67938D3B08A029EC0C31680AC2B8B7AE1E1163DF458A1 53362709163C570E61F245899FC8B9DE5A10455C356B16DC1CE9602903337BF4 700C6D50EB0079E1AB1FDB18090B90E809C9199D8C5A302D5C1295339AF1079D E0BCC727D07BA7279642F7EA8A6F67868ACB094F0D0788596165EF8B49B6326A F247290247952F39819843D7116DBCD690B81606EC83BA24DBCE9698F5562840 0DE42F70742FE181C1438F5754B5666618BC3753703A31BD70B85132BB94441E CC9513B8013454CFA3EDF734AA19CD69F7152D4B8E532AB2F5ECEC8924D875F6 E0555BBDF4C2E5869AB718282D95E340A0329B0C5D83E5305043A49FB4B5A240 67995F3A3D005C5163E617656023871F92A94C4D213687C966B3C9F63125E5AB 01C05090211BC7EB869F4B6D89E07E7AB52C998AE4B99B885798E78797BAB10F 7BE7E2A26C19A7FC59C1EECCB1880558226F4467E4CA6139AD7CF7A3C0BC8913 80A4C1633F322A96E12E4F543B5A2248AE5CB39E5DC2C653A684A7FC4C3EC3DD 1AD06698904F052A50EF846BF80894249694CE2EEC636537C2FCB7C43450E49D FFEFBAD97A680C396D378C2AE1929D6690EA995CE336AE9566805C870F3F0AFC E84D4D4C2CC87728CE73F3A8120E128623D9DF7A16B7263A510D4DEE7787A3C7 D3FAF1FAD037BB27DA9993150B68E2E1A082C07100F85C38782CB18E91094C21 992EF3FBC9469D9F020BD9CF531CDAAFD75486F38FD7D20A2058AB8BC616AE29 E365DD8EEB3F44079C43CF858D6E76ABF8B0305D8D1AF1CDC286B1C9F5E37C10 93F14C80D2EAFC34CA398DDE1813A84E326E9F6B6A819DE8F610F5D663EC9A61 9DCF5FFB482585F3D3FC88654D54BA78371D57AB091DF691B2FB7ED4DE65A187 E828E1B4B2C117D240DD39C10EB7E328E0EB397A2E115CFBF993C6FD7B8B360C 7B5A151752770C955E92CD6CC2930224FC37B4B2187C9D2D187D4D1AD0F38C0F 4EC13A1246E17C5966D4B422BD54C6ED89A412551445259542A738614BD601D5 2B30960A21B43523EE6CEEB986C9589226149CD11C88167086CC4887C1E461E8 E6849E06F0136891EF87B31E5F8DCCEF1F13D68A656E97DCB871D8266C18A828 01FC5B137FFAB775EAF3F2B5FC8E0896CAEB74C49D2865CD2E8221FF4C2EED39 86CFD47CBF99462F79B851ABB16C0AEE142A49D5B6C4890F6FA7614143525C93 598BD152C550D1555E347A55F1374C933A632AE1595C462440C0BC39762EBDD8 00EB2088CD8BE7F2CF72C786752D93C5C332E23D7513D4DE6C7AB0C9D45D6484 42BCB92C2723CA156DA4E9299E96F73A561E1CC07341B260507EA0FBA3AD152A 1B2E3BB97CDE40504B854EDEBD5911576E4E8E38C4EC3C608C46496F2E0019D5 B2B40B1FB30EB0C40A09833F601276EDD33BCA07A303CF538BF9B6094674C027 086EF007C47C7D94B8F52260B56FC93C4C2A2D5FEDE93973899DCC6B5559F624 ADE46D85BF96AEBA8F41886F6C3C3B1D3941597D538B5E9E84E6917E8EF733AA DCE8AF32668E3B37BC3BC583E7AF46949503190D2E2F40AE88ABF04DF1E00F1B 2FE36C5E26217E65ACFE7E66E37C7B4965C498EC6B54366C5B2623A01E1E0B31 81FC272AC22B2ADB83924FED315F5FFDF61096FE04DD5DD1BCCE5BEE249D8AAA 9E68E100F649F6AB28E0E5CCD500829C5208EBC81E6FF341B3D949A4FA77C53D C3462D081D83DFAC2515A36117BFE1D28FFD12150A671B9EF2D36C3EF576AEAB CC9A4A0173A276C244C99DC0B5D0E8DEC8B387D314C39EC21CBB0A68F265EF85 D93C616BAC896557AF3F3A07745E3D9935FD2B26111238014BA0883D7F40A82F E734890FB938D86891CBF35E1D3BB3182FD42EC693803583F3F90899F6D1784B AD28CFE00C8779AC9C63349393F6ED5BAAE66EE4BD51F820F46033624E3D492A 04C0BE71EDA498A8FD8BF51652F5481186088DFC976C58C52846A02359AA64D3 9185E80BBAC4DFF0829FEC904B68B8EE46078D6D2B588621CF215D7D30B5A82B C448E3B31494184A2D596C0A7718020394F50F51673A8BC41CBA7C1C1EE64D61 BD9FEF88F26784302B7D2004B66E9A3F18BF0D3E2C82CC8711DFF27B252638DA 32A678CB4D26C1EA13BBF774706E82813823DA958B6F9B4DE46020F7AD2BA4CB CDCAF61E9A84DF3718EAE6FF9705601480E82CA7E7A58CA1E235BCDF4EB3A5D3 C9858869C1CE47D36E0DA51E2157A37918D1EA6DE1FC48937CD77E03139B6632 19853C54930BEE792BFE3E93740A6753CE3D609EC4971E706941EA0B76DA4E8E 3059FEC3D70E7E1253A03F09F8A1FCB6FA2173F6A5661A93C2A9D131591547ED D1B2278CBD5C2C7207F6E065C9BB5FD0263651494DF9B4C05A932D33963B4E7C 920FCA746B777F4D2CEE25750D539CC4600089C3E10A5BC754526B18EBCC14DA D07F328883F52FFF5F862FDEB61732A9970078178AD0B7CA87E4FEE14DB55F2C 88B743F55281BBBA27576AD16A730A42D4E1584BCF185867A10E266B43D64241 D21E5C40E18E75D901C9EFEBFE00D90C454AADC7226F659D7D17201D6E7595F1 EB85E4DB32D3801CDE200BC3CCC36A7FA0ABE6979C968AA689E0574EA8E8F93D E15F0F02565A70DB3C5A814E2C532D2BC2459A51C364ADE0FB1230FEC4DFD6FB 3F2C59C3A3CC22CA60C752AC8B313A41C4DFA18DF14DB76E8EDC6DBA37CDA689 97F4EB6C832EBA543FB55C0492862CE28CFB1F28E0E5FFAA32DF8FDCA241DB55 5619583FAD76D504EF599F233C424359768F6E8F0CEA95774901577277DFD8F9 0418598E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /UniqueID 5000798 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 42 /asterisk put dup 44 /comma put dup 49 /one put dup 50 /two put dup 65 /A put dup 69 /E put dup 72 /H put dup 73 /I put dup 78 /N put dup 79 /O put dup 82 /R put dup 83 /S put dup 84 /T put dup 89 /Y put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B83BC0F1C097792CFFE7112D039CF77EAE73CB4E02BF 60F5C3F629F7BC5A27C207D70DE63FBE0E023452097D5B7AA5B2CAC668D4D075 1A0F70683E96AE35A6BA0B59619C215A7012568991AFC0C35789DD0ECE45C649 F44580845F0FA422868CFCC8029513235C0286B76196E350498845EA934DF289 1D0C954B079BD2977384B96D8460B4F50EE635A4C8F7A3B6866F93CA641F3F2C C93ECCD6BBCD792189A12FC9366BA7134EFD67A22B4FD62465250E0BA6B7C627 73E8F50E379328B7FABA341B0D50F9A2CFB055E01DDF6BBCF6FE4114BC36C10B E581D76A84EA12995506C33DAE9035683FBD5F54AA1545992B94B8ED946E5866 2F2CF263CBDE3B77E12E7D863F0A87788D89A93707CFEB6A5EA14C8BAC433C65 56730E3E8985960FC4D00F2B821A9218A20F11EEC2D6A153C403EC4BCD0B7573 5BA5398D8A252EA71E8928674FAB4CFC6C2FC36E7CB12136830849198CB0B249 74C07C83EC06B2E0A5323E3320ED056D02B614EAD64E0F8F083F5892BC3881A7 A9279ED632967D7F5BBA2B7CA37F7BE21987D8BD349C3DADF4682D4088DDBB35 D6F8F74749063C4F59AF41B9AC950E6E588B3856C7F7AA1C9030B9AEE3D70321 2DA63309EA56951A6E077EE1FEB9BA112BA69982E9EDCFC5A3B462FCA9D16A5B 951C2128F30DAFEAB3007F0DC4F16F3D38371618A2F4848A9D0D59062E63CBD4 E4E0F337CEEA736493E344617B5F1EBC96096B66ADEFD26110B4A59C69FC619F 4CBB9FAC2C9314C831A6399B611D597F4F817603450983BEEE834691DD492844 A222BFBD54593B70F18BBEF4D0969B1EA062F7DC61DB08F88E988B58EF871C3E EE1F380B98FBA95CA4E524DFC9DB291A5222D9792B9AE3A1F64E868B1BA4B5EA E2BC7C68C837776B01738FD3B8D41A3091D8B9A27050E56E0AA39F8F3AE52AC6 42D30C4363786477D1C2D2FD832C7E2418A7B1E24FAEA7AB5AD1B99E319E3319 BA790965EFBEDC46D4E7699CD4FA57A28ABCF8D4C05D4C7618C133ED3180C465 80FAD466CB46D5FD53216F0F15EB9776562B7B6F808A9D8D9F4DE099D7C99C9D 06588071FA8C36F774B05C0D65259DD0514539030DCDBAB67D6E1A19B2A6A547 3BACEF7DCCA65B35BF4FCA3531D08DC5A301E0C112FAE9D9173B7B47E7F7C531 3103B70633AA09E4F87D64CF5E3B7FEC94276E910FAED3C4B30C32C3743A5C39 B5FBFB0D16C2B1998F53A0C3CB48DF19B4FA9E98BA3D503F5B82EDC2EFCD8521 8C9006735D194CCCB8DEDF3D465F2C057E1F8F2D35B362EF9D084D429BB71584 62AE48163478E7FB8AD99F01600BAA8B77C6F98DB7DCBE7E0C46B917EDD2CFA1 F209D9A01CC283B773BC469257401809BFAAACC0C9980C497DEEA796A60B992E 39F098D4218AC55FF0ECE7BE1CA314F586AE82CE5B71E4AE1D768BB52FDAA949 AD21F4FBFC0EF3CDD44FE8D92EB97776F618AD9E38553BD0492149B3BACD7FBD 7440BB8786D93167C8E4FCF61AC3D360B06C4424F4D46FA91B862D7A27BCEEE6 C3ADEAB1CD0F8A8752EFCCB3E592162C57933169DA1DAEBFC2C866C10A5F7840 5447A38BD856996DDD56BCAFDFDA2979FBA4AB6D4FB7E70E20B76F5A2AA3442A 4EEF4B1CDBCB3278A1F55C99C7C4F7F34C81B063F8255348553E00D3CD5F5A33 C7FA5E4FFF58B2D19B9D04915B1A33903ECD61512AEEFB41E67535D32AAFA528 10FA9F87F68EF03DE847AD8BE921CF3D20D06098BE223F66DED6AD3BBA11F79F CE8F4EC2A83A6264406B36A48FF893E972BBD98613C6BA7C27804BCF2FD5A4CA D8DAA8D54F14C21A361CD594B9F76822908797D78288D86EBF0E627CC4C8F79C CBED3B764D2CA0D05BEDABDBAC5E09E2080CE815A76245D0E0F13314ADCE77A8 6656CFD4C2460601ACED80939C44F600BCA055BB0332198CC80ABD2A7E361E26 2AE4C41F97E34A97897586C5D79FFB57F5BEF34EC91CFEF1FF1F64F7D1FE945F F0DA4CCA520C5941F83318E765966FF0B9729FAED847F59264E7C5752AEB8AB1 77426AFF9CE3AF2C1A3FC8F8EFC4B6E74A2201B08036FAEE8F74D6E74A0D397C 7A7CE3E2D1F9BC1CDC1FDBE1647CA8FDD2AD012EBA5D8D4DBBA99BCF9ED3EEA8 E8773C09545D482E30653D9FBCC67B925D48363D75B11A0E402D9585C2D5D053 EBF046430962FA0D514308B0E9DCC14CFB51C0F9836B2244650E77777826DC35 B5480DF48F8D9A9D731D50FAE55365BAACBE23E7FD0F4F6E22EE8B17F1CB806E 3FA29E94280B973A85EB8CB57C047605811637076E0D98C349353BD4207FCA1D A11094D4DCDBB76B4AF79BBBC627ED1D176D82FE6CF34A24EF452B1F26F543ED 2193C75C0C003B6B3C030BD9AC90C312698C4EEEF07D64753999E7E45C326DE9 D5F1F3717D94E94E4B27F809444E1E474358D138DFABCBD6FC00E5DF2B6628F9 89CC2B4821E8486147E9EB9CC942809FD4514C3FFCB1A9DEAEFF56EF66277F41 8E3F7CB7997BDFAAC4429B1FBE3CEDC59DB54BA0A335AF065DE6A9981D9CB365 86B48861A11FE0AC44C1C6CC9EFE479427C4CC328AC44D3C4312EA23A04F6D82 A9A0062AB6D412C5A1A8CB99E7527C3B37FF79343AB8ACD53B6090341960823C D6F5B332A2EA6C19E5B237FED411F3C088AFFB94F1AE2E4EBCD67885214C1333 3644DA63A8BAD52C9408C0E34AF8ED898422A0A2A4B8E9698142B53D76462200 36CF4D53F66C51AFE6336651AC3CE180B9C382998331BFB6A86B973955D28045 E5106EF370EBD1B57300A0EC9EAF11BA81A19131076A75D6364556F0CCB5FBA3 872299EBC8A91563904119DA00450E360B5B7C5B6A6EEA87C10DE6B911109D46 FBF66B637688E63AFBA42D647637A654D7D16F5A85382EBF72A7103359CB5899 AFA4C0217EF645D765BA796BC00788DB7590F64EF066F5DEB3321090F544FFA6 1F2185AE24C9C6051D625C2FF4D0CE0A476178E9DEE5A1A76E2139419AC8C875 CABCCB25A1A1D18E4422015C6B8BB9EAC87F01E6DC4B5C194A0AFDAFADCABC1A 14F9B80BC7CF2B18E2C9140ECB160CE260278344E3168A17DFB3612E8336800D FF3A13DBE3EDA20852D38D89CAA2B692EAF9E380302C7587C5ABE01A862FD37C 1BD1315ECE39E266FEF9D847FD2A45DDD7A3E662C4182233EF90573138EEE323 F64817AA1398052715686BCF461D29AAB9957671EF40869821CD6D5D499C0862 17951DC682C529CBE8E8C0D49A5E6FA0956B2BD29EF5870CC2A2AF06EC743EAE 6D9530AE87BF2018CEF6408BC4D97086451A0124A841A094C34F2A6FEAA97D68 7F60A45619136B914439B1B12326314B821BEC74CC70ACB09953F287C5A0932B FF84B72200A20FFCC7F0038B44A5A0E9958490F023D786EB9E2C7C88D95C1EB5 570424C0A458E89B31F2E681B99CEEC4F6A72E7BC4B7E6F159C84268138AE583 138484A95D42F3743423480678BC749D90B1E0233071693B87E9277F3A1D9D43 1A0CCAC46EB872FD71CE75BFE106580A89DE930211125CC6255361FAAF2DAF57 9F4A86FB8F1FD6BFF647488691B113F5F4621614E87502EC3AD9C70B8770755F ECEC384171BE34CB185439F8B1CA228A0E1E2FA02D38FC2E6B1A1B1BDDA7648E C39306D18013CDF6F9FE27861C172CC1E5EBCA0F9395DA7C363799EB6476A573 CC95218E4B1387908DD37C402C5E14DB7E1236B1BC094407906120EFCE4D620B 6D8279BA52D64C5C3BE3D6E162975B61D1B8630C10A5F342D4244C9793C6651B 10B0B67CB877E7BBD8190FDB646C044734EDA86407D9E3414404E392EF366FCD C7461F6E08AB2B09B4FCC7C98C97E4ED4CDFBFF8AC9EE7E97C1A7B3A0DDAA3C2 F9849E4003A8F043BA005D297E5A292982CBB759439F9011B3261433C8EB3F92 E3AE95248806CB2665DCDF4B3759A48E1EE84BB1B8693AE805F4631974522203 3F467FDC225087213BF2D79B8B148A47D96DCF3F22F3005FF5541898F95B54C5 07B931899E8EA1BD0F4F46457F63D64E57CE355BBA9EC53AC8257B1B37ABF0EB 3429392E1427A120FEFAA66D1FDDED3F1D26439168690F10CA3C48C8921735D7 E059470DF5C64F1EA4A20857EBFB70FD768C2DF77B90FD83D907268269F2D233 D603056697E13F1B46DE86C3153A92A619912D6E5316E0D1DD7F5DD8C7FF1B5F F2FB39A652F6536A5BAD407AB9A5C9D93CA5A6284A9FAB4D353D54C5CE177C95 C2C3E5918524DA01F22BDC2E60FD35D43C46686877A088099F000C632412562B D30BFA5DA02A94740A250DA5F130E3ADCDC390F2BDB1192DC7C5A7E4D7D908AE 2E2D50846BBD1191FA262B2E38416B5F99EF71510530CD803DA1303CEA9CD053 24ED32D8F992521D8F3B358A56B42D89EC455210D052023EEFC35FBD2CEE6A76 A9F715D6A19BAACB7A6E56E4DF72F516C4F9354024800017E30C3D97EF968CF0 07992318D1C9B8DC96AA1639B0B0F460D679D6306B34CE67203A97C9A2043AC3 671DA26BFA89B90E564C29089000CE852D7E76776ED7BB562036B78CC746FD2A B45880E09EEF0F7BF4BEB7FD573382968226E4AD9094D801F07B16E63B83850E 88111A93497978E539051BD0176D51E8888C1CB09AB7B64333C87C5574772010 A74416F6D539634394B1BFFAED30DA7F67B36781606366C11D722A8C712638E9 0341CBA1A31CF39EA1EFDECD7969DC31B06538765A2E1C8C7267737847BDFEF8 971FBBFF86F375979CF48E6A34FC82FA9E2A934764DC72035324577A84225BE3 D0BB79BA56D8EAB0DDCB541E50A2DBB501D7CB45D8FE16C9655ADA08BFFCC38B 3077D05BA9ADC17F6EFE5F85125AE6A8935B00856BD588BDF0562E5224A4A4F5 3A863355F6067AC8BD4ADBAAC72A99F351D82404292DBE2EFAC89921EE4B4784 28661DEB2AF55AE6EEEAF6FB1C7483135D0D15ABFCA646FF3D64EC992ABA0FD5 A8FCFDBA5080ADC60FC4B93CF4A84FC30E122C67D92DB0DA18DFDCB0D6BA9FD9 E0F8C0286FF73E9129F37A863033C1E933896E2D47785B8FEE054EBAB376D670 3346EFE8319B56827B4448429C5CD70ED1138B209FE7CE20CB3CF16612657665 73856F9D127751D0F82A61FA10A366060746C0A627E39ADBB3B6A3056998D623 1A08E7F86E6CB07B00AF5781F287BB62B553BB1490CE885BEBB92C9240F1EFF2 CD6B893C8CF63B600B2FC17BC96AFB51C0BCE68427D843E5F98851B5AF735302 EB6EC9BE8DE93BC5C6F48B309CEC0006D15506538F01AE8773F457CDB07D8A98 EE767B499D60D9F115A692949754FF4983B95599F4DE322CA7F9DFAAC1658C36 C2268D5569835DCE35DB6E40030CB28B30E31AD16AC8395F66F39F5D9DCC0E5A 273E3111A4DD69ADE07B9FA18C7A7EA669164C6851A72EFFFFEA3E18B5B87D7F 9A5331599ECC82C362A2103DD50E9D8825898D360C73A7E1E4E9ED66130746F8 3BF5542959DC2210652383EFF1857D9657C67984629BC1E14570EB254C3D5043 1E8A0347F9ED66FBF17BDA2C713CD7DC0F5347F06B3432967D1D0C4F7211B5B5 CCD61164D5C9F01A0BA207D6EA2724F67F84BA845A28F1DCFB5E59D4DC57BFE1 50864ADC1A703DBA46EF00F2F4ACA298EC1C1DCD26D647014806CECCC8A93E87 158F2982A72C2B7167A87207D637B92826AFE261D9763A456F90E735DDFDBD09 1C176B0C0D1774D9FAA5462C2943715E71F3C8CCB0BEF0AEBB5D00812E64CFEE 282505EE165C6777C37A0CB2B7066F4CCF84B1578DC1A1165D1C60324CFA0263 08FD152E9D3BC399CF45036466B70C54DF463A19923356834E49FBAA86250899 4F1DA6637091255FB9B16BFC9DB377AC505FBBD1DAF88233EFCE65F1F91D7428 10BAFF60705AFB67647EF947A26D86E868681A18E60CBBB552B96FD411100658 1EF8A14F2E4373667B2879ABCB2D13D97A7084B345EDFEBC6B329CFF8F828330 8DAA4AE60B8B3BBE78C05ACD0DC43A6907EC875605F84716A4E95FB406A4EC1E C5DA35309A932CAB84F62A9045A2D391A7728D51B18ACB5CA1FD1AE58976FDA8 1F8D86E3052DA3A64360E1DF8B9407979E583F2EB2752C8317B255F73A2F87DF 8BB2B5FE9464B360868C02DC6182C634140D9D51206B57DA40198D911CEF0691 9EC2165F4BC87618D1177D281B5AD42F39FB0B76F678BAB0A757130078135EAA BB8A0260B772B9A748752D281FA0568790E80AFCBB1340C5E6DC160471802D8D D754FEE5FBA6532EAF51163DF21702C81E315834EE88F771CC9CF1D33E20F561 1E3E661D89EC5C535FF486DDD590AD7F072B432EB842C7A6CE4C52C2A5C1B80B EBBC113C933400A257B2E16888290B16DC53991FDC668B304842C8600B9313E9 08D29D7F02375F216DEE47DFD6E1D3C04F2D50977387457AF1A7FEA816D34427 0278A675204C264FFE5C0EE3A21CD6BE7FB3A025CD33D6FB112BB0D0D20A416B EBCF0FCDD560A5E0983019CC7AF66D92B52C881153E8E12AD300571ACB5BAE05 17C00671628B1E76E899D116B9A140BDD9CBCCDA64600402E6341305E77B1A7F 418E108F85A4427F425784705844344B6F405352259DC6DE7584C7E0E5E2D22B 6BA08FDA205B0DB705E8FBC9C917A0CE1C4AE14C17A0E98042CCAD0D2279BC79 FB504AD1E264015F95B5DECD45332947C70C69FA10CE0B5FE6C933960B4866DA 43E4B1283ADC307D18ABDFE9A8A2B10E862C5A771B346896C7FACE788569E483 FE26378F52AF1D05FF2CF8C09119F7250D4EDB175CB7B958A8013CF68483A2FF 93A39E2D0C51D4DEBC50E275869570686EA784F7F13401D7CD2619FC435F1344 320D875C32319F796E494F75604B326CBACA2D5E16F37DF3E0BE72A649BA7562 7EE30478DC8DE07D32A0FF5C7072D0A4C4CF36CD9E3E1DD20BD28B90776865E3 16334B2A74EBFA0185FA602445ED88AC4FC8ABD184BD0FEB2713A6DEF4CA992C FED715F768F9D9842BB6DBF76B201A04D23055193A9C93CCD0717A2045A7E0B9 0D6466D1B7FCBFDA58AB8F758593FA72A067C5C627C52EF12587397C6D626AE1 28C12AE56AA1ED22573AC2897FBB7CF56EBD98BFBE369545F66FE6B4350EE538 A419F9F61A592B7A54179B1CD577380DECBA2465B62EB9662BF2B82EB64279F5 728D63F13B123102FD0727CCB312918FF43FF5543BDF8A0B01A7881E71F4D05A 531BE4A89EA6809F2BB681A9DE9F53E37FA6E2E710086DFBD2FB8A7EC5060864 9DB12C1E043A0C0FDB3EA5EDC78F400753FDA077EAD9EFB407EFF4A4ACDC3BC1 0A149991A58B908EEB75581D2E2EF47E64EF9145485F652379E9A3C01117EDA2 281D91D363E8D7588F24794AD2CF2590995A3339C7430364163AEC6E31529CEF EDE730EFB5FBC05DFB61BC9BC79367E9FBDCA34A4A537F78AF4F141DF5291A77 A2225E7B7EA8DE8048F644DBEA4A47DDD8F275A462452E5737F8EFC04EF2D779 25BD61881D197873B097172331B61256D45FFB8447D6774AB3BD150CEF43E0BD 043C86D3C7427A3D521D2C484715E4A48693D647DE2D84003B48AED1A96FF440 4A586D53BA76A434AC33BA6F9C6F4B443135F1F35FB197B0FC92080ACEBB2DAC A46B38126DC5B87DB7E1E83C7DE21AE5C7156CA18005ED6AD02B4CDF99E1B21F 978FAFC5954EEDE6E394FEB95CC559A6DABF05ACDC0796DA6A39DD25A7BC9477 C4795C728928C1A9EE1672205D07B1EFAA8F4BB2BB413D45738E8D474CDE2299 552B37BF12EE136DC692F5E742D809DFE6D18BF866909A87A2C62C526BCE085E FE8C7ACCAF4A4B9561E3E3BE14A8633B885B86EC57C0D8095751536548C74963 054189593A7BDE80B28F6642190AA560ED47BFA85FBA91557627D3EE2BA2E851 DE2E17EFDEC23189CB308311FA623EF6F86EC34E231304DEEDF5E9C6BF964126 F79D5EBB5F22C70CA5EE66991CB1FAEEF95E7E14BD5D25E2871CBD2163DA990C FFDA3D174140C7635710C1B3B927989111A6D37C8749EED67FBDD93D0A45E873 E7398025B1DE7F4238A118977749B489923B4E6AE60162B6105F5E1FA02ABA5C 84C1B26EFA27D1A5F58822A1897A374F73EECCE0422CC1D0177505F132DD4C55 6AC7783729BB7B6A1CD33FC430A264F229D0C5A69DCF9F804FD1F01D575E77E2 67FC00F6ECF7B3F592A7A49E410E8314BE48BDC95560401700C11A15DFEB6B2C 189646F7FE7CAA7F938227F0B232BABE8865E8D3B764AFE6EB635ACAC6BA7C40 CBFD610D215D07209EDB7B60807FD3DEA51E9DB40968DA07248168B6DD4C3003 F5402EE2695D212B4DC983CC2EF4FC5BD59320EB462C88F2F4B62CEB6E22A726 09961D7E4F09260BD5711713C32FCE1689E2CC03BB005EBAEA2A942AF20E3635 D99B2D1C6E349EE350C923EFB6815F8BBA40D947E2619D62053E72601EAB54ED 5F20652B03C8E7E1D65896252B7D436B77D3692C115D114F5042605050C3E06B 2637DA6F0CC97AF4D51242D59D335491D67E95B7149C3D323BEAD304478F4196 7E473D7DD7C9B6E1E8EEDFDA487697286F939A445B5ECE89437FEBD59AF5836A 0FC41F7AEBCEC8EAC56D827587843055E19629E6BA0644DA586493763589549B C39EE3725E9C20692F2023862A3D29C4116F875DCF7D2BB4E79BFD54991A4FD9 A7E852BBD7CDB42B624C969FA6A7DA55CD2E92AADC4243ADFD124D941152C53F E3764D1EAD5A6623D94036E1A88C37791DD21C59727E6ED28FC5F644B6CEE4E4 9132042DF830F9DE1E6B78EC16EBF7687C4A4D07DF3ED52554F76996D88E40E8 C30572AD06D64FCD20532C2B6BE71E65136EAAF008638C9EF102EB32243FA5E7 1DDA1FEBF85FD71337C818C953219F592640A6171229F0D8E1447C4AB0E6622B 5124945199A32EDB5125FAD3C022FF2D0AE256749223A16829FB4E1A0B60590F 4268047D9DF9CCC59D3562D5E44E29E0F066F23AEEE045707647A75811D0351D AA4CC0841BDB7A63EA0BA675E4CE4CDE08975FA95C99A9CBA60817A52B5E6417 199173813190A6151058DB86852F2C1BE4DDD1266F911F2882B5376B60C9C38C 95B39F8511CAEB1E3003C279A4CA1FC38FF69C833DCCB586FDFE22BBB49D263C 6444EF2C6CB9979D0CF54FC8EB7BB49EB3569DDFCB71D0966D0F0D2CD69698DB 3862AA0B9B3D90FDE9B4BB39726EC682E8974AF9075539D975CE0CF5803EDD6F 9F9ED36969486CD805C96E5DAE2D50F1246F36E95A974327579DAA83A63AF308 7BFCFF42022C2D949B430C14B7536CA6AA82930B14112F87E9854AC8D6185267 0528A7107D396A034E337A4B73BFCC2F323D5768A1E987A2BF2C8F2306404EB1 26B3D2070A0CCE97065387D57FD9F733FD66997BE2E407F100E5E4021BAA9410 E07A7128B51C9D320BA607C06C7F184BC27E0B7002C0B4F19685B4A08E2DF900 16E82D6CDB0885F9260DFCE170996D78E8869A19125249AF59BF153D71E5F00E 433DCE51F0D8065D54B605A30D0A6108C34F4EB8E56D33ECB111BD38EC94ABB5 732AB831EF6CEE8B863D6C7CA4B95C2A154B94A16ED47B4A144153ABCDD8D206 7CDC3843F264A5B786AE843CE7D83B2DACDD82E09D38FDC0FCC56F0D8B91D8AC 51CF7E1DF59B11B4C5981C25E3C081E27866A3AD792C58C11C05B9EEC61AA9E5 BC923F96864DD5A754205EEEDEDA4B63E8DFE69C2478905CE7E277EC00EEE7BB C2B1765F00DA731BCEBE209D595FC9E0F89F1AE7260D59375B89F88641E9C697 E7766ACD81AE325EA386137FA6712FE56A3D4074BEEC88D76076E31C96838A2D 7C6BF02DCC26F98A18C4206B33ABF6E6CB0D36E21735B89C64964CF4E1B9A8B5 DDD1097309B975DD6D75824FB2D6C92EA2D010AA792228FC89B079771322BFF3 E91B92AFAFE64D84CF391236A83524B3D4957B1A2C78ABE1EA4312FC347D1430 43EEAD380C9ADDF5F459AFCC91682F8318DD22606240DF454E445491F07DA7EF 58D0C679D9E887ECB473520581DEF2DE4B2A04B5B849BAC43A414E11AA3A5B41 A7EAA9691400A3E935D922374043C8528394883DE9D7C98F9F7C814CFE8C7A46 D52353B0AE2461F404503C38D956ED7C9EB65E3A0058F9A26333B034B7C0A97D 28B8AD14F4DBB4D12122055E08FF3BC08D4709447D1C7A1CDE89AB45435DC837 ACD2B64D368CB767F9B1D06D720E3271EBC715D0E2711D6C343F09039033A82D 6716650CFDA57CEFCF25E8B86E243E77B4364B04BCA2D3BFA335C55FBB2ABA8B 98CC06C87794FC020E7E0041CFAA75A6EEE43F6A5CB49E75EDA9D28AC1310D58 DB1E938AEC9700C3F5102BAA6434D528C1C388BF13126C9E38173A1593895140 42B9C08F98BE436EB5AB4B41B5B7422D853F982A5A1993FF9C03CB7A2068FA75 F8E261E683E6F183EBEEEE8F407BF7024C6C66B0DF0379FD4A636F0EAF3940A5 F48A71B8DB7473892474063353CEDAE734B034D9F7CC60FF1FF349F9C073B88B 66E84AFCDE225BF8603C28BC8114DA9E9713C0246B4791AB5E55E0EA415D0163 CEB21A1007D6F060E4DFB0902980B806E8476149241CF2388A4F3A75DC92CBEC 303CA5829ED4BDE069F7FD3986D51D8A0BC0C7B6DE0FD5023A0B90075DEBAA48 F5A62FC091642A061800CEC50FDD9BB3BD9E016391DBE31871B6EF431BC14A0D 486D3827016B5A68A223117D416E86064A90A4B3B447977C0A681DBD07FCDC53 90D92DEFF3BBAE3404AF40A5D357AD532BF82A67293799A1223A0D4B21A7C590 D38CB008D97C51A2F2A64B35658795EF6CD44186263539760637F9C8DC75CC3E 0F5F14E7B46302816ABAD623C664CE96B237E61EDBFE55DC5D00D858B75C8F25 D33E2ED4643AE95E2470AE34CDFDA6C2B6D88AB81370F0C6A52E734164FB7611 54414E4FF7B929DF6C3774EC50D769E41EFA98A21277ACF2C9F23F042F74BDD6 B83A3156141787EBBAC8443CC276DEC97AFB922E5F4FFB16B79F913B874D29E4 E88768568C31B1E14F081CDBBCF94D7DC3F16FDCA2918B8D1193BF99D756EFE1 49BD3C3A0CE71BD20D416E0DCB6F83E8C3B9B4050A25DCF54962BB07865E3F24 EDD4946718F7210D839E1EF0445D68D10D8926470541CFC9F5A336363BF66E5C 9AEBCFFFB906E377ABE9025662729660B5AE961DFF59B4B11656295F0487E01D 0E9DA65A913F371EBEC1D8C89154D739423F6BDCF53437BB665DF3D17BEF6F3F 59D532D76B53A6240DEE8D68EDF71700AA468CC3E0CDD8DD50C3051608119713 F4D5E13CA685FD48D03E71726BCB26A4C885B025179C6C7BCBBB669EC6CA544E 16BE90184A5DF4A9532277C765CB25678D798E3E6BAFCCC1B0B31880526BFFFC B707D24FD48BC2DFB593285989EB1135D47FD2E30330943C5424550C4C17934D 2CC69FB31F81916BCB774D27AE711B0754E25655927429C626799846240E7AE7 5F662E4851322F94A14A73BB355C6DEEEB0809B730812B0798A4E0CDE08A0594 1D8C3FC7E055BCC948D74DDD4AFB62533B78BE85310B9BCCF61F1038BFFE4A3E 7B982D1756B58331F924D67A55F86CDB5BB347DD4EB04271D0FD2D25D3EF6682 2EEE955197ED008219F386F41539875CD8DD847499F9E56545DE11C43036CD5C E5C5262A59EE74E0CD303056D37C61F555DEEFC997CC80B06C47F90A3C46D097 610A281CF632C8E2F7B0D2F84A434BD575B49A795EA04CA3CA5AA86B299E9F77 78FC4C37568A66996722B764000A7915EED0B05CEC2942FF564B7C784B2A68A2 8CAFC810C16DE4691C98A7C99ECBB03BC1A16C7AA61931FEDE0E139AA1E294AF 9D0A84607DEEEC4DD4C35D5C9798655960A8F335FFF479D061EEC26555110D4C 5877552A318CACE59A4561BEE79F36E292C427F36EBCAEDCFDE161707FFA98F2 C87E128FC6998F2241E4A62C4860BBF4C6496DBB4F218D5FC94C2A40523B20A4 5A5C9FF7E16C377EFDEDD5B018D40AB01F26815275529D1359B60658FA1B7BAB FDF854786A00D61E1122C91C3DDFB2D8B66CC9E523CA09404A885256AC627FB4 E41918676F3E2B7762A1AF4DD985A4E133EED84E239E38BF4A737E2719409464 6A368163AE86C54CCBFAAE1B512103E458B2ACEB514D0C3227242B0969FD8F29 9DB6568F5EA741F84395753D67E291D1B08401574E79FB07969ADECF750D3FAD C12CAA382468F626D5D541C6A9BE2657A4C2504AFE6672F60DC3B3CF1A7F74BC 3B0157D9F19709623D01E657890A40C85B10868DAF4BF1D37C8FCD5D7D3E86AA 02A5FF16B3487240D84AFA03354B666C20D144D59AA23A265DA4E1D0AED3A934 C64F4C0738F8B1315BE988949C371284E5299E6BE88AF64E94DEE15E43EBDB03 AD261E1DC736BB5F413437F4CAA0C586AAF9801A041347627DE8DE18927C2CC6 A47653C740D5EAE722D730E17951E481DB07F3A0DBDFC4E3B7272F9FEF143A65 B18E766CEF8E256DDC5409DBE5CC46009BEF3195BEF390F8E2AD6D972B62A0E6 91D73A39FB27D355DC79BD514F9AC5B38FB6196CDA5DEC54E5A044661BD66975 2777FC133B8AC7A4B56A21F018079320A3F5F5997855117658B1DF49F5D259FC 80FF80DAAF9723E2A85467CD60861DAA5A8C80CDB1FDAEDEC2C603D44EBE2789 91800C4D327350CA005467F8E4941F1DD74B61C5BC8885D73FD4C68EF69FAE01 2C87B96DC09B516B2250C7E6A1F640D61A557F471C7CE4837317F885F94E7DC5 C561168BB8C390AECB871C6A782B1C82C1AFAB46C339ACF9B4C411C9CE0437EB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /UniqueID 5087402 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 103 /g put dup 105 /i put dup 110 /n put dup 115 /s put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB090930493E00607B9F8C32D24F07482266E 09ACF6B41349E00C8B421ED5C40D3C40923D21F107185B5A135B36FBADE488C1 8F0C2DEF08A6B185F2D25B8FD8DE7EBC71DD9C15C9F590FCD7B4B8E9690079F5 39D809ABDDD79A632C99FBDFEDE0A89341919C6B397AD1C8FB7F3BF8C52C1B46 7BFA51A4DA496B810689769986D6A625AEA159AB2F6C7EDA6E04F0B2631E5E0F 942624C194230D8A6EF32B3E1B4A5C37C6092246B328CFC926D17AE3B559ECD6 2FA448C0FA94956EFED3BD7920EF42BB3F25907F097FA990FBEB88E78FDC74AF D3D7BC983DE0F33C53780C9A8E98A40C2EFEE93067232133F83C4EB0B2AF0EFE D1B3417DE2966B2BA85FB7A32A1B6B57D0EC8645FE35571746F760EF7ED4B9FC 53857A279CF19C0625D3FA9733C918A74E592DDA7FC1B088A8E323C9845306B2 9C474BF8FC5F285E76B64020C2A377AA104483039805B8963116E882A0ED9417 F56A2B0CC9B0857AB0D1B0FB080AC608952DE7DE07F81AF14AB81F90A76F288F 3B1095F9BD7BF8FAE8294990F0EFA45CDDCE3E24BE64C706C5031856E795A079 C062F5C28B2429CAE52817C005CB1CB8F97FC6DB2E731FF72D8CD75FE7314C11 3C83F93A5D1F5A4D928A8D9CBF8F66980FA36717E2BD4D7B52C7F7931CB91E80 396D5593E022810BA1D5952138AA44DA13E001BE8F854D1AC6773C10F5E8C5E5 FAC9C1C00D691A1D84FA88AB7A972CB521449280428B3B6B62AA1D7586C5016C FD2F558F09577665CB2CA7998B1F54661994EDF2B82229F55A9C657B1E0206FF 4F8D30F309A2C988FE06D7E6A77AE5A44765FB88A4CED66F8DC8FD7469C483E1 9849B7A365121843AA23E554102363A21342EEF1C13688E9FA27ACBC3E479F5B E64E99C1DB82AC245BE81B1898EAF293D9CE70F1E5B2F5052CF248028DE1944F E1416FF897BB9855119C4F5D237A38CAAC27F5E4A9696EDAAA485305A3691ECC C283663B80248DF419E3F267BD10B935E88850FD369A91F34A6F3AA6A11A6254 63FA3BB611268DCD43DAF1F273CFF5AA40177709DD3B5029D6135A47D7E4A76F 03EDD4DBFAD427D55EDB1D318749E5F3D7F3CFF981214960E8AAD77C0B9BBD24 29089C360B059722B67B148CA77CC7BD0A3AD65539A373359FDAEAEAF0FB3455 3D781BB5D8ABE9FCA148C0D612FCB9E33BAD7492CBE37F4ACD720B61B638C141 CF3F06378534263DF7A7016BC0F159120F2B211FC57203652189D3D1F1EB2FBA 73248CEB7DCEF5DCACF8250B1582BDA94E3C2E4565EE0D7450761F0EE8A8B0B9 F62F5D5048E22205C8F61EE206359DFA6318C8F9F67FEA6C0A13A9A4E2F195CF 2E83FD136DF96EAD2F930FEC1461C89B7755EB308D92A51834C0D0868CF34731 4FEBCE3AC5B80C92BC4E3364C61F68C34A146D2901A2E4E2EDD9AAE00D964486 2DD43FAA44163CBDCDD514EC0C9276900A047CB0FB70E21E618AC4B18495D9E2 2D227915E49156E06E3753326CBCFADAE75F6505CB19D1E803BC2A83D5F3B200 E4E8D4BD1CA4A3695FBCD4965AAE58587DC18B677E85E05F80FF870EC8B383C9 21AEF9EF540EB0D7F7F73A56ED422C876FF091DBDCB4B2B7E3A4A25816EB6F8F 719CDE34FA58AA1738EAF33A81CB0F8B4A35804D62EFF869B14C4E275E4899C4 9CF66CAE18DD7E93D4DE571177E8B1E3ADA0C216D2C984B9F2E23E8CEB48228E D76C7CCD00 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /UniqueID 5087386 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A 60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E 71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 F1795501020D5FF0AD25584C1D47BE08ED6CE96278050BA67680A3B973613647 A93FAEC756FC253B3693FA2D6491B276EF45751EFB306961788E7C15297A5822 AFC5A2DABD0DBBFF0BE135267EA6B9D1B4E4760ED14895FFE1F8C3F564830001 EFA901B8442BD2D98561BAB9A0FD939E0F856E4D2EB04A9A4496704109B8A84C EA06AB0999427B3B1BE776004AE906D0F22159C051D88CF573A0255D99B56781 CF326CD11919AA40B096769CD6D0ADF3ACEC7957621084ACF21AF1F265416628 86B67FCBDE9370D4F5C6F5CC67EBB0A2727E074090DBCA459AFA1A4778AED4C9 AE5400775223E684BFCB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (history.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 41 1[41 1[30 30 30 1[43 38 43 4[21 43 38 1[34 43 34 1[38 13[43 10[58 14[38 38 38 38 38 3[38 49[{}24 74.7198 /CMR9 rf /Fc 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 2[39 3[39 97[{}13 74.7198 /CMSLTT10 rf /Fd 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fe 130[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 1[39 2[39 39 39 39 39 1[39 1[39 1[39 2[39 39 39 39 39 39 39 39 39 2[39 39 39 39 39 3[39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 33[{}77 74.7198 /CMTT9 rf /Ff 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fg 133[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 5[52 4[52 52 52 2[52 52 4[52 52 2[52 3[52 22[52 42[{}37 99.6264 /CMTT10 rf /Fh 134[48 48 48 1[48 48 48 48 2[48 48 1[48 2[48 1[48 48 48 48 49[48 48 49[{}17 90.9091 /CMSLTT10 rf /Fi 133[55 65 65 1[65 68 48 48 50 1[68 61 68 102 34 2[34 68 61 37 56 68 55 68 60 9[127 3[68 5[116 74 2[46 96 1[77 81 94 2[93 9[61 61 61 61 61 61 61 2[34 33[68 12[{}41 109.091 /CMBX12 rf /Fj 134[48 48 66 48 51 35 36 36 48 51 45 51 76 25 2[25 51 45 28 40 51 40 1[45 3[25 1[25 1[68 4[66 51 67 2[71 68 4[33 68 2[62 3[68 14[45 45 4[25 1[45 29[51 53 11[{}40 90.9091 /CMSL10 rf /Fk 138[56 1[42 4[56 4[27 1[58 3[54 1[56 97[{}7 90.9091 /CMCSC10 rf /Fl 197[25 58[{}1 90.9091 /CMMI10 rf /Fm 197[33 58[{}1 119.552 /CMMI12 rf /Fn 134[85 85 117 85 90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 10[122 124 112 3[110 1[126 1[97 2[60 126 127 101 1[124 117 115 122 14[81 81 49[{}38 143.462 /CMBX12 rf /Fo 242[91 13[{}1 90.9091 /CMSY10 rf /Fp 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 61 75 60 75 65 9[139 102 103 1[75 100 1[92 1[105 128 81 2[50 105 106 85 88 103 97 96 102 6[37 4[67 67 67 67 67 67 1[37 1[37 44[{}49 119.552 /CMBX12 rf /Fq 129[48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 1[48 3[48 48 48 48 1[48 48 48 1[48 2[48 48 48 48 48 48 2[48 1[48 48 48 48 48 48 7[48 48 48 48 48 48 1[48 48 48 48 1[48 48 48 48 48 48 33[{}70 90.9091 /CMTT10 rf /Fr 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 5[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35 25 4[45 19[76 51 51 53 11[{}82 90.9091 /CMR10 rf /Fs 134[102 4[75 76 79 2[97 5[54 6[108 94 11[149 6[151 1[116 3[151 152 71[{}13 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fs(GNU)65 b(History)h(Library)p 150 1418 3600 34 v 1920 1515 a Fr(Edition)31 b(6.3,)h(for)e Fq(History)e(Library)h Fr(V)-8 b(ersion)31 b(6.3.)3218 1623 y(Jan)m(uary)f(2014)150 4935 y Fp(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F) -11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Fr(This)23 b(do)s(cumen)m(t)h(describ) s(es)f(the)h(GNU)g(History)g(library)g(\(v)m(ersion)g(6.3,)j(6)d(Jan)m (uary)f(2014\),)28 b(a)c(program-)150 4523 y(ming)38 b(to)s(ol)h(that)f(pro)m(vides)g(a)g(consisten)m(t)i(user)d(in)m (terface)i(for)f(recalling)h(lines)g(of)f(previously)f(t)m(yp)s(ed)150 4633 y(input.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fo(\015)30 b Fr(1988{2014)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h (F)-8 b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s (dify)e(this)i(do)s(cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g (License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion) 390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er) 31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fr(i)150 299 y Fn(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fp(1)135 b(Using)45 b(History)h(In)l(teractiv)l(ely)25 b Fm(:)d(:)d(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)69 b Fp(1)275 778 y Fr(1.1)92 b(History)31 b(Expansion)26 b Fl(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)57 b Fr(1)399 888 y(1.1.1)93 b(Ev)m(en)m(t)31 b(Designators)15 b Fl(:)j(:)d(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)46 b Fr(1)399 997 y(1.1.2)93 b(W)-8 b(ord)31 b(Designators)22 b Fl(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)52 b Fr(2)399 1107 y(1.1.3)93 b(Mo)s(di\014ers)12 b Fl(:)j(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)42 b Fr(2)150 1349 y Fp(2)135 b(Programming)46 b(with)f(GNU)g(History)35 b Fm(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)79 b Fp(4)275 1486 y Fr(2.1)92 b(In)m(tro)s(duction)30 b(to)h(History)10 b Fl(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b Fr(4)275 1596 y(2.2)92 b(History)31 b(Storage)24 b Fl(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)54 b Fr(4)275 1705 y(2.3)92 b(History)31 b(F)-8 b(unctions)20 b Fl(:)c(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Fr(5)399 1815 y(2.3.1)93 b(Initializing)32 b(History)f(and)f(State)h(Managemen)m (t)11 b Fl(:)17 b(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)41 b Fr(5)399 1924 y(2.3.2)93 b(History)31 b(List)f(Managemen)m(t)11 b Fl(:)18 b(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Fr(5)399 2034 y(2.3.3)93 b(Information)30 b(Ab)s(out)g(the)g(History)h(List)13 b Fl(:)k(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)44 b Fr(6)399 2144 y(2.3.4)93 b(Mo)m(ving)32 b(Around)d(the)h(History)h(List)16 b Fl(:)g(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)46 b Fr(6)399 2253 y(2.3.5)93 b(Searc)m(hing)31 b(the)f(History)h(List)17 b Fl(:)f(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)47 b Fr(7)399 2363 y(2.3.6)93 b(Managing)32 b(the)e(History)h(File)14 b Fl(:)j(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)44 b Fr(7)399 2472 y(2.3.7)93 b(History)31 b(Expansion)10 b Fl(:)k(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)40 b Fr(8)275 2582 y(2.4)92 b(History)31 b(V)-8 b(ariables)11 b Fl(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 b Fr(8)275 2692 y(2.5)92 b(History)31 b(Programming)f(Example)13 b Fl(:)j(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)43 b Fr(10)150 2934 y Fp(App)t(endix)h(A)160 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)446 3067 y Fm(:)20 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)72 b Fp(12)150 3337 y(App)t(endix)44 b(B)166 b(Concept)45 b(Index)24 b Fm(:)19 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)68 b Fp(20)150 3606 y(App)t(endix)44 b(C)165 b(F)-11 b(unction)44 b(and)g(V)-11 b(ariable)46 b(Index)34 b Fm(:)19 b(:)h(:)f(:)79 b Fp(21)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 150 -116 a Fr(Chapter)30 b(1:)41 b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(1)150 299 y Fn(1)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)150 551 y Fr(This)42 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(to)h(use)g(the) f Fk(gnu)h Fr(History)g(Library)e(in)m(teractiv)m(ely)-8 b(,)50 b(from)42 b(a)h(user's)150 661 y(standp)s(oin)m(t.)76 b(It)42 b(should)f(b)s(e)h(considered)g(a)g(user's)g(guide.)76 b(F)-8 b(or)43 b(information)f(on)g(using)g(the)g Fk(gnu)150 770 y Fr(History)36 b(Library)e(in)h(y)m(our)f(o)m(wn)i(programs,)g (see)f(Chapter)g(2)g([Programming)g(with)g(GNU)h(History],)150 880 y(page)31 b(4.)150 1121 y Fp(1.1)68 b(History)46 b(Expansion)150 1281 y Fr(The)f(History)h(library)e(pro)m(vides)i(a)f (history)g(expansion)g(feature)h(that)g(is)f(similar)h(to)g(the)f (history)150 1390 y(expansion)g(pro)m(vided)f(b)m(y)h Fq(csh)p Fr(.)83 b(This)44 b(section)i(describ)s(es)e(the)h(syn)m(tax)h (used)e(to)i(manipulate)f(the)150 1500 y(history)30 b(information.)275 1640 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h (history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150 1750 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen) m(ts)f(to)h(a)g(previous)f(command)g(in)m(to)i(the)e(curren)m(t)150 1860 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g (quic)m(kly)-8 b(.)275 2000 y(History)37 b(expansion)f(tak)m(es)i (place)g(in)e(t)m(w)m(o)i(parts.)59 b(The)36 b(\014rst)g(is)h(to)g (determine)g(whic)m(h)f(line)h(from)150 2110 y(the)42 b(history)f(list)h(should)e(b)s(e)h(used)f(during)g(substitution.)74 b(The)40 b(second)i(is)f(to)h(select)h(p)s(ortions)e(of)150 2219 y(that)31 b(line)g(for)f(inclusion)h(in)m(to)g(the)g(curren)m(t)f (one.)42 b(The)30 b(line)h(selected)h(from)e(the)h(history)f(is)h (called)h(the)150 2329 y Fj(ev)m(en)m(t)p Fr(,)e(and)c(the)i(p)s (ortions)e(of)i(that)f(line)h(that)g(are)f(acted)i(up)s(on)c(are)j (called)g Fj(w)m(ords)p Fr(.)39 b(V)-8 b(arious)28 b Fj(mo)s(di\014ers)150 2438 y Fr(are)33 b(a)m(v)-5 b(ailable)36 b(to)d(manipulate)h(the)f(selected)h(w)m(ords.)48 b(The)32 b(line)i(is)f(brok)m(en)f(in)m(to)i(w)m(ords)f(in)f(the)i(same)150 2548 y(fashion)23 b(that)g(Bash)g(do)s(es,)h(so)f(that)h(sev)m(eral)g (w)m(ords)e(surrounded)e(b)m(y)j(quotes)g(are)g(considered)g(one)g(w)m (ord.)150 2658 y(History)37 b(expansions)g(are)g(in)m(tro)s(duced)f(b)m (y)h(the)g(app)s(earance)g(of)g(the)g(history)f(expansion)h(c)m (haracter,)150 2767 y(whic)m(h)30 b(is)h(`)p Fq(!)p Fr(')f(b)m(y)g (default.)150 2972 y Fi(1.1.1)63 b(Ev)m(en)m(t)39 b(Designators)150 3119 y Fr(An)32 b(ev)m(en)m(t)j(designator)e(is)g(a)g(reference)g(to)h (a)f(command)f(line)h(en)m(try)g(in)g(the)g(history)g(list.)48 b(Unless)33 b(the)150 3229 y(reference)e(is)f(absolute,)i(ev)m(en)m(ts) f(are)g(relativ)m(e)i(to)e(the)f(curren)m(t)g(p)s(osition)h(in)f(the)h (history)f(list.)150 3397 y Fq(!)432 b Fr(Start)34 b(a)f(history)h (substitution,)g(except)g(when)f(follo)m(w)m(ed)i(b)m(y)e(a)h(space,)h (tab,)f(the)g(end)f(of)630 3507 y(the)e(line,)g(or)f(`)p Fq(=)p Fr('.)150 3672 y Fq(!)p Fh(n)384 b Fr(Refer)30 b(to)i(command)e(line)g Fj(n)p Fr(.)150 3838 y Fq(!-)p Fh(n)336 b Fr(Refer)30 b(to)i(the)e(command)g Fj(n)g Fr(lines)h(bac)m(k.)150 4003 y Fq(!!)384 b Fr(Refer)30 b(to)i(the)e(previous)g(command.)40 b(This)30 b(is)g(a)h(synon)m(ym)f (for)g(`)p Fq(!-1)p Fr('.)150 4169 y Fq(!)p Fh(string)144 b Fr(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g (the)g(curren)m(t)g(p)s(osition)g(in)g(the)g(history)630 4278 y(list)31 b(starting)g(with)f Fj(string)p Fr(.)150 4444 y Fq(!?)p Fh(string)p Fq([?])630 4553 y Fr(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g(the)g(curren)m(t) g(p)s(osition)g(in)g(the)g(history)630 4663 y(list)32 b(con)m(taining)i Fj(string)p Fr(.)45 b(The)31 b(trailing)i(`)p Fq(?)p Fr(')f(ma)m(y)g(b)s(e)f(omitted)i(if)f(the)g Fj(string)39 b Fr(is)32 b(follo)m(w)m(ed)630 4772 y(immediately)g(b)m(y)e(a)h (newline.)150 4938 y Fq(^)p Fh(string1)p Fq(^)p Fh(string2)p Fq(^)630 5047 y Fr(Quic)m(k)h(Substitution.)44 b(Rep)s(eat)32 b(the)g(last)h(command,)f(replacing)g Fj(string1)40 b Fr(with)31 b Fj(string2)p Fr(.)630 5157 y(Equiv)-5 b(alen)m(t)31 b(to)g Fq(!!:s/)p Fh(string1)p Fq(/)p Fh(string2)p Fq(/)p Fr(.)150 5322 y Fq(!#)384 b Fr(The)30 b(en)m(tire)h(command)f(line)h(t) m(yp)s(ed)f(so)h(far.)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 150 -116 a Fr(Chapter)30 b(1:)41 b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(2)150 299 y Fi(1.1.2)63 b(W)-10 b(ord)41 b(Designators)150 446 y Fr(W)-8 b(ord)27 b(designators)h(are)g(used)e(to)i(select)h (desired)d(w)m(ords)h(from)f(the)i(ev)m(en)m(t.)41 b(A)27 b(`)p Fq(:)p Fr(')g(separates)h(the)f(ev)m(en)m(t)150 555 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61 b(It)37 b(ma)m(y)h(b)s(e)e(omitted)i(if)e(the)h(w)m(ord)g(designator)g (b)s(egins)150 665 y(with)30 b(a)g(`)p Fq(^)p Fr(',)g(`)p Fq($)p Fr(',)g(`)p Fq(*)p Fr(',)h(`)p Fq(-)p Fr(',)f(or)g(`)p Fq(\045)p Fr('.)41 b(W)-8 b(ords)30 b(are)g(n)m(um)m(b)s(ered)e(from)i (the)g(b)s(eginning)f(of)h(the)g(line,)g(with)g(the)150 775 y(\014rst)f(w)m(ord)f(b)s(eing)h(denoted)h(b)m(y)f(0)h(\(zero\).)41 b(W)-8 b(ords)30 b(are)g(inserted)f(in)m(to)h(the)g(curren)m(t)f(line)g (separated)h(b)m(y)150 884 y(single)h(spaces.)275 1026 y(F)-8 b(or)31 b(example,)150 1197 y Fq(!!)384 b Fr(designates)37 b(the)f(preceding)g(command.)57 b(When)35 b(y)m(ou)i(t)m(yp)s(e)f (this,)h(the)f(preceding)g(com-)630 1307 y(mand)30 b(is)g(rep)s(eated)g (in)g(toto.)150 1474 y Fq(!!:$)288 b Fr(designates)23 b(the)g(last)g(argumen)m(t)g(of)f(the)h(preceding)f(command.)38 b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 1583 y(to)31 b Fq(!$)p Fr(.)150 1750 y Fq(!fi:2)240 b Fr(designates)30 b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f(recen)m(t)i(command)e (starting)h(with)f(the)630 1860 y(letters)j Fq(fi)p Fr(.)275 2031 y(Here)e(are)h(the)g(w)m(ord)f(designators:)150 2202 y Fq(0)g(\(zero\))114 b Fr(The)30 b Fq(0)p Fr(th)g(w)m(ord.)40 b(F)-8 b(or)31 b(man)m(y)g(applications,)h(this)e(is)g(the)h(command)f (w)m(ord.)150 2369 y Fh(n)432 b Fr(The)30 b Fj(n)p Fr(th)g(w)m(ord.)150 2536 y Fq(^)432 b Fr(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m (ord)g(1.)150 2703 y Fq($)432 b Fr(The)30 b(last)h(argumen)m(t.)150 2870 y Fq(\045)432 b Fr(The)30 b(w)m(ord)g(matc)m(hed)h(b)m(y)f(the)h (most)g(recen)m(t)g(`)p Fq(?)p Fh(string)p Fq(?)p Fr(')e(searc)m(h.)150 3037 y Fh(x)p Fq(-)p Fh(y)336 b Fr(A)30 b(range)h(of)g(w)m(ords;)f(`)p Fq(-)p Fh(y)p Fr(')g(abbreviates)h(`)p Fq(0-)p Fh(y)p Fr('.)150 3204 y Fq(*)432 b Fr(All)28 b(of)g(the)g(w)m(ords,)g(except)h (the)e Fq(0)p Fr(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p Fq(1-$)p Fr('.)39 b(It)28 b(is)g(not)g(an)f(error)630 3313 y(to)j(use)g(`)p Fq(*)p Fr(')f(if)h(there)g(is)g(just)f(one)h(w)m (ord)f(in)g(the)h(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)e(is)h (returned)e(in)630 3423 y(that)j(case.)150 3590 y Fh(x)p Fq(*)384 b Fr(Abbreviates)31 b(`)p Fh(x)p Fq(-$)p Fr(')150 3757 y Fh(x)p Fq(-)384 b Fr(Abbreviates)31 b(`)p Fh(x)p Fq(-$)p Fr(')f(lik)m(e)h(`)p Fh(x)p Fq(*)p Fr(',)g(but)f(omits)h(the)f (last)h(w)m(ord.)275 3928 y(If)i(a)h(w)m(ord)g(designator)g(is)g (supplied)f(without)h(an)g(ev)m(en)m(t)h(sp)s(eci\014cation,)h(the)e (previous)f(command)150 4038 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150 4244 y Fi(1.1.3)63 b(Mo)s(di\014ers)150 4391 y Fr(After)29 b(the)g(optional)g(w)m(ord)g(designator,)g(y)m(ou)g(can)g(add)f(a)h (sequence)g(of)g(one)g(or)f(more)h(of)g(the)f(follo)m(wing)150 4501 y(mo)s(di\014ers,)h(eac)m(h)j(preceded)e(b)m(y)g(a)h(`)p Fq(:)p Fr('.)150 4672 y Fq(h)432 b Fr(Remo)m(v)m(e)32 b(a)f(trailing)g(pathname)g(comp)s(onen)m(t,)g(lea)m(ving)h(only)e(the) h(head.)150 4839 y Fq(t)432 b Fr(Remo)m(v)m(e)32 b(all)f(leading)h (pathname)e(comp)s(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150 5006 y Fq(r)432 b Fr(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g (the)h(form)f(`)p Fq(.)p Fh(suffix)p Fr(',)f(lea)m(ving)j(the)f (basename.)150 5173 y Fq(e)432 b Fr(Remo)m(v)m(e)32 b(all)f(but)f(the)h (trailing)g(su\016x.)150 5340 y Fq(p)432 b Fr(Prin)m(t)30 b(the)h(new)f(command)g(but)g(do)g(not)g(execute)i(it.)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 150 -116 a Fr(Chapter)30 b(1:)41 b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(3)150 299 y Fq(s/)p Fh(old)p Fq(/)p Fh(new)p Fq(/)630 408 y Fr(Substitute)32 b Fj(new)40 b Fr(for)32 b(the)h(\014rst)f(o)s (ccurrence)h(of)f Fj(old)37 b Fr(in)32 b(the)h(ev)m(en)m(t)h(line.)48 b(An)m(y)32 b(delimiter)630 518 y(ma)m(y)25 b(b)s(e)g(used)f(in)g (place)i(of)f(`)p Fq(/)p Fr('.)39 b(The)24 b(delimiter)h(ma)m(y)h(b)s (e)e(quoted)h(in)f Fj(old)29 b Fr(and)24 b Fj(new)32 b Fr(with)25 b(a)630 628 y(single)k(bac)m(kslash.)40 b(If)28 b(`)p Fq(&)p Fr(')g(app)s(ears)g(in)f Fj(new)p Fr(,)i(it)f(is)h(replaced)f(b)m(y)g Fj(old)p Fr(.)40 b(A)28 b(single)h(bac)m(kslash)630 737 y(will)35 b(quote)g(the)g(`)p Fq(&)p Fr('.)54 b(The)34 b(\014nal)g(delimiter)i(is)e(optional)i(if)f (it)g(is)f(the)h(last)h(c)m(haracter)g(on)630 847 y(the)31 b(input)e(line.)150 1006 y Fq(&)432 b Fr(Rep)s(eat)31 b(the)f(previous)g(substitution.)150 1166 y Fq(g)150 1275 y(a)432 b Fr(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f(applied)h(o)m(v) m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 b(Used)39 b(in)f(conjunction)630 1385 y(with)30 b(`)p Fq(s)p Fr(',)h(as)f(in)h Fq(gs/)p Fh(old)p Fq(/)p Fh(new)p Fq(/)p Fr(,)c(or)j(with)h(`)p Fq(&)p Fr('.)150 1544 y Fq(G)432 b Fr(Apply)30 b(the)g(follo)m(wing)i (`)p Fq(s)p Fr(')f(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m(ord)e(in)g (the)g(ev)m(en)m(t.)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(4)150 299 y Fn(2)80 b(Programming)54 b(with)f(GNU)h(History)150 523 y Fr(This)41 b(c)m(hapter)i(describ)s(es)e(ho)m(w)h(to)h(in)m (terface)g(programs)f(that)g(y)m(ou)h(write)f(with)f(the)i Fk(gnu)e Fr(History)150 632 y(Library)-8 b(.)48 b(It)33 b(should)e(b)s(e)i(considered)f(a)h(tec)m(hnical)i(guide.)48 b(F)-8 b(or)34 b(information)f(on)g(the)g(in)m(teractiv)m(e)i(use)150 742 y(of)c Fk(gnu)f Fr(History)-8 b(,)31 b(see)g(Chapter)f(1)h([Using)g (History)g(In)m(teractiv)m(ely],)i(page)e(1.)150 970 y Fp(2.1)68 b(In)l(tro)t(duction)45 b(to)g(History)150 1130 y Fr(Man)m(y)31 b(programs)f(read)g(input)g(from)f(the)i(user)f(a) g(line)h(at)g(a)g(time.)41 b(The)30 b Fk(gnu)g Fr(History)h(library)f (is)g(able)150 1239 y(to)f(k)m(eep)h(trac)m(k)g(of)f(those)g(lines,)h (asso)s(ciate)g(arbitrary)f(data)g(with)g(eac)m(h)h(line,)f(and)g (utilize)h(information)150 1349 y(from)g(previous)g(lines)g(in)g(comp)s (osing)h(new)f(ones.)275 1481 y(The)d(programmer)g(using)g(the)g (History)h(library)f(has)h(a)m(v)-5 b(ailable)29 b(functions)e(for)h (remem)m(b)s(ering)f(lines)150 1591 y(on)21 b(a)g(history)f(list,)k (asso)s(ciating)e(arbitrary)e(data)i(with)e(a)h(line,)i(remo)m(ving)f (lines)f(from)f(the)h(list,)i(searc)m(hing)150 1701 y(through)35 b(the)g(list)h(for)f(a)h(line)f(con)m(taining)i(an)e(arbitrary)g(text)h (string,)h(and)e(referencing)g(an)m(y)h(line)f(in)150 1810 y(the)c(list)g(directly)-8 b(.)43 b(In)30 b(addition,)h(a)g (history)g Fj(expansion)g Fr(function)f(is)h(a)m(v)-5 b(ailable)33 b(whic)m(h)d(pro)m(vides)h(for)g(a)150 1920 y(consisten)m(t)h(user)d(in)m(terface)j(across)f(di\013eren)m(t)g (programs.)275 2052 y(The)c(user)g(using)g(programs)h(written)g(with)g (the)g(History)g(library)g(has)f(the)h(b)s(ene\014t)f(of)h(a)h (consisten)m(t)150 2162 y(user)38 b(in)m(terface)j(with)e(a)g(set)g(of) h(w)m(ell-kno)m(wn)f(commands)g(for)g(manipulating)g(the)g(text)h(of)f (previous)150 2271 y(lines)28 b(and)f(using)g(that)h(text)g(in)g(new)f (commands.)39 b(The)27 b(basic)h(history)g(manipulation)f(commands)h (are)150 2381 y(similar)j(to)g(the)f(history)h(substitution)f(pro)m (vided)g(b)m(y)g Fq(csh)p Fr(.)275 2514 y(If)f(the)g(programmer)g (desires,)h(he)g(can)f(use)h(the)f(Readline)i(library)-8 b(,)30 b(whic)m(h)f(includes)g(some)h(history)150 2623 y(manipulation)h(b)m(y)f(default,)h(and)e(has)i(the)f(added)g(adv)-5 b(an)m(tage)32 b(of)f(command)f(line)g(editing.)275 2756 y(Before)39 b(declaring)f(an)m(y)h(functions)e(using)h(an)m(y)g (functionalit)m(y)i(the)e(History)h(library)e(pro)m(vides)h(in)150 2865 y(other)29 b(co)s(de,)g(an)g(application)h(writer)f(should)e (include)i(the)g(\014le)f Fq()23 b Fr(in)29 b(an)m(y)g(\014le)150 2975 y(that)c(uses)e(the)h(History)h (library's)e(features.)39 b(It)24 b(supplies)f(extern)h(declarations)i (for)d(all)i(of)f(the)g(library's)150 3084 y(public)30 b(functions)g(and)f(v)-5 b(ariables,)32 b(and)d(declares)j(all)f(of)f (the)h(public)f(data)h(structures.)150 3313 y Fp(2.2)68 b(History)46 b(Storage)150 3472 y Fr(The)30 b(history)g(list)h(is)g(an) f(arra)m(y)h(of)f(history)h(en)m(tries.)41 b(A)31 b(history)f(en)m(try) h(is)f(declared)h(as)f(follo)m(ws:)390 3605 y Fq(typedef)46 b(void)g(*histdata_t;)390 3824 y(typedef)g(struct)g(_hist_entry)f({)485 3933 y(char)i(*line;)485 4043 y(char)g(*timestamp;)485 4153 y(histdata_t)e(data;)390 4262 y(})i(HIST_ENTRY;)275 4395 y Fr(The)29 b(history)i(list)g(itself)g(migh)m(t)g(therefore)g(b)s (e)f(declared)g(as)390 4527 y Fq(HIST_ENTRY)45 b(**the_history_list;) 275 4660 y Fr(The)29 b(state)j(of)f(the)f(History)h(library)f(is)h (encapsulated)g(in)m(to)g(a)g(single)g(structure:)390 4792 y Fq(/*)438 4902 y(*)47 b(A)h(structure)d(used)i(to)g(pass)f (around)g(the)h(current)f(state)h(of)g(the)g(history.)438 5011 y(*/)390 5121 y(typedef)f(struct)g(_hist_state)f({)485 5230 y(HIST_ENTRY)g(**entries;)g(/*)j(Pointer)d(to)j(the)f(entries)e (themselves.)g(*/)485 5340 y(int)i(offset;)523 b(/*)48 b(The)f(location)e(pointer)h(within)g(this)h(array.)f(*/)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(5)485 299 y Fq(int)47 b(length;)523 b(/*)48 b(Number)e(of)h(elements)e (within)i(this)f(array.)g(*/)485 408 y(int)h(size;)619 b(/*)48 b(Number)e(of)h(slots)f(allocated)g(to)h(this)f(array.)g(*/)485 518 y(int)h(flags;)390 628 y(})g(HISTORY_STATE;)275 764 y Fr(If)29 b(the)i(\015ags)g(mem)m(b)s(er)e(includes)h Fq(HS_STIFLED)p Fr(,)e(the)j(history)f(has)g(b)s(een)g(sti\015ed.)150 1000 y Fp(2.3)68 b(History)46 b(F)-11 b(unctions)150 1160 y Fr(This)33 b(section)j(describ)s(es)d(the)i(calling)g(sequence)g (for)f(the)g(v)-5 b(arious)34 b(functions)g(exp)s(orted)g(b)m(y)g(the)g Fk(gnu)150 1269 y Fr(History)d(library)-8 b(.)150 1471 y Fi(2.3.1)63 b(Initializing)40 b(History)i(and)f(State)f(Managemen)m (t)150 1618 y Fr(This)21 b(section)i(describ)s(es)f(functions)f(used)g (to)i(initialize)h(and)e(manage)h(the)f(state)h(of)g(the)f(History)g (library)150 1727 y(when)29 b(y)m(ou)i(w)m(an)m(t)g(to)g(use)f(the)h (history)f(functions)g(in)g(y)m(our)h(program.)3350 1916 y([F)-8 b(unction])-3599 b Fg(void)54 b(using_history)49 b Ff(\()p Fj(v)m(oid)p Ff(\))390 2026 y Fr(Begin)41 b(a)f(session)g(in) g(whic)m(h)f(the)h(history)g(functions)f(migh)m(t)i(b)s(e)e(used.)69 b(This)39 b(initializes)j(the)390 2135 y(in)m(teractiv)m(e)33 b(v)-5 b(ariables.)3350 2324 y([F)d(unction])-3599 b Fg(HISTORY_STATE)56 b(*)d(history_get_history_st)q(ate)f Ff(\()p Fj(v)m(oid)p Ff(\))390 2434 y Fr(Return)30 b(a)g(structure)g (describing)g(the)h(curren)m(t)f(state)i(of)e(the)h(input)e(history)-8 b(.)3350 2623 y([F)g(unction])-3599 b Fg(void)54 b (history_set_history_stat)q(e)e Ff(\()p Fj(HISTOR)-8 b(Y)p 2222 2623 28 4 v 39 w(ST)g(A)g(TE)30 b(*state)p Ff(\))390 2732 y Fr(Set)h(the)f(state)i(of)e(the)h(history)f(list)h (according)h(to)f Fj(state)p Fr(.)150 2934 y Fi(2.3.2)63 b(History)41 b(List)g(Managemen)m(t)150 3081 y Fr(These)32 b(functions)f(manage)i(individual)f(en)m(tries)g(on)g(the)g(history)g (list,)h(or)f(set)h(parameters)f(managing)150 3190 y(the)f(list)g (itself.)3350 3379 y([F)-8 b(unction])-3599 b Fg(void)54 b(add_history)48 b Ff(\()p Fj(const)32 b(c)m(har)e(*string)p Ff(\))390 3489 y Fr(Place)h Fj(string)38 b Fr(at)31 b(the)f(end)f(of)h (the)g(history)g(list.)42 b(The)29 b(asso)s(ciated)i(data)g(\014eld)f (\(if)g(an)m(y\))h(is)f(set)g(to)390 3598 y Fq(NULL)p Fr(.)3350 3787 y([F)-8 b(unction])-3599 b Fg(void)54 b(add_history_time)c Ff(\()p Fj(const)31 b(c)m(har)g(*string)p Ff(\))390 3897 y Fr(Change)f(the)h(time)g(stamp)f(asso)s(ciated)i(with) e(the)h(most)f(recen)m(t)i(history)e(en)m(try)h(to)g Fj(string)p Fr(.)3350 4086 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(remove_history)d Ff(\()p Fj(in)m(t)31 b(whic)m(h)p Ff(\))390 4195 y Fr(Remo)m(v)m(e)47 b(history)f(en)m(try)f (at)i(o\013set)f Fj(whic)m(h)f Fr(from)g(the)h(history)-8 b(.)86 b(The)45 b(remo)m(v)m(ed)i(elemen)m(t)g(is)390 4305 y(returned)29 b(so)i(y)m(ou)g(can)f(free)h(the)f(line,)h(data,)h (and)d(con)m(taining)j(structure.)3350 4494 y([F)-8 b(unction])-3599 b Fg(histdata_t)55 b(free_history_entry)c Ff(\()p Fj(HIST)p 1971 4494 V 40 w(ENTR)-8 b(Y)30 b(*histen)m(t)p Ff(\))390 4603 y Fr(F)-8 b(ree)29 b(the)f(history)g(en)m(try)g Fj(histen)m(t)j Fr(and)c(an)m(y)i(history)e(library)h(priv)-5 b(ate)28 b(data)h(asso)s(ciated)g(with)f(it.)390 4713 y(Returns)h(the)i(application-sp)s(eci\014c)h(data)f(so)g(the)f(caller) i(can)e(disp)s(ose)g(of)h(it.)3350 4902 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(replace_history_entry)f Ff(\()p Fj(in)m(t)31 b(whic)m(h,)f(const)h(c)m(har)g(*line,)565 5011 y(histdata)p 894 5011 V 41 w(t)g(data)p Ff(\))390 5121 y Fr(Mak)m(e)e(the)f(history)f(en)m(try)h(at)h(o\013set)f Fj(whic)m(h)g Fr(ha)m(v)m(e)g Fj(line)33 b Fr(and)27 b Fj(data)p Fr(.)41 b(This)27 b(returns)f(the)i(old)g(en)m(try)390 5230 y(so)37 b(the)h(caller)g(can)f(disp)s(ose)g(of)g(an)m(y)g (application-sp)s(eci\014c)i(data.)61 b(In)37 b(the)g(case)h(of)f(an)g (in)m(v)-5 b(alid)390 5340 y Fj(whic)m(h)p Fr(,)30 b(a)h Fq(NULL)e Fr(p)s(oin)m(ter)i(is)f(returned.)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(6)3350 299 y([F)-8 b(unction])-3599 b Fg(void)54 b(clear_history)49 b Ff(\()p Fj(v)m(oid)p Ff(\))390 408 y Fr(Clear)31 b(the)f(history)h (list)g(b)m(y)f(deleting)h(all)h(the)e(en)m(tries.)3350 594 y([F)-8 b(unction])-3599 b Fg(void)54 b(stifle_history)49 b Ff(\()p Fj(in)m(t)31 b(max)p Ff(\))390 704 y Fr(Sti\015e)f(the)h (history)f(list,)h(remem)m(b)s(ering)f(only)h(the)f(last)i Fj(max)k Fr(en)m(tries.)3350 890 y([F)-8 b(unction])-3599 b Fg(int)53 b(unstifle_history)e Ff(\()p Fj(v)m(oid)p Ff(\))390 1000 y Fr(Stop)27 b(sti\015ing)h(the)f(history)-8 b(.)40 b(This)27 b(returns)f(the)h(previously-set)h(maxim)m(um)f(n)m (um)m(b)s(er)f(of)i(history)390 1109 y(en)m(tries)g(\(as)f(set)g(b)m(y) g Fq(stifle_history\(\))p Fr(\).)35 b(The)27 b(v)-5 b(alue)27 b(is)g(p)s(ositiv)m(e)g(if)g(the)g(history)g(w)m(as)g(sti\015ed,)390 1219 y(negativ)m(e)33 b(if)d(it)h(w)m(asn't.)3350 1405 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_is_stifled)e Ff(\()p Fj(v)m(oid)p Ff(\))390 1514 y Fr(Returns)29 b(non-zero)i(if)g (the)f(history)h(is)f(sti\015ed,)g(zero)i(if)e(it)h(is)f(not.)150 1714 y Fi(2.3.3)63 b(Information)42 b(Ab)s(out)f(the)g(History)g(List) 150 1861 y Fr(These)30 b(functions)g(return)f(information)i(ab)s(out)f (the)h(en)m(tire)g(history)f(list)h(or)g(individual)e(list)i(en)m (tries.)3350 2047 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(**)e(history_list)c Ff(\()p Fj(v)m(oid)p Ff(\))390 2157 y Fr(Return)30 b(a)h Fq(NULL)e Fr(terminated)i(arra)m(y)g(of)f Fq(HIST_ENTRY)e(*)i Fr(whic)m(h)g(is)h(the)g(curren)m(t)f(input)f (history)-8 b(.)390 2267 y(Elemen)m(t)31 b(0)g(of)g(this)f(list)h(is)f (the)h(b)s(eginning)f(of)g(time.)42 b(If)29 b(there)i(is)f(no)h (history)-8 b(,)31 b(return)e Fq(NULL)p Fr(.)3350 2452 y([F)-8 b(unction])-3599 b Fg(int)53 b(where_history)d Ff(\()p Fj(v)m(oid)p Ff(\))390 2562 y Fr(Returns)29 b(the)i(o\013set)g (of)g(the)g(curren)m(t)f(history)g(elemen)m(t.)3350 2748 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(current_history)d Ff(\()p Fj(v)m(oid)p Ff(\))390 2858 y Fr(Return)24 b(the)h(history)g (en)m(try)g(at)h(the)f(curren)m(t)f(p)s(osition,)j(as)e(determined)f(b) m(y)h Fq(where_history\(\))p Fr(.)390 2967 y(If)30 b(there)g(is)h(no)f (en)m(try)h(there,)g(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)3350 3153 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(history_get)c Ff(\()p Fj(in)m(t)31 b(o\013set)p Ff(\))390 3263 y Fr(Return)41 b(the)g(history)h(en)m(try)g(at)g(p)s(osition)g Fj(o\013set)p Fr(,)j(starting)e(from)e Fq(history_base)d Fr(\(see)k(Sec-)390 3372 y(tion)32 b(2.4)i([History)e(V)-8 b(ariables],)35 b(page)d(8\).)47 b(If)31 b(there)i(is)f(no)g(en)m(try)g(there,)h(or)f (if)g Fj(o\013set)j Fr(is)d(greater)390 3482 y(than)e(the)h(history)f (length,)h(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)3350 3668 y([F)-8 b(unction])-3599 b Fg(time_t)54 b(history_get_time)c Ff(\()p Fj(HIST)p 1657 3668 28 4 v 40 w(ENTR)-8 b(Y)30 b(*en)m(try)p Ff(\))390 3778 y Fr(Return)g(the)g(time)h(stamp)f(asso)s (ciated)i(with)e(the)h(history)f(en)m(try)h Fj(en)m(try)p Fr(.)3350 3963 y([F)-8 b(unction])-3599 b Fg(int)53 b (history_total_bytes)e Ff(\()p Fj(v)m(oid)p Ff(\))390 4073 y Fr(Return)27 b(the)h(n)m(um)m(b)s(er)e(of)i(b)m(ytes)g(that)g (the)g(primary)e(history)i(en)m(tries)g(are)g(using.)39 b(This)27 b(function)390 4183 y(returns)i(the)i(sum)e(of)i(the)f (lengths)h(of)f(all)i(the)e(lines)h(in)f(the)g(history)-8 b(.)150 4383 y Fi(2.3.4)63 b(Mo)m(ving)41 b(Around)h(the)f(History)g (List)150 4530 y Fr(These)30 b(functions)g(allo)m(w)i(the)e(curren)m(t) h(index)f(in)m(to)h(the)f(history)h(list)g(to)g(b)s(e)f(set)h(or)f(c)m (hanged.)3350 4716 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_set_pos)d Ff(\()p Fj(in)m(t)31 b(p)s(os)p Ff(\))390 4825 y Fr(Set)37 b(the)g(curren)m(t)f(history)g(o\013set)i(to)f Fj(p)s(os)p Fr(,)h(an)f(absolute)g(index)f(in)m(to)i(the)e(list.)60 b(Returns)36 b(1)h(on)390 4935 y(success,)31 b(0)g(if)f Fj(p)s(os)j Fr(is)e(less)f(than)h(zero)g(or)f(greater)i(than)e(the)g(n) m(um)m(b)s(er)f(of)i(history)f(en)m(tries.)3350 5121 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(previous_history)d Ff(\()p Fj(v)m(oid)p Ff(\))390 5230 y Fr(Bac)m(k)30 b(up)e(the)h (curren)m(t)g(history)f(o\013set)i(to)g(the)f(previous)f(history)h(en)m (try)-8 b(,)30 b(and)e(return)g(a)h(p)s(oin)m(ter)390 5340 y(to)i(that)g(en)m(try)-8 b(.)41 b(If)30 b(there)h(is)f(no)h (previous)f(en)m(try)-8 b(,)31 b(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(7)3350 299 y([F)-8 b(unction])-3599 b Fg(HIST_ENTRY)55 b(*)e(next_history)c Ff(\()p Fj(v)m(oid)p Ff(\))390 408 y Fr(Mo)m(v)m(e)38 b(the)d(curren)m(t)h(history)f(o\013set)i(forw)m(ard)e(to)h(the)g(next) f(history)h(en)m(try)-8 b(,)37 b(and)e(return)g(the)h(a)390 518 y(p)s(oin)m(ter)30 b(to)h(that)g(en)m(try)-8 b(.)42 b(If)30 b(there)g(is)h(no)f(next)h(en)m(try)-8 b(,)31 b(return)e(a)i Fq(NULL)e Fr(p)s(oin)m(ter.)150 722 y Fi(2.3.5)63 b(Searc)m(hing)40 b(the)h(History)h(List)150 869 y Fr(These)36 b(functions)g(allo)m(w)i(searc)m(hing)f(of)f(the)h (history)f(list)h(for)f(en)m(tries)h(con)m(taining)h(a)f(sp)s(eci\014c) f(string.)150 978 y(Searc)m(hing)28 b(ma)m(y)g(b)s(e)f(p)s(erformed)f (b)s(oth)h(forw)m(ard)f(and)h(bac)m(kw)m(ard)h(from)f(the)h(curren)m(t) f(history)h(p)s(osition.)150 1088 y(The)j(searc)m(h)h(ma)m(y)g(b)s(e)e Fj(anc)m(hored)p Fr(,)i(meaning)g(that)g(the)f(string)h(m)m(ust)f(matc) m(h)h(at)g(the)g(b)s(eginning)e(of)i(the)150 1198 y(history)e(en)m(try) -8 b(.)3350 1391 y([F)g(unction])-3599 b Fg(int)53 b(history_search)d Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(direction)p Ff(\))390 1501 y Fr(Searc)m(h)e(the)g(history)g(for)g Fj(string)p Fr(,)g(starting)h(at)f(the)g(curren)m(t)g(history)g (o\013set.)41 b(If)28 b Fj(direction)i Fr(is)f(less)390 1610 y(than)40 b(0,)j(then)c(the)h(searc)m(h)h(is)f(through)f(previous) h(en)m(tries,)j(otherwise)d(through)g(subsequen)m(t)390 1720 y(en)m(tries.)i(If)30 b Fj(string)38 b Fr(is)30 b(found,)g(then)g(the)g(curren)m(t)h(history)f(index)g(is)g(set)h(to)h (that)f(history)f(en)m(try)-8 b(,)390 1830 y(and)33 b(the)g(v)-5 b(alue)34 b(returned)e(is)i(the)g(o\013set)g(in)f(the)h(line)f(of)h (the)g(en)m(try)f(where)g Fj(string)41 b Fr(w)m(as)34 b(found.)390 1939 y(Otherwise,)c(nothing)h(is)f(c)m(hanged,)h(and)f(a)h (-1)g(is)f(returned.)3350 2133 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_search_prefix)f Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(direction)p Ff(\))390 2242 y Fr(Searc)m(h)41 b(the)g(history)f(for)g Fj(string)p Fr(,)k(starting)d(at)g(the)g(curren)m(t)f(history)h(o\013set.)72 b(The)40 b(searc)m(h)h(is)390 2352 y(anc)m(hored:)f(matc)m(hing)31 b(lines)f(m)m(ust)f(b)s(egin)g(with)g Fj(string)p Fr(.)40 b(If)29 b Fj(direction)h Fr(is)g(less)f(than)g(0,)i(then)e(the)390 2461 y(searc)m(h)j(is)f(through)g(previous)g(en)m(tries,)h(otherwise)g (through)e(subsequen)m(t)h(en)m(tries.)44 b(If)31 b Fj(string)39 b Fr(is)390 2571 y(found,)33 b(then)f(the)h(curren)m(t)g(history)g (index)g(is)g(set)g(to)h(that)g(en)m(try)-8 b(,)34 b(and)f(the)g (return)f(v)-5 b(alue)33 b(is)g(0.)390 2681 y(Otherwise,)d(nothing)h (is)f(c)m(hanged,)h(and)f(a)h(-1)g(is)f(returned.)3350 2874 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_search_pos)e Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(direction,)g(in)m (t)g(p)s(os)p Ff(\))390 2984 y Fr(Searc)m(h)j(for)g Fj(string)42 b Fr(in)34 b(the)h(history)f(list,)i(starting)f(at)g Fj(p)s(os)p Fr(,)g(an)f(absolute)h(index)e(in)m(to)j(the)e(list.)390 3093 y(If)i Fj(direction)g Fr(is)g(negativ)m(e,)k(the)c(searc)m(h)h (pro)s(ceeds)f(bac)m(kw)m(ard)g(from)g Fj(p)s(os)p Fr(,)h(otherwise)f (forw)m(ard.)390 3203 y(Returns)43 b(the)h(absolute)h(index)f(of)g(the) g(history)g(elemen)m(t)h(where)f Fj(string)52 b Fr(w)m(as)44 b(found,)i(or)e(-1)390 3313 y(otherwise.)150 3516 y Fi(2.3.6)63 b(Managing)41 b(the)g(History)h(File)150 3663 y Fr(The)26 b(History)h(library)f(can)h(read)g(the)f(history)h(from)f(and)g(write)h (it)g(to)g(a)g(\014le.)40 b(This)26 b(section)h(do)s(cumen)m(ts)150 3773 y(the)k(functions)e(for)i(managing)g(a)g(history)f(\014le.)3350 3967 y([F)-8 b(unction])-3599 b Fg(int)53 b(read_history)c Ff(\()p Fj(const)32 b(c)m(har)e(*\014lename)p Ff(\))390 4076 y Fr(Add)f(the)h(con)m(ten)m(ts)h(of)f Fj(\014lename)k Fr(to)d(the)f(history)f(list,)i(a)f(line)g(at)g(a)g(time.)41 b(If)29 b Fj(\014lename)35 b Fr(is)30 b Fq(NULL)p Fr(,)390 4186 y(then)g(read)g(from)g Fq(~/.history)p Fr(.)38 b(Returns)30 b(0)g(if)h(successful,)f(or)g Fq(errno)f Fr(if)i(not.)3350 4379 y([F)-8 b(unction])-3599 b Fg(int)53 b(read_history_range)e Ff(\()p Fj(const)31 b(c)m(har)g(*\014lename,)g(in)m(t)g(from,)f(in)m(t) h(to)p Ff(\))390 4489 y Fr(Read)d(a)g(range)h(of)f(lines)g(from)f Fj(\014lename)p Fr(,)i(adding)e(them)h(to)h(the)f(history)g(list.)40 b(Start)28 b(reading)g(at)390 4598 y(line)f Fj(from)e Fr(and)h(end)f(at)i Fj(to)p Fr(.)41 b(If)25 b Fj(from)h Fr(is)g(zero,)i(start)f(at)g(the)f(b)s(eginning.)39 b(If)26 b Fj(to)31 b Fr(is)c(less)f(than)g Fj(from)p Fr(,)390 4708 y(then)33 b(read)g(un)m(til)g(the)g(end)g(of)g(the)g(\014le.)49 b(If)33 b Fj(\014lename)38 b Fr(is)33 b Fq(NULL)p Fr(,)g(then)g(read)g (from)f Fq(~/.history)p Fr(.)390 4818 y(Returns)d(0)i(if)g(successful,) f(or)g Fq(errno)f Fr(if)i(not.)3350 5011 y([F)-8 b(unction])-3599 b Fg(int)53 b(write_history)d Ff(\()p Fj(const)31 b(c)m(har)g (*\014lename)p Ff(\))390 5121 y Fr(W)-8 b(rite)36 b(the)e(curren)m(t)h (history)f(to)h Fj(\014lename)p Fr(,)h(o)m(v)m(erwriting)g Fj(\014lename)k Fr(if)34 b(necessary)-8 b(.)54 b(If)34 b Fj(\014lename)390 5230 y Fr(is)27 b Fq(NULL)p Fr(,)g(then)g(write)g (the)h(history)f(list)g(to)h Fq(~/.history)p Fr(.)37 b(Returns)26 b(0)i(on)f(success,)h(or)f Fq(errno)f Fr(on)390 5340 y(a)31 b(read)f(or)g(write)h(error.)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(8)3350 299 y([F)-8 b(unction])-3599 b Fg(int)53 b(append_history)d Ff(\()p Fj(in)m(t)31 b(nelemen)m(ts,)h(const)f(c)m(har)f(*\014lename)p Ff(\))390 408 y Fr(App)s(end)j(the)i(last)g Fj(nelemen)m(ts)k Fr(of)c(the)g(history)f(list)i(to)f Fj(\014lename)p Fr(.)54 b(If)34 b Fj(\014lename)40 b Fr(is)34 b Fq(NULL)p Fr(,)h(then)390 518 y(app)s(end)29 b(to)i Fq(~/.history)p Fr(.)38 b(Returns)29 b(0)i(on)f(success,)h(or)f Fq(errno)f Fr(on)i(a)f(read)h(or)f(write)h (error.)3350 705 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_truncate_file)f Ff(\()p Fj(const)31 b(c)m(har)g(*\014lename,) g(in)m(t)g(nlines)p Ff(\))390 814 y Fr(T)-8 b(runcate)39 b(the)f(history)h(\014le)f Fj(\014lename)p Fr(,)j(lea)m(ving)f(only)f (the)g(last)g Fj(nlines)j Fr(lines.)65 b(If)38 b Fj(\014lename)44 b Fr(is)390 924 y Fq(NULL)p Fr(,)29 b(then)i Fq(~/.history)c Fr(is)k(truncated.)40 b(Returns)30 b(0)g(on)h(success,)g(or)f Fq(errno)f Fr(on)h(failure.)150 1124 y Fi(2.3.7)63 b(History)41 b(Expansion)150 1271 y Fr(These)30 b(functions)g(implemen)m(t)h (history)f(expansion.)3350 1457 y([F)-8 b(unction])-3599 b Fg(int)53 b(history_expand)d Ff(\()p Fj(c)m(har)31 b(*string,)g(c)m(har)g(**output)p Ff(\))390 1567 y Fr(Expand)i Fj(string)p Fr(,)j(placing)f(the)f(result)h(in)m(to)g Fj(output)p Fr(,)g(a)g(p)s(oin)m(ter)f(to)h(a)g(string)f(\(see)i (Section)f(1.1)390 1677 y([History)c(In)m(teraction],)i(page)e(1\).)41 b(Returns:)390 1838 y Fq(0)432 b Fr(If)37 b(no)g(expansions)g(to)s(ok)i (place)f(\(or,)i(if)d(the)h(only)f(c)m(hange)i(in)e(the)g(text)i(w)m (as)f(the)870 1947 y(remo)m(v)-5 b(al)31 b(of)g(escap)s(e)f(c)m (haracters)i(preceding)e(the)g(history)g(expansion)g(c)m(haracter\);) 390 2108 y Fq(1)432 b Fr(if)30 b(expansions)g(did)g(tak)m(e)i(place;) 390 2268 y Fq(-1)384 b Fr(if)30 b(there)h(w)m(as)g(an)f(error)g(in)g (expansion;)390 2429 y Fq(2)432 b Fr(if)28 b(the)f(returned)g(line)g (should)g(b)s(e)g(displa)m(y)m(ed,)i(but)e(not)h(executed,)h(as)f(with) f(the)h Fq(:p)870 2538 y Fr(mo)s(di\014er)h(\(see)j(Section)f(1.1.3)h ([Mo)s(di\014ers],)e(page)i(2\).)390 2699 y(If)e(an)g(error)g(o)s (ccurred)g(in)g(expansion,)g(then)g Fj(output)i Fr(con)m(tains)g(a)f (descriptiv)m(e)g(error)f(message.)3350 2886 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(get_history_event)f Ff(\()p Fj(const)31 b(c)m(har)g(*string,)g(in)m(t)g(*cindex,)g(in)m(t)g (qc)m(har)p Ff(\))390 2995 y Fr(Returns)45 b(the)g(text)i(of)e(the)h (history)f(ev)m(en)m(t)i(b)s(eginning)e(at)h Fj(string)53 b Fq(+)45 b Fj(*cindex)p Fr(.)87 b Fj(*cindex)52 b Fr(is)390 3105 y(mo)s(di\014ed)28 b(to)i(p)s(oin)m(t)f(to)h(after)g(the)g(ev)m (en)m(t)h(sp)s(eci\014er.)39 b(A)m(t)31 b(function)e(en)m(try)-8 b(,)30 b Fj(cindex)36 b Fr(p)s(oin)m(ts)29 b(to)h(the)390 3214 y(index)35 b(in)m(to)i Fj(string)44 b Fr(where)35 b(the)h(history)g(ev)m(en)m(t)h(sp)s(eci\014cation)g(b)s(egins.)57 b Fj(qc)m(har)42 b Fr(is)36 b(a)g(c)m(haracter)390 3324 y(that)27 b(is)g(allo)m(w)m(ed)i(to)f(end)e(the)h(ev)m(en)m(t)h(sp)s (eci\014cation)g(in)f(addition)g(to)g(the)g(\\normal")h(terminating)390 3434 y(c)m(haracters.)3350 3620 y([F)-8 b(unction])-3599 b Fg(char)54 b(**)e(history_tokenize)f Ff(\()p Fj(const)31 b(c)m(har)g(*string)p Ff(\))390 3730 y Fr(Return)f(an)h(arra)m(y)g(of)g (tok)m(ens)h(parsed)e(out)h(of)g Fj(string)p Fr(,)h(m)m(uc)m(h)e(as)i (the)f(shell)g(migh)m(t.)43 b(The)30 b(tok)m(ens)390 3839 y(are)h(split)g(on)f(the)h(c)m(haracters)h(in)e(the)h Fj(history)p 2006 3839 28 4 v 40 w(w)m(ord)p 2241 3839 V 39 w(delimiters)k Fr(v)-5 b(ariable,)32 b(and)e(shell)g(quoting)390 3949 y(con)m(v)m(en)m(tions)i(are)f(ob)s(ey)m(ed.)3350 4135 y([F)-8 b(unction])-3599 b Fg(char)54 b(*)e(history_arg_extract)f Ff(\()p Fj(in)m(t)32 b(\014rst,)d(in)m(t)i(last,)h(const)f(c)m(har)f (*string)p Ff(\))390 4245 y Fr(Extract)41 b(a)g(string)f(segmen)m(t)i (consisting)f(of)f(the)h Fj(\014rst)g Fr(through)f Fj(last)j Fr(argumen)m(ts)e(presen)m(t)f(in)390 4354 y Fj(string)p Fr(.)h(Argumen)m(ts)30 b(are)h(split)f(using)g Fq(history_tokenize)p Fr(.)150 4588 y Fp(2.4)68 b(History)46 b(V)-11 b(ariables)150 4748 y Fr(This)26 b(section)i(describ)s(es)e(the)h(externally-visible)i (v)-5 b(ariables)28 b(exp)s(orted)e(b)m(y)h(the)g Fk(gnu)g Fr(History)g(Library)-8 b(.)3371 4934 y([V)g(ariable])-3598 b Fg(int)53 b(history_base)390 5044 y Fr(The)30 b(logical)j(o\013set)e (of)g(the)f(\014rst)g(en)m(try)g(in)h(the)f(history)g(list.)3371 5230 y([V)-8 b(ariable])-3598 b Fg(int)53 b(history_length)390 5340 y Fr(The)30 b(n)m(um)m(b)s(er)f(of)h(en)m(tries)i(curren)m(tly)e (stored)h(in)f(the)g(history)g(list.)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(9)3371 299 y([V)-8 b(ariable])-3598 b Fg(int)53 b(history_max_entries)390 408 y Fr(The)45 b(maxim)m(um)h(n)m(um)m(b)s(er)f(of)h(history)g(en)m (tries.)88 b(This)45 b(m)m(ust)h(b)s(e)f(c)m(hanged)i(using)e Fq(stifle_)390 518 y(history\(\))p Fr(.)3371 742 y([V)-8 b(ariable])-3598 b Fg(int)53 b(history_write_timesta)q(mps)390 852 y Fr(If)44 b(non-zero,)49 b(timestamps)c(are)g(written)g(to)g(the)g (history)f(\014le,)49 b(so)c(they)f(can)h(b)s(e)f(preserv)m(ed)390 962 y(b)s(et)m(w)m(een)31 b(sessions.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(0,)h(meaning)g(that)g(timestamps)g(are)g(not)f(sa)m(v) m(ed.)390 1116 y(The)41 b(curren)m(t)g(timestamp)h(format)g(uses)f(the) h(v)-5 b(alue)42 b(of)f Fj(history)p 2697 1116 28 4 v 41 w(commen)m(t)p 3098 1116 V 41 w(c)m(har)48 b Fr(to)42 b(delimit)390 1226 y(timestamp)h(en)m(tries)g(in)f(the)g(history)h (\014le.)76 b(If)42 b(that)h(v)-5 b(ariable)43 b(do)s(es)f(not)g(ha)m (v)m(e)i(a)f(v)-5 b(alue)42 b(\(the)390 1335 y(default\),)31 b(timestamps)g(will)g(not)f(b)s(e)g(written.)3371 1560 y([V)-8 b(ariable])-3598 b Fg(char)54 b(history_expansion_char)390 1669 y Fr(The)35 b(c)m(haracter)i(that)e(in)m(tro)s(duces)g(a)h (history)f(ev)m(en)m(t.)57 b(The)34 b(default)i(is)f(`)p Fq(!)p Fr('.)56 b(Setting)35 b(this)h(to)g(0)390 1779 y(inhibits)30 b(history)g(expansion.)3371 2003 y([V)-8 b(ariable])-3598 b Fg(char)54 b(history_subst_char)390 2113 y Fr(The)40 b(c)m(haracter)i(that)g(in)m(v)m(ok)m(es)g(w)m(ord)f (substitution)f(if)h(found)e(at)i(the)g(start)g(of)g(a)g(line.)72 b(The)390 2222 y(default)31 b(is)f(`)p Fq(^)p Fr('.)3371 2447 y([V)-8 b(ariable])-3598 b Fg(char)54 b(history_comment_char)390 2556 y Fr(During)37 b(tok)m(enization,)43 b(if)38 b(this)f(c)m (haracter)j(is)e(seen)f(as)h(the)g(\014rst)f(c)m(haracter)j(of)e(a)g(w) m(ord,)h(then)390 2666 y(it)44 b(and)e(all)j(subsequen)m(t)d(c)m (haracters)j(up)d(to)i(a)g(newline)f(are)h(ignored,)i(suppressing)c (history)390 2776 y(expansion)30 b(for)g(the)h(remainder)f(of)g(the)h (line.)41 b(This)29 b(is)i(disabled)f(b)m(y)g(default.)3371 3000 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e (history_word_delimiter)q(s)390 3110 y Fr(The)27 b(c)m(haracters)i (that)f(separate)h(tok)m(ens)f(for)f Fq(history_tokenize\(\))p Fr(.)35 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f Fq(")390 3219 y(\\t\\n\(\)<>;&|")p Fr(.)3371 3444 y([V)-8 b(ariable])-3598 b Fg(char)54 b(*)e(history_search_delimit)q(er_)q(cha)q(rs)390 3553 y Fr(The)26 b(list)g(of)g(additional)h(c)m(haracters)h(whic)m(h)e (can)g(delimit)h(a)f(history)g(searc)m(h)h(string,)g(in)f(addition)390 3663 y(to)31 b(space,)g(T)-8 b(AB,)32 b(`)p Fq(:)p Fr(')e(and)g(`)p Fq(?)p Fr(')g(in)g(the)h(case)g(of)g(a)g(substring)e(searc)m(h.)41 b(The)30 b(default)h(is)f(empt)m(y)-8 b(.)3371 3887 y([V)g(ariable]) -3598 b Fg(char)54 b(*)e(history_no_expand_char)q(s)390 3997 y Fr(The)29 b(list)i(of)f(c)m(haracters)h(whic)m(h)e(inhibit)h (history)g(expansion)f(if)h(found)e(immediately)j(follo)m(wing)390 4106 y Fj(history)p 672 4106 V 40 w(expansion)p 1104 4106 V 40 w(c)m(har)p Fr(.)41 b(The)30 b(default)g(is)h(space,)g(tab,)g (newline,)f(carriage)i(return,)e(and)g(`)p Fq(=)p Fr('.)3371 4331 y([V)-8 b(ariable])-3598 b Fg(int)53 b(history_quotes_inhibi)q (t_ex)q(pan)q(sio)q(n)390 4440 y Fr(If)29 b(non-zero,)h(single-quoted)g (w)m(ords)f(are)g(not)h(scanned)f(for)g(the)g(history)g(expansion)g(c)m (haracter.)390 4550 y(The)h(default)g(v)-5 b(alue)31 b(is)g(0.)3371 4774 y([V)-8 b(ariable])-3598 b Fg(rl_linebuf_func_t)57 b(*)c(history_inhibit_expans)q(ion)q(_fu)q(ncti)q(on)390 4884 y Fr(This)32 b(should)h(b)s(e)f(set)i(to)g(the)g(address)e(of)i(a) f(function)g(that)h(tak)m(es)h(t)m(w)m(o)g(argumen)m(ts:)46 b(a)34 b Fq(char)29 b(*)390 4994 y Fr(\()p Fj(string)8 b Fr(\))27 b(and)f(an)g Fq(int)g Fr(index)g(in)m(to)i(that)f(string)f (\()p Fj(i)5 b Fr(\).)40 b(It)27 b(should)f(return)f(a)i(non-zero)g(v) -5 b(alue)27 b(if)g(the)390 5103 y(history)i(expansion)g(starting)h(at) g Fj(string[i])j Fr(should)28 b(not)i(b)s(e)e(p)s(erformed;)h(zero)h (if)f(the)g(expansion)390 5213 y(should)i(b)s(e)g(done.)45 b(It)32 b(is)g(in)m(tended)g(for)g(use)g(b)m(y)f(applications)i(lik)m (e)h(Bash)e(that)g(use)g(the)g(history)390 5322 y(expansion)e(c)m (haracter)i(for)e(additional)i(purp)s(oses.)39 b(By)30 b(default,)h(this)f(v)-5 b(ariable)31 b(is)g(set)g(to)g Fq(NULL)p Fr(.)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1734 b(10)150 299 y Fp(2.5)68 b(History)46 b(Programming)g(Example)150 458 y Fr(The)30 b(follo)m(wing)i(program)e(demonstrates)h(simple)f(use) g(of)h(the)f Fk(gnu)g Fr(History)h(Library)-8 b(.)390 633 y Fe(#include)41 b()390 720 y(#include)g ()390 894 y(main)f(\(argc,)h(argv\))586 981 y(int)f(argc;)586 1068 y(char)g(**argv;)390 1156 y({)468 1243 y(char)h(line[1024],)g(*t;)468 1330 y(int)f(len,)g(done)h (=)e(0;)468 1504 y(line[0])i(=)f(0;)468 1679 y(using_history)j(\(\);) 468 1766 y(while)e(\(!done\))547 1853 y({)625 1940 y(printf)g (\("history$)g("\);)625 2027 y(fflush)g(\(stdout\);)625 2115 y(t)f(=)f(fgets)i(\(line,)f(sizeof)h(\(line\))f(-)g(1,)g(stdin\);) 625 2202 y(if)g(\(t)g(&&)f(*t\))704 2289 y({)782 2376 y(len)h(=)g(strlen)g(\(t\);)782 2463 y(if)g(\(t[len)h(-)e(1])h(==)f ('\\n'\))861 2550 y(t[len)h(-)g(1])f(=)h('\\0';)704 2638 y(})625 2812 y(if)g(\(!t\))704 2899 y(strcpy)g(\(line,)h("quit"\);)625 3073 y(if)f(\(line[0]\))704 3161 y({)782 3248 y(char)g(*expansion;)782 3335 y(int)g(result;)782 3509 y(result)h(=)e(history_expand)k(\(line,)d (&expansion\);)782 3597 y(if)g(\(result\))861 3684 y(fprintf)h (\(stderr,)g("\045s\\n",)f(expansion\);)782 3858 y(if)g(\(result)h(<)e (0)h(||)f(result)i(==)f(2\))861 3945 y({)939 4032 y(free)g (\(expansion\);)939 4120 y(continue;)861 4207 y(})782 4381 y(add_history)i(\(expansion\);)782 4468 y(strncpy)f(\(line,)g (expansion,)g(sizeof)g(\(line\))f(-)g(1\);)782 4555 y(free)g (\(expansion\);)704 4643 y(})625 4817 y(if)g(\(strcmp)h(\(line,)f ("quit"\))h(==)f(0\))704 4904 y(done)g(=)f(1;)625 4991 y(else)h(if)g(\(strcmp)h(\(line,)g("save"\))f(==)g(0\))704 5078 y(write_history)i(\("history_file"\);)625 5166 y(else)e(if)g (\(strcmp)h(\(line,)g("read"\))f(==)g(0\))704 5253 y(read_history)i (\("history_file"\);)625 5340 y(else)e(if)g(\(strcmp)h(\(line,)g ("list"\))f(==)g(0\))p eop end %%Page: 11 14 TeXDict begin 11 13 bop 150 -116 a Fr(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1734 b(11)704 299 y Fe({)782 386 y(register)41 b(HIST_ENTRY)h(**the_list;)782 473 y(register)f(int)f(i;)782 648 y(the_list)h(=)f(history_list)i (\(\);)782 735 y(if)e(\(the_list\))861 822 y(for)g(\(i)f(=)h(0;)f (the_list[i];)j(i++\))939 909 y(printf)f(\("\045d:)f(\045s\\n",)h(i)e (+)h(history_base,)i(the_list[i]->line\);)704 996 y(})625 1083 y(else)e(if)g(\(strncmp)h(\(line,)g("delete",)g(6\))f(==)f(0\))704 1171 y({)782 1258 y(int)h(which;)782 1345 y(if)g(\(\(sscanf)h(\(line)f (+)g(6,)g("\045d",)g(&which\)\))h(==)f(1\))861 1432 y({)939 1519 y(HIST_ENTRY)i(*entry)e(=)g(remove_history)i(\(which\);)939 1606 y(if)e(\(!entry\))1018 1694 y(fprintf)g(\(stderr,)i("No)d(such)i (entry)f(\045d\\n",)h(which\);)939 1781 y(else)1018 1868 y({)1096 1955 y(free)f(\(entry->line\);)1096 2042 y(free)g(\(entry\);) 1018 2130 y(})861 2217 y(})782 2304 y(else)861 2391 y({)939 2478 y(fprintf)h(\(stderr,)g("non-numeric)h(arg)e(given)g(to)g (`delete'\\n"\);)861 2565 y(})704 2653 y(})547 2740 y(})390 2827 y(})p eop end %%Page: 12 15 TeXDict begin 12 14 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(12)150 299 y Fn(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fr(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fo(\015)e Fr(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 y Fq(http://fsf.org/)390 964 y Fr(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fj(free)36 b Fr(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(13)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m (ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g (the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fk(asci)r(i)g Fr(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j Fd(SGML)f Fr(or)f Fd(XML)g Fr(using)g(a)g(publicly)330 2504 y(a)m(v)-5 b(ailable)42 b Fd(DTD)p Fr(,)h(and)c (standard-conforming)g(simple)h Fd(HTML)p Fr(,)i(P)m(ostScript)e(or)f Fd(PDF)h Fr(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Fd(PNG)p Fr(,)i Fd(X)n(CF)330 2724 y Fr(and)e Fd(JPG)p Fr(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Fd(SGML)54 b Fr(or)f Fd(XML)h Fr(for)g(whic)m(h)f(the)h Fd(DTD)g Fr(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Fd(HTML)p Fr(,)330 3052 y(P)m(ostScript)31 b(or)f Fd(PDF)h Fr(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(14)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j (and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e (License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e (in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h (other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f (License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h (the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(15)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(16)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g (section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g (nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s (di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m (ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e (as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i (the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s (di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f (F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m (k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g (same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m (y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m (y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g (not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(17)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h (on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g (is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i (resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g (the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e (b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(18)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f (in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 762 y(See)c Fq(http://www.gnu.org/copy)o(left)o(/)p Fr(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g (distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g (particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h (\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i (the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 19 22 TeXDict begin 19 21 bop 150 -116 a Fr(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(19)150 299 y Fp(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fr(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fe(Copyright)42 b(\(C\))79 b Fc(year)g(your)40 b(name)p Fe(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f (license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y Fr(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fe(,)h(with)547 1646 y(the)f(Front-Cover)i (Texts)e(being)g Fc(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h (Texts)547 1733 y(being)f Fc(list)p Fe(.)275 1868 y Fr(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f (Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g (of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g (alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g (examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m (hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 150 -116 a Fr(App)s(endix)29 b(B:)i(Concept)f(Index)2391 b(20)150 299 y Fn(App)t(endix)52 b(B)81 b(Concept)51 b(Index)150 638 y Fp(A)150 754 y Fb(anc)n(hored)26 b(searc)n(h)6 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(7)150 988 y Fp(E)150 1104 y Fb(ev)n(en)n(t)25 b(designators)18 b Fa(:)c(:)f(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)45 b Fb(1)2025 638 y Fp(H)2025 852 y Fb(history)25 b(ev)n(en)n(ts)6 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(1)2025 987 y(history)25 b(expansion)13 b Fa(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)40 b Fb(1)2025 1122 y(History)25 b(Searc)n(hing)10 b Fa(:)j(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(7)p eop end %%Page: 21 24 TeXDict begin 21 23 bop 150 -116 a Fr(App)s(endix)29 b(C:)h(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)1832 b(21)150 299 y Fn(App)t(endix)52 b(C)81 b(F)-13 b(unction)52 b(and)h(V)-13 b(ariable)53 b(Index)150 638 y Fp(A)150 755 y Fe(add_history)7 b Fa(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(5)150 842 y Fe (add_history_time)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)38 b Fb(5)150 929 y Fe(append_history)16 b Fa(:)g(:)d(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(8)150 1182 y Fp(C)150 1299 y Fe(clear_history)21 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)45 b Fb(6)150 1386 y Fe(current_history)13 b Fa(:)k(:)c(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(6)150 1639 y Fp(F)150 1755 y Fe(free_history_entry)27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)50 b Fb(5)150 2008 y Fp(G)150 2124 y Fe(get_history_event)8 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(8)150 2377 y Fp(H)150 2494 y Fe(history_arg_extract)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(8)150 2581 y Fe(history_base)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fb(8)150 2669 y Fe (history_comment_char)18 b Fa(:)f(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(9)150 2756 y Fe(history_expand)16 b Fa(:)g(:)d(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(8)150 2843 y Fe (history_expansion_char)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)40 b Fb(9)150 2931 y Fe(history_get)7 b Fa(:)15 b(:)e(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(6)150 3018 y Fe(history_get_history_state)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(5)150 3106 y Fe(history_get_time)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)38 b Fb(6)150 3193 y Fe (history_inhibit_expansion_fun)q(ctio)q(n)16 b Fa(:)j(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)43 b Fb(9)150 3280 y Fe(history_is_stifled) 27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)50 b Fb(6)150 3368 y Fe(history_length)16 b Fa(:)g(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)43 b Fb(8)150 3455 y Fe(history_list)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) 48 b Fb(6)150 3543 y Fe(history_max_entries)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)47 b Fb(9)150 3630 y Fe (history_no_expand_chars)10 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(9)150 3718 y Fe(history_quotes_inhibit_expans)q(ion)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(9)150 3805 y Fe(history_search)16 b Fa(:)g(:)d(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)43 b Fb(7)150 3892 y Fe (history_search_delimiter_char)q(s)10 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(9)150 3980 y Fe(history_search_pos)27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)50 b Fb(7)2025 638 y Fe(history_search_prefix)15 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 b Fb(7)2025 725 y Fe (history_set_history_state)27 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)49 b Fb(5)2025 813 y Fe(history_set_pos)13 b Fa(:)k(:)c(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)41 b Fb(6)2025 900 y Fe(history_subst_char)27 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)50 b Fb(9)2025 987 y Fe(history_tokenize)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)38 b Fb(8)2025 1074 y Fe(history_total_bytes)24 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)47 b Fb(6)2025 1162 y Fe(history_truncate_file)15 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 b Fb(8)2025 1249 y Fe(history_word_delimiters)10 b Fa(:)18 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)37 b Fb(9)2025 1336 y Fe(history_write_timestamps)8 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)35 b Fb(9)2025 1588 y Fp(N)2025 1704 y Fe(next_history)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)48 b Fb(7)2025 1956 y Fp(P)2025 2072 y Fe(previous_history)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)38 b Fb(6)2025 2324 y Fp(R)2025 2440 y Fe(read_history)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)48 b Fb(7)2025 2527 y Fe(read_history_range)27 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)50 b Fb(7)2025 2614 y Fe(remove_history)16 b Fa(:)g(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)43 b Fb(5)2025 2702 y Fe(replace_history_entry)15 b Fa(:)j(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 b Fb(5)2025 2953 y Fp(S)2025 3069 y Fe(stifle_history)16 b Fa(:)g(:)d(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)43 b Fb(6)2025 3321 y Fp(U)2025 3437 y Fe(unstifle_history)11 b Fa(:)16 b(:)d(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)38 b Fb(6)2025 3525 y Fe(using_history)21 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(5)2025 3776 y Fp(W)2025 3893 y Fe(where_history)21 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(6)2025 3980 y Fe(write_history)21 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fb(7)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF readline-6.3/doc/rluserman.ps0000664000043600000240000151073012276516305015107 0ustar chetstaff%!PS-Adobe-2.0 %%Creator: dvips(k) 5.991 Copyright 2011 Radical Eye Software %%Title: rluserman.dvi %%CreationDate: Tue Feb 11 16:57:26 2014 %%Pages: 32 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 %%+ CMSLTT10 CMTI10 CMSL10 CMTT9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o rluserman.ps rluserman.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2014.02.11:1657 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}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{A A 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/IEn 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 IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/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 A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 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 A 1 get A mul exch 0 get A 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/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/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 %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /UniqueID 5000800 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 67 /C put dup 68 /D put dup 69 /E put dup 72 /H put dup 74 /J put dup 76 /L put dup 77 /M put dup 92 /backslash put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD 50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F36932A8A2DB BAD87DCC271657EDF942834AD01C0C35437042331634D36C594CCBD796BB1562 C5AEFD595E35264ABB2ABFEC7A2E066A7A454659804F6CD9DC64DE1112D95B55 72AE34B6153425A5D15D9F944A3DB6D580C2A01E308E2CDB032F99617A73866D F2F2FB6E8617873AC82D4E2224049BC2FEBFE49527DAD70C079B92F08DC30095 AE63E3E2FA213D52A347347371724EF08B39D7383D27131F75C2211F82C35CDF B78708DE910A5ABCA3075D985AB2E2EAEC2BB6159094F0C0C775C25AFF4F507B 20070C4FB570D5CBCF40C7DE889378A9EE7E38175ABC3D5B047D1DD925990A04 76EE4083F3CAEB8F1FF3D8FB0210C93738D68EE884FF86416A2EEF2356DB80C8 39749F31D1D3751E91D84246B56D759969A6D52832891375DC26E92B7DC756A1 A02F951C898CF665AB0C2C6D5B455FCA6D20E7F998D2523112A08E8EFE1B5DBE 940EEB362AEE4EF83237348F7F0C08B490D125BD90107A035A8F5330F0F296F3 DF4579D7B4A947CA1EC8975B1F6B7E3B077A75F2F42DE456E0D540CDFDECC95D F5B3FBB43590ED54FD98CBFD3A20C42C5B6B5ED2A5F0D4F06414757F992487C9 83CCE2B4BA91825D14090D1EFC53596F92757BE8DCCB7EFA24C3A3D52DB61312 C04533EE4424F37EE45DC6BDB79519A62454194332562388F3BF0246B40E9108 7B64FC57054131DA8A4699CF65BFBB862D05519755E207BD0C5E4FF56AC2BAEA 5D4FC6443069F6314E124BC02D210B8726D3ADF2EDB35E7CB1F92BB412C2AF7D 547A1E309A63114B38B352702F7E48B931550F79C2487152A5A5CBD19C429BF1 747D88BF1EC932CBC93F006EC34F9197CB9FD486F42A0D5D72AFBF21B9BD131A C89A979FA65013B3CDDA5D164DE3BB762BBB7A4D0DC3ABF3CF906549E2F76C17 DF8BDB44689AA9140ABCF001781B8906C2B020EB95FE36B8978FA04BEC5E4D82 B4A537520BDA62736EA2CD9B1EE4A126D7A76BE51C96AC556AE5BFF978C1598B 6CA42A76139448EA4C8AC849AA3AD204D158854FAC6D7D43BE038F022460A50C 1DC2B6932CC3DBCBC1C27390E29A474712004A5EA3E0A3E62786C2487EFA767F BCDEEAA4875ECA8A9A7C6F2FD1EB9DB79B7489FA8249D33E38599B948CBB7328 430476A7489C004F1411BA1D5FCD64D478424920EF72530F3C4CCA9EE495ECCD 125E4E2BB37BD4D4175950422517021F8EC140BC3B11BAA9E513F3DAB63CD245 27A0A6F69A964E9BFAF575B5E36556A15B2F2FF787DFCC1EE704994A52F2E726 958538808EE9BCC31BD5E126F848FFE5CDA11FD3F0377D9B814F515750374452 D7A4BEE6B14BF4C1A75B2BA8083ED62E61155F1B396D960066D0A35D7CF19A5E C7856AEA2C505E68C8A0736CC1675F740A662AA8BFFFFE507465E7ECF934DB6F 75004934154AA82EA699EABE6318E7E5B51DE3387AEBF11E41A413D986947FD8 23ACB99110C93391DA8FD87341F337F1FBDAFD306B4B08FC69EFF21A6F581420 893E94073A20778ACCDB074613F7FD68999BCA1F03A0E298CCE83D3D8C25E1DD 8C25F57C440C5580C87C67C8F391C900F6615ECBA0AA505333A0E00F229F03B8 69EF147556CCBD10694CB23EEA74CCEE50CA5E8F3DCC8225B950B51C7F0AA44B C1200E688A8A7CCB8CD763390992ECCE85F4855DA86ECFD21F57F12CEC09A5A0 0A50B388C378EEB1C4BBC2BC19ADE95C3CE8A6CD901EEAA8DC6F62BD33A18368 1B0C445FF57CAA3F690D872D42FE746D3AC94DC889F4AA191E824D66E8ADC3ED D7F7507F1DFD560D3D339C528714AEC12609448660243A1C24C8A31FEAA55E96 5512E63BFF9CB87AA8805D066E71C70DC175FA3449879A44A1A6343561CBBF33 B6465433C3C99BD06F2FB6A0CB4AE950A3F2F428AA2E5E344439E77B623E959C 27CBD22A9B092B2604EE92524DF014DAD590A4F474484C2BA41343306A620019 15B96AF752C312187FF3C1555B5142354F2E947391A96E64DFEEA65D99FCD2B6 3BC07AB8D7709033C83DE8C9E18BF1490BCCF65D3E1CCD62FC09F7DCBD0A31EF 70F21BC631CF5F4C112B64B4CA88662103C4343B55FDA36B0F78B6BE583E3134 464FA2B9C8A2C5BA01338C0A0AEA7DC2CCD0D0E7A02C835C1072830582825BCC E7F31BD6C7A20413F5D21C054CD6389DE00C846AE1B558EAFF7E85D07C73C4D9 CD9A1F33E0328C3B9340DC87FE981D655905D4E2341966C80787F35EAB88792A B2F35D91BDAE613DECD5DA192ED10FF454B0A754A14A565DCF8AC760007A333E 413B53F179AFB886747C2460AADF6FD1DC09012A2ADFFA6FE5228177535E91DE 71F9C9D82F84CA13A2F55E9EA931B1E89213EE9817DBB433A7EF0316E0624C1D 45965146A28962980436F050A1E7EB35D18BB8BF8B82F97D64C827F68374CFC0 E4DB0FFF944DDC0279F2E02108815F40E04EFC82368D19B89F357138F65EF9CA 878AC45EF423580843F481F1394D5DEE995E0DDB18E2B5E2D04A463672BFFE79 BB6D9957D3C2BA22DB79CD75DF28B99E6473FC222C6722B9C877D097BFB29C6D E5444CFD34880261E7008A372F128BE5CEE9D057486C1AD98E7AE24292D12231 CCFE1B54DB8623BF68DBECAEC105E446891BF4473765DCCA7EFDA9FE6DF8E6D4 90C70A79B1AF7AFE9AC5CBA07D0B839AAC2EA62842FEC9117959B10530C8A76E 85F59E6BF476A0660025900EFD8D714A018AB06240808CFFE5A3766818603531 AF3FA35AD28CA2C9BA31A2F42FB80BC1ECE71EFE2CD184B4FDC5F76AC2F549FF 33AC81C11411C47D4857E5E6DB9204AEA0F7545ADAEA22BE42CC3BA7EA3F8B90 C5FEC359641487D93C52D78CE25535A2A686DD4764C072FA8A56B982A3A7787A F124475DD5C2754430C7EC3527D81C272FB7AFEDC6F79E1988AF9401F2B989A8 CFE1BD96B21D817BBC93BF77B99C8E008E7CC2E34F0AAF20AE88FFC0BC6C3721 485DD1F25103245E854AB2B60226693E0AFA3EAE85CA52BD938BF31ABFEBEC6F 4079449F99B5EF0A46E77B6254D4FAAE33FF8B2AA3469F0F0DD625BC4FFD004E E6C301A8052043E22ED0FA663364CC9200ACE4CDADCFBD28B721FB43EA7A3B6B F6112C35C224543482A7564D62A4A8F15FE329BBF3934DF9345320561E88CBDA 1C0BF61D400C1539818D2BE38165B6439EA9B45CD0A686C7CF1310604309DE5B 22987BC91A8E913F6EBAF74C65E8A546D876E46A50BB9A3420D5BE001E0CB34A A143776196BF8167006A1052A54001134D539870CECFFD45B6E37D5EF5A9878D 2A2BB28710DD767C746767498AB23FBDD80706727CF0F556DF7A47A90DE30E5C A81522D5EC8C478BB58ACD1D1F0139D4C3561DB574AA8B1FBF0AB0A001FF78E3 2A646659407760996E97CE00295CDA398DC0E8374B6A13C3EB2BE4226F01E76B A932DDAFD90D0FB739B9EDFB9A2472D6424A45D1A698D70766469EBFD9957CF1 511F6BC41FB43B9517AADD5DF7997A4A8A8F3A5103BF6730B81845F20D160DC0 E5AD923D9E24AA7DC293E45FBF7422B952A91A97139B15235D29CC52C5084F01 DE89D2F11E7283A60E4688B54191DDC1159998D10215FE53FD89C87CE9D19041 1F1E73F063436E786959943B496172A1C497DC002E00B29A4F752CA28BAC5434 A98F9438064838B0D6252A05052EC8871CEF9FEF05A07B1E401E49324D463E41 6B7DEBD3B405C9DC5953B93E48162D93438237F11ABE83189F9C1FE70E1A56A4 CF539F7E9BA6B2B35BEB1586F59897F6E64340B88CA079DFDD1E987198604D2C 3EB5C8178AAEB19B8D2840F0EF36CCEC7D25080CD1E0BD2B3317603E86FFDC4B A453AE086CE8AFB093D57733AA40977E9C8D33E3C87DE2D4C0522C40AF2C01C5 2A7B86C2571F9B67AD85B35EC83224029832D2ADCE65E37748CE08A600641E03 6BFCF2F024ECDB4AC2C4AFC4987D01C8F8E74715567F7116597A4318331A35E0 7BB15E134CD721CBF49210AC06D161E7FE9146D43CB1181F464C7D3BB0BB40EA D19E1C33D6D9924AB13EE6C31428D6CDD9AEEBAE6510CDA14F23159CCD725A3E 1F97ED8DCB17A10783B8CDC9315FC86703FAB6A70DF55E0AB8B4C24862CDCF11 5F10FAA5E4E54660EA5EA05EAE168E36CA5255DAA0ADF9461176EDC9E3989A84 0D8D7EAA08F4C766E1A078C3B7D091B9E22A9247A655CE4190A0217ECAF88495 5DE38DD317E459AC61336D6E403CF8DD2ADD2946F933E1A72C18DFA96EF7C0E4 0A2D84D3414F3DB23EE3BB5049B174431F4EEA10415D25E41C2094CC2D37C669 2C46EA4568BB0BC49D1806B98607B8C12AB897E6AF402C6126D4484EB7D9CF81 B603EECFD92EE41FEBA5F38A93DD24A239BA253BE3776F2368E1664142FF2A53 5B40B694B20818A2A43226871AF1F7A5A68113CC55AABEAFEEE21E0F4E7641FE BB5403E96064650AE2703E43DF01A1594C8FE8646A44323D78E7A5A7CE2C2FAE F98F7D9A2CF888DD195FAEBFD1BBB05CE078C6003F9438205F8A3C2977C1827B 906386BD4B483966FD903432A3A9A54AB0C4E7826CBB97C6808B5B529D5E24CE 8C76A35EB073FD65944F54D1733FF75FD7F78F524F81CE0D92328FC171AC3DBF DB81784F11106137B72B473AB91F40F73B0B410547F5CF6613EEFDBF0F05092C 3688C3C208E1C9FBF51B505FA0B5F906C5B0A05277772FF9EC806702F0E346BE 83A535578789733FA68FAD54992C16F3F5F1B7560A729226FDADE4FB96AC09A6 4C5D79CB60D85AACBCC89C04068803B47CF0FAB92F4267438A2E7CF7CD5C1796 B07071D9F5A6DB95514B1B60EFE74DD9A028CBCBE850052EC2EFF81C411348E3 F1ABDF1A4CBBFD7EBECC48F89B18E159DC1CFA0606C3BECE071E4C1759BE2716 0705460FA9E022BDA1CFB2324C8B51B4E297838F07A5FE8E05FD99600F9E79D5 490C251772EA34DA6649D421A872CF78A9B55BC0FA47E056A6CA9491ED65E181 58E2A5EDC038C9BD89B3E975837FDBE2A9AD81F700BD263C25C85873E08DBCE9 7CC2FBD904038CE72A110493B7ACCA882FD48F54B4E0109B095838F30D80917E 5C81948F74E7F0D41652480CAB3B24E90570BF861EE2E3A5E1735636C7849C1D 60FDFAB5386526F7312481A5146C18321F425EC74ED0D778926854C5CA875A57 9205076C19AB866F5FD0439154484DA165A7CB69746199399E66E662EC2AAF66 501B6706BA1ACA001546B753B0785AC885A5F13BFB4F76F05AEADA1D290708A8 22A24FFEEAAAF3C70F89CB52EB655774832296C1FB440B4DC4957C7C32588435 4FA6775C4BB9070641EB6CB74857A346B38E0F441D61D27489CB0230A23AB63B 052C8453C969BA44B2B6E700D6286084AFD49A79DA416803200F715CFD9B42A8 D53BC397262BB8F94C7D0A2D83E1249563098645D0E82959B76E1B05BEB19430 4080218E58354FAE323F4CB4A3E20B21FF9FB791391956336DF8A6FB49A2DD6F A1F06C8C02464E67CDCB9013A4F8229E5A4F136A11AA204001D16C213691EBA2 2789C03C9122FF21B891569D4D26C2487401AF4C9B310CADE991ADA6D091248F 30D40520D46944AFEEE4B71D005191AD057AAF2BDCC166F084F29EBF3868C433 5552509FC469A57DE66010A0538D2CEB7692D1A54B5139D2FC7FCE96C4E1A82F 578703BE28B82622297BB08F76DB9D8E2A7C4B38C7A819372F72900506CBAD7A 4B0014B7A9DA2E9AE84B24A83E0BD86D3BD8E0F37F9F0E56D6102C0CAA768E4E 9BFCDB116780773E04554E67AFA899C9B8AE526257FBD25125EB7644E1AB35FA E9D6D716877D2A5E17130740CEFF27133D6A38BD2B2BB7BD17E04C21802EF184 0AD5C85EDFF4234DE6B89B40F7489B4CD79F54B9B8683E611E372768C55FD93E 3BFDDBA88B1B60240AC09A05960F9134700A97DE7E6031F5644F83B5A10264D9 6118C440225E4864A2AFC406BE4A8AF3F6AF8F3B48AF8EEAB503BF7A66C840F9 825D9D44DEDCD92A11EA70FE597AD39C0CA0F1C6AFD5750D6BCA09D230024DAF 09F807B23F356891C031E0DAB363DADC371166D728755CA4C375A846C46E7B37 695A8C66F99132593D066D0757C3E92F64AFF193D211B41405A3E528172C2592 30A0E1E147E95C002F2BE67E1FAC9C062FBF5182A0726E21CB87BC80E15FA68D 9E8FEB1888C4717BAA97A135EC4B5234135A64DE68833D1FB55EA7A327C5A9A9 78312C6B32D66B57A4834D6004D83FDDAB7905D94E0AD3DFAB8A4D5D081F2FD1 4CEDB8C3D8A344C3596A6E033DB4CC4A2BCA9A86D8858830DD5006D7C7D91F53 560F76B6B4BAAF3DCEC3704E922E3F32C3A450BCCC92E359265201F07B99BD2C 24377943614ED7A97E19D988476569CD51B0E85672F4AE6D6D46382A73DA624C 5188F727DACE6E5BC2F33411206A566B6F830EBE79CC97F295A269141FA8E565 496EBED5EBDA3E6C7DD9ACDC9AA9864C7F26227F68DAD420BF8AFA428D66F3ED 3919E517437B7BE7C9550B250E90F7E004B3C3D30D9872B84376C84B913D0032 9B2280354630E263E101EB02C92FD77A76BAA8CB1C5B5C555C81F6ED6A31B3EC 356BDF27A16C319DE965D8BE1D654A6E1980C8FC535B72BD951FBED2C6A9FC82 FA152728191760F9C54E52D900675AE8A88F7867E0A5E5465FC2ABB868B3D227 8A0DABCA6264CE647623418DC7850FCA18C34AE8532AF543E46B585E20BD1E9A E210B1DB301C81537F068B42BDB1B93FB4618B618B34E7D42251DFDF3491472B 62EE41B9F4C2F1EE43C29AD841A1264285FA4DDFDC07323A24F00EC12627CDCE 2DB8592A29424150DC72611D88D29267B1F98F386053BD9188CC91FD52876731 1DE8DF9085F0F49CA5B14089B55E2E9386D59DFA0116C800A5204F6BC0032F6B BF15CC4A142729DC002844F5A418C164C1AF0F69353121E4E680199C752AFFF7 C961E4AD7F5E48212297A346A6FD1E7CA0B7A51670631878D69A60639FB9A150 30446595791BB1F97919D034BFC08998AE74431E65800A11648D8E5ED18C95C6 F3F033B3F3E4F7077216D316CA981B5B4EF0C33A7DDB14BF11F496D754D93C6A BACDE5D2B6EC1126A0531B61B38E73F377CFED681C9DD5A804BC1B7FD78F6ABD 1EDAD16A0D3E4BCE8A12291230D94AC0E0CB7D258E46B5D1CEC91B0CE18B1412 56AF3A04F80C1655C6DB8A9105D611819D4BB6B920F975D0A19104D8239448E6 B8F4804F6088435C6C2750932C56753D14C5921DC9D871AE804AAE6D2AE9A3E7 192DAA0D6F9E1E7C22BD2A0E80216723E09213905F4F291D2540F24798CCE9A6 B6E9E7866CF589DC2CAE23A7945B52E862975F0578F7D8866DA6DF2ABAB1AB11 12FB5B9AE7C3DF18F726BC7B51C57BF184D42944FCCB796ABE1869AC8F5BDA42 0EBCA3366E46D6A9030B2EFA1767BD295731CD1DB7FFA74288CD586CE553CA71 C69BF555CE828D291172D22DF6B1FF97833BCF7BF569CD79C67A65B8D32AE176 0F8EF4CDFC09F35100D23ABFD911931C51F71EB0D37157CB9C9984A6F107C365 48AFAD53E3B33EDF970F19D59CD6D5C1D7962CEA24F4AE9C45425589124A7578 D40D09FB8BE3B386682B9919756D4EF4AFC2450C6A298450DE1A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /UniqueID 5000831 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 49 /one put dup 51 /three put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 70 /F put dup 71 /G put dup 73 /I put dup 76 /L put dup 78 /N put dup 80 /P put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B60BF4D8B3AFD0A002B3A6E4FA114131410D5658999B86DFDD3005F3 AED1FA8F077AD1F27EA249221585703F20FB70E37A26C6C3F2E101693C94612B 65BF89F37AA3C10A40EE8E49915F1A1B95D2193D8003DECEF9D76FDAA33B1AA9 CEDCB21C2A3B05747FB3ABDBD904B66EEC60CED2867442F5FE445587EB8C6D14 87A6B1B4871A8371A7ECA6A159EAB295B167CC35ADEB8512FD0C237421773BE8 A081FB687F9C5D676F2944DE6E6B639C37E8E49BD4A6F0903E0C31EAFC4C7ED2 C3C67E71D8BE2B8D5784E8A6F19A9A8929DF9833440E160945274682F435DFAC 575048CC768BB8F13AA21C6B125E6073611BE138AE06D13E62E7EDE3D0239474 E040B3E446165FFE60E20B75D2A5F9EE021B22256621C290A8F3342F0347B8EC CFA6AD68D47C05268EE3AC8683F4840D736EAB585C6284018DC94FC103B4A882 ADAEFB625EA966F3877B3FFEA518B809A4BD184FE4923BFE783B4131410D018B E0FF5CB22D92CB1D1C8854DAE543594DBCACC60041E0B906FE5E692CFA6D2B4F 31CF357A50CB1CBDC0BAE6C841A8C0A605330138715CAFE6EC005E8174AB7D9C 9A9AE616B75DC1CC62B7F9EE69DB9ED2351442BD48E8D0A467E28525BEB6961B CF586AE20AAAA47D9B93AE7B0A4B992B61360AE1A51EA3FC550B5EA3720DCD75 DD8D07C26180748FE67B2CB3BEB2EFB690657B726CB850C964A773F0EDE2C0D9 9D7DBED1E5E1E18F68B114C42EB6D734DABD111596AB68D8DEC5246926DB5E4E D7D701358D7972B2995C7900DFAD6F78AA604C326024C0E35EA5F2E99B2540CF D72644DBB5EFA49C1D91FCD8AA69EF3AC33385AF45F42D1B8DBCF688A431DFC3 EF8EF75EED3CA8EC03195F410A062E0400499BCF9017D11C9A4E00AECF98D318 994CBB28D7FBD01C3AE3EEDBEAAAAF122BCA7A10544804177CC0760AD483D5F1 4DA0ABD57795A29AE0BAFF8ACE042ED8D5C95DBD358C2529B33856B0E442DF62 F86CAAB5A854D6B1E30E7E671B9B57B0DD28793445FBC64EF5469CD7A3322311 E24AF1836C6981566C2B8C83D91079DFA5D02A974D3B83DFE932C0D0C8EEBB40 CFBA6E52A7A2A313CFA0DB34093C1B6E6D740548B9FA9E8A1A4D0956A3D44931 882578D2BCBC7FA215D51AFD9209524EB158E4E3FD4DCE581E3871AE2D4FAEF1 6F25B0BA20F1FBD0943FEA005DFEBBDB1CED7F22C8C8A7FBCEA1642AFDE9AB00 28624D29374A5CA5BD0060BD399B8750B55455FC22A0D8C5EA953A3CC77DD3A3 472B6E9EEF8C58E28E19DFDFD99ED3FFDBBF3F164196BDAF0BD36479D927F876 E2C9F0B20CFC925FFF969EEE5C116ED17F17E2682C997C29325D94E6B28799BC 877868ED48D7B1D23107A5BFB734DE47CB46EB46B636317431E1BAA8F6DC1817 28CCF87463C739E8E68C40288B69A9E790EB8229DE60BD665964AA130E564EDD CAFDD7DE4DFA4B553B695CB12CECEE7617CCEA9C7F5BD466DD88C177D116B243 B4FB4DD3D2A809A379413566E118EFF3254260E73A55C03FC56A9ACCEC19493A 6E8815D0B40B2A48E7DBC6DCC5E181F86BF252A4F312FB1EE7833D001520255B 64B2889C78B19822D3A20363DEE900F0BA53D9CE738F25709C81F90891D4C279 C5394DD55982721167BFA1C69C55852F92CD6BDDEFD9DCA73DC39791A85908B7 CC7E5136823E6F4608529995F72C0A7D50874B93B0FC6D6A773A571E5AA0FF10 C92F4F5E2931177CFC8B8E39AEBE9A5ECF7D6D3DA706E5924B84B8FA2FB56A55 1130E7001543079C533248B118CD4543EC1BDEDB2BDEF437CCCB539676CDFF28 9C05CAF4B8A1ED5720768705EE47AF1162E5B979153CCC82A8A9AD1393505BDA 26FB54D3FDE40B8D2AB3F2DE79A0B483F7AFFB6022B81328727F66B4801BAAC5 2EC53EAEBC6D8552AC3EF2E16F2977B8F80E8F2F682674C09CBC26C80D849237 9D01AEAA507F5481FDFF95DA933BB57CFB64C016DDE71BE1557C659D09A9710F A073A68EA7B6BE1F70F3C8E7308B276065284DF6584107A76823B9B0778528C8 ECD793F36CA5C1C405DF3A9F254C4E959337490840EC48DC14D2AD399111FEF4 D2A870BE8203798A17D97E39BC7D3A0C9F21D609D6B5FCA9001428DC67C9066A BED5FB94E6F9EFD725B23AA3CCC97EAF1033C9B48E8682BEF2CEAC57F21C7658 81A3B8028E6005AC2C13E0C807D92FD343F074F5C543F4B53D2B14FD50B45A30 86C9775D4AAF93C2E2FE76467BBC2E3A6A95AFBFAAA36D8A9AEFF25C3BDD51DD D4B4E2B7C6FEA1F4C1A367D12531326160D859E83F458CD782294CDF38E3794E 510F1C1704848465FC209C7E26472EA60F8001E945620857F4885CE61F78F66A 4190871A4136695B576E39D87E5302EB61600EC42B2218CEF1F649F29383FD6E 341F3A27793909A05FCC5A87AD7742BB41ED886460F0832E6BB8D443318AFED0 528ADA31AE91D2D0889A755FBEB9C33AFACB902E3919605A9A8F9FC44C3F528E 8BFD4F509761F1F513FE45863A1EBDD514E210C108DD567C06D446728217176A 800B542834A5ED0874D4D5556898DFBA679C8AAB914F840C0C9ADEE375269981 92DDF4B3F3E6226A6657B69604C6536785169F7301CF3C4BBF602C847E01D7B3 C3824CA683D80C2B06BC68942C8CA4DB60D80043F07DC63E6B31B6A87B3674F0 FC529D63C6CA00F3B4F2386DA7AE63BD2AA93523E3D70313687D297FCCE6270E 3B5513CACCF8AC2045944C559F001791F06A2AEB21869BBEFFD79EA7BA743A70 7917186B0E2E20CEDB0A583BADBACC2F4B3DB64A8A3F927D2000B81046D577CE 43BB0DC4AD99E609EFD5F55DE8B5A41FD92F34FC96816E948168EE17CAC0D120 13CC349F8B1225F396CFC62E3502A43F7ED355E901CA9E60687A8D5B597EB356 7E1FE367860AFD2EE7B722F22473C968C6E91E7E8A4DE41DA2DD35D51E7DEA3E D9117DE9E874092248493F0FEA331AE639578A9322B1D3E6A9E866BAE054F555 3DA676E2B24D1D4C8832355C6AB10F776F24412B106B03085AAEF2F5FDCBFC7D DBC4CC9F95E945A4E690AA2E8E16ADDD52CE957E883F09D141C560FF4A53ABBB 45B07823B592960D914C54E09E44904BB28DFF1B805A1F72BDFC5D4A8BB5BBCD EC19366A8E3E08C100E8ADC25118F79BCC38E0D56E2870BA307EDDAC7EE3590C 39C825E8958787A9F4370176A09984491EA71285ECE7AA6D60DB5ECED84E6A9B 242B0472EE67542C4CBC98AB661DABC0BEE7B548EF06C347F287598B249615E9 86081DE85D56453F3FAC216CD3F3E436735A593F4C8F3E28D5914DDF9DB7EADA 516FF8FB621DD043CD00624FCCAC51EE263B86F46A9162B18FA26E1DCAFFE7DC 974554DF975D02C2948EF4814A5345DCA12047176CBB7B68244528B6A3EF1CC7 ECE0B8D472DCF741C82801D2BE5877EC14652819A739C6C8E7653B2671E83276 75FB5C4D67331989BF8F0E699C0B8FCE9EED69F7ECF5B2127C4EBAA283D7B011 7F30CF0CFED36D7A81856B746E7B08108C9C9AB484E2760D9678B82C956EEE36 463826DF521155993F33DD1AC5F76B1CBB689999631298D2217B022744312A90 2541727F580A4902637EE49DBC39ABD68BBB15BDEA8F8713F0B309B9EBB363AE A20BB2AAC22039C90BDC4FF6459814D11ED09CDC7992237B69315F56F9021FE2 3BD0EE582D1FB0623A17775292868230D4D36CA7741D10B6C4A7890276C825D8 7F4F04EA3144B8004821F5078C83ADBD3BC7588D856421AD4561AF9DBC18ADF7 8F9CA070E79C15790E718ADCE4796C2CF3C777B2692A28F0F208FC2DB5F3F2BA 1C3F731F596FA303E9DB14CB2D5281AF7A574831257A4B4D3E78D964BFDDB79D 58497074BE55D6397C986981686771459B619C0FE8E2AE1066DFFDDE92F95251 EB30125E767F8C4B673B8D733BD22ACFDFA7B2AEEB52D2F6C4C3579FAB300B20 55FB500454327D13AF2DFCAC2A170678730D302168B433E462227D5200CC3473 8165558FBC94E9041B2D5F44B4373A60737C63F2D1E126272B8CFE386BF8CF12 511686330C6B61E5AED76AC3A475B8046736F5DF0D92C8F48A0A73FBB788463C A50B2266E2AF8E6A88E0385A485752229990FFCC06F517BE2A507A6BD7FA30A4 2CDD60E5680B321662125EAA1A5C7C62A251C762EE0A028A8E8CA439F788D2A6 54E47C631B9C1E86E47AC755BE98E7E3BF1B200E10758AE9A8D98935E2941A4F FFDFB8F5CF4472A296D6843299EA45776AB68295630A18AE7D28729C3DF2B6AA DCFA02D731A1BF2BB4715D0A9F86C45E6260E4D6213EB4A95628ED04D57935FF C24806343324305E4D81AED1E5AEEBB42CF2540FF8C96769F04FEE0864A7F085 DB143D8224A796C6D983B342A95125662E65F969D1546BC8D907B002E46CE298 900978B43AC371B432EF75E20302B1482B0BE4A1D5F933957F694ECFA8F5E776 278E430635B727DBF26863E1DD9D36013F2A53F79884B99D4F81AC2CDD3D25B5 92E870D36B2C8DA33341D19F1357D583C093A65C8B49561EFC71C37E25A74D7B C0112D1B4AE64F0B0B73405B416683AE878443FA527EEA2EF14A0234D36FF51B ACC4BE38DF8A92B6272B23E344FF4AF04CD3869988EDFDB3058C3E90E7A9659F 311DE9F880061347C3FF6D326F18C9B67121013499C63E343CC0CB02EF6AE9FF FF9F2E46D176B884917823AA077C399E7D7C7780777F02315FC5C0CEFEC3E0C0 DB1B562F6C1F61939D57267DBB35F449A69BDC6D93793CB7CE9ADB178BA79518 A43D081F81DDE88BD16F2958EB56FA45516131655B273C8CE060BBA62CC59D6B 93DD62347C2C68670073843422C24E25E891A4D5322CA595B9D9E45A4D958384 48636974E6AEFA2A58D8F70953D7805D10AA76A13C75AC5535467DE9F943C582 98545E8653E95751A2E605192A3EA7576DDC2B3EEE28037914AA83ABE4E8296E F0B84055E5413D56EE98A7337D4DD923D49C6BA4FFA8B6DBAC52E1C2B40F68CF 9AB0FED29250B1B41E9F67656E098020658418BE1B7BBB8029973BEDF017544F 713CAAA3211CE1E348BC5A56C12C516DF69EDAC03D886F0ABB2212913048FB99 FB9B1E6802D75A38003C7785EF1A1377972B7DAC156A1B41DE4D6E811290727A 9E2960C690A4BB5FFB8F0E264908175DA0751FFBB4D51E96DD1190ECDF2BC005 F6F5B75CDAB236DED30E4F71F42F15C413D07B53672BB60795604BF2CAC6EEF3 A5DD8F45023F33A77ECCFEC5402D5BE46E4F8F0CE4EC0F32F86B283A43C25235 EE90E1C05B47BE5F33F1FFF0B69456110B9A8BBC03D3FDC8454D661E711B7B92 338C0CBDDF9E9832E687AE4456DCDF304A482A72B86EF41F8447D401315B27D6 3995B7F4280F2ACC8F7031BB26D3240A1407DC0CCFDF0651AAC6F9721B8A9398 21BA080FA31CCD478972838819A4A1588D230C76C14B86EE189A124C315AA914 25649216EC8C3F1EC35457264B5C394573C71A3203663ECC797AF3AA36B4C24D D6BA6B0EB5F531B8A25AD01BD94EC56BA1C926D753C7B391DBC3DBEE2C2E8C09 15348A7E8ABB1B14AFD7A5AA07C65204ADA6A6CF391E38485BCDF8C905CFDD1F 181313BE7025266AE9422E6BDAB3B93936B7C93EB07DBE70F2DB2B7F7958D7E7 283E2A530B5BD7A41CDFF4A8C057D1DBFADBA85E9CE45A8947618AAE1CB3042F 9957928296A4BA11CC2EDFB8485CE6D255B00B2F15BCE80D4E88188959722957 5EEFD638B94E1BC01662E00DE2882C87AB937D47C81242F1C64AB7DB6C334F5F F5B73BB8A489629A36D58DBB7999ED2E0C6438272E4DB2CECCC1E64A49472FD0 AE3AE0AAD5DE8E961D14D070964E2B11E18D9EE65D657E1959738BE1A0890202 2F447A746243F878CD6FDCFC1C1F688AE4C532F2384BA60EE7243C8FAFEB483B F7042EA915A31940BE017AFC5842C951204574C0760A2010A197A7A8D1235CEA C7AEE034424412EA4A84B909A275C5BEA94F0E4D63F7E10FDAE75F8CDF7F835E F0D99AA64B6A9AAFB358ED698B10E275E1C734BC0B2804A19BD70782CA469865 281B93F0C09BF0462B817443F3425DF2F006DD7BB238CC4A94619D41F71DE01E AC9B92D6D6CA965A9224A1114C9BA2BECA3F8C26AA02DCA5A0C636DF64310E60 60BA72FE671E07136DD843743ECA7F915211B6F2D6411FDECE80DB5775DBA596 BE97576B965191E407B394AF393D858847A0854EF280953D70A727707F9A46C9 1B8A51FC1A19589750FC47058AEFF8AD1EB827CA0F3C78C859290D851D57848F E23A1703B33E474B48CAA4DCA698CC878136903D82624ED218A737F6C7D4591F C04044287D4977D8C9C50FF760AF82E80F3E6E3CAD0F034C00EEE8791F7C8E17 000FB21D8F0222103D8F7BE5FD1996F8AAE791679A62F992246AC211D139ACEB 1DEAE8EA556EB93BC2123C0B9819671EB214546344B935C99B9F3AD1B61914F5 AD96D7D63772F933D785CA563AEF0CB3F71289E5AF02B18ACB028496BF8C82A5 18DBA1A715DBDD10C9A0FCC32C5456BEDB824C59B1F9DC1528B82C235F45DB96 0271BA11D75B66DF50FF54B234B4FD9768FA146E489E257D9F5C62578B3A0D61 A468AFA9EA6F16C25D5FA4DC5D5F2A4AAC8669CA059BD9363EF6467E1EC13AF5 747BB3D6B6EC468CBFD294409145E61F5AE298785D9F7DFF54498251C5E3B87D 387ED09003333963CBEB24659ACFD273273D5655A9A01307CCA16E1FBE241192 F6E31AC8D490E31C9D0CC49AD6067C60D1CC7A2F0FEF5B2B7AAFFBECDFBB5B27 08E35A37C41A85F330ECB2C88B94CA5A9E4E047B7C700C32EDFA055335C04F40 E345BDFD69377877897B25021DE05CFA7ACE7F89389922CA0386DE41E5F97580 9FF6AD204597C7FA731DD1AC4FCAB912EEC7029FD2C829987AFE21D24F742D77 F6F689EB2576E386B632F6C3155068C53C2940F731EB37C7905CFB16594428BE 7B327CC0796E3B3FD6F7719B836A314DD685428419DC74E534E480D17A495921 5C0DEF9A7AB28CBC1C7EC5642C693E4285EBCCA41E713E1B9FF3F597948E405F F7FA11F6A8E43FD5ECEC0CE1B07959A325B49C00483656713A0DF26165CE0BD9 144079AAC23D7B2E24F73839C01B971542915D70737BB184846EB670EA3BD6AA F63B5DE5A709199EAE53CA83D8A248A80CA9FA65F03D0AF0D17CD290A62B8429 6FBB59FBD51F3280BDCE40E021D9F0552F8601F4837325B87EB8BFFE373251E3 D76880A6CB90A6920276343452E0854A7ECC84D743C59E8C4EF59FDEAC252242 90B9C6B666E94CEF8B1A5A05D7940D877EDB1D52B0588C77BFB3149951CC7B41 F2E77A627C62D6099BBFB571D90D98ADC819DA5691E297F776241EB5CBAD1BE7 6A2F5A44F5475A6AFCB4683A3FDA9442B5B9C3B4F47D40100B8ECC366BD49DB1 63AC7485A5B74EA699318C045528C1378CD84D77E0880850F723D341BB904FC0 C4764E52C0A92058B8AA8ED472473692870B09AF6E22DC29991DEB71002EC47A 5D8E90392533F3EB4BAEC3FE5F26CFDDFD28CAADE3519AC92B92BC9CB8639D6A E8296BA76587587344DFB67AE6C55C81710E9DF937FD98EE8D136A1A2A269917 D191B4EDE291A7B3E38AD610CD2C79737F7992F8C932AC0426987D029C7E628B 99B5A35ED77C5943CBEA4591A8A3521BF101BE5195E7D04001E8FB2C9BEDFE8A 16E60F3F30042A6E33DE1508B471776D74A5C66CD7672B0DE4CC002A63A78001 5BDFF52FAD0AB9815F70713442CCBFFAC8255EE0BF295F15860CB0AF53BA966B BE8856AD62DFF9CEF8679E66A156B8262D394AC2FF8732C235F4909A25E0E6D6 F44FD9C8B99E2D1A7EB964BC39E95A0D9A1B03530EF9BE6991CA16FDDC5F04EB BE6A74F1EDDF7E6FCA0C28E813555BE7F133A7A0E7D33FB311A2A211A22CF727 1ECF662DE52E971F6A420460194CBA17C19F8992C7C1A52EA49FA708FD097B3D BB797E6B86359164BAEE0CA06BA124FEEBA40C4ACDB58587CF914CEEB7CBBD2C 747BF8E016AE6DE5BEEB9C9DAA15CDC37F27E5A1EDA91099ACFDC5D7A07F491A 7179D4A2D5B5F045F824F126BB52B8BA1CD8DF1E31C45DA9126CE1BE450B6B3F 7465E896A0EF8E6BE25B6135F5C9EE3D0E8BB30B2B7C594B8306CA078D9512E9 6A35B94D24669491080AE1B9A1568ACD117B4D4A6AB6C0325EAB351655A8AEEE FC9D1C21AC27D92F53A9E41A0CCF29D98E032098F4EA9C3F6653F84C48AF4AB8 F7BE53D9B609668997EB4E3B38ACC423ED28D8832D7DE94F63B369C62795FBC0 3138CC22C0250F5CE92B0F97BC78DAB5F00EFBB57491ED59DDC547FCBDCEB9DF B3D8C0826780A9E0C5DFD394357E6BA6311C4B7E569E9353D872AE90EA4AE7BA 33F62ABF92642F00495CB99D685ED803687B61462B342BDBE629F372EEE7CC48 68012C362E27001FACA2D0CF46FFC80A2E3956F9501D2637AA1DE848A21F5D56 0A7A6965B7CA30CC20FFF711457F9B332103EB1770E3D45B853D8205577E16D4 8E15BAE0901F6EE488206A9827173C21B663CAF46118EEC9C2D86CF9314CC3D7 E9AE5273CC2716FFF1A486299C00AFE7E28697F82102A4FC554867C401F9E96D 669D48EFAE660E6C060E2917CA8F34D52DFD08428109E69BE69C49016263517C 3015CABC10001BF2515E59CB5A0D1430ED0BEFE8E5DF037C816C7BE5E0144B95 89FBA15801A48A7867D9607D694779BB772D10B6FC498929A4A689D218350740 D68A8B8B619F8E427D21F7D0F55FEB9065F3C62A24F076884ADDAE44D7EBCFEF 703C9E342555C8F985C73D05D5733F206A7568A9F3F58A8754C00223A1C5F3F0 72F387704E979796C5B525E07B52B3DA1BA60BBE7869AB5296C70DE428227E2B 8BA35911916054F35B5194CF2F67D2FA90BAD0E08BEA7ACDCF8852F22D77E461 020B6568CCA168EE756DA60BA381881F7BDE913CA63766E9380D4D52371CA9BD 4D88F97EEC9C9FEA8310BE410D0F01459BE8AC4FF81AF70E094EC9EAB7AFCF7A D70D69CC45C1857C6B2872D1B141D68341F36AD9126346230421291F24540713 177E40B77E99A825AEE693906EFF6BD3B37AEA4425F8525353F5B2BE6AAE27FD 800E0A44A75F5EFD9EBCA37878C3AA86BADD21070B825EF79FE864C8FAC2F4B4 CC3255F76A697DF96B49B7477F4ACE3E01C3B308B5047BEC9475FE9D51866376 00F8D88203A31054CA687E9395AB5E2A39F5DA26BC62F95B3E90CF97214E1DD4 3E6442F1E59E154C5F6F65C7F8221FE80EF5C389AB47F70F6B929FB4C8D8F51B 8A64A4E6831B67F27E96AE2B4E030BF39ED862F097DA695EF32D9D4C6B224A20 049A643796FACCDC81504563547E574958F55D4980602FF40D3A1E945ABF3B97 03A3E87F2826092B0632077DA7B44319E18341C0A3D1008B7C877A87252C90BF D18F22185A572F1A72D141F11A4975B4DC2134275B93AB85ECD20205B690A763 D689601CE4F859791C32BD4F42400CDF8A711F9CA54C921021FFABAA4BACF191 0D03B17046E2D6189FFA68152657AE9B54EAF9567A655CDB97DF85BFF36F3316 501203209E372AC415DFFDECD6ABDAE58C4C80A2FEDE0E29D666FF1C3D345E24 B8F0E42DB633E7254DD7EF171911B360B4B8BED9424922C4DC228A11B2E998B1 533B734E5090972DE90739E8BD1429EBAF4A40A8197B46623B193ACD00A1406D E3C887E010C3E71ED3DED4F1E44D5AA2220956849AEADB10AAF9E8B6B05FDC80 8E8247306178B255B90BCE6B21BC8C2951C8AB203B97AB3080387DA3EE38825E 561D3E738C63300CF1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E299575EF2ECAAC7649193843D694E 6CA59318C01132C361A3E43BE637B70B9966664E12EF4707F6B100BC37778D1C F1806B1DE081D2C9B995BF1EE3842EFFBB8416161FE31633A6EDA118E563BDC1 C42F403BE8A009FC756406669E34C6A08668808E0C31A589D0720BE32F3181F9 8039645643E15D25917F38DFFD8BD08A420854DE15AF291ED675A634C151193D 29AA6E04E84A598350AF17E71973854842AFEC3EB1B58E4D4433309BF5ED9D86 32C4BD136C89169D45718A88BABE25072D8E552AA4CA3F840ECB11519B06EB44 13026DD6800CBAA90F3BF0022E66A54BE1059BD5D224B674AD3199379D82D571 ABF7BDD1BFA45A0F0E9ACA0A400BC5FE22DF4A041BCCB93DC23D547CDF0A49CC 6C7DAFF30FE0843CB3324AAA3B92F543A985027FD2715F4182BAB1640F391992 E4DB6C19A96D1D48EE4A4DD94D6443467C61CDFEC9B11E07DBD7F7BC33B34BF3 EB97A7C3D0C4E322ADAF9CB6320A64DF78223011738501A124CAAF7D717983FD 8BABC1AE4CB0FD382E26BE0A83169B6C371950D7E9A94FD82BD20A3E2112F447 F1E4203D9978E6D9B8DF24E670E2D4BD160D5CABF3C460F00B5229B48CAD82CA 9ECAB97B709C0C4FED12CD9B497B4D5E505A22F12589E28B0C3017683A6EEE2F 2928DDF7763CD8F58B531F526EE267EFEDF72DCFC8E547F329A7C6BAE64C2800 AE848C69574115EB02F9CBA61ABF99AE6DEB18BA4DD295682F10B960D8F0DA3B B4D6190603E95B7F8102DE04DBED3AF90DC3CF440F60CF50A8AA982FB965DD80 E0B8F62F1589924262E1B3292F82EAC5A888AB240D40F889F9CE2CBD7F2F2E8C A1E4479DF6E27D00D4347DFBB8B977D8B1ED261C3CE14538C0AF23BF0B4825F0 39B2F2AC125BD84B6B9626300A2C001119893830B3542A09B6986620B6E9200B BBC5CA508A4D0A31B72EAF25651A806F88A2943849C5CC2CEC3C79ABA958B020 6B8ECADB5438E230ACF8939688C11F16242C5D58A55AFBAC2971E09C0F7A2D20 2B26FE7FDEF8203A73EB4E47F9953B6EC5ED9985C6D84CAFB3DAE3C39B1EE33E 8D54A862ABA4FD8C0E9787B5B71E960FBB9C3003F8034CDB16A0D8D0709D18F0 22679AA4339CF26E41992B5B5B33D59D937892983C5B1151AD6EB37B065E8E99 6E9BB66724E0CF4044C77E79B6D697D9F368A76B76C93ED4BE9C4E0B61B26919 976BCD5FA3F527BB093BBB0BB979131EF153F77845B4EB6B7378A17DD297E656 0BAA38BDB532CB389E2C60778B658220CEBF7F77DD6677D8248975B86D52ED2F 1DD38A57ABE4ECCF554EFE937070D7F73B8B51F59449236E33FB1C6BE506F7CA DABDB3E38B70398F5FD377E00C7DBDBCCA9D82180EEA815E0E2231789FF7FB88 67F04D4049A6FC4CD8F12202CE784F633E3161FA9E4CD2F3401BBEA11B43D1E4 A99FEE87D0E97CF4FA509B30F1E0672AD64EBB14C9F19F9E6DD333B78E91E4D7 058517DCD523FE710FF61D766E9B334BDD7EA54C5BDCF6D612B27BF30449DB57 9D45152EE0223988AB6689FF07658436359C2461BEA57F9CC512BDC51EF25493 2C25DBC52DCBC0278D296FB8094DF33E7E3631228639796FAB8E7F3C78D26C89 F15B4D251835074FF6EFB9261E2702167F46BBD87AF1CCE46D69A9E54B3F19D4 CDBF4689E4A980A46CB0F8259DAD1CE5C25567321F929B7F501E86FEBFF155EB CFBCE24CB837F1299635927640256B311272C6EF36DDC649D05DBA7F9F4536A0 B3B9513B8FBC8E3A547542F1DD0C6306693FE71BAD597591FF53046DC982506C D0A8EF82F11B01A588399B10AF852A61A96D0D8B416DD36D776B23192FBD8B67 230D93BE0C1238D5FD5E8A762BD8197B11E1B0AAD547A5C203EFF7027AF9017A D70DEF3A45D5C32BF964200A3D9BDF03B1CDE2A50601E5F8D083AF733C5D9B28 39579CC1D94AD59B64555DEA0DA13E2E771517EB7DB91660365FBD319FB79828 FF9FE5E425F710BC2A5250765A9D4B494028762ADA4FCC849CEB3A4F4CBC3FC7 9298A3450323174ED9835CCDDAAFFBBD380E889A002CB98D1E46747F6EC97E4F CEF493E6729F14AE0F28AAF68F401CDFC05A1D52C92E90E6D61163B99DC7E2FE 663D254BC29F0923C210385FD72FDE4ACEED53562ADC89CF698C61B81F426408 6A4F7E6211243D2894A2490C78DDF108FEF22D595919F8176C9151F9C4EC7FB1 CCFFE2DAED0451C01DCC92B8DA7C897314C6464CB96FE5E9AE8D09FF5356642D 5BEFFB636CDA259DF1056A41B007AF086F3299DDCB4BFE497658EABF868FE2C8 17F3F289BB8EE99476366FD4B5FCA6FF6D2B9DDE027C36C3DEA8D9FB8E1E315C F7AAAF23098FABCBA9ECA1B3B62D97C718E9CC920D6060DB63D12C54F40A8AF9 8414ADA57B34319E1B9DCFE37E37DD2419A93FF824AA210581867974EE20376D 20927C4E0EF852EE9EEAA6C3C33ADEBB54B04F8130C9FFE841BAB8CCFB29DCCC AEDB97A11253347D0A93054103092489A7A0FD2DA57144A996C857A51A8D59DE 97736B5DD55E7D1F3DD15B563C9EB1ECD180E405EBF83F2CE8D8E3BB3CFAD4FC 3B56C5E371D1F24F8B87871AA4DC5D36402F73E935548AC7CE28D7AF7D503969 364DB58C5D8C449D9A1CCE52D60FD42EDDAB0E92E04D4085570FC95378DB0E9D 29177299929C8B877397FCBDA368848AE438EB03B2380B4892FCEC5A6398F275 C8B9430614CADF97BA564CB4FDA21CCC0BC080D9148D461190E7A68007BAE7AC 863F39346F91568267DBB3B5AAD9AF3354222301F3ED3E144067310C29E86A68 680D1F9DABD82E2D6FAD321A778F6A7F4B4848EE947AD1BF122365095AF25FEA 3B3574B9CCEA66FF03751A4D75176773043BDA6569691729EA8B552FEB498FBF CFE32B8B3C37F71B0695A4B1578DD1B8E0D0CBFB6A2CF5BF3D35B63BFA956368 39F112348E15E0B1DEA4BA6FE0AE44F6A92B0917F673673592085CC2AC0208DE 2D2CA8E867D68BA9DEDDAAB83FC929D38927F5E5E65F97A160DD4D9A3DB6E76F 6AD8C92454E46405AA43F782C9C7F3EAAB984F2D26C47C3794586065392A043F C8F670C06322769837C380DD81277AD8FB61E2F17D2E6D044EF64802A82227ED 8947FB5A9D39C3C7BF66900819EDC802B10A867130FF9ACC42B885DDD5652727 A4F54338B7D8CCD04DE347E31DD5EB6BDBBFACD0F605EFC0825D6E4560174995 5A3AC5F7C57BCAFB5EDE28FB8FEA0015CCA84A4F421F64B9BAC351E4C9918123 CC9A9C56FAB9C164E12EA420B0B65521D001040257AD908B17527740A4BE8B4E 518472003DA96D02A04B567A806D6FCC1AB6581C255047F98C302CF6A3C38A3E 255CCC51C41FED45DF5A8DCB7CA3FA3D4018AB1B3C5A3A5655BC02EDC17DE7F2 946449F7B2552C97BFBD1C6C80E3CE122755E1679511101386A75345277E293C 6BB60E204B16949F9FA0E6802D61128023A73771AA40254F4F7F54F2518A4086 C8343A5EF3F620329AC04682962E7C2580A0C23ADF1096031DF2C0FA8B578222 6309D0ABE027DB4E7F59A0D0F33022188CAF881F52A0EB544E53701C7819128C 96E26E9CDF47938D16143720A9F774D36EF27770625017EF94F3BE6C97FB75F4 A3B44E10F6D3ABB303CE4F63501FC5C91691D5803CC94C4A4E5211BFDF5EF0E5 451D2073481EAB5035A78F14D2BC63852BF3A41D51B5A4048D514E16E3519D24 B1E2A278771055679E561A2632E9DDD7EDEA3599B28ED4C10F1929D10F093018 22937E17BD99FA33CC4EBCC92A6C21B130F0FABCC7CBE12408C1186CBA3B13CE D69E501C346EEA662F847C756DE1616B5B5E4B670FABFFE4889A85AA9AE8DF53 A2A29D710FEAAF5F275C317A07F484DF206BD0C4CAE557ED66399494FF2C1587 A6630861B8E5E62D7B02E3F6D98AD4F5D6D3FD34754DC20C8C69325CF4F43117 80CF56F55822EEFE030D837AD51B2FB722B25098E976AA164939CCEBFE453C40 54DA26BB8277E5FCB0B209B090001C202B1D417BD407D74C96CE6E315CDCC416 7EADCF5EA7356F9150A92B5F496E54A4BE33EC139C33FA3D7AE1AEFEA515F540 299DB28C9EBC83E3C89409F5D528A3CB3F59C1311A1AF0A136E237D91A1E4134 5EA52642D2D4B151D532F29BCDC1E8FA7EC77B3FDBF561F7707C46753EB922F1 FC0A0F94D7B9DF786EFEB034179022B5D8D77E368FEBD1BC318DDCCC8126888E 3277B6F6C9BD74743D3EF6A6D1DA3F7F69E0689B2712DB9CA8C96A1928309695 D64EFA85FC190E9A88B638FF4314150220DD3DC50A630F19A21D78441BA9A4A3 E3E0D201086BE1A1BDB1F9F4E6F8ED30903CBFD91F43B8B56FB269929C431F13 BD550F401CD9FC0A612F61A635C4B778DCF19D773AC9F83E5B393F969F0A6F2D 2C3399578ADD321DFB6FFC828BC708C132EEEF51812305C5AA9C5123EA790995 B17C609E9BBAE75AE816CB02FA63A5508EC4D6F5E68B7C69B3A7A743AFE1C00B 479D1F4D93A85A0AEA989D01CA06485F69A76148A5D541D834864447661987D9 A81CA3F0AFC109E62D4334B1958B0C260CEC205E37F608D53BC5CC5DE889C156 D24EE0442D2E487C9425C59EAF0DFC887D850F2AAE32FE27BEFEBF16ED33449F 746284FD593654A134EA7CB1BA98A9205BED9C2E7625BD7A614DF27C3A72B163 F57788C67D91F7299AAC5682F031353E80A7FCB23C9DB3CF6440B3223132325A D55382F07F7D83C1E7F0F1B5D751FF1F39AB6A357E08D34FF625544F0B62D92A 0441FE53F5C5068A3FE0A80729DA7693BF377C79FF3F279C52F72F03E439B688 3552A1F0429477294E062ACB878CD3955BDB1050195EF91F2010611D1680D510 33154CDEF24459E6FCC010D53C07AE9052CE784D8D060265885B93E5D201A3A8 39ED6B100E14C87992A5FC12587123D59E9C70096C0B8CCE18996C7A04061127 37CB2FE94AD25A8894EAB6543B4EDE18178B7CA02251752EAEE9007FE645DCE8 76E505CC7CB133F1ECA70526437ABA8C3E966B5F7929042A91745F43058F3018 C135ED93815B54CE444E864F840483D4B9D44CE0202019CBD40B108E1D8B4A0C CD10B442AE5C78CB3BED5E7AD9B89DE52CDC3D3FF506159E73F84CAE0C4B19B3 310F6288DC7A1C13043951094729C2D036E1B268FC30334A61057253D5ADBB06 062D9CAC36325D9668175C046E8E554101C89F31E0821FACEF7474774EC36C39 62909FCA2682F0CF31802754757EEBFBB5F98DC008B534245782D12EB30A3DF4 B892B1E064EB271FA436464256905FF2E91042882267A75914104243B60F12FE 3A9B5D9754026FCF038A8655423230E5F2984457B260354E75E7E8E438995E0A 41CE6D077EF1E08257CE1B8BE3A2397A490DACFF0F3FF8D20CFFE6BD58968AC1 321A49B21C324F322B5FDE900D9E055BF6A020156CD67EAA1AF90BC64A1E1731 D95EEB12AEF53754C7FE33167B9874D896FC5984CB032C60D66F09CBF5B045B1 EC95734469F57212202F37D6E294E73BBFB66C4B821C5D844CE81981D7D50327 F42D8210216D6A4826197CC24865813A441931DA18893031AA1EA62321B0DA7E CBAEA839D114032906E18FA1C661C1E88DE33C6337929C6FC8B09B1CC5B95BA3 E1C71C33CD9A3E4999BDCB55F0F931FE0F7A3EF924368616449551E3B0FE20F3 6B26C6317A782DDAEDC91723E25A5A325B288416E06A62FACC35A22F7B1AFD01 6530D0D6E80C193A2E891BBA5CEAAC8315281BA873C95C642253BFC2BAF34605 9EAB0AF45C3D049A8F433472560AB5DC2561FCA3A2B89AC95B15CBCD15AD6CA1 C1E7175097D316CBCC0F5785A1CB9EF5D109356B07EC553765C3542CCD4D4A71 A6D402D95A9869E5194E2B4591CD6A89A83D1ACD0F3AF7ADECBF37C69960526C CD96CEB82DB4F1504DB80C171383052DE99AD7A48CF508BE024BD574B06E4A7F CCAA259439F581467CC43F1775A797ED8151A08B898A4B4A5E2F2BC98C4410F1 108393AFB7031C8C1B4CC0880DE20C3BAE0DD0EA1F15DDA20448F7893995F28B 0608C5D9F4D434FC6B36C56A5A5748BBE676E00C3A9F418FC82F08F7C2650792 BF935B7ECF4B4B2868A4646D3AF8442072DDB42CBD89671E3D8EE4E0C946ACAB 2D7DFAD319C93B6474B36F4398D06961CE2EBC611BDFC74C06AF95BF565DDC42 1F7932FFF7A5658514C04D79CE7888CAB8C0C13E13A0A38DCA8F99A2B0BB9F08 89F413B0BB6C208C0843F607D1DD21D2D2857F5B15113FCDDF9012C68466EF82 C9E67E81904730359D72118965173587DA5EE59F28B0A101A8F641F1EFB084DA CEF86B85151E31B21F66BD9055293B5878339FCF27216CB67805247EA7166DEA 065F283E2BC91E9C526024B6954410ED143A88AA91DE752F5CBA7129236D8426 DB326A5A9DE91A2709F7114049A8FB333E87CF5D1D839F4F79D08FE684A7AE1D 20AA674461DDEDDE23167D5881AAAB018DDEEA28157CF944C55E0E7C7010FBC4 7884F438049A6F596912E65A54CE36C42B22AC762362CC4EC9F9213FCB908814 E63D7E10D6BA9CCF802B662586B6E5DDE8C7D5B7BA6D9C8792E87349A1811F96 C5A88467B93EAA04D84764C10B344D51541A987548D4F24482902A7744535988 09DC57E9031AF5955F5659922D46FF6727BE8AABB889563878CD8907E86742CC AA1424363B562FE791EB65AE23596095311612AA0720655CBAEC471721635BEA 2E322E3603F763E4A151AB2A8608BBC11AF4B9EED89930B48627D12C7857D906 E1BA68C9D2401056C6A100D5EA2A29E34DFB839A22F726508BD77D445EAE286A 50D46337619F86AF82DC4C2F0D1DAA005E17AB38E54756D48689EEBCB2B70924 D913013BA5A330D69B7B4A6B30A7396CE684D46DF2C24925CDE10CAC5AFA48E8 29AA959AFB2ECBB95FE16B483B49A6E10B009E48968EC7EBF2CA18B3A5175499 8AD1CEFEE2E3A5CB84185BE886B912F4F9BD1859E86C0F2B3BA8E4CDCC509C8B 70A0226609B2E5B3C693588F89B8B9FD3DDC670B0818D59B1AB6392B61567113 DE0F0AE4B5402ABBBC5EC181E3F9131E42B4D72FD500AF4A40ABB47FC78EC4C4 340810870CBAEDB3ED8B6991611F978A9851DBF989CB54A7FB6C5590D6F389ED 63AE2BBDB9640A581A3D0D56394345EC8A621E639A36D7A3567ED4C646782491 E6FC3D0A16096A748BCED36335A39D30BA544F5E3250C9A8465BB4BF1F78783A A6F4C8AE394E45388641DE0810E79CECA8CCB82EB5B01AEB294BFC1E797CA973 653AA8E25F12FD4637D4274540476E3BBBA984EC2B58B678650BB30D074713F5 E6A5579EB116C013DD4BDC716EDBC4B0680BC1D1670BF465BC7575EA0C0FAF7B 50B4CDA35F6CB2F3801EA75F8B8D13D5CD2B81035C06440EBFEB05C43920C8AF 161BE712A91A009B3C1DE9CE9A29149E81A30BBC08A7DFE5291A137937AE8CF1 D24CAA2620309F0CBDADE912CEE0801BA72A097446FE8DE2C494E5E7AB790D3C 46A4AA9628D791FA83B3FF9DD11F115669209BE8B4FD1EE6627E179BB53C245B 3AE42A6A95D73A45E7D9A78C2C46544DA9BF229077FADC8BB0A288B044AB219F C62E33225DB5B58C19A0894F14C57E318FD66A56BA936DA1DA059FB5E4C89134 909D531F94915EBD4309465038E6E2D0223EDCC2D9030BC5E6B07C12A28AE03B E58266B28B0A4111B445670449021001771205A0016DC0534E84E02007A65E4E DA5212D4668270F11113293A1A0FAF9E7F5ECF382760365DF24DFB1A49D50116 D2959974973840F8BACAADA175B18B0CF49E47728F744F3D3405951EC677C4DE F2A8B4AFB9740765742F701691B79309E7F8A9BA9CA4734BD8D6AB97F0B8DCC6 A77EA6F065844656ABF04A6224CBC9BBBC929E1A4BD3230B901AE1E18FEBC2DD 1642AB4A5ED317F9AADBDA2062510300CA34A7897D0EAB3DAC7DD375C24221F3 03E0A4697C6BF80426393BC326893D524CD60CCA3EAA8F09FCEDCE2F08F2DFF2 CD8C8E6CA25343FC294DF8AAF1C4938DD7BCE943E92CB8C70ACCD03CB2589CA4 E12353188F519A9E50AD95EB772C39F0D0BCC02DCC9A02C55303B370A511B396 486313903405479B23FDD01A7D1644212EC65BE4DE730ABEC92F9E5573A7353F 139BADF8C69BC5EC022D92360A28C66992515A7AC3E1AF4F87BDA91832003EAF 02B611681A280492A0C0653A7B0502FA0F036B80B1EB5A92B6E2E34F1D3048D7 9DCBC1994908801E17FC33109B407613C5537C04FFC152072F78F1591D6CEBA5 37F9E385CB0330754F7FD33255353EFB68A88B6B65D378F90E85996E29E8F888 E1C837F735FE92E1906D6A3991E23C5F4B6ADAE7F80B134DB3F2E9B45316B5C6 AAA37C479979F320C431641B87D5164CAAE38089BFC5A0466523901846DDBB97 7E626FA4406E96E5911BA848F9FDECC660F0D9C8C51855AE6F61E80CC6D7E4EE 8171B10C33B62C9FB6421E50ADAD266816B3D11B62926EC7674795A37B117816 3DC5AE02F71DE34EA896ACB2DDC623C44CECCD8D6631517D3B0D51E3F5F373E0 BA991518CE7A61A4CA01365C812DA9A27A7BF7F61B70BAE4A25353475AB28D20 0EE8A274B7B81324CED23F8144C859318D24039DF4104EFF6A46A3E4AFABB7C0 5D54A42B98554FDD4761FADED865F6CC6A62999A6D5E428B87773E34A3D59886 1AD7953B918FF207806D89C4DA9E29FC56B5335F46516FFF9B0077EF6ABE1B64 050AF7D08B8E0CA34BBAD1B70B040992EB6905A8C5453EF2A589F51ACB37D2F6 D7435FDFE1D2647F8E7C9EE8E55F375AD259E806348D28F26685AE4E64CB08C2 8479514C4F2BE9419CB9D2FE84B2551511171384BFE1FF2514948AC8E0011459 0194392A0B0CEA69357E0957CF64187606C24B66E75B90E65F6BCBA6B9507400 FF673F3ECE5DFBBDD8594B2FA9F7FFC6C9EF9E7690D1697E3286C9FEC9CDB3D0 56F9D219C8A5E8BA1E6EF3C56B279998EA9B86E18678E1D94F1C51AFD500DD7A 20FD646AC1723028CB77572685818024324CEE2DD03EE89953602B0BEBF931A2 76549FE146CF4211F5D7BA4CE8A4626D6B6DAB552E158DCB9A85A656F0470F84 396B9537A99EB633499B8D06C66D543B638282133067A5EAC753FC7B68735FFE DE9C5F435282BE7192F9F44D6716BB17CABC23970253B1C4297CCDF520407603 87E0B3D295DAA1A72034D94CA5417B0E6B5E148A2F3B842A77C54EA8010642F6 3C45F39A391F146FC070A9384872321AF86924A5C79C4932BA1E0E25EB8C76AE C2FABB9F40A19CAB8CE845AF2161E6C5CA4F1F28DF86D04385DA654DDDF4EBE7 C2067556D6E9C3326F8578DC526050B58962B3FEEADA9E30FD98162A7690B2D6 31BA0428550DE10F9A61D02A2A978709FD31D2A208379E53B1A29D111ECCE4F4 BDD9B8E29576B2F18DD4AB9FC631C5BF6ACD81CE8C9F194138A2A9497D966444 F0868CA92BB615B511B7370CFF55492C57ABBC22FD278E6396B70BD34192F086 A98492AC442E001B9B77807E3ED26260D69FCAD22B7733708CCBE7F84F7EC267 53F8163315FADE113CC938E49AC9E00928D16A317AE338E91E38AF8B894EC75C B5F3BFE33ADDC0A27F0E754D2CDBFAB0BBCF94A1BEB2F286CEB90AED9C34963F 39B63EE068288431BA3B31E134AD75D563F5B81782AF676FF5E39AF212EE0282 D66687205CB81F973D1624F14D1E424EEE9FC189327F1A502F6B45CF3C2D469E A6D952A5854556DD6C70382A7939F4333B6F4494D8FB50B1CB27C4700696BACB 087E7C705250D49F5298C5419F03F713619DC5AA7AF817A48C5E1702E1ED4482 ECEA7E7EA2DD3B1BDAEE6B4E203346CD7F7024D0AFC488F4420CFE1ACFF96E8B F52D2B9D084FA37FC69ABA82C5C1918ECD8A94CC7E3B85DBFC2EA7579AFC0749 8812579E9D682FF0EB5C00BB9BC897CE9F6BF1F00510F1DDFB17C6FC832E0CA9 79193FC6DE4EEAEF899448D12826E0AA8799B3E487916017CC3C0FBC559D5921 78BFF1C4D4C351C472C00B3AF94436C142C8C70189805894A010BE3B8FBD3A08 97DF5961E9AF3C9B374D733D7049EF23483003189AAE67517A5C953F010B4473 99EB286E4AB8DFF15C226B1B5BB0CDC1BD1B5890B49525EC07FD9E757864E4D7 1CEA3FF16FBCA03FE72D50A5FB75463D974BF5A8B9F4F8BF7909059FEA775D23 5E8A48A69592DD766EBA72EC27126AB1537E8A9E40B8E908A968AB71AE86E9B4 E34C4C0DDAA6CAE34DA06795C5C23B61F1B3029299CEA838209B9CE83B92BF1B 81DAFBEB500E13C5C9EBB2D7AC1A9F2428286F5CE7482BF12132F263742E83C4 B99633A0EC4DFC9C06964FB47FA7E8E6C5A76536ECBA7187092BB64C97B51063 03409528242E0D79AAE56E8EEC79D10809E0FC4C7894DB3675BE52AD3D954689 23FD259BC85866AC5626C80E19B46D46BE344EEBB27BE626F03E2AF83287910E F1137C184D279F0886A00191DD1E78EFCFB193145ECBEF516BAD89911E0F1261 E9AA1E7AEAB774443B5B47580E94E8D11CFC72CE036D292DE29C0E458CCB0CD9 B9FC222E3244A0B41A2FFEF2BB88AD788609E5E244C6C88B093582ECD05782A5 010C2030B988B7DB1E30C6D8E54837865246B93CE7E040E2A482FD0E1AC9D50E 632B6508154A39BBF6D4A6BFE0C835B057D5953BA5EE7E0941146E9AFA61FC98 0182BA32BFC0E8DDB61F96BD482A3F3BB5109B08A97F0C369E9B77CC863B5E5B F7086A48F59EC18497AA38753F2CFFF02461FA37E4B555C0F292BFA8ECC2B3D4 5B41FD849C8E94FC2F8A8FF379961E28EC3DB127D9F006C6F2B91168DEE7255F 4BA8FC35765D75A2A2C9065570592C25E1726B492819927E6A0278C26072A01A C3FCCFEEFD6C303C9BD2189DF98E538140E7ADF92CE4673930E950CB2A5D4F1C 948FD5F5C0F58D730E710EFB86D7121A8C77DCDFF7563E756A63CA0DCE6699A4 DFDC0E17DCE17BD056757E944D2A0EE68E819D2FD3326F9C3204CD04363B2767 1765E56741FB06DFB613B2305AA464B3A2C5950392B7DC4A37FB532B128A76F8 7BB70D92F0A5A84118658061D40DA770B3A2D8DA3F1EBA9754C451C8147BD4C8 C8CA37F12C3B3E83DE897CE25B437A079BC16C1046C3935792EF7685B3F234DF 14DD781A80C66B7B315B2FFE93DB467323E01F0426DA7F488D5B28EC0C4F061D CEE054FA05071CDCF0AEA789EAE744D80392BD557F4023ED1937A1B53C757AD3 185C0710907E7B87482C48A1E13D2BB81F6924FD8E9E8D99756BBAAA03EF85BC DE6E14CAD1265E16E781AB6FF98492DD8D479AC2E5206D2917C97966110AD848 C41687115E67B559D183A07037D04E8E2FD40A5A40E7D87649739CBA8CDCF443 C587F0D9C00B9A808F4E649AE7C767B35ED489246AAAB778D5E63AB7FD2777C1 26A941846E215BC7496D78D098CB4FEFB819FE8E5F98E50677D238A1CD1D661C 67BE46A67131B095025421A13FCDA084279959705D53F0A940AD96948DB37000 A68603C8843CA4E7444435F17DA361F2048D216763FC5DA7C687C6AC40AA7318 677599384F99D33DE44040D7DE5A870A420F638E83A811283290F0D5357A0048 8C1EC53D383C8E5E7895581B59691EE045883E3E779FB0470F901BD8613DB965 D1D005E804FA715EBA9CCB6623C51F41FE9A5FC108647517FEF1E9407D4F2527 8E593E8284E9FECAF7653D668F975436E4B44E15A8CBE5CA08C04DBCEB7E40C0 496E22802F2938433DBBCC34A0BE026AE1C21CB0B89E81159316D6F847CBF057 5DFA1AFB203BB574E7D5A78C468C285A098798A223A3234500C2564A07F416FC 3A313DD014ED39222BC4DF4F9C9500095A1F79F71DD3F065C95C3ECBBE57B714 71FDF51CAED45DE330BB35CA4D3854DD4A353623BDB414C852C8CBC4B1AC6ABD 6A3F00DA0CB3DCA3189176A2116D9AD01E4A53B7A67158D52D6C36052C625F30 F443FC0656863F451E67ADE57F662345C33A479B1832928B5220544ED54EFE3B 7517CA769B4CC4BD91C9A602B9DAFB48B89C3E490613A9B07C4385A121909511 5A6B9DF7D5FA5381FDB8B456400EFFB006F15DC1EB93D74288E7227C8FE6E137 56382C86FBFAE90C1E1F9325CB3E872E430F8525EF5A5B34BD7CA45362AC2729 E1B39550E3BA8E2D29160058F7DA661C17E009762D0D99995E0EEAF8F8893802 946EA5CF487C25E4C91A2A6B98E5B6DEDBC1BBB01FF8EF23C9928CBFE5DE8040 390BAAA66997E936B50A1FEC18A90894D832CFAA5C35891CC01CE5DBAB20FD45 C069106615C30C00758DE66ECB7CED5E8680417DFCBD9DBB672A71530254C71C DDE3144D20DAE4B196C462D8828A3D612A998C8CB163BFA33CC62CBE83E63DD8 3C4709E156A92123BF5FDB588353ECDD293A7281408B73530BE4806BB589C691 5C10A1472D6C311AE6C173EB4A3CB06B7A3E2626D7979C427C8C11EA06C95904 CF8A3D509C72C31AC379642EF9C292DEA069347C9136D71F44D39F4CC3E51525 10403CCDD038D3ED6C6464989218475DD58B27153F0A5FA890029A928C053AD0 2989CBB3B0176D2F88702D00DBA0177EC51B08D7E0F9333DC89C0E69B470F52E 38E750F11701B957A3161364F6BA74A8B8429DD87D0981597DA9206A46795412 225635933413394E4BA04A632695F37E253760874E813FD8F4275BCBB0E4C6B0 D81D546DBB99E27FF7A1AD640364EF547CB5D2DC12D7D609DB0B9E4EC651EA41 0E3362B3745F9F1B3849E2C047138C4589137160F63FB5C093FE743F9B2A3907 B08B14F51FD277EC66F56E19DFA0B0727CACD93ECB1580946C9E0092F94F740F F1347CF42AFD46F3CFC4E44BA60BFEC83F31381DDF20EC1808CE650BBB75D8A3 77827873700806A2A7D3264B95119514AB9940C0593F3EC58D3CB7281F2EA154 E1C2FA3BDE6DFBED2CE4D7A74EC9718DF075B6928437E54872C8C66EA7C17012 DEDE74F0185C67C4D884C0DF21C6F80D0820CAE35C6BAC3A9EEC4183DF461FB2 93E2172FFA04E5470C9D87A71327278B2395201343AD09AFEB35F8501B24445D 9B2614D75523AB7A8ACB67301FAAF55321FAB88DFD65577E2980418C6EF5D8FF 52678F027130DAD71117820C20DFB4A24092D8FAED4B8D926CF8C3E054AD0389 A2C37BBFE78622CCBB3CC1853E90E6E4D906410BA8FCAD74A04C51CF2691AE9C 6C462FC60E1A644EE0D90FBFA4D099F8B354A7E835BFB1C6569CA247C10B45AB F7DBBA63B937012C6E1FA810B83D449D53331DE1379E0F820F43679145B59B4C CDD277AD2EF9D907E940E4477D80EBCC77014FF7622E5AA8577C889FA8CBA263 72510B0F22D28E2C5360B2B2C7ABC7A93AB6C3D728844FC7B841CC53EDEB082A 2253170E67AE6EA143B5CA64C28EE34917ABB202F2C0BFC6F8223EC68893E887 3CEDF6706042F4F95D761D4B916DA6E946E66EB78C8A2512DBE6866F181F7480 387C49646C79DD1C174C26DD5F142EF203E0E7567A680A35A7B7C9EF3FC361F8 1101E034F202C5DB0D8CE9DC4BAB1BB9CC04CD0036139E96BA34B8F6C37EFCCF 4081A2B9F1305CC79BD3742DE74B82E39C533D4C2E65C7CD55625673B11AFC34 2BC54054EED14E9AF22B578A36D638EBBE40075D3206294844283CDE49B54E6E 11CA2540C763EC4CC7C389051324238D0D380AC81AF4EE04989A762637CF871B C43D284D7D5191C68BEEF0060081B16CD93E9F677300422A7CD2D4EC541A6AA0 DAA2A8A44BFE7BDB65A989AC89E5332DCA160C92D2177ABA2B3CC510B1E6CB2E F4C92839132A822CB52941E83E9360A96BA996B0FECF3EAD5DA932DACC0163FC EAC4FA40275965FAF0920001F087EA4820B87A49CC4CAAB6C336FB89FAF09AC4 BACEECDF4B4C106F70576C53F55390D50C6B8EAB81320400A24626E246EA71AC 98607D9733764521EDA48A56F6B9476030471DBB3D91854D4D6388D0A62F9E3A F5086060024541499A375347F861343AE902C150AF033B8F955CB664FA657742 93AA641F64599C02373F1881272B4A08A44D583D76110A43832F6F22B86DC5A2 D33053854E746DF104241714A2B17E10EEF0AC2929B4C15C5CE3D5D7C2EA7FA1 28335A0087CED3DA9536E8460CE5E957747422A3644F96C80714E3B7DC76BB0F 73D6229AD8FE72FF8FB58EC577F2253E2D5C27168D00401C94201E64EF770A07 DA43FD8C31F41943E46EB80DD3D9CE38F72AADA9E70B772A692CA7A41573FCA6 C46E4F9543C004167529716EC417B5EA6AEA374EC7EA6F0F79A5F32B6F40A6E4 13329175694D7869E60B837C4230269922B681DD5588EF0B0D77050B71D3258A 89DFDA0E7B4EBDA9F050951D4573EA959E5499DFB5BA7FC894229B26DAE9B82B 8963640EBE6E892C84FB3954ED3B0EE64E273761B4CCC34E06D88C630A92A79E E2B0526201FCD0835D5760F680BFC51573894FF976BF8E6DE378E3B24261C8DD BBFE0C9619F2800F807716E9353489EA192157AFB5184B4D4847157491D61C9A 93AA2DA0B076444CCE6A2065BA5708FD5ABF50A8AFA43AE65982F596CCE43B0B 550C4D63590E0B8C48884B2388B1E3A050035DFDEB1DA220ABBC945B542E4551 A039914EF703EAF77FF5A8F53073775703CB7681AC0ABA95E1CF016BDBDB0277 AC407281BB4A5DB2FDC550DBB92130234AD7054C851A56EE0AD6827B89BCC5A5 2748735C0F862AF250B55D2CB737DD5B0572F7C129C09828E4D71419C27B59BD F9AB2A053F432A956EA9E6801986D3B1E55A80C4397E458ABEDE8E9087B07FBC 101F3BD84D24C5BB61CED41E292B9CCC884681A3072E0D420F0EE2B1129FC5AF C74D2A359AFACFB92A1C849559DFBF0D09018496369B5377E696C1CC6B9D9B67 030342943DBAA19E677DB0A8DDE0066D8E6896CBBBFDEFE13EF9E5A85D2A9ED3 9540316EFA056C11A8E65480F85A0CC8D0DE150B8C7D22E45DE10710952C3974 C9D6026A9A6894C1AE2C650EB15EDE4E87E4F457FC7B8EAD32BCC5FE508C9284 EB456AA6FB8D297C3F5E71AB1526956C66CECD83124EC68AE6546E9C3BBB42F6 045F4A6A557145FD982F599F8B285C0772D6F1EC2F73ABC61E7EA0E6A8A4D391 B5CCC56AF378E9CF4DF4732548024D51CFB3DA18D78747566A7F7E9249834BC4 6557A1CF2489EF195FAB236BB48FF427FD32E1903B8FF82EBEAD2E1CC6D54821 FB3F6763D2CB4E6E383324443D1CB3295BABE7328B9FA95813932A37FFC3A9EA E45196FCB6236C73CF95FFB675510259939F4525B298B3A69D0B52472BD31D45 24CBED3F82F7477A180FF3430212B1CDC21EEA48F799B01B763C93CA93398E46 360707E212942E17BF445D2E054EB9C35B4204A7AD6E72CAD1DE1589219E6530 7E67859BB41148903CE77201B8FEE094EB659865F6A20E3DDD920CD27B118249 FBBC11810A14E60E8C09E00363C039AA0360BDA398F3C65085905EE781AD5726 DBF612DFCAB47C9E9E3E516CF26F53B6605124DAB8C876F50973BD3038B03EA9 AFA4C6769405477A68BC4D7900E1DE54207FC766AD11F19A64AE8D9A2C058BE1 E89035EDDA2E568783B36154DAAC4E3A980A38968FF9B81573D5C2B3FDC093F9 A98050E3E1406E2FAC3D1F9D11BD6F511B1A044D5D62329DFC901E6F962A3DF0 3663AFFE48E0154AC5AB244524B79B5D5649A2F9C2223DD97594E3BF55225858 1E8173B8A7BCE623F9B641AB8AAC88B9224622E102CF2D091ABD006875F6C616 FC7220BE93F77A11E729F04733D12F8E49AEDA23A449CE772971CDE7A8065888 0032E17FD396B162C22EC213E0D303297FDB3160B303F1EF69851506E3332994 760B7E59FEEC01445E28C6681E85D90BE5680020976DFAB52AB29EE292747C5B 41752846FCD3C2E0A2D0F0E8DE92D16B1B5DD41899AAB80EDCF2487E1A986E59 F7442F68B05C8E1FF12D0D0CC808ECBE51CA429D9FE388929125DB8F03036C95 39BA0153733DF29B00DA9C96303D265CBB80D314EFEBD2AA26FEDC7328937612 BBF2714552B94C8EB9A567928C0D275C72AEB08638DE4324115AB9A451ECC6A4 F0E47E73CECFA0AACD1DD82232540A7D1FBA6075745EC8FC36FD31E3BEAB060C BF19783B8B65519FDA47D5BEF90ECA881ED512D200188ED498781F6EA83DC1FE 95815D1B4F05A33230ABA8A1FE53E13F35B92C1D76E15265C1B6F69103FA33D8 A90B1176439861ABD9324D2AB91EC9A216BD93472BD9162F9B9D1C0FFD26B185 A696D9C1927ECB9B20F1F7E1454AF91F9A4A3D129C4B034BA2D85BFCE6A2A1BB 97B5674A51D56C6DB03A8F26CBFE9DD301513B2671F0BF7B074C4D159F9FEDDC B1225B515C1088056A9D81E6FB640FC7D37D3B9174FB65BAF5AE5A5906A5B250 B7B297C805A087FAEE9D888E0844014C3E4931F29D4B75F8A31C02B0B69A56FF A2FE418192D1E3E30FE8414A1E1852C8CC2EEC091F635F6A76EF82878A260F9F D9CB3BD28EED2307F1E8A0FEBF82E7B2862E176EEC2947307D81607CE8761480 6DB2053DEEA46B9391ECF931F0F9BB8BBC097A37C6B02AC724D839BD5AF43C5D 7DB5146B769DD171844C8EDC0C4F93A63CCBE7519DA6654422B1E4049AF6E96B 0B23AE5997644EDBDB0C139BD45CD8708824AECA2B07200CF7B384B72D23D60F DCC3A98CEF3F6F4744276C714C08B835FA11619580E8E0F433E8D069636BC321 42D6BFA12DEE9F2D22293950E5097AE72625C6A8BECAB5C0656716D4AF11C755 298500684671ED70FCA40239AD0A04F4BAA1426B5931BA1196F1C97C765B1C05 602B887B8482F9A4134E3F0C557E1420A9AFF802445DA1F631B82AEDABA2B98C 716B9DABFE8E40585EA65D7910A2965F99C5A63BD178E607547A12D60ADC5DAD 589F7EDD6482FDB2113622C07B0444DA233213846A61C260DE760485A35A47BD C020482DEB042B4D7295A7F90032F7228AA7529E7E2C9BB2DCBA64D5BC6D5419 41D306C16B0DA13DBC5EB7C6874B5362A6300CDDCA16425AF32FDD997E48429C EB4B6ED76765939DF0EEB4DA1C58D79BE11980B636C9ACAB2776D3549CCBF157 4D640A86E1B6DCD14E56F18B0B30CC1FEFA6199BCF33C80FE48EBE85BEFA1174 4F52F67C06D192B48A79BA47D4E6790563DAA2F1B2967B655FA0111741854C3B B53410C582011F89D2BD1509718DED0DA887E39D1FFCBA9BEFF793085A448AAF 2798D65DB0A3D66D235C00A9977F2D3D3E978F4A03FFF783BAF0C33949D42541 FB24EFAADA5632EB66A1CB60E22C957B13C7E52D8F49B5C99A52FCEBC7159E33 749A4F647936CF51D5EC511720FD6DC01A4B0C2D3120D4DEE5E498412213DD20 5C10975536EEF28F9BDBDA565779E3C9F1C3A087295F6C1D4DF2CB44104BAA81 C5C8D6B4811AF48F65A3D5BB01B982423E372D612FF20012B0909EC8E41DD25E 9B21963AF687A9678FD79FB8953CA5A1E38E709457C196D3D080BD764E898617 F7EDFF583D9D75D8632BBBC57982BC9BD23BB6D9E6C06497CB4C01625579ABEF 1BB42CA4BD7261CAE0CDFA67F50A1563307DB14C7D3ACD49E59E3842343A97F0 A5C45A8BD3D80A583B90D88D8829F27B093FDB2E91FF5ECDEAA81DBE611D93D3 F4FD48F3B74EFD140EB1EC4BD5A463DCC84E2E7B157C778368E46D81A7B29F4C D4794473886CF8E2CDC60D2FAA4F537C969175E3D428A3918CBEEF307B34E981 9534B42005097443968D4291F3CEA793E707B37CA63CB2516E8575B8FAC0EEC8 48C4CD48E2819E4DB18E428BF7A933753845B5ADFE3C0662C147667BF0FAAE19 3B6CB8CD20C9D1B5657265EC8F04AB427FFF352BC8A343F98D1AFF1EB6EC03B2 FEF15CD3CE27135CFFBC2EDBF29E3918330D13516DA2FD899299F4DD996083B2 AA5CBAF791C8BFC31D25EE31BD8F9E1946FCF35DAC9ECC347BC33E82BE5E5236 27E424FC8F18B01BDDF1B633C8BEEC69B772F2CFCB521FF7ADF2CD57C6AE9FF9 B39BE3E3A5CCA2DB161A441246D970484B146B3275557216D001553A58859F12 9A102D85699E24B901FC3B4D93B84F83BC0DE7AAFCD886703EB065BBDE63C83A 958EFCD18D53136A283E821E7AEA7EFEFC14602B1E4C428AF80AD991EEC31E69 B0989D19353B1818874BCD39DA51EEDFE7EA12375B6CF462385963D5CA49F7C1 E8DE6BDDB7807C3AB5F232E9C8B242F09B18EF6B7C4D88E47E3BA33EE16E0A3A DBE6CD175E403DBB1EA5EA1A74C72D749D743C63203050E87A60C952E9925ED9 9C509459F31F7B69E38E737EC96EAB6B2402F689C10567BB758B9844623C96A5 9206B8B17A51D67745312CC02028917150D16CDC362E4052C6F5D4405B686A6D B7D7CA7E60A99533D0AAA5C0797BDDBC078997FCC20645763F4B5F9E4BCCBE92 E2E928BDFCB3EC1A9941CBB04D85A0BC386A612A655D849A34A76E3E3E1C91A6 35ED8D77D27B090DAB616F8772481C57741CD4A3803A35E863D9D2C4863F0AEC 305059A8C70BBC916AAF8A79077287783F2F01C0F676678D6EE8D1E7F5855D48 958D0C1304F94B4FC6BAD1FC62DC3834713803B58C680E1AD81E70A09143509C B79A5BD469AD6D63AB7C8709BD8457A635E85EE5CE2B81B565CAEA18E6A6F738 9E40522E0D7B3CD35B68CC2B88FE81279F379DD01643DD52D74046A0D0FCE216 BCA962C1D10BEF7FE76C602CF2F8DAE1F7160555A806CE3F1F817A3694A2601E 443A85C32E47393B3D4C08ECB5F507C7A12536B89B446569E5E54512A4897EF9 84513C8BA4B9C8AF4ACF81B2BEDA480003360DD08DCF43DB57EBD401C9C7C4AC E08BDA494B711F9F2E2F954051D7A759BC73E5446ACB973F2EB4764BF8227DFB 08BA8DCC4CC289E367EB6CB79B8798FEBD585E4C3DEF59834570935A6A3DB3DD 9630020F4390FED9215ACAFD4683FE82E1F67CBCA8CDEDBDBEE29776AEF92743 8A28B00C873FEB39A9C693770B410F1B91F631948247658632896F821A43C3BC E0E9B92E8017F7E5138F1A472FF1C4BBD64F1642A5818F138B35EAC4C7C1FF6E 917F0AB74AAA9752283E94DA08563A52BBEFBB97E43121E5FDD1383FD94177C5 FC7B706A19FF4B8434B33D603E4F05B5FEC2D8A6315D2CBD03527403FBB25632 4720C539EA5DC49727BF459E73770E64674E49FB76DC914572E9CE7B0CE5EBDD 50CF330BC6DACA9981FC741455FFAB7E5C4095B0FBB4ED94F327A5D0AFBBFCB5 5F795A9DB07C04BF326B8C95A73BE943EAB0203DD488FA7F6167CF77638D98B5 FA44BE3FE030953CAB6CE9F0BD0258FC6862CE8A29D16528CA5597E7997B8078 70534850BDC3647ADD483C6BC7081EFC121819CCE63A080642ABFF4A223C1CC6 A866AF0B64EAADE21E55123A8181A1C7F36D5BC654C6B31231B6839FFFE492A4 E5700603C7B28333967D1F17875ECCFB3590F84451374E30A8962EF0DB618EEE D15660CA35168EB3531EF23370A13D629CD1B601178A2A78FAB7EF75D59BD3B3 3C0F6A0A2483964AA9621848310A1BB3D9AC3EF682D6B2713F821DEFB9208388 09862D1F53E11B5B822A4F3B02AC5C6CD27B7EC5C20CB2726E811034B360C16F 7E0B3CDA6E68A36944337E9277FF66379D8CA2D67BE9BDCD844B6FA85DB222A5 DA51BBFCF8656D5038CB442C49700AABCA3EAAD9AA163B43EA2502CACB0FC4C8 FB9E6520CB42F5BA1175E9E56A13E4627B81FFF8865DAC818B0A9C2624DD436D A2E91BB348E4754020ABA942C7D521B1052D8FE4ED5B5680DA3E33F08B0021F4 8D62D2DE042B497D8DD8B37CE488FD543A1706F1C87BC111CF8AB593E35CA099 4D2A02E0FA787B6C090023AC5F62F86E1591E37EA20006B9D3195D8C047CC5B2 A120139181147628CBEF57F3FEDFEDEAB16B4B7282DC465FC53E50F199A79B48 8D966083736285148FC1A76382E4991C7EA605B05AB1460C2CCBF10A2EBBE340 ED042D2A9D2092F3E91CD4C7BA6D9E60EFDA103206E67C6501CC95062F70ED73 3A591E7FC37CB5A10C92FA2808B494E4BEFC956FEAA6EE82F8D03663BE9C9139 836AE3D1F88C0B7DBD8AD9FF3BDB7F36DE336D4C0774149A9810C27B3A2EA083 BA59788788002481964B952182374BD1F9A72545CBC4B0F53EE7411E35C04128 5CDE87DB0C69A2B8AB74C702A74130B302A8BA4B85D021BD021A68C76357505C F439AB81B5FA7834BB48049DF25EEEF85887AEA66DA7234F11FEEF9E665EA2D6 2F896E5720679F8546C80B37FB91AC7A1EE7182851B3F20BAEC72E1C74E18755 3B908AFCD384F44E26674D13F3FFE746A718A04F7C92D0E09C21C1AF7267AA50 0C7C0438E3AC17251A08C4A39142273868BA91E4B9A41A159E6C7B3EE1B95894 625F2AE90DFB33B36425BCDB41AC15EE4588EF93C29E60071F247432C76BDC13 7270E92989CFDB470685F6B5D187E15C9078E09A0CC2A46B9229FDE4EC46B236 4BCEC1E9E0AC88617DED14FF9ADD9B3C874541E226EEB642A3762A382988A15E C1BA3F257880D0B0CA7912BF529F626E76D1B242833921A29725CEE9A66C0068 3232BC8A3170DC768E8D9947B62742B9342B01AEF38E8331B997AF996A73FC48 C8A457977CF1B4251E645F327B1CF9376D15ACD06D5AE59270E7254A56FB6852 19CDAC3B14512CAA4D00823B693A1FF0C4E2462E3058DE548CF52047D9F9A39E 109C9CB83E5AAD0A3C958FC40FFE45415B1EE51132FF593913F3BEE1C01AC778 1BADA832CADA92FD40EF207617857160563BEB866C76D14FA651507C6739FA28 FDDDDEA39E858CF7439BE229697565228F4CEB4C94A6878D30D32A00A1E5960B 2D32953BCB686E0DA000AEA0192BD53618AF9481121779CACA0DE4F2FD4CF81F 8D4B9D3846AEB66795F81D6EDBAE8BBC60AAE4540E19A6D2173C22D50F9CAF4F C4373617F5E449AE35F9820A53893570545D5EA6AE1E8B3D7775535041FD7860 FCE9F0C78D142172CFB777081BB039877B98D59C797BB2CBB6E17E42DAF185DD E593D88552CA8605F910FB64C4292052F781FF971200FD88FFA5BC85CEC50068 A91B20C2D4129FACF68EE0DB5D814B107AD35571F3BACD2C754EBC6175522881 25D2168FBAC61AAEBDFC1F5D64F2BBDD8615623BCDAD49F21F7FA77743CC827D BF98D727204FBFB424F16C7151C282925198C644119FD82B9402D268755501E5 7382AF8B16A825AF7368B2D04B77EA16B9A107F6588C346805EC51AA2954E3EB 59F5C44A28A31E7AB1724337C42F4950651DDDC87F5EFFEA1B537F92A3F60058 F99F05AF0E58FEEF778DE67A0FABBD933F0FC8D82C9A463088D46BB24D649C60 C32571EE3E11E17317459D2CB58CB54027F895A862C18999BC0B10B1FA9C0B8D CDC2DE7847F8FAE9CEE8D817B4650D730B52506D2FDDB02B0B8FFE375E885C3A 0F4A747C63BC4D70751B98A32FD386FC8BCC07CD52A9AE3C959311941C77A5C8 6A5109E4F43C7B79A779FE30DE2AB50F4D3CCFD51C5CD55D7C43917491B364FA 3BDC3B24043741B0C5D617688A05BCC8F01A14D643214E3B186E6D791A2AF3D3 A972AF68CF394DE082CFCEC222EC928825CEEFAD02E84F845A5744EB7FB9841C F73384071D6DB7E6692B8792DC38256446FA4CC2D3D1E6F7436C568B97AC2950 167FCA9D6D997218C05A905DDE26DDD283F64E21B11BA2D9217D93DDB0D2F985 10770F9D756090F8D5F3B09A8B917F12D8D43C4B354FC26C8D56F53C62872CF5 E32D25F0A993BC0F2E4F0E2103DA6E729996268A3FE96EA48EB6EA6B9C21D042 BBC55FBCDEF0C786F1CAB555DEA42862F3B6B212952C1D944B010EC51DAEB5AD 6E0D7361AAF600CD2659DC59DAEFCE791D9B0D3B718D45A1F93CDE3B2ED72E70 13EE1705DBC0A8F0CDA57068E671B86F35CEF8161355336342F2B95D4092EF3A D403C417A5DACD576CC9DE10F0F837240B3669AABAC540361BC69F31AE7ABFED 96838D6B70DBF3BE145BC07C60FE6498A925C51471788AA5D8E1E69010C8C513 87C6602BCBD4AE75DCE4BC916D8E4F7B663EFC9939F55A6A8BA7D445D849BCB1 2BD64A02224B841BC9872865F9A4068DBF73AF28DFCCDA23CFA589FAF6483E4C 1A0D5D377CC241047AF5172C4E1A7E6C16750E53E61A74BE0CA3EA6E65E9D53A 912578C709131FEDCBFCD1EFC0610F6D105438CF64A7F259737C3FBE09DA07CF 8C67CC6FFA640DA3D57B3E2D695DFECF53981357BC06FCD7D089859064651EE6 607BA03B0C3D7DDB0EAF225F1F28E0E4B38BBC08C76B6C42C4B1747AFCA9F2D5 BFD0073C03841155CCF38214F48EAE34507272EE5CE69051CA87A6B6214C7A0E 27F9F3AC4C962E920542C762510244A6B61502684BC99F9867557926066754FF D707640D0EE946F98922EC777B3631BFC5230B3892FBA074E6B0C91CBB36E51F 4BEFA5CE13B58B6278D9A5D82C7EFE170EC2BE0367BF8531C7495C37B848DFE5 3E789822DAC88A3D5ED772D681F4915983B3A67D3949FFD1A659F936771AAFA8 C61C3C884F3BEFF84407144332DEAE18923FBD1CCB54DDE059694BB3E46BC0AE 8C5B914EAA3EC71DA87B4E08CAE59E839546E0D89B3287EF19796E397826E7CF 3E966F623FF66FD752460A15A7D85F84DEE0BAA16DBA3A649DD0420B28B4C39F D49F2058BC109C46C58AE2A9CF47FB3EE019BE11817C2623B473BED923955FED 5CC714083DE1710E8648B6CE7F900F15C44344B2FAB16355FBD00ED9D16E4396 36AAA4F49EEFF25401EAC8143E549824FD3949091BD47F24A84987379E3C3526 8378C1BC4A12B09DD99B6AC638532477CCA879518994B01CD21A3930F1D9669B 8A778E0CB2A68114D40996A3CE8E55436C5E8F20359E45A434EA9261AAF98F82 269F021803FB661D4F8C881ADC90A09A1FBB2D03AC115D3421F122D01376AB23 0220BA0DEA220D22E1490FFE1DD1CFC30986ABFED309FE126F0AEFFDD76EA1EF 65DBF44E3765AF88E235C74E5242B02C802E4FDA8147D8874CE1C71669F4C261 E06BA951DABCD307393DBE0F01349B66B8CFFEC90C39DD30BB8FEF864F5D85A8 B46D8A796F5E25D033E59E14EA5E480F34807F92056CB5C143434525B32A77C9 A76C1713EEB2D49C346D4B256D14EA6B0ECE2709A9E500C4EF203E031AA43459 66CC59AB6C19BA33D153A4C53BD6B6037C59BF2C5EBC14563D97E38742FC23E0 E6C5A1E8896CFA9A03FA76F1947FF788C7FC7C9973B958CE08BD2671C87A4EAC BFC023F12BDC146A49533435C0A60D313E0A08173288432DBC2D9DF015547B95 A09D740908831AB01ACD75AA036961BAE0EF713470E727FBCA880F252116EBAB 47A38B2D4901C84496FE92D31BBA8CFD8987FFF5E6E290EAF41E4EE3C9C7188A 76AAA149913F62391663E75BA83A077EDA63A5982C3FE0EAE75C5D9EE8E17E5E 21454664F25BC0684A225B5F3615205A85C07DF069BD1FE0FC10F12CD65CF334 1C656085F29212B1E06834F4914260FF7862337BB4A256EF78D068C307947F30 89C19617889308331CB4B53BA71E38AAB0D161B4112223719DD8D6D63C33FE3F 569132EA533758DB58E180CFBBD49DCD306FDF0ECADE93EA5495F03AA370C394 F8BA290FE270F202AEF202A6D15311D2F6EF4D7240E86F95224F6B2B58E0F81F 82D037BB45D290EBD666AA3A3047484A4EC3ECE51978D2C860FAA066FC97C07D D6CE20450B310D93EEA5A306DA97CD6FC055ED1BC298F994CF8A92F2F8335EEB DAAED0BB928567A3F61A08AA1760B22413020CAFEBEC16A4AB9FBB6C0FCFAABF FF240F40CDFB5AFA8814156921831411912E2B8529325C35E7EA940610C46CCE ECC4090734C7DEF297B88B4B4119BD386E51730A492D9A53996A5E611ADED22D C6D38152834AD04CC9996E2FBFA34C90BF57ED326BCC7AB3010273E5EE8F1EE9 60184E436768D65329665FD1043B419D165C12223A22242D03BBAF6FD6DDDD5C 25570137EB04CAFF3B54198F049A587AEB1DB7604A79F5F25AAB7D457910A1A7 A5C57B2626502F2C1B0A943C28CA273AD4E8750452FBBCF0DCF9A3E5A40DB15C EA31013596481168DC5C66DB2C1A5C18E8A6C8DFCA1BE89FF5727CAE7E9C5250 67EA84EC9B60DF4CEFF2F4B127D9E6B000B543048D67884E11A41EE56D2D7736 E1867FEFF8C8B97DFF3749A6C583AD095B8EDE970E3E2011996E4158CFC4E538 F2951A95B1D9B7D778AA7252BBF3AA1FE817B6E1A3F3831F981DBBE0232B783C 4BAFD6B0CD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 44 /comma put dup 46 /period put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05 43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624 2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30 712D165DB658FDA800798803C3CD32B841E159AF0F748400314FAF5038EAD574 57D57A34CABDBE4B8D145E439A11585A0CEDB161559AEE6459EB57592ECBF980 681ACF9AD4AA4BF09071C600432BC884639C5F2C3AC4B53CA6285AD78B3070A8 4912ADB3C55A03A6E1A795BE1026EBB6C6E90DB03B110D3F098CB97BFFD836AB EFFE06DABB1B3AF419BB3E10009AD2DA9CB7B01EDC45BD60B4BFF2C7E54036E8 5B6BEF57D32A76AADAB3B1683A49F317F6ADC62E5AC8BA5514F1B560FE8C3394 7B6536F37C106A2F7A346EFD1B0279949DDAB840CB184F55E74A1517222483F2 F8DD0E850E93B6F294F711DBB234D59406AC5BA131B55185128B95723E5F064A 8C00EF33860A0467B3ECF05E9CCAE87111A62D6FAE5A661014C7D1E7292AF006 F77D59DD6993FA330DFF85CBDAC37A18D22AF83571E74E93E55AF28C9438D71A CF5AADB51C830DFB43104B9094BCF1241DCF70C3481D70B0A96718ABA59A9912 3D012E528626FDE23D941ABACDD35F58F19DA750BA17D5785FA604F4D91FFE46 B0AB1158E2E16D72C6C1D563E647AAFF306E3156A8DE6384030E1F83FA970026 795E8C9905CCF7E0C355BF05638D13FA6B0DF34FC42F166AC2B66607E3DD6A0B 0F19D8DBE03FEB652D9962B9CAA991223F58B3B945FD7E893EC56412F1D6DCE0 2BC705DC83EA7109A632270F024264A2DA7311C4E185AFADC8D2C6B58C0BD2C3 4B38AFDB4EFE7E6E03F76E53C4B9751C138349D42FF32951B446AAAF50C4A9BA 90650B757DAC00A06C047685725F0D1D8E0A7534B26261AB4E79B5B88182AE6D E6FBB991E6BA763687CC9FCBDD922BEC387620F818A7389157AB8D41792E7CE7 649B1FDF4B05EAAAE1B7301710559EE1E232AF70DD2E137157657237DC466C09 183D1EFD1439003BF9D14D4CBAD51274816E094ECDD8D4477FE9D58122AA92A3 1BA2D3F48A9951FDCACEC51FF9835B21C8BC0E1ADDDCEBBD3FF56BE075236F90 31A61C56B7AFDDB9AA121A24F1D48FCE58E1C584F05B5556592B80824BD2F9E5 88ED93DB19CFE5082E12B3158444A5F955A2392D840B3E52C74651ABDF75263E 68C8B20F6108EE6EEBDC836838FF413958C294E140FB3679963224E6288EF036 654CDE66C9FF8BB505AF95F29A5EE796B58B7205698375727743A69920D43D65 C1F9F203722B0C6F400BA4F72AF4973CD6772BE36E304EF8983793547EBCB7E7 5B93EB6160FF8860E4B0DC3BEB649C7D8E8BBFFE919E67661C00A7AAD0E92D38 5BAB4A07BDF83A31AA8CAA6B995B8B7D0CF168E7488D4CD98A7AC3F0A03E2BD1 0F6D9E915C1511976BBAE3C6000D428A52114A7DEBE35275E642B01C92BF9F8D E48CAAF7DF91E17359FCB334E5189359A26848FB3D21368120A93965C5E695BA 49D584FFE6A7463499E10AA7D453B7B39A4E69395C9142150AFC85B6EA0D59D1 D2749DF1E7B14F7C1977C9117A1D7295F527D4FCAC5610CFCA887632DDD84014 7104D659F4EB53A4C92D553EFED124192BAC43D6BDEF60F3CE6A8F7E1946A2D0 125435F0889CD55C6B77B5BCB9A76D142E802B56CDF2235A070B88AF1CB857AF 8B11DDE2A9086BF1D250C2E355A4C72A20956992B43013F0E5258165467AFDE4 9CDF57B377F18E497004A59EAC9D60F72C8138AF828A73AB373D97AC2654E2D2 58150C99F15AC779ED77FC223B3E7945A29C8F12653ACA9A717CA5FB39209005 2894F70E3D5F027319264BD398F94E4445E4A4D54E3CA1EEC859118192E0118E 78F9ED10596D2F87816D710DF57315BE9FB0BDFE63E74E4023A8320DE5CDCEE3 44534F95653A5109043AB0AE1E838A85538DF788BCE8C3603DA2A51909B61DF6 046778206655ABD87C14583EABA345328C776F58DBE125AD481D4E922593B8D1 15972DB2E1C6BED5870572216EDF4C19D7C12ED2C37E49E6E6CF552B0E9D9EDD 4F659CB21F3EBD36F28275D69105BF903309C8A7B20258A9642B0541E033646A 61601867A46F2A577265222BE3978E6F84C29576F2DDFAE642CB5F42DF45FB24 FA36EC2575A286E4CDFA7F27D535E408716EA40BDCFD7096A5358E9A98F123D7 92E8314B8D51D763A84993E7D45BEA3195EC3DAB2998DE69CBE2C92A15680F91 76A05F32B384AFF81750D6A1662179FEE5C1CA80AC689148F3D99E0726D68566 2256010D2B2274742DEDEF94B338525FEF89E5722CAD34EC2C2BA8AD1E7A1CC4 E5B71EAA6D0069DE687C6306C3419A4F9BD7E5C9D9BB215E410FFBBD6436B57F C4B18AFB2A3412EE490726FB568CDE52E15CF7F12B360DFD08F6F43F295C4E9A 6FA45D706C707B37FF0CE27BCCFABFF5417DE624A266BADCA629870EEFB43B41 C5859A5219C9520087C213583AA21695E020B4A4743C06F3A1557AC56CDD305D D68D482A6D43F8E9E6135EA1C1F2AEABF167FF4869B46F57207502A39DFD1DC1 25270E5A3BC02A042E2F98539F53A563364793966D809E17DFA9C91089D7B8F7 B0169FF8AD8D88BB5903406070AAC303369FC4B7CCDC42105A69674BADCD17FF F90270B5CA84DE742E5593596E1ADA971066DE7A9A6AAF884C9312BA73313289 28F80F803BE810B0C62278C925B41E22441F3018DBEFB30E9AF1C11712CCCB23 E392DF6721C557E3523478F913EE3CB5CD1A0F6FD60E32D5F00E281B87E1846B C629E4896288B86097A2F02DEA398F16E09681886C1453CB71FB4EED50EA998E 36F164980A2663428298DEEC9851F7174394DB1D21EFE96A3960A7BEC512162C 72D1E85E823B0FE1600C36971B94A505A085E3FF9BE58FB6205ACB7353C03FE3 71F64580C76AE11F25425D9C0682F42E9316F5BFCEC0F5D8D9D830FB41AEDA9B C02D1A77C1CE5FC6442311150BC3E4ADBFD779DC186592D4A548634F07A16C26 B79B9D641EF2AA8FE056AF840F16FD232AE1A530B8D23B99D0984D7E98C90B55 CF4D97F40CC83455CF898CD9A6F8051C30B151219B60F9468790F0A7F4CD053E 542E1EFF158D94F4ADBF05DAAE0581F56E0F5C8952470EA0D1245680A5AE661F D2C83B8D7339D55401690648D47AE9828D233DB32F6C9D9493255E9BAB57C9D5 3D08E5975F1A844CDCAAC830DD6D2B99C6BE2D2690726A913FFC41DB353B905B 5B6AB3ED132B53F19F52A6F82ABA5077E0E5E7CFB1087A01B311E943CAC3F44D 72F28E989AD53808A158A37E73B8E5AB83A920AB36C07BC8EA85A9C78B12E68F 359661C847BCAB2A6D223CCC012528D868DFCA908C09C0FC39785CCC20D87781 F165109222779410AF291A3655E2E8199314278E52CF03F93F02502D878583CB F75E27B85DFC0B00A2D475201786A32059E04B7F0FAD834A622932600BBB4747 8A62B566D161E96ABD0195F7164CD84632372541A039E98F75B5B3947281F5B1 FDD2A16FC8A06A9D16A3886216E1B7DA3EB4E07D25BA5841A21E926072050BF0 FBD35652E7F3E33B911280C1D2BB6F62CDB5F5CC92540E34949B0BE3E8591084 6946C8345A0A04BB51574D376C0BC65C7A10F2B1109DB99E62B75B591830BED5 295C0204A5199E70974A10E61F5DFD751092EC081D9986A1D39D9035237AA552 CFF4CEAC9CCCC5E5BD17E52E1E80CD0EEFF7F54A9F428D2D6EF035C8434FB215 1F64D22D77A744D02291B06BFAA9EF6602E0E0DCDE7CC0F45A778D9793FC5281 8D4269E2F9B61EDC1A3B8D8A75E65D4DA5B3EAE95153EF55504373C24C43D768 A6D1E210D22FAA4D08F99474BDE3C4E0CBEFA6AB7F6E0153AFE7B2D3A6FC2B4A 9C4955C15873D2460C94519A5605040F866AB6DCE24200ACCC6A7F685BB96737 5F82C2B20D6D33E8C482241B82BF228568C542758207B3F26BED5AFE57A0BBC6 589A676A958E8B444EB839F1508FD1B8D995969BFA5D4DDF345D536F24DA0052 6C626FD8800C04C8E41A523B9DC0C4EE10D456995C2304C36CD4E867DFE91510 36D534CF0C8E60CA8DC1815C6256484010BED831F0CB0CDD8FA8303A504B7BE7 75C5DCA66AB89167236F6983219DE903DE58DB7EE2F04A501E573AACBA610D77 F4445E54AD79B901DA24C399DDCCB7AC66249E53DB1C3E8AB1B7CD20F0183412 D10E911CB758B93D6BABECCB29621EC1F1487183603C68AF7130E06413CDF3D8 9E7EE2263B5D753ECB3795E8E6ACE1BD5EAD4E646F1D76A482BE76D09DE51427 EB3CAF3876095E404BBDAC2095D8BEABE73C3E97725C34EE9D4449A1F998C318 A85F8D78F772E4F67B2F84368E1E77BD9B9610BAC6FAD54E047FB71F824568A5 7AFD5293F486E26BCDB1D39972A30C87D4385088F7D5982D9845F8520CA165F7 E78E259C139520722D213C9BC811979E84AC1C2054C46D560135F19B87D7539B E851A4F76AEC7773F782CCDB2B6DABDEB5711E4CD431A86F5CEFEA6A4C60CC03 1A1034EE91202F9941FB29D9486042B3BF9A70F9FE0B6D85C50D9B96BE3EAE92 03331644C25882D3CD9E082D3A2A52798F51DD903CC927AA44C766B782D5A9B1 54EC47ACEC605C2365E206980EB767E1ACE381154509BADCDA7C1EB736DD01CA DCB8D7F7F235A8C7D2E34A5C989C2098AC19067AB250D7C16ABBBD2FC8E4D79F F07B9CD3667D19FBFF96BB389F3F753645BA0DEC0A123621D506BC31E9095722 10EDEE90C92670CDA95C17E4D7CAB6337C8FC0F20152DAB6D3BDEB16D336F478 FE9A56C823B84FB62AB0AE6C4DADF7A0E7371AB52354A1DF0E9119746808255A 95013629C536E1DAB1D4288171244D5F5135003EA03D23E222E805EC2E00271F 9894A9E82B1F9EB36061D92836F31DE252E30954AEE7CAF8DBDD66114FA2B2F9 9CAC74B353B7656E05835172735979E7DB48681B641A7485F18E460398028B02 AC62210C0F36A7FECC771106BCED57DF6334EE566E0FE2BAA03E6557AC99D81A CA025C8D1D2719861FB05F3901C313AE4189A403BDC9A7D648CAC3561612E0F7 3F668F58CCCEA9A1C6F4229D575B397FF16FE843C9875D7007408CEE84F6EB63 5DB941E9AB63B18DA328A44D401AE71A13CA2164C4A5BA7BF78B0EF2AC20EA97 780F5BE7AEDBB15A4D135BE7B322254E32EAEE7DE78EDC69872E6AA4D15BABF9 EA2D5723EE875ED677D294CE2A476731E010D3C204CA8063D56F1EA7FAFDA2A6 A906C3F80DB19183D048D140AE163BD785E3DD7545432F25FC63D2368E506EE5 6326065BA138CEFD02AF2055D38E5918CAA4BF97C94418EC6F3E14F70140CFEB 432923B2EE162EA0C3DE430E908DF4545B058ADE35FAFD0C82AD8018ABA534A6 946ADAB80E5D410F034EB0E22938953E2A1855387CE4FE9A5AA9CE5A74864B19 E0E9100B09A76442AA75BB5CB4F622AA74319EDB66E30F16CD3FD203362935AA 180EE9918F4CAFB782E0741EE6196B640E3F0F2AD00B9E9EE198C85AFDA53319 180EEA95DE8A78F9781B9787529A75E890E9014A2AAF772520CDEBD3DB92A429 E125581B1CFE03FB7570FEB4F821AE0889D05B9E011643EF88E888801FF81457 ABFE4B89A160C84C69B129A8434EA9F396DE4011A4E89DF1D27967646FAD2339 78A9F37E1F730EE96EE3A1D98851C45C5F16122639B326DA74B63F637084678B 30DAD882C0F0D25AB93A7A4DE413A41381A35E2927D4444257AEF9ADB5260A35 8E74E6A8CC720DED20CA0C1539FB47F96156450C57E7C0FE5DEAF92F47F2E0F5 BA9FCDBA25BF9B8326004755A4F4008EE63FD7789666788AB1F3613AE5ADEC78 0A5ABC85E7DEB5508BFFBA9279C50EF9D5E9907E38EB0225C7562B8D857548A3 EBCFE3A8F0EF5C3DB8955FB995BA5A482F9FCE4987FABD8D375AC72E4FF7C774 F48C17F9B55BF5AF12906AA0FAD20934C7F080C49BCBB3F321A222ADEF47D283 859755588716B89EAD7AB3AD5CF9E0DCB524EEA4A6353BDCF51A5AA45F7F830C 606181EA7158FE373CADAEA1EE6B0528D95DA03C7A03A1BB2CCE4136198972BD 445CE59483ACD728B42C40DB7A072F6C82C7F4FF01F8C9FC525E4A2DCC965FEE 20880CC3A8543F15082C382C30F4FE654A6092B10DFD020B790B2D74BAC86D04 D16E66EED137407055A86070985E41312C5DE0E899EEFDC13C070CFAA40AA4FD 3CF1B702A713E877B3AB844E8F639ACFBCF275003F6A3A1B5AF4FBBB0AB04AA0 52CF9E7B50CAAF2A7D76AB50236694CE617A75AAA31C0DB404298234666CF92C 9D80B402E7711C7F5489BA6E08CDF0E47866D8EE5F74755BF55B10150D59CA85 3395C4AD476C07C9E3F2F09698FEA720AA3C1B63611CCB1B56193594A24D5F41 E6ACEF5989585051EA8650A20D727C179C17C40C6CDC9A7B796596EBA4BDF916 7A3110FF3D5400ECEB533BFA9D16A931FCFDFC36C1C62F7C09A0AB3E08489F4F D6ED312B44B5A8FBCD38F04C89E3BD0BD14C2746C499B08DB1C2922CD7AA770F 0506823B6007604A490950D6790D024FA38A62762CD693EA10A147CE22107376 AAED22AE7F02FE1B4810A96A3840741F12AF3E57FC5849A4DE53E296A2B78E7F 58085E498B304CC62F513ACDF0EA9EA29E8A39E67AF057CE3735E8612F98D9EE 77EFA7B090BC8169534E3FFE43F392292D231BD04591AD35BBCF6AC5B29E805F 79994B73DBE38ED215A3DBAA3E4FE249E59CBF889E3129C99590536BB69EAFDE 94946A9E58AB3488F0E6B820E64D50D65C4D399AC35894DCFBD1358802F5C0F1 0F628AD4048701ADE6522EEE704105230336F14FB81A3F2D84ADE5EEC2439A87 BA5A647767EB8A7273CBAE6DB0E5DB87C00AD1C8CDF539F6D00DD61F102DA4BE EA6637A9681163EAD32D8913200EA059833DC67AD40A0B69427A588F0DC0A93E E86697619084EB4B3B3952EDC511879FC526C4A702B7E6453B16727E51610E5F BAB227F6C24874BDEFD5428D9254D4A87526A3324AD6F63557F7296B377CE53A A6E27FCFCF9F6170289187C5F9701B35D822E764C1E25296C5747A216384DD55 B641F02F3756BAFDAA08B7D2BB293D9028D8392551F5BE3C9906926FC2F5BE7A 3124813C8AF7BEE14C184AEA21515452C07B0D3D4EA3AD6AB8F9E5B7093112D7 ED9E958AF921B6EAD2DCE5CC74D651996F81F5A5EC55D438C7E4DD3248862F57 3DC28CAE798B543C6B8FEF03B55B158C96340D27A5A57B39A53883D174ED7A83 0A2CBF5DF06999630A74A63B59888ACC88E96A13BC788F02C5433A0044D86DBC 7F8F5D5FC2CD8C6AE4E0867DBE1140B2E2C90F4CEFB00692765854327A9A73CC 9B52513076AD8B265E94CB4B8FC0033CEEF644EDD772CAF83DF7F0949BBDBD2C F681D17D257787B3B93C4FC5B5ECA7DC18466FB5DD0F2A3D360A9B35F39D57D0 105A0A5FA461AA14DDF1A95CACDBB531755D85867336F5491A1B147DC530EA8C 1DF6660FE3558EC163C8B0BB9E4DE424AF228819DE1EB8168C3187C6590372C9 2FDAB4A0E5A08F1121A7F2642946DDB6D1E278B44F9337D31DAB725A2B6250AA 4CDD4FD6D91CC78EC693AFD3FD30F697446B3B45DB48467CCB4903C25B0BA209 24EA4BCB450A1FF5153ED0FF51C4C2767821A63281070E8458501627BDEE7B62 166A66F840493795981162D9C4F19787C4EFF2058CD685DF1DB94102FB88F631 87B546184C81D6953BA2D749203FAC6520DFBC1898DD01D18F7A3ACA2FEAEE7C F013E36C83CE5B56A79FB90E3F3BED6CCBE8433C8A9699DC7CEDB60BC1534271 4CDFE08C178BDF612E4EB8FAD203B08EBF8D43F0762F09E1773715E75138E932 B291DBBEBDBF9269833A2605A3DD5C36804077C7A408A1055EFA2A1776E1F9DC 914C5965795508E5A65D185596A37BF91CF5D72FF27BB20FC9013F7EA391C892 8BC7C738413CA8D3FBEC8E1DFEAE2DD22E768B5D503A722A430DD6B88E69B2A9 1AC29D68B111019886484CCDC696C6A87F1F67462D3232C84F431588D38EFBAE D8C9D1418D81561F75632154173FA6ACB8A8CD8B7DB19B50A54A265C0CA7B0BC DFA77DB810691538ECD0D9615528F7DDD83CD80F97534C7B79ACB57E7DD37038 B0FDED1E2A80716D2687C4ED42669C280CC14A116FFD9218C0FA289D24A03E51 2DF267ABC9F9AB70CEA856A0A5EC28017174BF03E32ED851734DA4E20C282201 3090E1A218C3BF3B1AA3B28732A4D8F552E9A9163BCC6EA10F708972A8BBA763 9D489A1CC41FE78302CFA605583450FC7215E141AE43AAFFEB28C19411D5F5FF 2F43DE7454CE4F6AF1A4CD704E8EAFC757AB202753DDF31D8676730D737F4051 54A920003A0F336567F245356C6EDF40810B532AB5B475E116045C7798EFD152 D76F0B5AAFD5A581AEFDE044360CA79D5F6776D75BCDBCDA149C2CABE1CCD237 D1DD3C5166D7C3782540C9EFD1EB34B735C943A5CC7F7B804F92110A5AA95E7F 8AFFD2884BB7522392AE92A89913DCEA0F28B7B89A244C992A15D0B8881E6F37 D5B1ABB54B970B61DE93578A12D81E4CC21861BCB1D287CAC00502477850CC0D 0DDC29D2DE7B362703D7CB938DEB1A64935B5C07B25F589E3C2369E1CC12CE57 5BE15FADB9E65068B94B16242D3F0181DC92BF0B04C81716F4E197F04C17C568 416ED85007EF4CAB706BFC780F584633922547178C2D4AE60A8D2B7BC2628674 15D8AFEF916B6A2EAFB651697BB665A9D53DD0D0B569F8270C1E35C24DD5D2A6 90257BE909FD3F2FC2BA7EDDE451764CB87897823AFDB0D2109AEDCC5087362C 783D3276D3388841FFEFE969601A775CFC5AB41137D5E2B86F30C5A2DE485434 F372BFA764BA67A1B7F54BBD37FFA74A7A927C25CB63032C194F1CEF1D861829 2EBA90769496984256A7BD0F2A427B76964882486906BACCE372616088E59E34 603A6862A0AA2CF780DADBD2FEDD4C74FEEC3DD5E9DE299EA4FE3E60A2EFDF13 EEA265F9988A2DCEF04FC29753F88E30AB8AC6F11935D4863F57BC12D38EFDA5 CB566A8FCBB2211B58B4E99545EE6E1BD1478B3D4191799E3234132BCCF021C1 D4FCD08752F2BF8F4A2A05E5ABD47F163D95CF160CDCF82429A6BDB4F72D497A 8C3C4847EB6F91BDB98786FEC2150C0707D9F1D7E4FF61685EF0BEDA88765072 E29ADDCE776BDAB6808573E82ED790444457D1584004DA42192932A06ECC3F52 42EBC78FAD914F5A85E892FEF5EFD24D011C5F0A177D61688A7877B5EEA3F9BC 97DFE25CC815A67858FB7A11D40EC1538B1879051120FA3A55C089BB9090360A 5D4BA4A68C8F94D99142E37D619723534A00DC29AF3F1031A6B6F9B2B3CFE40F 9E538DCFFA89CDED0FE65BAACCD42EAF4AC81E0E3544C118A4223D87C9D82B4C E7F3D5DF5D04423A3F809B3806481D689AF165EC25FA0BBE9F052DCD8FEC161A 1491AF032649472B5ED62E74CAE799A744EBAFA9EAFD33B09BFEDAB70ECC45E1 461F22F533596013B865CE7C6B0DD363AD150085615C36F4012B0C2367898DEC 6367112417D2C477D1674C091F1B87575F0107DE1E6919A0B3E23089D6371942 93E2454C74599C144AFC5ED60AF6B27671821F08063FD47B6BB88D37B2D7074F D0CCA9AE060E99856D7612BCAAF9AA1F38879B07D1D7F568D872194A862C211A B959CA73B5042E1F024FF6C46D1CCB93179B8EF60B7C003FEF273F4A8BB18F3C F51F479543497B252548A219EF8C3643383362D6CB8D990415579589DB86E011 457535ED6E63B9D9ACC38959D6C68069DFB9D3F72A9B0E0707EC0D6B89A5CAD9 A8D74A1A1FB61788514579DD347B64681BC247B4E2391B92198BB9B7A16C8D5C C29B1F2EE9C5E2484D915EB6862034DEF5D7757588CD8F44EFF325293A8E2CAB 3D75CDF690359CD1BB95A8DBFCCCB815A5B1DB3B8C7EFC795D1F5B07A08C6E42 01C46FC11BCCE630AF5055380EAEF2BBE7B124FABD4702D0C620ABD776AEDE72 E7EE27B34B23CF701C3E305B3D06087658BA8443DF6B6530EE3D2F548463EFB9 3F86D99FEE1640753685D68ACAE49ABC661CD9408D49588161B2B8F5C9760B62 90EF02FCCE05EB43BDEE228B11A0F2A0E25AF8DEAA21ED34907094D57602F530 93B2FBF0BFEEE3AEB27E97D19AB6751A7D7091B58912EB954EEC6FC62CA1FEAB 3F878C9214BD5085D49ECD04D8A811047F9B1E3D9E23510BF03F4D2FCC62AD51 C36BB125B68D83A57CCD1B5C06876793C373FF0F201A83F3435CEB3A67C44048 65D41E0EDB005F84318BE1947C8C66D79F36DECA043975383524A20A3A71D703 613F52BBB49FE292871F5D87F18D24B4AB1D4492EC457856915A1DB3F13A6E6A 445A3CF286DDBFD282FFAA768C2B019C8C329B2E61EC3DCC8D16A5DC2D781C7E 0FF005826FA22BECE6978B61C4BE296D35546EC1D754A9A916C236BA6ABA545C A5ACB0C001365EEB32CA78B773C81EE63299CE728C349F28589D5DD4E9C3A81B 2EE0DA75AA8ED5C6B23FC630C5C3907BBBCD01C83D5F2D07E936AC4B09333C78 6004D36BB2943B4A5B644636C65753899448E04E967A7F48B186EAE079041782 C75552B617052ED972D7B6FC5520266582D1F487EB4EF1A3FBD1E0848C80BC20 066B7443434F1E2CBBDEBA68BBFBC8A38279178D4227821E8DFC21D0E2EBE901 F9B5A8040AD1132B312A6B0EE9D79B2922C972A24BDA1349A3564C3CC5F02E91 E3DB08FB2DA6DE7E255907B259FCF7E164154AB4D72CEC17F2E75085B0D1868A 8A58A959BA88E506D8BFC0A184EC7888EEF77C5E2B5BCD22ACC4E6B00B139783 E39069AFA2A37B2B4967AE46B9AD37659A3AE9A3DB12FEF79CB6AF18AA1D7A5C B2DFE741C367C6C4CA243309056EB3B1E108D9FB6EC8AD273DCD90F47FA5E2B1 AA7C4F9FDC46E6BDDBC9F1322F019F105BE7DBED29488F3CA28F9190095A552C CCF84B07899129672812CB1569716951E8F5725BED497AF4E30359682C293BD7 C6A56260826EED8D01A243CEB4E90F199AC0E13B169DD71031A34DCD0416F6E2 5F64628BE29EFEA5F2D1BB19E16801A3E1141031B26A8FCBE9A743200179E8D7 1119B503EB36E2948DF7FA999B9B727341FE50434ACE2C3C652CEBC5F6BFF03E 2A33576E534068DADDD223AF11E43B8C4BB5D1200B4254CCE5643CBD73398234 0C23EFF923ACA9153E65E63E37274D9BEBC952914026E0D661C41620027B5B3B 016EEC9C0442F1C3C59F8F38BEB118FEB9FCB2815BEA7763B5917A2C6F46949A 3D1D30605B4AE5D3298F4E96C2094D7B2AD397E4931CE82CC820928B215C70AE 5A48E61E9B457E869D2D99E34023553B90836C6A836791C8B8E817C57BAE9348 CBC2EC7A2438FAF387BAC96986380BD874C29EE03DA2C9783C84CDE58F15773C 15568C23154F885838BF4E8F7F9A0BE9E9480D0CE94E769EDA4AB3BDE1DD30CE B2A8B8ED3843CE96A201A423E39E3A45986537A3ADA499C61FC9F5D538A291CC F6CF384AF64B8E1348673CC6B317B02AB47A88C4BAA6F8FFA0FA674F600C0120 98314DEA39A7B5099F513283D572127EEA6439F9ADACCC981CA002E9E9052846 B5B6CDF69389187DF7BC8942408C71B87C1BDB0E500E9B2E4212FC21340045F3 E4C421BB9BE10E4C5802524500F4031AA36935F92D8DA29782A13D8D80AC6A57 D2ECF2235FBCF6E0488C4523B69448D4D6D2040F7204FA910F09973EE65502E6 4912276255CCC93F30471E517B2636754BFEB588A110BB0992A8AC423E83B22B 5591FF12D13011F30C5D8C6A3E53F72195C815AE0E613551D4A5BF7ADD5EE851 78459EFE389D7213812607C981F3F336D3872DC617E687E4C8639F5F58DF1B0D 9F8F89EA14EB56A0F6BB0B40F9E98EF7F1774F756E8A1249BDF018B7C106B6E5 E3DA46DC768B2BC9E6E0BFD0948F28FF5186B81A6D9ACA6F87979BE5B243819B C341C6B5F9FBD2709D5DD4514F55B16EF6C20A6DB1EEE8D06AC53D6A593596E3 5CFFF0EED18A48A8A94217F8F656E7FF0815C7A99DEAE190A46F6705FE75EA36 F4F40100E125A77EE96425FB83E4B470E37AB52CB7E12D57B52C5C856BC1B634 5A9FD75F12854EDEC5B49A4EB5A4506A073971BA96D86E8EFBE4AA55A80F08E4 F9FE6F7EAD3BFE9D6AD23CE23A42508B3D1F0C5C706C1EEBEECDE969D33880D1 DC553F44709645866F3BD1BCB8E768B0921A5EF72DCAACC194A56F970B363E20 6F427BB9F981224745489CFB750C01A3F0B7FA898E23A3FCEC7ACBF263A4CD6B 9BB07614881C937DC99A90AF67A9D7F98D90CB6BC7E68A35A198124F3C4ABBA1 B2166DAB62F411469AD070C81C11D79FD6B7698E45759695CBA05E7B7880DDB9 E4E2F989CBCEED6C0F3F164ADCC88967C29D59FADA20AF5FC2FEE18FD0201DE8 F49D96FE359741C7FA44FDF60BB354DA8116FD5B1910D5A26DA3693AF9EDAA68 21955C318B5BC1C0C020ECB1AFB1090F4584B6BB616BCE5FEF3C0FEEECC545D1 DE92766EC499E8BF2CE72DE9FE7611CAF4929E7B60DBF82175757080DCD053E3 E6E8AEE50B540A0C27BB02D4ECBD3EE8B7ADC3312FA31F6C2586DD03505FE6DA B462E28B67938BE4B6748B6C8C8A773D454C7D537A695EA8AF0D84D846CF3B27 D43D15B2263E8ECB5C3BDC91DC45A4E1A3E74DF11CFBB148472B9B320CAE6035 57DD58C6C05877AC98507619AF78FF76F8C31F04487D82D11CB645C8927D3421 0C9F889882086C4082B91D3737DC1222FCB6304CC8582628F84D7F88411DAF98 D2B31E67725F103EFA380555C09A9C01778A05EAD5549DC599CC377D38AE5300 5AC88D41BDD304409891F0162D3903075A4277813378ED1530310EE75A28EEE5 489BBED315CEE9928C012B9210E7DD4598996CD7A4A896DAE05724EC43FACD97 1511EE90285EDA062C703A602B14872122778BE37609FAA932EF0CE234BB4941 562C19702DBB1016FC64D60CE11C1BF1A5C4CA404CEC577A350C27F87CDBBCB9 29720680F80556201296302B64B82782C34DABC6222A36CBDEAC67306AC65870 B4CF79FBC80ECB5F99121058F1609E1EF924181D1A819602B5398845A70A5D6C 424E3A5C6BDA08FD2937871ED1D82C616F78D56C9307A62D654E2F41EA6CC1D9 595963C8F308A250B855DBDDAD4A608B9A1579756B70E643EE3850010C1D8B7D 35252716C4806A79BE13FE4CAD5269EA3B2134EF402478A5A0ED0A0D27AF1EED 36F9F96A058957C383A19015531250B07A63ADF11769031F86AC1925A0FEE3C9 ABA906808A9D8CFB58C3D09593ACC2B735B956E21B5C1139AB40CBC12F9C3C9F EAF0A42CA26A61424B047531F5C32E0A331960A08BBA8107608BAFC9DB2C76CC 974E9EDA3840ED36B798902674A27352645858730DFEB91DCD0C2EA4514D5D37 B4E4BBAE31D3F6282800B92D9B76AD55121D66F35BF1650B09F058D728ADF379 1D9F342FABFF3EC15D45B8580599C10D0F5E82A490BFF210B8439249A483BF18 64B6CE120278AFF67DAC16723E1A9056163215EA597947555C22C196D92A6C4D 2BAEBD772B7CD296EACCE2555DB375D7435A0AFE58D9C6BC8744DA241A1E5836 75C54C03CC4065A8FA402518FCE53BFFB202403352B6CFD49B83D50B1F1AECCE 2D03FDE4CA913E7CED2CA42BE3F96CBCAEE028E4F619C788CB5AC5436EC8D21E 26A3098D6F093002BFD7E71A8F3A024AC612A38759DE7F0CE54767C2122FC1E2 5EFF6B6A88CDE57566FC4CB6883FC070A0043E847A74307798346E0CDFEE858C 300E92C2AD0A625E2A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /UniqueID 5000798 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 45 /hyphen put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B1455867E510E9D8A0B83CB645BCABDCDBFCD51A4E12 60CFFEF0CCA548F654037D01CD631FC4E1F97B4F65DA9AE79D99F13A726E93DC BBB027B7D175FD17A704C4668F6F8428262959DACA9F8C687C923CFA053804C9 9B2005FA7E0F07D81E52A9A37AD5CEBA8EA63929093ED0DAB9F7C99C82A50E6C 6440387049A0C359218F5268C9A28F581783BB9D29E08772D7252FAFA6739687 22570150178893C418531769CB3D96F799BF1C6415820F96B6EFAB5344E82796 38A0DF66609F5EA332C1065274EC93027D264B84B52AA8AD82E13E2A41AED340 B240D1888CB89FBB748FD10B214773D466A44AA2AF44371CA8B9A4450DA76EDC 0167B4015A270B9983B89EFFA023A3DFFDE181B90C51D70557B0844362B0652A 6345C6EC83DFEFE099455232455943718297254186940D6305C96EE2B9E3E7C9 A622D25E0471AC31A8ED3AF8897BD19E322CFC3BD3860D8A0634081D9AF53A9D 84F4ED39D8127CBCAF9AD48E9CBD10A67A2CD0CF93D61A5D75A6CE175F267274 518107BE0ED6EEC098B1DE979EEDCAE669A52158C3CD36EE89D80ADC4F907F1F 37B37B4F60A8EAB65D657DFEDD87CBA6F4A23318443ED93027964BC327B5D1AE 2719395124A77EBB2410A97BAAF0B812498AE2C9B18C7002F7615017B2672079 1E990697B148E31DA869A76DAE831C1EDB349280DC2160C833DB3BA5C5ACA1CF CAB1DF362D0026E6AF6D29FC09D862DCDB1BA4B69E0914A7991019208F6736F2 0ED0AD5EB87DB341A65594255B7B73B9868EBBA57E019B49D6493CED5BE58691 277AE58E62CA726946CDE196ABD2050D0F7617AF39781684E43FB203E7BDD2E4 149F8DDCFC9BCDF09448C47FDF587388578AB9802528425BA2BC5F4AAAABE816 6F0E1839C0D53B5A71BFBB591ADB521BD4619A927C7C2439B577568F0D82B68E 6C1E341EECEC3EF7EC2DD576911172EB9AA85E4C66E37308CD8960E8D89AADF0 E5260E443B822A47B5069F752748F8CD0AA360AAD6E65F1488818636096CB526 9021C22375246E150218C84D032D6214AC83F4183DCA78C67FFD7FB64691FE35 0243DD0762127C3EAC0F9993418B73756D14BBF8991171DD5E558749242C4951 9D9BE86C662A5644BA7DD201BFD97E1C8328469226CDB427FC74ED8B7191FB8C A297F9F21F89669FCAE16C425C6B97A3C002C7B1D8ACBDD276A6A49126F674EF 9A66195A8C4078851F1B2A94ADC04CF74FDD53F695FD9A67EF434CE57110373F B22B1B2CC2A0BF17F9FB12DD143A32FF6F4F6287636FE1215AC6020D563EECB8 9129A0AFC39BF075EC71E49D71B2F47109088C973E0B8917DC453CC9D61FC8B2 861CB6D8A3C680CF7C6220F5C8532D80769EA928E4DC747018D7F94285B2965E 76EC3EEF7FD75E6D8DD03DDB4E09880CA3BDBDA99E70BE806805D0DFD22FF020 E7F192F968FF0C36DF271463CABCA0A9B5EDA91B4B06C1A73D186B1B594369E9 7E015363219BE2DA0AE8E3E08115899D367A5EDD5AE097E79D9645BC849096F7 FE0868AD5FEDAB9A81C00DB528E699A2FB2CB329FC68E740984B0C3F1D228A95 9AB66F292326D60127722373BB4A9FA9356E092D462A4EE944AFD1CF700F7870 8CB2A5532772E04039427165FAE1DDA583F9C852BC199A62297B04ACB45A0980 C91935E27A67D66630F85923428359B2979EE364DFFF05A5CBAD417C4A1DE05B 64E3A7D83E7423630B006001EBDF78C4725A9379DA084194C5BEAE8CEBC14619 57D71D7AD1980899523337EDA1BA949A447B9EBC0537BED02DC638BE8C266C6A 50C7E306A8F31F94F7C53DE72EBE9CB6BFAE296F15743A97187ADD3E3B1643D0 484D85DE8C9B8C841B5F5F11E9D52FAAE7ACCB3A4B107D0828F4DA6A2C223DF3 2FDA8F781AD806FDC412D2D2627C961A3483704A9FF0C2681B0BB17FCFD0B2A0 BE4DC3D3C4B13E8239C369C586E7F7EABA699FF81E3D9B8F8E26F5B01BF4785C FCA7954B37FC7C6834EFAC3FA714F11E8E32511F945E117220ECF50F04DA38FA 434F945FB07067D5215061D0456415C3A5B61D079F506919AAF44B84A2264538 F37E3B1DA9E8EE35BE937B19354B94AB63E4D37B9AAEFD6036D83FB7ECC36E34 3F02DC31372231452FFFCD772269CCB783DB8E06B5C5A094CD9422AE9AA4A6B2 7E69CC663FEB5247FE9AEE2A56F86D8AB28A3157DFAE1F927A19FA11D4C09FA5 515B4C75A9C71F3DD607D292912F2291AB2A49263F1328F0784B8E65A4F8A8C1 D5037989CBA8717BF0DE8567F2813DF72673041379A4C5BD74623B19E6AB7E3B A41EB7AD905120A5332E0F6ADA1E252E5C85EC79FF31EFC18D668CC80BB5C1E6 4CD2973CF6BE85E151C0E48E84EE1A0BE7B5DBB6D9C9B63B9923C351A5CEFF69 9A52B4797D345560CF865040444913A2E5F8F26F7A6C75F7DC3D72A4A873523A FD0F8FFC705D895B3E7BA879011C3B09A9EE88556861F8BE9834E82D5AB844E8 9701AF0B46B19B594ACD6F5ADFEB997BF4F16621221901B7E1E672867AC9ED16 C00BB166E84B9A81B3E7F330D34FCAAF1EFE1DFE3E40709AE2CDC28E3FE52ECB 8899EDE8ACCF05EB29834F8E2C28F87598568BE250241516F8E92D3CD33B9C80 31F355E315D6B5D86C9D8B535E9F2E2092DFFF39687CE11F32B9D7BB1AE71A13 C47A2176094AF078F49D1E9CC798B759E5E4E0B96051977A747B38F786D7D512 4929193826469DCFA0EBD9990773780F26A0E5392BBA495D5E71E68378D41184 ACC705CDD839B67BC5D3F5EE8EE3293CF4D0B09BE8E985AC2BB19EDFC1328A5E 3C19D2E33176989ED86098641F1B0D5D01BABC235A09AE8F8111E288CAAD3683 2BB25487385C4C29E9FB829291296056C4DC7DCA779FC799F06682961A968749 5DD1A86FA69E04C6BE9ABB3B6FB0FE49DBA05FF2C0107F72E761B066E1681F90 FD82D0BF8C2F6175B5E75B7ECDE48AB32DC5BC6FD4E335A151D5548CB2834A2F E33A9E00328A4120360D91021E025281AC62478A5BA411EDB8CCF015758CAAF9 0FC69B5DAD6FB9737480476844C7F8B624016552413E76057A9CD3D2591C56CF A70DD3209A0BE5302E03CB96E218B9659004D22E7DD05E3637C5830E63381A15 DA29461514AEED7BD1383725052B5B062DAE3A480D8A5A448EEFB93924130C68 AFCDE429B1E8A10623F3E67C66545C9AF2C31FEC84AE964033B0EB9ACBC60E04 B7F228A685F0B466B06934AC0599895426D26E384CFA7F4F32305857F4C36247 CC592FCA44AA1D091207D57C7B0A00B5608FC7082820035FDFA9BEB0BD0FD03B 548BC380C5AC95F6B6204CD64441711B1CC8A187C7BAB09E45BC0DFF84E02288 F2B799A30A0004A9F54125213131B4A2BB7A1AC8C6EA788998917029443A3771 209CCA27B4B2A328201828E03390AE656222CE2476398CE9A8B38079A124065C BFCB8A1D5C5DD43ED28857B6C6345B8D9B81AB948BA6E0F236EFBC386215F4AD DBEA92303ABEC5D9551A848C09C97C46778F03F831B1C60721CD0FFF0B2D1C28 890B5338A19926A5654D7C5D661A998E6EACDEC8B9248D650767E9802877EB31 8D4E9D7BC290A43DB053F2452AE78AC296138719B432F99573315C190BFAB12D E3FFEFE91E20643C2FD6057CD61F65AE2611B62539CA73DFD601EB411C53CCB8 7FBA0B4D77E46249B445341FC9CE4ECDC079EBD1671A0D2BC018172F46F046F6 9137EED70FEE7A29D49152E2964F7FD8A24AE8D52D40C26A61D90C5195AEC4A9 DA381536466509781766F21B2D52EE19877C9A9E54479128A97C60CAEF2C432B 722282F589CCB5E480BF6A480342E3C095980BBDD863A135DF4827EFE3A17A3D 2877614C580A0A41AF0F3A67E1E6099C6DA1A42C16877AB084155AA3A2E03318 F596DCA94225621F1C1E73BDB948A06B17FFB8F698F6777029E2FFCCD81B518E 69E106041AA0BDDFE910437E6F310573E2D42BE6DD1E62EC1760DDC1E2AA4E3A 8347B13206F20F7FAD14D12B349A9E9C30503271596A48B7F974C83CBAF4486C 8945F703387D97016D0F40E3A6624B74A96634607A7DD53214A8DD89FB51A763 93422516DB7C4C2E944CAA0A5ABB1ACEC9AAF1C8CC732AD293A63D03FA2D09FE FECE20CE80D64B76A6CB8FC203C4168C18EBD163162B7D16F15B5617BA4CA837 253A6183E37940429472BE6A252F3D24A4C0699DDA810A54BF4EF2AF1F05ED10 ABA4DF51BF0EFB5747D1AA747B84934E1BAD5775B50403046241C706AF831C23 86A20C96C5720D9941415C038FBC668D2EA0527060DB5E12BFA9E0BCC4499BEF 78DAE8D352358111B7D26EEB52E86FFC8E0456BA2F6B33C43CD1E7709D087991 F13B71F527D4804568118B3DB326396278C1F53C0484EDB6D5CA9A38C227F6AA BD0FDDA8073EE53ACD4E7EAA9BDE72236B0E58DE510AE4AEAC2313B54FC6E199 5CC699FA12C8CC1F126608B82E228482344A2D6323F643BB3B53E53238883F00 0358F81203C5661B24A5569BF6E498EB8FA10018CC4A5CA56CE38C681DF5FD7A 957C416EE99BD7DDED32B0A0282A7C7AB54367A1D362495C78AE9723C1E66CC6 777002EE0E290143EF572AD53F477617ADD4EE69D849DF67630044570624C18A D0FC24EBD36EF26F0C90167BE5425BEBFCFD0709BB1A1B92CD7B21190E78AA73 DD79BC55E77BE76B83E304EC7843609381D66A24588B2DA34F26F082E8AD12C1 8FC611DC96A30F33A9D2825CE04C46CDE63CB084A04C6ECF052871A644DFF238 6F73702470B7B252EB91EE2FC9DC8F521E3CBC492398EF00F7958EC9273FD9C6 E0AFD3A8A6A44231F14D5E6C2D7D573F0E8C4A4DAD1D32CC0E35B857F1A12A7F F5D2E57F05C53D6F36638581249F33B5383C21031B3FC3C975F95326C60084C6 01DA86BB781A9DB96D583A16D146AACFFAE34F5C0A97E5EE842153E5BF21CF8D E54E134DB7942A1724C1D0BF15EC0570DAE8D96595394A15B93E4111B8EEC96F 9BA1022DA26B26AAB58E8216185806A302CCF86997363831A69FA2AF27DEBA00 C8E35F6AFFAC00BD24FEFCC672EA6B042BAC6B1B6EE09F2F2650527AF8C30E62 1020A29C764B561C74A6CC483D8968102962DC2ABC515487BAE7D3E46CC74415 D7C24C3605C710E9859456EE0F9932BD5DCDBB7B60D21F0179C61CA5807B0BD7 994943C1436CF2C8F0DF2C07A5ACF3C8CCBEDEEAC3E2467061A29752BDAE7F58 7C6B0BF363E8F71CF825878A789DEF0EA91A8DC251D5DC912166F4370DF6E9CD E15A81BDBE2334563C17945BD691B1162E2F0DC7A0C14216E2CFEB34D4D74D94 6B88493A16E5CBF842F6F1E5367C19E0EEB59BB4EB57B7A366FEB7B1DBB23E87 F670885CA539D6F89910094CBED95EE2928BB2D4323688AD97E4CDB31CEEBB12 99171E652AB5DA554CAA8B00AEFB68012C31F3A7FCE54793095721CE7A0147C0 FD1FB417A2E22708292BF2EC9D019F18E79A22EFF4523AD070B108559E5FFAC6 D01480F85B25A482E2464A2457946654DB1580B28DC0301E7E816EF8698EE258 9E9643C98B6D127E8FC8007F65CCCC7E6352A31C65D47288A9D52315B13AC7DD FEDA7CFB858BC79B9159DD926DED61EB7DAD964C6A2919B29563D7B1E650F2BE 1AA01284E9E541FA9F5A0B4845DDCCD38A78E4AE70A53974DF507E57A15A9C99 83CF1EBC170A91F85945FEBEDF2642001DB6E41EE6B3AE4A1A353A62FC70562E 4E6E293FF671A25279930E1DB7897860271FFB50AEDF729CA23538B241E76302 1953355EF7901ECAB00C2A087EAF92E23BCDF88E0EBAA8D1FDE1049F878F705F 938B86B0415E7A3A52F8A98C747CB5BED198E7883535140788E7718E9448F490 5DD5D5F850AA909B26B742985E29F416A994DF15D85F46F3B1F6DB6142CB08CA 8068FBEF6C3E1BC787FB1F6F2BD7115732034F1D53AE8926A184114CDEF3554B B86F882F9207ED34F28D0736CAF1C042A539F2C9DC401BA31AEBAE3514331635 C9B610E1893CE5AA5BC47722D4516B921D47B379BC009088A47C9A7EC7587B38 4D11C7BF489298DC0D3860FC965E42A1757BD66336E737C6C102C0D9FA38483B 3DD4C5C46D9A898A38FB26C656264BAF0A4E2950604C0B99085EB379BAFB5CA6 8D261183220C536135CE78D6B38ED0CDF0EBA9DAC6672F1787C2F00A79E694D9 B2E395090338DE0B4293C38A8EF7BA0B1DE255222D9427F5C3FBC0FDD47797CD 156458D1A096E244FFFEB0616387ACB1DFDDBD9645E03DCA774E3D400C2104F1 CAF3BC68E0C5F62BDA81A9ABB76EDE006FC163B5FBD7692B9C0282F7290246F7 E9E8C45D53942061DD9F193C05075088389E1C67AD220D48C98C351209AD3196 B05FF25D2954DC9FC4BB31C8DD738D930C509B7F508E9FF533041A847F34FA2B 01FCDDF8FCFE3E5CF23C7AB317EA64CF410336B52BFE256BA60FF45C44FFB46A 93CEE3E86F52943BF2960E4F52CBB94407F8B3E0A2107963730497EBE8FE5B0D 82C2A821F2BBA66BC87696FD42107B0C0325C843183586BD218C83AA5C430FF8 D128FE72E306E97E14E8C55D1892F42F4827D140D7A9C384AA9856AB0B45AD18 93B5ADBE8FF79E6253484DFB86E612F11AD630C51081094B9AFFB0206A7F19FE 4D87FC9C35A82581140E78390495DDA00850F39701D9EE2364E845669C834CE1 4D4D137CA4C0F253CCDC5398F794F42C44C085EC8C8BC48C0C791E64D09EFD33 BDD35753513A61989A690DC6E0A19B83B0FD74F7AFE9BF26B0A51293BBA7C7C0 9989E41C3277C36DE6BD65DA2BF7990C9599BAD5459C2AF8350EF2EB25A41FE9 5F486DDFD2041EDD44B5DCE518F40021F501027F030ECA4BF2F94F4B4BE4547A FB3C43474BB34C5F717D6CEC6A03523AD585418943B99DC0AA3021D4C37A227B C0469D210FBB5D6F68367BF0BCB18480881182863DA0BF46BB13C3B2C4559323 F52C684A25BE57998E5A4C17EBF390D8CCCAD89274E51D621C2E0B050F1BA34F 561749074CDD7F0476A9FCA21C71490FD367749A3411A5EA69F1415B2F694AC7 BAD49471B35C349D71601FB5A718B27E8D60B951B48482F07B4967BAE49CC1B3 3482B03ACCADD4878928D154E13D04E97B7638ADB35910DD2F8C03268C54C501 9C6F5E435304D5D2AD6BF1066424BFC3EE5F1622F3CB008BEE546DCA7F127246 1317FA4988C8BB56B0A653CBCA90E1E673338B8AC72283B9C05CD3745A7BF6C6 7F3C924D5A9CE8FED15562298BD84E40D71C1F3E1698B5EF6371E0E73BF67D14 4CBCC7401545FC2D8F3665A2DFAF96CA84AF0E2C873D00CF9C3B25C736BCFE9E DC0691D30078B22F862B6570F4F05312DFA07DCEF662A5F07A335050696FB528 223A8CE16D37B9FBC01409650E70010C887DBF8659971FE8AE80BCF7EE8DE253 9E152307BA29CBDAEEBF41B6FD7179AADD8E3A6E1F280E4A4D706965FE0E17E2 3877BDC89E1D9390880FD8AC68B84389848B3D9EB1E5F4C890777E548988C697 16AEDC4DE63869782A3A7719FB3DC875C1F1ABC6AC83201A53FD65B887F286AF 245A7A3ABDAA76062A22E14B6B6F47FB0A56D45DCE7F02031CF9F6C2EC77621F 444FA6598A43F75C39CE8E9B1C980DF3F8E5A7DA2F71AC5177E9FF55D5B80633 9131318664FE513722357D5916F3A71E7784D8538998FAF4591A561926C73FEA 73D3DAC4F3436A16F1555D753993C4CE9CDFD5766AFEDCD71A2682274F838005 E1714D23510FF5021804A65D4250F45FEC02C5C77BB96CDA86BA8EA56BC6099D 7D78115787A7D23F0D56CB6E37FC20BD2DAAD00544065DB6A197B6DDD7694935 F55BD6D1BF653FAB2102F84EBE3DE4BF408C673896236B14C3019AF3378C31F0 6EC4AC9ECE82BEBC325B3BD4CE9DE1FED067E7965C7EC6CC59D2535980658F34 663E319CC48F9449E119C501092C69923CAA551283C97A9610E408F779CF89E8 521A5B4F737764310D2D706D1E33B047DE7F9EF3249BD867AD4EBAD6D141BFE3 3C3FC0BA5AC8213E01BC138B5801922F130B947C5055D2F3546C1264FA921956 2767BA09C4EB296EF96E78A4764FEC6E9D87A93681872452EDAD3AFB61F90688 54CC4030ECEDE68844E0D8C9D08F1FC2463F538CD9F59B7D1DAA6A5BED3AC138 FECFC60FA711A080905E1440F9819E6BDFE96DC7A27F5BCCB22AA35F5CF45C29 B84C97AD2B49490BB98CE34C1F9ACF861669F7ED2FC1C2137CFBD52882B8E660 81DBDCDB4D17BECA1F14862EE61D3AE3F772B13F0383F2EFCE3B51C10CA20FDD 3948FA5EC227CE64D4A13383ADEF0FD33FF33CC4DC07C5816BED85900433D0BA CB69F2DC68B0F832848D06E8FC48AF9B06A59D0BF9F5D07C3F73A5B0E3A6D4DF 77A74E5E74AAE5EDA6FD8D5481CBFEAA2DD3C6570193C88B951B8BD7A989C8ED DE73A95D65BC97AB55A5D4250C924F6F7A7B94084C24F72F841AA46FE7C3F5C5 A0D8A504399DFF335EEF06AE1C578588A622ED5EA23C179527B69D3CC9B6EC3E 3AB568281F1ECB624893A8D42392FADCB06FAB2A8676E805CF08C9D8CC74312B 53A1108A7BA2527DCA5080D9B2A4403A9F33F389F634EF2A4D50F9A39AEE4FAB 6E77555EE4241B578BC01B8AD5ECDE9C3FEFF4F46FB16358270A3C55D63B4022 1320C4EDA034AB6F79F125CD10BF0A57D25005F8445270C5F32FD15A00014373 B5342B79922DF741724E8D187C5281B57A64E93AE027AA1E6A6E30FEDD89408A 57019C2DF2789033534F7CB270C7A382E3D9EE4E5996604468E450F9E97C50B9 B2E02EB6EFFC1851413804F972E2AA795213298A23CD044B69D3AAA6C416A49E 4933D241493C212FE7314C149225B6EE11D7B4458168D4DA260B4F0E043FDAB3 CED87E3C10620BCBE7CF2E7466B1BD9F6E620FBFB631DFB4FEEF7636A17AE5E8 0DC5BC254BAC588F0F83FC132C9E5F876F26705097B4AD1D05A4F52929D1434E E123A49753CA9196D1C08322B54DFE3202C7A1C320ADC10A3C140CBD9B5A9DB1 FB270BF61F5DB27A8AE2D43E271ADD0AFA7BFA1CDE4FFA2E63E61DDC905A064D 79CF980FBEC055C345C62487B6107ABC365B2860C01AC82420D190A66237D262 A8DDD039461C88391A27FDCB26C04EB8D6861CA2223BBAF4883A27A7F72D03E2 4624D15B090344E6E5627D613B05465C632051701FC29CC4B4E50B33847773DA 8E66DCAB76D3DDE136C3694E42EEB74FF64A65E314EA6149BD3426A13ED87418 663F7B44A8D1B0BBCC331D5225BF2E59E5DC5E4A4E2667266AE1185C4466EE03 B64B154E4FD72E1A70A95C03F619E5E847EA810FED21A0CF7FB15009695EA943 BD3118E50E9CDE7A8E69102F7A4FF2AE3BF3E0ADB0514549A09EF7E53CEC8B9F 5CFED55323713C580F91A2A5E16114979BF44C4B508C60B175A78DAB998A637C A61D43286A02213B73067F2EA38F822F7420C6BAFA5CB3DF83CB7ED5E23AB4F5 57ED10B7B46E53676AC7146403360B81C020FFD274948F323DB81483808B0A1C D48B111C340E14A15EAC6C4DA4AEE1D046E2E6FBF879C195266E7A90FE0ABBEE 085F31CE8D1BCC06CC8D6F5398501B736BEC24C4642467F6AD53F817B737982B CC25798BA05AB460B49064EF106A15DAF3B2ED51717FD3EC49C5D79513FD5F14 D71A6842F269DC7365757F92682B03D6973214E0BB1D67408FFCF8B27AEAFB28 263563EAEF546624CB9059E9D960D6FE59E51128FDB6BF2370125D1ECE8D54C2 55F308A4AAF1A4B4990641483D57E10061C93B8B53C7E178B4F9A270901229C3 50CEF638CF8361D6FDB5ABD23CD05C101DF31A39DB88172DD7478198D55E8532 FE3C7937EEF35EE76DBE1996AC52E11D0EE3DA532DCFA4A5DD6B5B0BB8CB1A9C 605FAA474FCAD651A760311C125BEE60780C26D9753368D3D9F8164B64662081 84E596C83637ED5E725365F007E6AC708E2FEE2810FECB5DDE0772130F6B1BD3 9BF5819D36917EDFA4E8DFE9CE6A8FC67BB20291F5E04CB4CB8511F278326D68 574644D573D0D157FC70614F0E1FF1713F2894D7D683848F01C98AA570C4CD83 AA41E43F9DD9751234599CA7946A2B15B769348D2C5F5729DCF5CD6E5943E9B7 605D327DB48842F0FE5F10F2367AF50D52A65CD81336DD9E64961A550FCFBBD8 01DB2DDF5420C060C887B0D6BC1C3964AA08D283A2B28969D5DB67EF25143522 9441EE91A787C0370AF1C787FE033735E54656C24C8699E6DFA65592E78C8A9E 8400FB03F34730B46AD31517884FEC16123869EA135C1F3BE5B087782E8EA356 785926D5CD3DC14552372D1C8348A0F4DB60789647311A16C7CD803111B990EC FF4389AAE753C4EBB688A9B47AD5A34CC2EFD0754A7F22127C67398903DCC82D 91663A2EEDC68C1F935664765A7E22A6A89443C05FC41CA2E4650256B3FAB63A 24D02AFE2CAC1A99D63EC38D0AC684EE48225C49B79184D88AC2E54F829319B3 323F302FDBF47F431061395F1669CC593C7BC8B24ACBFF6DDF9F0148151B12B4 809D8586F4C2B37BD871B3C83370C310919D8ED713DA9847580A84390CDFA0F7 3B51BA7E43D5FFB974C9B09C2C5876A13015678C5F0BEA3B39B717D807604F15 DBB52E1FEADF5884C136CC5C311751FBD6B09026B94D7894A9FFEADDDF097E2F D0073026F57457D6BAAD83AF5AF808AB76A300A755C6B672A6537510968BB08D 4D10FE6E5AB246378DB361276DD60CA40F076F3A843D7999F92D544DA683001F 8DFE0D622242353E64B944230DD26046D752C2CAF15D3A74858C65E21136F0B5 0B7D088EA8EBCBF80B61FF104D8785E8C1A087C12320896EBC0C67E8B9712A44 2B176F03EF12652AC35E975BB17FF9BE61C2AFFAB4E20BC0A9DD1D188BFDDB50 7B19507C237E75DC3B984F1E901A03FAE2B39BCD2EB8670B1B0395BECD0F4CB9 57C60FB6628DAC59D8BFDEE0CB13D42BB07D6048B26F66FE23F4EB21C50F71F7 E43DF2D75A3A4CF66140C80BC5E90F29A865FD4FEFB1F83CA1C3086EC977492B 4D989B20469185C1BE7B0E0171D80707208D64CB9C849847E5F66B1AC998F387 CC6290DFF14214056EEF9D1D01CE27F9F3E3DF9C076C751C88EB75345F01714B 72416BDDC769AAC00AA63F581821C655943F21FEA1E0AF3BC738DC1734D86AAE CFF12F5795F9CA55EDB98BFFEA96566A7FB3ED2A012B4E6501CDCB96FC6B3A21 B90237B17DE670136C411D329BCEFA6AF3E121C4A6B132D6096F4C9EF3F91B07 1867D351D78E610B7CFFC6F66B0AD78D909667B07397CD6CFB7AC8B1D1E5B60E DAA2079DB71D295ED74443B7D0F0771B7BC2DB068E80219633E871354067BCB6 D4ED193ABDC40E27B3B824A70DA042C6F835910B880A18D879B003C06F62E9E8 CABB22B768E9401A389D98ECE5B2D4079D106D36E8CF8CB9A6C2300A8642F478 C2C6A74DABC1AEAABAF8C0F48368FA8A1B2F16EE1CA02DDF0ADBFFF8DD35079A FEA6620856E15785D15E48F6F69DD50B61CD25EA7B7254D520EFCBFDBF313E84 8BE5B09CD20F2387C61D89A2A7E60AD544C7C59E1B772B9D35B3DAAB3BCB7EDF 12D82FADE756AAE4288966134524F68702E0AAD2A61F08677EB96C95D2A35D7E F06DFF454FB5A11E1027E7170DF4E251F155EE76EC403B50CA3920B4539F5A31 BE3915DD802C1789FD665C1D5A0C5161B0D1476AA168360E35E5005A69C721F0 226DF8F0B79B1B0B2C048A30A06A0B85BEC10F536821FB91CE1590D774A64232 95D12D3FC681819619A206203D333D968C6299F06FA4E1380B9AF3DA2D284B75 BF7565D70568ADD0A0301A469D59E5DF6045C056DD3C08BEE977C43702D7EC40 2AF6E0A2D91DDCA9B7D92556523E9DC08E80BEDA5BD02841F15FA75973A34E17 3D623FB195E781871F0828EF8AC184779B5E36A52D018B7CBF4A47F5DD8C0D82 456A684800A8A6B1E323AB2ED161D2AA81F06348016062EF7A3D7C463EDB23EE C191191EEB0706C4EE51CB9AA3036B5037839AADC2A4DEAC772BC5D3191B22F6 9F3184AA395FF6E1242264FB781DF81005465660A14B20DCD62C5DA8AB18AE74 68EB116FA0B1E2004B95FAAF4FFCBC89CA1938EDEA1E8226C82BAAA987B1F08D DA63799218141E265D5D607CF07E8D147384F6A802C4A458776466C597BD7566 20AC0E6CEF3FC646DEA2C080C31285C4DB729A25482C036844612B3FDAD18F82 679F6CBCBE648F07D65F0087FAB090E6A0BDE29907BBFE861DBD3C99E7F82F0A EDC8BE776EFB3318E3C565478D98531E5603215625B5575D9188EAEE95AF90CF D9ED5822739415DBFAAB82CFFAB04807DB80DAB5C965D71F408915D908EC204C B24485B32E2200DD39A71DB6BC3E1F123F3ECD677157FD957692F14FD2C43363 817C8370907AD6667CCBD9D2F4764D33F7CD1FCCBDEE4560F27179B78472B5BC A50282DF88B0CB7BFC80E1F8F8F49085933D670EE8B1B451EAEBE4F0DF5744A5 E9A8A4038E3D438262F1E7A60EDBC3DCDEE3DD0D2C8D1A36D68C5E1868F9C976 A217D7849025ED43E219AC16C8F8D23A1D6AC83B1630CC357AE219BE6465B7C7 81B93A80195AC14673691AAD119111BA51F1EF28F737D807E2CB59BD1D1E0192 1F28C8EDC198A8DA3119ED57E1F2B7A6F967F2C7BDE230A96D95E040BC58E37F 4DA3C3444FBB1D6D4D37AD7B1D0B16448E900AD19CF0D41A3B476FD0C16D8093 5E716D11C46DAD7654BCC3B41760D997BC6FDC0C617B462717892C0221AE8531 98E2DB2676D925AE29A432B867B2F5F036D568FF241498326422F7B06D153D49 0178219AE56D8DDB2215D822B788B445B9DC1A7F09768BEEB28E91B052F17B29 3DE2F1349762766B65584064E2BA0E4336A493A9413CD4E0C1CF342CF6A53D23 663E4CD6A42DE20B12CF0127382F5A7E668801E2C7CAB3437D75597696158BD6 BB56D9847F37A9B0012E0CC7D8B7186BBAAC86F195566F47C3351243139F95E9 C0C5DF236D3472254C85A89A05C09F17EF888E319E0F05C01840149A7C8567F7 8D916203E835E9FE94D99F74992B042F5E3C10C8A7913106DC4572D46EA15DFF A0FA5E8CD87DE13957648B801F7A88A22344D54F8C433F801DBF7B15BA188297 5C774C499DD1B28E08472B699FE8FFD2F04BEA197B7D00D1A477376F080F92BA B722FA4CEF906D122A696C0434571DA152FA241C4C95B5990583FF7E9C0A3FFF A1B466AB96F189AB100B209159306A8F7373E3D101C057EA3047129176C11420 865B1B5B80EE64DBD1F223E80760339907C74639ABFB8719AEF71A192E3B666B 0249A9AB24A25E9290CF115268DDF13A7E1FA35185F3AC717C1984D0AF26630B 3A0BE89300012880916CBD34922CB8871C5D1E11C20FCD6EEB1198288F2DC794 3B9EBD1BE4BDDBC9CFDCFEE715A60A94EA71F69A888A859738FF175E3048054D E2AFAB12130E892256246D509EC2F0831F722DA32633ACE9F40190C0817D326D B46B8D91ED0DDEF1D245B257BC06E5CF75ABCC23448008C77D2065AD6D09F5DA A4C1A314C4C877774EE039FB439CBE8F7421B3D7C2B85E2B4B7208058FA24CD2 5ACB49DED05D20B6F4E6DC283379E93D1CFA152F2A4FB5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /UniqueID 5000828 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 103 /g put dup 105 /i put dup 110 /n put dup 114 /r put dup 115 /s put dup 116 /t put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F3CB6A4DCBBA655E3D6E27F87E6D8BE12A15D35E1E75 D36532B9C5000C06A58822444593A1038EEB23C7AFC9EEE3907DF8232322B09B 230015E014F1B4CEB866234266440AD3686E30ABD086CF9C0926E711F0757925 5DEB3D39C8E6D6F0C05A364A0DBF90F6E32CD28887F7E237E04093E07A94C973 462254BC1B1586AAC29FC7F15A80FB5993ED22E79A0FB5BF0F7362CFA24BB2F3 D4EF7D39E1902C53053C27E2AA49C4DE54A05AFB1AA6C7CCFBD9F72150DE259A BEBFCA5C7E828BE667E9C72222B84C4C79C2DEB885A69861DDB635B02814BAAD 9672A14E50D6A2A236AB35C6DCBFA1165F47F8F52B0787EB4B70BFE3CAA8B511 A630E8148A51C1394C7C321156CF52EE7BFE07B6C354CB65782464D2BE42C0D8 14EAFBE88DA3D5C90614F22E02626ABD343F3AC0A9698AE84CB97F1CC421D34F 98B69FF4C335B95F4222A8BAB77662B4A57A4B574265A679334D5EBCB073FF69 66BD9322B1C2253AE85AB38889B26761BA509C7F638C6CBC4BBCDBBBF4BFE1AE 855973129978F707C87462B67509FE6EEFB5E0949674C34768F001827F12F1BA 77AE866711077C30DC0E40C2D8A6EF4D85355E596E26B675E8D223D4E55C3580 5B79260E90985DA5E5B2F43DE7713D5E67080D2843D44A3585E078615BEA476C 88233D241D3A427F9B1AD26ECD535E46C137084A835CD816CCA936D0011C53E7 B33D5B50ED7BF3F41289F48E394BDC963EB1AFD6F14F0C146E0F13B03E76B389 8AD8E81E41F14D1682A113D8BA1482D9DDFDE71208AFC351B62E028C3D50BE01 FC9CD5D5F36E28DADB469201F41E9F39098B65E43FD1227A26F6FF812CE452F8 B5476C28FC1B1B3E5FEF3A3B94CD552E29288AB0A3ABCEAAEACBD2D5E9001579 738029B0E7F635C6C4962340187558084D9CD408EF7FDCE23F465AFCAA8EAAC4 8855BF64EC9BC75371A98095CB51BE7FF107E4C6C2107D887716F94563768073 B8C4238F51C1E63C279B23DE3DF51F656B90880333880515945253BE08582F17 8888FF4AB1EA0051CC41CDCF6C2D4B2F19C17FDF8A8664754A884EB6A4311C08 074B3CFC4E20FF71191E3C1648D2C38260315702E80A6425361E89CAE7108A3F C7FB9AD79D51427F8FAE45D1B02FA9083F76469C3378D3510246D81F10F3F48F 9CF6D65D2F32BA1B012BAD2FDD43CE879EBFE2E5DC3BEC2EF496DD2C3848D655 AAE8EB7970EF9F9A5AC6BF1C30B61659B7E8075DC32A70F10CBCAE6122894309 5A0250411E81644F995A049EEEB89045B21B7741FE92A75A72C8B0A406275099 8D134C8CB0CDFFE48353CE37202D9686FD7AF16500245B88C1C5B88E3DBC3B43 BFDA072390A1D964E90FEA605DC6AEC44AA1D700017FB1F41C13A2C37B83FB64 E63E895CE647A545FD5CA85463960331495B05929F57DC349736AF84A5687549 CD60A676FD984F0C50AFC2F783594DE38ADF685F5E2937C95B50D07C6316ABC0 8495EF319D914D65E08722DCE6A5762EDB87EA4AD820C359201059F56296F608 395942723FB853CB67F553F689BBFDF60264E90AE6A7FBF7AEF443A3F760B490 8C3513FCA7ECCA5A363D7F72C62DFB1773CF88D2D7E1F0FD606878C4F274F285 5A3EF87C541495A067498702A89961BEFC26B229894408B4BAD353FE06295037 9E55663FC427EAFBF65F616CE7A771421FCB22006B241CDB156035A428CFC241 C3FB0343C9C040CA92ABC487113E09074631B554366DAD01C246F4E082C64B7A E9BE7C172B606786E702BA6D036D10682AD61CD0776567E40D095756D3D02704 DA8492D994448DA3E66366CF2D712AC596DE587E976936D0B5B0E2F02724414B 5AA83C1B3F8EFE2C0DB65600DA12E74A4E6D474A985BE62E8B0E6C0AA9E739B7 D1A6359CB3AC713C743C7CDEE58649C4B6953E5671540BFB5FE80776FDA87A1C 3B3B342B7AE56D96AA8F18DFD6A8DA83196B9F5DA844E622A6717CBCDB06B0A7 70C750DE8AB3960E58BAA873F0C21D1157A2909231C41889BA6CFF45FC41F07E 9F56466016A3C7BB340FD6B6321A5CB19788A886D0B5909DEF40ECE8923E7EC5 CD3881FA4311C937C0572619DDEB4618EA621867B1B8556E73DB25F5E86C0D27 913B40450E452906B5528E86B0F08246B595BC6487543AC0B789D555594ED997 911B9D19F01232F69A42F99FFA56DC7DB66BD6B9158E32511F945E11724CF164 DAF26FF59D8B728188A609D1D868C2536150F333BDD1DBE091283F1884D320EF 908F80BBD8AA0C8BDFE625F34B41BDBB60DD9A6AB33298DBAF5224EB27D47B8F 69588EA13F414A6E6EF3924EB12BD7DFA8F9628C4924BB5C065A6A581B31D314 6AC33A670CAE923A46883115C5B26E3566D2811EB20634B14B53CF46E0C66F92 4D5906B71A17C8E38C1EDC9A45C0E3472E4BD49FBC8F8D1226C8A020932DAA0E 2FADA6A30D305693AB8E3E08897AF9EDCA74EA769AAA7D6824F01C3733E73214 2D9AA6EF67203CC27E3E7510D09015533CC5CBDF4A4F43761B5019433B615A95 F5D1FD30B1FF23619141C06772C69C0340C90443F192EFBC342D1ADEFCC125FC 4BCD134167487DAC3A1C5D18CB454EB3BE7F3DFE59BC6F349395066C17BAD3A9 94F54B393C29D53A3668370DC085A703FDC91930B0CD6F7FD4EC1F338D7DF701 E96536126691975CF22A54EB33D276E0F67FCBE601DDBC41BDC763D9EC78D386 51A7F72FF1338CB14A6F09670E67F472D6F57C6447F5C82305B56BFDEBC0B324 EA6FD3853C831681645B10C42B9165789D5FB6EE1BCE6B3E908AFC374688E720 5A3930D9918DB4189CCD63E6F4BD9ED18FC1F0F3E85D51E3615FBFA4F1E9A746 96B0F85B468281C142E707271350C29703F947292B191990DDC3A13A60A981DD FA1F8B9151C8CB3738AEE8FF27E3390404F5C96874BE9290AE811A35E0C4727C C7425896985C8324159C8A3A4576BDBC6EE02323CF51ACA4AFEE28A4AFE6344F 54C5064B9A124AD5E6B2B2CEE087768B97DA1468ABDE4FB32C632E1CC6BBF007 B8C36E1D3F7696415EF51B3EA956FB3612B12FAF9B511F9D6B29DDD7C89FF065 1752A6E7826C367ED149527468A9A8F3730DB8E6C7DA1EFD1BB1DD2693BB2421 52733EE07D56146CD064222CA4D765AE3A1AC8366538BCF0101BD74F7DA3D330 04575D95799244593ED3EA108FB8FCE3A8BC431416A6D60E27C9096444E8C225 3B838FD5B8C78ADD9B7DF7EFBA6A6A466CD243EFFDAF90ABFE82CF2B9E06DCF3 046758EFF0C168001B0AF208160B773913DEEAF4F167B0BCBA1EE3A51766C9B0 D3440CE0A46DC741B417E21502354EB5DC09B91231A5B79FBE4F80028C01B505 91866DE115685EA48FFF22ED898D8E64C7A9C9D8CB20451DEF0551610C6D1255 7DEB229CD4AA2C8F0AA989EE31BB94D940835BA22BBD1607C8944C84226F1F59 35248C1A4AA7F0AD631CB66B7A149AAC76044376FD050E367D993144111232DA DF4650BB5F45B791FB1221B54F88798E8619A3E82EA65C4A3DDD98A3E7D6B296 EA6739A97A0771E6270528213FC6F372DF4F1FBB80A47FF62FFD5287C9AA4F91 5064F8D3CE7B4C71156E4D21658D626B97E01711F123719E3DEA49CF8981DEDA CBDE3182826A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /UniqueID 5087402 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 110 /n put dup 111 /o put dup 112 /p put dup 115 /s put dup 117 /u put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB099C6CEA5044ABACC419174664232E97B29 ED32362D219AF109E5D8CA751EB1F9F31BDD08C93AE018E5269AC327FEC67D99 588CA80F068AEB94A7B943BAD5EC8D89C0B8D153B4345E77A5AD9B4522208A33 DA92CDF765B44123C6EBAA06D629EB9E8D0FDD29BFD60EB582CB369474767FE4 C0947F27DCFE0C8BD3CF5131E706E02ED136DBCE6363CB5CA637E08C3D832037 5AAA88B746B6D915EE72D7B458C55598DA6284F362D2DBF06C51DB50A9FFFB5E EBFD69D8D06AB0A6DF2D03F6E14FF290B1A1531109E43892B82B29395910021F A6EA74B8420A14FC189741ECF67F81686BD3C5559DAF75DF9FEF3346CCC35AC5 37A1E30C2602945974A2359EE3183A1AA568978F7732C35BE2B9224C27161748 515E5899B0387F0640DE1D712F390A8A026FC5C5A893E98F46B418B7B32BEF07 AD0EEA87737D929180B2BE697D0DFD46CF307E4FF76BC03492E66633F1357848 AA5A594EB8CC5913E76602C9CF8B7428F67965D5BAAA29BD6C978EF6B22B0BEF 4203B223443554971EFE558FD2F51D01B35D2194A1F6820293385CF12DC1ED73 79EA6082A30796D5EB72A67C5DB42A01F18CCBFEBE2F10B091C43C2CBACD8914 D665B340281C1EBF92249FBDAA577CB7769974B669DA0B74E822EE5DCF3A32D8 9C6714D8C82CE9BF3F16E6336094BC55381E73A96D45B7A70AE00F9CB8348E08 2A64E4B40B3BD0A653B423C5D3C1ECB62F5E05393FB8C9B0C44AB26F6BF796BF 5B51601913014ED708B97731A5642351ECD0F6CA9C06832E0BCD0055E9BA51CB 7242CD34AF0B75F3594AF9235C42B974074665C5B6C934B08E5C7F55638E7DB5 312BC541A8000E69A92ED6C63AA6485A50DFAA1DCF9B0DDAD23C43DF22F3000C 0CBF6F8F64F37BDF8F8DF321FD8F42C3FF774A388F9C033572B177A493814ECC BE19595AD285F11763857603EAE0D6AED509225CACBC49351E6BF1457BD11490 EDA1C3DD6DE8C7036464CF80FE562CDA51ED2EB92BBC79252FA79EAFE5E6BD4F DC16AB83B2C902A9027BA4AE30ABADFF6D513BEA850FF35416E76FE62D8E88DC 69F0C60921B33BA59FA3EDC8F532B47FF2A5E5680BEFCDAEA4474DFA2F8FD68F 74B5837A22984A7534A5321B83459E436AE4C498702EA14A77D3F78DAEA47BA0 1BE6CFAD95132683BCE0601F3EDDEFF5207FD5FF3CC9093ABD946CC7C1076DB9 4DAF08C682269CEE980159541D92FFE484B7440E5AC58D7707BAE579605D1EB6 42C396807AA13B3ACEDBF3A465CBD56F076FA9319E43907B6522904F92483537 6102700CEAA52EE916B80AA4C5F8C98C9AC9557F97784F075D37A83649D632F5 82A519507162012A671F3B4DBAC454D920606E9C87CADCAA1172A04E445A28A7 0FA9545E5FFD15302664B5C2C4F479C8C760C2A015F5F5CB51EC6C0260154D37 4A65B01E58B458ED0FEBBE74884C9DF7D50770153FB498E94F65475A5EA6A687 543DEA3156D3E5CEE23923120DF4D561D2C082F1F3BFC5039A1DFC1C9C3A328E 6F879AB979F2C177FBA357FD63F8CC21E8AF632D6B01A3AC3EA7DE91C17B8120 42E78A1AA2E04581B1C434A8147DBE81A87C73782DAF4BD5F309280FEA22DBAF 586AF386182364E45D7DEAFFA74E338E875B64B13CFC909B30E074D777D347ED 3A58A82D5F6A6E913054F9FABFDD9ABD8BBF54DC3480F3A90965A0081092714B D77604CC7275050DBCCC800BCD8E2BA540B18CB07AF27D66F8887A571685600F 3FF8C7A4966A8CF8CB25DE0495CD4E048999ECE6579AFA82D1644FE160E2D3F0 EE7CE89045332B172425D7D1443E8DD9043A12042ADD7EC106CB4DAAEAB310E5 85F93869A1C519DC0E3CF8F4C05030F0BF7054C5859A74ECE7D6FC5644C5B84A F3EDF0C4B2DCDD0D193599CB3CA00464A90AB55674F884001EC896726A9B374B 3A73AECDCBE06895E87FCE6267091C6CED0E779DEC36D8CC35184E00247AB90C 37161FFEE7CABFD7499859042093BCAE22D6B811FD16EFBC8AAE6283881C12CA 98E0792640063169F76B18EF543AFE7951E82EDB1DB9597F2F9C959B69943379 CC7F5BDBD1BAFF7C77AD8D504D5F17E1B7DFFC515AC237748D33FB6B9D7DD903 2F3E9768290A90A5FC5EA516A94C1885B17676D33CE4124CED1359E473305B02 03C28731C0FC52B18FC14360C9494FF2A86AEE929E4022ACB78C02ADD6174FD0 D35105BB00643F6560A9CCBB3E5CE2F79F0EB9BA774D27DC476867C991598380 F77CC0444500CF43DAB8D729B31EA5A3184F178F82622A8B711A9CA6A770971C 521C44969E814B44D8E1927C283E6A38B78D7C258630730EA463FEEEAB263838 2A517BA176D1C137AAE7430532FFB0FFCA8BF110DECB42B1A7A9457A9ECCABFA D6CC11CD925518857AAA8498CEF35377CF92FEA77C09E6AE25DB2D09F1E355BD 7F7F5C72A76315F3C2B6BEA1AF7BA5D0E8000778A0FB2C60FF677ADBA9156A11 A5B0B7AE92DB368571C040FD7A29C3DF384CCC29A0E9F40FA385630D23AC1E97 C15C06848761CC7D19D208BC115A6A2933056BCEB3717CE2488E86D0B0D6D276 22B2FF1E77FA719372BE62A5B6E10D3DFCA57DE70AE16C57718B86C58B6A7F3D C6DD45D7559F9A0ED8889E707FE7622997F2D573F7688621245E0FB3D34A08C6 40B72F4BDA0394CBF90735B9E6B3928AD56F50FEF9A5DA8B195008164EC03424 7F5317FB8157C33F6903FD6D4B4728F82F1B02046DA16F4285DF088E08A136FD 1366494E3F5AEBED4B48B3B9072BC811A700940FF4B2A51C0434ABF225B37BBF E4AB11F394332D66393420D4B843CAB6AAD9C32418CFE6A2A1260BF430E61176 4B1762E3C9F1727BA47AAE4C7589E7099A56F5E1CB6BD64C0C8D026ED60EAFBC BAD1476E98F5F12ED94BDB1E4B0D8FE9E36CF40DA6F5B2E1BC41EF5F7CB49825 EA5058FF7C49C5FA11F9F9F575AB4D8237FFC2573F94B695CBE9BC44A1BB26DD C6E55627BA16E5197CADA519CC7302DBE77F1FE4CF68C558D8F6E264 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /UniqueID 5087386 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A 60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E 71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 F1795501020D5FF0AD25584C1D47BE08ED6CE96278050BA67680A3B973613647 A93FAEC756FC253B3693FA2D6491B276EF45751EFB306961788E7C15297A5822 AFC5A2DABD0DBBFF0BE135267EA6B9D1B4E4760ED14895FFE1F8C3F564830001 EFA901B8442BD2D98561BAB9A0FD939E0F856E4D2EB04A9A4496704109B8A84C EA06AB0999427B3B1BE776004AE906D0F22159C051D88CF573A0255D99B56781 CF326CD11919AA40B096769CD6D0ADF3ACEC7957621084ACF21AF1F265416628 86B67FCBDE9370D4F5C6F5CC67EBB0A2727E074090DBCA459AFA1A4778AED4C9 AE5400775223E684BFCB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 53 /five put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C3ECC63492962B685F789DE4E796D1EE2F23B7C9F9A1656B85982FFAD6E2889C 7A667DB07ADDE075297F9E5808A98A05DA37D8F23C62115D1C08A331532770B1 E0C7B867A3C0DB7557FC8207C80F6E3717180E7D4F3D6B66C7406275A3206C80 4CAB4DA1D6EABF67CB1B8D2E34F25900927BABC9BB12685D7D153D0960692BF6 93BFCD7FD07158CECA1F10A5D75C8B02FB448147838490E80AFCBB1340C523C7 E247273704AF5EFBC8FE5526AE4159CCFE773D9AD5893EAFABB4C4259D5A5BE2 1B50B7377C8D45B3D39C45726F023EA52AFCD5C7FC6577880BEFBFF509D61A27 A58C80AAFD09CBB71E088D7C414275F6256511CF4FE9B3F3E74D8B491F2E775A 0495EC4C7C74092A337AF57451EC45DD1BE65EBB4F6F2AC454F58EDCC6B7AB68 0728EBB958A1D5AED112BD7193A3047D23C8AEEAC26C7FFC1E78386C0FA6BA73 DBD43E42A5C77201D4CD352EC3E9C496D2EA2BF7995852A50B29D3E2B16F9DE4 A769ECC02C227A8487D22BE8EBA57308B5992B9433D88982233FA0C895FEDFB9 10B63714A2FC8B9396F9D625DEC3240EB2AD54E3F08238AD01C665529018529F D078C2C287675D7315CA64E907C3D428ECF2F3283C5CCE860EC461D403251DC1 75E7ACB31F8958132F3D57AB5E34F05EA9F5042786C108E51B07635DC743D063 11AC9348380109216561C53A74F4C3D595426A1A86E9150D3A9EE3B09D7670CD D4F33FE94D92E8981FEAE708E978EBCE5A6D17B4A1D1D9161156127EC0AB5B6E 22B801EF92649437D89CE344D6E4C92F942AC811710D83589A03AA83B229D3CE 861D48CFA69CFB61BF3A6176FCE2E406CFB30ECBA8F9595CA3405C8F0FE23DAB A06D1300C586F8DBD775F22F2368B6714FAAE85868C9EB6F7548E63D6E08EAB8 B6764FEA41156D3FAF9BCFDC75113B8E73AA4F31F475BE491B45FAC197ADA3E1 57E0DFC05232D2596F7B69CBD593181849FCAD6FC6CE7217D6C6CAA328BF57F4 FBEE4E16CE5035383201CDE43EF601624AA1E9061821345302A49C06AF6B003F 14B42E6CE14F978F194F0502B7E610DC069791E52CE628CB5452BD6080C37F1B 0A7E8F6FB6C40329A70AA824616CE893FFECD2EDD9F8EFABC788BD415FF70F0B F584471FC7DFFCDB8B5653DCBE2D191E1BCDCB83FAEDE288C9FC34C6D35E6738 64F02C8A76BD7CAD08F318050E711C1687BB8C208C8ACA101470AB06D4975F82 65EC88DFB0CE26289E3840E8D3E7146C9A03F3CE9D6434B04B0310308C221E7B 8D8709D363DED43CA5FF1C8CE6CD13B5906236DDC75FF76DAB5A38765CADE270 3BB52ECACFCEDB884D1453E01A9653816ED352AAED96DE3D2894D64D1FE67656 57E1E7E51CC85CCA202965C0AB8DE87E729BE4D7F1C631B6DB9F0C901E83D397 791E4DAAE3B96B8C7AE44F70AAFEFA1E8FE0EE6A8E811652DBB48F2336AED844 3BFC598A713C268C171BA0331D042C38001800A4C8C647055A0B064DB18A9D3A AC9798AA8208FB2862002C164D0FCF6FC38B33F2AD7E48C29D349583E02248FD 61E03C71E686B96B4D4E0124EE78FA97082369335AAAD3429F5A961BF05A228F 11A453C158B731A5805EDA613947AE9FB40782C1077A71E5C95228916E337821 DCE43615341DA9FA362007D0ADDAF128E4E336E0DC8190C5CE43B13C27519FD6 8638AABF83D71DBA3B68D64A5E62CD663F9D79E56AABAB474EEBD3B4BC812DC5 165D4777602F732DCC2A342BBDBD3215CC7360DE6902096DADAC86D9C2D17F9C 23C68E22931E91FF5DB218AE2CA8EEF4F3FBE930FC47141078B466AB2C564FAB EA33AE882A540B806AB69CBD2A8E55D3C26BDF7A0FF87FB47A2839A2A7896502 47F1C68F882E38CA6994D57D8EBC8F15FF8E091E3F1C87CB83A65571ABC8BC42 F2D2E63D7D777AF0C2DD7E5BAF96F20E29D2F08BB1290FD43DCCB7C0C7F7B5FB BF67E1289014DA74C35B6734D3618489DB97DCDE55F701A63A70E3F59A3DDB7F C6A25976EC99019C6680BEB374214E92BB04498556D84BFE289BF1E02E07486E 91F9E5E5FAD11E65FA0356054F352E3489ED93DF3A241CA4A354EDF0C5858517 4C7B889D256FF8721CCC80D14C7B40B6CE001EB5EEFA0E2C991EFA6B80D1E6AB 19B86AEEDEAEA08876BE071C01D801489F0775E46460F6DBAAB3F2C2C7F95394 4CB70205A4CF5DF4CBCC45E8FCA893CCF96BFB8D08F2E439DD00EB511CA34AFE 22AE0ED77D48EA49EAC1E2EA81594EBEBD0539801393C118CA227A95968FCB1C 0AC1B08AC36A6CAC79E033E4283A38BAA3F3081D9AF5108E5185175C2D1CF1FA CCCBB612308A6A8ED21199759C04CCCCD3BEF1631AF6EBE4437900A3A581ADAA 3DEF3F55C84532F7A083D553E91A965A732388B1440116903A65EB8D151C7135 AB91DDBF69A6386B15C104868DB82ADB1FAAD169531A04FF73D89C8ED2356F8D 6E6EC6D1476B8345D340D8B6827760CEF6C191E8843F12F3772EED191E596728 80651E10D1B307DF76A84028EA7E64321F59B4EB9149B347248517A513750E53 E61A74BE0CAF41F18C7AA88EEEDE0ED3D5CD84754657A92669CC9BFDEFAB9CE8 11355329988AF84EF116B0E2F68451E799EDBA2007CDF555637E247F5E01D3EB CE40A4264D275863AB55D61C0533A4F49D64EEA8E05B2EB93366C64FCFF33D6B 718706490AE470C0F297A27F4C1A269A3E9B75E9EE8CBEFCC44FE045B62B66FD 47A2CDF0F19DC5210B65EECDA51DA371BE25DBABB2D13AB45F3B7BCAE838E26D B5319199372E44FD4BBE1C09AA6DB28CBA5D2EA7B9486B36BC7613A0F0246543 B3824B039C624E2A05E4D3E10656D67DB6D7E5B4C2EF7D50C3A6F64CB2F35563 43366F65963EA1EA05FDFEEF8A833B17DE2F15F77E8D1545EA1AF87EE6F50A85 ABF31B62E3BE1DD013BFB96A574738360B1A6C9F649FD44176F5D4FC98A44707 DCF14B274F902BC4580FF1E61176AAA10879A94A8BE4B7B8F191B2E624482DCA F73DBE465958ECE3902EB75059E17F3DCA96CB235B22332CB80FA23DC537231E 02A005794EE621B1814B612EA22ED5710DDBE8F6616F1D67F8909018DF3377FA D66C42BD2C15D185C7B9CE30E8B27E6A142E89E6EA90FC9A02A52F5615394448 923B60EE0CDB61683D6D6F786A20316B992FA8D6BA3738BB66CD55C1988F572E 627FB1ADE7B5D74A54A8AF5A621AEA30899A3B1D45D75252AC88A7933ED97847 B972F944716D8664A2E2E4BC4C28358583BD960AD45261866136E0A626C36842 93F9D95A23EC5721F7783BCEBCFF7433D1FB87E6FCE3F16FDEAE6A34EC296E4E BE5A6B30FBB47562B4D2E8A1B3FB5F2AB273CCA2B4F32353A51541FD44E76060 8889B4A454C42A159A0239B1E451987846DC2B5A1795DF53458AE0995EEA0521 867422FD27F7DE1F177F9DDE065C882EB1AE2ECCDD5646D93B7FC13379451C78 DA50030751DAE5776B8CB90DC02512BFA79391BF8B8BD3B7E893FDC359A36822 536F79289BA4D82FAF112AC06A4EE34C8499CC7AE22F3F5DF7E096FC1748D1F1 CEF00A20701BF1E476E19B8C904B4302D80D18F49E30DAAE2548EA21BCD8519D F1EF0D99125463A8E9B5E6943D1C18E1FD1DEA5073B6DDF91CC8D4FABDB5446D 73F0A0CFB4BF1C4C74BD32FC0E299E355F3FBDF6E0A75285E2EEEA66E4EB2513 995F1117FC751D55BB5B66CF37573A8A932A34AC29581D46D5AB5ED21A5C6AF7 938C400AB449B328285B211E54FB22F2620E1908DB3F3396F91C5A87C4C4726C C8A54D630E9F3D878592520AE5E5B53668BE3FC3D1E4D263FF5C6A84BB5D55C5 467BF67904172EF0CE6772759EB0F75D2403F8A0B40D6DB9F5D74C3A5FB6C30D D04B316A8B11B9611743BEA5CE92D8730E577B13B84283BBD970DF44BBB87A80 959D4303F25033127E48173120E3C3595D095843F2467A3473C498CEB9075A20 5DBB9F82DB7125B631139286D6C5633F94C4D5097EC8B7A8D096DFADDBC89C22 135440B7929C0724EB1FB9D8C9D5480E97BB4606EE6976418A96B42FB0556928 ECC51275CFA1D0ACBFFF46FC0B04CC70CF302406767C7FA493DF1EB10A5F9CEE B3AED9CD32F93D862FA2FFCADB986F443F088DAFA906D950D3257F24C64DFEEE C48CE69284FABA482D68FF726EB83685DD48052F130E18132954B3E44FD3E22F B39515841BEB0A79DAD72984C39DD4FB8C4FC508AFF5B45ECB4B23789F0EE906 9EABEB099EBC24D1393866FD9F4CC79BC57C87D5F027501DA894F237A87BB9FB B09039B4E9CA8E767319630FA2CE444EB878069DA89D36AE4D9CE4E7F8ECC5B0 06D85CF8ED33138F3F7D664E275D9041BA70C6CB4F9BF26EC2B9C5EF2BB9AA2A B5FF38657170B736D0A06F148970A385895F4C2F524A582CE0E224E778585652 7C186BA249BEE06DFC457D728C6226027B8F92A0DF24E7F9E3A7AAE93FDF6F87 E694DD95CCD0BC2504F3D9087210CE220862D34139D33EB505D90D39E7DEE3D9 4DAF699231D57B5AC3DC301B2DD84F6B64D3EACF5D0B690D0BB7007693A72DD7 949C98D8EB9035A0ECECD035CDC6E7B8A007BFD3EB3D8DFCD130158E473E636A 3D00F8A2183766C422991EA3FB1A6F5DC967EF9C8736FB190191154216B7AC75 F5E269CC1AB5FD8B1B8F1632E9496BF02CECAA66532357A0DB3AE03D98351FF7 0A2AC142089A891607B075019E60BBC5CDB1AB6E31DFECD6500C7D2BF2FC30DC F01AB50F30D846DE8324B6906A7B803B4B68E8D223CFE37DF3B7AF8134CC4F47 7A7480F7D15CF7C3325A323FE82020CC0612109A3CC42B711A2424CE5BE9D9A3 8580D6E18003D481215067B85309D01CF552CEE8A4CE229F1DF34AA051CD265C 844AEA21EA62B9D32B100F3E3D0356C7D6AB6BE4CC0DE6B38D60E53DE4B6DC74 FF8F6B829082ACC5F05107AA165879BC7B65A6AC4FD1469B1DBA07B8179A8715 B0A8876D79FC5BD11F18A5694141E1E1B253334550C08C45922AE297F392377E D572BC910D908FB5C9A82B081A615DA1A945373C5708913DF1350EC8CD823FB2 CFF9459187061FA975B9DE40B505BBA694E969B8FB91D5D70F7780CFC82E6EE2 6FC3728BF89897655750871CA945D71EC75327BEDECACFC93D54A83B5AFE42DF 8D4C73D376210A519E5D6809C8DCA265EFD1B78A4F79C2D5DE44DA2F941CB57B 710A1DF1383E15E19F75A6EA4E8160D3443AB76B043FFA545EDE8EAE35F9210F 04954B40EB0E8266080E03ADD276015A8266B3ABF13CE2DDD71C256E4A9FDEC8 CB6266083EE0FEECD91DB9871D482C74D78329E64F6A5DC107C0D5EB12F1FD94 A39B06987319791CEFAAFCE7FD20DCFB93040394103B6484BBF3EC67BEA74B35 4C0769F378A159CF556F099B2CB8812562182E131DB04E222FA8EFF0356F4053 A620904FB48262680E469F55C63DA2AA370AC91947714A4C395EB7AE43F1429D E65A7DF7D025289B9697360FD086AF88289EEEDA7037BACD1195FAD825935648 8026D3EA9A8482B40266A67066A5883C45E0A59D86E6B5E85EC5E9AAFA5AFECD 2A17591593AAC5E8194110F5C5105E6DBA0ACB7BC4A2D699D5C1A06B6995CD1E 80E988FFB362671B46BDD7015EF0A7448235B7735157147B765F5DDB701B597A 875F3521A1C8086B51866A7619F336ED12351862DD20FDE12FAF404E7BE5C680 DE0F61E7B727C4D74E1F2746456EB22A7BC3F87F3BC1CD528B80D9EE933F8774 34B5340FAA4B5AB5DBAE5CF08E93FA62070DF7E62E25CEBC9E71978280C67530 45741E8029ABC5986BA0FFD9C93F6E292EEC0FCA3BCFF7BBB72A4E359CE8ADCC 8DB71DB3DFC28F40040BA616190B7CB188DEA75CFCC51A29C0FA1370A2073C37 967546F898FA085A321699921AFA3C62EB4AECD5E1A38F798C7D2A298859A4DC 6254850B9DFDFBE4B3FACB7EF18D3665B519CDB7E237338C270A101519F5CF54 AFBCEC5FB113A76F513512EB30F9FF153DE81E6054E339E8B6882AE01DF6A152 BC35124ABC160369DD987E35A8FF34BED266BA5F47F457F7597C89B880956C65 4F2D85887702B5D844D95DAA978BC08F87039AA1C41FC2971BFD4A2E99618909 B14E3D8FAEA37D137898FC9E61132515E70E88333B66DCE1B50D7E73B29419F7 31DCB71CFACDCA26125EC8C31F5DA690E001122B94186395717CB3B6C205CC68 D73B036E086DB2150CEC23229BFACA0785AA219F4D0D01DB2C2C5508C7E004D1 DB633B1D96270004E5C61CCA0AF777054BD11CD3D2585BA67F788193052E3656 A6A0AF2BCB038543035A4136139CFCB07FEC241417AA42EFB8D8709FBB42E5B1 943CE84B1B236F2616E294978B7998DC56BFAE5849E49325AECB45F2E433CF98 79B1CDC7560D57DFD4EA193F7ED84F78C8A17FEBF46CBD2BCA1AB0740BF90733 1D2372D1B5C98385229072D5977275D827199BA3A1B4EF26D68C306A75C72A26 03EA819822023917473295767AA2CFEDE5E047943ED3E32879A84DCC81E275BC 94ECEB7B99B5C34C05A9FDF7D5808376163975DB899F48E8A8CF84740D67BA73 8993AAA68F6071992F0380CA8B863A24977BAF2D7088538E17489A2DF9F9A32C 565ED05120BB512E5D9128B121FB499064A45A2E0A28D80AD3B4551608D0BA1E 4AC96A2C30BBC76DFF9FD079311CA301EE8BF7F102D65DE54761D48A0897776D 82A8B3FB58A4519FAF442DD383E874D0AF2E6847624E01848846901A907295CC BDB23983E9FF6A9F07D1B465A551B952F2937A7907719CA93A5A656AC9458C15 F76588BA96987E6FC21269D171AA2515C26F5C55037EFE995669A6B83D729DF9 AA281A0531A677099EFE0C9232665F5E35D8BD361D524FF1197608D9F989E9D8 E3D8E8C7E1480CE21039CA03E0F9052C86240F4C90AB6DD6D171AAC77ED7292D 8F879A1B79E9D1552AB3E19DA983D1D5A950572612E4E6FDE9E69C71980463E3 C722C595B2A86827FC4C909590B584CBD7D3E24CDE36207E1AAFFE33B7860B61 CEE9FCA44D8524929D01E5AB1943E5750B1DD99E9AEB25C52853002EAE192A11 5F27FE0A63FB2FA3E73A0D9730F779027FA425EE4F235A48648EA4E0F5D19628 1F356E43716DF1A220B571D2A90AEC085DD46E2A5DF1AF183CF3E92E6461B270 D8DEEA934E4EEB8A64CB2C20D8F2EA26EE35348FCE5D39BC04067BA121BDC7BB 48191B0BBD4A202329F20B96C6679501E078B368328C1100C3082BE82353C0D6 306B1DCD86266BEF5A71D66781FC901B2527CA8DA8F76263C2C622FF2CC6ED9A 1EBAACEE27AA9D25D259B5891F92369E9379CEECA6BD66E2FA21A9BCF44DDE4A AE60DB1F2D197B01B7879DB5C9269011DE3B16C87FE72BA7DAB6D80304862FDD FDEB38D10ACB5A9D7B25F38E9954D25BFB12A2B8418168DF7636FF117FB35D21 C1F55FB01FC6110A9FD772EB2B8E1C2C35BD8563EA1649417136F66FFB4842CE 4D21A92A7B64A5FE1A318CE6318116ADF9D192C20CC096A492130ECBCF4FABC7 50C1E68562D86572A90D9E057F70E8B709998897D91C7EEBF937FA2AE51FC70F A05103BDF452897DCDFE1EDA5557C660840F432E24C14C7449FE02AC59174207 1F6223B96572D7AEE53DD4E360296622292CF73FEF83499155DF434D48B5C5A7 A4FD10323821591C2712E1C7058C22C9F80540023D18819409F08B2F01DE39BE 36C5AFB090097100D50B38254D60DAB4AD09809403283C234D2433BD523074F9 989D577E3C4BEABB44BEFBB16D501C8EDF23BC29C90C4C66EAD79DA27446F808 BA1FA9A0711D04EE3667923F05A70FA3D6C514581271D03250347E7C64A82DF0 47BFF057939397176F69447F3224620468948FD17D8E01ADFC71C5F898C40809 639725A04D51FD74E2CE327E7BBE8413269A4845ECA1B2ECEDEF15EFF612F89F AB02ED248DA47A6CFB73291ECDE8EB8F21B09934621109B5FB12A0004A664776 F0A7D13F8FA4AE3549FBA43E3D116ACD78EF378DA5AD57AA1ECF3865D6896A36 E6B323FD31D98395035F2B21BD1263CE8963DB0E66581716C489BEAC1EEC747A 38D54FF19BDD64FB6D29C60BA9FED7274F4338B9FD9497A7A5C990800BB19F85 C43BA6F4DD2934935F5AF4D0D467F5AE425DB20FA8C62661FEBF77CB8B1039F0 9DB57000EDB0ACCFCED5E10C27CE898F93F4789C7300A8431736B32B8B327BEE 5CFB1DC3305C8C5FAB9F301FE6900069D4802D7B20AEBF979C3FAFB222838B42 0789CED59803CEA24CB8E40B432A72BDDFBED38C1F5AF6B53E120BED34DB66E8 6CEB33AD20F76CA376DDB0CFCB41DEE81C8E5DDAAEED06216C71E988D3BDD49D 5A3A7A1C5A70E0EA117766451F27437C79193DAC7547FCA3234F8311768F3829 85767D0A573CCC48325704A30F55B21548209D89438187316067A1F6BF1CE0AC 85E725133837507C3BF78290140C2D51EA3444E6ACE981BE4D9B3923810E1417 E9668B180E5F843D71976F9F5ECEDEDD9C0D2DCDD416CC167C3F48165EC004B6 CE1113D64B375A59B41BA38FA35AFB458D467ADFED5E72F41A386540A3B68C99 F29836F918332BF171BE5DDD0C9EBF34A14DB5E4DAAB65F7EA0D2EA8E82B7AC8 01411A2E6F1F7620F2BE468EE935F5BFA9598A101EA265260A394B6948DB87B0 6CBD5DA5FF81E7034A0B0332C4F7A1A9332A26AF80978F0545C3CF847324A38E B9938E305C484BE9DBA023039DB4A5D1AFB139B3B7493A492B8A8511EB2A762E 95734FDF9B759B29A3224534034775C03C1100D8EBF3CE1B55748FEBC613E11E 5D418E4C9F1ABBC812450C808EABC5CEE95B59086CDF27A81583EB5E999831F2 1E6909788D689599D14A0D075785E50BA7174A30BFA0E4370A4EB59C3CE9BE46 A238ABFBB5E951A82881292CDD4362F2D1959C306EC4A4BE51FD2D4604C08E4B E4CA91C5B1E8FE430EBE9D981CD0066E8294201589C4989E5262A6867EEC3153 405A49080CD60053FCE99A84958209C94A0B36776BE153C72216C9AD3CFE3ECD 4B0409369DB51A7636D48243B526027043ADC287EE39662564D609A179A9F203 10C9E244E9150D3003F919A36807EE190D488F9D1B6B0FF9B2347F642697C669 DCEDFCD72AE48A6828A6875B5F629482BEBCECC17774EEA93BD31F6F11C6F5DE EE483B14BAE3D73F933C3629A894BD5080BBA757B24E3E9092B65764B2A8B614 8DBBBE9AF190EDBCF631C733A5FF8DB69B1C7EE0B2B7BF76BB921A85B40A07DA 65F1250C1D2F5F4873CD80AA44A68BA601F416F91701A3410AE272E7087B04ED 7A7A6159AF6067593BA6C8C2DB390FA2BF1C1BF264674B9D3248E0B6DB496E27 6E5CA50B01D847967C31AB3309731E77A3062F8872578CF37B8D0596B708384F FA3EA8D9EE4A73F696D9BAF8351E46D2E9C413EF5937C7297EE9E20E68F86C00 C35FF23DA9E343E1B86F324D4A95B1412ABA88EBC765EABAB90264973989A3AE 787268BF358DABBB74F04385ED7F430D88BD45A958763473C203893CB0F46774 01504F6ED812AFF4E35844791413A2380D1BBBCB6932BAC282643C7A18BF414E 5013111E69889FFD8BB711AF2172FBB317DCBB1C1FF12E5BFED589627F976891 9F53E7915C9B9FABA2B8D2D442B3EAF14BB73ACD5674EF76F03700437603C802 354E32C5B2CD02FC470533EE8CB6EBB5A83CFA3F1565C3F6341134EDAF4C7F8F 2D8FB57630AA264665D154CEBEFE4FAAF88AF6BA659EA31A4CA4FD688B2A51E5 D24E96A55373328287CF954F8727BD760E57EE2E8BDBACC29E5CAB8DA1B58A5E FD8416398145A5F0E50DF18C110B518BEF42E6954C3CCB1E18BBDE1E2B6FDC4E D7339D7326B8EC9A1D979367B1A9CDFFCD34029404A018A1E42BE7347DC05D93 15BDF40ECE8318EB9D25DA7216C4CA8994D091A0DE6E5F189B05E4AE951C6526 AC9113A0A25EAB299108C3A2487187FB78DA98338CA7B9A3F74AE32D61C73533 2C4E1233495DA9C0D3471C14E2AB780128DE8CC99D14E2C4000403766DCA344E E09A4D796BE9085E4DC06838BA17481E0ED70B5DD973C64B7311E47420E3F750 DA46A3E7FF1B2300F2E78AE703B83C14213EBEA42AD7DCE3F0523883383D6E04 5C2E597138AFB94098EE8621B2E5EE5315C3163A5EAD6278B65B88C497D2A2ED 71660428739FB1E9A3E2DC11FD250E6EF346AA43309480AD7F3777EE5AC41042 1C395F67D61726B397120C859923FCFD36BD4A86C589AC3A9E125C8CCFBEF7C9 A49C3319D069844B2F2BAF76E916805C5EA06B90B3382701200A0CB279BB4693 57922CBE713140AAA954CA7AAAB76AEC2E33A9A0048C9EDC101A8CBDC342CA04 449DF8AA026885F767D45CDEA73F405AE7ECD1E118CBDE17B7F9F109F36E410C E4486A1C7FE40C214B4AD7A715A003FA496686BAA306AA3F97BD49B512DE1EFB 3D5A9A8DD33FB117121B04D8DF25F8634499B54510D394310A5117666DACC963 2DD41B688F2CFC87750A45BE221979075AAD06FDCFF45044FC09DFE41F3DED63 42D2F296D337C1DFF439FED0659652CA4500815C7172686E0B4D1C410E9C451E 1DDD94BE8BD441D09C6D8E898A0DD102135C854816E66C6E79FE476744CCE245 8CABDD95A91D03EFF4FB5CBA2D8D0D97313E5EB3B923730E72C6E1B04E976DE3 F76B5DB805E9B9FACB88A7F175A33A517C2C2183DD53F4D15F2192ADB4E524EA DB1CBB45CBB0A40A36D1D685B16735C90EE914BEC1CBFC2683532F1D3B44E0B2 F98725D89F233AC99AB45891D383C3D7276C8239494EADAF676900F089E37101 7D3F958A07A74CC7455B55C0310CE104700F674AC222B9E5E4351D4F0510E2E2 720AB917341BF9FF91D095F22EEB64AABE29367300AD0EC3F7BC12A385824380 AAF5D2A4DD4026324E41D8299DE8A5A905A621DACB611ED1CC9E855039EBA0C9 CCE46F79F36F97D3E15667B12611AADCB2CE1BACD56248E3CAA720DE09045AEB 5F70674EADD8442734E302C0CDAD357F02A0813DA689E031C3B04CC545D3128E FEAB24F2A30813BFF909511E0F8A221633943E4AEEE93D62D653AC0290B8B6EA C086BD0C97F800C3522C59E39AFFEF43EA20C8E833E842B85804B94C8DDAF027 727337A4AAC37B089F196142317C4215C533A6E5D42CAB2CD22FB9C4719D03DA 599B6DD3F11C6C94EDC46EFF4E5D0531D63BD97EEEFA8ADE254E23002D4D034D 64DE4FBAE45CC5CDE42BE8E8F17E585B3C0D5C65D4BA1AA413171A02F4115D2D 7FDA0098104AEEE3FC1EA2C2AADDEA317AF0D73C74147DA6115B6D91ECD8E66F 8107525A506B277AFCE3023040BF2D69585927081BC5306B4829FE4BFF531793 9336A51846CD02E346BFB7334D2DE477C13087E110FF8B168E8EB510CB6DC834 7630BFFFB5557F43071144661DADF55FCA0C106164D208FBA2FD762FBD606E6A 7835A82103FA89231484FA9C9E4AE0F426D3EB2D3E519E79E39FA70871E3D329 ACBD432BE3D4BB05813C5F7350AE1712FEAF9937B76AC683D52F702A6D2B578E B1CDA48A37F09083C2B38C0AD334DA683ED3CA881B626B0611B68BC5F42F4BD2 FA1213AA8B75FA3002DE7E87D6C091891D6494838F533970BD62AEED67CF2C7F 39466438C53CF548D7D86563500E7D8D0C0CEE994A2C1A992E31F6A8D32F1D96 F4F69E28C3F7A4B92A9F7E5467EE2B115AF8F3E8539203926A84F09DB1AA1E5F ACE1A907CB2C6C89B65BE9DACA624CD10442B189FE49331E87B1714C1F8BCF57 7C1656D7EBA4D8CD8568CD948FE85A7ED797796256818A2963D37AACD082E405 7BE8562CE78A54FA6C08755DFA26DDCC4669DE91AFDD1073542EF1FB04813BB9 42334FD59AC8167F05B1B963F4DDDDBF7CF177C7B1E181E28348AB12E083AE0A 7DF434EBE4960070AF2655C63B1F9114D3EA51B7BFF6F70F756406002FA2421F 56BD35B9F0F399CA89102FC688FE8690ECE6FE9078920726F5325740F9F15591 B27312E42881D173ACD0E6752574F135F7DE5CE5CD376E6E1EBC98468DDA9FBF 65A0A0F24E1157BDCB90A0F00F5DF9FE167B83D7460558BDB3E6B51A9EA1AEDE 83E7C462522236BFD2EB75E0A1743B59C5CD781130C3450908BB9309C790B81A 726A5DFFA753589C05AE88E5B0AAB069FDB597ED006DF7499DD73689205A7B06 0D00CD4285C9254C4671F6746BD385AB76E376D2C8F9CA89523E0FCCAC1AFE2F D21D3541474D46EE3756FE9846C6D27BEFF024487A0B68895E14BDD5EC5838C3 B18276B88DE43E949FD14C65AED312B831B120FFB0D11816CD1B11F285496F47 C4F06AB615C651F3B0CEC80D098A58D3D6903A243F1B64E2C1DE434676948F2E F120F94DFEC20C1E028CB0DEA2F9B856F73BA9F92E7907BF360D288262CD8D21 0DF5C898EFD5115C486ED15F346BECF6AA2BA4E59DC3F860F5DB383E235E0AD3 8A656A2311770ED4B902642BD30E97BD60DB26102E2895ACD22F67AD22C6F0E7 912DD49F6FAEDFA568702D57D86BC176907D08B53280D1BD1093FE696EFFC553 D8E20CB6C5871A3BF7F93125CFC5084250C3EFA20150F9AFAEDDC014EAF973DA 1C934EF9A0E2146448F922FC2FEFC8D893C90547E076767ED9428B0D96DEC3E6 82B678E9F5B7F7FC77D419705DF05CF6F17E8F3636E0E51CB00CFACE3DDB1173 1BFC5B5D81EEF8C28D59DE074A7A63F45EE061106B837B3933F36C44BFAB49FB A61C1C6F5EC9CEDC870D226DD47D576D51446E61E0A9A9E1CAA5E94B08560766 DC3248AB4B788D13F495C6A7EE9DF3ED79EA1EF6B1BA6E3B3F00CCDF619F06EF 502C07F28171F5F93E65144504AE40EF7451662297926F87F1859DB516931484 BD3D7DB2BE1F192678681FB18F22B6544E9B51928848F4E635FD79F309FCA94C C4FB2E04AE984EE0AA48C54F4A79F7180D2B158F31ADAC46B6827509DA86ECF6 5872099655FA5A7C9DFA06C4FCD33CC12384D0EE1F646FA74D14DDEF8F2321AE 966D7EFED0DF0FADDC8762BB671761CB643D32393CB2E201537C5D87D9E44BB3 AE88232BB580669A5EB79669FBF2B116F9845CB9AFA54A8C852F572FDE1176E4 56F650BB69AA195F6315D0EAF88ED671B5B26EAF84F4A59A573D0F649948253E C51D3B4CB623B63D0A4B513DA7188BC08865DFBD7C78BB0DA0A5FC8D7910D07B 07A4737B05E41FE3FF9CFE5BD35A9CA84E2107A0C47FABAC9DBE051F0C9CDB8F 2C98B80C7A945743B0A87CC75C7E211D33F68FBA841D97D5D25433B14211FDEF 005D470B1E5C29A8B3110C0ECAE381BC8CFE5C52D59454871B0411166EFDB76D 09C3C6F54A0FED793E0B19DB23A48B99A5583A172987685243EEBD56E31C5E77 1623F16CE8F1D822221276B5210AECC885E83167E1E66446A2681A88BB40EF6E 82073899AD81700F9230ED476E90B38AB6815083C254E657ABD8761ECD173870 98417DA59075CE7788E3B279D89DC565746F120208E593CEA999E6F40370231A 644738834021ABB4DD630B523FD969A5D79D8034D70C5625C14B8B70F26447EA 7EADEB97E2294414560FE2359B8C0F3E8E2BE47E0D79AB32837AD9155F2E4A1A 27129BD9CC0E2F6E72EE7E43BDBC49F44388434096CE46A8367850BB70059308 CDDB676CA17E963F6073B19AAEE7E12C76D6165564DEDFEB517102655293A942 DD67998256EEC2D21A844181ECC8DFD7A9FF26C64854B1AF3F304D09E264B18A 8F26004866D01BCB4A823FDC800C45740A543A036EE4785ED09CDE35F7C6E579 9FD4C16E2089FA7C22C7C7A5296B165689D2C26B4D64DCEC325FB1ED3BDF3F90 9B90E84072EE1F2AFA0D61E7043C22749CC71E561BFB0D20E7135EEF7B2DE8FC 2C2AEE15F8A17E739E489F9001A063F452B899EA26734F78ACA3964077BBD523 538660F290A2656966B6BB9036E3E63674847E35E02E54E8ABF1CA3C31807CCB 16A349CFF5DC7CB54934F12890E3CA0B9D76B692E7714035F3A64A6A877DE24F A42D526B7D32C480D44215610EB46E17C295C70D6D105EC0240D36E0B3C29DBE 76269CD8A66DE579C88353547EDCAD1FFF1F95D76E0923A24FC3A9F9C2A7D910 B8FB62163DE7A02B3A919C06FC23F1AEA27E338BEE68D0297E8281EC47320D01 CD201378228D6860C71EAEE0900BF462B701E57909F02824D1424C444B9D6F50 0229794506BCC56B503293BC69B3C6F28CA4C816A8F2AA2992253A408A822D1A 952079FD015DD41F3C93D9F0FF6EEEDF50C1629A76B0D03BA0037845ED1DC89E 53335C804C71AB80D025E49F4313E797ECB16C7F39B963476A5C57256F083CE7 FA22C560B68DC95691724A56632484BE7F0DCC403E915EC2B115EEAF3F8B7F1D D1460DA180355E3BD2DF1D459A179317B5781D0C86D9245B62B159F1EF46D3A2 94AE78E79A69302C17520FED89AC397304BE804CC2D620523FE203B4935E0A08 F843C562D352CBE1202538E0BC63CD3CDECD197989CE794BAE7E0FD9EB5A8333 827FDA2233058977663741CED6E55E4E5A5AE4F4E6CB57F07E1D4579D18C178A 49428C7CECAFA604C8C64F6A00FC9D6CC34AEF674672329279FA7F3DE0BF959E 8B8B4E9EEC0F406A91C51E62C583FA54F391F5177FE1E29F6A81FD3E98B4D80C 9F1289FF4B55FB319FDED440F59F421F062E6554ADCD00600C4DCCCA97F32890 49CA92115DD0C894F37FBDE59FBC8510F2D6901CECB70268982D49A47C7B037B F55446CA03BD401B4826BFCE26D55C80337D3F2B10DE20AE6B7563D61778992E CEEFC6515DD496AC6209BFD515FAF56B42D331C0981F4FDA4A033B407008A4C5 034E4BAB5F833148164F563A9FE8D8F7B6E9D6CCF780FA857149E2E610497C37 5997969165907BBA244FF5679BFC346A2DEA84F66C046D613192C06D35A5A372 9C281B8696DFEAFA164E0F2C86FCC43783AB3CF735F013488F40CB1EBCED4DB5 1B892E6FEB72A60CB79A529528E20DCE7AD6C983B1E0AD8482581C10C5923466 485B25BD384555BE05AA2A1C9A449A651357564CE0D8293CACA18C8B520DB97D EDC0BC13AE0A5C709B4523CD32CE0B6C3A43A684384E98CD042AA39CE119983C 08B789000E3D887B76048AFFE58FC01E50359EDA5D579B4A99BE63E027FAA499 FD3637CD7EE3DB8FAC7A7B49EAF466A258786257FA59E9DAB9DECBEAC369D7BE C0D40B594D973B17885248C445426905AB12B617FD88E09E80AD8E3A6EDD5AD7 4F184B6929B879463ADA22B7E42DB8801B842D433575B03DDD0FAF179EE4683B D1080F2C9A08FA1DCEC4862D18ABB3204E84754B44E7CAD9831A67235DE21FFC 6AB91313F29574062015729C03204D895014DD676BD2BF94292F3C1A79841C08 92D804BDE4740AC1388896E0C83F3BB8E93DE19E9E2088140B3EFF9AB00799AA BEF0D6208DC9435106F4E160E2C172A39670EE21C887B82AE4E0B5E8F3C556C2 C01353F5BD0D6E7D1B675C5C15841895863217F32476B02EC0E8909FE1D5E443 78DD61A1DB513FFF4997F22F3A9B03F0A645A152F00DE39BAFFE9F338CA87E8D 0ADB94F94532A807C65B095001A83E03780C61F8C6D175F9405987E7431636E1 9BC9CEA79500EB0AFD5292A50C34B7ED0C6FEE3E395A9EC246CA7851E979F086 EAE04235C25605B4ED0286C746FC0099CCC04961C0B7D8A1ADD5A50E48EAC5EF 0E1000C77ED1BFAA3210AB496B2B9C1AD5A197B2EB435F2FD01DD5FD39111CD1 D496210BB93C418A64B3476D7FD53900AC2F689CB16BEF3D60A93A171B216403 1D611A41408881AA571B936726E7D703A0D8F2D0BE3E32882EB78150A9BA761A 6C7F1212FD52512C56C42865D910423EFF3EEDE621466A59E0104BF420847F6B B927BB31090FFCDEEC85E729B99D78BF42906A2986129A933C2493BB216EF00F 60EF04214F0B5118DA3A2738B9A55FE06DB2AE5A2F535D095CD138545B7A0A4F A1F80FA197317253879321A5E78D3C6BCF487B6B242F1C6F1FBBDDE5D9BCB191 9DDBC945E0A5AB2F752AC425F421A92B26E87C6945ED317B36173EFBCDF0B67C 89345B03640A2E59CECFB8F351948121BCA6D196FDE5601C7D545EEF9A0B8B91 590F8712FBB88A87EBA115C565D6B3B9EFD53545F079B60D9E833F41DA40D176 5328B8891A5CB1AB952FC77A93BB871EF8A17C79045BEDD65A9B7893FBAE62B2 90EEC774E889C7A02496FBA6C1FD8E42A35E37DF49A2B914CCF4726C985A306F D8C83FCC6BB9EA66A193E350458C52592C2B16AA812628DD8FB16A4AC9897BD9 CF1BFBFAC5BDEFA1E856FB2B130794F44C039C01DBECB2086F2B6B367603EEDC 2025844C5F492CE76052B2B6D69F805BEB62C5539DDB1CD5D861CE15E1200B25 ED83F8D7CB26C3401BC30CBD2AE8CF0221FAE4B1884FC4CBC1F0ED39ABB25593 957FE70694E6AF2FD8748AA4396DF453B587C6A31522A6F52F1E9DC1953EA4E0 A2D0689DE808E32BD30D1D7DDEE920D1F5B859B8381F7AC8C543DE6C0A477F6C 7D27AA483A9ECF4EB9BB2A455C664538B9D7B6D7EB3BCBC7825BE1C0B3541572 429E73EE263BBAD84659F47EA900CE69F8F5174AAA951A8B710B86F7D1648CC4 D16587DC76196A5391062DC4EDEA970590722EF6C40E1BDB1282A7B6BF4FEBD0 313257B86A5573E362D0BF6480703F27613B787B0A939737252B558E22FB3F07 E3D41D0DE9FE12B2FB8E38F9968C3A542579CA6C36943A162164EA3B27748D75 354223F4AA01E2FED87A70C8C2A099B1EB1601AD93A025B58658CCC3C5E1E104 CB33771CC91BFCBDE5F90BEC75BBAABBF5FAB63FD631086FE97CD3654A5415D5 13B9EF1C38B243EB96B27146EEA7CDC8E17C74676F43BCA3D0FA31A576581C2C 1F232E73DF1544DA33AB3D45654D54C890025CC17E33989E875FAABE340CE6FF F5F5C5844D37F5B38BE18F29ECC4E390AD9BD270F9B6368FB038D9A9D9168BB0 0BC3D6156AD8D4099EE878A762B7D725093DBA56C9D6B88152BEADFD7D0AB6E1 D14B487A609D37BB815280A5F5EBD105E6AD2773D00CF996BC39C4965E08791E CDF69FB205A8EE0CEAD9145DAFA7A2B028395D938AFDFFEF2EE37FCA8A948216 B85AC1B885D4AA9A6AC8203CAAA7716573D061407DD2B1DDF1CD6026EFDBC1D3 61B5C61371A248DBE267CDAAD1F0CF3E66BA16CC47A41CB5C49DDBEE015CA0B1 7B2D0201374A35EB3EE70EAEEE44078DC8CE4F516DDEF10A61F500DFFC8C02C1 337E2DA9EDD7F3FF4937D0999572E6BFFF9FA3F2FDB01308DE7D6FB8D0A67E00 F4284882F2043063C03DE5CA05F97A36260FEB8C4BE95DE9F2DF7D2CA572DB0D 478BCA15D32BD8A95109DB5F92B318AB831168A4150A437679076D7CFE5EACCC 14E866A65FEB2EBCBE51E792F5A644BDC6AB9F1F576077F718D29BB7DE82B829 B0DCE337CA18225E470E412E1FDB18CE8BEF93F26AEFC1C6073E0A1173CD5E83 89A72C279856E4FD31837BA43B603A28D71D427BBCA52207220EC3E14234E7E7 F3F1172B3998887BBF98C4E3D3B1B01A33387340CDDAD0CBB223B58BE51B027F 9795CA7142F703264069FCE544AAD50B2F2E8EB5A1B7330B31409A873FE3A1EB 8C22C80BB164AD35EB68A1B20DB47DC61B0AA72694B10904C9FF8B890B096EA1 7DFA7B09D784BF68D70DBFBE84568B4A62FAB8BA46748420CA6CE88FAB584A40 D0A153513AE867F772284B966D4BC5FB7128184F55BEF9AAE0D61402AF14E1FA F59D22F240C60AAD06BE5E1C77D29A072AC5C0AE669053AB5B1C5A2A45A624D9 0AF27A204DB9269F9D1FBDAD38C66EEFFA2D1F2C773754A8C47A5665F0D8D020 05E6AEF66E79A14E5850D79DD6A0E46F1115D8E2842698BC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (rluserman.dvi) @start /Fa 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 2[39 3[39 97[{}13 74.7198 /CMSLTT10 rf /Fb 134[39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 9[39 39 39 39 2[39 1[39 1[39 2[39 1[39 39 1[39 39 39 39 5[39 7[39 1[39 1[39 39 39 39 2[39 39 39 39[{}48 74.7198 /CMTT9 rf /Fc 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fd 134[65 65 1[65 68 48 48 50 1[68 61 68 102 34 65 1[34 68 61 37 56 68 55 68 60 7[93 4[85 68 92 3[96 116 74 96 1[46 96 1[77 81 1[89 87 93 8[61 61 61 61 61 61 61 61 2[34 46[{}46 109.091 /CMBX12 rf /Fe 134[48 48 66 1[51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 1[40 51 45 9[93 1[68 66 51 67 1[62 71 68 1[57 71 1[33 68 1[59 62 69 66 64 68 19[30 45[{}41 90.9091 /CMSL10 rf /Ff 139[30 37 38 3[51 4[28 1[42 90[51 12[{}7 90.9091 /CMTI10 rf /Fg 134[48 48 48 48 48 1[48 48 48 1[48 48 1[48 48 48 48 1[48 48 48 48 1[48 48 1[48 2[48 14[48 48 1[48 1[48 2[48 48 48 17[48 48 2[48 5[48 39[{}33 90.9091 /CMSLTT10 rf /Fh 135[56 2[56 1[42 2[51 58 56 4[27 1[58 49 51 1[54 1[56 97[{}12 90.9091 /CMCSC10 rf /Fi 197[25 58[{}1 90.9091 /CMMI10 rf /Fj 197[33 58[{}1 119.552 /CMMI12 rf /Fk 135[85 2[90 63 64 66 1[90 81 90 134 45 2[45 1[81 49 74 90 72 90 78 11[124 112 5[126 1[97 4[127 101 106 124 117 1[122 15[81 49[{}29 143.462 /CMBX12 rf /Fl 242[91 13[{}1 90.9091 /CMSY10 rf /Fm 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 61 75 60 75 65 9[139 1[103 1[75 100 3[105 128 81 2[50 105 106 85 88 103 97 96 102 6[37 4[67 67 67 67 67 2[37 1[37 44[{}46 119.552 /CMBX12 rf /Fn 129[48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 1[48 3[48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 1[48 3[48 48 48 48 48 48 48 48 48 48 48 2[48 48 48 48 33[{}78 90.9091 /CMTT10 rf /Fo 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 5[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35 25 4[45 20[51 51 53 11[{}81 90.9091 /CMR10 rf /Fp 134[102 4[75 76 79 3[108 1[54 2[54 2[59 88 108 86 108 94 11[149 2[144 3[151 1[116 2[72 1[152 71[{}19 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fp(GNU)65 b(Readline)g(Library)g(User) g(In)-5 b(terface)p 150 1418 3600 34 v 1873 1515 a Fo(Edition)30 b(6.3,)i(for)e Fn(Readline)e(Library)h Fo(V)-8 b(ersion)31 b(6.3.)3218 1623 y(Jan)m(uary)f(2014)150 4935 y Fm(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l (ersit)l(y)150 5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Fo(This)38 b(man)m(ual)h(describ)s(es) f(the)h(end)f(user)g(in)m(terface)i(of)f(the)g(GNU)g(Readline)g (Library)f(\(v)m(ersion)i(6.3,)150 4523 y(6)e(Jan)m(uary)f(2014\),)42 b(a)c(library)f(whic)m(h)h(aids)f(in)h(the)g(consistency)g(of)g(user)f (in)m(terface)i(across)f(discrete)150 4633 y(programs)30 b(whic)m(h)g(pro)m(vide)h(a)f(command)g(line)h(in)m(terface.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fl(\015)f Fo(1988{2014)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h (to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s (cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fo(i)150 299 y Fk(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fm(1)135 b(Command)45 b(Line)g(Editing)35 b Fj(:)20 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)79 b Fm(1)275 778 y Fo(1.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f (Editing)9 b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)39 b Fo(1)275 888 y(1.2)92 b(Readline)31 b(In)m(teraction)11 b Fi(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 b Fo(1)399 997 y(1.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)9 b Fi(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)40 b Fo(1)399 1107 y(1.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i (Commands)10 b Fi(:)k(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b Fo(2)399 1216 y(1.2.3)93 b(Readline)31 b(Killing)g(Commands)21 b Fi(:)15 b(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)52 b Fo(2)399 1326 y(1.2.4)93 b(Readline)31 b(Argumen)m(ts)14 b Fi(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)44 b Fo(3)399 1435 y(1.2.5)93 b(Searc)m(hing)31 b(for)f(Commands)f(in)h(the)h(History)11 b Fi(:)16 b(:)g(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)42 b Fo(3)275 1545 y(1.3)92 b(Readline)31 b(Init)f(File)c Fi(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)55 b Fo(4)399 1655 y(1.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)17 b Fi(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)47 b Fo(4)399 1764 y(1.3.2)93 b(Conditional)31 b(Init)f(Constructs)e Fi(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)58 b Fo(11)399 1874 y(1.3.3)93 b(Sample)30 b(Init)g(File)14 b Fi(:)j(:)e(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)44 b Fo(11)275 1983 y(1.4)92 b(Bindable)30 b(Readline)h(Commands)14 b Fi(:)g(:)i(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)43 b Fo(14)399 2093 y(1.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)10 b Fi(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)40 b Fo(14)399 2203 y(1.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f(History)20 b Fi(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fo(14)399 2312 y(1.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)25 b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)53 b Fo(16)399 2422 y(1.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)26 b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)55 b Fo(17)399 2531 y(1.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)19 b Fi(:)d(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)49 b Fo(18)399 2641 y(1.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)14 b Fi(:)i(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)44 b Fo(18)399 2751 y(1.4.7)93 b(Keyb)s(oard)29 b(Macros)23 b Fi(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)53 b Fo(19)399 2860 y(1.4.8)93 b(Some)30 b(Miscellaneous)j(Commands)26 b Fi(:)16 b(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)58 b Fo(19)275 2970 y(1.5)92 b(Readline)31 b(vi)f(Mo)s(de)22 b Fi(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)52 b Fo(21)150 3212 y Fm(App)t(endix)44 b(A)160 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)446 3345 y Fj(:)20 b(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)h(:)f(:)72 b Fm(22)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(1)150 299 y Fk(1)80 b(Command)54 b(Line)f(Editing)150 532 y Fo(This)30 b(c)m(hapter)h (describ)s(es)e(the)i(basic)g(features)f(of)h(the)f Fh(gnu)g Fo(command)h(line)f(editing)h(in)m(terface.)150 764 y Fm(1.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 923 y Fo(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h (notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275 1058 y(The)35 b(text)i Fg(C-k)f Fo(is)g(read)g(as)h(`Con)m(trol-K')g (and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h Fn(k)150 1167 y Fo(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol) g(k)m(ey)g(is)g(depressed.)275 1301 y(The)g(text)i Fg(M-k)e Fo(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter) h(pro)s(duced)e(when)f(the)i(Meta)150 1411 y(k)m(ey)i(\(if)f(y)m(ou)h (ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Fn(k)g Fo(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s (eled)f Fn(ALT)150 1521 y Fo(on)c(man)m(y)h(k)m(eyb)s(oards.)40 b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g Fn(ALT)e Fo(\(usually)i(to)g(either)g(side)g(of)g(the)150 1630 y(space)h(bar\),)f(the)g Fn(ALT)f Fo(on)h(the)g(left)h(side)f(is)g (generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 b(.)42 b(The)29 b Fn(ALT)g Fo(k)m(ey)i(on)150 1740 y(the)c(righ)m(t)h (ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i (k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 1849 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f (t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 1984 y(If)23 b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fn(ALT)e Fo(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g (Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 2093 y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g Fn(ESC)e Ff(\014rst)p Fo(,)j(and)e(then)g(t)m(yping)h Fn(k)p Fo(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 2203 y(as)j Fe(metafying)39 b Fo(the)30 b Fn(k)g Fo(k)m(ey)-8 b(.)275 2337 y(The)39 b(text)j Fg(M-C-k)d Fo(is)h(read)g(as)h (`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i (pro)s(duced)d(b)m(y)150 2447 y Fe(metafying)g Fg(C-k)p Fo(.)275 2581 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g (their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 b Fn(DEL)p Fo(,)f Fn(ESC)p Fo(,)g Fn(LFD)p Fo(,)g Fn(SPC)p Fo(,)g Fn(RET)p Fo(,)150 2690 y(and)d Fn(TAB)f Fo(all)j(stand)e(for)g (themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) h(\014le)f(\(see)i(Section)f(1.3)150 2800 y([Readline)c(Init)e(File],)j (page)e(4\).)41 b(If)29 b(y)m(our)h(k)m(eyb)s(oard)f(lac)m(ks)i(a)f Fn(LFD)f Fo(k)m(ey)-8 b(,)31 b(t)m(yping)g Fn(C-j)d Fo(will)i(pro)s (duce)f(the)150 2910 y(desired)h(c)m(haracter.)42 b(The)30 b Fn(RET)g Fo(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i Fn(Return)e Fo(or)h Fn(Enter)f Fo(on)h(some)h(k)m(eyb)s(oards.)150 3142 y Fm(1.2)68 b(Readline)47 b(In)l(teraction)150 3301 y Fo(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g (that)f(the)150 3411 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g (missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g (a)g(set)g(of)f(commands)g(for)150 3520 y(manipulating)e(the)g(text)h (as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h (just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 3630 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m (ou)h(mo)m(v)m(e)g(the)g(cursor)150 3739 y(to)35 b(the)f(place)i(that)e (needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g (the)f(corrections.)54 b(Then,)150 3849 y(when)24 b(y)m(ou)h(are)g (satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g Fn(RET)p Fo(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e (at)h(the)h(end)150 3959 y(of)33 b(the)h(line)g(to)g(press)e Fn(RET)p Fo(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g (of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 4068 y(within)c(the)g(line.)150 4267 y Fd(1.2.1)63 b(Readline)40 b(Bare)h(Essen)m(tials)150 4414 y Fo(In)31 b(order)h(to)h(en)m(ter)g(c) m(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 4523 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo) m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 4633 y(c)m(haracter,)f(y)m(ou)f(can)g (use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f (delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 4767 y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g (and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) m(yp)s(ed)150 4877 y(sev)m(eral)e(other)f(c)m(haracters.)42 b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h Fg(C-b)d Fo(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 4987 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g (with)f Fg(C-f)p Fo(.)275 5121 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m (haracters)h(to)g(the)e(righ)m(t)150 5230 y(of)d(the)g(cursor)f(are)h (`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h (that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 5340 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m (haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(2)150 299 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i(created)f(b)m(y)g(the)g (remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 b(A)23 b(list)g(of)g(the)g (bare)f(essen)m(tials)150 408 y(for)30 b(editing)h(the)g(text)g(of)g (an)f(input)f(line)i(follo)m(ws.)150 562 y Fg(C-b)336 b Fo(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m(haracter.)150 715 y Fg(C-f)336 b Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(one)h(c)m(haracter.) 150 869 y Fn(DEL)e Fo(or)i Fn(Backspace)630 978 y Fo(Delete)i(the)d(c)m (haracter)i(to)f(the)g(left)g(of)f(the)h(cursor.)150 1132 y Fg(C-d)336 b Fo(Delete)33 b(the)d(c)m(haracter)i(underneath)d (the)i(cursor.)150 1285 y(Prin)m(ting)g(c)m(haracters)630 1394 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g (cursor.)150 1548 y Fg(C-_)e Fo(or)i Fg(C-x)e(C-u)630 1657 y Fo(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g (empt)m(y)630 1767 y(line.)150 1920 y(\(Dep)s(ending)29 b(on)h(y)m(our)f(con\014guration,)i(the)e Fn(Backspace)e Fo(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) 150 2030 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g Fn(DEL)g Fo(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i (underneath)d(the)h(cursor,)i(lik)m(e)150 2140 y Fg(C-d)p Fo(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g (the)f(cursor.\))150 2333 y Fd(1.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)h(Commands)150 2480 y Fo(The)27 b(ab)s(o)m(v)m(e)i (table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f (y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 2589 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m (enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g (in)h(addition)150 2699 y(to)j Fg(C-b)p Fo(,)f Fg(C-f)p Fo(,)g Fg(C-d)p Fo(,)h(and)e Fn(DEL)p Fo(.)54 b(Here)35 b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h (the)150 2808 y(line.)150 2962 y Fg(C-a)336 b Fo(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(line.)150 3115 y Fg(C-e)336 b Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 3269 y Fg(M-f)336 b Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f (where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) 150 3422 y Fg(M-b)336 b Fo(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m (ord.)150 3575 y Fg(C-l)336 b Fo(Clear)31 b(the)f(screen,)h(reprin)m (ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 3729 y(Notice)c(ho)m(w)f Fg(C-f)e Fo(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m (haracter,)j(while)d Fg(M-f)e Fo(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m (ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 3838 y(con)m(v)m(en)m(tion)32 b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m (haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 3948 y(w)m(ords.)150 4141 y Fd(1.2.3)63 b(Readline)40 b(Killing)i(Commands)150 4288 y Fe(Killing)35 b Fo(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i(but)e(to)h (sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f(usually)150 4398 y(b)m(y)g Fe(y)m(anking)35 b Fo(\(re-inserting\))28 b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 4507 y(`kill')32 b(and)d(`y)m(ank'.\))275 4639 y(If)g(the)i (description)f(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g (text,)h(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 4748 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g (\(or)g(the)f(same\))h(place)h(later.)275 4880 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i (in)e(a)g Fe(kill-ring)p Fo(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h (consecutiv)m(e)150 4989 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g (killed)h(text)g(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f (bac)m(k,)h(y)m(ou)g(get)g(it)f(all.)43 b(The)150 5099 y(kill)33 b(ring)f(is)g(not)h(line)g(sp)s(eci\014c;)g(the)g(text)g (that)g(y)m(ou)g(killed)f(on)h(a)f(previously)g(t)m(yp)s(ed)h(line)f (is)h(a)m(v)-5 b(ailable)150 5208 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) m(k)g(later,)h(when)d(y)m(ou)i(are)g(t)m(yping)f(another)h(line.)275 5340 y(Here)f(is)h(the)f(list)h(of)g(commands)f(for)g(killing)h(text.)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(3)150 299 y Fg(C-k)336 b Fo(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g(cursor)g(p)s (osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 461 y Fg(M-d)336 b Fo(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h (the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,) g(to)g(the)630 570 y(end)j(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) f(b)m(y)g Fg(M-f)p Fo(.)150 732 y Fg(M-DEL)240 b Fo(Kill)31 b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 842 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m (y)630 951 y Fg(M-b)p Fo(.)150 1113 y Fg(C-w)336 b Fo(Kill)35 b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 b(This)34 b(is)h(di\013eren)m(t)h(than)e Fg(M-DEL)630 1223 y Fo(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 1386 y(Here)42 b(is)f(ho)m(w)h(to)g Fe(y)m(ank)47 b Fo(the)42 b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43 b(means)e(to)h(cop)m(y)h(the)e(most-)150 1496 y(recen)m(tly-killed)33 b(text)e(from)f(the)g(kill)i(bu\013er.)150 1659 y Fg(C-y)336 b Fo(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m (k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150 1821 y Fg(M-y)336 b Fo(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h (the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h (the)g(prior)630 1930 y(command)30 b(is)h Fg(C-y)e Fo(or)h Fg(M-y)p Fo(.)150 2132 y Fd(1.2.4)63 b(Readline)40 b(Argumen)m(ts)150 2279 y Fo(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f (Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 2389 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g Ff(sign)47 b Fo(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m (t.)71 b(If)40 b(y)m(ou)150 2498 y(pass)33 b(a)h(negativ)m(e)i(argumen) m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m (ard)f(direction,)i(that)150 2608 y(command)g(will)h(act)g(in)f(a)h (bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g (text)g(bac)m(k)g(to)g(the)g(start)g(of)150 2717 y(the)31 b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fn(M--)f(C-k)p Fo('.)275 2854 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g (argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i (digits)e(b)s(efore)150 2964 y(the)j(command.)42 b(If)30 b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h (\(`)p Fn(-)p Fo('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 3073 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m (e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h (started,)i(y)m(ou)150 3183 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f (of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fg(C-d)150 3293 y Fo(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f (t)m(yp)s(e)h(`)p Fn(M-1)29 b(0)h(C-d)p Fo(',)39 b(whic)m(h)e(will)h (delete)h(the)e(next)h(ten)150 3402 y(c)m(haracters)32 b(on)e(the)h(input)e(line.)150 3604 y Fd(1.2.5)63 b(Searc)m(hing)40 b(for)i(Commands)g(in)f(the)g(History)150 3751 y Fo(Readline)22 b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)f(the)g (command)h(history)f(for)g(lines)g(con)m(taining)150 3861 y(a)31 b(sp)s(eci\014ed)e(string.)41 b(There)30 b(are)h(t)m(w)m(o)g(searc)m(h)g(mo)s(des:)41 b Fe(incremen)m(tal)35 b Fo(and)30 b Fe(non-incremen)m(tal)p Fo(.)275 3998 y(Incremen)m(tal)c (searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e (t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 4107 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s (ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i (history)150 4217 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g (far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g (man)m(y)g(c)m(haracters)i(as)150 4326 y(needed)i(to)i(\014nd)d(the)i (desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i (particular)150 4436 y(string,)g(t)m(yp)s(e)f Fg(C-r)p Fo(.)40 b(T)m(yping)29 b Fg(C-s)g Fo(searc)m(hes)h(forw)m(ard)f (through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m (t)150 4545 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g Fn(isearch-terminators)33 b Fo(v)-5 b(ariable)39 b(are)f(used)f(to)i (terminate)g(an)f(incremen)m(tal)150 4655 y(searc)m(h.)71 b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i (a)f(v)-5 b(alue,)44 b(the)c Fn(ESC)g Fo(and)f Fg(C-J)h Fo(c)m(haracters)i(will)150 4765 y(terminate)h(an)g(incremen)m(tal)g (searc)m(h.)78 b Fg(C-g)41 b Fo(will)i(ab)s(ort)f(an)g(incremen)m(tal)i (searc)m(h)f(and)f(restore)h(the)150 4874 y(original)30 b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f (history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 4984 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 5121 y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h (history)g(list,)h(t)m(yp)s(e)g Fg(C-r)e Fo(or)h Fg(C-s)f Fo(as)h(appropriate.)43 b(This)150 5230 y(will)26 b(searc)m(h)h(bac)m (kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g (en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)150 5340 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i (sequence)f(b)s(ound)e(to)i(a)g(Readline)h(command)e(will)h(terminate)h (the)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(4)150 299 y(searc)m(h)26 b(and)f(execute)i(that)f(command.)39 b(F)-8 b(or)26 b(instance,)h(a)f Fn(RET)f Fo(will)g(terminate)i(the)f(searc)m(h)g(and)e(accept)150 408 y(the)30 b(line,)g(thereb)m(y)f(executing)i(the)e(command)g(from)g (the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will) 150 518 y(terminate)i(the)g(searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g (found)e(the)i(curren)m(t)f(line,)h(and)f(b)s(egin)g(editing.)275 647 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g (searc)m(h)f(string.)54 b(If)34 b(t)m(w)m(o)j Fg(C-r)p Fo(s)c(are)i(t)m(yp)s(ed)g(without)150 757 y(an)m(y)i(in)m(terv)m (ening)g(c)m(haracters)h(de\014ning)e(a)h(new)f(searc)m(h)h(string,)h (an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i(string)g(is)150 866 y(used.)275 995 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e(the) h(en)m(tire)h(searc)m(h)f(string)g(b)s(efore)f(starting)h(to)h(searc)m (h)f(for)150 1105 y(matc)m(hing)d(history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f(t)m(yp)s(ed)g(b)m(y)g (the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 1214 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150 1436 y Fm(1.3)68 b(Readline)47 b(Init)e(File)150 1595 y Fo(Although)f(the)g(Readline)g (library)f(comes)i(with)e(a)h(set)h(of)f(Emacs-lik)m(e)h(k)m (eybindings)f(installed)g(b)m(y)150 1705 y(default,)26 b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren)m(t)f(set)g(of)g(k) m(eybindings.)38 b(An)m(y)25 b(user)f(can)h(customize)h(programs)150 1814 y(that)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an) g Fe(inputrc)49 b Fo(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g (home)150 1924 y(directory)-8 b(.)39 b(The)23 b(name)h(of)f(this)h (\014le)f(is)g(tak)m(en)i(from)e(the)g(v)-5 b(alue)24 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)25 b Fn(INPUTRC)p Fo(.)150 2033 y(If)30 b(that)g(v)-5 b(ariable)31 b(is)f(unset,)g(the)h(default)f(is)g Fn(~/.inputrc)p Fo(.)38 b(If)30 b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h (b)s(e)150 2143 y(read,)g(the)f(ultimate)i(default)e(is)h Fn(/etc/inputrc)p Fo(.)275 2272 y(When)e(a)h(program)f(whic)m(h)h(uses) f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h (read,)g(and)f(the)150 2381 y(k)m(ey)i(bindings)e(are)i(set.)275 2510 y(In)26 b(addition,)i(the)f Fn(C-x)i(C-r)d Fo(command)h(re-reads)g (this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m (hanges)150 2620 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g (it.)150 2808 y Fd(1.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 2955 y Fo(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 b(lines)h(are)150 3065 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h (a)g(`)p Fn(#)p Fo(')g(are)h(commen)m(ts.)73 b(Lines)41 b(b)s(eginning)f(with)g(a)i(`)p Fn($)p Fo(')f(indicate)150 3174 y(conditional)i(constructs)e(\(see)i(Section)f(1.3.2)h ([Conditional)f(Init)f(Constructs],)j(page)f(11\).)74 b(Other)150 3284 y(lines)31 b(denote)g(v)-5 b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150 3432 y(V)-8 b(ariable)32 b(Settings)630 3542 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e (the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h (the)g(v)-5 b(alues)41 b(of)630 3651 y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g Fn(set)g Fo(command)g(within)g(the)h (init)g(\014le.)50 b(The)33 b(syn)m(tax)630 3761 y(is)d(simple:)870 3890 y Fn(set)47 b Fg(variable)e(value)630 4019 y Fo(Here,)29 b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default) h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 4128 y(use)k Fn(vi)g Fo(line)h(editing)g(commands:)870 4257 y Fn(set)47 b(editing-mode)d(vi)630 4386 y Fo(V)-8 b(ariable)36 b(names)f(and)g(v) -5 b(alues,)36 b(where)f(appropriate,)h(are)g(recognized)g(without)f (regard)630 4496 y(to)c(case.)42 b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630 4624 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f(set)i(to)g(on)f(or)g (o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the)g(v)-5 b(alue)26 b(is)630 4734 y(n)m(ull)e(or)g(empt)m(y)-8 b(,)27 b Fe(on)d Fo(\(case-insensitiv)m(e\),)29 b(or)24 b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) -5 b(ariable)630 4844 y(b)s(eing)30 b(set)h(to)g(o\013.)630 4973 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m (hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)630 5121 y Fn(bell-style)1110 5230 y Fo(Con)m(trols)44 b(what)g(happ)s(ens) e(when)h(Readline)i(w)m(an)m(ts)f(to)h(ring)e(the)h(termi-)1110 5340 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p Fn(none)p Fo(',)g(Readline)g(nev)m(er)g(rings)e(the)i(b)s(ell.)61 b(If)36 b(set)i(to)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(5)1110 299 y(`)p Fn(visible)p Fo(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g (one)g(is)g(a)m(v)-5 b(ailable.)51 b(If)33 b(set)g(to)1110 408 y(`)p Fn(audible)p Fo(')j(\(the)i(default\),)i(Readline)e(attempts) g(to)h(ring)e(the)g(terminal's)1110 518 y(b)s(ell.)630 676 y Fn(bind-tty-special-chars)1110 786 y Fo(If)45 b(set)h(to)f(`)p Fn(on)p Fo(',)50 b(Readline)45 b(attempts)i(to)f(bind)d(the)j(con)m (trol)g(c)m(haracters)1110 896 y(treated)36 b(sp)s(ecially)h(b)m(y)e (the)h(k)m(ernel's)g(terminal)g(driv)m(er)f(to)h(their)f(Readline)1110 1005 y(equiv)-5 b(alen)m(ts.)630 1163 y Fn(colored-stats)1110 1273 y Fo(If)26 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(displa)m (ys)g(p)s(ossible)f(completions)h(using)f(di\013eren)m(t)1110 1383 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67 b(The)38 b(color)j(de\014nitions)d(are)i(tak)m(en)1110 1492 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Fn(LS_COLORS)d Fo(en)m(vironmen)m(t)j(v)-5 b(ariable.)40 b(The)24 b(default)1110 1602 y(is)30 b(`)p Fn(off)p Fo('.)630 1760 y Fn(comment-begin)1110 1870 y Fo(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of) h(the)h(line)f(when)g(the)1110 1979 y Fn(insert-comment)26 b Fo(command)31 b(is)f(executed.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f Fn("#")p Fo(.)630 2138 y Fn(completion-display-width) 1110 2247 y Fo(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 2357 y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 2466 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 2576 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e (line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 2734 y Fn(completion-ignore-case)1110 2844 y Fo(If)d(set)h(to)g(`)p Fn(on)p Fo(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i (and)e(completion)1110 2953 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) 40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fn(off)p Fo('.)630 3112 y Fn(completion-map-case)1110 3221 y Fo(If)22 b(set)g(to)h(`)p Fn(on)p Fo(',)h(and)e Fe(completion-ignore-case)31 b Fo(is)22 b(enabled,)i(Readline)f(treats)1110 3331 y(h)m(yphens)29 b(\(`)p Fn(-)p Fo('\))j(and)e(underscores)g(\(`)p Fn(_)p Fo('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 3440 y(case-insensitiv)m(e)j(\014lename)d(matc)m(hing)i(and)e (completion.)630 3599 y Fn(completion-prefix-displa)o(y-le)o(ngth)1110 3708 y Fo(The)h(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h (pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 3818 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s (di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 3927 y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e (longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 4037 y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) f(completions.)630 4195 y Fn(completion-query-items)1110 4305 y Fo(The)c(n)m(um)m(b)s(er)f(of)h(p)s(ossible)g(completions)h (that)g(determines)f(when)f(the)i(user)1110 4415 y(is)i(ask)m(ed)h (whether)f(the)h(list)g(of)f(p)s(ossibilities)h(should)e(b)s(e)h (displa)m(y)m(ed.)41 b(If)29 b(the)1110 4524 y(n)m(um)m(b)s(er)d(of)h (p)s(ossible)f(completions)i(is)f(greater)h(than)e(this)h(v)-5 b(alue,)28 b(Readline)1110 4634 y(will)f(ask)g(the)f(user)g(whether)g (or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i(otherwise,)1110 4743 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m(teger)g(v)-5 b(alue)1110 4853 y(greater)26 b(than)f(or)f(equal)i(to)f(0.)40 b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i(should)1110 4963 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g(is)g Fn(100)p Fo(.)630 5121 y Fn(convert-meta)1110 5230 y Fo(If)22 b(set)g(to)h(`)p Fn(on)p Fo(',)h(Readline)f(will)f(con)m(v)m (ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 5340 y(to)33 b(an)e Fh(asci)r(i)h Fo(k)m(ey)h(sequence)f(b)m(y)g (stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(6)1110 299 y(an)24 b Fn(ESC)g Fo(c)m(haracter,)j(con)m(v)m(erting)f(them)f(to)g(a)g (meta-pre\014xed)f(k)m(ey)h(sequence.)1110 408 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fn(on)p Fo('.)630 555 y Fn(disable-completion)1110 664 y Fo(If)36 b(set)h(to)h(`)p Fn(On)p Fo(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h(completion.)60 b(Completion)1110 774 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h (in)m(to)h(the)g(line)f(as)g(if)g(they)h(had)e(b)s(een)g(mapp)s(ed)1110 883 y(to)31 b Fn(self-insert)p Fo(.)38 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 1029 y Fn(editing-mode)1110 1139 y Fo(The)d Fn(editing-mode)e Fo(v)-5 b(ariable)29 b(con)m(trols)h(whic)m (h)e(default)h(set)h(of)e(k)m(ey)i(bind-)1110 1249 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f(up)f(in)h (Emacs)g(editing)h(mo)s(de,)1110 1358 y(where)j(the)g(k)m(eystrok)m(es) i(are)e(most)h(similar)f(to)h(Emacs.)40 b(This)29 b(v)-5 b(ariable)30 b(can)1110 1468 y(b)s(e)g(set)h(to)g(either)g(`)p Fn(emacs)p Fo(')e(or)h(`)p Fn(vi)p Fo('.)630 1614 y Fn (echo-control-characters)1110 1724 y Fo(When)g(set)h(to)g(`)p Fn(on)p Fo(',)f(on)g(op)s(erating)h(systems)f(that)h(indicate)g(they)g (supp)s(ort)1110 1833 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m (haracter)h(corresp)s(onding)d(to)j(a)f(signal)g(generated)1110 1943 y(from)e(the)g(k)m(eyb)s(oard.)41 b(The)30 b(default)g(is)h(`)p Fn(on)p Fo('.)630 2089 y Fn(enable-keypad)1110 2198 y Fo(When)23 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(will)g(try)f(to) h(enable)g(the)f(application)i(k)m(eypad)1110 2308 y(when)h(it)h(is)f (called.)41 b(Some)27 b(systems)f(need)h(this)f(to)h(enable)g(the)g (arro)m(w)g(k)m(eys.)1110 2418 y(The)j(default)g(is)h(`)p Fn(off)p Fo('.)630 2564 y Fn(enable-meta-key)1110 2673 y Fo(When)40 b(set)g(to)g(`)p Fn(on)p Fo(',)j(Readline)d(will)g(try)g (to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 2783 y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h(is)g (called.)76 b(On)41 b(man)m(y)1110 2892 y(terminals,)c(the)e(meta)h(k)m (ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 b(The)1110 3002 y(default)31 b(is)f(`)p Fn(on)p Fo('.)630 3148 y Fn(expand-tilde)1110 3258 y Fo(If)d(set)h(to)h(`)p Fn(on)p Fo(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h (Readline)h(attempts)1110 3367 y(w)m(ord)i(completion.)42 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 3513 y Fn(history-preserve-point)1110 3623 y Fo(If)41 b(set)h(to)h(`)p Fn(on)p Fo(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f (p)s(oin)m(t)f(\(the)1110 3733 y(curren)m(t)35 b(cursor)g(p)s (osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g (line)1110 3842 y(retriev)m(ed)h(with)f Fn(previous-history)c Fo(or)37 b Fn(next-history)p Fo(.)55 b(The)36 b(default)1110 3952 y(is)30 b(`)p Fn(off)p Fo('.)630 4098 y Fn(history-size)1110 4208 y Fo(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g (en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 4317 y(list.)51 b(If)34 b(set)g(to)h(zero,)g(an)m(y)f(existing)h(history)f (en)m(tries)g(are)g(deleted)h(and)e(no)1110 4427 y(new)e(en)m(tries)i (are)f(sa)m(v)m(ed.)46 b(If)31 b(set)h(to)h(a)f(v)-5 b(alue)32 b(less)g(than)f(zero,)i(the)f(n)m(um)m(b)s(er)1110 4536 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42 b(By)30 b(default,)h(the)g(n)m(um)m(b)s(er)e(of)i(history)1110 4646 y(en)m(tries)g(is)g(not)f(limited.)630 4792 y Fn (horizontal-scroll-mode)1110 4902 y Fo(This)35 b(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f(`)p Fn(on)p Fo(')g(or)g(`)p Fn(off)p Fo('.)57 b(Setting)36 b(it)g(to)h(`)p Fn(on)p Fo(')1110 5011 y(means)26 b(that)h(the)f(text)h (of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m (tally)1110 5121 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i (are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 5230 y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g (line.)39 b(By)27 b(default,)g(this)1110 5340 y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Fn(off)p Fo('.)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(7)630 299 y Fn(input-meta)1110 408 y Fo(If)31 b(set)g(to)h(`)p Fn(on)p Fo(',)g(Readline)g(will)f (enable)h(eigh)m(t-bit)h(input)d(\(it)i(will)f(not)h(clear)1110 518 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h(c)m(haracters)h(it)f (reads\),)j(regardless)c(of)h(what)g(the)1110 628 y(terminal)g(claims)h (it)g(can)f(supp)s(ort.)68 b(The)39 b(default)h(v)-5 b(alue)40 b(is)g(`)p Fn(off)p Fo('.)69 b(The)1110 737 y(name)30 b Fn(meta-flag)e Fo(is)j(a)f(synon)m(ym)g(for)g(this)h(v)-5 b(ariable.)630 894 y Fn(isearch-terminators)1110 1003 y Fo(The)51 b(string)h(of)g(c)m(haracters)h(that)f(should)e(terminate)j (an)f(incremen)m(tal)1110 1113 y(searc)m(h)25 b(without)g(subsequen)m (tly)g(executing)h(the)f(c)m(haracter)h(as)f(a)g(command)1110 1223 y(\(see)45 b(Section)h(1.2.5)g([Searc)m(hing],)j(page)d(3\).)84 b(If)44 b(this)g(v)-5 b(ariable)45 b(has)g(not)1110 1332 y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h Fn(ESC)d Fo(and)h Fg(C-J)g Fo(will)h(terminate)g(an)1110 1442 y(incremen)m(tal)c(searc)m(h.)630 1598 y Fn(keymap)192 b Fo(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h (for)g(k)m(ey)g(binding)f(com-)1110 1708 y(mands.)81 b(Acceptable)47 b Fn(keymap)42 b Fo(names)i(are)h Fn(emacs)p Fo(,)i Fn(emacs-standard)p Fo(,)1110 1817 y Fn(emacs-meta)p Fo(,)99 b Fn(emacs-ctlx)p Fo(,)f Fn(vi)p Fo(,)j Fn(vi-move)p Fo(,)f Fn(vi-command)p Fo(,)f(and)1110 1927 y Fn(vi-insert)p Fo(.)64 b Fn(vi)38 b Fo(is)h(equiv)-5 b(alen)m(t)41 b(to)e Fn(vi-command)p Fo(;)i Fn(emacs)c Fo(is)i(equiv)-5 b(alen)m(t)1110 2037 y(to)33 b Fn(emacs-standard)p Fo(.)41 b(The)31 b(default)h(v)-5 b(alue)32 b(is)g Fn(emacs)p Fo(.)44 b(The)31 b(v)-5 b(alue)33 b(of)f(the)1110 2146 y Fn(editing-mode)27 b Fo(v)-5 b(ariable)31 b(also)h(a\013ects)f(the)g(default)f(k)m(eymap.)630 2303 y Fn(keyseq-timeout)1110 2412 y Fo(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m(ait)g(for)g(a)f(c)m(haracter)i (when)e(read-)1110 2522 y(ing)30 b(an)g(am)m(biguous)g(k)m(ey)h (sequence)f(\(one)g(that)h(can)f(form)g(a)g(complete)h(k)m(ey)1110 2632 y(sequence)j(using)e(the)i(input)e(read)h(so)g(far,)h(or)g(can)f (tak)m(e)i(additional)f(input)1110 2741 y(to)g(complete)g(a)f(longer)h (k)m(ey)f(sequence\).)49 b(If)33 b(no)f(input)g(is)h(receiv)m(ed)h (within)1110 2851 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter)g(but)f(complete)j(k)m(ey)e(se-)1110 2960 y(quence.)c(Readline)26 b(uses)f(this)h(v)-5 b(alue)26 b(to)g(determine)g(whether)f(or)g(not)h(input)1110 3070 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m(t)f(input)g (source)h(\()p Fn(rl_instream)d Fo(b)m(y)i(default\).)1110 3180 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h (milliseconds,)j(so)d(a)h(v)-5 b(alue)26 b(of)f(1000)i(means)e(that) 1110 3289 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g (additional)i(input.)37 b(If)22 b(this)g(v)-5 b(ariable)23 b(is)1110 3399 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f (equal)i(to)f(zero,)i(or)e(to)g(a)h(non-n)m(umeric)e(v)-5 b(alue,)1110 3508 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h (k)m(ey)g(is)f(pressed)g(to)h(decide)f(whic)m(h)g(k)m(ey)1110 3618 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g Fn(500)p Fo(.)630 3774 y Fn(mark-directories)1110 3884 y Fo(If)38 b(set)g(to)h(`)p Fn(on)p Fo(',)i(completed)e(directory) f(names)g(ha)m(v)m(e)i(a)e(slash)g(app)s(ended.)1110 3994 y(The)30 b(default)g(is)h(`)p Fn(on)p Fo('.)630 4150 y Fn(mark-modified-lines)1110 4260 y Fo(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p Fn(on)p Fo(',)g(causes)g (Readline)f(to)h(displa)m(y)f(an)f(as-)1110 4369 y(terisk)f(\(`)p Fn(*)p Fo('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f (ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 4479 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fn(off)p Fo(')g(b)m(y)g(default.)630 4635 y Fn(mark-symlinked-directori)o(es)1110 4745 y Fo(If)59 b(set)h(to)g(`)p Fn(on)p Fo(',)67 b(completed)60 b(names)f(whic)m(h)g (are)h(sym)m(b)s(olic)g(links)f(to)1110 4855 y(directories)71 b(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)f(\(sub)5 b(ject)70 b(to)g(the)g(v)-5 b(alue)70 b(of)1110 4964 y Fn(mark-directories)p Fo(\).)37 b(The)30 b(default)g(is)g(`)p Fn(off)p Fo('.)630 5121 y Fn(match-hidden-files)1110 5230 y Fo(This)21 b(v)-5 b(ariable,)25 b(when)d(set)g(to)h(`)p Fn(on)p Fo(',)h(causes)f (Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 5340 y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fn(.)p Fo(')g(\(hidden)f (\014les\))i(when)e(p)s(erforming)g(\014lename)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(8)1110 299 y(completion.)75 b(If)41 b(set)g(to)h(`)p Fn(off)p Fo(',)i(the)e(leading)g(`)p Fn(.)p Fo(')f(m)m(ust)g(b)s(e)g(supplied)f(b)m(y)1110 408 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f(completed.) 53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p Fn(on)p Fo(')g(b)m(y)1110 518 y(default.)630 664 y Fn(menu-complete-display-pr)o(efix)1110 774 y Fo(If)f(set)h(to)g(`)p Fn(on)p Fo(',)h(men)m(u)e(completion)i (displa)m(ys)e(the)h(common)g(pre\014x)e(of)i(the)1110 883 y(list)k(of)g(p)s(ossible)f(completions)i(\(whic)m(h)e(ma)m(y)h(b)s (e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 993 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p Fn(off)p Fo('.)630 1139 y Fn(output-meta)1110 1249 y Fo(If)35 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(will)g(displa)m(y)f(c)m (haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 1358 y(set)h(directly)g (rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s(e)h(sequence.)59 b(The)1110 1468 y(default)31 b(is)f(`)p Fn(off)p Fo('.)630 1614 y Fn(page-completions)1110 1724 y Fo(If)j(set)i(to)f(`)p Fn(on)p Fo(',)h(Readline)g(uses)e(an)h(in)m(ternal)h Fn(more)p Fo(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 1833 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) 47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fn(on)p Fo(')1110 1943 y(b)m(y)e(default.)630 2089 y Fn(print-completions-horizo)o(ntal)o (ly)1110 2198 y Fo(If)23 b(set)i(to)g(`)p Fn(on)p Fo(',)g(Readline)g (will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 2308 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c (than)g(do)m(wn)g(the)h(screen.)1110 2418 y(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 2564 y Fn(revert-all-at-newline)1110 2673 y Fo(If)e(set)h(to)g(`)p Fn(on)p Fo(',)g(Readline)g(will)g(undo)f (all)h(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 2783 y(returning)f(when)f Fn(accept-line)f Fo(is)j(executed.)41 b(By)29 b(default,)g(history)g(lines)1110 2892 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h (across)g(calls)h(to)1110 3002 y Fn(readline)p Fo(.)38 b(The)30 b(default)h(is)f(`)p Fn(off)p Fo('.)630 3148 y Fn(show-all-if-ambiguous)1110 3258 y Fo(This)f(alters)i(the)f (default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40 b(If)29 b(set)1110 3367 y(to)f(`)p Fn(on)p Fo(',)g(w)m(ords)f(whic)m(h) g(ha)m(v)m(e)i(more)f(than)f(one)h(p)s(ossible)f(completion)h(cause) 1110 3477 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i (instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 3587 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fn(off)p Fo('.)630 3733 y Fn(show-all-if-unmodified)1110 3842 y Fo(This)38 b(alters)h(the)g(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h (functions)e(in)h(a)1110 3952 y(fashion)25 b(similar)h(to)g Fe(sho)m(w-all-if-am)m(biguous)p Fo(.)41 b(If)25 b(set)h(to)h(`)p Fn(on)p Fo(',)f(w)m(ords)f(whic)m(h)1110 4061 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e(completion)i(without)f(an)m(y)g(p)s (ossible)f(par-)1110 4171 y(tial)43 b(completion)h(\(the)f(p)s(ossible) f(completions)h(don't)f(share)g(a)h(common)1110 4281 y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g (immediately)i(instead)e(of)h(ring-)1110 4390 y(ing)g(the)f(b)s(ell.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fn(off)p Fo('.)630 4536 y Fn(show-mode-in-prompt)1110 4646 y Fo(If)35 b(set)i(to)f(`)p Fn(on)p Fo(',)h(add)e(a)h(c)m(haracter)i(to)e(the)g(b) s(eginning)f(of)h(the)g(prompt)f(in-)1110 4756 y(dicating)43 b(the)f(editing)h(mo)s(de:)63 b(emacs)43 b(\(`)p Fn(@)p Fo('\),)i(vi)d(command)g(\(`)p Fn(:)p Fo('\),)k(or)c(vi)1110 4865 y(insertion)30 b(\(`)p Fn(+)p Fo('\).)42 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fn(off)p Fo('.)630 5011 y Fn(skip-completed-text)1110 5121 y Fo(If)h(set)i(to)f(`)p Fn(on)p Fo(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s(eha)m (vior)f(when)f(in-)1110 5230 y(serting)d(a)h(single)g(matc)m(h)f(in)m (to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s(erform-) 1110 5340 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f(w)m (ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(9)1110 299 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h(that)f(matc)m(h)g (c)m(haracters)1110 408 y(after)c(p)s(oin)m(t)g(in)g(the)g(w)m(ord)f(b) s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g(w)m(ord)1110 518 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g(duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 628 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g (after)h(the)g(`)p Fn(e)p Fo(')f(in)1110 737 y(`)p Fn(Makefile)p Fo(')c(will)i(result)f(in)g(`)p Fn(Makefile)p Fo(')f(rather)h(than)h(`) p Fn(Makefilefile)p Fo(',)1110 847 y(assuming)d(there)g(is)h(a)f (single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 b(alue)1110 956 y(is)30 b(`)p Fn(off)p Fo('.)630 1113 y Fn(visible-stats)1110 1223 y Fo(If)h(set)i(to)f(`)p Fn(on)p Fo(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s (e)g(is)g(app)s(ended)e(to)j(the)1110 1332 y(\014lename)e(when)e (listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)150 1489 y(Key)f(Bindings)630 1598 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g (init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 1708 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i (y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 1817 y(sections)37 b(con)m(tain)g(tables)g(of)f(the)g(command)f(name,)j (the)e(default)g(k)m(eybinding,)h(if)f(an)m(y)-8 b(,)630 1927 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h (do)s(es.)630 2060 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g (the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g(the)g(init)630 2170 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)f(to)h (bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 2279 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g (and)630 2389 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m (terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 b(The)40 b(name)h(of)630 2498 y(the)35 b(k)m(ey)g(can)g(b)s(e)f (expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h (what)h(y)m(ou)g(\014nd)e(most)630 2608 y(comfortable.)630 2741 y(In)i(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h (k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 2851 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g (\(a)h Fe(macro)5 b Fo(\).)630 3007 y Fe(k)m(eyname)g Fo(:)42 b Fe(function-name)35 b Fo(or)c Fe(macro)1110 3117 y(k)m(eyname)k Fo(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s (elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 3250 y Fn(Control-u:)45 b(universal-argument)1350 3360 y(Meta-Rubout:)f(backward-kill-word)1350 3469 y(Control-o:)h(">)i (output")1110 3602 y Fo(In)94 b(the)g(ab)s(o)m(v)m(e)i(example,)111 b Fg(C-u)94 b Fo(is)g(b)s(ound)f(to)i(the)f(function)1110 3712 y Fn(universal-argument)p Fo(,)124 b Fg(M-DEL)107 b Fo(is)i(b)s(ound)e(to)j(the)f(function)1110 3821 y Fn(backward-kill-word)p Fo(,)75 b(and)69 b Fg(C-o)g Fo(is)h(b)s(ound)e (to)j(run)d(the)i(macro)1110 3931 y(expressed)45 b(on)h(the)g(righ)m(t) g(hand)e(side)i(\(that)h(is,)i(to)e(insert)e(the)h(text)h(`)p Fn(>)1110 4041 y(output)p Fo(')29 b(in)m(to)i(the)g(line\).)1110 4174 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m(haracter)g (names)f(are)g(recognized)h(while)1110 4283 y(pro)s(cessing)40 b(this)f(k)m(ey)i(binding)e(syn)m(tax:)60 b Fe(DEL)p Fo(,)42 b Fe(ESC)p Fo(,)g Fe(ESCAPE)p Fo(,)f Fe(LFD)p Fo(,)1110 4393 y Fe(NEWLINE)p Fo(,)31 b Fe(RET)p Fo(,)f Fe(RETURN)p Fo(,)g Fe(R)m(UBOUT)p Fo(,)h Fe(SP)-8 b(A)m(CE)p Fo(,)31 b Fe(SPC)p Fo(,)e(and)h Fe(T)-8 b(AB)p Fo(.)630 4549 y Fn(")p Fe(k)m(eyseq)r Fn(")p Fo(:)41 b Fe(function-name)36 b Fo(or)30 b Fe(macro)1110 4659 y(k)m(eyseq)k Fo(di\013ers)d(from)f Fe(k)m(eyname)37 b Fo(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f (denoting)g(an)g(en-)1110 4769 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s (e)f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in) 1110 4878 y(double)29 b(quotes.)41 b(Some)29 b Fh(gnu)h Fo(Emacs)f(st)m(yle)i(k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as) 1110 4988 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s (ecial)h(c)m(haracter)g(names)f(are)g(not)1110 5097 y(recognized.)1350 5230 y Fn("\\C-u":)46 b(universal-argument)1350 5340 y("\\C-x\\C-r":)f(re-read-init-file)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(10)1350 299 y Fn("\\e[11~":)45 b("Function)h(Key)g(1")1110 447 y Fo(In)64 b(the)g(ab)s(o)m(v)m(e)i (example,)74 b Fg(C-u)64 b Fo(is)g(again)i(b)s(ound)c(to)k(the)e (function)1110 556 y Fn(universal-argument)39 b Fo(\(just)k(as)h(it)g (w)m(as)g(in)g(the)f(\014rst)g(example\),)49 b(`)p Fg(C-x)1110 666 y(C-r)p Fo(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f Fn(re-read-init-file)p Fo(,)c(and)j(`)p Fn(ESC)h([)g(1)g(1)1110 775 y(~)p Fo(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p Fn(Function)e(Key)g(1)p Fo('.)630 961 y(The)g(follo)m(wing)i Fh(gnu)f Fo(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 b(ailable)32 b(when)d(sp)s(ecifying)630 1071 y(k)m(ey)i(sequences:)630 1257 y Fg(\\C-)336 b Fo(con)m(trol)32 b(pre\014x)630 1443 y Fg(\\M-)336 b Fo(meta)31 b(pre\014x)630 1629 y Fg(\\e)384 b Fo(an)30 b(escap)s(e)h(c)m(haracter)630 1815 y Fg(\\\\)384 b Fo(bac)m(kslash)630 2001 y Fg(\\)p Fn(")g(")p Fo(,)30 b(a)h(double)f(quotation)i(mark)630 2186 y Fg(\\')384 b Fn(')p Fo(,)30 b(a)h(single)g(quote)g(or)f(ap)s (ostrophe)630 2372 y(In)d(addition)h(to)g(the)g Fh(gnu)f Fo(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g (bac)m(kslash)630 2482 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 2668 y Fn(\\a)384 b Fo(alert)31 b(\(b)s(ell\))630 2854 y Fn(\\b)384 b Fo(bac)m(kspace)630 3040 y Fn(\\d)g Fo(delete)630 3226 y Fn(\\f)g Fo(form)30 b(feed)630 3412 y Fn(\\n)384 b Fo(newline)630 3597 y Fn(\\r)g Fo(carriage)32 b(return)630 3783 y Fn(\\t)384 b Fo(horizon)m(tal)32 b(tab)630 3969 y Fn(\\v)384 b Fo(v)m(ertical)32 b(tab)630 4155 y Fn(\\)p Fg(nnn)288 b Fo(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 b Fe(nnn)e Fo(\(one)i(to)1110 4265 y(three)c(digits\))630 4451 y Fn(\\x)p Fg(HH)288 b Fo(the)38 b(eigh)m(t-bit)i(c)m(haracter)g(whose)e (v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 b(alue)39 b Fe(HH)1110 4560 y Fo(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 4746 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g(macro,)i(single)e (or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)630 4856 y(indicate)23 b(a)e(macro)h(de\014nition.)38 b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f(name.)38 b(In)630 4965 y(the)22 b(macro)f(b)s(o)s(dy)-8 b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m(e)j (are)e(expanded.)37 b(Bac)m(kslash)630 5075 y(will)j(quote)h(an)m(y)f (other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k(including)39 b(`)p Fn(")p Fo(')h(and)g(`)p Fn(')p Fo('.)69 b(F)-8 b(or)630 5185 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i (mak)m(e)h(`)p Fg(C-x)j Fn(\\)p Fo(')c(insert)f(a)h(single)h(`)p Fn(\\)p Fo(')f(in)m(to)g(the)g(line:)870 5332 y Fn("\\C-x\\\\":)45 b("\\\\")p eop end %%Page: 11 14 TeXDict begin 11 13 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(11)150 299 y Fd(1.3.2)63 b(Conditional)41 b(Init)g(Constructs)150 446 y Fo(Readline)c(implemen)m (ts)g(a)h(facilit)m(y)g(similar)f(in)g(spirit)f(to)i(the)f(conditional) h(compilation)g(features)f(of)150 555 y(the)31 b(C)f(prepro)s(cessor)g (whic)m(h)g(allo)m(ws)i(k)m(ey)g(bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s(erformed)f(as)i(the)150 665 y(result)f(of)h(tests.)41 b(There)30 b(are)h(four)f(parser)f (directiv)m(es)j(used.)150 824 y Fn($if)336 b Fo(The)31 b Fn($if)f Fo(construct)i(allo)m(ws)h(bindings)d(to)i(b)s(e)e(made)i (based)f(on)g(the)g(editing)h(mo)s(de,)g(the)630 934 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g(application)h(using)f (Readline.)64 b(The)38 b(text)h(of)f(the)g(test)630 1044 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m(haracters)i (are)f(required)e(to)i(isolate)i(it.)630 1203 y Fn(mode)288 b Fo(The)30 b Fn(mode=)e Fo(form)i(of)g(the)h Fn($if)e Fo(directiv)m(e)j(is)e(used)f(to)i(test)g(whether)e(Read-)1110 1313 y(line)44 b(is)f(in)g Fn(emacs)f Fo(or)h Fn(vi)g Fo(mo)s(de.)79 b(This)42 b(ma)m(y)i(b)s(e)e(used)h(in)g(conjunction) 1110 1422 y(with)c(the)h(`)p Fn(set)29 b(keymap)p Fo(')38 b(command,)k(for)d(instance,)j(to)e(set)g(bindings)e(in)1110 1532 y(the)32 b Fn(emacs-standard)c Fo(and)j Fn(emacs-ctlx)d Fo(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 1641 y(starting)f(out)g (in)f Fn(emacs)f Fo(mo)s(de.)630 1801 y Fn(term)288 b Fo(The)26 b Fn(term=)g Fo(form)g(ma)m(y)i(b)s(e)e(used)g(to)i(include)f (terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 1910 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f(output)g(b)m(y)g (the)g(terminal's)1110 2020 y(function)24 b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g(the)g(`)p Fn(=)p Fo(')g(is)g(tested)h(against)1110 2130 y(b)s(oth)k(the)h(full)g (name)g(of)g(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g (terminal)1110 2239 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Fn(-)p Fo('.)50 b(This)33 b(allo)m(ws)i Fn(sun)e Fo(to)h(matc)m(h)g(b)s (oth)f Fn(sun)g Fo(and)1110 2349 y Fn(sun-cmd)p Fo(,)c(for)h(instance.) 630 2508 y Fn(application)1110 2618 y Fo(The)21 b Fe(application)j Fo(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h (set-)1110 2727 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h (Readline)g(library)g(sets)g(the)g Fe(application)1110 2837 y(name)p Fo(,)g(and)e(y)m(ou)g(can)h(test)g(for)f(a)g(particular)h (v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g(used)f(to)1110 2946 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g(for)h (a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 3056 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey)f (sequence)h(that)f(quotes)1110 3166 y(the)e(curren)m(t)f(or)g(previous) g(w)m(ord)g(in)g(Bash:)1350 3300 y Fn($if)47 b(Bash)1350 3410 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 3519 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 3629 y($endif)150 3788 y($endif)192 b Fo(This)29 b(command,)i(as)f(seen)h(in)f(the)g (previous)g(example,)h(terminates)g(an)g Fn($if)e Fo(command.)150 3948 y Fn($else)240 b Fo(Commands)29 b(in)h(this)h(branc)m(h)e(of)i (the)f Fn($if)g Fo(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g (fails.)150 4107 y Fn($include)96 b Fo(This)43 b(directiv)m(e)i(tak)m (es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g (commands)630 4217 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e (from)630 4326 y Fn(/etc/inputrc)p Fo(:)870 4461 y Fn($include)46 b(/etc/inputrc)150 4660 y Fd(1.3.3)63 b(Sample)41 b(Init)g(File)150 4807 y Fo(Here)27 b(is)f(an)h(example)g(of)f(an)h Fe(inputrc)k Fo(\014le.)39 b(This)26 b(illustrates)h(k)m(ey)h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 4917 y(conditional)j(syn)m (tax.)p eop end %%Page: 12 15 TeXDict begin 12 14 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(12)390 408 y Fn(#)47 b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h (editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h (Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g (re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(system-wide)e (bindings)h(and)g(variable)390 1285 y(#)h(assignments)e(from)i (/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.) 390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) h(function)f(name)g(is)h(ignored)p 3970 2401 42 76 v 390 2600 a(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390 2929 y(#"\\M-OD":)379 b(backward-char)390 3039 y(#"\\M-OC":)g(forward-char)390 3148 y(#"\\M-OA":)g (previous-history)390 3258 y(#"\\M-OB":)g(next-history)390 3367 y(#)390 3477 y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 3587 y(#)390 3696 y("\\M-[D":)380 b(backward-char)390 3806 y("\\M-[C":)g(forward-char)390 3915 y("\\M-[A":)g (previous-history)390 4025 y("\\M-[B":)g(next-history)390 4134 y(#)390 4244 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode) 390 4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g (previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) 390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(13)390 299 y Fn(#"\\M-\\C-[A":)331 b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f (are)h(convenient)e(for)i(shell)f(interaction)390 1504 y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g (backslash)e(\(testing)h(backslash)f(escapes)390 2381 y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") 390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e (to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f (on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f ("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h (available)390 3587 y(set)f(bell-style)e(visible)390 3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) 390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e (characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g (converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j (convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g (eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h (meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f (completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g (he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f (completion-query-items)42 b(150)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(14)390 299 y Fn(#)47 b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 847 y($endif)150 1077 y Fm(1.4)68 b(Bindable)45 b(Readline)i(Commands) 150 1237 y Fo(This)25 b(section)i(describ)s(es)d(Readline)j(commands)e (that)h(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)39 b(Command)150 1346 y(names)30 b(without)h(an)f(accompan)m(ying)i(k)m (ey)f(sequence)g(are)g(un)m(b)s(ound)c(b)m(y)k(default.)275 1480 y(In)25 b(the)h(follo)m(wing)i(descriptions,)f Fe(p)s(oin)m(t)h Fo(refers)e(to)h(the)f(curren)m(t)g(cursor)g(p)s(osition,)h(and)f Fe(mark)31 b Fo(refers)150 1590 y(to)40 b(a)f(cursor)f(p)s(osition)h (sa)m(v)m(ed)h(b)m(y)f(the)g Fn(set-mark)d Fo(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f(p)s(oin)m(t)g(and)150 1699 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f Fe(region)p Fo(.)150 1897 y Fd(1.4.1)63 b(Commands)42 b(F)-10 b(or)41 b(Mo)m(ving)150 2067 y Fn(beginning-of-line)26 b(\(C-a\))630 2177 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(curren)m(t)g (line.)150 2335 y Fn(end-of-line)d(\(C-e\))630 2444 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 2602 y Fn(forward-char)c(\(C-f\))630 2711 y Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(c)m(haracter.)150 2869 y Fn(backward-char)c(\(C-b\)) 630 2978 y Fo(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 3136 y Fn(forward-word)d(\(M-f\))630 3246 y Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 3355 y(digits.)150 3513 y Fn(backward-word)27 b(\(M-b\))630 3622 y Fo(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g (curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 b(are)g(comp)s(osed)630 3732 y(of)d(letters)g(and)f(digits.)150 3889 y Fn(clear-screen)d(\(C-l\))630 3999 y Fo(Clear)g(the)g(screen)f (and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f (curren)m(t)g(line)g(at)g(the)g(top)630 4109 y(of)k(the)f(screen.)150 4266 y Fn(redraw-current-line)25 b(\(\))630 4376 y Fo(Refresh)30 b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s (ound.)150 4573 y Fd(1.4.2)63 b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f(History)150 4744 y Fn(accept-line)27 b(\(Newline)h(or)i(Return\))630 4854 y Fo(Accept)36 b(the)g(line)f (regardless)h(of)f(where)g(the)g(cursor)g(is.)55 b(If)34 b(this)h(line)h(is)f(non-empt)m(y)-8 b(,)37 b(it)630 4963 y(ma)m(y)32 b(b)s(e)g(added)f(to)h(the)g(history)g(list)h(for)e (future)g(recall)j(with)d Fn(add_history\(\))p Fo(.)42 b(If)31 b(this)630 5073 y(line)g(is)f(a)h(mo)s(di\014ed)e(history)h (line,)h(the)g(history)f(line)h(is)f(restored)h(to)g(its)g(original)g (state.)150 5230 y Fn(previous-history)26 b(\(C-p\))630 5340 y Fo(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g (fetc)m(hing)g(the)g(previous)f(command.)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(15)150 299 y Fn(next-history)27 b(\(C-n\))630 408 y Fo(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i (history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 558 y Fn(beginning-of-history)25 b(\(M-<\))630 667 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 b(.)150 817 y Fn(end-of-history)26 b(\(M->\))630 927 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 1076 y Fn(reverse-search-history)24 b(\(C-r\))630 1186 y Fo(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g (line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 1295 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m (tal)i(searc)m(h.)150 1445 y Fn(forward-search-history)24 b(\(C-s\))630 1554 y Fo(Searc)m(h)30 b(forw)m(ard)f(starting)h(at)g (the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn')f(through)g(the) h(the)630 1664 y(history)g(as)h(necessary)-8 b(.)41 b(This)30 b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 1813 y Fn (non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-p\))630 1923 y Fo(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g (the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g (his-)630 2032 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m (tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 2142 y(user.)150 2291 y Fn(non-incremental-forward-)o(sear)o(ch-h)o (ist)o(ory)24 b(\(M-n\))630 2401 y Fo(Searc)m(h)30 b(forw)m(ard)f (starting)h(at)g(the)g(curren)m(t)f(line)h(and)f(mo)m(ving)h(`do)m(wn') f(through)g(the)h(the)630 2511 y(history)d(as)f(necessary)i(using)e(a)h (non-incremen)m(tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i (the)630 2620 y(user.)150 2770 y Fn(history-search-forward)d(\(\))630 2879 y Fo(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g (the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 2989 y(start)36 b(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m (t.)58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the) 630 3098 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3208 y(command)d(is)h(un)m(b)s(ound.)150 3357 y Fn(history-search-backward)24 b(\(\))630 3467 y Fo(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 3577 y(start)g(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.) 58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630 3686 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3796 y(command)d(is)h(un)m(b)s(ound.)150 3945 y Fn(history-substr-search-fo)o(rwar)o(d)24 b(\(\))630 4055 y Fo(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g (the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 4164 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4274 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4384 y(is)e(un)m(b)s(ound.)150 4533 y Fn (history-substr-search-ba)o(ckwa)o(rd)24 b(\(\))630 4643 y Fo(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 4752 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4862 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4971 y(is)e(un)m(b)s(ound.)150 5121 y Fn(yank-nth-arg)d (\(M-C-y\))630 5230 y Fo(Insert)37 b(the)g(\014rst)f(argumen)m(t)i(to)f (the)h(previous)e(command)h(\(usually)g(the)g(second)g(w)m(ord)630 5340 y(on)32 b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 b(an)g(argumen)m(t)g Fe(n)p Fo(,)g(insert)g(the)g Fe(n)p Fo(th)f(w)m(ord)g(from)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(16)630 299 y(the)35 b(previous)f(command)h(\(the)g(w)m(ords)g(in)f(the)h(previous)g (command)f(b)s(egin)h(with)f(w)m(ord)630 408 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f Fe(n)p Fo(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)630 518 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h Fe(n)e Fo(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e(if)630 628 y(the)e(`)p Fn(!)p Fg(n)p Fo(')f(history)g(expansion)g(had)g(b)s (een)g(sp)s(eci\014ed.)150 798 y Fn(yank-last-arg)d(\(M-.)i(or)h(M-_\)) 630 908 y Fo(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous)f (command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 1018 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m (t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Fn(yank-nth-arg)p Fo(.)630 1127 y(Successiv)m(e)26 b(calls)g(to)f Fn(yank-last-arg)c Fo(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i (inserting)630 1237 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp) s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i (of)f(eac)m(h)h(line)630 1346 y(in)36 b(turn.)58 b(An)m(y)36 b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g (calls)h(determines)630 1456 y(the)d(direction)g(to)h(mo)m(v)m(e)g (through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e (switc)m(hes)h(the)630 1565 y(direction)23 b(through)g(the)g(history)f (\(bac)m(k)i(or)f(forw)m(ard\).)38 b(The)22 b(history)h(expansion)g (facilities)630 1675 y(are)28 b(used)f(to)h(extract)h(the)f(last)g (argumen)m(t,)h(as)e(if)h(the)g(`)p Fn(!$)p Fo(')f(history)g(expansion) h(had)f(b)s(een)630 1785 y(sp)s(eci\014ed.)150 1995 y Fd(1.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 2173 y Fg(end-of-file)27 b Fn(\(usually)h(C-d\))630 2282 y Fo(The)e(c)m(haracter)h(indicating)h(end-of-\014le)e(as)h(set,)g (for)f(example,)i(b)m(y)e Fn(stty)p Fo(.)39 b(If)25 b(this)h(c)m (harac-)630 2392 y(ter)c(is)g(read)g(when)e(there)i(are)h(no)e(c)m (haracters)j(on)d(the)h(line,)i(and)d(p)s(oin)m(t)h(is)g(at)h(the)f(b)s (eginning)630 2501 y(of)31 b(the)f(line,)h(Readline)g(in)m(terprets)g (it)g(as)f(the)h(end)f(of)g(input)f(and)h(returns)f Fh(eof)p Fo(.)150 2672 y Fn(delete-char)e(\(C-d\))630 2782 y Fo(Delete)35 b(the)f(c)m(haracter)h(at)f(p)s(oin)m(t.)49 b(If)33 b(this)g(function)g (is)g(b)s(ound)e(to)j(the)g(same)f(c)m(haracter)630 2891 y(as)e(the)f(tt)m(y)i Fh(eof)d Fo(c)m(haracter,)j(as)f Fg(C-d)e Fo(commonly)i(is,)g(see)g(ab)s(o)m(v)m(e)h(for)e(the)g (e\013ects.)150 3062 y Fn(backward-delete-char)25 b(\(Rubout\))630 3172 y Fo(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 3281 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 3452 y Fn(forward-backward-delete-)o(char)24 b(\(\))630 3561 y Fo(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h (unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 3671 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s (ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 3781 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 3951 y Fn(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 4061 y Fo(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h (v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 4170 y(sequences)d(lik)m(e)g Fg(C-q)p Fo(,)f(for)g(example.)150 4341 y Fn(tab-insert)e(\(M-TAB\))630 4451 y Fo(Insert)i(a)h(tab)f(c)m (haracter.)150 4621 y Fn(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o (\))630 4731 y Fo(Insert)g(y)m(ourself.)150 4902 y Fn(transpose-chars)c (\(C-t\))630 5011 y Fo(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g (cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g (cursor,)630 5121 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m (ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) g(of)h(the)630 5230 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h (last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 b(Negativ)m(e)25 b(argumen)m(ts)630 5340 y(ha)m(v)m(e)32 b(no)e(e\013ect.)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(17)150 299 y Fn(transpose-words)26 b(\(M-t\))630 408 y Fo(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(past)g(the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin) m(t)f(past)g(that)630 518 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i (the)f(line,)i(this)e(transp)s(oses)g(the)630 628 y(last)j(t)m(w)m(o)h (w)m(ords)e(on)g(the)h(line.)150 792 y Fn(upcase-word)c(\(M-u\))630 902 y Fo(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i (w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 1012 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h (the)e(cursor.)150 1176 y Fn(downcase-word)d(\(M-l\))630 1286 y Fo(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i (w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m (ercase)630 1396 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m (v)m(e)i(the)f(cursor.)150 1560 y Fn(capitalize-word)26 b(\(M-c\))630 1670 y Fo(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m (wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h (capitalize)630 1780 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f (mo)m(v)m(e)i(the)f(cursor.)150 1944 y Fn(overwrite-mode)26 b(\(\))630 2054 y Fo(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) h(switc)m(hes)630 2163 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m (t,)i(switc)m(hes)e(to)630 2273 y(insert)30 b(mo)s(de.)41 b(This)30 b(command)h(a\013ects)h(only)e Fn(emacs)f Fo(mo)s(de;)i Fn(vi)f Fo(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 2383 y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f Fn(readline\(\))c Fo(starts)k(in)f(insert)g(mo)s(de.)630 2520 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s (ound)c(to)j Fn(self-insert)c Fo(replace)k(the)g(text)g(at)630 2629 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h (the)f(righ)m(t.)126 b(Characters)59 b(b)s(ound)d(to)630 2739 y Fn(backward-delete-char)25 b Fo(replace)31 b(the)g(c)m(haracter) h(b)s(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 2876 y(By)g(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150 3081 y Fd(1.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 3255 y Fn(kill-line)28 b(\(C-k\))630 3365 y Fo(Kill)j(the)f(text)i (from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f(line.)150 3530 y Fn(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 3639 y Fo(Kill)h(bac)m(kw)m(ard)g(to)g(the)f(b)s(eginning)g(of)g(the)h (line.)150 3804 y Fn(unix-line-discard)26 b(\(C-u\))630 3914 y Fo(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f (b)s(eginning)g(of)h(the)f(curren)m(t)g(line.)150 4079 y Fn(kill-whole-line)c(\(\))630 4188 y Fo(Kill)37 b(all)g(c)m (haracters)h(on)f(the)f(curren)m(t)h(line,)h(no)f(matter)g(where)f(p)s (oin)m(t)h(is.)59 b(By)36 b(default,)630 4298 y(this)30 b(is)h(un)m(b)s(ound.)150 4462 y Fn(kill-word)d(\(M-d\))630 4572 y Fo(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f (curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)h (the)g(end)630 4682 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fn(forward-word)p Fo(.)150 4846 y Fn(backward-kill-word)25 b(\(M-DEL\))630 4956 y Fo(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40 b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h(the)g(same)g(as)g Fn(backward-word)p Fo(.)150 5121 y Fn(unix-word-rubout)d(\(C-w\))630 5230 y Fo(Kill)32 b(the)g(w)m(ord)f(b)s(ehind)f(p)s(oin)m(t,)i(using)f (white)h(space)g(as)g(a)g(w)m(ord)f(b)s(oundary)-8 b(.)43 b(The)31 b(killed)630 5340 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f (kill-ring.)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(18)150 299 y Fn (unix-filename-rubout)25 b(\(\))630 408 y Fo(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e(white)g(space)h (and)f(the)g(slash)g(c)m(haracter)i(as)f(the)630 518 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g(sa)m (v)m(ed)g(on)g(the)f(kill-ring.)150 693 y Fn(delete-horizontal-space)24 b(\(\))630 803 y Fo(Delete)33 b(all)e(spaces)g(and)e(tabs)i(around)e(p) s(oin)m(t.)41 b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 978 y Fn(kill-region)d(\(\))630 1088 y Fo(Kill)k(the)f(text)i(in)e(the) g(curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g (un)m(b)s(ound.)150 1263 y Fn(copy-region-as-kill)25 b(\(\))630 1373 y Fo(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h (the)f(kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m (t)f(a)m(w)m(a)m(y)-8 b(.)630 1482 y(By)31 b(default,)f(this)h(command) f(is)g(un)m(b)s(ound.)150 1657 y Fn(copy-backward-word)25 b(\(\))630 1767 y Fo(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) f(are)i(the)630 1877 y(same)31 b(as)f Fn(backward-word)p Fo(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150 2052 y Fn(copy-forward-word)26 b(\(\))630 2161 y Fo(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h (bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630 2271 y(same)f(as)f Fn(forward-word)p Fo(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 2446 y Fn(yank)f(\(C-y\))630 2556 y Fo(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h (p)s(oin)m(t.)150 2731 y Fn(yank-pop)d(\(M-y\))630 2841 y Fo(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 2950 y(command)30 b(is)h Fn(yank)e Fo(or)h Fn(yank-pop)p Fo(.)150 3165 y Fd(1.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m (ts)150 3345 y Fn(digit-argument)26 b(\()p Fg(M-0)p Fn(,)j Fg(M-1)p Fn(,)h(...)f Fg(M--)p Fn(\))630 3455 y Fo(Add)d(this)h(digit)g (to)h(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f (new)f(argumen)m(t.)630 3564 y Fg(M--)j Fo(starts)i(a)g(negativ)m(e)i (argumen)m(t.)150 3740 y Fn(universal-argument)25 b(\(\))630 3849 y Fo(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g (argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m (y)f(one)630 3959 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h (leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 4068 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) m(y)f(digits,)i(executing)f Fn(universal-argument)630 4178 y Fo(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h (otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 4288 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 4397 y(or)28 b(min)m(us)f(sign,)i(the)f(argumen)m(t)g(coun)m(t)h(for)e (the)i(next)f(command)f(is)h(m)m(ultiplied)h(b)m(y)e(four.)630 4507 y(The)37 b(argumen)m(t)h(coun)m(t)f(is)h(initially)h(one,)g(so)f (executing)g(this)f(function)g(the)h(\014rst)e(time)630 4616 y(mak)m(es)d(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)i(second)e (time)i(mak)m(es)f(the)g(argumen)m(t)g(coun)m(t)h(six-)630 4726 y(teen,)e(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g(not)h (b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 4941 y Fd(1.4.6)63 b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 b(Y)-10 b(ou)150 5121 y Fn(complete)28 b(\(TAB\))630 5230 y Fo(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g (b)s(efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 5340 y(p)s(erformed)29 b(is)h(application-sp)s(eci\014c.)42 b(The)30 b(default)h(is)f(\014lename)h(completion.)p eop end %%Page: 19 22 TeXDict begin 19 21 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(19)150 299 y Fn (possible-completions)25 b(\(M-?\))630 408 y Fo(List)35 b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s(efore)e(p)s (oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 518 y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i(columns)f (used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 b(alue)33 b(of)630 628 y Fn(completion-display-width)o Fo(,)g(the)j(v)-5 b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)38 b Fn(COLUMNS)p Fo(,)630 737 y(or)30 b(the)h(screen)f(width,)g(in)g (that)h(order.)150 883 y Fn(insert-completions)25 b(\(M-*\))630 992 y Fo(Insert)30 b(all)h(completions)h(of)f(the)g(text)g(b)s(efore)f (p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s(een)e(generated)630 1102 y(b)m(y)g Fn(possible-completions)p Fo(.)150 1247 y Fn(menu-complete)d(\(\))630 1357 y Fo(Similar)d(to)g Fn(complete)p Fo(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f (completed)i(with)e(a)i(single)f(matc)m(h)630 1466 y(from)37 b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39 b(execution)g(of)f Fn(menu-complete)630 1576 y Fo(steps)i(through)g (the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i (matc)m(h)f(in)f(turn.)630 1685 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g (of)g(completions,)i(the)e(b)s(ell)g(is)g(rung)f(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 1795 y(of)f Fn(bell-style)p Fo(\))e(and)h(the)h(original)i(text)f(is)f(restored.)57 b(An)36 b(argumen)m(t)h(of)f Fe(n)f Fo(mo)m(v)m(es)i Fe(n)630 1905 y Fo(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e (matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f (used)g(to)630 2014 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g (list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s (ound)e(to)630 2124 y Fn(TAB)p Fo(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m (y)i(default.)150 2269 y Fn(menu-complete-backward)24 b(\(\))630 2379 y Fo(Iden)m(tical)36 b(to)g Fn(menu-complete)p Fo(,)d(but)h(mo)m(v)m(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g (p)s(ossible)630 2488 y(completions,)d(as)e(if)h Fn(menu-complete)26 b Fo(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 2634 y Fn(delete-char-or-list)25 b(\(\))630 2743 y Fo(Deletes)41 b(the)e(c)m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)h(b)s (eginning)e(or)h(end)f(of)h(the)630 2853 y(line)50 b(\(lik)m(e)h Fn(delete-char)p Fo(\).)96 b(If)49 b(at)h(the)g(end)f(of)h(the)f(line,) 55 b(b)s(eha)m(v)m(es)c(iden)m(tically)g(to)630 2963 y Fn(possible-completions)p Fo(.)35 b(This)30 b(command)g(is)g(un)m(b)s (ound)e(b)m(y)i(default.)150 3148 y Fd(1.4.7)63 b(Keyb)s(oard)41 b(Macros)150 3313 y Fn(start-kbd-macro)26 b(\(C-x)j(\(\))630 3422 y Fo(Begin)i(sa)m(ving)h(the)e(c)m(haracters)i(t)m(yp)s(ed)e(in)m (to)h(the)g(curren)m(t)f(k)m(eyb)s(oard)g(macro.)150 3568 y Fn(end-kbd-macro)d(\(C-x)i(\)\))630 3677 y Fo(Stop)e(sa)m(ving)h (the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m(to)i(the)e(curren)m(t)g(k)m (eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i(the)630 3787 y(de\014nition.)150 3932 y Fn(call-last-kbd-macro)c(\(C-x)k(e\))630 4042 y Fo(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard)f(macro)h (de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the)630 4151 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m(eyb)s (oard.)150 4297 y Fn(print-last-kbd-macro)25 b(\(\))630 4406 y Fo(Prin)m(t)30 b(the)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned) e(in)i(a)f(format)h(suitable)g(for)f(the)h Fe(inputrc)k Fo(\014le.)150 4591 y Fd(1.4.8)63 b(Some)41 b(Miscellaneous)i(Commands) 150 4756 y Fn(re-read-init-file)26 b(\(C-x)j(C-r\))630 4866 y Fo(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f(the)g Fe(inputrc)27 b Fo(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h(bindings)d (or)i(v)-5 b(ariable)630 4975 y(assignmen)m(ts)31 b(found)e(there.)150 5121 y Fn(abort)g(\(C-g\))630 5230 y Fo(Ab)s(ort)d(the)h(curren)m(t)f (editing)h(command)f(and)g(ring)h(the)f(terminal's)h(b)s(ell)g(\(sub)5 b(ject)26 b(to)i(the)630 5340 y(setting)j(of)g Fn(bell-style)p Fo(\).)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(20)150 299 y Fn (do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p Fg(x)p Fn(,)g(...)o(\))630 408 y Fo(If)e(the)h(meta\014ed)g(c)m(haracter)h Fe(x)34 b Fo(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g(command)h(that)g (is)g(b)s(ound)d(to)k(the)630 518 y(corresp)s(onding)g(upp)s(ercase)h (c)m(haracter.)150 667 y Fn(prefix-meta)d(\(ESC\))630 777 y Fo(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 b(.)630 887 y(T)m(yping)30 b(`)p Fn(ESC)g(f)p Fo(')g(is)h(equiv)-5 b(alen)m(t)31 b(to)g(t)m(yping)g Fg(M-f)p Fo(.)150 1036 y Fn(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 1146 y Fo(Incremen)m(tal)h (undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 1295 y Fn(revert-line)27 b(\(M-r\))630 1405 y Fo(Undo)33 b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 b(This)32 b(is)h(lik)m(e)i(executing)f(the)f Fn(undo)f Fo(command)630 1514 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.) 150 1664 y Fn(tilde-expand)d(\(M-~\))630 1773 y Fo(P)m(erform)j(tilde)h (expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 1923 y Fn(set-mark)d(\(C-@\))630 2032 y Fo(Set)33 b(the)g(mark)f(to)i(the)f (p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g (supplied,)f(the)h(mark)g(is)f(set)630 2142 y(to)f(that)g(p)s(osition.) 150 2291 y Fn(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 2401 y Fo(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h (sa)m(v)m(ed)630 2511 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s (osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 2660 y Fn(character-search)26 b(\(C-]\))630 2770 y Fo(A)f(c)m(haracter)h(is) f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s (ccurrence)g(of)g(that)g(c)m(haracter.)630 2879 y(A)30 b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s (ccurrences.)150 3029 y Fn(character-search-backwar)o(d)24 b(\(M-C-]\))630 3138 y Fo(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s (oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) g(that)630 3248 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f (searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 3397 y Fn(skip-csi-sequence)d(\(\))630 3507 y Fo(Read)i(enough)f(c)m (haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f (as)g(those)h(de\014ned)630 3616 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g (and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m (trol)g(Sequence)630 3726 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fn("\\)p Fo(e[)p Fn(")p Fo(,)g(k)m(eys)f(pro-)630 3836 y(ducing)31 b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e (explicitly)j(b)s(ound)c(to)i(a)h(readline)630 3945 y(command,)f (instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f (editing)h(bu\013er.)44 b(This)31 b(is)630 4055 y(un)m(b)s(ound)d(b)m (y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 4204 y Fn(insert-comment)26 b(\(M-#\))630 4314 y Fo(Without)36 b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36 b(of)g(the)g Fn(comment-begin)c Fo(v)-5 b(ariable)36 b(is)g(in-)630 4423 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f (curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g (supplied,)630 4533 y(this)k(command)h(acts)g(as)g(a)g(toggle:)55 b(if)37 b(the)f(c)m(haracters)i(at)g(the)e(b)s(eginning)g(of)h(the)g (line)630 4643 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)31 b(of)f Fn(comment-begin)p Fo(,)e(the)i(v)-5 b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 4752 y(c)m(haracters)42 b(in)d Fn(comment-begin)e Fo(are)j(deleted)h(from)f (the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 4862 y(either)31 b(case,)h(the)e(line)h(is)f(accepted)i(as)f(if)f(a)h (newline)f(had)g(b)s(een)f(t)m(yp)s(ed.)150 5011 y Fn(dump-functions)d (\(\))630 5121 y Fo(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g (their)g(k)m(ey)h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 5230 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h (output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 5340 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fe(inputrc)k Fo(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k (default.)p eop end %%Page: 21 24 TeXDict begin 21 23 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(21)150 299 y Fn(dump-variables)26 b(\(\))630 408 y Fo(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h (output)f(stream.)630 518 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g (supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m (y)g(that)630 628 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fe(inputrc)k Fo(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c (b)m(y)k(default.)150 787 y Fn(dump-macros)c(\(\))630 897 y Fo(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences)f (b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 1006 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e (supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 1116 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e Fe(inputrc)35 b Fo(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) d(b)m(y)630 1225 y(default.)150 1385 y Fn(emacs-editing-mode)e(\(C-e\)) 630 1494 y Fo(When)30 b(in)g Fn(vi)g Fo(command)g(mo)s(de,)g(this)h (causes)f(a)h(switc)m(h)g(to)g Fn(emacs)e Fo(editing)i(mo)s(de.)150 1654 y Fn(vi-editing-mode)26 b(\(M-C-j\))630 1763 y Fo(When)k(in)g Fn(emacs)f Fo(editing)i(mo)s(de,)f(this)h(causes)f(a)h(switc)m(h)g(to)g Fn(vi)f Fo(editing)h(mo)s(de.)150 1996 y Fm(1.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 2155 y Fo(While)32 b(the)g(Readline)g(library)f(do)s (es)g(not)h(ha)m(v)m(e)h(a)f(full)f(set)h(of)g Fn(vi)f Fo(editing)h(functions,)f(it)h(do)s(es)g(con)m(tain)150 2265 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f(the)g(line.)52 b(The)34 b(Readline)g Fn(vi)g Fo(mo)s(de)f(b)s(eha)m(v)m(es)i(as)f(sp)s (eci\014ed)f(in)150 2374 y(the)e Fh(posix)e Fo(standard.)275 2509 y(In)f(order)g(to)i(switc)m(h)g(in)m(teractiv)m(ely)i(b)s(et)m(w)m (een)d Fn(emacs)f Fo(and)g Fn(vi)h Fo(editing)g(mo)s(des,)g(use)g(the)g (command)150 2619 y Fg(M-C-j)36 b Fo(\(b)s(ound)h(to)h (emacs-editing-mo)s(de)i(when)d(in)g Fn(vi)h Fo(mo)s(de)f(and)g(to)i (vi-editing-mo)s(de)g(in)e Fn(emacs)150 2728 y Fo(mo)s(de\).)k(The)30 b(Readline)h(default)f(is)g Fn(emacs)f Fo(mo)s(de.)275 2863 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Fn(vi)f Fo(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g(`insertion')g(mo)s (de,)g(as)h(if)f(y)m(ou)150 2972 y(had)f(t)m(yp)s(ed)g(an)g(`)p Fn(i)p Fo('.)41 b(Pressing)29 b Fn(ESC)f Fo(switc)m(hes)i(y)m(ou)g(in)m (to)h(`command')e(mo)s(de,)h(where)e(y)m(ou)i(can)g(edit)g(the)150 3082 y(text)35 b(of)f(the)g(line)g(with)f(the)h(standard)f Fn(vi)g Fo(mo)m(v)m(emen)m(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g (history)f(lines)h(with)150 3191 y(`)p Fn(k)p Fo(')d(and)e(subsequen)m (t)h(lines)h(with)f(`)p Fn(j)p Fo(',)g(and)g(so)h(forth.)p eop end %%Page: 22 25 TeXDict begin 22 24 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(22)150 299 y Fk(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fo(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fl(\015)e Fo(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 y Fn(http://fsf.org/)390 964 y Fo(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fe(free)36 b Fo(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 23 26 TeXDict begin 23 25 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(23)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m (ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g (the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fh(asci)r(i)g Fo(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j Fc(SGML)f Fo(or)f Fc(XML)g Fo(using)g(a)g(publicly)330 2504 y(a)m(v)-5 b(ailable)42 b Fc(DTD)p Fo(,)h(and)c (standard-conforming)g(simple)h Fc(HTML)p Fo(,)i(P)m(ostScript)e(or)f Fc(PDF)h Fo(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Fc(PNG)p Fo(,)i Fc(X)n(CF)330 2724 y Fo(and)e Fc(JPG)p Fo(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Fc(SGML)54 b Fo(or)f Fc(XML)h Fo(for)g(whic)m(h)f(the)h Fc(DTD)g Fo(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Fc(HTML)p Fo(,)330 3052 y(P)m(ostScript)31 b(or)f Fc(PDF)h Fo(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 24 27 TeXDict begin 24 26 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(24)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j (and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e (License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e (in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h (other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f (License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h (the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 25 28 TeXDict begin 25 27 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(25)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 26 29 TeXDict begin 26 28 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(26)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g (section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g (nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s (di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m (ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e (as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i (the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s (di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f (F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m (k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g (same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m (y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m (y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g (not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 27 30 TeXDict begin 27 29 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(27)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h (on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g (is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i (resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g (the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e (b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 28 31 TeXDict begin 28 30 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(28)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f (in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 762 y(See)c Fn(http://www.gnu.org/copy)o(left)o(/)p Fo(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g (distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g (particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h (\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i (the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 29 32 TeXDict begin 29 31 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(29)150 299 y Fm(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fo(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fb(Copyright)42 b(\(C\))79 b Fa(year)g(your)40 b(name)p Fb(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f (license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y Fo(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 y Fb(with)40 b(the)g(Invariant)h(Sections)g(being)g Fa(list)f(their)g(titles)p Fb(,)h(with)547 1646 y(the)f(Front-Cover)i (Texts)e(being)g Fa(list)p Fb(,)h(and)f(with)g(the)g(Back-Cover)h (Texts)547 1733 y(being)f Fa(list)p Fb(.)275 1868 y Fo(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f (Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g (of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g (alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g (examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m (hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF readline-6.3/doc/readline.dvi0000664000043600000240000114644012276516302015022 0ustar chetstaff÷ƒ’À;è TeX output 2014.02.11:1657‹ÿÿÿÿŸòŽ ƒ33 þšà‘GóJÂÖN ¼j cmbx12ëJGNU–ÆqReadline“LibraryŽŽ‘GŸ 0‰±ž¸Ÿ šª’Ï€Úó6Kñ`y ó3 cmr10áEdition–¦f6.3,“for“ó7ßê  b> ó3 cmmi10é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘›/á1ޤ 33‘!G1.2‘ ó5Readline‘¦fIn²!teractionQl‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:ޑգá1Ž¡‘0G1.2.1‘ ó5Readline–¦fBare“Essen²!tials-¾‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘±õá1Ž¡‘0G1.2.2‘ ó5Readline›¦fMo•²!v“emen“t˜CommandsA*‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Åaá2Ž¡‘0G1.2.3‘ ó5Readline–¦fKilling“Commands‘Ÿ”‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ #Ëá2Ž¡‘0G1.2.4‘ ó5Readline‘¦fArgumen²!ts‘²#‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 6[á3Ž¡‘0G1.2.5‘ ó5Searc²!hing–¦ffor“Commands“in“the“Historyh ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ìCá3Ž¡‘!G1.3‘ ó5Readline–¦fInit“File‘‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ™Gá4Ž¡‘0G1.3.1‘ ó5Readline–¦fInit“File“Syn²!tax‘‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ £Uá4Ž¡‘0G1.3.2‘ ó5Conditional–¦fInit“Constructs‘j‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ î>á11Ž¡‘0G1.3.3‘ ó5Sample–¦fInit“File‘½Ö‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ B á11Ž¡‘!G1.4‘ ó5Bindable–¦fReadline“Commands‘®Ê‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 3á14Ž¡‘0G1.4.1‘ ó5Commands–¦fF‘ÿeor“Mo²!ving=P‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Á‡á14Ž¡‘0G1.4.2‘ ó5Commands–¦fF‘ÿeor“Manipulating“The“History‘hú‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ í1á14Ž¡‘0G1.4.3‘ ó5Commands–¦fF›ÿeor“Changing“T˜ext‘鈑é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ m¿á16Ž¡‘0G1.4.4‘ ó5Killing–¦fAnd“Y‘ÿeanking‘¼‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Œôá17Ž¡‘0G1.4.5‘ ó5SpMÞecifying–¦fNumeric“Argumen²!ts‘]^‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ á•á18Ž¡‘0G1.4.6‘ ó5Letting–¦fReadline“T²!ypMÞe“F›ÿeor“Y˜ou‘¹Ú‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ >á18Ž¡‘0G1.4.7‘ ó5KeybMÞoard‘¦fMacros‘Ò?‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Vvá19Ž¡‘0G1.4.8‘ ó5Some–¦fMiscellaneous“Commands‘f‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ êSá19Ž¡‘!G1.5‘ ó5Readline–¦fvi“MoMÞde‘³¸‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 7ïá21ŽŸ33‘Gë\2‘32Programming–ffwith“GNU“Readline‘ÙÊ‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ ‘1ë\22ަ‘!Gá2.1‘ ó5Basic‘¦fBeha²!vior‘Ñì‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ V$á22Ž¡‘!G2.2‘ ó5Custom‘¦fF‘ÿeunctionsE¿‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Éöá23Ž¡‘0G2.2.1‘ ó5Readline‘¦fT²!ypMÞedefsN‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ž…á24Ž¡‘0G2.2.2‘ ó5W›ÿeriting–¦fa“New“F˜unction‘àÔ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ e á24Ž¡‘!G2.3‘ ó5Readline‘¦fV‘ÿeariables‘Îø‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ S0á25Ž¡‘!G2.4‘ ó5Readline›¦fCon•²!v“enience˜F‘ÿeunctions‘®È‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 3á30Ž¡‘0G2.4.1‘ ó5Naming–¦fa“F‘ÿeunction‘–â‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ á30Ž¡‘0G2.4.2‘ ó5Selecting–¦fa“Keymap‘“ñ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ (á30Ž¡‘0G2.4.3‘ ó5Binding‘¦fKeys‘;d‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ¿›á31Ž¡‘0G2.4.4‘ ó5AssoMÞciating–¦fF‘ÿeunction“Names“and“Bindings‘&Ë‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ «á33Ž¡‘0G2.4.5‘ ó5Allo²!wing‘¦fUndoing‘F‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ÊOá34Ž¡‘0G2.4.6‘ ó5Redispla²!y‘Ÿ°‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ #çá35Ž¡‘0G2.4.7‘ ó5MoMÞdifying‘¦fT‘ÿeext‘V¢‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ÚÙá36Ž¡‘0G2.4.8‘ ó5Character‘¦fInput‘¢•‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ &Ìá36Ž¡‘0G2.4.9‘ ó5T‘ÿeerminal‘¦fManagemen²!t µ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Žìá37Ž¡‘0G2.4.10‘ ó5Utilit²!y‘¦fF‘ÿeunctions‘Üø‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ a/á38Ž¡‘0G2.4.11‘ ó5Miscellaneous‘¦fF‘ÿeunctions‘ÍZ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Q’á39Ž¡‘0G2.4.12‘ ó5Alternate‘¦fIn²!terface‘\‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ›“á40Ž¡‘0G2.4.13‘ ó5A–¦fReadline“Example‘áÌ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ fá40ŽŽŒ‹ÿÿÿþ¿Ÿò’½š©áiiŽŽŽ ƒ33 ý†ÌÍ‘0G2.4.14‘ ó5Alternate–¦fIn²!terface“ExampleA+‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Åbá42ޤ 33‘!G2.5‘ ó5Readline–¦fSignal“Handling.W‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘²á43Ž¡‘!G2.6‘ ó5Custom‘¦fCompleters‘>è‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Ãá46Ž¡‘0G2.6.1‘ ó5Ho²!w–¦fCompleting“W‘ÿeorks‘Ö‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ZSá46Ž¡‘0G2.6.2‘ ó5Completion‘¦fF‘ÿeunctions‘Q¾‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Õöá47Ž¡‘0G2.6.3‘ ó5Completion‘¦fV‘ÿeariables)Ü‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘®á48Ž¡‘0G2.6.4‘ ó5A–¦fShort“Completion“Example‘?/‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Ãgá52ŽŸ33‘Gë\Apps3endix‘ffAŽ‘|(·GNU–ffF‘þ¦free“Dos3cumenŒÌtation“LicenseŽŸ‘4‹w‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ Ë3ë\61ޤ ÿ‘GConcept‘ffIndex‘ü6‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ ³ë\69Ž¡‘GF›þ¦function–ffand“V˜ariable“Index‘=‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ ôƒë\70ŽŽŒ‹=»Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH1ŽŽŽ ƒ33 ý ÌÍ‘GëS1‘ ¸QCommand–z³Line“EditingŽŽŸ§‘GáThis–¦fcš²!hapter“describMÞes“the“basic“features“of“the“ó<Œ-ø ó3 cmcsc10çgnu“ácommand“line“editing“in˜terface.ŽŸñÈ‘Gë\1.1‘™InŒÌtros3duction–f@to“Line“EditingŽŽŸ33‘GáThe–¦ffolloš²!wing“paragraphs“describMÞe“the“notation“used“to“represen˜t“k˜eystrok˜es.Ž©,‘!GThe–Yútext›Yùó=ßêKi“ákš²!ey“sequence“b˜y“stripping“the“eigh˜th“bit“and“pre xingŽŽŒ‹ˆlŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH6ŽŽŽ ƒ33 ý ÌÍ’…³-an–íÎâESC“ác•²!haracter,‘¹con“v“erting–íÎthem“to‘íÍa“meta-pre xed“k²!ey“sequence.ޤ 33’…³-The–¦fdefault“v‘ÿdDalue“is“`âoná'.Ž©™š‘Kâ:âdisable-completionŽ¡’…³-áIf–gset“to–g`âOná',‘—?Readline“will–ginhibit“w²!ord“completion.‘èCompletionŽ¡’…³-cš²!haracters–!Ÿwill“bMÞe‘!žinserted“in˜to“the“line“as“if‘!žthey“had“bšMÞeen“mapp˜edŽ¡’…³-to–¦fâself-insertá.‘ÝÝThe“default“is“`âoffá'.ŽŸ™›‘Kâ:âediting-modeŽ¡’…³-áThe–rÖâediting-mode“áv‘ÿdDariable“conš²!trols“whic˜h‘r×default“set“of“k˜ey“bind-Ž¡’…³-ings›?is–>used.‘§&By“default,‘#Readline˜starts˜up“in˜Emacs“editing˜moMÞde,Ž¡’…³-where›~«the‘~ªk•²!eystrok“es˜are–~ªmost˜similar˜to“Emacs.‘ПThis“v‘ÿdDariable˜canŽ¡’…³-bMÞe–¦fset“to“either“`âemacsá'“or“`âviá'.ަ‘Kâ:âecho-control-charactersŽ¡’…³-áWhen–¡îset›¡ïto“`âoná',‘¢Óon˜opMÞerating“systems˜that“indicate˜they“suppMÞortŽ¡’…³-it,‘Òýreadline‘Êecš²!hoMÞes–Êa“c˜haracter›ÊcorrespMÞonding“to“a˜signal“generatedŽ¡’…³-from–¦fthe“k²!eybMÞoard.‘ÝÝThe“default“is“`âoná'.ަ‘Kâ:âenable-keypadŽ¡’…³-áWhen–Ìïset“to“`âoná',‘ømReadline“will“try‘Ìîto“enable“the“application“k²!eypadŽ¡’…³-when–1Ûit›1Üis“called.‘·Some“systems“need˜this“to˜enable“the˜arroš²!w“k˜eys.Ž¡’…³-The–¦fdefault“is“`âoffá'.ŽŸ™›‘Kâ:âenable-meta-keyŽ¡’…³-áWhen–ÇJset›ÇIto“`âoná',‘‚Readline˜will“try“to˜enable“an²!y˜meta“moMÞdi erŽ¡’…³-k²!ey–Ÿthe› terminal“claims“to˜suppMÞort“when“it“is˜called.‘û‰On“man²!yŽ¡’…³-terminals,‘^=the–9ymeta“kš²!ey“is“used“to“send“eigh˜t-bit“c˜haracters.‘—TheŽ¡’…³-default–¦fis“`âoná'.ަ‘Kâ:âexpand-tildeŽ¡’…³-áIf–Pset“to›P`âoná',‘a[tilde“expansion“is“pMÞerformed˜when“Readline“attemptsŽ¡’…³-w²!ord–¦fcompletion.‘ÝÝThe“default“is“`âoffá'.ަ‘Kâ:âhistory-preserve-pointŽ¡’…³-áIf–œset“to›`âoná',‘Zéthe“history“coMÞde“attempts“to“place˜the“pMÞoin²!t“(theŽ¡’…³-curren²!t–;kcursor›;jpMÞosition)“at˜the“same“loMÞcation˜on“eac²!h˜history“lineŽ¡’…³-retriev²!ed–^Éwith“âprevious-history“áor‘^Êânext-historyá.‘The“defaultŽ¡’…³-is‘¦f`âoffá'.ŽŸ™›‘Kâ:âhistory-sizeŽ¡’…³-áSet–°ÿthe“maxim•²!um‘°þn“um“bMÞer–°ÿof“history“enš²!tries“sa˜v˜ed‘°þin“the“historyŽ¡’…³-list.‘óIf–mset“to“zero,‘(oanš²!y“existing“history“en˜tries“are‘ndeleted“and“noŽ¡’…³-new–Ïqenš²!tries“are–Ïpsa˜v˜ed.‘XþIf“set–Ïqto“a“v‘ÿdDalue‘Ïpless“than“zero,‘Ù³the“n˜um˜bMÞerŽ¡’…³-of–ª»history›ª¼en²!tries“is˜not“limited.‘êÝBy˜default,‘«Ñthe“n•²!um“bMÞer˜of‘ª»historyŽ¡’…³-en²!tries–¦fis“not“limited.ަ‘Kâ:âhorizontal-scroll-modeŽ¡’…³-áThis–NËv‘ÿdDariable›NÌcan“bMÞe“set“to˜either“`âoná'“or“`âoffá'.‘× Setting“it˜to“`âoná'Ž¡’…³-means–$jthat“the“text“of“the‘$ilines“bMÞeing“edited“will“scroll“horizon²!tallyŽ¡’…³-on–ÎÁa›ÎÂsingle“screen“line˜when“they“are“longer˜than“the“width˜of“theŽ¡’…³-screen,›:Åinstead–Ýof“wrapping‘Þon²!to“a“new“screen“line.‘±By“default,˜thisŽ¡’…³-v‘ÿdDariable–¦fis“set“to“`âoffá'.ŽŽŒ‹”ñŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH7ŽŽŽ ƒ33 ý ÌÍ‘Kâ:âinput-metaޤ 33’…³-áIf–¾Ìset›¾Ëto“`âoná',‘ÄåReadline˜will“enable˜eigh²!t-bit“input˜(it“will˜not“clearŽ¡’…³-the–Ã"eighš²!th“bit“in‘Ã!the“c˜haracters“it“reads),‘ Pregardless“of“what“theŽ¡’…³-terminal–ÌÖclaims“it“can“suppMÞort.‘Q.The“default“v‘ÿdDalue“is“`âoffá'.‘Q-TheŽ¡’…³-name–¦fâmeta-flag“áis“a“synon²!ym“for“this“v‘ÿdDariable.Ž©Ûo‘Kâ:âisearch-terminatorsŽ¡’…³-áThe–5Ñstring›5Òof“c²!haracters˜that“should“terminate˜an“incremen²!talŽ¡’…³-searcš²!h–ú|without“subsequen˜tly“executing“the“c˜haracter“as“a“commandŽ¡’…³-(see–Z±Section“1.2.5“[Searc²!hing],‘ÇÃpage“3).‘ ú¿If“this“v‘ÿdDariable“has“notŽ¡’…³-bMÞeen–Bggivš²!en“a“v‘ÿdDalue,‘igthe“c˜haracters‘BfâESC“áand“èC-J“áwill“terminate“anŽ¡’…³-incremen•²!tal‘¦fsearc“h.ŽŸÛn‘Kâ:âkeymap‘R÷áSets–©5Readline's›©6idea“of˜the“currenš²!t“k˜eymap‘©6for“k˜ey‘©6binding“com-Ž¡’…³-mands.‘ ä™Acceptable–SPâkeymap›SOánames“are˜âemacsá,‘¾‰âemacs-standardá,Ž¡’…³-âemacs-metaá,– 0âemacs-ctlxá,“âviá,‘ 0âvi-moveá,“âvi-commandá,“andŽ¡’…³-âvi-insertá.‘öÚâvi–®ºáis“equiv›ÿdDalen²!t“to‘®»âvi-commandá;‘2äâemacs“áis“equiv˜alen²!tŽ¡’…³-to–Ó¯âemacs-standardá.›e·The“default“v‘ÿdDalue“is“âemacsá.˜The“v‘ÿdDalue“of“theŽ¡’…³-âediting-mode–¦fáv‘ÿdDariable“also“a ects“the“default“k²!eymap.ަ‘Kâ:âkeyseq-timeoutŽ¡’…³-áSpMÞeci es– „the“duration“Readline“will“wš²!ait‘ …for“a“c˜haracter“when“read-Ž¡’…³-ing–—Ían‘—Ìamš²!biguous“k˜ey“sequence›—Ì(one“that˜can“form“a˜complete“k²!eyŽ¡’…³-sequence–ý-using›ý.the“input˜read“so“far,‘ßor˜can“tak²!e˜additional“inputŽ¡’…³-to–óKcomplete“a“longer“kš²!ey“sequence).‘ÄŒIf“no“input“is“receiv˜ed“withinŽ¡’…³-the–*átimeout,‘‹ÿReadline›*àwill“use“the“shorter“but˜complete“k²!ey“se-Ž¡’…³-quence.‘«éReadline›‹uses–Šthis“v‘ÿdDalue“to˜determine“whether“or˜not“inputŽ¡’…³-is–­«a²!v‘ÿdDailable›­ªon“the˜curren²!t“input˜source“(ârl_instream˜áb²!y“default).Ž¡’…³-The– ˜v›ÿdDalue“is“spMÞeci ed“in“milliseconds,‘(ôso“a“v˜alue“of“1000“means“thatŽ¡’…³-Readline–®Äwill›®Ãw²!ait“one˜second“for“additional˜input.‘‹RIf“this˜v‘ÿdDariable“isŽ¡’…³-set–Yàto›Yßa“v‘ÿdDalue˜less“than˜or“equal“to˜zero,‘i.or˜to“a˜non-n²!umeric“v‘ÿdDalue,Ž¡’…³-Readline–ƒûwill‘ƒúwš²!ait“un˜til“another“k˜ey›ƒúis“pressed“to“decide˜whicš²!h“k˜eyŽ¡’…³-sequence–¦fto“complete.‘ÝÝThe“default“v‘ÿdDalue“is“â500á.ަ‘Kâ:âmark-directoriesŽ¡’…³-áIf––¿set“to›–¾`âoná',‘ÒÕcompleted“directory“names“ha•²!v“e˜a––¿slash“appMÞended.Ž¡’…³-The–¦fdefault“is“`âoná'.ަ‘Kâ:âmark-modified-linesŽ¡’…³-áThis–N”v‘ÿdDariable,‘xŸwhen“set“to“`âoná',‘x causes“Readline“to“displa²!y“an“as-Ž¡’…³-terisk– š(`â*á')› ™at“the“start˜of“history˜lines“whicš²!h“ha˜v˜e‘ ™bšMÞeen“mo˜di ed.Ž¡’…³-This–¦fv‘ÿdDariable“is“`âoffá'“b²!y“default.ŽŸÛn‘Kâ:âmark-symlinked-directoriesŽ¡’…³-áIf–$Ôset›$Óto“`âoná',‘mcompleted“names“whic²!h˜are“sym²!bMÞolic˜links“toŽ¡’…³-directories›\Ëha•²!v“e˜a˜slash˜appMÞended‘\Ì(sub‘›»ject˜to˜the˜v‘ÿdDalue˜ofŽ¡’…³-âmark-directoriesá).‘ÝÝThe–¦fdefault“is“`âoffá'.ަ‘Kâ:âmatch-hidden-filesŽ¡’…³-áThis–«sv‘ÿdDariable,›Ý£when“set“to“`âoná',˜causes“Readline“to‘«rmatc²!h“ les“whoseŽ¡’…³-names–MÍbšMÞegin“with“a“`â.á'“(hidden“ les)“when“p˜erforming“ lenameŽŽŒ‹¡Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH8ŽŽŽ ƒ33 ý ÌÍ’…³-completion.‘ÎþIf–öÆset“to–öÇ`âoffá',‘JÝthe“leading–öÆ`â.á'“mš²!ust“bMÞe‘öÇsupplied“b˜yޤ 33’…³-the–Luser›Min“the“ lename“to˜bMÞe“completed.‘9This“v‘ÿdDariable“is˜`âoná'“b²!yŽ¡’…³-default.Ž©™š‘Kâ:âmenu-complete-display-prefixŽ¡’…³-áIf–ßset“to‘Þ`âoná',‘ýmenš²!u“completion“displa˜ys“the“common‘Þpre x“of“theŽ¡’…³-list–ƒXof›ƒYpMÞossible“completions˜(whicš²!h“ma˜y‘ƒYbMÞe“empt˜y)‘ƒYbMÞefore“cyclingŽ¡’…³-through–¦fthe“list.‘ÝÝThe“default“is“`âoffá'.ŽŸ™›‘Kâ:âoutput-metaŽ¡’…³-áIf–Aset“to“`âoná',‘gªReadline“will“displaš²!y“c˜haracters“with“the“eigh˜th“bitŽ¡’…³-set–`!directly“rather“than“as“a‘`"meta-pre xed“escapMÞe“sequence.‘ TheŽ¡’…³-default–¦fis“`âoffá'.ަ‘Kâ:âpage-completionsŽ¡’…³-áIf–ôset“to‘ó`âoná',‘,×Readline“uses“an“inš²!ternal“âmoreá-lik˜e‘ópager“to“displa˜yŽ¡’…³-a–ã¹screenful“of“pMÞossible‘ã¸completions“at“a“time.‘•ÕThis“v‘ÿdDariable“is“`âoná'Ž¡’…³-b²!y‘¦fdefault.ަ‘Kâ:âprint-completions-horizontallyŽ¡’…³-áIf–àset›àto“`âoná',‘»Readline˜will“displa²!y“completions“with˜matc²!hes“sortedŽ¡’…³-horizonš²!tally–8Ôin“alphabMÞetical“order,‘orather“than“do˜wn“the“screen.Ž¡’…³-The–¦fdefault“is“`âoffá'.ŽŸ™›‘Kâ:ârevert-all-at-newlineŽ¡’…³-áIf–Œêset“to“`âoná',‘’Readline“will“undo“all‘Œëc²!hanges“to“history“lines“bMÞeforeŽ¡’…³-returning–qXwhen›qYâaccept-line“áis˜executed.‘Ì-By˜default,‘{õhistory“linesŽ¡’…³-ma²!y–¦bšMÞe“mo˜di ed“and“retain“individual‘¥undo“lists“across“calls“toŽ¡’…³-âreadlineá.‘ÝÝThe–¦fdefault“is“`âoffá'.ަ‘Kâ:âshow-all-if-ambiguousŽ¡’…³-áThis–™]alters“the“default“bMÞeha²!vior“of“the‘™\completion“functions.‘Ù…If“setŽ¡’…³-to–L`âoná',‘^.wš²!ords“whic˜h‘L ha˜v˜e“more“than›L one“pMÞossible˜completion“causeŽ¡’…³-the–­matc²!hes“to“bšMÞe“listed“immediately‘­instead“of“ringing“the“b˜ell.Ž¡’…³-The–¦fdefault“v‘ÿdDalue“is“`âoffá'.ަ‘Kâ:âshow-all-if-unmodifiedŽ¡’…³-áThis–¤‰alters“the›¤Šdefault“bMÞeha²!vior“of“the“completion˜functions“in“aŽ¡’…³-fashion–€similar“to“åsho•²!w-all-if-am“biguousá.‘«If–€set“to“`âoná',‘-®wš²!ords“whic˜hŽ¡’…³-ha•²!v“e–²Ömore“than“one“pšMÞossible‘²×completion“without“an²!y“p˜ossible“par-Ž¡’…³-tial–Ãcompletion›Ä(the“pMÞossible˜completions“don't“share˜a“commonŽ¡’…³-pre x)–¢cause›¢the“matc²!hes“to˜bMÞe“listed“immediately“instead˜of“ring-Ž¡’…³-ing–¦fthe“bMÞell.‘ÝÝThe“default“v‘ÿdDalue“is“`âoffá'.ŽŸ™›‘Kâ:âshow-mode-in-promptŽ¡’…³-áIf–KÂset“to›KÃ`âoná',‘uadd“a“c²!haracter˜to“the“bMÞeginning“of˜the“prompt“in-Ž¡’…³-dicating–Çthe›Èediting“moMÞde:‘¢ emacs˜(`â@á'),‘a_vi˜command“(`â:á'),‘a`or“viŽ¡’…³-insertion–¦f(`â+á').‘ÝÝThe“default“v‘ÿdDalue“is“`âoffá'.ަ‘Kâ:âskip-completed-textŽ¡’…³-áIf–ñjset“to“`âoná',‘+this‘ñialters“the“default“completion“bMÞeha²!vior“when“in-Ž¡’…³-serting–}=a‘}“output"ަ’…³-áIn› \Àthe‘ \¿abMÞo•²!v“e˜example,‘ JSèC-u˜áis˜bMÞound˜to‘ \¿the˜functionŽ¡’…³-âuniversal-argumentá,‘|èM-DEL› &áis– %bMÞound“to˜the“functionŽ¡’…³-âbackward-kill-wordá,‘ šand–iLèC-o›iKáis“bMÞound˜to“run˜the“macroŽ¡’…³-expressed–~Jon“the›~Irigh²!t“hand“side“(that“is,‘ôBto“insert˜the“text“`â>Ž¡’…³-outputá'–¦fin²!to“the“line).ŽŸP’…³-A‘nbn•²!um“bšMÞer–o[of“sym²!b˜olic“c²!haracter“names“are“recognized“whileŽ¡’…³-proMÞcessing–Ê3this“kš²!ey“binding“syn˜tax:‘%wåDELá,–&åESCá,“åESCAPEá,“åLFDá,Ž¡’…³-åNEWLINEá,–¦fåRETá,“åRETURNá,“åRš²!UBOUTá,“åSP‘ÿeA˜CEá,“åSPCá,“and“åT‘ÿeABá.ŽŸÛo‘Kâ:â"åk²!eyseq@æâ"á:‘ÝÝåfunction-name‘Cmáor‘¦fåmacroŽŽ¡’…³-k•²!eyseq‘ú«ádi ers‘¹Äfrom›¹Ååk“eyname‘VËáabMÞo“v“e˜in˜that–¹Ästrings˜denoting“an˜en-Ž¡’…³-tire– hkš²!ey“sequence“can“b•MÞe‘ gsp“eci ed,‘%éb˜y‘ gplacing– hthe“k˜ey“sequence“inŽ¡’…³-double–‰ôquotes.‘ÔbSome“çgnu“áEmacs“stš²!yle“k˜ey“escapšMÞes“can“b˜e“used,‘¤asŽ¡’…³-in–Ãthe›Âfollo²!wing“example,‘(Ùbut˜the“spMÞecial˜c²!haracter“names˜are“notŽ¡’…³-recognized.ަ’¢›‚â"\C-u":‘¿ªuniversal-argumentŽ¡’¢›‚"\C-x\C-r":‘¿ªre-read-init-fileŽŽŒ‹ ºzŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®10ŽŽŽ ƒ33 ý ÌÍ’¢›‚â"\e[11~":–¿ª"Function“Key“1"ŽŸÌ’…³-áIn–Â×the“abšMÞo•²!v“e–Â×example,‘ÉòèC-u“áis“again‘ÂØb˜ound“to“the“functionޤ 33’…³-âuniversal-argument–?ßá(just“as“it“w²!as“in“the“ rst‘?Þexample),‘¦=`èC-xŽ¡’…³-C-rá'–¤Öis“bMÞound“to“the“function“âre-read-init-fileá,‘¥&and“`âESC–¦f[“1“1Ž¡’…³-~á'–¦fis“bMÞound“to“insert“the“text“`âFunction“Key“1á'.Ž©dö‘Kâ:The–’Äfolloš²!wing“çgnu“áEmacs“st˜yle“escapMÞe‘’Åsequences“are“a˜v‘ÿdDailable“when“spMÞecifyingŽ¡‘Kâ:k²!ey‘¦fsequences:ަ‘Kâ:è\C-‘(‘õácon²!trol‘¦fpre xަ‘Kâ:è\M-‘(‘õámeta‘¦fpre xަ‘Kâ:è\e‘.QŸáan–¦fescapMÞe“c²!haracterަ‘Kâ:è\\‘.QŸábac²!kslashަ‘Kâ:è\â"‘.QŸ"á,–¦fa“double“quotation“markަ‘Kâ:è\'‘.QŸâ'á,–¦fa“single“quote“or“apMÞostropheަ‘Kâ:In–Qaddition“to›Qthe“çgnu“áEmacs“st²!yle˜escapMÞe“sequences,‘b)a“second˜set“of“bac²!kslashŽ¡‘Kâ:escapMÞes–¦fis“a²!v‘ÿdDailable:ަ‘Kâ:â\a‘.QŸáalert‘¦f(bMÞell)ަ‘Kâ:â\b‘.QŸábac²!kspaceަ‘Kâ:â\d‘.QŸádeleteަ‘Kâ:â\f‘.QŸáform‘¦ffeedަ‘Kâ:â\n‘.QŸánewlineަ‘Kâ:â\r‘.QŸácarriage‘¦freturnަ‘Kâ:â\t‘.QŸáhorizon²!tal‘¦ftabަ‘Kâ:â\v‘.QŸáv²!ertical‘¦ftabަ‘Kâ:â\ènnn‘"ÒKáthe–$«eighš²!t-bit“c˜haracter‘$ªwhose“v›ÿdDalue“is“the“oMÞctal“v˜alue‘$ªånnn“á(one“toŽ¡’…³-three‘¦fdigits)ަ‘Kâ:â\xèHH‘"ÒKáthe›˜eigh•²!t-bit‘˜c“haracter˜whose˜v‘ÿdDalue–˜is˜the˜hexadecimal“v‘ÿdDalue˜åHHŽ¡’…³-á(one–¦for“t•²!w“o–¦fhex“digits)ަ‘Kâ:When–}Ëenš²!tering“the“text“of“a“macro,‘³£single“or“double“quotes“m˜ust“bMÞe“used“toŽ¡‘Kâ:indicate–“Ša›“‰macro“de nition.‘‚?Unquoted˜text“is“assumed“to˜bMÞe“a“function˜name.‘‚?InŽ¡‘Kâ:the‘Ämacro›Åb•MÞo“dy‘ÿe,‘Ç~the˜bac²!kslash‘Äescap“es˜describ“ed‘Äab“o•²!v“e˜are‘Äexpanded.‘€ýBac“kslashŽ¡‘Kâ:will–Íquote‘Íanš²!y“other“c˜haracter›Íin“the“macro˜text,‘Éincluding“`â"á'˜and“`â'á'.‘RF‘ÿeorŽ¡‘Kâ:example,‘4 the–folloš²!wing‘Žbinding“will“mak˜e›Ž`èC-x‘¦fâ\á'“insert“a˜single“`â\á'“in²!to˜the“line:ŽŸÌ‘hÊâ"\C-x\\":‘¿ª"\\"ŽŽŒ‹ ǼŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®11ŽŽŽ ƒ33 ý ÌÍ‘Gëe1.3.2‘d(Conditional–íMInit“ConstructsŽŽŸ³3‘GáReadline–iimplemenš²!ts“a“facilit˜y“similar“in‘ispirit“to“the“conditional“compilation“features“ofޤ 33‘Gthe–¯JC‘¯HpreproMÞcessor‘¯Kwhicš²!h“allo˜ws‘¯Kk˜ey“bindings“and›¯Kv‘ÿdDariable“settings“to˜bšMÞe“p˜erformed‘¯Kas“theŽ¡‘Gresult–¦fof“tests.‘ÝÝThere“are“four“parser“directiv²!es“used.Ž©33‘Gâ$if‘(‘õáThe–ÃNâ$if“áconstruct“allo²!ws“bindings“to“bšMÞe‘ÃOmade“based“on“the“editing“mo˜de,‘ʈtheŽ¡‘Kâ:terminal–’ŽbMÞeing›’used,‘͘or“the“application˜using“Readline.‘¢VThe“text“of˜the“testŽ¡‘Kâ:extends–¦fto“the“end“of“the“line;“no“c²!haracters“are“required“to“isolate“it.ަ‘Kâ:âmode‘"ÒKáThe–žÞâmode=›žßáform“of“the“â$if“ádirectiv²!e˜is“used“to“test˜whether“Read-Ž¡’…³-line–3½is“in‘3¼âemacs“áor“âvi“ámošMÞde.‘ …áThis“ma²!y“b˜e‘3¼used“in“conjunctionŽ¡’…³-with–º the“`âset‘¦fkeymapá'“command,–ÿfor‘º!instance,“to–º set“bindings“inŽ¡’…³-the–ÌÇâemacs-standard“áand›ÌÆâemacs-ctlx“ák²!eymaps“only“if˜Readline“isŽ¡’…³-starting–¦fout“in“âemacs“ámoMÞde.ަ‘Kâ:âterm‘"ÒKáThe–<âterm=“áform›<ma²!y“bMÞe“used“to“include˜terminal-spMÞeci c“k²!ey“bind-Ž¡’…³-ings,‘ƒpMÞerhaps–Vîto“bind›Víthe“k²!ey˜sequences“output“b²!y˜the“terminal'sŽ¡’…³-function–Þ€kš²!eys.‘›;The“w˜ord“on‘Þthe“righ˜t“side“of“the“`â=á'‘Þis“tested“againstŽ¡’…³-bšMÞoth–šPthe“full“name“of“the‘šOterminal“and“the“p˜ortion“of“the“terminalŽ¡’…³-name–×bMÞefore›Öthe“ rst˜`â-á'.‘ÿ/This“allo²!ws˜âsun“áto˜matc²!h“bMÞoth˜âsun“áandŽ¡’…³-âsun-cmdá,–¦ffor“instance.ަ‘Kâ:âapplicationŽ¡’…³-áThe–¢âåapplication“áconstruct›¢ãis“used“to“include˜application-spMÞeci c“set-Ž¡’…³-tings.‘£mEac²!h–÷program“using“the‘÷Readline“library“sets“the“åapplicationŽ¡’…³-nameá,‘õwand–É)Ž¡‘Kâ:áMo•²!v“e–¦fto“the“end“of“the“input“history‘ÿe,“i.e.,“the“line“currenš²!tly“bMÞeing“en˜tered.ަ‘Gâreverse-search-history‘¦f(C-r)Ž¡‘Kâ:áSearc•²!h›½:bac“kw“ard˜starting‘½;at˜the˜curren“t˜line˜and˜mo“ving‘½;`up'˜through˜the˜his-Ž¡‘Kâ:tory–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.ŽŸ‘Gâforward-search-history‘¦f(C-s)Ž¡‘Kâ:áSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.ަ‘Gânon-incremental-reverse-search-history‘¦f(M-p)Ž¡‘Kâ:áSearc•²!h›½:bac“kw“ard˜starting‘½;at˜the˜curren“t˜line˜and˜mo“ving‘½;`up'˜through˜the˜his-Ž¡‘Kâ:tory–Ryas“necessary“using‘Rxa“non-incremenš²!tal“searc˜h“for“a“string‘Rxsupplied“b˜y“theŽ¡‘Kâ:user.ŽŸ‘Gânon-incremental-forward-search-history‘¦f(M-n)Ž¡‘Kâ:áSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–3ªas›3©necessary“using“a˜non-incremenš²!tal“searc˜h“for›3©a“string“supplied˜b²!y“theŽ¡‘Kâ:user.ަ‘Gâhistory-search-forward‘¦f()Ž¡‘Kâ:áSearc•²!h›úOforw“ard˜through–úPthe˜history˜for˜the˜string˜of“c•²!haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–QËof›QÌthe“curren²!t“line˜and“the“pMÞoinš²!t.‘à The“searc˜h‘QÌstring“m˜ust“matc˜h‘QÌat“theŽ¡‘Kâ:bMÞeginning–è"of“a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘thisŽ¡‘Kâ:command–¦fis“un²!bMÞound.ŽŸ‘Gâhistory-search-backward‘¦f()Ž¡‘Kâ:áSearc•²!h›-»bac“kw“ard–-¼through˜the“history˜for“the˜string“of˜cš²!haracters“bMÞet˜w˜een‘-»theŽ¡‘Kâ:start–QËof›QÌthe“curren²!t“line˜and“the“pMÞoinš²!t.‘à The“searc˜h‘QÌstring“m˜ust“matc˜h‘QÌat“theŽ¡‘Kâ:bMÞeginning–è"of“a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘thisŽ¡‘Kâ:command–¦fis“un²!bMÞound.ަ‘Gâhistory-substr-search-forward‘¦f()Ž¡‘Kâ:áSearc•²!h›úOforw“ard˜through–úPthe˜history˜for˜the˜string˜of“c•²!haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–uæof›uçthe“curren²!t“line“and˜the“pMÞoinš²!t.‘ͳThe“searc˜h“string“ma˜y‘uçmatc˜h“an˜ywhereŽ¡‘Kâ:in–è"a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘this“commandŽ¡‘Kâ:is‘¦fun²!bMÞound.ŽŸ‘Gâhistory-substr-search-backward‘¦f()Ž¡‘Kâ:áSearc•²!h›-»bac“kw“ard–-¼through˜the“history˜for“the˜string“of˜cš²!haracters“bMÞet˜w˜een‘-»theŽ¡‘Kâ:start–uæof›uçthe“curren²!t“line“and˜the“pMÞoinš²!t.‘ͳThe“searc˜h“string“ma˜y‘uçmatc˜h“an˜ywhereŽ¡‘Kâ:in–è"a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘this“commandŽ¡‘Kâ:is‘¦fun²!bMÞound.ަ‘Gâyank-nth-arg‘¦f(M-C-y)Ž¡‘Kâ:áInsert–sÐthe›sÏ rst“argumen²!t˜to“the˜previous“command˜(usually“the˜second“w²!ordŽ¡‘Kâ:on–Ô|the›Ô}previous“line)˜at“pMÞoin²!t.‘h!With“an˜argumen²!t“åná,‘àinsert˜the“ånáth˜w²!ord“fromŽŽŒ‹ðóŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®16ŽŽŽ ƒ33 ý ÌÍ‘Kâ:the–0previous“command“(the“wš²!ords“in‘0the“previous“command“bMÞegin“with“w˜ordޤ 33‘Kâ:0).‘-dA‘À negativ•²!e›Àéargumen“t–Àèinserts˜the“ånáth“w²!ord˜from“the˜end“of˜the“previousŽ¡‘Kâ:command.‘ÍOnce–öGthe“argumenš²!t‘öFån“áis“computed,‘ >the“argumen˜t“is“extracted‘öFas“ifŽ¡‘Kâ:the–¦f`â!èná'“history“expansion“had“bšMÞeen“sp˜eci ed.Ž©ŽÓ‘Gâyank-last-arg–¦f(M-.“or“M-_)Ž¡‘Kâ:áInsert–5Elast›5Fargumen²!t“to“the˜previous“command“(the˜last“w²!ord“of˜the“previousŽ¡‘Kâ:history–"enš²!try).‘With“a‘#n˜umeric“argumen˜t,‘ ’bMÞeha˜v˜e“exactly‘#lik˜e“âyank-nth-argá.Ž¡‘Kâ:Successivš²!e–ú%calls‘ú&to“âyank-last-arg“ámo˜v˜e‘ú&bac˜k“through‘ú&the“history“list,‘™insertingŽ¡‘Kâ:the–µlast‘µwš²!ord“(or“the“w˜ord‘µspMÞeci ed“b˜y“the“argumen˜t›µto“the“ rst“call)˜of“eac²!h“lineŽ¡‘Kâ:in–`¿turn.‘ êAnš²!y“n˜umeric‘`Àargumen˜t“supplied“to‘`Àthese“successiv˜e‘`Àcalls“determinesŽ¡‘Kâ:the–-Idirection›-Jto“mo•²!v“e˜through‘-Ithe˜history‘ÿe.‘r‡A‘-'negativ“e‘-Iargumen“t˜switc“hes‘-ItheŽ¡‘Kâ:direction–¼òthrough›¼óthe“history“(bac²!k˜or“forw²!ard).‘ The“history˜expansion“facilitiesŽ¡‘Kâ:are–Mêused“to›Mëextract“the“last“argumen²!t,‘_as“if“the“`â!$á'“history˜expansion“had“bMÞeenŽ¡‘Kâ:spMÞeci ed.ŽŸ[ ‘Gëe1.4.3‘d(Commands–íMF›þÄ£or“Changing“T˜extŽŽŸa‘Gèend-of-file–¦fâ(usually“C-d)Ž¡‘Kâ:áThe–%¡c²!haracter›% indicating“end-of- le“as“set,–?bfor˜example,“b²!y–%¡âsttyá.‘²ñIf˜this“c²!harac-Ž¡‘Kâ:ter–×is“read“when“there“are“no“cš²!haracters“on“the“line,‘ÒÁand“pMÞoin˜t“is“at“the“bMÞeginningŽ¡‘Kâ:of–¦fthe“line,“Readline“in²!terprets“it“as“the“end“of“input“and“returns“çeofá.ަ‘Gâdelete-char‘¦f(C-d)Ž¡‘Kâ:áDelete–þ¾the“cš²!haracter“at“pMÞoin˜t.‘æåIf‘þ½this“function“is“bMÞound“to“the“same“c˜haracterŽ¡‘Kâ:as–¦fthe“ttš²!y“çeof“ác˜haracter,“as“èC-d“ácommonly“is,“see“abMÞo˜v˜e“for“the“e ects.ަ‘Gâbackward-delete-char‘¦f(Rubout)Ž¡‘Kâ:áDelete–Ÿ§the“cš²!haracter‘Ÿ¨bMÞehind“the“cursor.‘ÛA‘Ÿ¦n˜umeric“argumen˜t“means‘Ÿ¨to“kill“theŽ¡‘Kâ:c²!haracters–¦finstead“of“deleting“them.ަ‘Gâforward-backward-delete-char‘¦f()Ž¡‘Kâ:áDelete–˜‘the›˜’c²!haracter“under˜the“cursor,‘Õunless“the˜cursor“is“at˜the“end˜of“theŽ¡‘Kâ:line,‘×~in–Í­whicš²!h‘ͬcase“the“c˜haracter›ͬbMÞehind“the˜cursor“is˜deleted.‘S±By“default,‘×~thisŽ¡‘Kâ:is–¦fnot“bMÞound“to“a“k²!ey‘ÿe.ަ‘Gâquoted-insert–¦f(C-q“or“C-v)Ž¡‘Kâ:áAdd–¸the‘¹next“cš²!haracter“t˜ypMÞed‘¹to“the“line“v˜erbatim.‘CÔThis‘¹is“ho˜w“to‘¹insert“k˜eyŽ¡‘Kâ:sequences–¦flik²!e“èC-qá,“for“example.ŽŸŽÒ‘Gâtab-insert‘¦f(M-TAB)Ž¡‘Kâ:áInsert–¦fa“tab“c²!haracter.ަ‘Gâself-insert–¦f(a,“b,“A,“1,“!,“...Ž‘åe)Ž¡‘Kâ:áInsert‘¦fy²!ourself.ަ‘Gâtranspose-chars‘¦f(C-t)Ž¡‘Kâ:áDrag–Õãthe“cš²!haracter“bMÞefore‘Õâthe“cursor“forw˜ard“o˜v˜er“the“c˜haracter‘Õâat“the“cursor,Ž¡‘Kâ:moš²!ving–C"the“cursor‘C!forw˜ard“as“w˜ell.‘´If“the“insertion‘C!pMÞoin˜t“is“at“the‘C!end“of“theŽ¡‘Kâ:line,‘ÕÍthen–¡¦this“transpMÞoses“the“last“t•²!w“o‘¡§c“haracters–¡¦of“the“line.‘†óNegativš²!e“argumen˜tsŽ¡‘Kâ:ha•²!v“e–¦fno“e ect.ŽŽŒ‹ýyŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®17ŽŽŽ ƒ33 ý ÌÍ‘Gâtranspose-words‘¦f(M-t)ޤ 33‘Kâ:áDrag–áÜthe“w²!ord‘áÝbšMÞefore“p˜oinš²!t“past“the“w˜ord‘áÝafter“p•MÞoin˜t,‘ð¹mo˜ving‘áÝp“oin˜t–áÜpast“thatŽ¡‘Kâ:wš²!ord–g¸as“w˜ell.‘ÈùIf“the“insertion“pMÞoin˜t“is“at“the“end“of“the‘g¹line,‘tAthis“transpMÞoses“theŽ¡‘Kâ:last›¦ft•²!w“o˜w“ords˜on˜the˜line.Ž©Ù‘Gâupcase-word‘¦f(M-u)Ž¡‘Kâ:áUppMÞercase–ÖÓthe‘ÖÒcurrenš²!t“(or“follo˜wing)“w˜ord.‘o#With“a‘ÖÒnegativ˜e“argumen˜t,‘âîuppMÞer-Ž¡‘Kâ:case–¦fthe“previous“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ަ‘Gâdowncase-word‘¦f(M-l)Ž¡‘Kâ:áLo•²!w“ercase›”ãthe‘”âcurren“t˜(or‘”âfollo“wing)˜w“ord.‘‚²With‘”âa˜negativ“e˜argumen“t,‘Ë–lo“w“ercaseŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ަ‘Gâcapitalize-word‘¦f(M-c)Ž¡‘Kâ:áCapitalize–6the›5curren²!t“(or˜folloš²!wing)“w˜ord.‘€#With‘5a“negativ˜e“argumen˜t,‘ÅrcapitalizeŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ަ‘Gâoverwrite-mode‘¦f()Ž¡‘Kâ:áT‘ÿeoggle›öo•²!v“erwrite˜mo•MÞde.‘Í With˜an˜explicit˜p“ositiv•²!e‘ö n“umeric˜argumen“t,‘ switc“hesŽ¡‘Kâ:to›™ÿo•²!v“erwrite–šmoMÞde.‘„fWith˜an“explicit˜non-pMÞositivš²!e“n˜umeric–™ÿargumen˜t,‘Ï®switc˜hes“toŽ¡‘Kâ:insert–¬ÛmoMÞde.‘ñ=This›¬Ücommand“a ects“only˜âemacs“ámošMÞde;‘°âvi“ámo˜de‘¬Üdo˜es“o•²!v“erwriteŽ¡‘Kâ:di eren•²!tly‘ÿe.‘ÝÝEac“h–¦fcall“to“âreadline()“ástarts“in“insert“moMÞde.Ž©†%‘Kâ:In›Ièo•²!v“erwrite˜moMÞde,‘òÈc“haracters˜bMÞound˜to˜âself-insert‘Iéáreplace˜the˜text˜atŽ¡‘Kâ:pMÞoinš²!t–rather“than“pushing“the“text“to“the“righ˜t.‘‚Characters“bMÞound“toŽ¡‘Kâ:âbackward-delete-char–¦fáreplace“the“c²!haracter“bšMÞefore“p˜oin²!t“with“a“space.ަ‘Kâ:By–¦fdefault,“this“command“is“un²!bMÞound.ŽŸ¥ä‘Gëe1.4.4‘d(Killing–íMAnd“Y‘þÄ£ankingŽŽŸ$‘Gâkill-line‘¦f(C-k)Ž¡‘Kâ:áKill–¦fthe“text“from“pMÞoin²!t“to“the“end“of“the“line.Ž©Ù‘Gâbackward-kill-line–¦f(C-x“Rubout)Ž¡‘Kâ:áKill›¦fbac•²!kw“ard˜to˜the˜bMÞeginning˜of˜the˜line.ަ‘Gâunix-line-discard‘¦f(C-u)Ž¡‘Kâ:áKill›¦fbac•²!kw“ard˜from˜the˜cursor˜to˜the˜bMÞeginning˜of˜the˜curren“t˜line.ަ‘Gâkill-whole-line‘¦f()Ž¡‘Kâ:áKill–cjall“cš²!haracters‘cion“the“curren˜t“line,‘’ªno“matter“where“pMÞoin˜t“is.‘èBy“default,Ž¡‘Kâ:this–¦fis“un²!bMÞound.ަ‘Gâkill-word‘¦f(M-d)Ž¡‘Kâ:áKill–‡ from“pMÞoin²!t›‡ to“the“end“of“the˜currenš²!t“w˜ord,‘Por‘‡ if“bMÞet˜w˜een“w˜ords,‘Qto“the“endŽ¡‘Kâ:of–¦fthe“next“w²!ord.‘ÝÝW‘ÿeord“bMÞoundaries“are“the“same“as“âforward-wordá.ަ‘Gâbackward-kill-word‘¦f(M-DEL)Ž¡‘Kâ:áKill–wÖthe›w×w²!ord“b•MÞehind˜p“oin²!t.‘ÎXW‘ÿeord›wÖb“oundaries˜are–w×the˜same“as˜âbackward-wordá.ަ‘Gâunix-word-rubout‘¦f(C-w)Ž¡‘Kâ:áKill–ÍLthe“w²!ord“bšMÞehind“p˜oinš²!t,‘×using“white“space“as“a“w˜ord“bMÞoundary‘ÿe.‘RThe“killedŽ¡‘Kâ:text–¦fis“sa•²!v“ed–¦fon“the“kill-ring.ŽŽŒ‹ "Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®18ŽŽŽ ƒ33 ý ÌÍ‘Gâunix-filename-rubout‘¦f()ޤ 33‘Kâ:áKill–]Üthe“w²!ord“bšMÞehind“p˜oinš²!t,‘‹ºusing“white“space“and“the“slash“c˜haracter“as“theŽ¡‘Kâ:wš²!ord–¦fbMÞoundaries.‘ÝÝThe“killed“text“is“sa˜v˜ed“on“the“kill-ring.Ž©î‘Gâdelete-horizontal-space‘¦f()Ž¡‘Kâ:áDelete–¦fall“spaces“and“tabs“around“pMÞoinš²!t.‘ÝÝBy“default,“this“is“un˜bMÞound.ަ‘Gâkill-region‘¦f()Ž¡‘Kâ:áKill–¦fthe“text“in“the“currenš²!t“region.‘ÝÝBy“default,“this“command“is“un˜bMÞound.ŽŸí‘Gâcopy-region-as-kill‘¦f()Ž¡‘Kâ:áCop²!y–³the›²text“in˜the“region˜to“the˜kill“bu er,‘0Eso˜it“can˜bMÞe“y•²!ank“ed˜righ“t‘³a“w“a“y‘ÿe.Ž¡‘Kâ:By–¦fdefault,“this“command“is“un²!bMÞound.ަ‘Gâcopy-backward-word‘¦f()Ž¡‘Kâ:áCopš²!y–žthe“w˜ord“bšMÞefore“p˜oinš²!t“to“the“kill‘žbu er.‘ÄÿThe“w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“âbackward-wordá.‘ÝÝBy“default,“this“command“is“un²!bMÞound.ަ‘Gâcopy-forward-word‘¦f()Ž¡‘Kâ:áCopš²!y–º8the“w˜ord“follo˜wing‘º9pMÞoin˜t“to“the“kill“bu er.‘SThe‘º9w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“âforward-wordá.‘ÝÝBy“default,“this“command“is“un²!bMÞound.ަ‘Gâyank‘¦f(C-y)Ž¡‘Kâ:áY‘ÿeank–¦fthe“top“of“the“kill“ring“inš²!to“the“bu er“at“pMÞoin˜t.ަ‘Gâyank-pop‘¦f(M-y)Ž¡‘Kâ:áRotate–'!the“kill-ring,‘GPand“y²!ank“the“new“top.‘`Y‘ÿeou“can‘'"only“do“this“if“the“priorŽ¡‘Kâ:command–¦fis“âyank“áor“âyank-popá.ŽŸ軑Gëe1.4.5‘d(Spiecifying–íMNumeric“Argumen–átsŽŽŸ§‘Gâdigit-argument–¦f(èM-0â,“èM-1â,“...Ž‘‹ËèM--â)Ž¡‘Kâ:áAdd–:Lthis›:Kdigit“to“the˜argumenš²!t“already“accum˜ulating,‘Oêor“start“a‘:Knew“argumen˜t.Ž¡‘Kâ:èM--–¦fástarts“a“negativš²!e“argumen˜t.ަ‘Gâuniversal-argument‘¦f()Ž¡‘Kâ:áThis–kis“another“w•²!a“y›jto–kspMÞecify“an“argumen²!t.‘«ßIf“this“command˜is“follo•²!w“ed›kb“y˜oneŽ¡‘Kâ:or–more›digits,‘“´optionally“with˜a“leading“min²!us“sign,‘“³those“digits“de ne˜the“ar-Ž¡‘Kâ:gumenš²!t.‘ÐÚIf‘[the–\command“is“follo˜w˜ed“b˜y“digits,‘‡*executing“âuniversal-argumentŽ¡‘Kâ:áagain–Ñ«ends‘Ѫthe“nš²!umeric“argumen˜t,‘Ü{but“is“otherwise›Ѫignored.‘_«As“a˜spMÞecial“case,Ž¡‘Kâ:if–ñúthis›ñûcommand“is“immediately˜follo•²!w“ed›ñúb“y˜a˜c“haracter–ñûthat˜is˜neither“a˜digitŽ¡‘Kâ:or‘Zwminš²!us–Zxsign,‘i§the“argumen˜t‘Zwcoun˜t“for›Zwthe“next˜command“is˜mš²!ultiplied“b˜y‘Zwfour.Ž¡‘Kâ:The›{targumen•²!t‘{ucoun“t˜is˜initially–{uone,‘°·so˜executing“this˜function˜the“ rst˜timeŽ¡‘Kâ:makš²!es–Ï2the“argumen˜t“coun˜t“four,‘Ùea“second‘Ï3time“mak˜es“the“argumen˜t“coun˜t“six-Ž¡‘Kâ:teen,–¦fand“so“on.‘ÝÝBy“default,“this“is“not“bMÞound“to“a“k²!ey‘ÿe.ŽŸ軑Gëe1.4.6‘d(Letting–íMReadline“T–áypie“F›þÄ£or“Y˜ouŽŽŸ§‘Gâcomplete‘¦f(TAB)Ž¡‘Kâ:áA²!ttempt–¶èto›¶çpMÞerform“completion˜on“the˜text“b•MÞefore˜p“oin²!t.‘Ž The˜actual‘¶ècompletionŽ¡‘Kâ:pšMÞerformed–¦fis“application-sp˜eci c.‘ÝÝThe“default“is“ lename“completion.ŽŽŒ‹¡Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®19ŽŽŽ ƒ33 ý ÌÍ‘Gâpossible-completions‘¦f(M-?)ޤ 33‘Kâ:áList–)¯the›)®pMÞossible“completions˜of“the˜text“b•MÞefore˜p“oin•²!t.‘g·When˜displa“ying‘)¯com-Ž¡‘Kâ:pletions,‘ôfReadline–äÌsets›äÍthe“n•²!um“bMÞer˜of–äÌcolumns“used˜for“displa²!y˜to“the˜v‘ÿdDalue“ofŽ¡‘Kâ:âcompletion-display-widthá,‘Uthe–aŒv›ÿdDalue“of“the“en•²!vironmen“t–aŒv˜ariable“âCOLUMNSá,Ž¡‘Kâ:or–¦fthe“screen“width,“in“that“order.Ž©‚T‘Gâinsert-completions‘¦f(M-*)Ž¡‘Kâ:áInsert–«µall“completions“of“the“text“bšMÞefore“p˜oinš²!t“that“w˜ould“ha˜v˜e“bMÞeen“generatedŽ¡‘Kâ:b²!y‘¦fâpossible-completionsá.ŽŸ‚U‘Gâmenu-complete‘¦f()Ž¡‘Kâ:áSimilar–ÛVto“âcompleteá,‘óbut“replaces“the“wš²!ord“to‘ÛWbMÞe“completed“with“a“single“matc˜hŽ¡‘Kâ:from–‹æthe‘‹çlist“of“pšMÞossible“completions.‘Ž^Rep˜eated“execution‘‹çof“âmenu-completeŽ¡‘Kâ:ásteps–Õ¯through›Õ°the“list“of“pMÞossible˜completions,‘!inserting“eacš²!h“matc˜h‘Õ°in“turn.Ž¡‘Kâ:A²!t–jthe“end“of›jthe“list“of“completions,‘›šthe“bMÞell“is“rung˜(sub‘›»ject“to“the“settingŽ¡‘Kâ:of–Thâbell-styleá)“and“the›Tioriginal“text“is“restored.‘çãAn“argumen²!t˜of“ån“ámo•²!v“es‘ThånŽ¡‘Kâ:ápMÞositions–,Rforw²!ard›,Qin“the“list˜of“matcš²!hes;‘oGa“negativ˜e‘,Qargumen˜t“ma˜y“bMÞe‘,Qused“toŽ¡‘Kâ:mo•²!v“e›™Žbac“kw“ard˜through˜the˜list.‘·VThis˜command˜is˜in“tended˜to˜b•MÞe˜b“ound˜toŽ¡‘Kâ:âTABá,–¦fbut“is“unš²!bMÞound“b˜y“default.ަ‘Gâmenu-complete-backward‘¦f()Ž¡‘Kâ:áIdenš²!tical–5ato“âmenu-completeá,‘Ybut‘5`mo˜v˜es“bac˜kw˜ard“through“the‘5`list“of“pMÞossibleŽ¡‘Kâ:completions,–¦fas“if“âmenu-complete“áhad“bMÞeen“givš²!en“a“negativ˜e“argumen˜t.ަ‘Gâdelete-char-or-list‘¦f()Ž¡‘Kâ:áDeletes–«éthe›«èc²!haracter“under“the“cursor˜if“not“at˜the“bMÞeginning“or“end˜of“theŽ¡‘Kâ:line–öØ(lik²!e›öÙâdelete-chará).‘ Ï4If“at˜the“end“of˜the“line,‘ŠôbMÞeha•²!v“es˜iden“tically‘öØtoŽ¡‘Kâ:âpossible-completionsá.‘ÝÝThis–¦fcommand“is“unš²!bMÞound“b˜y“default.ŽŸO!‘Gëe1.4.7‘d(Keybioard‘íMMacrosŽŽŸÚÄ‘Gâstart-kbd-macro–¦f(C-x“()Ž¡‘Kâ:áBegin–¦fsaš²!ving“the“c˜haracters“t˜ypMÞed“in˜to“the“curren˜t“k˜eybMÞoard“macro.ަ‘Gâend-kbd-macro–¦f(C-x“))Ž¡‘Kâ:áStop–G!saš²!ving“the“c˜haracters‘G"t˜ypMÞed“in˜to“the“curren˜t“k˜eybMÞoard“macro‘G"and“sa˜v˜e“theŽ¡‘Kâ:de nition.ŽŸ‚U‘Gâcall-last-kbd-macro–¦f(C-x“e)Ž¡‘Kâ:áRe-execute–9Bthe“last‘9Ckš²!eybMÞoard“macro“de ned,‘]ùb˜y“making“the‘9Cc˜haracters“in“theŽ¡‘Kâ:macro–¦fappšMÞear“as“if“t²!yp˜ed“at“the“k²!eyb˜oard.ަ‘Gâprint-last-kbd-macro‘¦f()Ž¡‘Kâ:áPrinš²!t–¦fthe“last“k˜ebMÞoard“macro“de ned“in“a“format“suitable“for“the“åinputrc‘Pjá le.ŽŸO!‘Gëe1.4.8‘d(Some–íMMiscellaneous“CommandsŽŽŸÚÄ‘Gâre-read-init-file–¦f(C-x“C-r)Ž¡‘Kâ:áRead– kin“the› jcon•²!ten“ts– kof“the“åinputrc‘Joá le,‘ÔÐand“incorpMÞorate“an²!y˜bindings“or“v‘ÿdDariableŽ¡‘Kâ:assignmen²!ts–¦ffound“there.ަ‘Gâabort‘¦f(C-g)Ž¡‘Kâ:áAbMÞort–/the›/curren²!t“editing˜command“and˜ring“the˜terminal's“bMÞell˜(sub‘›»ject“to˜theŽ¡‘Kâ:setting–¦fof“âbell-styleá).ŽŽŒ‹!ZŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®20ŽŽŽ ƒ33 ý ÌÍ‘Gâdo-uppercase-version–¦f(M-a,“M-b,“M-èxâ,“...Ž‘åe)ޤ 33‘Kâ:áIf–Qõthe“meta ed“cš²!haracter“åx‘Táis“lo˜w˜ercase,‘bÙrun“the“command“that“is“bMÞound“to“theŽ¡‘Kâ:corresp•MÞonding›¦fupp“ercase˜c²!haracter.Ž©‘Gâprefix-meta‘¦f(ESC)Ž¡‘Kâ:áMetafy–‚2the›‚1next“c•²!haracter˜t“ypMÞed.‘q@This–‚2is˜for“k²!eybMÞoards˜without“a˜meta“k²!ey‘ÿe.Ž¡‘Kâ:Tš²!yping–¦f`âESC“fá'“is“equiv‘ÿdDalen˜t“to“t˜yping“èM-fá.ŽŸ‘Gâundo–¦f(C-_“or“C-x“C-u)Ž¡‘Kâ:áIncremenš²!tal–¦fundo,“separately“remem˜bMÞered“for“eac˜h“line.ަ‘Gârevert-line‘¦f(M-r)Ž¡‘Kâ:áUndo–úall“cš²!hanges“made“to“this“line.‘ØåThis“is“lik˜e“executing“the“âundo“ácommandŽ¡‘Kâ:enough–¦ftimes“to“get“bac²!k“to“the“bMÞeginning.ŽŸ‘Gâtilde-expand‘¦f(M-~)Ž¡‘Kâ:áPš²!erform–¦ftilde“expansion“on“the“curren˜t“w˜ord.ަ‘Gâset-mark‘¦f(C-@)Ž¡‘Kâ:áSet–ðthe“mark“to“the“pMÞoinš²!t.‘ºØIf“a‘ðn˜umeric“argumen˜t“is“supplied,‘ythe“mark“is“setŽ¡‘Kâ:to–¦fthat“pMÞosition.ŽŸ‘Gâexchange-point-and-mark–¦f(C-x“C-x)Ž¡‘Kâ:áSwš²!ap–¾Òthe“pMÞoin˜t“with“the“mark.‘'"The“curren˜t“cursor“pMÞosition“is“set“to“the“sa˜v˜edŽ¡‘Kâ:pšMÞosition,–¦fand“the“old“cursor“p˜osition“is“sa•²!v“ed–¦fas“the“mark.ަ‘Gâcharacter-search‘¦f(C-])Ž¡‘Kâ:áA‘ü&cš²!haracter–üQis‘üRread“and“pMÞoin˜t‘üRis“mo˜v˜ed“to›üRthe“next“oMÞccurrence“of˜that“c²!haracter.Ž¡‘Kâ:A–¦fnegativš²!e“coun˜t“searc˜hes“for“previous“oMÞccurrences.ŽŸ‘Gâcharacter-search-backward‘¦f(M-C-])Ž¡‘Kâ:áA‘c"c²!haracter–c•is›c”read“and˜pMÞoinš²!t“is“mo˜v˜ed›c”to“the˜previous“oMÞccurrence˜of“thatŽ¡‘Kâ:c•²!haracter.‘ÝÝA›¦fnegativ“e˜coun“t˜searc“hes˜for˜subsequen“t˜oMÞccurrences.ަ‘Gâskip-csi-sequence‘¦f()Ž¡‘Kâ:áRead–G¬enough“cš²!haracters‘G­to“consume“a“m˜ulti-k˜ey“sequence“suc˜h‘G­as“those“de nedŽ¡‘Kâ:for–z÷kš²!eys“lik˜e‘zøHome“and“End.‘[‘Suc˜h“sequences“bMÞegin“with‘zøa“Con˜trol“SequenceŽ¡‘Kâ:Indicator–fM(CSI),“usually–fLESC-[.‘’If“this–fMsequence“is“bMÞound‘fLto“â"\áe[â"á,‘–Fk²!eys“pro-Ž¡‘Kâ:ducing–Ö‰sucš²!h“sequences“will‘Öˆha˜v˜e“no“e ect“unless“explicitly“bMÞound‘Öˆto“a“readlineŽ¡‘Kâ:command,‘ßÔinstead–ÔXof“inserting“straš²!y“c˜haracters“in˜to“the“editing‘ÔWbu er.‘g³This“isŽ¡‘Kâ:un•²!bMÞound›¦fb“y˜default,˜but˜usually˜bMÞound˜to˜ESC-[.ŽŸ‘Gâinsert-comment‘¦f(M-#)Ž¡‘Kâ:áWithout–GÑa‘GÐnš²!umeric“argumen˜t,‘p*the“v‘ÿdDalue›GÐof“the˜âcomment-begin“áv‘ÿdDariable˜is“in-Ž¡‘Kâ:serted–Ìèat›Ìéthe“bMÞeginning“of“the˜currenš²!t“line.‘QdIf“a“n˜umeric“argumen˜t‘Ìéis“supplied,Ž¡‘Kâ:this–cøcommand“acts“as“a“toggle:‘Yif‘c÷the“c²!haracters“at“the“bMÞeginning“of“the“lineŽ¡‘Kâ:do–¬Ânot“matc²!h“the‘¬Ãv›ÿdDalue“of“âcomment-beginá,‘®Ythe“v˜alue“is‘¬Ãinserted,‘®Yotherwise“theŽ¡‘Kâ:c²!haracters–Ó6in“âcomment-begin“áare›Ó5deleted“from“the“bMÞeginning“of“the˜line.‘dMInŽ¡‘Kâ:either–¦fcase,“the“line“is“accepted“as“if“a“newline“had“bšMÞeen“t²!yp˜ed.ަ‘Gâdump-functions‘¦f()Ž¡‘Kâ:áPrin²!t–,Qall›,Pof“the˜functions“and“their˜k²!ey“bindings“to˜the“Readline˜output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t›Îðis“supplied,‘Ùthe“output“is“formatted“in˜sucš²!h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“åinputrc‘Pjá le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.ŽŽŒ‹-™Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®21ŽŽŽ ƒ33 ý ÌÍ‘Gâdump-variables‘¦f()ޤ 33‘Kâ:áPrin²!t–ŽÉall“of“the‘ŽÈsettable“v›ÿdDariables“and“their“v˜alues“to‘ŽÈthe“Readline“output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t›Îðis“supplied,‘Ùthe“output“is“formatted“in˜sucš²!h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“åinputrc‘Pjá le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.Ž©33‘Gâdump-macros‘¦f()Ž¡‘Kâ:áPrinš²!t– ˆall“of“the‘ ‡Readline“k˜ey“sequences“bMÞound“to“macros‘ ‡and“the“strings“theyŽ¡‘Kâ:output.‘rŠIf–-Ja“nš²!umeric“argumen˜t“is›-Ksupplied,‘Othe“output“is“formatted˜in“suc²!h“aŽ¡‘Kâ:w•²!a“y–šthat›šit“can“bMÞe˜made“part“of˜an“åinputrc‘Dá le.‘ÙÂThis“command“is˜unš²!bMÞound“b˜yŽ¡‘Kâ:default.ަ‘Gâemacs-editing-mode‘¦f(C-e)Ž¡‘Kâ:áWhen–¦fin“âvi“ácommand“mošMÞde,“this“causes“a“switc²!h“to“âemacs“áediting“mo˜de.ަ‘Gâvi-editing-mode‘¦f(M-C-j)Ž¡‘Kâ:áWhen–¦fin“âemacs“áediting“mošMÞde,“this“causes“a“switc²!h“to“âvi“áediting“mo˜de.ŽŸ‘Gë\1.5‘™Readline–f@vi“Mos3deŽŽ¦‘GáWhile–É`the“Readline›É_library“doMÞes“not“ha•²!v“e–É`a˜full“set“of“âvi˜áediting“functions,‘Òit“doMÞes“con²!tainŽ¡‘Genough–to›žallo²!w“simple˜editing“of“the˜line.‘.ƒThe˜Readline“âvi“ámo•MÞde˜b“eha•²!v“es–as˜spMÞeci ed“inŽ¡‘Gthe–¦fçposix“ástandard.Ž©33‘!GIn–|Uorder›|Vto“switc•²!h˜in“teractiv“ely‘|UbMÞet“w“een˜âemacs–|Uáand˜âvi“áediting˜moMÞdes,‘„¿use˜the“commandŽ¡‘GèM-C-j–iá(bšMÞound‘jto“emacs-editing-mo˜de“when“in‘jâvi“ámo˜de“and“to‘jvi-editing-mo˜de“in“âemacsŽ¡‘GámošMÞde).‘ÝÝThe–¦fReadline“default“is“âemacs“ámo˜de.ަ‘!GWhen–›‰yš²!ou“en˜ter“a“line“in“âvi“ámoMÞde,‘µy˜ou‘›Šare“already“placed“in“`insertion'“moMÞde,‘µas“if“y˜ouŽ¡‘Ghad–ˆtš²!ypMÞed“an‘ˆ`âiá'.‘ÓÃPressing“âESC“áswitc˜hes‘ˆy˜ou“in˜to“`command'“moMÞde,‘Ž(where“y˜ou‘ˆcan“edit“theŽ¡‘Gtext–of“the“line“with“the“standard“âvi“ámo•²!v“emen“t›k“eys,‘);mo“v“e˜to˜previous˜history˜lines˜withŽ¡‘G`âká'–¦fand“subsequen²!t“lines“with“`âjá',“and“so“forth.ŽŽŒ‹:¹Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—22ŽŽŽ ƒ33 ý ÌÍ‘GëS2‘ ¸QProgramming–z³with“GNU“ReadlineŽŽŸl‘GáThis–ü cš²!hapter‘üdescribMÞes“the“in˜terface‘übMÞet˜w˜een“the“çgnu›üáReadline“Library“and˜other“programs.ޤ 33‘GIf–}Éyš²!ou“are“a“programmer,‘…èand“y˜ou“wish“to“include“the“features“found“in“çgnu“áReadline“suc˜hŽ¡‘Gas–ý­completion,›lline“editing,˜and“in•²!teractiv“e–ý­history“manipulation“in“yš²!our“o˜wn“programs,‘lthisŽ¡‘Gsection–¦fis“for“y²!ou.ŽŸ°\‘Gë\2.1‘™Basic‘f@BehaŒÌviorŽŽŸ33‘GáMan•²!y›’programs‘’pro“vide˜a˜command‘’line˜in“terface,‘Ísuc“h˜as˜âmailá,‘Íâftpá,‘Íand‘’âshá.‘ ôF‘ÿeor˜suc“hŽ¡‘Gprograms,‘x³the–mFdefault“bMÞehaš²!viour“of“Readline“is“sucien˜t.‘ÊÓThis“section“describMÞes“ho˜w“to“useŽ¡‘GReadline–!tin“the‘!usimplest“w•²!a“y›!tp•MÞossible,‘@8p“erhaps˜to˜replace‘!ucalls˜in˜y²!our˜co“de‘!uto˜âgets()˜áorŽ¡‘Gâfgets()á.Ž© a‘!GThe–èæfunction“âreadline()“áprin²!ts“a“prompt“åprompt‘%çáand“then“reads“and“returns“a“singleŽ¡‘Gline–í¨of“text“from“the“user.‘³¢If“åprompt‘*¨áis“âNULL“áor“the“emptš²!y“string,‘ÿxno“prompt“is“displa˜y˜ed.Ž¡‘GThe–u}line›u|âreadline“áreturns“is˜alloMÞcated“with“âmalloc()á;‘Ýthe˜caller“should“âfree()˜áthe“lineŽ¡‘Gwhen–¦fit“has“ nished“with“it.‘ÝÝThe“declaration“for“âreadline“áin“ANSI“C“isŽŸ `‘.ùœâchar–¿ª*readline“(const“char“*èpromptâ);ަ‘GáSo,–¦fone“mighš²!t“sa˜yަ‘.ùœâchar–¿ª*line“=“readline“("Enter“a“line:“");ަ‘Gáin–¾—order“to›¾–read“a“line“of“text“from˜the“user.‘˜The“line“returned“has“the˜ nal“newline“remo•²!v“ed,Ž¡‘Gso–¦fonly“the“text“remains.ަ‘!GIf–ÜÆâreadline“áencounš²!ters“an“âEOF“áwhile“reading“the“line,‘*^and“the“line“is“empt˜y“at“thatŽ¡‘GpMÞoin²!t,›^then–‡â(char‘¦f*)NULL“áis“returned.‘ÓoOtherwise,˜the“line“is‘‡ended“just“as“if“a“newline“hadŽ¡‘Gb•MÞeen‘¦ft²!yp“ed.ަ‘!GIf–=Ayš²!ou“w˜an˜t›=Bthe“user“to“bMÞe˜able“to“get“at“the˜line“later,›RI(with“âC-p“áfor“example),˜yš²!ou“m˜ustŽ¡‘Gcall–¦fâadd_history()“áto“sa•²!v“e–¦fthe“line“a•²!w“a“y–¦fin“a“åhistory‘–~álist“of“suc²!h“lines.ަ‘.ùœâadd_history‘¿ª(line);ަ‘GáF›ÿeor–¦ffull“details“on“the“GNU“History“Library˜,“see“the“assoMÞciated“man²!ual.ަ‘!GIt–Ãis“preferable“to“a•²!v“oid‘ÃŒsa“ving›Ãempt“y˜lines˜on˜the˜history˜list,‘ÊÖsince˜users˜rarely˜ha“v“e˜aŽ¡‘Gburning–‘4need“to›‘5reuse“a“blank“line.‘ÖÍHere“is“a“function“whic²!h“usefully˜replaces“the“standardŽ¡‘Gâgets()–¦fálibrary“function,“and“has“the“adv‘ÿdDanš²!tage“of“no“static“bu er“to“o˜v˜er o˜w:ަ‘.ùœâ/*–¿ªA“static“variable“for“holding“the“line.“*/Ž¡‘.ùœstatic–¿ªchar“*line_read“=“(char“*)NULL;ŽŸff‘.ùœ/*–¿ªRead“a“string,“and“return“a“pointer“to“it.Ž¡‘@8šReturns–¿ªNULL“on“EOF.“*/Ž¡‘.ùœchar‘¿ª*Ž¡‘.ùœrl_gets‘¿ª()Ž¡‘.ùœ{Ž¡‘:xð/*–¿ªIf“the“buffer“has“already“been“allocated,Ž¡‘K·îreturn–¿ªthe“memory“to“the“free“pool.“*/Ž¡‘:xðif‘¿ª(line_read)Ž¡‘EøD{Ž¡‘Qw˜free‘¿ª(line_read);ŽŽŒ‹BúŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—23ŽŽŽ ƒ33 ý ÌÍ‘Qw˜âline_read–¿ª=“(char“*)NULL;ޤ 33‘EøD}Ž©ff‘:xð/*–¿ªGet“a“line“from“the“user.“*/Ž¡‘:xðline_read–¿ª=“readline“("");ަ‘:xð/*–¿ªIf“the“line“has“any“text“in“it,Ž¡‘K·îsave–¿ªit“on“the“history.“*/Ž¡‘:xðif–¿ª(line_read“&&“*line_read)Ž¡‘EøDadd_history‘¿ª(line_read);ަ‘:xðreturn‘¿ª(line_read);Ž¡‘.ùœ}Ž©n}‘!GáThis–`ˆfunction“givš²!es“the“user“the“default“bMÞeha˜viour“of“âTAB“ácompletion:‘ºîcompletion“on“ leŽ¡‘Gnames.‘ôÞIf‘®yš²!ou–®do“not“w˜an˜t“Readline“to“complete“on–® lenames,‘¯ûy˜ou“can–®c˜hange“the“bindingŽ¡‘Gof–¦fthe“âTAB“ák²!ey“with“ârl_bind_key()á.ŽŸn|‘.ùœâint–¿ªrl_bind_key“(int“èkeyâ,“rl_command_func_t“*èfunctionâ);ަ‘!Grl_bind_key()–—átakš²!es“t˜w˜o––argumen˜ts:‘ž?åk˜ey‘ö¯áis“the–—c˜haracter“that“y˜ou“w˜an˜t‘–to“bind,‘£andŽ¡‘Gåfunction–ªäáis“the“address“of‘ªåthe“function“to“call“when“åk²!ey‘šüáis“pressed.‘ëXBinding“âTAB“áto“ârl_Ž¡‘Ginsert()–§wámak²!es›§xâTAB“áinsert“itself.‘áârl_bind_key()“áreturns“non-zero˜if“åk²!ey‘—áis“not˜a“v‘ÿdDalidŽ¡‘GASCIšMÞI–¦fc²!haracter“co˜de“(b˜et•²!w“een–¦f0“and“255).ޤn|‘!GThš²!us,–¦fto“disable“the“default“âTAB“ábMÞeha˜vior,“the“follo˜wing“suces:ަ‘.ùœârl_bind_key–¿ª('\t',“rl_insert);Ž¡‘!GáThis–+cošMÞde“should‘+b˜e“executed“once“at‘+the“start“of“yš²!our“program;‘T,y˜ou“migh˜t‘+write“a“func-ޤ 33‘Gtion–ïøcalled›ï÷âinitialize_readline()“áwhic²!h˜pMÞerforms“this˜and“other˜desired“initializations,Ž¡‘Gsuc²!h–¦fas“installing“custom“completers“(see“Section“2.6“[Custom“Completers],“page“46).ŽŸXï‘Gë\2.2‘™Custom‘f@F‘þ¦functionsŽŽŸ33‘GáReadline–Eçproš²!vides“man˜y“functions“for‘Eæmanipulating“the“text“of“the“line,‘Y3but“it“isn't“pMÞossibleŽ¡‘Gto–dcan²!ticipate“the›dbneeds“of“all“programs.‘ÓThis“section“describMÞes“the˜v‘ÿdDarious“functions“andŽ¡‘Gv‘ÿdDariables–"de ned“within“the‘"Readline“library“whicš²!h“allo˜w“a“user‘"program“to“add“customizedŽ¡‘Gfunctionalit²!y–¦fto“Readline.ŽŸn|‘!GBefore–aÛdeclaring›aÜan²!y“functions“that“customize˜Readline's“bMÞeha²!vior,‘¸or“using˜an²!y“func-Ž¡‘Gtionalit•²!y›xQReadline‘xRpro“vides˜in–xRother˜coMÞde,‘ìÌan˜application˜writer“should˜include“the˜ leŽ¡‘Gâ–‡áin›†an²!y“ le“that“uses˜Readline's“features.‘û?Since“some“of˜the“de -Ž¡‘Gnitions–¾„in›¾…âreadline.h“áuse“the“âstdio˜álibrary‘ÿe,‘Ä‹the˜ le“â“áshould“bMÞe˜included“bMÞeforeŽ¡‘Gâreadline.há.ަ‘!Gâreadline.h–¬2áde nes›¬3a“C‘¬1preproMÞcessor“v‘ÿdDariable˜that“should“bMÞe˜treated“as“an˜in²!teger,‘­¥âRL_Ž¡‘GREADLINE_VERSIONá,‘Ûwhic•²!h›¨(ma“y˜b•MÞe˜used˜to˜conditionally˜compile˜application˜co“de˜dep“endingŽ¡‘Gon–4üthe“installed›4ýReadline“v²!ersion.‘‰ŸThe˜v‘ÿdDalue“is“a“hexadecimal“encoMÞding“of˜the“ma‘›»jor“andŽ¡‘Gminor–Pvš²!ersion“n˜um˜bMÞers›Oof“the“library‘ÿe,‘8Šof“the“form˜0xåMMmmá.‘<›åMM‘Jþáis˜the“t•²!w“o-digit‘Pma‘›»jorŽ¡‘Gv•²!ersion›z.n“um“bMÞer;‘ˆëåmm‘z-áis˜the˜t“w“o-digit‘z-minor˜v“ersion˜n“um“bMÞer.‘ÏF‘ÿeor˜Readline˜4.2,‘ƒfor˜example,Ž¡‘Gthe–¦fv‘ÿdDalue“of“âRL_READLINE_VERSION“áw²!ould“bMÞe“â0x0402á.ŽŽŒ‹NÖŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—24ŽŽŽ ƒ33 ý ÌÍ‘Gëe2.2.1‘d(Readline‘íMT–áypiedefsŽŽŸ³3‘GáF–ÿeor›¦freadabilit²!y“,˜w•²!e˜declare˜a˜n“um“bMÞer˜of˜new˜ob‘›»ject˜t“yp•MÞes,˜all˜p“oin²!ters˜to˜functions.ޤ¶Ü‘!GThe–IÖreason›IÕfor“declaring˜these“new˜t²!ypMÞes“is˜to“mak²!e˜it“easier˜to“write˜coMÞde“describingŽ© 33‘GpMÞoinš²!ters–¦fto“C“functions“with“appropriately“protot˜ypMÞed“argumen˜ts“and“return“v‘ÿdDalues.Ž¡‘!GF‘ÿeor›m½instance,‘Ÿ“sa•²!y‘m¾w“e˜w“an“t–m¾to˜declare˜a“v‘ÿdDariable˜åfunc‘Âáas˜a˜pMÞoin²!ter“to˜a“function˜whic²!hަ‘Gtak•²!es›©t“w“o‘¨âint˜áargumen“ts–¨and˜returns“an˜âint“á(this˜is“the˜t²!ypMÞe“of˜all“of˜the“Readline˜bindableަ‘Gfunctions).‘ÝÝInstead–¦fof“the“classic“C“declarationŽ©¶Û‘!Gâint‘¦f(*func)();Ž¡‘Gáor–¦fthe“ANSI-C“st²!yle“declarationŽ¡‘!Gâint–¦f(*func)(int,“int);Ž¡‘Gáw•²!e›¦fma“y˜writeŽ¡‘!Gârl_command_func_t‘¦f*func;ަ‘!GáThe–¦ffull“list“of“function“pMÞoinš²!ter“t˜ypMÞes“a˜v‘ÿdDailable“isŽŸø°‘Gâtypedef–¦fint“rl_command_func_t“(int,“int);ޤ 33‘Gtypedef–¦fchar“*rl_compentry_func_t“(const“char“*,“int);Ž¡‘Gtypedef–¦fchar“**rl_completion_func_t“(const“char“*,“int,“int);Ž¡‘Gtypedef–¦fchar“*rl_quote_func_t“(char“*,“int,“char“*);Ž¡‘Gtypedef–¦fchar“*rl_dequote_func_t“(char“*,“int);Ž¡‘Gtypedef–¦fint“rl_compignore_func_t“(char“**);Ž¡‘Gtypedef–¦fvoid“rl_compdisp_func_t“(char“**,“int,“int);Ž¡‘Gtypedef–¦fint“rl_hook_func_t“(void);Ž¡‘Gtypedef–¦fint“rl_getc_func_t“(FILE“*);Ž¡‘Gtypedef–¦fint“rl_linebuf_func_t“(char“*,“int);Ž¡‘Gtypedef–¦fint“rl_intfunc_t“(int);Ž¡‘G#define–¦frl_ivoidfunc_t“rl_hook_func_tŽ¡‘Gtypedef–¦fint“rl_icpfunc_t“(char“*);Ž¡‘Gtypedef–¦fint“rl_icppfunc_t“(char“**);Ž¡‘Gtypedef–¦fvoid“rl_voidfunc_t“(void);Ž¡‘Gtypedef–¦fvoid“rl_vintfunc_t“(int);Ž¡‘Gtypedef–¦fvoid“rl_vcpfunc_t“(char“*);Ž¡‘Gtypedef–¦fvoid“rl_vcppfunc_t“(char“**);ŽŸAÕ‘Gëe2.2.2‘d(W›þÄ£riting–íMa“New“F˜unctionŽŽŸ³3‘GáIn–»Öorder›»×to“write“new˜functions“for“Readline,‘Á3y²!ou“need“to˜kno²!w“the“calling˜con•²!v“en“tions‘»ÖforŽ¡‘Gk•²!eybMÞoard-in“v“ok“ed–™Úfunctions,‘œ\and“the›™Ùnames“of“the˜v‘ÿdDariables“that“describMÞe“the˜curren²!t“stateŽ¡‘Gof–¦fthe“line“read“so“far.ޤ¶Ü‘!GThe–¦fcalling“sequence“for“a“command“âfoo“áloMÞoks“lik²!eަ‘.ùœâint–¿ªfoo“(int“count,“int“key)Ž¡‘Gáwhere–Pgåcounš²!t‘fáis“the‘Pfn˜umeric“argumen˜t›Pf(or“1˜if“defaulted)˜and“åk²!ey‘@~áis“the˜k²!ey“that˜in•²!v“ok“edŽ© 33‘Gthis‘¦ffunction.Ž¡‘!GIt–Äis›Äcompletely“up˜to“the“function˜as“to“what˜should“bMÞe˜done“with“the˜nš²!umeric“argumen˜t.ަ‘GSome–Ï;functions“use“it“as“a“repMÞeat“coun²!t,›psome‘Ï:as“a“ ag,˜and“others“to“c²!hoMÞose“alternateަ‘GbMÞehaš²!vior–4ñ(refreshing‘4ðthe“curren˜t›4ðline“as˜oppMÞosed“to“refreshing˜the“screen,‘˜’for“example).ŽŽŒ‹[ Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—25ŽŽŽ ƒ33 ý ÌÍ‘GSome–ýc²!hoMÞose“to›ýignore“it.‘á±In˜general,‘©if“a˜function“uses“the“nš²!umeric“argumen˜t‘ýas“a“repMÞeatޤ 33‘Gcoun²!t,‘itit–Z7should“bMÞe›Z8able“to“do˜something“useful“with˜bMÞoth“negativ²!e“and˜pMÞositivš²!e“argumen˜ts.Ž¡‘GAš²!t–¦fthe“v˜ery“least,“it“should“bMÞe“a˜w˜are“that“it“can“bMÞe“passed“a“negativ˜e“argumen˜t.ŽŸâ‘!GA‘Uícommand–Vfunction“should“return“0‘Vif“its“action“completes“successfully‘ÿe,‘fand“a“non-zeroŽ¡‘Gv‘ÿdDalue–´.if›´-some“error˜oMÞccurs.‘4This“is˜the“con•²!v“en“tion˜obMÞey“ed›´.b“y˜all–´-of˜the“builtin˜ReadlineŽ¡‘Gbindable–¦fcommand“functions.ŽŸ?‘Gë\2.3‘™Readline‘f@V‘þ¦fariablesŽŽŸ33‘GáThese–¦fv›ÿdDariables“are“a²!v˜ailable“to“function“writers.ީܒ–3[V‘ÿeariable]ŽŽ‘Gó@ßêset“from“the“argumen²!t“to“âreadline()á,‘=yand“shouldŽ¡‘.ùœnot–:^bMÞe“assigned“to›:]directly‘ÿe.‘¹ÛThe“ârl_set_prompt()“áfunction˜(see“Section“2.4.6“[Redis-Ž¡‘.ùœplaš²!y],–¦fpage“35)“ma˜y“bšMÞe“used“to“mo˜dify“the“prompt“string“after“calling“âreadline()á.Ž©p¤’–3[V‘ÿeariable]ŽŽ‘Gë@char–LÉ*“rl_display_promptŽ¡‘.ùœáThe›ÏÛstring‘ÏÜdispla•²!y“ed˜as–ÏÜthe˜prompt.‘Z=This˜is“usually˜iden²!tical“to˜årl‘Ä>‰x³HøŽ‘Ñtpromptá,‘Ú9but˜ma²!yŽ¡‘.ùœbšMÞe–[c²!hanged“temp˜orarily“b²!y“functions“that“use“the“prompt“string“as“a“message“area,Ž¡‘.ùœsucš²!h–¦fas“incremen˜tal“searc˜h.ŽŸp¥’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_already_promptedŽ¡‘.ùœáIf–\Xan“application“wishes›\Wto“displa²!y“the“prompt“itself,‘‰Ôrather˜than“ha•²!v“e–\XReadline“doŽ¡‘.ùœit–ï9the“ rst“time“âreadline()“áis“called,‘mit“should“set“this“v›ÿdDariable“to“a“non-zero“v˜alueŽ¡‘.ùœafter–Ëdisplaš²!ying‘Êthe“prompt.‘š The“prompt“m˜ust“also›ÊbMÞe“passed“as“the˜argumen²!t“toŽ¡‘.ùœâreadline()–÷ áso“the“redisplaš²!y“functions“can“upMÞdate‘÷the“displa˜y“propMÞerly‘ÿe.‘ÏÆThe“callingŽ¡‘.ùœapplication–¦fis“respMÞonsible“for“managing“the“v‘ÿdDalue;“Readline“nev²!er“sets“it.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_library_versionŽ¡‘.ùœáThe–¦fvš²!ersion“n˜um˜bMÞer“of“this“revision“of“the“library‘ÿe.ŽŸp¥’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_readline_versionŽ¡‘.ùœáAn–’in²!teger›“encoMÞding“the˜currenš²!t“v˜ersion›“of“the˜library‘ÿe.‘4bThe“encoMÞding˜is“of˜the“formŽ¡‘.ùœ0xåMMmmá,‘‘àwhere–bÈåMM‘’váis‘bÇthe“t•²!w“o-digit–bÈma‘›»jor“vš²!ersion“n˜um˜bMÞer,‘‘àand“åmm‘bÇáis“the“t˜w˜o-Ž¡‘.ùœdigit–{¶minor‘{·vš²!ersion“n˜um˜bMÞer.‘]ÏF‘ÿeor“example,–± for‘{·Readline-4.2,“ârl_readline_versionŽ¡‘.ùœáw•²!ould›¦fha“v“e˜the˜v‘ÿdDalue˜0x0402.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_gnu_readline_pŽ¡‘.ùœáAlw•²!a“ys–¦fset“to“1,“denoting“that“this“is“çgnu“áreadline“rather“than“some“em²!ulation.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_terminal_nameŽ¡‘.ùœáThe›_terminal–_t²!ypMÞe,‘mKused“for˜initialization.‘ÆIf˜not“set˜b²!y“the˜application,‘mJReadline˜setsŽ¡‘.ùœthis–¦fto“the“v›ÿdDalue“of“the“âTERM“áen•²!vironmen“t–¦fv˜ariable“the“ rst“time“it“is“called.ŽŸp¥’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_readline_nameŽ¡‘.ùœáThis–¿ƒv‘ÿdDariable“is“set“to“a“unique“name‘¿„bš²!y“eac˜h“application“using“Readline.‘)4The“v‘ÿdDalueŽ¡‘.ùœallo²!ws–]wconditional“parsing›]vof“the“inputrc“ le“(see“Section˜1.3.2“[Conditional“Init“Con-Ž¡‘.ùœstructs],–¦fpage“11).ަ’–3[V‘ÿeariable]ŽŽ‘Gë@FILE–LÉ*“rl_instreamŽ¡‘.ùœáThe–í€stdio“stream“from“whic²!h“Readline“reads“input.‘³*If“âNULLá,‘?FReadline“defaults“toŽ¡‘.ùœåstdiná.ŽŸp¥’–3[V‘ÿeariable]ŽŽ‘Gë@FILE–LÉ*“rl_outstreamŽ¡‘.ùœáThe–#Rstdio›#Qstream“to“whic²!h˜Readline“pMÞerforms“output.‘T If˜âNULLá,‘BReadline˜defaults“toŽ¡‘.ùœåstdoutá.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_prefer_env_winsizeŽ¡‘.ùœáIf–h non-zero,‘t”Readline“givš²!es“v‘ÿdDalues“found“in“the‘hâLINES“áand“âCOLUMNS“áen˜vironmen˜t“v‘ÿdDari-Ž¡‘.ùœables–éžgreater“precedence“than“v‘ÿdDalues“fetcš²!hed“from“the“k˜ernel“when“computing“theŽ¡‘.ùœscreen‘¦fdimensions.ŽŽŒ‹s½Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—27ŽŽŽ ƒ33 ý ÌÍ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_command_func_t–LÉ*“rl_last_funcޤ 33‘.ùœáThe–-)address“of“the“last“command“function“Readline‘-*executed.‘r&Ma²!y“bMÞe“used“to“testŽ¡‘.ùœwhether–¦for“not“a“function“is“bMÞeing“executed“t²!wice“in“succession,“for“example.Ž©fg’–3[V‘ÿeariable]ŽŽ‘Gë@rl_hook_func_t–LÉ*“rl_startup_hookŽ¡‘.ùœáIf–ºnon-zero,‘>this“is›»the“address“of˜a“function˜to“call“just˜bMÞefore“âreadline˜áprin²!ts“theŽ¡‘.ùœ rst‘¦fprompt.ŽŸfh’–3[V‘ÿeariable]ŽŽ‘Gë@rl_hook_func_t–LÉ*“rl_pre_input_hookŽ¡‘.ùœáIf–CÜnon-zero,‘k9this›CÛis“the“address˜of“a“function˜to“call“after˜the“ rst“prompt˜has“bMÞeenŽ¡‘.ùœprinš²!ted–¦fand“just“bMÞefore“âreadline“ástarts“reading“input“c˜haracters.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_hook_func_t–LÉ*“rl_event_hookŽ¡‘.ùœáIf–ânon-zero,‘0ìthis“is“the‘âaddress“of“a“function“to“call“p•MÞerio“dically–âwhen“Readline“isŽ¡‘.ùœw²!aiting–€*for“terminal–€)input.‘ÑBy“default,‘‡Ðthis›€*will“bMÞe˜called˜at˜most˜ten“times˜a˜secondŽ¡‘.ùœif–¦fthere“is“no“k²!eybMÞoard“input.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_getc_func_t–LÉ*“rl_getc_functionŽ¡‘.ùœáIf–§Wnon-zero,‘§“Readline“will“call“indirectly“through“this“pMÞoinš²!ter“to“get“a“c˜haracter“fromŽ¡‘.ùœthe–›input“stream.‘€EBy“default,‘ÅÃit“is‘œset“to“ârl_getcá,‘ÅÄthe“default“Readline“c²!haracter“inputŽ¡‘.ùœfunction–»Í(see“Section›»Î2.4.8“[Character“Input],‘ê¸page˜36).‘ªIn“general,‘ê¹an“application“thatŽ¡‘.ùœsets›¦fårl‘Ä>‰x³HøŽ–Ñtgetc‘Ä>‰x³HøŽ“function˜áshould˜consider˜setting˜årl‘Ä>‰x³HøŽ“input‘Ä>‰x³HøŽ“a²!v‘ÿdDailable‘Ä>‰x³HøŽ“hoMÞok‘Pjáas˜w²!ell.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_hook_func_t–LÉ*“rl_signal_event_hookŽ¡‘.ùœáIf–>Ûnon-zero,‘Sthis“is‘>Üthe“address“of“a“function“to“call“if“a“read“system“call“is“in²!terruptedŽ¡‘.ùœwhen–¦fReadline“is“reading“terminal“input.ŽŸfh’–3[V‘ÿeariable]ŽŽ‘Gë@rl_hook_func_t–LÉ*“rl_input_available_hookŽ¡‘.ùœáIf–z÷non-zero,‘ƒ§Readline›zöwill“use“this“function's“return“v‘ÿdDalue“when˜it“needs“to“determineŽ¡‘.ùœwhether–àor“not“there‘áis“aš²!v‘ÿdDailable“input“on“the“curren˜t“input“source.‘ 8LThe“defaultŽ¡‘.ùœhoMÞok› #c•²!hec“ks– $ârl_instreamá;‘@:if˜an“application˜is“using˜a˜di eren²!t“input˜source,‘+Ëit˜shouldŽ¡‘.ùœset–îthe›ïhoMÞok“appropriately‘ÿe.‘óvReadline“queries“for“a²!v‘ÿdDailable˜input“when“implemen²!tingŽ¡‘.ùœin•²!tra-k“ey-sequence–cStimeouts“during“input“and“incremenš²!tal“searc˜hes.‘Ç‚This“ma˜y“use“anŽ¡‘.ùœapplication-sp•MÞeci c›€¥timeout‘€¦b“efore˜returning–€¦a˜v‘ÿdDalue;‘â‘Readline˜uses“the˜v‘ÿdDalue“passed˜toŽ¡‘.ùœârl_set_keyboard_input_timeout()–ê9áor›ê:the“v‘ÿdDalue˜of“the˜user-settable“åk²!eyseq-timeoutŽ¡‘.ùœáv‘ÿdDariable.‘˜This›äuis–ätdesigned“for“use“b²!y“applications˜using“Readline's“callbacš²!k“in˜terfaceŽ¡‘.ùœ(see–‘RSection›‘S2.4.12“[Alternate˜In²!terface],–•‰page˜40),“whic•²!h‘‘Rma“y˜not–‘Ruse˜the“traditionalŽ¡‘.ùœâread(2)–ÞKáand“ le“descriptor“inš²!terface,‘,Cor“other“applications“using“a“di eren˜t“inputŽ¡‘.ùœmecš²!hanism.‘LþIf–Ëqan“application“uses“an“input“mec˜hanism“or“hošMÞok“that“can“p˜oten²!tiallyŽ¡‘.ùœexceed–d’the“v‘ÿdDalue“of›d‘åk²!eyseq-timeoutá,‘”it“should“increase“the“timeout˜or“set“this“hoMÞokŽ¡‘.ùœappropriately–àîev²!en›àïwhen“not˜using“the˜callbacš²!k“in˜terface.‘wIn“general,‘ï‘an“applicationŽ¡‘.ùœthat–¦fsets“årl‘Ä>‰x³HøŽ–Ñtgetc‘Ä>‰x³HøŽ“function–¦fáshould“consider“setting“årl‘Ä>‰x³HøŽ–Ñtinput‘Ä>‰x³HøŽ“aš²!v‘ÿdDailable‘Ä>‰x³HøŽ“hoMÞok‘Pjáas‘¦fw˜ell.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_voidfunc_t–LÉ*“rl_redisplay_functionŽ¡‘.ùœáIf–S­non-zero,‘~ÿReadline“will“call“indirectly“through“this‘S®pšMÞoin²!ter“to“up˜date“the“displa²!yŽ¡‘.ùœwith–=Ôthe“curren•²!t›=Õcon“ten“ts–=Ôof“the“editing“bu er.‘»By“default,‘R¾it“is˜set“to“ârl_redisplayá,Ž¡‘.ùœthe–¦fdefault“Readline“redisplaš²!y“function“(see“Section“2.4.6“[Redispla˜y],“page“35).ŽŽŒ‹.Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—28ŽŽŽ ƒ33 ý ÌÍ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_vintfunc_t–LÉ*“rl_prep_term_functionޤ 33‘.ùœáIf–âÏnon-zero,‘ íReadline“will›âÎcall“indirectly“through“this“pMÞoin²!ter“to˜initialize“the“terminal.Ž¡‘.ùœThe–ufunction“takš²!es“a‘u€single“argumen˜t,‘©Gan“âint“á ag“that“sa˜ys“whether‘u€or“not“to“useŽ¡‘.ùœeigh•²!t-bit›Èc“haracters.‘5By˜default,‘5athis˜is˜set˜to˜ârl_prep_terminal‘Éá(see˜Section˜2.4.9Ž¡‘.ùœ[T‘ÿeerminal–¦fManagemen²!t],“page“37).Ž©Z[’–3[V‘ÿeariable]ŽŽ‘Gë@rl_voidfunc_t–LÉ*“rl_deprep_term_functionŽ¡‘.ùœáIf–eynon-zero,‘•>Readline›ezwill“call˜indirectly“through˜this“pMÞoin²!ter˜to“reset˜the“terminal.Ž¡‘.ùœThis–4function“should“undo‘4the“e ects“of“ârl_prep_term_functioná.‘ˆYBy“default,‘XthisŽ¡‘.ùœis–¦fset“to“ârl_deprep_terminal“á(see“Section“2.4.9“[T‘ÿeerminal“Managemen²!t],“page“37).ަ’–3[V‘ÿeariable]ŽŽ‘Gë@Keymap‘LÉrl_executing_keymapŽ¡‘.ùœáThis–ROv‘ÿdDariable›RNis“set˜to“the˜k²!eymap“(see“Section˜2.4.2“[Keymaps],‘}Hpage“30)˜in“whic²!hŽ¡‘.ùœthe–¦fcurrenš²!tly“executing“readline“function“w˜as“found.ŽŸZZ’–3[V‘ÿeariable]ŽŽ‘Gë@Keymap‘LÉrl_binding_keymapŽ¡‘.ùœáThis–ROv‘ÿdDariable›RNis“set˜to“the˜k²!eymap“(see“Section˜2.4.2“[Keymaps],‘}Hpage“30)˜in“whic²!hŽ¡‘.ùœthe–¦flast“k²!ey“binding“oMÞccurred.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char–LÉ*“rl_executing_macroŽ¡‘.ùœáThis–¦fv‘ÿdDariable“is“set“to“the“text“of“anš²!y“curren˜tly-executing“macro.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_executing_keyŽ¡‘.ùœáThe–¦fkš²!ey“that“caused“the“dispatc˜h“to“the“curren˜tly-executing“Readline“function.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char–LÉ*“rl_executing_keyseqŽ¡‘.ùœáThe–Cùfull“kš²!ey‘Cúsequence“that“caused“the“dispatc˜h“to‘Cúthe“curren˜tly-executing“ReadlineŽ¡‘.ùœfunction.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_key_sequence_lengthŽ¡‘.ùœáThe›¦fn•²!um“bMÞer˜of˜c“haracters˜in˜årl‘Ä>‰x³HøŽ–Ñtexecuting‘Ä>‰x³HøŽ“k²!eyseqá.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_readline_stateŽ¡‘.ùœáA‘#¨v›ÿdDariable‘#Çwith–#Èbit“v˜alues›#Çthat“encapsulate“the“curren²!t˜Readline“state.‘VA‘#¨bit˜is“setŽ¡‘.ùœwith–½the›¾âRL_SETSTATE“ámacro,‘Ç“and“unset˜with“the“âRL_UNSETSTATE˜ámacro.‘“ãUse“theŽ¡‘.ùœâRL_ISSTATE–zámacro“to›ztest“whether“a“particular“state˜bit“is“set.‘X¬Curren²!t“state“bitsŽ¡‘.ùœinclude:ŽŸ¢¢‘.ùœâRL_STATE_NONEŽ¡‘hÊáReadline–¦fhas“not“y²!et“bšMÞeen“called,“nor“has“it“b˜egun“to“initialize.Ž©¢£‘.ùœâRL_STATE_INITIALIZINGŽ¡‘hÊáReadline–¦fis“initializing“its“in²!ternal“data“structures.ަ‘.ùœâRL_STATE_INITIALIZEDŽ¡‘hÊáReadline–¦fhas“completed“its“initialization.ަ‘.ùœâRL_STATE_TERMPREPPEDŽ¡‘hÊáReadline–r[has“mošMÞdi ed“the“terminal“mo˜des“to“do“its“o²!wn“input“and“redis-Ž¡‘hÊpla²!y‘ÿe.ަ‘.ùœâRL_STATE_READCMDŽ¡‘hÊáReadline–¦fis“reading“a“command“from“the“k²!eybMÞoard.ŽŽŒ‹‘3Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—29ŽŽŽ ƒ33 ý ÌÍ‘.ùœâRL_STATE_METANEXTޤ 33‘hÊáReadline–¦fis“reading“more“input“after“reading“the“meta-pre x“c²!haracter.Ž©00‘.ùœâRL_STATE_DISPATCHINGŽ¡‘hÊáReadline–¦fis“dispatc²!hing“to“a“command.ŽŸ01‘.ùœâRL_STATE_MOREINPUTŽ¡‘hÊáReadline–¦fis“reading“more“input“while“executing“an“editing“command.ަ‘.ùœâRL_STATE_ISEARCHŽ¡‘hÊáReadline–¦fis“pMÞerforming“an“incremenš²!tal“history“searc˜h.ŽŸ01‘.ùœâRL_STATE_NSEARCHŽ¡‘hÊáReadline–¦fis“pMÞerforming“a“non-incremenš²!tal“history“searc˜h.ަ‘.ùœâRL_STATE_SEARCHŽ¡‘hÊáReadline–péis‘pêsearcš²!hing“bac˜kw˜ard“or‘pêforw˜ard“through›pêthe“history“for˜a“string.ަ‘.ùœâRL_STATE_NUMERICARGŽ¡‘hÊáReadline–¦fis“reading“a“nš²!umeric“argumen˜t.ŽŸ01‘.ùœâRL_STATE_MACROINPUTŽ¡‘hÊáReadline–çis›çcurren²!tly“getting˜its“input˜from“a˜previously-de ned“k²!eybMÞoardŽ¡‘hÊmacro.ަ‘.ùœâRL_STATE_MACRODEFŽ¡‘hÊáReadline–¦fis“currenš²!tly“reading“c˜haracters“de ning“a“k˜eybMÞoard“macro.ŽŸ01‘.ùœâRL_STATE_OVERWRITEŽ¡‘hÊáReadline–¦fis“in“o•²!v“erwrite‘¦fmoMÞde.ަ‘.ùœâRL_STATE_COMPLETINGŽ¡‘hÊáReadline–¦fis“pMÞerforming“w²!ord“completion.ŽŸ01‘.ùœâRL_STATE_SIGHANDLERŽ¡‘hÊáReadline–¦fis“curren²!tly“executing“the“readline“signal“handler.ަ‘.ùœâRL_STATE_UNDOINGŽ¡‘hÊáReadline–¦fis“pMÞerforming“an“undo.ަ‘.ùœâRL_STATE_INPUTPENDINGŽ¡‘hÊáReadline–¦fhas“input“pMÞending“due“to“a“call“to“ârl_execute_next()á.ŽŸ01‘.ùœâRL_STATE_TTYCSAVEDŽ¡‘hÊáReadline–¦fhas“sa•²!v“ed–¦fthe“v‘ÿdDalues“of“the“terminal's“spMÞecial“c²!haracters.ަ‘.ùœâRL_STATE_CALLBACKŽ¡‘hÊáReadline–+Žis›+curren²!tly“using˜the“alternate˜(callbacš²!k)“in˜terface‘+(see“Sec-Ž¡‘hÊtion–¦f2.4.12“[Alternate“In²!terface],“page“40).ŽŸ01‘.ùœâRL_STATE_VIMOTIONŽ¡‘hÊáReadline–¦fis“reading“the“argumen²!t“to“a“vi-moMÞde“â"ámotionâ"“ácommand.ަ‘.ùœâRL_STATE_MULTIKEYŽ¡‘hÊáReadline–¦fis“reading“a“m•²!ultiple-k“eystrok“e‘¦fcommand.ŽŽŒ‹œÂŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—30ŽŽŽ ƒ33 ý ÌÍ‘.ùœâRL_STATE_VICMDONCEޤ 33‘hÊáReadline–²áhas›²âen²!tered“vi˜command“(mo•²!v“emen“t)–²ámoMÞde˜at“least˜one“timeŽ¡‘hÊduring–¦fthe“curren²!t“call“to“âreadline()á.ŽŸŒT‘.ùœâRL_STATE_DONEŽ¡‘hÊáReadline–T†has“read“a“k²!ey“sequence‘T…bšMÞound“to“âaccept-line“áand“is“ab˜out“toŽ¡‘hÊreturn–¦fthe“line“to“the“caller.Ž©8ä’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_explicit_argŽ¡‘.ùœáSet–©]to“a“non-zero‘©\v‘ÿdDalue“if“an“explicit“nš²!umeric“argumen˜t“w˜as‘©\spMÞeci ed“b˜y“the“user.Ž¡‘.ùœOnly–¦fv‘ÿdDalid“in“a“bindable“command“function.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_numeric_argŽ¡‘.ùœáSet–r,to“the“v‘ÿdDalue“of“anš²!y“n˜umeric‘r-argumen˜t“explicitly“spMÞeci ed“b˜y“the“user“bMÞeforeŽ¡‘.ùœexecuting–´the“curren²!t“Readline“function.‘°MOnly“v‘ÿdDalid“in“a“bindable“command“function.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_editing_modeŽ¡‘.ùœáSet–pto›oa“v‘ÿdDalue“denoting˜Readline's“curren²!t˜editing“moMÞde.‘§‹A‘Fv‘ÿdDalue“of“å1‘â¨ámeans“ReadlineŽ¡‘.ùœis–¦fcurren²!tly“in“emacs“mošMÞde;“å0‘…Ÿámeans“that“vi“mo˜de“is“activ²!e.ŽŸY!‘Gë\2.4‘™Readline›f@Con•ŒÌv“enience˜F‘þ¦functionsŽŽŸ¬‘Gëe2.4.1‘d(Naming–íMa“F‘þÄ£unctionŽŽŸ³3‘GáThe–üåuser“can“dynamically‘üæcš²!hange“the“bindings“of“k˜eys“while‘üæusing“Readline.‘¥]This“is“done“b˜yŽ¡‘Grepresen²!ting–¡"the›¡#function“with˜a“descriptiv²!e“name.‘ÜThe˜user“is“able˜to“t²!ypMÞe˜the“descriptiv²!eŽ¡‘Gname–¦fwhen“referring“to“the“function.‘ÝÝThš²!us,“in“an“init“ le,“one“migh˜t“ ndŽŸßÄ‘.ùœâMeta-Rubout:‘ Tbackward-kill-wordŽŸßÑ!GáThis– Mtbinds“the“k•²!eystrok“e– MtâMeta-Rubout‘ Muáto“the“function“ädescriptively‘ EuánamedŽ¡‘Gâbackward-kill-wordá.‘4·Y‘ÿeou,‘ •as–ÃYthe“programmer,‘ –should“bind“the“functions‘ÃZy²!ou“write“toŽ¡‘Gdescriptivš²!e–¦fnames“as“w˜ell.‘ÝÝReadline“pro˜vides“a“function“for“doing“that:ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_add_defun‘yšó;m#½R ó3 cmss10æ(åconst–¦fcš²!har“*name,“rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t–¦f*function,“in˜tŽ¡‘DGk²!eyæ)Ž¡‘.ùœáAdd–<ýåname‘Úáto“the›<þlist“of“named˜functions.‘¡£Mak²!e“åfunction˜ábMÞe“the“function˜that“getsŽ¡‘.ùœcalled.‘ÝÝIf–¦fåk²!ey‘–~áis“not“-1,“then“bind“it“to“åfunction“áusing“ârl_bind_key()á.ަ‘!GUsing–žthis›žfunction“alone˜is“sucien²!t˜for“most“applications.‘ÛIt˜is“the˜recommended“w•²!a“yŽ¡‘Gto–<Óadd›<Òa“few˜functions“to“the˜default“functions˜that“Readline˜has“built“in.‘º¬If˜y²!ou“need˜to“doŽ¡‘Gsomething– {other“than“adding‘ za“function“to“Readline,‘$Àyš²!ou“ma˜y“need‘ zto“use“the“underlyingŽ¡‘Gfunctions–¦fdescribšMÞed“b˜elo²!w.ŽŸY!‘Gëe2.4.2‘d(Selecting–íMa“KeymapŽŽŸ³3‘GáKey–¦abindings“takš²!e“place‘¦`on“a“åk˜eymapá.‘ÝÎThe“k˜eymap“is“the‘¦`assošMÞciation“b˜et•²!w“een–¦athe“k²!eysŽ¡‘Gthat–k8the“user›k9t²!ypMÞes“and“the“functions“that˜get“run.‘Ê#Y‘ÿeou“can“makš²!e“y˜our‘k9o˜wn“k˜eymaps,‘wcop˜yŽ¡‘Gexisting–¦fkš²!eymaps,“and“tell“Readline“whic˜h“k˜eymap“to“use.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@Keymap‘LÉrl_make_bare_keymap‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturns–æEa‘æDnew,‘ ²emptš²!y“k˜eymap.‘ÒThe›æDspace“for“the˜k²!eymap“is“alloMÞcated˜with“âmalloc()á;Ž¡‘.ùœthe–¦fcaller“should“free“it“b²!y“calling“ârl_free_keymap()“áwhen“done.ŽŽŒ‹¤«Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—31ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@Keymap‘LÉrl_copy_keymap‘yšæ(åKeymap‘¦fmapæ)ޤ 33‘.ùœáReturn–¦fa“new“kš²!eymap“whic˜h“is“a“cop˜y“of“åmapá.Ž©ˆI’“z[F‘ÿeunction]ŽŽ‘Gë@Keymap‘LÉrl_make_keymap‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturn–Ŭa›Å«new“k²!eymap˜with“the˜prinš²!ting“c˜haracters‘Å«bMÞound“to“rl‘Ä>‰x³HøŽ‘Ñtinsert,‘Í|the“lo˜w˜ercaseŽ¡‘.ùœMeta–µÝcš²!haracters“bMÞound“to“run“their“equiv‘ÿdDalen˜ts,‘åùand“the“Meta“digits“bšMÞound“to“pro˜duceŽ¡‘.ùœn•²!umeric‘¦fargumen“ts.ŽŸˆH’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_discard_keymap‘yšæ(åKeymap‘¦fk²!eymapæ)Ž¡‘.ùœáF‘ÿeree–…óthe›…òstorage“assoMÞciated“with˜the“data“in˜åk²!eymapá.‘Ó The“caller“should˜free“åk²!eymapá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_free_keymap‘yšæ(åKeymap‘¦fk²!eymapæ)Ž¡‘.ùœáF‘ÿeree–³öall“storage›³õassoMÞciated“with“åk²!eymapá.‘ŒThis“calls“ârl_discard_keymap˜áto“free“sub-Ž¡‘.ùœordindate–¦fk²!eymaps“and“macros.ަ‘!GReadline–qhas“sev•²!eral‘qin“ternal›qk“eymaps.‘ >These˜functions˜allo“w˜y“ou‘qto˜c“hange˜whic“hŽ¡‘Gkš²!eymap–¦fis“activ˜e.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@Keymap‘LÉrl_get_keymap‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturns–¦fthe“currenš²!tly“activ˜e“k˜eymap.ŽŸˆH’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_set_keymap‘yšæ(åKeymap‘¦fk²!eymapæ)Ž¡‘.ùœáMak•²!es›¦fåk“eymap‘ûgáthe˜curren“tly˜activ“e˜k“eymap.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@Keymap‘LÉrl_get_keymap_by_name‘yšæ(åconst–¦fc²!har“*nameæ)Ž¡‘.ùœáReturn–ý>the“k•²!eymap›ý=matc“hing–ý>ånameá.‘âdåname‘šEáis“one“whic•²!h˜w“ould–ý>bMÞe“supplied“in˜a“âsetŽ¡‘.ùœkeymap–¦fáinputrc“line“(see“Section“1.3“[Readline“Init“File],“page“4).ަ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ*“rl_get_keymap_name‘yšæ(åKeymap‘¦fk²!eymapæ)Ž¡‘.ùœáReturn–ý>the“name‘ý=matcš²!hing“åk˜eymapá.‘âdåname‘šEáis“one“whic˜h‘ý=w˜ould“bMÞe“supplied“in‘ý=a“âsetŽ¡‘.ùœkeymap–¦fáinputrc“line“(see“Section“1.3“[Readline“Init“File],“page“4).ŽŸãd‘Gëe2.4.3‘d(Binding‘íMKeysŽŽŸ³3‘GáKey–Ûsequences›Úare“assoMÞciate˜with“functions˜through“the˜k²!eymap.‘2;Readline˜has“sev²!eral˜in-Ž¡‘Gternal‘€²k²!eymaps:‘Ëâemacs_standard_keymapá,–ˆ<âemacs_meta_keymapá,“âemacs_ctlx_keymapá,“âvi_Ž¡‘Gmovement_keymapá,‘qxand–§âvi_insertion_keymapá.‘ +£âemacs_standard_keymap“áis–¨the“default,Ž¡‘Gand–¦fthe“examples“in“this“man²!ual“assume“that.Ž©¤å‘!GSince–Qâreadline()“áinstalls›Qa“set“of“default˜k²!ey“bindings“the“ rst˜time“it“is“called,‘b"there“isŽ¡‘Galw•²!a“ys–ëíthe›ëîdanger“that“a“custom˜binding“installed“bMÞefore˜the“ rst“call“to˜âreadline()“áwillŽ¡‘GbMÞe›o•²!v“erridden.‘®An‘alternate˜mec“hanism˜is–to˜install“custom˜k²!ey“bindings˜in“an˜initializationŽ¡‘Gfunction–uŠassigned“to“the“ârl_startup_hook“áv‘ÿdDariable“(see“Section“2.3“[Readline“V‘ÿeariables],Ž¡‘Gpage‘¦f25).ަ‘!GThese–¦ffunctions“manage“k²!ey“bindings.ŽŸˆH’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_key‘yšæ(åin•²!t›¦fk“ey‘ÿe,˜rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t˜*functionæ)Ž¡‘.ùœáBinds–ö½åkš²!ey‘æÖáto“åfunction“áin‘ö¾the“curren˜tly“activ˜e‘ö¾k˜eymap.‘ÎãReturns“non-zero“in‘ö¾the“caseŽ¡‘.ùœof–¦fan“inš²!v‘ÿdDalid“åk˜eyá.ŽŸˆI’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_key_in_map‘yšæ(åin•²!t›¦fk“ey‘ÿe,˜rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t˜*function,Ž¡‘DGKeymap‘¦fmapæ)Ž¡‘.ùœáBind–¦fåkš²!ey‘–~áto“åfunction“áin“åmapá.‘ÝÝReturns“non-zero“in“the“case“of“an“in˜v‘ÿdDalid“åk˜eyá.ŽŽŒ‹ ²Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—32ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_key_if_unbound‘yšæ(åin•²!t›¦fk“ey‘ÿe,˜rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t˜*functionæ)ޤ 33‘.ùœáBinds–Iåk²!ey‘9-áto“åfunction“áif›Iit“is˜not“already“bMÞound˜in“the“curren•²!tly˜activ“e‘Ik“eymap.Ž¡‘.ùœReturns–¦fnon-zero“in“the“case“of“an“inš²!v‘ÿdDalid“åk˜ey‘–~áor“if“åk˜ey‘–~áis“already“bMÞound.Ž©fg’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_key_if_unbound_in_map‘yšæ(åin•²!t›¦fk“ey‘ÿe,˜rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“tŽ¡‘DG*function,–¦fKeymap“mapæ)Ž¡‘.ùœáBinds–GÓåk²!ey‘7ëáto“åfunction“áif“it“is“not“already“bMÞound“in“åmapá.‘¾WReturns“non-zero“in“the“caseŽ¡‘.ùœof–¦fan“inš²!v‘ÿdDalid“åk˜ey‘–~áor“if“åk˜ey‘–~áis“already“bMÞound.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_unbind_key‘yšæ(åin•²!t‘¦fk“eyæ)Ž¡‘.ùœáBind–[råkš²!ey‘K‹áto“the‘[sn˜ull“function›[sin“the˜currenš²!tly“activ˜e–[sk˜eymap.‘ýReturns“non-zero‘[rinŽ¡‘.ùœcase–¦fof“error.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_unbind_key_in_map‘yšæ(åin•²!t›¦fk“ey‘ÿe,˜Keymap˜mapæ)Ž¡‘.ùœáBind–¦fåkš²!ey‘–~áto“the“n˜ull“function“in“åmapá.‘ÝÝReturns“non-zero“in“case“of“error.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_unbind_function_in_map‘yšæ(årl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*function,Ž¡‘DGKeymap‘¦fmapæ)Ž¡‘.ùœáUnš²!bind–¦fall“k˜eys“that“execute“åfunction“áin“åmapá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_unbind_command_in_map‘yšæ(åconst–¦fc²!har“*command,“Keymap“mapæ)Ž¡‘.ùœáUnš²!bind–¦fall“k˜eys“that“are“bMÞound“to“åcommand‘¸áin“åmapá.ŽŸff’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_keyseq‘yšæ(åconst–¦fcš²!har“*k˜eyseq,“rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*functionæ)Ž¡‘.ùœáBind–,Žthe“kš²!ey“sequence‘,represen˜ted“b˜y“the“string“åk˜eyseq‘mtáto‘,the“function“åfunctioná,Ž¡‘.ùœbMÞeginning–c®in›c­the“curren•²!t˜k“eymap.‘Ç This˜mak“es–c®new“k²!eymaps˜as“necessary‘ÿe.‘ÇŸThe“returnŽ¡‘.ùœv‘ÿdDalue–¦fis“non-zero“if“åkš²!eyseq‘çLáis“in˜v‘ÿdDalid.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_keyseq_in_map‘yšæ(åconst–¦fcš²!har“*k˜eyseq,“rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“tŽ¡‘DG*function,–¦fKeymap“mapæ)Ž¡‘.ùœáBind–Éthe‘Èkš²!ey“sequence“represen˜ted“b˜y‘Èthe“string“åk˜eyseq‘B¯áto‘Èthe“function“åfunctioná.‘¦þThisŽ¡‘.ùœmakš²!es–€&new“k˜eymaps“as“necessary‘ÿe.›ÑInitial‘€%bindings“are“pMÞerformed“in“åmapá.˜The“returnŽ¡‘.ùœv‘ÿdDalue–¦fis“non-zero“if“åkš²!eyseq‘çLáis“in˜v‘ÿdDalid.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_set_key‘yšæ(åconst–¦fcš²!har“*k˜eyseq,“rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*function,Ž¡‘DGKeymap‘¦fmapæ)Ž¡‘.ùœáEquiv‘ÿdDalen²!t–¦fto“ârl_bind_keyseq_in_mapá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_keyseq_if_unbound‘yšæ(åconst–¦fcš²!har“*k˜eyseq,Ž¡‘DGrl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*functionæ)Ž¡‘.ùœáBinds–Cóåk²!eyseq‘„Øáto“åfunction“áif›Còit“is“not˜already“bMÞound˜in“the“curren•²!tly˜activ“e‘Cók“eymap.Ž¡‘.ùœReturns–¦fnon-zero“in“the“case“of“an“inš²!v‘ÿdDalid“åk˜eyseq‘çLáor“if“åk˜eyseq‘çLáis“already“bMÞound.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_bind_keyseq_if_unbound_in_map‘yšæ(åconst–¦fcš²!har“*k˜eyseq,Ž¡‘DGrl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t–¦f*function,“Keymap“mapæ)Ž¡‘.ùœáBinds–×åk²!eyseq‘øáto“åfunction›×áif“it“is˜not“already˜bMÞound“in˜åmapá.‘oãReturns“non-zero˜in“theŽ¡‘.ùœcase–¦fof“an“inš²!v‘ÿdDalid“åk˜eyseq‘çLáor“if“åk˜eyseq‘çLáis“already“bMÞound.ŽŽŒ‹!ÀŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—33ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_generic_bind‘yšæ(åin•²!t›¦ft“ypMÞe,˜const˜c“har˜*k“eyseq,˜c“har˜*data,˜Keymapޤ 33‘DGmapæ)Ž¡‘.ùœáBind–>ïthe›>ðk²!ey“sequence˜represenš²!ted“b˜y›>ðthe“string˜åk²!eyseq‘Õáto˜the“arbitrary˜pMÞoin²!ter“ådataá.Ž¡‘.ùœåt•²!ypšMÞe‘•ása“ys–jŽwhat‘jkind“of“data“is“p˜oinš²!ted‘jto“b˜y“ådataá;‘~this“can“bMÞe“a‘jfunction“(âISFUNCá),‘v†aŽ¡‘.ùœmacro–Š™(âISMACRá),‘(or“a›Š˜k²!eymap“(âISKMAPá).‘Ô™This˜makš²!es“new“k˜eymaps“as‘Š˜necessary‘ÿe.‘Ô™TheŽ¡‘.ùœinitial–¦fkš²!eymap“in“whic˜h“to“do“bindings“is“åmapá.ŽŸËë’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_parse_and_bind‘yšæ(åc²!har‘¦f*lineæ)Ž¡‘.ùœáP²!arse–‡yåline‘$€áas›‡xif“it“had“bMÞeen“read“from˜the“âinputrc“á le“and“pMÞerform˜anš²!y“k˜ey“bindingsŽ¡‘.ùœand–¦fv‘ÿdDariable“assignmen²!ts“found“(see“Section“1.3“[Readline“Init“File],“page“4).Ž©Ëì’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_read_init_file‘yšæ(åconst–¦fc²!har“* lenameæ)Ž¡‘.ùœáRead–È8kš²!eybindings“and‘È9v‘ÿdDariable“assignmen˜ts“from“å lename‘e?á(see‘È9Section“1.3“[ReadlineŽ¡‘.ùœInit–¦fFile],“page“4).ŽŸ»%‘Gëe2.4.4‘d(Assoiciating–íMF‘þÄ£unction“Names“and“BindingsŽŽŸ³3‘GáThese–ž›functions‘žšalloš²!w“y˜ou›žšto“ nd˜out“what“k•²!eys˜in“v“ok“e–ž›named˜functions“and˜the“functionsŽ¡‘Gin•²!v“ok“ed›MLb“y‘MMa˜particular˜k“ey˜sequence.‘À*Y‘ÿeou‘MMma“y˜also˜assoMÞciate–MMa˜new˜function˜name“with˜anŽ¡‘Garbitrary‘¦ffunction.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@rl_command_func_t–LÉ*“rl_named_function‘yšæ(åconst–¦fc²!har“*nameæ)Ž¡‘.ùœáReturn–¦fthe“function“with“name“ånameá.Ž©Ëë’“z[F‘ÿeunction]ŽŽ‘Gë@rl_command_func_t–LÉ*“rl_function_of_keyseq‘yšæ(åconst–¦fcš²!har“*k˜eyseq,Ž¡‘DGKeymap–¦fmap,“inš²!t“*t˜ypMÞeæ)Ž¡‘.ùœáReturn–è³the›è²function“in•²!v“ok“ed‘è³b“y˜åk“eyseq‘)™áin‘è³k“eymap˜åmapá.‘¤ÄIf˜åmap‘=´áis–è³âNULLá,‘ùEthe“curren²!tŽ¡‘.ùœkš²!eymap–q¤is‘q¥used.‘?˜If“åt˜ypMÞe‘«áis“not–q¥âNULLá,‘¤sthe“t˜ypMÞe–q¤of“the“ob‘›»ject›q¥is“returned“in˜the“âintŽ¡‘.ùœáv‘ÿdDariable–¦fit“pMÞoin²!ts“to“(one“of“âISFUNCá,“âISKMAPá,“or“âISMACRá).ަ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ**“rl_invoking_keyseqs‘yšæ(årl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*functionæ)Ž¡‘.ùœáReturn–¿ëan›¿êarra²!y“of˜strings“represen²!ting“the˜k²!ey“sequences“used˜to“in•²!v“ok“e˜åfunction‘¿ëáinŽ¡‘.ùœthe–¦fcurrenš²!t“k˜eymap.ŽŸËì’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ**“rl_invoking_keyseqs_in_map‘yšæ(årl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“tŽ¡‘DG*function,–¦fKeymap“mapæ)Ž¡‘.ùœáReturn–¿ëan›¿êarra²!y“of˜strings“represen²!ting“the˜k²!ey“sequences“used˜to“in•²!v“ok“e˜åfunction‘¿ëáinŽ¡‘.ùœthe–¦fk²!eymap“åmapá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_function_dumper‘yšæ(åin²!t‘¦freadableæ)Ž¡‘.ùœáPrinš²!t–‚Òthe“readline“function“names“and“the‘‚Ñk˜ey“sequences“curren˜tly“bMÞound“to“them“toŽ¡‘.ùœârl_outstreamá.‘¿ÕIf–LLåreadable‘éTáis›LMnon-zero,‘^Rthe“list˜is˜formatted˜in“suc•²!h˜a˜w“a“y˜that‘LLit˜canŽ¡‘.ùœbMÞe–¦fmade“part“of“an“âinputrc“á le“and“re-read.ŽŸËì’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_list_funmap_names‘yšæ(åv²!oidæ)Ž¡‘.ùœáPrin²!t–¦fthe“names“of“all“bindable“Readline“functions“to“ârl_outstreamá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@const–LÉchar“**“rl_funmap_names‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturn–Sa›RNULL‘1terminated“arra²!y˜of“kno²!wn“function˜names.‘°×The“arra²!y“is˜sorted.‘°×TheŽ¡‘.ùœarra²!y–\hitself›\iis“alloMÞcated,‘k5but“not˜the“strings“inside.‘Å3Y‘ÿeou˜should“free˜the“arra²!y‘ÿe,‘k5but“notŽ¡‘.ùœthe–¦fpMÞoinš²!ters,“using“âfree“áor“ârl_free“áwhen“y˜ou“are“done.ŽŽŒ‹"ζŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—34ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_add_funmap_entry‘yšæ(åconst–¦fc²!har“*name,“rl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“tޤ 33‘DG*functionæ)Ž¡‘.ùœáAdd–ð³åname‘»áto“the“list›ð´of“bindable˜Readline“command“names,‘Gand“mak²!e˜åfunction“átheŽ¡‘.ùœfunction–¦fto“bMÞe“called“when“åname‘Cmáis“in•²!v“ok“ed.ŽŸMµ‘Gëe2.4.5‘d(Allo–áwing‘íMUndoingŽŽŸ³3‘GáSuppMÞorting–L´the›L³undo“command˜is“a“painless˜thing,‘vGand“mak•²!es˜y“our‘L´functions˜m“uc“h‘L´moreŽ¡‘Guseful.‘ÝÝIt–¦fis“certainly“easy“to“try“something“if“yš²!ou“kno˜w“y˜ou“can“undo“it.ŽŸ€é‘!GIf–è*y²!our›è+function“simply“inserts˜text“once,‘8›or˜deletes“text“once,‘8›and˜uses“ârl_insert_Ž¡‘Gtext()–Y)áor“ârl_delete_text()›Y*áto“do“it,‘hœthen“undoing“is“already“done˜for“y²!ou“automatically‘ÿe.Ž©€è‘!GIf–u†yš²!ou“do“m˜ultiple“insertions“or“m˜ultiple“deletions,‘²or“an˜y“com˜bination“of“these“opMÞerations,Ž¡‘Gy²!ou–‘should›group“them˜together“in²!to˜one“opMÞeration.‘œ\This“is˜done“with˜ârl_begin_undo_Ž¡‘Ggroup()–¦fáand“ârl_end_undo_group()á.ަ‘!GThe–¦ftš²!ypMÞes“of“ev˜en˜ts“that“can“bMÞe“undone“are:ŽŸ͵‘.ùœóߤN cmtt9Éenum–¹–undo_code“{“UNDO_DELETE,“UNDO_INSERT,“UNDO_BEGIN,“UNDO_END“};ŽŸ€é‘!GáNotice–£¯that›£®âUNDO_DELETE“ámeans“to“insert˜some“text,‘¤:and“âUNDO_INSERT“ámeans˜to“deleteŽ¡‘Gsome–O²text.‘ÀöThat“is,›a the“undo“coMÞde“tells“what‘O±to“undo,˜not“ho²!w“to“undo“it.‘ÀöâUNDO_BEGIN“áandŽ¡‘GâUNDO_END–¦fáare“tags“added“b²!y“ârl_begin_undo_group()“áand“ârl_end_undo_group()á.Ž©Î’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_begin_undo_group‘yšæ(åv²!oidæ)Ž¡‘.ùœáBegins–·‡sa²!ving›·ˆundo“information“in˜a“group“construct.‘AThe“undo˜information“usuallyŽ¡‘.ùœcomes–þIfrom›þHcalls“to“ârl_insert_text()˜áand“ârl_delete_text()á,‘TAbut“could˜bMÞe“theŽ¡‘.ùœresult–¦fof“calls“to“ârl_add_undo()á.ŽŸΞ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_end_undo_group‘yšæ(åv²!oidæ)Ž¡‘.ùœáCloses–{the›{curren²!t“undo˜group“started“with˜ârl_begin_undo_group‘¦f()á.‘ÏmThere“shouldŽ¡‘.ùœbMÞe–¦fone“call“to“ârl_end_undo_group()“áfor“eac²!h“call“to“ârl_begin_undo_group()á.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_add_undo‘yšæ(åenš²!um–¦fundo‘Ä>‰x³HøŽ‘ÑtcoMÞde“what,“in˜t“start,“in˜t“end,“c˜har“*textæ)Ž¡‘.ùœáRemem•²!bMÞer›ího“w˜to˜undo‘ìan˜ev“en“t˜(according˜to˜åwhat=á).‘/rThe‘ìa ected˜text˜runs˜fromŽ¡‘.ùœåstart‘ãfáto–¦fåendá,“and“encompasses“åtextá.ŽŸΞ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_free_undo_list‘yšæ(åv²!oidæ)Ž¡‘.ùœáF‘ÿeree–¦fthe“existing“undo“list.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_do_undo‘yšæ(åv²!oidæ)Ž¡‘.ùœáUndo–¾§the“ rst“thing“on“the“undo“list.‘žReturns“â0“áif“there“w²!as“nothing“to‘¾¨undo,‘ínon-zeroŽ¡‘.ùœif–¦fsomething“w²!as“undone.ŽŸΞ‘!GFinally‘ÿe,‘Á#if›»Éy²!ou–»Êneither“insert“nor˜delete“text,‘Á#but˜directly“moMÞdify“the“existing˜text“(e.g.,Ž¡‘Gcš²!hange–§its“case),‘çKcall“ârl_modifying()“áonce,‘çLjust“bMÞefore“y˜ou‘§moMÞdify“the“text.‘àY‘ÿeou“m˜ustŽ¡‘Gsupply–¦fthe“indices“of“the“text“range“that“y²!ou“are“going“to“moMÞdify‘ÿe.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_modifying‘yšæ(åinš²!t–¦fstart,“in˜t“endæ)Ž¡‘.ùœáT‘ÿeell–Ô-Readline“to›Ô.sa•²!v“e–Ô-the“text“bMÞet•²!w“een˜åstart‘-áand–Ô-åend‘Báas“a˜single“undo“unit.‘g3It“isŽ¡‘.ùœassumed–¦fthat“yš²!ou“will“subsequen˜tly“moMÞdify“that“text.ŽŽŒ‹#ÝxŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—35ŽŽŽ ƒ33 ý ÌÍ‘Gëe2.4.6‘d(Redispla–áyŽŽŸ#’“zá[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_redisplay‘yšæ(åv²!oidæ)ޤ 33‘.ùœáChange–Šwhat's“displa•²!y“ed–Šon“the“screen“to‘Šre ect“the“currenš²!t“con˜ten˜ts“of“ârl_line_Ž¡‘.ùœbufferá.Ž©Þ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_forced_update_display‘yšæ(åv²!oidæ)Ž¡‘.ùœáF‘ÿeorce–Äóthe“line“to“bšMÞe“up˜dated“and“redispla•²!y“ed,‘ •whether–Äóor“not“Readline“thinks“theŽ¡‘.ùœscreen–¦fdispla²!y“is“correct.ŽŸÝ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_on_new_line‘yšæ(åv²!oidæ)Ž¡‘.ùœáT‘ÿeell–•Ðthe›•ÏupMÞdate“functions˜that“wš²!e“ha˜v˜e‘•Ïmo˜v˜ed“on˜to“a‘•Ïnew“(empt˜y)‘•Ïline,‘™!usually“afterŽ¡‘.ùœoutputting–¦fa“newline.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_on_new_line_with_prompt‘yšæ(åv²!oidæ)Ž¡‘.ùœáT‘ÿeell–ã_the›ã`upMÞdate“functions“that˜wš²!e“ha˜v˜e“mo˜v˜ed‘ã`on˜to“a“new–ã`line,‘ `with“årl‘Ä>‰x³HøŽ‘Ñtprompt‘ _áalreadyŽ¡‘.ùœdispla•²!y“ed.‘Ë®This–oÚcould“bMÞe›oÙused“b²!y“applications“that˜w•²!an“t–oÚto“output“the˜prompt“stringŽ¡‘.ùœthemselvš²!es,‘\Çbut–J_still“need“Readline“to“kno˜w“the“prompt“string“length“for“redispla˜y‘ÿe.‘¿0ItŽ¡‘.ùœshould–¦fbMÞe“used“after“setting“årl‘Ä>‰x³HøŽ–Ñtalready‘Ä>‰x³HøŽ“promptedá.ŽŸÝ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_reset_line_state‘yšæ(åv²!oidæ)Ž¡‘.ùœáReset–*‘the›*displa²!y“state“to“a˜clean“state“and“redispla²!y˜the“curren²!t“line“starting˜on“aŽ¡‘.ùœnew‘¦fline.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_crlf‘yšæ(åv²!oidæ)Ž¡‘.ùœáMo•²!v“e–¦fthe“cursor“to“the“start“of“the“next“screen“line.ŽŸÝ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_show_char‘yšæ(åin²!t‘¦fcæ)Ž¡‘.ùœáDispla•²!y›ç³c“haracter–ç´åc‘‘·áon“ârl_outstreamá.‘¡ÅIf˜Readline“has˜not˜bMÞeen“set˜to“displa²!y˜metaŽ¡‘.ùœcš²!haracters–Ødirectly‘ÿe,‘9(this‘Ùwill“con˜v˜ert‘Ùmeta“c˜haracters“to›Ùa“meta-pre xed˜k²!ey“sequence.Ž¡‘.ùœThis–¦fis“inš²!tended“for“use“b˜y“applications“whic˜h“wish“to“do“their“o˜wn“redispla˜y‘ÿe.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_message‘yšæ(åconst–¦fc²!har“*,‘PJ.–§‘.“.Ž‘5æ)Ž¡‘.ùœáThe–y¦argumenš²!ts“are‘y¥a“format“string“as“w˜ould‘y¥bšMÞe“supplied“to“âprintfá,‘µÌp˜ossibly“con²!tainingŽ¡‘.ùœcon•²!v“ersion›NÂspMÞeci cations‘NÃsuc“h˜as˜`â%dá',‘¸Ùand˜an“y˜additional˜argumen“ts‘NÃnecessary˜toŽ¡‘.ùœsatisfy–ø•the“con•²!v“ersion–ø•spMÞeci cations.‘ÔiThe“resulting“string“is‘ø”displa•²!y“ed–ø•in“the“åec²!hoŽ¡‘.ùœareaá.‘qThe–‚Lecš²!ho“area“is“also“used“to“displa˜y“n˜umeric“argumen˜ts“and“searc˜h“strings.Ž¡‘.ùœY‘ÿeou–ßshould“call“ârl_save_prompt“áto“sa•²!v“e–ßthe“prompt“information“bMÞefore“calling“thisŽ¡‘.ùœfunction.ŽŸÝ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_clear_message‘yšæ(åv²!oidæ)Ž¡‘.ùœáClear–zthe“message›zin“the“ec²!ho“area.‘ÏIf“the“prompt˜wš²!as“sa˜v˜ed“with“a‘zcall“to“ârl_save_Ž¡‘.ùœprompt–»oábMÞefore“the›»plast“call“to“ârl_messageá,‘±call˜ârl_restore_prompt“ábMÞefore“callingŽ¡‘.ùœthis‘¦ffunction.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_save_prompt‘yšæ(åv²!oidæ)Ž¡‘.ùœáSa•²!v“e–,the›, loMÞcal“Readline“prompt˜displa²!y“state“in˜preparation“for“displa²!ying˜a“newŽ¡‘.ùœmessage–¦fin“the“message“area“with“ârl_message()á.ŽŽŒ‹$ëXŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—36ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_restore_prompt‘yšæ(åv²!oidæ)ޤ 33‘.ùœáRestore–!Pthe“loMÞcal›!OReadline“prompt“displa²!y“state˜sa•²!v“ed›!Pb“y˜the˜most‘!Orecen“t˜call˜toŽ¡‘.ùœârl_save_promptá.‘Çóif–ômârl_save_prompt‘ônáwš²!as“called“to“sa˜v˜e›ônthe“prompt“bMÞefore˜a“callŽ¡‘.ùœto–k7ârl_messageá,‘œkthis‘k6function“should“bšMÞe“called“b˜efore“the‘k6corresp˜onding“call“to“ârl_Ž¡‘.ùœclear_messageá.Ž©·$’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_expand_prompt‘yšæ(åc²!har‘¦f*promptæ)Ž¡‘.ùœáExpand–#&anš²!y‘#%spMÞecial“c˜haracter›#%sequences“in˜åprompt‘`&áand˜set“up˜the“loMÞcal˜ReadlineŽ¡‘.ùœprompt›M%redispla²!y–M$v‘ÿdDariables.‘ÒThis“function˜is“called˜bš²!y“âreadline()á.‘ÒIt“ma˜y‘M%also“bMÞeŽ¡‘.ùœcalled–‰vto›‰uexpand“the“primary˜prompt“if“the˜ârl_on_new_line_with_prompt()“áfunctionŽ¡‘.ùœor– êârl_already_prompted“áv‘ÿdDariable“is“used.‘« It“returns“the“n•²!um“bMÞer– êof“visible“c²!haractersŽ¡‘.ùœon–/the“last“line“of“the“(pMÞossibly“mš²!ulti-line)‘.prompt.‘8Applications“ma˜y“indicate“thatŽ¡‘.ùœthe–XFprompt“conš²!tains“c˜haracters‘XGthat“tak˜e“up“no“ph˜ysical“screen‘XGspace“when“displa˜y˜edŽ¡‘.ùœb•²!y›ìxbrac“k“eting–ìwa˜sequence“of˜sucš²!h“c˜haracters›ìxwith“the˜spMÞecial“mark²!ers˜âRL_PROMPT_Ž¡‘.ùœSTART_IGNORE–M“áand›M”âRL_PROMPT_END_IGNORE“á(declared˜in“âreadline.há.‘ÓeThis˜ma²!y“bMÞeŽ¡‘.ùœused–¦fto“em²!bšMÞed“terminal-sp˜eci c“escap˜e“sequences“in“prompts.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_set_prompt‘yšæ(åconst–¦fc²!har“*promptæ)Ž¡‘.ùœáMakš²!e–;³Readline“use“åprompt‘x³áfor“subsequen˜t“redispla˜y‘ÿe.‘ºLThis“calls“ârl_expand_prompt()Ž¡‘.ùœáto–¦fexpand“the“prompt“and“sets“ârl_prompt“áto“the“result.ŽŸ­L‘Gëe2.4.7‘d(Moidifying‘íMT‘þÄ£extŽŽŸ`~’“zá[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_insert_text‘yšæ(åconst–¦fc²!har“*textæ)Ž¡‘.ùœáInsert–ËÂåtext‘Ãáin²!to“the›ËÃline“at˜the“curren²!t˜cursor“pMÞosition.‘MòReturns˜the“n•²!um“bMÞer˜of‘ËÂc“har-Ž¡‘.ùœacters‘¦finserted.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_delete_text‘yšæ(åinš²!t–¦fstart,“in˜t“endæ)Ž¡‘.ùœáDelete–ˆthe“text›ˆ‚bMÞet•²!w“een–ˆåstart‘Åáand“åend‘öÓáin˜the“curren²!t“line.‘„.Returns˜the“n•²!um“bMÞer‘ˆofŽ¡‘.ùœc²!haracters‘¦fdeleted.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ*“rl_copy_text‘yšæ(åinš²!t–¦fstart,“in˜t“endæ)Ž¡‘.ùœáReturn–¦fa“copš²!y“of“the“text“bMÞet˜w˜een“åstart‘ãfáand“åend‘¸áin“the“curren˜t“line.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_kill_text‘yšæ(åinš²!t–¦fstart,“in˜t“endæ)Ž¡‘.ùœáCopš²!y–œthe‘text“bMÞet˜w˜een–åstart‘Wœáand“åend‘ˆîáin“the–œcurren˜t“line›to“the˜kill“ring,‘7ªappMÞendingŽ¡‘.ùœor–øprepMÞending“to›ùthe“last“kill“if˜the“last“command“w²!as“a˜kill“command.‘)”The“text“isŽ¡‘.ùœdeleted.‘ÈIf–_åstart‘E_áis“less“than–^åendá,‘ Þthe“text–_is“appšMÞended,‘ Ýotherwise“prep˜ended.‘ÈIf“theŽ¡‘.ùœlast–¦fcommand“w²!as“not“a“kill,“a“new“kill“ring“slot“is“used.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_push_macro_input‘yšæ(åc²!har‘¦f*macroæ)Ž¡‘.ùœáCause–d’åmacro‘ñbáto“bšMÞe“inserted“in²!to“the“line,‘q¼as“if“it“had“b˜een“in•²!v“ok“ed›d’b“y˜a˜k“ey˜bMÞound˜toŽ¡‘.ùœa–¦fmacro.‘ÝÝNot“espMÞecially“useful;“use“ârl_insert_text()“áinstead.ŽŸ­L‘Gëe2.4.8‘d(Character‘íMInputŽŽŸ`~’“zá[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_read_key‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturn–Š7the›Š8next“c•²!haracter˜a“v‘ÿdDailable–Š7from˜Readline's“curren²!t˜input“stream.‘ÔyThis“han-Ž¡‘.ùœdles–.Sinput“inserted“in²!to“the“input“stream‘.Tvia“årl‘Ä>‰x³HøŽ–ÑtpMÞending‘Ä>‰x³HøŽ“input‘kSá(see–.SSection“2.3“[Read-Ž¡‘.ùœline–¸©V‘ÿeariables],›ý:page“25)‘¸ªand“ârl_stuff_char()á,‘ý9macros,˜and“c²!haracters‘¸ªread“fromŽŽŒ‹%øVŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—37ŽŽŽ ƒ33 ý ÌÍ‘.ùœthe–×kš²!eybMÞoard.‘2.While“w˜aiting›Öfor“input,‘43this˜function“will˜call“an²!y˜function“assignedޤ 33‘.ùœto–¦fthe“ârl_event_hook“áv‘ÿdDariable.Ž©=ð’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_getc‘yšæ(åFILE‘¦f*streamæ)Ž¡‘.ùœáReturn–Œthe‘Œ€next“cš²!haracter“a˜v‘ÿdDailable“from–Œ€åstreamá,‘Äàwhic˜h“is–Œassumed“to“bMÞe‘Œ€the“k˜eybMÞoard.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_stuff_char‘yšæ(åin²!t‘¦fcæ)Ž¡‘.ùœáInsert–òåc‘œáin²!to“the“Readline“input“stream.‘ÀâIt“will“bšMÞe“â"áreadâ"“áb˜efore“Readline“attemptsŽ¡‘.ùœto–6×read›6Øc²!haracters“from˜the“terminal˜with“ârl_read_key()á.‘¸®Up˜to“512˜cš²!haracters“ma˜yŽ¡‘.ùœbMÞe–¬+pushed“bacš²!k.‘ï,ârl_stuff_char“áreturns“1“if“the“c˜haracter“w˜as“successfully“inserted;Ž¡‘.ùœ0‘¦fotherwise.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_execute_next‘yšæ(åin²!t‘¦fcæ)Ž¡‘.ùœáMak²!e–HÆåc‘òËábMÞe“the›HÇnext“command“to˜bMÞe“executed˜when“ârl_read_key()“áis˜called.‘ÄþThisŽ¡‘.ùœsets‘¦fårl‘Ä>‰x³HøŽ–ÑtpMÞending‘Ä>‰x³HøŽ“inputá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_clear_pending_input‘yšæ(åv²!oidæ)Ž¡‘.ùœáUnset›|årl‘Ä>‰x³HøŽ–ÑtpMÞending‘Ä>‰x³HøŽ“inputá,‘\e ectiv•²!ely˜negating˜the˜e ect‘{of˜an“y˜previous˜call˜to˜ârl_Ž¡‘.ùœexecute_next()á.‘zYThis–…:w²!orks“only“if“the“pšMÞending“input“has“not“already“b˜een“readŽ¡‘.ùœwith‘¦fârl_read_key()á.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_set_keyboard_input_timeout‘yšæ(åin²!t‘¦fuæ)Ž¡‘.ùœáWhile–ÑŽwš²!aiting“for‘Ñk˜eybMÞoard“input“in“ârl_read_key()á,‘WReadline“will“w˜ait‘Ñfor“åu“ámi-Ž¡‘.ùœcroseconds–µÀfor“input›µÁbMÞefore“calling“an²!y“function˜assigned“to“ârl_event_hooká.‘ ìåu“ám²!ustŽ¡‘.ùœbšMÞe–Ógreater“than“or“equal“to“zero“(a“zero-length“timeout“is“equiv‘ÿdDalen²!t“to“a“p˜oll).‘e[TheŽ¡‘.ùœdefault–¦fwš²!aiting“p•MÞerio“d–¦fis“one-ten˜th“of“a“second.‘ÝÝReturns“the“old“timeout“v‘ÿdDalue.ŽŸ\~‘Gëe2.4.9‘d(T‘þÄ£erminal‘íMManagemen–átŽŽŸ±’“zá[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_prep_terminal‘yšæ(åin²!t‘¦fmeta‘Ä>‰x³HøŽ‘Ñt agæ)Ž¡‘.ùœáMoMÞdify–¦the“terminal“settings“for“Readline's“use,‘w¶so“âreadline()“ácan“read“a“singleŽ¡‘.ùœc²!haracter–¶,at›¶-a“time“from˜the“k•²!eybMÞoard.‘ 0The˜åmeta‘Ä>‰x³HøŽ‘Ñt ag‘¦Dáargumen“t–¶,should˜bMÞe“non-zeroŽ¡‘.ùœif–¦fReadline“should“read“eigh²!t-bit“input.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_deprep_terminal‘yšæ(åv²!oidæ)Ž¡‘.ùœáUndo–Ë­the›ˬe ects“of˜ârl_prep_terminal()á,‘Ôÿlea²!ving˜the“terminal“in˜the“state˜in“whic²!hŽ¡‘.ùœit–¦fwš²!as“bMÞefore“the“most“recen˜t“call“to“ârl_prep_terminal()á.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_tty_set_default_bindings‘yšæ(åKeymap‘¦fkmapæ)Ž¡‘.ùœáRead–oÝthe›oÜopMÞerating“system's“terminal“editing˜cš²!haracters“(as“w˜ould“bMÞe‘oÜdispla˜y˜ed“b˜yŽ¡‘.ùœâsttyá)–¦fto“their“Readline“equiv‘ÿdDalen²!ts.‘ÝÝThe“bindings“are“pMÞerformed“in“åkmapá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_tty_unset_default_bindings‘yšæ(åKeymap‘¦fkmapæ)Ž¡‘.ùœáReset–Ò;the“bindings“manipulated“b²!y‘Ò:ârl_tty_set_default_bindings“áso“that“the“ter-Ž¡‘.ùœminal–¯editing›°c²!haracters“are˜bMÞound“to“ârl_insertá.‘2¹The˜bindings“are˜pMÞerformed“inŽ¡‘.ùœåkmapá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_reset_terminal‘yšæ(åconst–¦fc²!har“*terminal‘Ä>‰x³HøŽ‘Ñtnameæ)Ž¡‘.ùœáReinitialize–Û÷Readline's“idea“of“the“terminal‘Ûøsettings“using“återminal‘Ä>‰x³HøŽ‘Ñtname‘xþáas“the“termi-Ž¡‘.ùœnal–Ñ¢t²!ypMÞe‘Ñ¡(e.g.,›Üqâvt100á).‘_If“återminal‘Ä>‰x³HøŽ‘Ñtname‘n¨áis“âNULLá,˜the›Ñ¡v‘ÿdDalue“of“the˜âTERM“áen•²!vironmen“tŽ¡‘.ùœv‘ÿdDariable–¦fis“used.ŽŽŒ‹&]Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—38ŽŽŽ ƒ33 ý ÌÍ‘Gëe2.4.10‘d(Utilit–áy‘íMF‘þÄ£unctionsŽŽŸ’I’“zá[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_save_state‘yšæ(åstruct–¦freadline‘Ä>‰x³HøŽ‘Ñtstate“*spæ)ޤ 33‘.ùœáSa•²!v“e–ka›ksnapshot“of“Readline's“in²!ternal˜state“to“åspá.‘ÊThe“con•²!ten“ts–kof˜the“åreadline‘Ä>‰x³HøŽ‘ÑtstateŽ¡‘.ùœástructure–òare“došMÞcumen²!ted“in“âreadline.há.‘ѶThe“caller“is“resp˜onsible“for“allo˜cating“theŽ¡‘.ùœstructure.Ž©ñ`’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_restore_state‘yšæ(åstruct–¦freadline‘Ä>‰x³HøŽ‘Ñtstate“*spæ)Ž¡‘.ùœáRestore–© Readline's›©in²!ternal“state˜to“that“stored˜in“åspá,‘ÛÇwhicš²!h“m˜ust“ha˜v˜e‘©bMÞeen“sa˜v˜ed‘©b˜y“aŽ¡‘.ùœcall–|¼to“ârl_save_stateá.‘ÏúThe‘|»con•²!ten“ts–|¼of“the“åreadline‘Ä>‰x³HøŽ‘Ñtstate‘Ãástructure“are“doMÞcumen²!tedŽ¡‘.ùœin–¦fâreadline.há.‘ÝÝThe“caller“is“respMÞonsible“for“freeing“the“structure.ŽŸñ_’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_free‘yšæ(åv²!oid‘¦f*memæ)Ž¡‘.ùœáDeallošMÞcate–Œ“the‘Œ’memory“p˜oinš²!ted“to‘Œ’b˜y“åmemá.‘ìåmem“ám˜ust‘Œ’ha˜v˜e“bšMÞeen“allo˜cated‘Œ’b²!y“âmallocá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_replace_line‘yšæ(åconst–¦fcš²!har“*text,“in˜t“clear‘Ä>‰x³HøŽ‘Ñtundoæ)Ž¡‘.ùœáReplace›¼Jthe‘¼Kcon•²!ten“ts˜of˜ârl_line_buffer–¼Káwith˜åtextá.‘ŠThe“pMÞoin²!t˜and˜mark“are˜pre-Ž¡‘.ùœserv²!ed,‘.eif–epMÞossible.‘«ÝIf“åclear‘Ä>‰x³HøŽ‘Ñtundo‘5áis›dnon-zero,‘.fthe“undo˜list“assoMÞciated“with“the“curren²!tŽ¡‘.ùœline–¦fis“cleared.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_extend_line_buffer‘yšæ(åin²!t‘¦flenæ)Ž¡‘.ùœáEnsure–ž4that“ârl_line_buffer“áhas‘ž5enough“space“to“hold“ålen“ác²!haracters,‘ŸØpMÞossibly“real-Ž¡‘.ùœloMÞcating–¦fit“if“necessary‘ÿe.ŽŸñ_’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_initialize‘yšæ(åv²!oidæ)Ž¡‘.ùœáInitialize–n8or›n7re-initialize“Readline's˜in²!ternal“state.‘5RIt's“not˜strictly“necessary˜to“callŽ¡‘.ùœthis;–¦fâreadline()“ácalls“it“bMÞefore“reading“an²!y“input.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_ding‘yšæ(åv²!oidæ)Ž¡‘.ùœáRing–¦fthe“terminal“bšMÞell,“ob˜eying“the“setting“of“âbell-styleá.ŽŸñ_’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_alphabetic‘yšæ(åin²!t‘¦fcæ)Ž¡‘.ùœáReturn–¦f1“if“åc‘Pjáis“an“alphabMÞetic“c²!haracter.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_display_match_list‘yšæ(åc•²!har›¦f**matc“hes,˜in“t˜len,˜in“t˜maxæ)Ž¡‘.ùœáA‘#;con•²!v“enience–#[function“for“displa²!ying“a“list“of“strings“in“columnar“format“on“Read-Ž¡‘.ùœline's›woutput–xstream.‘âmatches“áis˜the˜list˜of“strings,‘»in˜argv“format,‘»suc²!h˜as˜a“list˜ofŽ¡‘.ùœcompletion–é9matcš²!hes.‘žÎâlen“áis“the“n˜um˜bMÞer“of“strings“in“âmatchesá,‘and“âmax“áis“the“length“ofŽ¡‘.ùœthe–$ˆlongest›$‡string“in“âmatchesá.‘²“This“function˜uses“the“setting˜of“âprint-completions-Ž¡‘.ùœhorizontally–Yðáto‘Yñselect“hoš²!w“the“matc˜hes‘Yñare“displa˜y˜ed“(see“Section‘Yñ1.3.1“[ReadlineŽ¡‘.ùœInit–Ÿ´File“Synš²!tax],‘¡ page‘Ÿµ4).‘Û¢When“displa˜ying“completions,‘¡ this“function‘Ÿµsets“the“n˜um-Ž¡‘.ùœbMÞer–ÔTof›ÔScolumns“used˜for“displa²!y“to˜the“v‘ÿdDalue˜of“âcompletion-display-widthá,‘þWthe“v‘ÿdDalueŽ¡‘.ùœof–¦fthe“en•²!vironmen“t–¦fv‘ÿdDariable“âCOLUMNSá,“or“the“screen“width,“in“that“order.ŽŸñ_‘!GThe–Ûfolloš²!wing‘Ûare“implemen˜ted“as“macros,‘èlik²!e“erasing“a“line.‘}÷ReadlineŽ¡‘.ùœdoMÞes–4Anot“use›4@all“of“a“terminal's˜capabilities,‘W·and“this“function“will˜return“v‘ÿdDalues“forŽ¡‘.ùœonly–¦fthose“capabilities“Readline“uses.ŽŽŒ‹($NŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—40ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_clear_history‘yšæ(åv²!oidæ)ޤ 33‘.ùœáClear–C%the“history›C$list“b²!y“deleting“all˜of“the“en²!tries,‘Vþin“the“same“manner˜as“the“HistoryŽ¡‘.ùœlibrary's›%>âclear_history()–%=áfunction.‘ ZeThis“di ers˜from˜âclear_history“ábMÞecause˜itŽ¡‘.ùœfrees–¦fpriv‘ÿdDate“data“Readline“sa•²!v“es–¦fin“the“history“list.ŽŸ™š‘Gëe2.4.12‘d(Alternate‘íMIn–áterfaceŽŽŸ³3‘GáAn–™Äalternate‘™Ãinš²!terface“is“a˜v‘ÿdDailable“to›™Ãplain“âreadline()á.‘„RSome“applications“need˜to“in•²!terlea“v“eŽ¡‘Gk²!eybMÞoard‘F'I/O‘Eþwith›F( le,–ndevice,“or˜windoš²!w–F'system“I/O,“t˜ypically‘F(b˜y“using“a“main‘F(loMÞop“toŽ¡‘Gâselect()–Váon›Vv‘ÿdDarious“ le˜descriptors.‘ ìëT‘ÿeo“accommoMÞdate˜this“need,‘Âreadline“can˜also“bMÞeŽ¡‘Gin•²!v“ok“ed–¾=as“a‘¾>`callbacš²!k'“function“from“an“ev˜en˜t›¾>loMÞop.‘%bThere“are“functions˜aš²!v‘ÿdDailable“to“mak˜eŽ¡‘Gthis‘¦feasy‘ÿe.Ž©fh’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_callback_handler_install‘yšæ(åconst–¦fc²!har“*prompt,Ž¡‘DGrl‘Ä>‰x³HøŽ–Ñtv²!cpfunc‘Ä>‰x³HøŽ“t‘¦f*lhandleræ)Ž¡‘.ùœáSet–ùÅup›ùÄthe“terminal“for˜readline“I/O‘ù™and“displa²!y“the˜initial“expanded“v‘ÿdDalue˜of“åpromptá.Ž¡‘.ùœSa•²!v“e–ñcš²!haracters“to“lo˜w˜ercase.‘¦XIf“this“function“w˜as“bMÞound“to“`âM-cá',‘d™then“t˜yping“`âM-cá'Ž¡‘Gw•²!ould›ɳc“hange–É´the˜case“of˜the“c²!haracter˜under“pMÞoin•²!t.‘GÅT“yping‘É´`âM-1–¦f0“M-cá'˜w•²!ould‘É´c“hange˜theŽ¡‘Gcase–¦fof“the“folloš²!wing“10“c˜haracters,“lea˜ving“the“cursor“on“the“last“c˜haracter“c˜hanged.ŽŸÌÍ‘.ùœâ/*–¿ªInvert“the“case“of“the“COUNT“following“characters.“*/Ž¡‘.ùœintŽ¡‘.ùœinvert_case_line–¿ª(count,“key)Ž¡‘K·îint–¿ªcount,“key;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªint“start,“end,“i;ŽŽŒ‹)2éŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—41ŽŽŽ ƒ33 ý®‘:xðâstart–¿ª=“rl_point;ޤff‘:xðif–¿ª(rl_point“>=“rl_end)Ž© 33‘EøDreturn‘¿ª(0);Ž¡‘:xðif–¿ª(count“<“0)ަ‘EøD{ަ‘Qw˜direction–¿ª=“-1;ަ‘Qw˜count–¿ª=“-count;ަ‘EøD}ަ‘:xðelseަ‘EøDdirection–¿ª=“1;Ž¡‘:xð/*–¿ªFind“the“end“of“the“range“to“modify.“*/ަ‘:xðend–¿ª=“start“+“(count“*“direction);Ž¡‘:xð/*–¿ªForce“it“to“be“within“range.“*/ަ‘:xðif–¿ª(end“>“rl_end)ަ‘EøDend–¿ª=“rl_end;ަ‘:xðelse–¿ªif“(end“<“0)ަ‘EøDend–¿ª=“0;Ž¡‘:xðif–¿ª(start“==“end)ަ‘EøDreturn‘¿ª(0);Ž¡‘:xðif–¿ª(start“>“end)ަ‘EøD{ަ‘Qw˜int–¿ªtemp“=“start;ަ‘Qw˜start–¿ª=“end;ަ‘Qw˜end–¿ª=“temp;ަ‘EøD}Ž¡‘:xð/*–¿ªTell“readline“that“we“are“modifying“the“line,ަ‘K·îso–¿ªit“will“save“the“undo“information.“*/ަ‘:xðrl_modifying–¿ª(start,“end);Ž¡‘:xðfor–¿ª(i“=“start;“i“!=“end;“i++)ަ‘EøD{ަ‘Qw˜if–¿ª(_rl_uppercase_p“(rl_line_buffer[i]))ަ‘\öìrl_line_buffer[i]–¿ª=“_rl_to_lower“(rl_line_buffer[i]);ަ‘Qw˜else–¿ªif“(_rl_lowercase_p“(rl_line_buffer[i]))ަ‘\öìrl_line_buffer[i]–¿ª=“_rl_to_upper“(rl_line_buffer[i]);ަ‘EøD}ަ‘:xð/*–¿ªMove“point“to“on“top“of“the“last“character“changed.“*/ަ‘:xðrl_point–¿ª=“(direction“==“1)“?“end“-“1“:“start;ަ‘:xðreturn‘¿ª(0);ŽŽŒ‹*AáŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—42ŽŽŽ ƒ33 ý ÌÍ‘.ùœâ}ŽŸ Ñ‘Gëe2.4.14‘d(Alternate–íMIn–áterface“ExampleŽŽŸ³3‘GáHere–¡Êis“a“complete“program“that“illustrates“Readline's“alternate“in²!terface.‘Ð It“reads“linesޤ 33‘Gfrom–¸0the“terminal“and“displaš²!ys“them,‘¼¢pro˜viding“the“standard“history“and“T‘ÿeAB‘¸+completionŽ¡‘Gfunctions.‘ÝÝIt–¦funderstands“the“EOF“c²!haracter“or“â"áexitâ"“áto“exit“the“program.ŽŸ@‘.ùœâ/*–¿ªStandard“include“files.“stdio.h“is“required.“*/Ž¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ©ff‘.ùœ/*–¿ªUsed“for“select(2)“*/Ž¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¦‘.ùœ#include‘¿ªŽ¦‘.ùœ/*–¿ªStandard“readline“include“files.“*/Ž¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¦‘.ùœstatic–¿ªvoid“cb_linehandler“(char“*);ަ‘.ùœint‘¿ªrunning;Ž¡‘.ùœconst–¿ªchar“*prompt“=“"rltest$“";ަ‘.ùœ/*–¿ªCallback“function“called“for“each“line“when“accept-line“executed,“EOFŽ¡‘@8šseen,–¿ªor“EOF“character“read.‘ TThis“sets“a“flag“and“returns;“it“couldŽ¡‘@8šalso–¿ªcall“exit(3).“*/Ž¡‘.ùœstatic‘¿ªvoidŽ¡‘.ùœcb_linehandler–¿ª(char“*line)Ž¡‘.ùœ{Ž¡‘:xð/*–¿ªCan“use“^D“(stty“eof)“or“`exit'“to“exit.“*/Ž¡‘:xðif–¿ª(line“==“NULL“||“strcmp“(line,“"exit")“==“0)Ž¡‘EøD{Ž¡‘Qw˜if–¿ª(line“==“0)Ž¡‘\öìprintf‘¿ª("\n");Ž¡‘Qw˜printf‘¿ª("exit\n");Ž¡‘Qw˜/*–¿ªThis“function“needs“to“be“called“to“reset“the“terminal“settings,Ÿnï„ ™Ž¡‘b¶–and–¿ªcalling“it“from“the“line“handler“keeps“one“extra“prompt“fromŸnï„ Ž¡‘b¶–being–¿ªdisplayed.“*/Ž¡‘Qw˜rl_callback_handler_remove‘¿ª();ަ‘Qw˜running–¿ª=“0;Ž¡‘EøD}Ž¡‘:xðelseŽ¡‘EøD{ŽŽŒ‹+FýŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—43ŽŽŽ ƒ33 ý ÌÍ‘Qw˜âif‘¿ª(*line)ޤ 33‘\öìadd_history‘¿ª(line);Ž¡‘Qw˜printf–¿ª("input“line:“%s\n",“line);Ž¡‘Qw˜free‘¿ª(line);Ž¡‘EøD}Ž¡‘.ùœ}Ž©ff‘.ùœintŽ¡‘.ùœmain–¿ª(int“c,“char“**v)Ž¡‘.ùœ{Ž¡‘:xðfd_set‘¿ªfds;Ž¡‘:xðint‘¿ªr;ަ‘:xð/*–¿ªInstall“the“line“handler.“*/Ž¡‘:xðrl_callback_handler_install–¿ª(prompt,“cb_linehandler);ަ‘:xð/*–¿ªEnter“a“simple“event“loop.‘ TThis“waits“until“something“is“availableŽ¡‘K·îto–¿ªread“on“readline's“input“stream“(defaults“to“standard“input)“andŽ¡‘K·îcalls–¿ªthe“builtin“character“read“callback“to“read“it.‘ TIt“does“notŽ¡‘K·îhave–¿ªto“modify“the“user's“terminal“settings.“*/Ž¡‘:xðrunning–¿ª=“1;Ž¡‘:xðwhile‘¿ª(running)Ž¡‘EøD{Ž¡‘Qw˜FD_ZERO‘¿ª(&fds);Ž¡‘Qw˜FD_SET–¿ª(fileno“(rl_instream),“&fds);ަ‘Qw˜r–¿ª=“select“(FD_SETSIZE,“&fds,“NULL,“NULL,“NULL);Ž¡‘Qw˜if–¿ª(r“<“0)Ž¡‘\öì{Ž¡‘hv@perror–¿ª("rltest:“select");Ž¡‘hv@rl_callback_handler_remove‘¿ª();Ž¡‘hv@break;Ž¡‘\öì}ަ‘Qw˜if–¿ª(FD_ISSET“(fileno“(rl_instream),“&fds))Ž¡‘\öìrl_callback_read_char‘¿ª();Ž¡‘EøD}ަ‘:xðprintf–¿ª("rltest:“Event“loop“has“exited\n");Ž¡‘:xðreturn‘¿ª0;Ž¡‘.ùœ}ŽŸ!™¢‘Gë\2.5‘™Readline–f@Signal“HandlingŽŽŸ33‘GáSignals–¨”are“async•²!hronous‘¨“ev“en“ts›¨”sen“t˜to˜a‘¨“proMÞcess˜b“y˜the˜Unix‘¨“k“ernel,‘©sometimes˜on˜bMÞehalfŽ¡‘Gof–*£another“proMÞcess.‘j•They“are“inš²!tended‘*¤to“indicate“exceptional“ev˜en˜ts,‘K²lik˜e‘*¤a“user“pressingŽ¡‘Gthe– 'inš²!terrupt“k˜ey“on“his“terminal,‘#or“a“net˜w˜ork“connection“bMÞeing“brok˜en.‘ There“is“a“classŽŽŒ‹,MÑŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—44ŽŽŽ ƒ33 ý ÌÍ‘Gof–usignals›u€that“can“bMÞe˜sen²!t“to“the˜proMÞcess“curren²!tly“reading˜input“from“the˜k²!eybMÞoard.‘ÍSinceޤ 33‘GReadline–Wc²!hanges›W‚the“terminal˜attributes“when˜it“is˜called,‘ÃÇit˜needs“to˜pšMÞerform“sp˜ecialŽ¡‘GproMÞcessing–OBwhen›OAsuc²!h“a˜signal“is“receiv²!ed˜in“order˜to“restore“the˜terminal“to˜a“sane“state,‘`¯orŽ¡‘Gproš²!vide–¦fapplication“writers“with“functions“to“do“so“man˜ually‘ÿe.Ž©‘!GReadline–Øúconš²!tains“an“in˜ternal›Øùsignal“handler“that“is“installed“for˜a“n•²!um“bMÞer–Øúof“signalsŽ¡‘G(âSIGINTá,–ª âSIGQUITá,“âSIGTERMá,›ª âSIGHUPá,“âSIGALRMá,“âSIGTSTPá,“âSIGTTINá,˜and‘vâSIGTTOUá).‘LÿWhenŽ¡‘Gone–5Fof“these“signals“is“receiv²!ed,‘Kæthe“signal‘5Ghandler“will“reset“the“terminal“attributes“to“thoseŽ¡‘Gthat–á w²!ere›áin“e ect˜bMÞefore“âreadline()˜áw²!as“called,‘ïÍreset“the˜signal“handling˜to“what˜it“w²!asŽ¡‘GbMÞefore–4’âreadline()›4‘áw²!as“called,‘KUand“resend˜the“signal“to˜the“calling˜application.‘·ìIf˜and“whenŽ¡‘Gthe–"calling›!application's“signal˜handler“returns,‘0ÐReadline“will˜reinitialize“the˜terminal“andŽ¡‘Gcon•²!tin“ue–dLto“accept›dMinput.‘ÇÔWhen“a“âSIGINT˜áis“receiv²!ed,‘q„the“Readline˜signal“handler“pMÞerformsŽ¡‘Gsome‘¦žadditional›¦w•²!ork,‘æ¬whic“h˜will–¦žcause“anš²!y“partially-en˜tered‘¦line“to“bšMÞe“ab˜orted‘¦(see“theŽ¡‘Gdescription–¦fof“ârl_free_line_state()“ábMÞelo²!w).ŽŸ‘!GThere–ëªis“an“additional“Readline“signal“handler,›for“âSIGWINCHá,˜whicš²!h“the“k˜ernel“sends“to“aŽ¡‘GproMÞcess–v`whenev²!er›v_the“terminal's“size˜c²!hanges“(for˜example,‘ûif“a˜user“resizes˜an“âxtermá).‘ÍÛTheŽ¡‘GReadline–GtâSIGWINCH“áhandler›GsupMÞdates“Readline's“in²!ternal“screen˜size“information,‘o·and“thenŽ¡‘Gcalls–÷an²!y“âSIGWINCH“ásignal“handler“the“calling“application‘öhas“installed.‘Readline“calls“theŽ¡‘Gapplication's–;âSIGWINCH“ásignal›; handler“without“resetting“the“terminal“to˜its“original“state.Ž¡‘GIf–Ö«the“application's“signal“handler“došMÞes“more“than‘Ö¬up˜date“its“idea“of“the“terminal“size“andŽ¡‘Greturn–Ž(for“example,‘’ìa“âlongjmp“ábac²!k“to“a“main“prošMÞcessing“lo˜op),‘’ìit“ämust‘—øácall“ârl_cleanup_Ž¡‘Gafter_signal()–¦fá(describšMÞed“b˜elo²!w),“to“restore“the“terminal“state.ަ‘!GReadline–o#proš²!vides“t˜w˜o“v‘ÿdDariables“that“allo˜w‘o"application“writers“to“con˜trol“whether“or“notŽ¡‘Git–û.will›û/catc²!h“certain“signals“and˜act“on“them˜when“they“are“receiv²!ed.‘Ü6It“is˜impMÞortan²!t“thatŽ¡‘Gapplications–f“c²!hange›f’the“v‘ÿdDalues˜of“these˜v‘ÿdDariables“only˜when“calling“âreadline()á,‘–not˜in“aŽ¡‘Gsignal–¦fhandler,“so“Readline's“in²!ternal“signal“state“is“not“corrupted.ŽŸÌÎ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_catch_signalsŽ¡‘.ùœáIf–w*this›w)v‘ÿdDariable“is˜non-zero,‘€œReadline“will“install˜signal“handlers˜for“âSIGINTá,‘€œâSIGQUITá,Ž¡‘.ùœâSIGTERMá,–¦fâSIGHUPá,“âSIGALRMá,“âSIGTSTPá,“âSIGTTINá,“and“âSIGTTOUá.ަ‘.ùœThe–¦fdefault“v‘ÿdDalue“of“ârl_catch_signals“áis“1.ŽŸÌÎ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_catch_sigwinchŽ¡‘.ùœáIf–…Tthis“v›ÿdDariable“is“set“to“a“non-zero“v˜alue,‘½Readline“will“install“a“signal“handler“forŽ¡‘.ùœâSIGWINCHá.ަ‘.ùœThe–¦fdefault“v‘ÿdDalue“of“ârl_catch_sigwinch“áis“1.ŽŸÌÎ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_change_environmentŽ¡‘.ùœáIf–Ã2this›Ã1v‘ÿdDariable“is˜set“to˜a“non-zero˜v‘ÿdDalue,‘Êeand˜Readline“is˜handling“âSIGWINCHá,‘ÊdRead-Ž¡‘.ùœline–›Áwill››ÂmoMÞdify“the“åLINES‘?Iáand“åCOLUMNS‘?Háen•²!vironmen“t˜v‘ÿdDariables–›ÁupMÞon“receipt˜of“aŽ¡‘.ùœâSIGWINCHަ‘.ùœáThe–¦fdefault“v‘ÿdDalue“of“ârl_change_environment“áis“1.ŽŸÌΑ!GIf–¸0an“application›¸/doMÞes“not“wish“to˜ha•²!v“e–¸0Readline“catcš²!h“an˜y–¸/signals,‘¼£or“to–¸0handle“signalsŽ¡‘Gother–¤Ãthan›¤Äthose“Readline“catc²!hes˜(âSIGHUPá,›äZfor“example),˜Readline‘¤Äproš²!vides“con˜v˜enienceŽ¡‘Gfunctions–¦fto“do“the“necessary“terminal“and“inš²!ternal“state“clean˜up“upMÞon“receipt“of“a“signal.ŽŽŒ‹-TAŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—45ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_cleanup_after_signal‘yšæ(åv²!oidæ)ޤ 33‘.ùœáThis–¦function›¥will“reset˜the“state˜of“the“terminal˜to“what˜it“w²!as˜bMÞefore“âreadline()Ž¡‘.ùœáwš²!as–†called,‘Œ~and“remo˜v˜e›†the“Readline˜signal“handlers˜for“all˜signals,‘ŒdepMÞending˜on“theŽ¡‘.ùœv‘ÿdDalues–¦fof“ârl_catch_signals“áand“ârl_catch_sigwinchá.Ž©²~’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_free_line_state‘yšæ(åv²!oidæ)Ž¡‘.ùœáThis–µwill“free›µ~an²!y“partial“state“assoMÞciated˜with“the“curren²!t“input˜line“(undo“infor-Ž¡‘.ùœmation,‘z$anš²!y–˜partial“history“en˜try‘ÿe,‘z#an˜y“partially-en˜tered“k˜eybMÞoard“macro,‘z$and“an˜yŽ¡‘.ùœpartially-en•²!tered‘½Õn“umeric›½Ôargumen“t).‘ $*This˜should–½ÕbMÞe“called˜bMÞefore“ârl_cleanup_Ž¡‘.ùœafter_signal()á.‘ LãThe– ½Readline“signal“handler› ¾for“âSIGINT“ácalls“this˜to“abMÞort“theŽ¡‘.ùœcurren²!t–¦finput“line.ŽŸ²}’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_reset_after_signal‘yšæ(åv²!oidæ)Ž¡‘.ùœáThis–k¶will“reinitialize“the“terminal“and“reinstall‘kµan²!y“Readline“signal“handlers,‘wsdepMÞend-Ž¡‘.ùœing–¦fon“the“v‘ÿdDalues“of“ârl_catch_signals“áand“ârl_catch_sigwinchá.ަ‘!GIf–»µan›»¶application“doMÞes“not˜wish“Readline“to˜catcš²!h“âSIGWINCHá,‘ it“ma˜y‘»¶call“ârl_resize_Ž¡‘Gterminal()–Báor“ârl_set_screen_size()“áto“force“Readline“to“upMÞdate“its“idea“of“the“terminalŽ¡‘Gsize–¦fwhen“a“âSIGWINCH“áis“receiv²!ed.ŽŸ²}’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_echo_signal_char‘yšæ(åin²!t‘¦fsigæ)Ž¡‘.ùœáIf–;©an“application“wishes“to“install“its‘;¨oš²!wn“signal“handlers,‘ ùbut“still“ha˜v˜e“readlineŽ¡‘.ùœdispla•²!y›¨Íc“haracters–¨Îthat˜generate˜signals,‘©gcalling˜this“function˜with˜åsig‘˜åáset“to˜âSIGINTá,Ž¡‘.ùœâSIGQUITá,–¦for“âSIGTSTP“áwill“displaš²!y“the“c˜haracter“generating“that“signal.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_resize_terminal‘yšæ(åv²!oidæ)Ž¡‘.ùœáUpMÞdate–¦fReadline's“inš²!ternal“screen“size“b˜y“reading“v‘ÿdDalues“from“the“k˜ernel.ŽŸ²}’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_set_screen_size‘yšæ(åin•²!t›¦fro“ws,˜in“t˜colsæ)Ž¡‘.ùœáSet–XÅReadline's“idea›XÄof“the“terminal“size“to˜åro•²!ws›ÌGáro“ws–XÅand“åcols˜ácolumns.‘ÃüIf“either“åro²!wsŽ¡‘.ùœáor–9Øåcolumns‘­Záis“less“than›9Ùor“equal“to“0,‘^´Readline's“idea˜of“that“terminal“dimension“isŽ¡‘.ùœunc²!hanged.ަ‘!GIf–¹an“application›¸doMÞes“not“w•²!an“t–¹to“install“a˜âSIGWINCH“áhandler,‘Žbut“is˜still“in²!terested“inŽ¡‘Gthe–¦fscreen“dimensions,“Readline's“idea“of“the“screen“size“ma²!y“bMÞe“queried.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_get_screen_size‘yšæ(åin•²!t›¦f*ro“ws,˜in“t˜*colsæ)Ž¡‘.ùœáReturn–GReadline's“idea“of›Hthe“terminal's“size“in“the“v‘ÿdDariables“pMÞoin²!ted˜to“b²!y“the“argu-Ž¡‘.ùœmen²!ts.ŽŸ²}’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉrl_reset_screen_size‘yšæ(åv²!oidæ)Ž¡‘.ùœáCause–¦fReadline“to“reobtain“the“screen“size“and“recalculate“its“dimensions.ަ‘!GThe–¦ffolloš²!wing“functions“install“and“remo˜v˜e“Readline's“signal“handlers.ŽŸ²}’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_set_signals‘yšæ(åv²!oidæ)Ž¡‘.ùœáInstall–ÊíReadline's“signal“handler“for“âSIGINTá,–âSIGQUITá,›âSIGTERMá,“âSIGHUPá,˜âSIGALRMá,Ž¡‘.ùœâSIGTSTPá,–a¶âSIGTTINá,‘aµâSIGTTOUá,“and›‰x³HøŽ‘Ñtk˜eyá.‘ÂíIt“isolatesŽ¡‘'¿«the–ƒ,w²!ord“to“bMÞe“completed“and“calls‘ƒ+ârl_completion_matches()“áto“generate“a“list“ofŽ¡‘'¿«pMÞossible–¼?completions.‘iIt›¼@then“either˜lists“the“pMÞossible˜completions,‘Áµinserts˜the“pMÞossibleŽ¡‘'¿«completions,›ÞÎor‘mactually–m pMÞerforms“the“completion,˜depšMÞending‘mon“whic²!h“b˜eha²!vior“isŽ¡‘'¿«desired.Ž©9š‘-2.Ž‘'¿«The–Œin²!ternal›‹function“ârl_completion_matches()˜áuses“an˜application-supplied“ågener-Ž¡‘'¿«ator‘:yáfunction›qQto–qPgenerate“the˜list“of“pMÞossible˜matc²!hes,‘¤ and˜then“returns“the˜arra²!y“ofŽ¡‘'¿«these–¯>matc²!hes.‘øfThe“caller“should“place“the“address“of“its‘¯?generator“function“in“ârl_Ž¡‘'¿«completion_entry_functioná.ަ‘-3.Ž‘'¿«The–¿generator“function“is“called“repMÞeatedly“from‘¿ârl_completion_matches()á,‘íLreturningŽ¡‘'¿«a–înstring“eacš²!h“time.‘µõThe“argumen˜ts“to‘îothe“generator“function“are“åtext‘+náand“åstateá.‘µõåtextŽ¡‘'¿«áis–Ùâthe“partial“w²!ord“to“bMÞe“completed.‘xRåstate‘véáis“zero“the“ rst“time“the“function“is“called,Ž¡‘'¿«alloš²!wing–G2the“generator“to‘G3pMÞerform“an˜y“necessary“initialization,‘¯eand“a“pMÞositiv˜e“non-Ž¡‘'¿«zero–¡inš²!teger‘¢for“eac˜h“subsequen˜t–¢call.‘Ñ›The“generator–¡function“returns‘¢â(char‘¦f*)NULL“átoŽ¡‘'¿«inform–’þârl_completion_matches()“áthat‘’ÿthere“are“no“more“pMÞossibilities“left.‘£¦UsuallyŽ¡‘'¿«the–§^generator“function“computes“the“list“of‘§]pMÞossible“completions“when“åstate‘Deáis“zero,Ž¡‘'¿«and–jreturns›kthem“one˜at“a“time˜on“subsequen•²!t˜calls.‘«ÞEac“h˜string–jthe˜generator“functionŽ¡‘'¿«returns–Ô¨as“a“matcš²!h“m˜ust“bšMÞe“allo˜cated“with“âmalloc()á;‘ëÉReadline“frees“the“strings“whenŽ¡‘'¿«it–Žhas› nished“with˜them.‘TSuc²!h˜a“generator˜function“is˜referred“to˜as“an˜åapplication-Ž¡‘'¿«spMÞeci c–¦fcompletion“functioná.ŽŸFi’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_complete‘yšæ(åinš²!t–¦fignore,“in˜t“in˜v˜oking‘Ä>‰x³HøŽ‘Ñtk˜eyæ)Ž¡‘.ùœáComplete–¯tthe›¯sw²!ord“at“or˜bšMÞefore“p˜oinš²!t.‘ùY‘ÿeou“ha˜v˜e“supplied›¯sthe“function“that˜doMÞes“theŽ¡‘.ùœinitial–ð™simple›ðšmatc²!hing“selection“algorithm˜(see“ârl_completion_matches()á).‘¼wTheŽ¡‘.ùœdefault–¦fis“to“do“ lename“completion.ŽŸFh’–3[V‘ÿeariable]ŽŽ‘Gë@rl_compentry_func_t–LÉ*“rl_completion_entry_functionŽ¡‘.ùœáThis–ÌJis›ÌIa“pMÞoin²!ter“to˜the“generator“function“for˜ârl_completion_matches()á.‘OˆIf“theŽ¡‘.ùœv‘ÿdDalue–Ùîof›Ùïârl_completion_entry_function“áis˜âNULL“áthen˜the“default˜ lename“generatorŽ¡‘.ùœfunction,–×êârl_filename_completion_function()á,“is–gused.‘ !An“åapplication-spMÞeci cŽ¡‘.ùœcompletion–†Ëfunction›†Ìáis“a˜function“whose˜address“is˜assigned“to˜ârl_completion_entry_Ž¡‘.ùœfunction–¦fáand“whose“return“v‘ÿdDalues“are“used“to“generate“pMÞossible“completions.ŽŽŒ‹/r¨Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—47ŽŽŽ ƒ33 ý ÌÍ‘Gëe2.6.2‘d(Completion‘íMF‘þÄ£unctionsŽŽŸ³3‘GáHere–¦fis“the“complete“list“of“callable“completion“functions“presen²!t“in“Readline.Ž©\*’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_complete_internal‘yšæ(åin²!t‘¦fwhat‘Ä>‰x³HøŽ–Ñtto‘Ä>‰x³HøŽ“doæ)ޤ 33‘.ùœáComplete–fthe“w²!ord‘fat“or“bšMÞefore“p˜oinš²!t.‘­åwhat‘Ä>‰x³HøŽ–Ñtto‘Ä>‰x³HøŽ“do‘òÑása˜ys›fwhat–fto“do“with˜the“com-Ž¡‘.ùœpletion.‘(éA‘¿cv‘ÿdDalue–¿jof“`â?á'“means“list“the“pMÞossible“completions.‘(è`âTABá'“means“do“standardŽ¡‘.ùœcompletion.‘&'`â*á'–¾~means›¾insert“all˜of“the˜pMÞossible“completions.‘&'`â!á'“means˜to“displa²!y˜allŽ¡‘.ùœof–!)the“pMÞossible“completions,‘?Úif“there“is›!*more“than“one,‘?Ùas˜w²!ell“as“pMÞerforming“partialŽ¡‘.ùœcompletion.‘¾*`â@á'–GMis›GNsimilar“to“`â!á',‘ZRbut“pMÞossible˜completions“are“not“listed˜if“the“pMÞossibleŽ¡‘.ùœcompletions–¦fshare“a“common“pre x.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_complete‘yšæ(åinš²!t–¦fignore,“in˜t“in˜v˜oking‘Ä>‰x³HøŽ‘Ñtk˜eyæ)Ž¡‘.ùœáComplete–ñèthe›ñçw²!ord“at˜or“bšMÞefore“p˜oinš²!t.‘ÀaY‘ÿeou“ha˜v˜e“supplied›ñçthe“function˜that“doMÞesŽ¡‘.ùœthe–õàinitial›õßsimple“matc²!hing“selection˜algorithm“(see˜ârl_completion_matches()“áandŽ¡‘.ùœârl_completion_entry_functioná).‘×XThe–Nädefault›Nåis“to“do˜ lename“completion.‘×XThisŽ¡‘.ùœcalls–¦fârl_complete_internal()“áwith“an“argumenš²!t“depMÞending“on“åin˜v˜oking‘Ä>‰x³HøŽ‘Ñtk˜eyá.ŽŸ\)’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_possible_completions‘yšæ(åin•²!t›¦fcoun“t,˜in“t˜in“v“oking‘Ä>‰x³HøŽ‘Ñtk“eyæ)Ž¡‘.ùœáList–ÞÇthe“pMÞossible“completions.›†ÿSee“description“of“ârl_complete‘¦f()á.˜This“calls“ârl_Ž¡‘.ùœcomplete_internal()–¦fáwith“an“argumen²!t“of“`â?á'.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_insert_completions‘yšæ(åin•²!t›¦fcoun“t,˜in“t˜in“v“oking‘Ä>‰x³HøŽ‘Ñtk“eyæ)Ž¡‘.ùœáInsert– Ëthe› Êlist“of˜pMÞossible“completions˜in²!to“the˜line,‘"¤deleting˜the“partially-completedŽ¡‘.ùœw²!ord.›WâSee–Ïdescription‘Ïof“ârl_complete()á.˜This›Ïcalls“ârl_complete_internal()˜áwithŽ¡‘.ùœan–¦fargumen²!t“of“`â*á'.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉrl_completion_mode‘yšæ(årl‘Ä>‰x³HøŽ–Ñtcommand‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*cfuncæ)Ž¡‘.ùœáReturns–úûthe›úúappropriate“v‘ÿdDalue˜to“pass˜to“ârl_complete_internal()˜ádepMÞending“onŽ¡‘.ùœwhether–çxåcfunc‘‘{áwš²!as“called‘çwt˜wice“in›çwsuccession“and˜the“v‘ÿdDalues˜of“the˜âshow-all-if-Ž¡‘.ùœambiguous–OŽáand‘Oâshow-all-if-unmodified“áv‘ÿdDariables.‘ÀêApplication-spMÞeci c“completionŽ¡‘.ùœfunctions–¦fmaš²!y“use“this“function“to“presen˜t“the“same“in˜terface“as“ârl_complete()á.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ**“rl_completion_matches‘yšæ(åconst–¦fc²!har“*text,Ž¡‘DGrl‘Ä>‰x³HøŽ–ÑtcompMÞenš²!try‘Ä>‰x³HøŽ“func‘Ä>‰x³HøŽ“t‘¦f*en˜try‘Ä>‰x³HøŽ“funcæ)Ž¡‘.ùœáReturns–Œ^an‘Œ]arraš²!y“of“strings“whic˜h›Œ]is“a“list“of˜completions“for“åtextá.‘ÄIf“there˜are“noŽ¡‘.ùœcompletions,‘C;returns–#ÝâNULLá.‘VCThe›#Þ rst“en²!try“in“the˜returned“arra²!y“is˜the“substitutionŽ¡‘.ùœfor–)Gåtextá.›´(The“remaining“en²!tries“are“the“pMÞossible“completions.˜The“arra²!y“is“terminatedŽ¡‘.ùœwith–¦fa“âNULL“ápMÞoin²!ter.ŽŸÇ®‘.ùœåen²!try‘Ä>‰x³HøŽ‘Ñtfunc‘hoáis–¾la›¾kfunction“of˜t•²!w“o˜args,‘mand˜returns˜a–¾lâchar‘¦f*á.‘%íThe˜ rst“argumen²!t˜isŽ¡‘.ùœåtextá.‘××The–¤dsecond“is“a“state›¤eargumen²!t;‘#bit“is“zero˜on“the“ rst“call,‘ããand“non-zero“onŽ¡‘.ùœsubsequen•²!t›~calls.‘#åen“try‘Ä>‰x³HøŽ‘Ñtfunc‘º‚áreturns˜a‘}âNULL˜ápMÞoin“ter–}to˜the˜caller“when˜there“are˜noŽ¡‘.ùœmore‘¦fmatc²!hes.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ*“rl_filename_completion_function‘yšæ(åconst–¦fcš²!har“*text,“in˜tŽ¡‘DGstateæ)Ž¡‘.ùœáA‘‹generator–±function›°for“ lename˜completion“in˜the“general˜case.‘¬öåtext‘P±áis˜a“partial˜ le-Ž¡‘.ùœname.‘‚UThe–“ÏBash›“Îsource“is˜a“useful˜reference“for˜writing“application-spMÞeci c˜completionŽ¡‘.ùœfunctions–¦f(the“Bash“completion“functions“call“this“and“other“Readline“functions).ŽŽŒ‹0„ Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—48ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ*“rl_username_completion_function‘yšæ(åconst–¦fcš²!har“*text,“in˜tޤ 33‘DGstateæ)Ž¡‘.ùœáA‘l&completion–l4generator›l5for“usernames.‘Êxåtext‘©4ácon²!tains˜a“partial˜username“preceded˜b²!yŽ¡‘.ùœa–«ºrandom›«»c²!haracter“(usually“`â~á').‘íÚAs˜with“all“completion˜generators,‘­åstate‘HÁáis˜zero“onŽ¡‘.ùœthe–¦f rst“call“and“non-zero“for“subsequen²!t“calls.ŽŸ0¥‘Gëe2.6.3‘d(Completion‘íMV‘þÄ£ariablesŽŽŸã×’–3á[V‘ÿeariable]ŽŽ‘Gë@rl_compentry_func_t–LÉ*“rl_completion_entry_functionŽ¡‘.ùœáA‘{pMÞoin²!ter‘’to–“the“generator“function“for“ârl_completion_matches()á.‘ûdâNULL“ámeans“toŽ¡‘.ùœuse–¦fârl_filename_completion_function()á,“the“default“ lename“completer.Ž©”|’–3[V‘ÿeariable]ŽŽ‘Gë@rl_completion_func_t–LÉ*“rl_attempted_completion_functionŽ¡‘.ùœáA‘,„pMÞoinš²!ter–,§to‘,¦an“alternativ˜e›,¦function“to˜create“matc²!hes.‘pŸThe˜function“is˜called“withŽ¡‘.ùœåtextá,‘îûåstartá,‘îúand–Á åendá.‘‘qåstart‘þ áand“åend‘/ráare‘Áindices“in“ârl_line_buffer“áde ning“the“bMÞound-Ž¡‘.ùœaries›of–åtextá,‘9\whic²!h“is˜a˜c²!haracter“string.‘°nIf˜this“function˜exists˜and“returns˜âNULLá,‘9]or˜ifŽ¡‘.ùœthis– v‘ÿdDariable› žis“set˜to“âNULLá,‘Ôùthen“ârl_complete()˜áwill“call˜the“v‘ÿdDalue˜of“ârl_completion_Ž¡‘.ùœentry_function–hÚáto›hÙgenerate“matc²!hes,‘u)otherwise˜the“arra²!y“of˜strings“returned˜will“bMÞeŽ¡‘.ùœused.‘‹tIf–¯,this›¯+function“sets˜the“ârl_attempted_completion_over˜áv‘ÿdDariable“to˜a“non-zeroŽ¡‘.ùœv‘ÿdDalue,‘-óReadline–×will“not“pMÞerform“its“default‘Öcompletion“ev²!en“if“this“function“returnsŽ¡‘.ùœno‘¦fmatc²!hes.ŽŸ”}’–3[V‘ÿeariable]ŽŽ‘Gë@rl_quote_func_t–LÉ*“rl_filename_quoting_functionŽ¡‘.ùœáA‘è–pMÞoin²!ter›è¦to–è§a“function˜that“will“quote“a˜ lename“in“an˜application-spMÞeci c“fashion.Ž¡‘.ùœThis–·Kis“called“if“ lename“completion“is‘·JbMÞeing“attempted“and“one“of“the“c²!haractersŽ¡‘.ùœin–ü’ârl_filename_quote_characters›ü‘áappMÞears“in“a“completed˜ lename.‘à`The“functionŽ¡‘.ùœis–mPcalled“with‘mQåtextá,‘Ÿ åmatc•²!h‘Ä>‰x³HøŽ›Ñtt“yp•MÞeá,‘Ÿ and‘mPåquote‘Ä>‰x³HøŽ˜p“oin²!terá.‘2œThe–mPåtext‘ªPáis“the‘mQ lename“to“bMÞeŽ¡‘.ùœquoted.‘ (TThe›åmatc•²!h‘Ä>‰x³HøŽ‘Ñtt“ypMÞe‘±•áis˜either–ŽâSINGLE_MATCHá,‘pif“there˜is“only˜one“completionŽ¡‘.ùœmatc²!h,‘Ì‚or–ÄãâMULT_MATCHá.‘9SSome“functions“use“this“to“decide“whether“or‘Äânot“to“insert“aŽ¡‘.ùœclosing–çquote‘æcš²!haracter.‘{³The“åquote‘Ä>‰x³HøŽ‘ÑtpMÞoin˜ter‘Iáis“a‘æpMÞoin˜ter“to‘æan˜y“opMÞening‘æquote“c˜haracterŽ¡‘.ùœthe–¦fuser“tš²!ypMÞed.‘ÝÝSome“functions“c˜hoMÞose“to“reset“this“c˜haracter.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_dequote_func_t–LÉ*“rl_filename_dequoting_functionŽ¡‘.ùœáA‘޼pMÞoin²!ter›ŽÃto–ŽÂa“function“that˜will“remo•²!v“e–ŽÂapplication-spMÞeci c“quoting˜c²!haracters“fromŽ¡‘.ùœa–çž lename“bMÞefore“completion“is“attempted,‘÷ëso“those“cš²!haracters“do“not“in˜terfere“withŽ¡‘.ùœmatc²!hing–“áthe“text›“âagainst“names“in“the˜ lesystem.‘¦NIt“is˜called“with“åtextá,‘Ï@the“textŽ¡‘.ùœof–xthe“wš²!ord“to‘wbMÞe“dequoted,‘m|and“åquote‘Ä>‰x³HøŽ‘Ñtc˜hará,‘m|whic˜h“is‘wthe“quoting“c˜haracter“thatŽ¡‘.ùœdelimits–Ü>the“ lename›Ü?(usually“`â'á'“or“`â"á').‘fIf“åquote‘Ä>‰x³HøŽ‘Ñtc²!har‘¥gáis“zero,‘é´the˜ lename“w²!as“notŽ¡‘.ùœin–¦fan“em²!bMÞedded“string.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_linebuf_func_t–LÉ*“rl_char_is_quoted_pŽ¡‘.ùœáA‘kÿpšMÞoin²!ter–l2to“a“function“to“call“that“determines“whether“or“not“a“sp˜eci c“c²!haracterŽ¡‘.ùœin–#^the“line›#_bu er“is“quoted,‘Bœaccording“to“whatev²!er“quoting˜mec²!hanism“the“programŽ¡‘.ùœcalling–úÎReadline“uses.‘¤«The“function“is“called“with“t•²!w“o‘úÏargumen“ts:‘ˆåtextá,‘ the–úÎtext“of“theŽ¡‘.ùœline,–´­and›±Òåindexá,“the˜index–±Ñof˜the˜c²!haracter˜in˜the˜line.‘!It˜is“used˜to˜decide˜whether˜aŽ¡‘.ùœc²!haracter›ŸFfound–ŸEin“ârl_completer_word_break_characters˜áshould“bMÞe˜used˜to“breakŽ¡‘.ùœw²!ords–¦ffor“the“completer.ŽŽŒ‹1”ˆŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—49ŽŽŽ ƒ33 ý ÌÍ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_compignore_func_t–LÉ*“rl_ignore_some_completions_functionޤ 33‘.ùœáThis–†hfunction,‘¾hif“de ned,‘¾iis“called“b²!y“the“completer“when“real“ lename“completionŽ¡‘.ùœis–¸done,‘1after›¹all“the“matc²!hing˜names“ha•²!v“e˜bMÞeen–¸generated.‘+ÔIt“is˜passed“a˜âNULL“áter-Ž¡‘.ùœminated–³Zarraš²!y‘³Yof“matc˜hes.‘¸The“ rst“elemen˜t›³Y(âmatches[0]á)“is“the˜maximal“substringŽ¡‘.ùœcommon–tEto›tFall“matc²!hes.‘Í(This“function˜can“re-arrange˜the“list˜of“matc²!hes˜as“required,Ž¡‘.ùœbut–¦feacš²!h“elemen˜t“deleted“from“the“arra˜y“m˜ust“bMÞe“freed.ŽŸžB’–3[V‘ÿeariable]ŽŽ‘Gë@rl_icppfunc_t–LÉ*“rl_directory_completion_hookŽ¡‘.ùœáThis–qAfunction,›ãöif“de ned,˜is“allo•²!w“ed›q@to–qAmoMÞdify“the˜directory“pMÞortion˜of“ lenamesŽ¡‘.ùœReadline–0Ëcompletes.‘} It›0Ìcould“bMÞe“used˜to“expand“sym²!bMÞolic˜links“or“shell˜v‘ÿdDariables“inŽ¡‘.ùœpathnames.‘tIt›Øwis–Øxcalled“with˜the“address˜of“a“string˜(the“curren²!t˜directory“name)Ž¡‘.ùœas–…6an“argumenš²!t,‘¼êand“ma˜y“moMÞdify“that“string.‘zMIf“the“string“is“replaced“with“a“newŽ¡‘.ùœstring,‘ÜUthe–žYold“v‘ÿdDalue“should“bšMÞe“freed.‘ŶAn²!y‘žXmo˜di ed“directory“name“should“ha•²!v“e‘žYaŽ¡‘.ùœtrailing–2œslash.‘‚€The“mošMÞdi ed“v‘ÿdDalue‘2will“b˜e“used“as‘2part“of“the“completion,‘UªreplacingŽ¡‘.ùœthe–Í}directory›Í~pMÞortion“of˜the“pathname˜the“user˜t•²!ypMÞed.‘S#A“t˜the›Í}least,‘×Dev“en˜if‘Í~no˜otherŽ¡‘.ùœexpansion–EQis“pMÞerformed,‘m this“function“should“remo•²!v“e›EQan“y‘ERquote˜c“haracters˜from˜theŽ¡‘.ùœdirectory–¦fname,“bšMÞecause“its“result“will“b˜e“passed“directly“to“âopendir()á.ŽŸ軑.ùœThe–directory“completion›ÿhoMÞok“returns“an“in²!teger˜that“should“bMÞe“non-zero˜if“the“func-Ž¡‘.ùœtion–õmoMÞdi es“its›ödirectory“argumen²!t.‘;‹The“function“should“not˜moMÞdify“the“directoryŽ¡‘.ùœargumen²!t–¦fif“it“returns“0.Ž©žC’–3[V‘ÿeariable]ŽŽ‘Gë@rl_icppfunc_t–LÉ*“rl_directory_rewrite_hook;Ž¡‘.ùœáIf–êãnon-zero,‘dthis“is›êäthe“address“of˜a“function“to˜call“when“completing“a˜directory“name.Ž¡‘.ùœThis–2}function“tak²!es“the›2~address“of“the“directory“name“to“b•MÞe˜mo“di ed–2}as“an“argumen²!t.Ž¡‘.ùœUnlik²!e–µèârl_directory_completion_hooká,‘ùÈit“only“moMÞdi es“the“directory“name“usedŽ¡‘.ùœin–>øâopendirá,‘enot“what“is“displa•²!y“ed›>ùwhen–>øthe“pMÞossible“completions“are˜prin²!ted“or“in-Ž¡‘.ùœserted.‘³NIt–&ºis‘&¹called“bšMÞefore“rl‘Ä>‰x³HøŽ–Ñtdirectory‘Ä>‰x³HøŽ“completion‘Ä>‰x³HøŽ“ho˜ok.‘³NA•²!t‘&¹the›&ºleast,‘@Bev“en˜if‘&¹no˜otherŽ¡‘.ùœexpansion–EQis“pMÞerformed,‘m this“function“should“remo•²!v“e›EQan“y‘ERquote˜c“haracters˜from˜theŽ¡‘.ùœdirectory–¦fname,“bšMÞecause“its“result“will“b˜e“passed“directly“to“âopendir()á.ŽŸ躑.ùœThe–Œ*directory›Œ+rewrite“hoMÞok˜returns“an˜in²!teger“that˜should“bMÞe˜non-zero“if˜the“func-Ž¡‘.ùœtion–VÛmošMÞd es“its“directory“argumen²!t.‘ïaddress“of“a“function˜for“the“completer“to˜call“bMÞefore“decidingŽ¡‘.ùœwhic•²!h›ác“haracter–âto˜appMÞend˜to“a˜completed˜name.‘ÛThis˜function˜moMÞdi es“its˜ lenameŽ¡‘.ùœname–Fargumen²!t,‘mìand“the“moMÞdi ed“v‘ÿdDalue“is“passed“to“âstat()“áto“determine“the“ le'sŽ¡‘.ùœtš²!ypMÞe–Þ:and“c˜haracteristics.‘…YThis“function‘Þ;doMÞes“not“need“to“remo˜v˜e“quote“c˜haractersŽ¡‘.ùœfrom–¦fthe“ lename.ŽŸ軑.ùœThe–Þèstat›ÞéhoMÞok“returns˜an“in²!teger˜that“should“bMÞe˜non-zero“if˜the“function˜moMÞd es“itsŽ¡‘.ùœdirectory–îeargumen²!t.‘µÜThe“function›îfshould“not˜moMÞdify“the˜directory“argumen²!t˜if“itŽ¡‘.ùœreturns‘¦f0.ŽŸžB’–3[V‘ÿeariable]ŽŽ‘Gë@rl_dequote_func_t–LÉ*“rl_filename_rewrite_hookŽ¡‘.ùœáIf–Æ non-zero,‘this“is“the“address“of“a“function“called“when“reading“directory“en²!triesŽ¡‘.ùœfrom–ÉÜthe“ lesystem“for“completion“and“comparing‘ÉÝthem“to“the“partial“w²!ord“to“bMÞeŽ¡‘.ùœcompleted.‘»zThe–?>function›?=should“pMÞerform“an²!y˜necessary“application˜or“system-spMÞeci cŽŽŒ‹2¤ãŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—50ŽŽŽ ƒ33 ý ÌÍ‘.ùœcon•²!v“ersion–Êon›Ëthe“ lename,‘9$suc²!h“as˜con•²!v“erting‘ÊbMÞet“w“een˜c“haracter–Êsets˜or“con•²!v“ertingޤ 33‘.ùœfrom–„a›… lesystem“format˜to“a“c²!haracter˜input“format.‘ì8The˜function“tak•²!es˜t“w“o‘„argu-Ž¡‘.ùœmen²!ts:‘ÙRåfnameá,‘Cthe–$! lename›$ to“bMÞe˜con•²!v“erted,–Cand›$!åfnlená,“its˜length‘$ in˜b•²!ytes.‘W It˜m“ustŽ¡‘.ùœeither–ÈŠreturn“its“ rst“argumenš²!t“(if“no‘È‹con˜v˜ersion“tak˜es“place)“or“the“con˜v˜erted“ lenameŽ¡‘.ùœin–dÛnewly-alloMÞcated“memory‘ÿe.‘ÈThe›dÚcon•²!v“erted–dÛform“is“used“to“compare˜against“the“w²!ordŽ¡‘.ùœto›BÔbMÞe‘BÕcompleted,–V¾and,“if˜it‘BÕmatc²!hes,“is˜added–BÕto˜the˜list“of˜matc²!hes.‘¼¬Readline“will˜freeŽ¡‘.ùœthe–¦falloMÞcated“string.Ž©s4’–3[V‘ÿeariable]ŽŽ‘Gë@rl_compdisp_func_t–LÉ*“rl_completion_display_matches_hookŽ¡‘.ùœáIf–£xnon-zero,‘×Athen“this“is“the“address“of“a“function“to“call“when“completing“a“wš²!ord“w˜ouldŽ¡‘.ùœnormally–¨¶displa²!y›¨µthe“list“of˜pMÞossible“matc²!hes.‘‰MThis“function“is˜called“in“lieu˜of“ReadlineŽ¡‘.ùœdisplaš²!ying–s7the“list.‘DPIt‘s8tak˜es“three“argumen˜ts:‘w(âchar‘¦f**åmatc˜hesá,‘¦kâint“ån˜um‘Ä>‰x³HøŽ‘Ñtmatc˜hesá,Ž¡‘.ùœâint–-åmax‘Ä>‰x³HøŽ‘Ñtlengthá)›-where“åmatc²!hes‘ ’áis“the˜arra²!y“of˜matcš²!hing“strings,‘EUån˜um‘Ä>‰x³HøŽ‘Ñtmatc˜hes‘ ’áis“theŽ¡‘.ùœn•²!um“bMÞer–}wof›}vstrings“in“that˜arra²!y‘ÿe,‘…§and“åmax‘Ä>‰x³HøŽ‘Ñtlength˜áis“the“length˜of“the“longest˜string“inŽ¡‘.ùœthat–_@arraš²!y‘ÿe.‘Æ&Readline“pro˜vides“a“con˜v˜enience“function,–m{ârl_display_match_listá,“thatŽ¡‘.ùœtakš²!es–-®care“of“doing“the“displa˜y“to“Readline's‘-­output“stream.‘sµThat“function“ma˜y“bMÞeŽ¡‘.ùœcalled–¦ffrom“this“hoMÞok.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_basic_word_break_charactersŽ¡‘.ùœáThe–Oobasic“list“of“cš²!haracters“that“signal‘Ona“break“bMÞet˜w˜een“w˜ords“for“the“completerŽ¡‘.ùœroutine.‘M¼The–v[default“v›ÿdDalue“of“this‘v\v˜ariable“is“the“cš²!haracters“whic˜h“break“w˜ords“forŽ¡‘.ùœcompletion–¦fin“Bash:‘ÝÝâ"“\t\n\"\\'`@$><=;|&{("á.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_basic_quote_charactersŽ¡‘.ùœáA–¦flist“of“quote“cš²!haracters“whic˜h“can“cause“a“w˜ord“break.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_completer_word_break_charactersŽ¡‘.ùœáThe–Ïlist“of“cš²!haracters“that“signal‘Ï~a“break“bMÞet˜w˜een“w˜ords“for“ârl_complete_Ž¡‘.ùœinternal()á.‘ÝÝThe–¦fdefault“list“is“the“v‘ÿdDalue“of“ârl_basic_word_break_charactersá.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_cpvfunc_t–LÉ*“rl_completion_word_break_hookŽ¡‘.ùœáIf–Èënon-zero,‘ÑŒthis›Èêis“the“address˜of“a“function“to˜call“when“Readline“is˜deciding“whereŽ¡‘.ùœto–¡separate‘¢wš²!ords“for“w˜ord“completion.‘FIt“should‘¢return“a“c˜haracter“string‘¢lik˜e“ârl_Ž¡‘.ùœcompleter_word_break_characters–ôëáto“bšMÞe“used“to“p˜erform“the“curren²!t“completion.Ž¡‘.ùœThe–øMfunction“ma•²!y›øLc“hoMÞose–øMto“set“ârl_completer_word_break_characters˜áitself.‘£ÕIf“theŽ¡‘.ùœfunction–¦freturns“âNULLá,“ârl_completer_word_break_characters“áis“used.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_completer_quote_charactersŽ¡‘.ùœáA‘ Clist– ^of“c•²!haracters› ]whic“h– ^can“bMÞe˜used“to“quote˜a“substring“of˜the“line.‘ÄCompletionŽ¡‘.ùœoMÞccurs–&­on›&¬the“en²!tire“substring,‘@8and“within“the˜substring“ârl_completer_word_break_Ž¡‘.ùœcharacters–8\áare›8[treated“as“an²!y“other˜c²!haracter,‘\Ùunless“they“also“appMÞear˜within“thisŽ¡‘.ùœlist.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_filename_quote_charactersŽ¡‘.ùœáA‘ ]list› vof– wc²!haracters“that“cause˜a“ lename“to“bMÞe˜quoted“b²!y“the“completer˜when“theyŽ¡‘.ùœappMÞear–¦fin“a“completed“ lename.‘ÝÝThe“default“is“the“n²!ull“string.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@const–LÉchar“*“rl_special_prefixesŽ¡‘.ùœáThe–S­list›S¬of“c²!haracters“that“are˜wš²!ord“break“c˜haracters,‘d8but›S¬should“bMÞe“left“in˜åtext‘­áwhenŽ¡‘.ùœit–ô¡is“passed“to“the›ô¢completion“function.‘¢›Programs“can“use˜this“to“help“determine“whatŽŽŒ‹3µ¯Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—51ŽŽŽ ƒ33 ý ÌÍ‘.ùœkind–Uíof›Uîcompleting“to˜do.‘à F‘ÿeor“instance,‘fBash“sets“this˜v‘ÿdDariable“to“â"á$@â"˜áso“that˜it“canޤ 33‘.ùœcomplete–¦fshell“v‘ÿdDariables“and“hostnames.Ž©fg’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_query_itemsŽ¡‘.ùœáUp–YAto“this“manš²!y“items“will“bMÞe“displa˜y˜ed“in“respšMÞonse“to“a“p˜ossible-completions“call.Ž¡‘.ùœAfter–Vthat,‘f&readline“asks›Vthe“user˜if“she˜is“sure“she˜w•²!an“ts–Vto˜see“them˜all.‘ÃThe“defaultŽ¡‘.ùœv›ÿdDalue–¦fis“100.‘ÝÝA“negativ²!e“v˜alue“indicates“that“Readline“should“nev²!er“ask“the“user.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_append_characterŽ¡‘.ùœáWhen–ýºa“single‘ý»completion“alternativš²!e“matc˜hes“at›ý»the“end“of“the˜command“line,‘thisŽ¡‘.ùœcš²!haracter–’?is“appMÞended“to“the“inserted“completion“text.‘ÑThe“default“is“a“space“c˜haracterŽ¡‘.ùœ(`‘¦f').‘ F•Setting–sùthis“to“the‘sønš²!ull“c˜haracter“(`â\0á')“prev˜en˜ts‘søan˜ything“bšMÞeing“app˜endedŽ¡‘.ùœautomatically‘ÿe.‘„•This–ˆ£can“bšMÞe“c²!hanged“in“application-sp˜eci c‘ˆ¤completion“functions“toŽ¡‘.ùœpro²!vide–Æùthe›Æú\most“sensible˜wš²!ord“separator“c˜haracter"›Æúaccording“to˜an“application-Ž¡‘.ùœspšMÞeci c–¦fcommand“line“syn²!tax“sp˜eci cation.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_suppress_appendŽ¡‘.ùœáIf›þðnon-zero,‘årl‘Ä>‰x³HøŽ–Ñtcompletion‘Ä>‰x³HøŽ“appMÞend‘Ä>‰x³HøŽ“c²!haracter‘Èáis˜not–þñappMÞended˜to“matc²!hes˜at“the˜endŽ¡‘.ùœof–Ošthe“command‘O™line,‘`öas“describšMÞed“ab˜o•²!v“e.‘ÀîIt–Ošis“set“to“0‘O™b˜efore“an²!y“application-sp˜eci cŽ¡‘.ùœcompletion–¦ffunction“is“called,“and“maš²!y“only“bMÞe“c˜hanged“within“suc˜h“a“function.ŽŸfh’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_quote_characterŽ¡‘.ùœáWhen–X;Readline“is›X:completing“quoted“text,‘„°as˜delimited“b²!y“one“of˜the“c²!haracters“inŽ¡‘.ùœårl‘Ä>‰x³HøŽ–Ñtcompleter‘Ä>‰x³HøŽ“quote‘Ä>‰x³HøŽ“c²!haractersá,‘òCit–¯äsets›¯ãthis“v‘ÿdDariable“to“the˜quoting“c²!haracter“found.Ž¡‘.ùœThis–¦fis“set“bšMÞefore“an²!y“application-sp˜eci c“completion“function“is“called.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_suppress_quoteŽ¡‘.ùœáIf–àDnon-zero,‘î»Readline›àCdoMÞes“not˜appMÞend“a“matc²!hing˜quote“c²!haracter˜when“pMÞerformingŽ¡‘.ùœcompletion–ÓGon›ÓFa“quoted˜string.‘—~It˜is“set˜to“0˜bMÞefore“an²!y˜application-spMÞeci c“completionŽ¡‘.ùœfunction–¦fis“called,“and“maš²!y“only“bMÞe“c˜hanged“within“suc˜h“a“function.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_found_quoteŽ¡‘.ùœáWhen–ÌúReadline“is“completing›Ìûquoted“text,‘ÖŸit“sets“this“v‘ÿdDariable“to˜a“non-zero“v‘ÿdDalue“ifŽ¡‘.ùœthe–‡¿wš²!ord‘‡¾bMÞeing“completed“con˜tains‘‡¾or“is“delimited“b˜y‘‡¾an˜y“quoting“c˜haracters,‘ÁincludingŽ¡‘.ùœbacš²!kslashes.‘ÝÝThis–¦fis“set“bMÞefore“an˜y“application-spMÞeci c“completion“function“is“called.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_mark_symlink_dirsŽ¡‘.ùœáIf–ѧnon-zero,‘Üwa“slash“will“bšMÞe“app˜ended“to“completed“ lenames“that“are“sym²!b˜olic“linksŽ¡‘.ùœto–ærdirectory›æsnames,‘ Ösub‘›»ject“to“the˜v‘ÿdDalue“of“the“user-settable˜åmark-directories‘Yôáv‘ÿdDariable.Ž¡‘.ùœThis–Imv‘ÿdDariable“exists“so“that“application-spMÞeci c“completion“functions“can“o•²!v“erride‘ImtheŽ¡‘.ùœuser's–global›preference“(set“via“the˜åmark-symlink²!ed-directories‘Š’áReadline“v‘ÿdDariable)Ž¡‘.ùœif–„appropriate.‘võThis“v‘ÿdDariable“is“set“to“the“user's‘„preference“bMÞefore“an²!y“application-Ž¡‘.ùœspMÞeci c–Îcompletion›Îfunction“is˜called,‘×ìso“unless“that˜function“moMÞdi es˜the“v‘ÿdDalue,‘×ìtheŽ¡‘.ùœuser's–¦fpreferences“are“honored.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_ignore_completion_duplicatesŽ¡‘.ùœáIf–¦fnon-zero,“then“duplicates“in“the“matcš²!hes“are“remo˜v˜ed.‘ÝÝThe“default“is“1.ŽŽŒ‹4ÆŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—52ŽŽŽ ƒ33 ý ÌÍ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_filename_completion_desiredޤ 33‘.ùœáNon-zero–Ñmeans“that›Ñ the“results“of“the“matc²!hes˜are“to“bMÞe“treated“as“ lenames.‘]ÄThisŽ¡‘.ùœis–Ì'äalways‘²?ázero›Ì(when“completion“is“attempted,‘—and“can“only“bMÞe˜c²!hanged“within“anŽ¡‘.ùœapplication-spMÞeci c›¼õcompletion–¼ôfunction.‘!‰If“it˜is“set˜to“a˜non-zero“v‘ÿdDalue˜bš²!y“suc˜h‘¼õaŽ¡‘.ùœfunction,‘Þdirectory–¬ names“ha•²!v“e›¬ a–¬ slash“appMÞended˜and“Readline“attempts“to˜quote“com-Ž¡‘.ùœpleted–6 lenames“if“they‘6!conš²!tain“an˜y“c˜haracters“in“ârl_filename_quote_charactersŽ¡‘.ùœáand–¦fârl_filename_quoting_desired“áis“set“to“a“non-zero“v‘ÿdDalue.Ž©33’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_filename_quoting_desiredŽ¡‘.ùœáNon-zero–^nmeans“that“the›^mresults“of“the“matc²!hes“are“to“bMÞe˜quoted“using“double“quotesŽ¡‘.ùœ(or–8an“application-spMÞeci c“quoting“mecš²!hanism)‘7if“the“completed“ lename“con˜tainsŽ¡‘.ùœan•²!y›QJc“haracters–QIin˜ârl_filename_quote_charsá.‘Á~This˜is“äalways‘7bánon-zero“when˜comple-Ž¡‘.ùœtion–Q is›Qattempted,‘band“can“only˜bMÞe“c²!hanged˜within“an˜application-spMÞeci c“completionŽ¡‘.ùœfunction.‘} The–…°quoting›…¯is“e ected˜via“a˜call˜to“the˜function“pMÞoin²!ted˜to“b²!y˜ârl_filename_Ž¡‘.ùœquoting_functioná.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_attempted_completion_overŽ¡‘.ùœáIf– Oan“application-spMÞeci c“completion‘ Ofunction“assigned“to“ârl_attempted_Ž¡‘.ùœcompletion_function–básets›bŒthis“v‘ÿdDariable“to˜a“non-zero“v‘ÿdDalue,‘•Readline˜will“notŽ¡‘.ùœpMÞerform–Žºits“default“ lename“completion‘޹ev²!en“if“the“application's“completion“functionŽ¡‘.ùœreturns–¦fno“matcš²!hes.‘ÝÝIt“should“bMÞe“set“only“b˜y“an“application's“completion“function.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_sort_completion_matchesŽ¡‘.ùœáIf–”Ôan›”Óapplication“sets˜this“v‘ÿdDariable˜to“0,‘˜WReadline“will˜not“sort˜the“list˜of“completionsŽ¡‘.ùœ(whicš²!h–òÍimplies“that‘òÎit“cannot“remo˜v˜e“an˜y›òÎduplicate“completions).‘¡ÿThe˜default“v‘ÿdDalue“isŽ¡‘.ùœ1,›ÅÖwhic²!h–¿Œmeans“that“Readline“will“sort“the“completions“and,˜depMÞending“on“the“v‘ÿdDalueŽ¡‘.ùœof–¦fârl_ignore_completion_duplicatesá,“will“attempt“to“remo•²!v“e–¦fduplicate“matc²!hes.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_typeŽ¡‘.ùœáSet–61to›62a“c²!haracter˜describing“the˜t²!ypMÞe“of“completion˜Readline“is˜curren²!tly“attempt-Ž¡‘.ùœing;‘.qsee–the“description‘of“ârl_complete_internal()“á(see“Section“2.6.2“[CompletionŽ¡‘.ùœF‘ÿeunctions],‘˜%page–gÌ47)“for“the“list“of“c²!haracters.‘"This“is“set“to“the“appropriate“v‘ÿdDalueŽ¡‘.ùœb•MÞefore›Í¡an²!y‘Í application-sp“eci c˜completion˜function˜is–Í called,‘×palloš²!wing“suc˜h‘Í¡functionsŽ¡‘.ùœto–¦fpresenš²!t“the“same“in˜terface“as“ârl_complete()á.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_completion_invoking_keyŽ¡‘.ùœáSet–äRto›äQthe“ nal˜c²!haracter“in˜the“k²!ey“sequence˜that“in•²!v“ok“ed˜one–äRof˜the“completionŽ¡‘.ùœfunctions–that“call“ârl_complete_internal()á.‘o(This“is“set“to“the“appropriate“v‘ÿdDalueŽ¡‘.ùœbšMÞefore–¦fan²!y“application-sp˜eci c“completion“function“is“called.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉrl_inhibit_completionŽ¡‘.ùœáIf–d`this›dav‘ÿdDariable“is“non-zero,‘q•completion“is˜inhibited.‘ÇÛThe“completion“c²!haracter˜will“bMÞeŽ¡‘.ùœinserted–¦fas“an²!y“other“bMÞound“to“âself-insertá.ŽŸ‘Gëe2.6.4‘d(A–íMShort“Completion“ExampleŽŽŸ³3‘GáHere–}ais“a›}`small“application“demonstrating“the˜use“of“the“GNU‘}VReadline“library‘ÿe.‘Ð0It“is“calledŽ¡‘Gâfilemaná,‘ 0and–ÃÕthe“source‘ÃÔcoMÞde“resides“in“âexamples/fileman.cá.‘6)This“sample“applicationŽ¡‘Gpro²!vides–#þcompletion“of‘#ÿcommand“names,›>line“editing“features,˜and“access“to‘#ÿthe“history“list.ŽŽŒ‹5ÕqŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—53ŽŽŽ ƒ33 ý ÌÍ‘.ùœÉ/*–¹–fileman.c“--“A“tiny“application“which“demonstrates“how“to“use“theޤ €‘=&^GNU–¹–Readline“library.‘ s,This“application“interactively“allows“usersŽ¡‘=&^to–¹–manipulate“files“and“their“modes.“*/Ž©‘.ùœ#ifdef‘¹–HAVE_CONFIG_HŽ¡‘.ùœ#‘ s,include‘¹–Ž¡‘.ùœ#endifަ‘.ùœ#include‘¹–Ž¡‘.ùœ#ifdef‘¹–HAVE_SYS_FILE_HŽ¡‘.ùœ#‘ s,include‘¹–Ž¡‘.ùœ#endifŽ¡‘.ùœ#include‘¹–ަ‘.ùœ#ifdef‘¹–HAVE_UNISTD_HŽ¡‘.ùœ#‘ s,include‘¹–Ž¡‘.ùœ#endifަ‘.ùœ#include‘¹–Ž¡‘.ùœ#include‘¹–Ž¡‘.ùœ#include‘¹–ަ‘.ùœ#if–¹–defined“(HAVE_STRING_H)Ž¡‘.ùœ#‘ s,include‘¹–Ž¡‘.ùœ#else–¹–/*“!HAVE_STRING_H“*/Ž¡‘.ùœ#‘ s,include‘¹–Ž¡‘.ùœ#endif–¹–/*“!HAVE_STRING_H“*/ަ‘.ùœ#ifdef‘¹–HAVE_STDLIB_HŽ¡‘.ùœ#‘ s,include‘¹–Ž¡‘.ùœ#endifަ‘.ùœ#include‘¹–ަ‘.ùœ#include‘¹–Ž¡‘.ùœ#include‘¹–ަ‘.ùœextern–¹–char“*xmalloc“PARAMS((size_t));ަ‘.ùœ/*–¹–The“names“of“functions“that“actually“do“the“manipulation.“*/Ž¡‘.ùœint–¹–com_list“PARAMS((char“*));Ž¡‘.ùœint–¹–com_view“PARAMS((char“*));Ž¡‘.ùœint–¹–com_rename“PARAMS((char“*));Ž¡‘.ùœint–¹–com_stat“PARAMS((char“*));Ž¡‘.ùœint–¹–com_pwd“PARAMS((char“*));Ž¡‘.ùœint–¹–com_delete“PARAMS((char“*));Ž¡‘.ùœint–¹–com_help“PARAMS((char“*));Ž¡‘.ùœint–¹–com_cd“PARAMS((char“*));Ž¡‘.ùœint–¹–com_quit“PARAMS((char“*));ަ‘.ùœ/*–¹–A“structure“which“contains“information“on“the“commands“this“programŽ¡‘=&^can–¹–understand.“*/ަ‘.ùœtypedef–¹–struct“{Ž¡‘8lÈchar–¹–*name;“/*“User“printable“name“of“the“function.“*/Ž¡‘8lÈrl_icpfunc_t–¹–*func;“/*“Function“to“call“to“do“the“job.“*/Ž¡‘8lÈchar–¹–*doc;“/*“Documentation“for“this“function.‘ s,*/Ž¡‘.ùœ}‘¹–COMMAND;ŽŽŒ‹6äÀŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—54ŽŽŽ ƒ33 ý«LÍ‘.ùœÉCOMMAND–¹–commands[]“=“{ޤ €‘8lÈ{–¹–"cd",“com_cd,“"Change“to“directory“DIR"“},Ž¡‘8lÈ{–¹–"delete",“com_delete,“"Delete“FILE"“},Ž¡‘8lÈ{–¹–"help",“com_help,“"Display“this“text"“},Ž¡‘8lÈ{–¹–"?",“com_help,“"Synonym“for“`help'"“},Ž¡‘8lÈ{–¹–"list",“com_list,“"List“files“in“DIR"“},Ž¡‘8lÈ{–¹–"ls",“com_list,“"Synonym“for“`list'"“},Ž¡‘8lÈ{–¹–"pwd",“com_pwd,“"Print“the“current“working“directory"“},Ž¡‘8lÈ{–¹–"quit",“com_quit,“"Quit“using“Fileman"“},Ž¡‘8lÈ{–¹–"rename",“com_rename,“"Rename“FILE“to“NEWNAME"“},Ž¡‘8lÈ{–¹–"stat",“com_stat,“"Print“out“statistics“on“FILE"“},Ž¡‘8lÈ{–¹–"view",“com_view,“"View“the“contents“of“FILE"“},Ž¡‘8lÈ{–¹–(char“*)NULL,“(rl_icpfunc_t“*)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)Ž¡‘F™Šchar‘¹–*s;Ž¡‘.ùœ{Ž¡‘8lÈchar‘¹–*r;ަ‘8lÈr–¹–=“xmalloc“(strlen“(s)“+“1);Ž¡‘8lÈstrcpy–¹–(r,“s);Ž¡‘8lÈreturn‘¹–(r);Ž¡‘.ùœ}ަ‘.ùœmain–¹–(argc,“argv)Ž¡‘F™Šint‘¹–argc;Ž¡‘F™Šchar‘¹–**argv;Ž¡‘.ùœ{Ž¡‘8lÈchar–¹–*line,“*s;ަ‘8lÈprogname–¹–=“argv[0];ަ‘8lÈinitialize_readline–¹–();“/*“Bind“our“completer.“*/ަ‘8lÈ/*–¹–Loop“reading“and“executing“lines“until“the“user“quits.“*/Ž¡‘8lÈfor–¹–(“;“done“==“0;“)Ž¡‘Aßô{Ž¡‘KS line–¹–=“readline“("FileMan:“");ަ‘KS if‘¹–(!line)Ž¡‘TÆLbreak;ަ‘KS /*–¹–Remove“leading“and“trailing“whitespace“from“the“line.Ž¡‘YâThen,–¹–if“there“is“anything“left,“add“it“to“the“history“listŽ¡‘Yâand–¹–execute“it.“*/ŽŽŒ‹7ì0Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—55ŽŽŽ ƒ33 ý ÌÍ‘KS És–¹–=“stripwhite“(line);Ž©‘KS if‘¹–(*s)ޤ €‘TÆL{Ž¡‘^9xadd_history‘¹–(s);Ž¡‘^9xexecute_line‘¹–(s);Ž¡‘TÆL}ަ‘KS free‘¹–(line);Ž¡‘Aßô}Ž¡‘8lÈexit‘¹–(0);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Execute“a“command“line.“*/Ž¡‘.ùœintŽ¡‘.ùœexecute_line‘¹–(line)Ž¡‘F™Šchar‘¹–*line;Ž¡‘.ùœ{Ž¡‘8lÈregister–¹–int“i;Ž¡‘8lÈCOMMAND‘¹–*command;Ž¡‘8lÈchar‘¹–*word;ަ‘8lÈ/*–¹–Isolate“the“command“word.“*/Ž¡‘8lÈi–¹–=“0;Ž¡‘8lÈwhile–¹–(line[i]“&&“whitespace“(line[i]))Ž¡‘Aßôi++;Ž¡‘8lÈword–¹–=“line“+“i;ަ‘8lÈwhile–¹–(line[i]“&&“!whitespace“(line[i]))Ž¡‘Aßôi++;ަ‘8lÈif‘¹–(line[i])Ž¡‘Aßôline[i++]–¹–=“'\0';ަ‘8lÈcommand–¹–=“find_command“(word);ަ‘8lÈif‘¹–(!command)Ž¡‘Aßô{Ž¡‘KS fprintf–¹–(stderr,“"%s:“No“such“command“for“FileMan.\n",“word);Ž¡‘KS return‘¹–(-1);Ž¡‘Aßô}ަ‘8lÈ/*–¹–Get“argument“to“command,“if“any.“*/Ž¡‘8lÈwhile–¹–(whitespace“(line[i]))Ž¡‘Aßôi++;ަ‘8lÈword–¹–=“line“+“i;ަ‘8lÈ/*–¹–Call“the“function.“*/Ž¡‘8lÈreturn–¹–((*(command->func))“(word));Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Look“up“NAME“as“the“name“of“a“command,“and“return“a“pointer“to“thatŽ¡‘=&^command.‘ s,Return–¹–a“NULL“pointer“if“NAME“isn't“a“command“name.“*/Ž¡‘.ùœCOMMAND‘¹–*Ž¡‘.ùœfind_command‘¹–(name)Ž¡‘F™Šchar‘¹–*name;Ž¡‘.ùœ{ŽŽŒ‹8óiŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—56ŽŽŽ ƒ33 ý ÌÍ‘8lÈÉregister–¹–int“i;Ž©‘8lÈfor–¹–(i“=“0;“commands[i].name;“i++)ޤ €‘Aßôif–¹–(strcmp“(name,“commands[i].name)“==“0)Ž¡‘KS return‘¹–(&commands[i]);ަ‘8lÈreturn–¹–((COMMAND“*)NULL);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Strip“whitespace“from“the“start“and“end“of“STRING.‘ s,Return“a“pointerŽ¡‘=&^into–¹–STRING.“*/Ž¡‘.ùœchar‘¹–*Ž¡‘.ùœstripwhite‘¹–(string)Ž¡‘F™Šchar‘¹–*string;Ž¡‘.ùœ{Ž¡‘8lÈregister–¹–char“*s,“*t;ަ‘8lÈfor–¹–(s“=“string;“whitespace“(*s);“s++)Ž¡‘Aßô;ަ‘8lÈif–¹–(*s“==“0)Ž¡‘Aßôreturn‘¹–(s);ަ‘8lÈt–¹–=“s“+“strlen“(s)“-“1;Ž¡‘8lÈwhile–¹–(t“>“s“&&“whitespace“(*t))Ž¡‘Aßôt--;Ž¡‘8lÈ*++t–¹–=“'\0';ަ‘8lÈreturn‘¹–s;Ž¡‘.ùœ}ަ‘.ùœ/*–¹–****************************************************************“*/Ž¡‘.ùœ/*’7ج*/Ž¡‘.ùœ/*‘U ŒInterface–¹–to“Readline“Completion‘K™`*/Ž¡‘.ùœ/*’7ج*/Ž¡‘.ùœ/*–¹–****************************************************************“*/ަ‘.ùœchar–¹–*command_generator“PARAMS((const“char“*,“int));Ž¡‘.ùœchar–¹–**fileman_completion“PARAMS((const“char“*,“int,“int));ަ‘.ùœ/*–¹–Tell“the“GNU“Readline“library“how“to“complete.‘ s,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‘¹–()Ž¡‘.ùœ{Ž¡‘8lÈ/*–¹–Allow“conditional“parsing“of“the“~/.inputrc“file.“*/Ž¡‘8lÈrl_readline_name–¹–=“"FileMan";ަ‘8lÈ/*–¹–Tell“the“completer“that“we“want“a“crack“first.“*/Ž¡‘8lÈrl_attempted_completion_function–¹–=“fileman_completion;Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Attempt“to“complete“on“the“contents“of“TEXT.‘ s,START“and“END“bound“theŽ¡‘=&^region–¹–of“rl_line_buffer“that“contains“the“word“to“complete.‘ s,TEXT“isŽ¡‘=&^the–¹–word“to“complete.‘ s,We“can“use“the“entire“contents“of“rl_line_bufferŽ¡‘=&^in–¹–case“we“want“to“do“some“simple“parsing.‘ s,Return“the“array“of“matches,Ž¡‘=&^or–¹–NULL“if“there“aren't“any.“*/Ž¡‘.ùœchar‘¹–**ŽŽŒ‹9ø´Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—57ŽŽŽ ƒ33 ý ÌÍ‘.ùœÉfileman_completion–¹–(text,“start,“end)ޤ €‘F™Šconst–¹–char“*text;Ž¡‘F™Šint–¹–start,“end;Ž¡‘.ùœ{Ž¡‘8lÈchar‘¹–**matches;ޤ‘8lÈmatches–¹–=“(char“**)NULL;Ž¡‘8lÈ/*–¹–If“this“word“is“at“the“start“of“the“line,“then“it“is“a“commandޤ €‘F™Što–¹–complete.‘ s,Otherwise“it“is“the“name“of“a“file“in“the“currentŽ¡‘F™Šdirectory.‘¹–*/Ž¡‘8lÈif–¹–(start“==“0)Ž¡‘Aßômatches–¹–=“rl_completion_matches“(text,“command_generator);Ž©‘8lÈreturn‘¹–(matches);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Generator“function“for“command“completion.‘ s,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)Ž¡‘F™Šconst–¹–char“*text;Ž¡‘F™Šint‘¹–state;Ž¡‘.ùœ{Ž¡‘8lÈstatic–¹–int“list_index,“len;Ž¡‘8lÈchar‘¹–*name;ަ‘8lÈ/*–¹–If“this“is“a“new“word“to“complete,“initialize“now.‘ s,This“includesŽ¡‘F™Šsaving–¹–the“length“of“TEXT“for“efficiency,“and“initializing“the“indexŽ¡‘F™Švariable–¹–to“0.“*/Ž¡‘8lÈif‘¹–(!state)Ž¡‘Aßô{Ž¡‘KS list_index–¹–=“0;Ž¡‘KS len–¹–=“strlen“(text);Ž¡‘Aßô}ަ‘8lÈ/*–¹–Return“the“next“name“which“partially“matches“from“the“command“list.“*/Ž¡‘8lÈwhile–¹–(name“=“commands[list_index].name)Ž¡‘Aßô{Ž¡‘KS list_index++;ަ‘KS if–¹–(strncmp“(name,“text,“len)“==“0)Ž¡‘TÆLreturn‘¹–(dupstr(name));Ž¡‘Aßô}ަ‘8lÈ/*–¹–If“no“names“matched,“then“return“NULL.“*/Ž¡‘8lÈreturn–¹–((char“*)NULL);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–****************************************************************“*/Ž¡‘.ùœ/*’7ج*/Ž¡‘.ùœ/*‘l¬zFileMan‘¹–Commands‘’Ò*/Ž¡‘.ùœ/*’7ج*/Ž¡‘.ùœ/*–¹–****************************************************************“*/ަ‘.ùœ/*–¹–String“to“pass“to“system“().‘ s,This“is“for“the“LIST,“VIEW“and“RENAMEŽ¡‘=&^commands.‘¹–*/ŽŽŒ‹:Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—58ŽŽŽ ƒ33 ý ÌÍ‘.ùœÉstatic–¹–char“syscom[1024];Ž©‘.ùœ/*–¹–List“the“file(s)“named“in“arg.“*/ޤ €‘.ùœcom_list‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈif‘¹–(!arg)Ž¡‘Aßôarg–¹–=“"";ަ‘8lÈsprintf–¹–(syscom,“"ls“-FClg“%s",“arg);Ž¡‘8lÈreturn–¹–(system“(syscom));Ž¡‘.ùœ}ަ‘.ùœcom_view‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈif–¹–(!valid_argument“("view",“arg))Ž¡‘Aßôreturn‘¹–1;ަ‘.ùœ#if–¹–defined“(__MSDOS__)Ž¡‘8lÈ/*–¹–more.com“doesn't“grok“slashes“in“pathnames“*/Ž¡‘8lÈsprintf–¹–(syscom,“"less“%s",“arg);Ž¡‘.ùœ#elseŽ¡‘8lÈsprintf–¹–(syscom,“"more“%s",“arg);Ž¡‘.ùœ#endifŽ¡‘8lÈreturn–¹–(system“(syscom));Ž¡‘.ùœ}ަ‘.ùœcom_rename‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈtoo_dangerous‘¹–("rename");Ž¡‘8lÈreturn‘¹–(1);Ž¡‘.ùœ}ަ‘.ùœcom_stat‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈstruct–¹–stat“finfo;ަ‘8lÈif–¹–(!valid_argument“("stat",“arg))Ž¡‘Aßôreturn‘¹–(1);ަ‘8lÈif–¹–(stat“(arg,“&finfo)“==“-1)Ž¡‘Aßô{Ž¡‘KS perror‘¹–(arg);Ž¡‘KS return‘¹–(1);Ž¡‘Aßô}ަ‘8lÈprintf–¹–("Statistics“for“`%s':\n",“arg);ަ‘8lÈprintf–¹–("%s“has“%d“link%s,“and“is“%d“byte%s“in“length.\n",Ž¡‘8lÈarg,Ž¡‘^9xfinfo.st_nlink,Ž¡‘^9x(finfo.st_nlink–¹–==“1)“?“""“:“"s",Ž¡‘^9xfinfo.st_size,Ž¡‘^9x(finfo.st_size–¹–==“1)“?“""“:“"s");Ž¡‘8lÈprintf–¹–("Inode“Last“Change“at:“%s",“ctime“(&finfo.st_ctime));ŽŽŒ‹;Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—59ŽŽŽ ƒ33 ý ÌÍ‘8lÈÉprintf–¹–("‘Y„Last“access“at:“%s",“ctime“(&finfo.st_atime));ޤ €‘8lÈprintf–¹–("‘æXLast“modified“at:“%s",“ctime“(&finfo.st_mtime));Ž¡‘8lÈreturn‘¹–(0);Ž¡‘.ùœ}Ž©‘.ùœcom_delete‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈtoo_dangerous‘¹–("delete");Ž¡‘8lÈreturn‘¹–(1);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Print“out“help“for“ARG,“or“for“all“of“the“commands“if“ARG“isŽ¡‘=&^not–¹–present.“*/Ž¡‘.ùœcom_help‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈregister–¹–int“i;Ž¡‘8lÈint–¹–printed“=“0;ަ‘8lÈfor–¹–(i“=“0;“commands[i].name;“i++)Ž¡‘Aßô{Ž¡‘KS if–¹–(!*arg“||“(strcmp“(arg,“commands[i].name)“==“0))Ž¡‘TÆL{Ž¡‘^9xprintf–¹–("%s\t\t%s.\n",“commands[i].name,“commands[i].doc);Ž¡‘^9xprinted++;Ž¡‘TÆL}Ž¡‘Aßô}ަ‘8lÈif‘¹–(!printed)Ž¡‘Aßô{Ž¡‘KS printf–¹–("No“commands“match“`%s'.‘ s,Possibilties“are:\n",“arg);ަ‘KS for–¹–(i“=“0;“commands[i].name;“i++)Ž¡‘TÆL{Ž¡‘^9x/*–¹–Print“in“six“columns.“*/Ž¡‘^9xif–¹–(printed“==“6)Ž¡‘g¬¤{Ž¡‘qÐprinted–¹–=“0;Ž¡‘qÐprintf‘¹–("\n");Ž¡‘g¬¤}ަ‘^9xprintf–¹–("%s\t",“commands[i].name);Ž¡‘^9xprinted++;Ž¡‘TÆL}ަ‘KS if‘¹–(printed)Ž¡‘TÆLprintf‘¹–("\n");Ž¡‘Aßô}Ž¡‘8lÈreturn‘¹–(0);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Change“to“the“directory“ARG.“*/Ž¡‘.ùœcom_cd‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈif–¹–(chdir“(arg)“==“-1)Ž¡‘Aßô{ŽŽŒ‹< ¼Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—60ŽŽŽ ƒ33 ý ÌÍ‘KS Éperror‘¹–(arg);ޤ €‘KS return‘¹–1;Ž¡‘Aßô}Ž©‘8lÈcom_pwd‘¹–("");Ž¡‘8lÈreturn‘¹–(0);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Print“out“the“current“working“directory.“*/Ž¡‘.ùœcom_pwd‘¹–(ignore)Ž¡‘F™Šchar‘¹–*ignore;Ž¡‘.ùœ{Ž¡‘8lÈchar–¹–dir[1024],“*s;ަ‘8lÈs–¹–=“getcwd“(dir,“sizeof(dir)“-“1);Ž¡‘8lÈif–¹–(s“==“0)Ž¡‘Aßô{Ž¡‘KS printf–¹–("Error“getting“pwd:“%s\n",“dir);Ž¡‘KS return‘¹–1;Ž¡‘Aßô}ަ‘8lÈprintf–¹–("Current“directory“is“%s\n",“dir);Ž¡‘8lÈreturn‘¹–0;Ž¡‘.ùœ}ަ‘.ùœ/*–¹–The“user“wishes“to“quit“using“this“program.‘ s,Just“set“DONE“non-zero.“*/Ž¡‘.ùœcom_quit‘¹–(arg)Ž¡‘F™Šchar‘¹–*arg;Ž¡‘.ùœ{Ž¡‘8lÈdone–¹–=“1;Ž¡‘8lÈreturn‘¹–(0);Ž¡‘.ùœ}ަ‘.ùœ/*–¹–Function“which“tells“you“that“you“can't“do“this.“*/Ž¡‘.ùœtoo_dangerous‘¹–(caller)Ž¡‘F™Šchar‘¹–*caller;Ž¡‘.ùœ{Ž¡‘8lÈfprintf‘¹–(stderr,Ž¡‘bó"%s:–¹–Too“dangerous“for“me“to“distribute.‘ s,Write“it“yourself.\n",Ž¡‘bó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)Ž¡‘F™Šchar–¹–*caller,“*arg;Ž¡‘.ùœ{Ž¡‘8lÈif–¹–(!arg“||“!*arg)Ž¡‘Aßô{Ž¡‘KS fprintf–¹–(stderr,“"%s:“Argument“required.\n",“caller);Ž¡‘KS return‘¹–(0);Ž¡‘Aßô}ަ‘8lÈreturn‘¹–(1);Ž¡‘.ùœ}ŽŽŒ‹=>Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:61ŽŽŽ ƒ33 ý ÌÍ‘GëSApp›Š=endix‘záA‘ ¸QGNU–z³F‘þaGree“Do˜cumen‘ÿuÂtation“LicenseŽŽŸƒª’£¤AáV‘ÿeersion–¦f1.3,“3“No•²!v“em“bMÞer‘¦f2008Ž©Q‘.ùœCop•²!yrigh“t‘±ž«‚cŽŽŽ‘¦fê ŽŽŽŽ‘@á2000,–¦f2001,“2002,“2007,“2008“F›ÿeree“Soft•²!w“are–¦fF˜oundation,“Inc.ޤ 33‘.ùœâhttp://fsf.org/ŽŸff‘.ùœáEv•²!ery“one–¦fis“pMÞermitted“to“copš²!y“and“distribute“v˜erbatim“copiesŽ¡‘.ùœof–¦fthis“license“doMÞcumenš²!t,“but“c˜hanging“it“is“not“allo˜w˜ed.ަ‘-0.Ž‘'¿«PREAMBLEަ‘'¿«The–vQpurpMÞose›vRof“this˜License“is˜to“mak²!e“a˜man²!ual,›ªLtextb•MÞo“ok,˜or–vQother‘vRfunctional“andŽ¡‘'¿«useful–žïdoMÞcumen²!t›žîåfree‘;öáin“the“sense˜of“freedom:‘Ú!to“assure“ev•²!ery“one‘žïthe˜e ectiv“e‘žïfreedomŽ¡‘'¿«to–Æ9cop²!y›Æ:and“redistribute“it,‘Î.with“or˜without“moMÞdifying“it,‘Î.either“commercially˜or“non-Ž¡‘'¿«commercially–ÿe.‘cÏSecondarily“,‘Hàthis–(aLicense›(bpreserv²!es“for“the˜author“and“publisher˜a“w•²!a“yŽ¡‘'¿«to–W9get“credit›W8for“their“w²!ork,‘ƒmwhile“not“bMÞeing“considered˜respšMÞonsible“for“mo˜di cationsŽ¡‘'¿«made–¦fb²!y“others.ަ‘'¿«This–È/License›È0is“a“kind“of˜\cop•²!yleft",‘ô whic“h–È/means˜that“deriv‘ÿdDativš²!e“w˜orks“of‘È0the“doMÞcumen˜tŽ¡‘'¿«m•²!ust›õthemselv“es–ôbMÞe˜free˜in˜the“same˜sense.‘ ‰It˜complemen²!ts˜the“GNU‘ÙGeneral˜PublicŽ¡‘'¿«License,–¦fwhicš²!h“is“a“cop˜yleft“license“designed“for“free“soft˜w˜are.ަ‘'¿«W‘ÿee›‹#ha•²!v“e˜designed˜this˜License˜in˜order˜to˜use˜it‘‹"for˜man“uals˜for˜free˜soft“w“are,‘—bMÞecauseŽ¡‘'¿«free›?soft•²!w“are˜needs˜free‘>doMÞcumen“tation:‘³a˜free˜program˜should‘>come˜with˜man“ualsŽ¡‘'¿«pro²!viding–urthe›ussame“freedoms˜that“the˜soft•²!w“are–urdoMÞes.‘ÍŒBut˜this“License˜is“not˜limited“toŽ¡‘'¿«soft•²!w“are›­âman“uals;‘±¡it–­ãcan˜bMÞe“used˜for“an²!y˜textual“w²!ork,‘¯Áregardless“of˜sub‘›»ject“matter˜orŽ¡‘'¿«whether–Ç2it“is“published“as“a“prin²!ted“b•MÞo“ok.‘@BW‘ÿee–Ç2recommend“this“License“principally“forŽ¡‘'¿«w²!orks–¦fwhose“purpMÞose“is“instruction“or“reference.ަ‘-1.Ž‘'¿«APPLICABILITY–¦fAND“DEFINITIONSŽŸP‘'¿«This–Ì>License‘Ì=applies“to“anš²!y“man˜ual‘Ì=or“other“w˜ork,‘³in“an˜y–Ì=medium,‘´that“con˜tains‘Ì>aŽ¡‘'¿«notice–ýplaced›ýb²!y“the˜cop•²!yrigh“t‘ýholder˜sa“ying–ýit˜can“bMÞe˜distributed“under˜the“termsŽ¡‘'¿«of–€†this“License.‘l=Sucš²!h“a“notice“gran˜ts“a“w˜orld-wide,‘· ro˜y˜alt˜y-free“license,‘·unlimited“inŽ¡‘'¿«duration,‘â to–o·use›o¶that“w²!ork“under˜the“conditions“stated˜herein.‘ 9ÏThe“\DoMÞcumen²!t",Ž¡‘'¿«bMÞeloš²!w,‘tkrefers–gìto“an˜y“suc˜h‘gíman˜ual“or“w˜ork.‘É An˜y“mem˜bMÞer“of“the‘gípublic“is“a“licensee,‘tkandŽ¡‘'¿«is–ÿaddressed“as“\yš²!ou".‘¦@Y‘ÿeou“accept“the“license“if“y˜ou“cop˜y‘ÿe,‘ îmoMÞdify“or“distribute“the“w˜orkŽ¡‘'¿«in–¦fa“w•²!a“y–¦frequiring“pMÞermission“under“cop•²!yrigh“t‘¦fla“w.ަ‘'¿«A‘ ¦\MošMÞdi ed– ÀV‘ÿeersion"‘ Áof“the“Do˜cumenš²!t“means‘ Áan˜y“w˜ork“con˜taining“the‘ ÁDoMÞcumen˜t“orŽ¡‘'¿«a–‚hpMÞortion›‚gof“it,‘¹heither˜copied“v²!erbatim,‘¹hor˜with“moMÞdi cations“and/or˜translated“in²!toŽ¡‘'¿«another‘¦flanguage.ަ‘'¿«A‘ž\Secondary–ÀSection"“is›Áa“named˜appMÞendix“or˜a“fron²!t-matter˜section“of˜the“DoMÞcumen²!tŽ¡‘'¿«that–Ž/deals“exclusiv²!ely›Ž0with“the“relationship“of˜the“publishers“or“authors˜of“the“DoMÞcumen²!tŽ¡‘'¿«to–z the‘zDoMÞcumenš²!t's“o˜v˜erall›zsub‘›»ject“(or˜to“related“matters)˜and“con²!tains˜nothing“thatŽ¡‘'¿«could–Ø®fall›دdirectly“within“that“o•²!v“erall˜sub‘›»ject.‘tµ(Th“us,‘%@if˜the›Ø®DoMÞcumen“t˜is˜in‘دpart˜aŽ¡‘'¿«textb•MÞo“ok›Õ†of–Õ…mathematics,‘ÿMa“Secondary˜Section˜ma²!y˜not“explain˜an²!y˜mathematics.)‘˜=TheŽ¡‘'¿«relationship–GÞcould“bMÞe“a“matter“of“historical“connection“with“the“sub‘›»ject“or“with“relatedŽ¡‘'¿«matters,–jor‘Bøof›B÷legal,“commercial,‘jphilosophical,“ethical˜or˜p•MÞolitical‘Bøp“osition˜regardingŽ¡‘'¿«them.ަ‘'¿«The›r\In•²!v‘ÿdDarian“t–sSections"˜are˜certain˜Secondary“Sections˜whose˜titles˜are“designated,‘0ÖasŽ¡‘'¿«bMÞeing–2Dthose›2Cof“In•²!v‘ÿdDarian“t–2DSections,‘I}in“the“notice˜that“sa²!ys˜that“the“DoMÞcumen²!t˜is“releasedŽŽŒ‹>¿Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:62ŽŽŽ ƒ33 ý ÌÍ‘'¿«under–S5this“License.‘Â"If›S4a“section“doMÞes“not“ t˜the“abMÞo•²!v“e–S5de nition“of“Secondary˜then“it“isޤ 33‘'¿«not›Óallo•²!w“ed˜to‘ÓŽbMÞe˜designated˜as˜In“v‘ÿdDarian“t.‘eSThe˜DoMÞcumen“t˜ma“y‘ÓŽcon“tain˜zero˜In“v‘ÿdDarian“tŽ¡‘'¿«Sections.‘¢ÄIf–õthe“DošMÞcumen²!t“do˜es‘õnot“idenš²!tify“an˜y“In˜v‘ÿdDarian˜t“Sections“then‘õthere“are“none.Ž©&g‘'¿«The›f­\Co•²!v“er–f¬T‘ÿeexts"˜are˜certain˜short“passages˜of˜text˜that“are˜listed,‘–¾as˜F‘ÿeron•²!t-Co“v“erŽ¡‘'¿«T›ÿeexts–-or“Bac•²!k-Co“v“er‘,T˜exts,‘"8in–-the“notice“that‘,saš²!ys“that“the“DoMÞcumen˜t‘,is“released“underŽ¡‘'¿«this›’License.‘¯AA‘nF‘ÿeron•²!t-Co“v“er˜T‘ÿeext˜ma“y˜bMÞe˜at˜most˜5›‘w“ords,‘6Šand˜a›’Bac“k-Co“v“er˜T‘ÿeext˜ma“yŽ¡‘'¿«bMÞe–¦fat“most“25“w²!ords.ŽŸ&h‘'¿«A‘C¦\T‘ÿeransparen•²!t"›CÎcop“y˜of‘CÏthe˜DoMÞcumen“t˜means˜a‘CÏmac“hine-readable˜cop“y‘ÿe,‘k(represen“tedŽ¡‘'¿«in–Jma“format›Jnwhose“spMÞeci cation“is“a²!v‘ÿdDailable“to“the˜general“public,‘snthat˜is“suitable“forŽ¡‘'¿«revising–Îàthe‘ÎßdoMÞcumenš²!t“straigh˜tforw˜ardly“with›Îßgeneric“text˜editors“or“(for˜images“com-Ž¡‘'¿«pMÞosed–ÚÃof›ÚÄpixels)“generic˜pain²!t“programs˜or“(for˜dra²!wings)“some˜widely“a•²!v‘ÿdDailable˜dra“wingŽ¡‘'¿«editor,‘…úand–}ßthat“is“suitable“for“input“to‘}àtext“formatters“or“for“automatic“translation“toŽ¡‘'¿«a–9Ov‘ÿdDariet²!y“of›9Nformats“suitable“for“input“to“text˜formatters.‘¹A‘93cop²!y“made˜in“an“otherwiseŽ¡‘'¿«T‘ÿeransparen²!t–„æ le“format›„åwhose“markup,‘¼†or“absence˜of“markup,‘¼†has˜bMÞeen“arranged“toŽ¡‘'¿«th•²!w“art–0ûor›0üdiscourage“subsequen²!t“moMÞdi cation˜b²!y“readers“is˜not“T‘ÿeransparen²!t.‘¶ºAn“imageŽ¡‘'¿«format– Éis“not“T‘ÿeransparenš²!t“if“used‘ Èfor“an˜y“substan˜tial“amoun˜t“of“text.‘MA‘ ©cop˜y“that“isŽ¡‘'¿«not–¦f\T‘ÿeransparen²!t"“is“called“\Opaque".ަ‘'¿«Examples–cXof“suitable›cWformats“for“T‘ÿeransparen²!t“copies“include˜plain“çasci>Ki“áwithoutŽ¡‘'¿«markup,‘„ÂT‘ÿeexinfo–XIinput“format,›„ÁLaT‘þ,³Ÿ[wEŽ‘B X‘XJinput“format,˜óKñ`y cmr10«SGML“áor‘XJ«XML“áusing“a“publiclyŽ¡‘'¿«a²!v‘ÿdDailable–«DTDá,‘üand›Âstandard-conforming“simple˜«HTMLá,‘üP²!ostScript“or˜«PDF“ádesignedŽ¡‘'¿«for–˜.hš²!uman“moMÞdi cation.‘³4Examples“of“transparen˜t“image“formats“include“«PNGá,‘ÔŸ«X¸ãCFŽ¡‘'¿«áand–¢«JPGá.‘ÐáOpaque“formats“include“proprietary‘¢formats“that“can“bMÞe“read“and“editedŽ¡‘'¿«only–sbš²!y‘sproprietary“w˜ord›sproMÞcessors,‘&J«SGML“áor˜«XML“áfor˜whic²!h“the˜«DTD“áand/orŽ¡‘'¿«pro•MÞcessing›W*to“ols˜are˜not‘W)generally˜a•²!v‘ÿdDailable,‘CYand˜the˜mac“hine-generated˜«HTMLá,Ž¡‘'¿«Pš²!ostScript–¦for“«PDF“áproMÞduced“b˜y“some“w˜ord“prošMÞcessors“for“output“purp˜oses“only‘ÿe.ަ‘'¿«The–Ü\Title›ÛP²!age"“means,‘<ùfor˜a“prin²!ted˜b•MÞo“ok,‘<ùthe–Ütitle˜page“itself,‘<ùplus˜sucš²!h“follo˜wingŽ¡‘'¿«pages–RÃas“are“needed“to“hold,–c}legibly‘ÿe,“the–RÃmaterial“this‘RÂLicense“requires“to“appMÞear“in“theŽ¡‘'¿«title–1.page.‘¶ÊF‘ÿeor“w²!orks›1-in“formats˜whic²!h“do“not˜ha•²!v“e‘1.an“y˜title–1.page“as˜sucš²!h,‘HŸ\Title“P˜age"Ž¡‘'¿«means–­Žthe“text“near›­the“most“prominen²!t“appMÞearance“of“the˜w²!ork's“title,‘¯Xpreceding“theŽ¡‘'¿«bšMÞeginning–¦fof“the“b˜o˜dy“of“the“text.ަ‘'¿«The–)—\publisher"“means‘)˜anš²!y“pMÞerson“or“en˜tit˜y“that“distributes‘)˜copies“of“the“DoMÞcumen˜tŽ¡‘'¿«to–¦fthe“public.ŽŸ&h‘'¿«A›ísection–ò\En²!titled“XYZ"˜means“a“named›ósubunit“of“the“DoMÞcumen²!t˜whose“title“eitherŽ¡‘'¿«is–Uªprecisely‘U©XYZ›U•or“con²!tains“XYZ˜in“paren•²!theses›U©follo“wing–Uªtext“that˜translates“XYZ‘U•inŽ¡‘'¿«another–þ¯language.‘¥ö(Here“XYZ‘þ„stands“for“a“spšMÞeci c“section“name“men²!tioned“b˜elo•²!w,‘ :suc“hŽ¡‘'¿«as›aa\Ac•²!kno“wledgemen“ts",–o/\Dedications",“\Endorsemen²!ts",“or˜\History".)‘ÆÛT‘ÿeo˜\Preserv²!eŽ¡‘'¿«the–›Title"›šof“suc²!h˜a“section“when˜y²!ou“moMÞdify˜the“DoMÞcumen²!t“means˜that“it˜remains“aŽ¡‘'¿«section–¦f\En²!titled“XYZ"“according“to“this“de nition.ަ‘'¿«The–SuDoMÞcumenš²!t“ma˜y“include“W‘ÿearran˜t˜y“Disclaimers“next‘Svto“the“notice“whic˜h“states“thatŽ¡‘'¿«this–¹License“applies‘ºto“the“DoMÞcumenš²!t.‘×These“W‘ÿearran˜t˜y“Disclaimers‘ºare“considered“toŽ¡‘'¿«bMÞe–„ýincluded›„þb²!y“reference“in“this˜License,‘¼£but“only“as“regards˜disclaiming“w•²!arran“ties:Ž¡‘'¿«an²!y–nother›n‘implication“that˜these“W‘ÿearran•²!t“y˜Disclaimers‘nma“y˜ha“v“e‘nis˜v“oid–nand˜has“noŽ¡‘'¿«e ect–¦fon“the“meaning“of“this“License.ަ‘-2.Ž‘'¿«VERBA‘ÿeTIM‘¦fCOPYINGŽŽŒ‹?)wŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:63ŽŽŽ ƒ33 ý ÌÍ‘'¿«Y‘ÿeou–’ùmaš²!y“cop˜y“and“distribute“the“DoMÞcumen˜t“in“an˜y“medium,‘Îeither“commercially“orޤ 33‘'¿«noncommercially‘ÿe,›zªpro²!vided–that‘this“License,˜the‘cop•²!yrigh“t–notices,˜and‘the“licenseŽ¡‘'¿«notice–Ksa²!ying›K this“License˜applies“to˜the“DoMÞcumen²!t“are˜reproMÞduced“in˜all“copies,‘t7andŽ¡‘'¿«that–1'yš²!ou“add“no‘1(other“conditions“whatsoMÞev˜er“to“those“of“this“License.‘¶ÉY‘ÿeou“ma˜y“not“useŽ¡‘'¿«tec²!hnical–ò“measures›ò”to“obstruct˜or“con²!trol˜the“reading˜or“further˜cop²!ying“of˜the“copiesŽ¡‘'¿«y•²!ou›òÇmak“e‘òÈor˜distribute.‘¡þHo“w“ev“er,‘´y“ou˜ma“y˜accept‘òÈcompMÞensation˜in˜exc“hange‘òÈfor˜copies.Ž¡‘'¿«If–Þy²!ou›Þdistribute“a“large˜enough“n•²!um“bMÞer˜of–Þcopies“y•²!ou˜m“ust–Þalso“follo²!w˜the“conditionsŽ¡‘'¿«in–¦fsection“3.Ž©"#‘'¿«Y‘ÿeou–}ìma²!y“also›}ëlend“copies,‘¹7under“the“same“conditions“stated˜abMÞo•²!v“e,‘¹8and˜y“ou›}ìma“y˜publiclyŽ¡‘'¿«displa²!y‘¦fcopies.ަ‘-3.Ž‘'¿«COPYING–¦fIN“QUANTITYަ‘'¿«If–Ãyš²!ou‘Âpublish“prin˜ted›Âcopies“(or˜copies˜in“media“that˜commonly“ha•²!v“e˜prin“ted˜co“v“ers)‘ÃofŽ¡‘'¿«the‘Ñ.DošMÞcumen•²!t,‘Ûßn“um“b˜ering–Ñ.more“than–Ñ-100,‘Ûàand“the–Ñ.Do˜cumen²!t's“license‘Ñ-notice“requiresŽ¡‘'¿«Co•²!v“er›ÜT‘ÿeexts,‘<ùy“ou‘Ûm“ust˜enclose˜the˜copies‘Ûin˜co“v“ers˜that˜carry–ÿe,‘<ùclearly‘Ûand˜legibly“,‘<ùallŽ¡‘'¿«these›´@Co•²!v“er˜T–ÿeexts:‘ùF“ron•²!t-Co“v“er˜T‘ÿeexts˜on˜the˜fron“t˜co“v“er,‘÷µand˜Bac“k-Co“v“er˜T‘ÿeexts˜onŽ¡‘'¿«the›öbac•²!k‘õco“v“er.‘Ñ Both˜co“v“ers˜m“ust–õalso˜clearly˜and˜legibly“iden•²!tify˜y“ou˜as‘õthe˜publisherŽ¡‘'¿«of›,these–+copies.‘H/The“fron•²!t˜co“v“er˜m“ust˜presen“t–+the˜full˜title“with˜all˜w²!ords˜of“the˜titleŽ¡‘'¿«equally–³xprominenš²!t“and‘³yvisible.‘Y‘ÿeou“ma˜y›³yadd“other“material“on“the˜co•²!v“ers–³xin“addition.Ž¡‘'¿«Cop•²!ying›Y4with‘Y3c“hanges˜limited–Y3to˜the“co•²!v“ers,‘…ças–Y3long˜as“they˜preserv²!e“the˜title“of˜theŽ¡‘'¿«DošMÞcumen²!t–uand“satisfy“these“conditions,‘¨Åcan“b˜e“treated‘uas“vš²!erbatim“cop˜ying“in“otherŽ¡‘'¿«respMÞects.ަ‘'¿«If–î|the“required›î}texts“for“either“co•²!v“er–î|are“toMÞo˜vš²!oluminous“to“ t“legibly‘ÿe,‘‚y˜ou“should“putŽ¡‘'¿«the–ò rst›òones“listed“(as“man²!y˜as“ t“reasonably)“on˜the“actual“co•²!v“er,‘ùand˜con“tin“ue‘òtheŽ¡‘'¿«rest–¦fonš²!to“adjacen˜t“pages.ŽŸ""‘'¿«If–?|y²!ou›?{publish“or˜distribute“Opaque˜copies“of˜the“DoMÞcumen•²!t˜n“um“bMÞering–?|more˜than“100,Ž¡‘'¿«y•²!ou›\3m“ust˜either‘\4include˜a˜mac“hine-readable˜T‘ÿeransparen“t˜cop“y˜along‘\4with˜eac“h˜OpaqueŽ¡‘'¿«cop²!y‘ÿe,‘[>or›7state–7in“or˜with“eacš²!h“Opaque“cop˜y‘7a“computer-net˜w˜ork“loMÞcation‘7from“whic˜hŽ¡‘'¿«the›éSgeneral‘éRnet•²!w“ork-using˜public˜has‘éRaccess˜to˜do“wnload˜using‘éRpublic-standard˜net“w“orkŽ¡‘'¿«protoMÞcols–¬=a“complete‘¬>T‘ÿeransparenš²!t“cop˜y“of“the“DoMÞcumen˜t,‘í³free“of“added“material.‘ïcIfŽ¡‘'¿«yš²!ou–ªuse“the‘ªlatter“option,‘êùy˜ou“m˜ust‘ªtak˜e“reasonably“pruden˜t“steps,‘êøwhen“y˜ou“bMÞeginŽ¡‘'¿«distribution–—lof›—mOpaque“copies˜in“quan•²!tit“y‘ÿe,‘Ó®to–—lensure“that˜this“T‘ÿeransparen•²!t˜cop“y‘—lwillŽ¡‘'¿«remain– Cthš²!us“accessible‘ Dat“the“stated“loMÞcation“un˜til‘ Dat“least“one“y˜ear“after‘ Dthe“last“timeŽ¡‘'¿«yš²!ou–k‘distribute‘k’an“Opaque“cop˜y‘k’(directly“or“through“y˜our‘k’agen˜ts“or“retailers)‘k’of“thatŽ¡‘'¿«edition–¦fto“the“public.ަ‘'¿«It–&Nis“requested,‘FHbut“not“required,‘FGthat“yš²!ou“con˜tact“the“authors“of“the“DoMÞcumen˜t“w˜ellŽ¡‘'¿«bMÞefore–oÅredistributing‘oÄanš²!y“large“n˜um˜bMÞer›oÄof“copies,‘z²to˜giv²!e“them˜a“c²!hance“to˜proš²!vide“y˜ouŽ¡‘'¿«with–¦fan“upšMÞdated“v²!ersion“of“the“Do˜cumen²!t.ަ‘-4.Ž‘'¿«MODIFICA‘ÿeTIONSަ‘'¿«Y‘ÿeou–*maš²!y“cop˜y“and›)distribute“a“MoMÞdi ed“V‘ÿeersion“of“the˜DoMÞcumen²!t“under“the“conditionsŽ¡‘'¿«of–…šsections›…›2“and˜3“abMÞo•²!v“e,‘¿]pro“vided˜that‘…šy“ou˜release–…šthe˜MoMÞdi ed“V‘ÿeersion˜under“preciselyŽ¡‘'¿«this–{ÞLicense,‘„`with“the›{ßMoMÞdi ed“V‘ÿeersion“ lling˜the“role“of˜the“DoMÞcumen•²!t,‘„`th“us‘{ÞlicensingŽ¡‘'¿«distribution–¸and“mošMÞdi cation‘¹of“the“Mo˜di ed“V‘ÿeersion“to“who˜ev²!er‘¹p˜ossesses“a“cop²!y“ofŽ¡‘'¿«it.‘ÝÝIn–¦faddition,“yš²!ou“m˜ust“do“these“things“in“the“MoMÞdi ed“V‘ÿeersion:ަ‘*òÄA.Ž‘=nUse–ípin“the“Title“Pš²!age“(and“on“the“co˜v˜ers,‘ÿ2if“an˜y)“a“title“distinct“from“that“of“theŽ¡‘=nDoMÞcumenš²!t,‘+and–ˆfrom“those“of“previous“v˜ersions‘‡(whic˜h“should,‘+if“there“w˜ere“an˜y‘ÿe,ŽŽŒ‹@;ÛŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:64ŽŽŽ ƒ33 ý ÌÍ‘=nbšMÞe–Âølisted“in“the“History‘Â÷section“of“the“Do˜cumenš²!t).‘3“Y‘ÿeou“ma˜y‘Â÷use“the“same“title“asޤ 33‘=na–¦fprevious“vš²!ersion“if“the“original“publisher“of“that“v˜ersion“giv˜es“pMÞermission.Ž©€‘+gB.Ž‘=nList–ª\on“the“Title›ª[P²!age,‘«Zas“authors,‘«Yone“or“more“pMÞersons˜or“en²!tities“respMÞonsible“forŽ¡‘=nauthorship–"of›"the“moMÞdi cations“in˜the“MoMÞdi ed˜V‘ÿeersion,‘<|together“with“at˜least“ v²!eŽ¡‘=nof–߸the“principal“authors“of“the“DoMÞcumenš²!t“(all“of“its“principal“authors,‘uif“it“has“few˜erŽ¡‘=nthan–¦f vš²!e),“unless“they“release“y˜ou“from“this“requiremen˜t.ŽŸ€‘+@¢C.Ž‘=nState–±Óon›±Òthe“Title˜page“the˜name“of˜the“publisher˜of“the˜MoMÞdi ed“V‘ÿeersion,‘´­as“theŽ¡‘=npublisher.ަ‘*ËÕD.Ž‘=nPreservš²!e–¦fall“the“cop˜yrigh˜t“notices“of“the“DoMÞcumen˜t.ަ‘+µoE.Ž‘=nAdd–Äean›Ädappropriate“cop•²!yrigh“t˜notice‘Äefor˜y“our‘ÄemoMÞdi cations˜adjacen“t–Äeto˜the“otherŽ¡‘=ncop•²!yrigh“t‘¦fnotices.ŽŸ€‘,LF.Ž‘=nInclude,›hSimmediately–XÎafter“the“cop•²!yrigh“t–XÎnotices,˜a“license“notice“giving“the“publicŽ¡‘=npMÞermission–ïËto›ïÊuse“the˜MoMÞdi ed“V‘ÿeersion“under˜the“terms˜of“this“License,‘Pin˜the“formŽ¡‘=nshoš²!wn–¦fin“the“Addendum“bMÞelo˜w.ަ‘*‘nG.Ž‘=nPreserv²!e–¼min›¼lthat“license˜notice“the˜full“lists˜of“In•²!v‘ÿdDarian“t˜Sections–¼mand˜required“Co•²!v“erŽ¡‘=nT‘ÿeexts–¦fgivš²!en“in“the“DoMÞcumen˜t's“license“notice.ަ‘*òÄH.Ž‘=nInclude–¦fan“unaltered“cop²!y“of“this“License.ŽŸ€‘/4çI.Ž‘=nPreservš²!e–Ú†the‘Ú‡section“En˜titled‘Ú‡\History",‘çŽPreserv˜e“its›Ú‡Title,‘çŽand“add˜to“it˜an“itemŽ¡‘=nstating–_ at›_ least“the˜title,–mQy²!ear,“new˜authors,“and–_ publisher˜of“the˜MoMÞdi ed“V‘ÿeersionŽ¡‘=nas–ÄXgivš²!en“on‘ÄWthe“Title“P˜age.‘7³If‘ÄWthere“is“no“section“En˜titled“\History"‘ÄWin“the“DoMÞcu-Ž¡‘=nmenš²!t,‘O#create‘-eone–-dstating“the“title,‘O$y˜ear,–O#authors,“and‘-epublisher–-dof“the“DoMÞcumen˜tŽ¡‘=nas–Wgivš²!en“on“its“Title“P˜age,‘ƒFthen“add“an“item“describing“the“MoMÞdi ed“V‘ÿeersion“asŽ¡‘=nstated–¦fin“the“previous“sen²!tence.ަ‘-ˆ¢J.Ž‘=nPreservš²!e–æthe“net˜w˜ork“loMÞcation,‘õúif“an˜y‘ÿe,‘õúgiv˜en“in“the“DoMÞcumen˜t‘æfor“public“access“toŽ¡‘=na–½…T‘ÿeransparenš²!t“cop˜y‘½†of“the“DoMÞcumen˜t,‘ÃMand“lik˜ewise“the“net˜w˜ork‘½†loMÞcations“giv˜en“inŽ¡‘=nthe–Í„DoMÞcumenš²!t‘̓for“previous“v˜ersions‘̓it“w˜as“based“on.‘S6These‘̓ma˜y“bMÞe“placed‘̓in“theŽ¡‘=n\History"–8section.‘¦ÎY‘ÿeou›9ma²!y“omit˜a“net•²!w“ork–8loMÞcation˜for“a˜w²!ork“that˜w²!as“publishedŽ¡‘=nat–Kleast“four‘Ky²!ears“bšMÞefore“the“Do˜cumen²!t“itself,‘t@or“if“the“original‘Kpublisher“of“theŽ¡‘=nvš²!ersion–¦fit“refers“to“giv˜es“pMÞermission.ަ‘*¤åK.Ž‘=nF‘ÿeor–Ùranš²!y“section“En˜titled“\Ac˜kno˜wledgemen˜ts"“or“\Dedications",‘oPreserv˜e“the“TitleŽ¡‘=nof›/Rthe–/Qsection,‘G#and“preserv²!e˜in˜the“section˜all˜the“substance˜and“tone˜of˜eac²!h“of˜theŽ¡‘=ncon•²!tributor›¦fac“kno“wledgemen“ts˜and/or˜dedications˜giv“en˜therein.ަ‘,Q*L.Ž‘=nPreservš²!e–?Ôall‘?Óthe“In˜v‘ÿdDarian˜t›?ÓSections“of˜the“DoMÞcumen²!t,‘f/unaltered˜in“their˜text“andŽ¡‘=nin›PÜtheir–PÝtitles.‘Ý@Section“n•²!um“bMÞers˜or‘PÝthe˜equiv‘ÿdDalen“t–PÝare˜not“considered˜part“of˜theŽ¡‘=nsection‘¦ftitles.ŽŸ€‘)M.Ž‘=nDelete–°5anš²!y“section“En˜titled‘°4\Endorsemen˜ts".‘ûJSuc˜h“a“section‘°4ma˜y“not“bMÞe“includedŽ¡‘=nin–¦fthe“MoMÞdi ed“V‘ÿeersion.ަ‘*òÄN.Ž‘=nDo–g!not›g"retitle“an²!y˜existing“section“to˜bMÞe“Enš²!titled“\Endorsemen˜ts"›g"or“to˜con ict“inŽ¡‘=ntitle–¦fwith“anš²!y“In˜v‘ÿdDarian˜t“Section.ަ‘*¤åO.Ž‘=nPreserv•²!e›¦fan“y˜W‘ÿearran“t“y˜Disclaimers.ŽŸÌΑ'¿«If–Øthe›×MoMÞdi ed“V‘ÿeersion˜includes“new˜fron²!t-matter“sections˜or“appMÞendices˜that“qualifyŽ¡‘'¿«as–XSecondary›X Sections“and“con²!tain“no˜material“copied“from˜the“DoMÞcumen•²!t,‘g´y“ou˜ma“y‘XatŽ¡‘'¿«y²!our–ãkoption›ãldesignate“some˜or“all“of˜these“sections˜as“in•²!v‘ÿdDarian“t.‘”íT‘ÿeo˜do–ãkthis,‘ò­add“theirŽŽŒ‹AN=Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:65ŽŽŽ ƒ33 ý ÌÍ‘'¿«titles–@«to“the“list›@¬of“In•²!v‘ÿdDarian“t–@«Sections“in“the“MoMÞdi ed“V‘ÿeersion's“license˜notice.‘¬¬Theseޤ 33‘'¿«titles–¦fmš²!ust“bMÞe“distinct“from“an˜y“other“section“titles.Ž©(ö‘'¿«Y‘ÿeou–pmaš²!y‘qadd“a“section“En˜titled‘q\Endorsemen˜ts",‘s²pro˜vided“it“con˜tains‘qnothing“butŽ¡‘'¿«endorsemen•²!ts›‘of‘‘y“our˜MoMÞdi ed˜V‘ÿeersion˜b“y‘‘v‘ÿdDarious˜parties|for˜example,‘•Zstatemen“ts˜ofŽ¡‘'¿«pšMÞeer–D review“or‘Dthat“the“text“has“b˜een‘Dappro•²!v“ed›D b“y˜an˜organization‘Das˜the˜authoritativ“eŽ¡‘'¿«de nition–¦fof“a“standard.ŽŸ(÷‘'¿«Y‘ÿeou–f,ma²!y›f-add“a˜passage“of˜up“to˜ vš²!e“w˜ords›f-as“a˜F›ÿeron•²!t-Co“v“er–f,T˜ext,‘sand›f-a“passage˜of“upŽ¡‘'¿«to–@25“wš²!ords‘@Žas“a“Bac˜k-Co˜v˜er“T‘ÿeext,‘Tìto›@Žthe“end“of“the˜list“of“Co•²!v“er–@T‘ÿeexts˜in“the“MoMÞdi edŽ¡‘'¿«V›ÿeersion.‘Õ+Only–N+one‘N*passage“of“F˜ron•²!t-Co“v“er‘N*T˜ext–N+and“one‘N*of“Bac•²!k-Co“v“er‘N+T˜ext‘N*ma“y‘N+bMÞeŽ¡‘'¿«added–NÁbš²!y“(or“through“arrangemen˜ts“made“b˜y)‘NÂan˜y“one“en˜tit˜y‘ÿe.‘À¦If“the“DoMÞcumen˜t“alreadyŽ¡‘'¿«includes›Éa‘Èco•²!v“er˜text–Èfor˜the˜same“co•²!v“er,‘/!previously˜added˜b“y‘Èy“ou˜or‘Èb“y˜arrangemen“tŽ¡‘'¿«made–:Çbš²!y“the“same“en˜tit˜y“y˜ou“are“acting“on“bMÞehalf“of,‘_ßy˜ou“ma˜y‘:Ènot“add“another;‘„÷butŽ¡‘'¿«y•²!ou›)ma“y˜replace–*the˜old˜one,‘2on˜explicit˜pMÞermission˜from˜the“previous˜publisher˜thatŽ¡‘'¿«added–¦fthe“old“one.ަ‘'¿«The–^author(s)›]and“publisher(s)˜of“the“DoMÞcumen²!t˜do“not“b²!y˜this“License˜giv²!e“pMÞermissionŽ¡‘'¿«to–¤juse“their›¤knames“for“publicit²!y“for“or˜to“assert“or“imply“endorsemen²!t˜of“an²!y“MoMÞdi edŽ¡‘'¿«V‘ÿeersion.ŽŸ(÷‘-5.Ž‘'¿«COMBINING‘¦fDOCUMENTSަ‘'¿«Y‘ÿeou›¦Çma•²!y‘¦Ècom“bine˜the˜DoMÞcumen“t–¦Èwith˜other“doMÞcumen²!ts˜released˜under“this˜License,Ž¡‘'¿«under–—sthe“terms›—tde ned“in“section“4˜abšMÞo•²!v“e–—sfor“mo˜di ed“v•²!ersions,‘Ó·pro“vided–—sthat“y²!ouŽ¡‘'¿«include– in› the“com²!bination“all“of˜the“In•²!v‘ÿdDarian“t– Sections˜of“all“of“the˜original“doMÞcumen²!ts,Ž¡‘'¿«unmoMÞdi ed,‘L3and–5¦list›5§them“all˜as“In•²!v‘ÿdDarian“t–5¦Sections˜of“yš²!our“com˜bined‘5§w˜ork“in‘5§its“licenseŽ¡‘'¿«notice,–¦fand“that“yš²!ou“preserv˜e“all“their“W‘ÿearran˜t˜y“Disclaimers.ަ‘'¿«The–¢@comš²!bined“w˜ork“need“only“con˜tain“one“cop˜y“of“this“License,‘£and“m˜ultiple“iden˜ticalŽ¡‘'¿«In•²!v‘ÿdDarian“t–æÝSections“maš²!y“bMÞe“replaced“with“a“single‘æÜcop˜y‘ÿe.‘ŸBIf“there“are“m˜ultiple“In˜v‘ÿdDarian˜tŽ¡‘'¿«Sections–6Çwith›6Èthe“same˜name“but˜di erenš²!t“con˜ten˜ts,‘Mmak˜e›6Èthe“title˜of“eac•²!h˜suc“h‘6ÇsectionŽ¡‘'¿«unique–bb²!y›cadding“at˜the“end˜of“it,‘1"in“paren²!theses,‘1!the˜name“of˜the“original˜author“orŽ¡‘'¿«publisher–of“that›~section“if“kno²!wn,‘!­or“else“a“unique˜n•²!um“bMÞer.‘¦‘Mak“e˜the–same“adjustmen²!tŽ¡‘'¿«to–î‡the›î†section“titles“in˜the“list“of˜In•²!v‘ÿdDarian“t–î‡Sections“in“the˜license“notice“of˜the“com²!binedŽ¡‘'¿«w²!ork.ŽŸ(÷‘'¿«In›ö"the‘ö#com•²!bination,‘Jy“ou˜m“ust‘ö#com“bine˜an“y‘ö#sections˜En“titled–ö#\History"˜in“the˜v‘ÿdDari-Ž¡‘'¿«ous–ÜÛoriginal›ÜÚdoMÞcumen²!ts,‘êxforming“one˜section“Enš²!titled“\History";‘ølik˜ewise‘ÜÚcom˜bine“an˜yŽ¡‘'¿«sections–ÑEnš²!titled“\Ac˜kno˜wledgemen˜ts",‘Û¿and“an˜y“sections“En˜titled“\Dedications".‘]çY‘ÿeouŽ¡‘'¿«mš²!ust–¦fdelete“all“sections“En˜titled“\Endorsemen˜ts."ަ‘-6.Ž‘'¿«COLLECTIONS–¦fOF“DOCUMENTSŽŸ(÷‘'¿«Y‘ÿeou–Ò¤maš²!y“mak˜e“a“collection“consisting“of‘Ò£the“DoMÞcumen˜t“and“other“doMÞcumen˜ts“releasedŽ¡‘'¿«under–this“License,‘sÚand“replace“the“individual“copies“of“this“License“in“the“v‘ÿdDariousŽ¡‘'¿«doMÞcumenš²!ts–Dwith‘Ca“single“cop˜y›Cthat“is˜included“in“the˜collection,‘y»pro²!vided˜that“y²!ouŽ¡‘'¿«follo²!w–t”the›t•rules“of˜this“License˜for“v•²!erbatim˜cop“ying‘t”of˜eac“h–t”of˜the“doMÞcumen²!ts˜in“allŽ¡‘'¿«other‘¦frespMÞects.ަ‘'¿«Y‘ÿeou–Æ=maš²!y“extract“a“single“doMÞcumen˜t“from“suc˜h“a“collection,‘Î2and“distribute“it“individu-Ž¡‘'¿«ally–4under›4this“License,‘Wnpro•²!vided˜y“ou–4insert“a“cop²!y˜of“this“License“in²!to˜the“extractedŽ¡‘'¿«doMÞcumen•²!t,‘ùøand›éBfollo“w–éAthis˜License“in“all˜other“respMÞects˜regarding“v•²!erbatim˜cop“ying‘éAofŽ¡‘'¿«that‘¦fdoMÞcumen²!t.ŽŽŒ‹B^žŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:66ŽŽŽ ƒ33 ý ÌÍ‘-7.Ž‘'¿«Aš²!GGREGA‘ÿeTION–¦fWITH“INDEPENDENT“W˜ORKSŽ©(ö‘'¿«A‘]Æcompilation–]Øof“the“DoMÞcumenš²!t‘]Ùor“its“deriv‘ÿdDativ˜es“with“other‘]Ùseparate“and“indepMÞenden˜tޤ 33‘'¿«doMÞcumen•²!ts›ÿhor‘ÿiw“orks,‘©in˜or˜on‘ÿia˜v“olume–ÿiof˜a“storage˜or˜distribution“medium,‘©is˜calledŽ¡‘'¿«an– \aggregate"“if“the› cop•²!yrigh“t– resulting“from“the“compilation“is“not˜used“to“limit“theŽ¡‘'¿«legal–1 righ²!ts›1of“the“compilation's˜users“bMÞey²!ond˜what“the“individual˜w²!orks“pMÞermit.‘¶¾WhenŽ¡‘'¿«the–žDošMÞcumen²!t“is“included‘žin“an“aggregate,‘Ûðthis“License“do˜es“not‘žapply“to“the“otherŽ¡‘'¿«wš²!orks–¦fin“the“aggregate“whic˜h“are“not“themselv˜es“deriv‘ÿdDativ˜e“w˜orks“of“the“DoMÞcumen˜t.ŽŸ(÷‘'¿«If–»Vthe“Co•²!v“er–»VT‘ÿeext“requiremenš²!t“of“section“3‘»Uis“applicable“to“these“copies“of“the“DoMÞcumen˜t,Ž¡‘'¿«then–°Dif›°Ethe“DoMÞcumen²!t“is“less˜than“one“half“of˜the“en²!tire“aggregate,‘á~the˜DoMÞcumenš²!t's“Co˜v˜erŽ¡‘'¿«T‘ÿeexts–0maš²!y“bMÞe“placed“on“co˜v˜ers“that“brac˜k˜et“the“DoMÞcumen˜t“within“the‘0aggregate,‘G°or“theŽ¡‘'¿«electronic–5qequiv‘ÿdDalenš²!t‘5pof“co˜v˜ers›5pif“the˜DoMÞcumen²!t“is“in˜electronic“form.‘ŠüOtherwise“theyŽ¡‘'¿«mš²!ust–¦fappMÞear“on“prin˜ted“co˜v˜ers“that“brac˜k˜et“the“whole“aggregate.ަ‘-8.Ž‘'¿«TRANSLA‘ÿeTIONŽŸ(÷‘'¿«T‘ÿeranslation–̯is›̰considered“a˜kind“of“moMÞdi cation,‘Aso˜yš²!ou“ma˜y‘̰distribute“translationsŽ¡‘'¿«of–Tþthe›TýDoMÞcumen²!t“under˜the“terms˜of“section“4.‘ é£Replacing“In•²!v‘ÿdDarian“t˜Sections‘TþwithŽ¡‘'¿«translations–v²requires‘v³spšMÞecial“p˜ermission“from“their›v³cop•²!yrigh“t‘v²holders,‘êÄbut˜y“ou‘v²ma“yŽ¡‘'¿«include–ðktranslations“of“some›ðjor“all“In•²!v‘ÿdDarian“t–ðkSections“in“addition˜to“the“original“v²!ersionsŽ¡‘'¿«of›Æthese‘ÆIn•²!v‘ÿdDarian“t˜Sections.‘=Y‘ÿeou‘Æma“y˜include–Æa˜translation˜of“this˜License,‘Î and“all˜theŽ¡‘'¿«license–òúnotices›òûin“the“DoMÞcumen•²!t,‘Fand˜an“y›òúW‘ÿearran“t“y˜Disclaimers,‘Fpro“vided‘òûthat˜y“ouŽ¡‘'¿«also–Ïinclude›Îÿthe“original“English˜v²!ersion“of“this“License˜and“the“original˜v²!ersions“ofŽ¡‘'¿«those–notices“and“disclaimers.‘5åIn“case“of“a“disagreemen•²!t‘bMÞet“w“een–the“translation“andŽ¡‘'¿«the–:•original›:”v²!ersion“of˜this“License˜or“a˜notice“or˜disclaimer,‘_ the“original˜v²!ersion“willŽ¡‘'¿«prev‘ÿdDail.ަ‘'¿«If–pèa“section“in‘péthe“DoMÞcumenš²!t“is“En˜titled“\Ac˜kno˜wledgemen˜ts",–{›\Dedications",“or‘pè\His-Ž¡‘'¿«tory",‘A¿the–(•requiremenš²!t“(section“4)“to“Preserv˜e“its“Title“(section“1)“will“t˜ypically“requireŽ¡‘'¿«c²!hanging–¦fthe“actual“title.ަ‘-9.Ž‘'¿«TERMINA‘ÿeTIONŽŸ(÷‘'¿«Y‘ÿeou–”maš²!y“not‘”cop˜y–ÿe,›—¾moMÞdify“,˜sublicense,˜or–”distribute“the“DoMÞcumen²!t‘”except“as“expresslyŽ¡‘'¿«proš²!vided–¡ðunder‘¡ñthis“License.‘Ð|An˜y›¡ñattempt“otherwise˜to“cop²!y–ÿe,›àÓmoMÞdify“,‘àÒsublicense,˜orŽ¡‘'¿«distribute–¦fit“is“vš²!oid,“and“will“automatically“terminate“y˜our“righ˜ts“under“this“License.ަ‘'¿«Ho•²!w“ev“er,‘ó·if›äAy“ou–ä@cease˜all“violation˜of“this“License,‘ó¸then“y²!our˜license“from˜a“particularŽ¡‘'¿«cop•²!yrigh“t–Jholder“is‘Jreinstated“(a)“proš²!visionally‘ÿe,‘sšunless“and“un˜til‘Jthe“cop˜yrigh˜t“holderŽ¡‘'¿«explicitly–á_and“ nally“terminates“yš²!our“license,‘0and“(b)“pMÞermanen˜tly‘ÿe,‘0if“the“cop˜yrigh˜tŽ¡‘'¿«holder–"fails“to“notify“yš²!ou“of“the“violation‘"b˜y“some“reasonable“means“prior“to“60“da˜ysŽ¡‘'¿«after–¦fthe“cessation.ŽŸ(÷‘'¿«Moreo•²!v“er,‘Ï8y“our–Ç license›Çfrom“a˜particular˜cop•²!yrigh“t–Ç holder˜is˜reinstated“pMÞermanen²!tly˜ifŽ¡‘'¿«the›V`cop•²!yrigh“t˜holder‘Vanoti es˜y“ou˜of˜the˜violation‘Vab“y˜some˜reasonable˜means,‘fbthis˜is˜theŽ¡‘'¿« rst–Wtime“y•²!ou‘Wha“v“e›Wreceiv“ed˜notice˜of˜violation‘Wof˜this˜License˜(for˜an“y‘Ww“ork)˜from˜thatŽ¡‘'¿«cop•²!yrigh“t–Õúholder,‘áÞand“yš²!ou“cure“the“violation“prior‘Õùto“30“da˜ys“after“y˜our‘Õùreceipt“of“theŽ¡‘'¿«notice.ަ‘'¿«T‘ÿeermination–Nuof“yš²!our“righ˜ts“under“this“section‘NtdoMÞes“not“terminate“the“licenses“of“partiesŽ¡‘'¿«who›•qha•²!v“e˜receiv“ed˜copies˜or˜righ“ts˜from˜y“ou‘•punder˜this˜License.‘ªþIf˜y“our˜righ“ts˜ha“v“eŽ¡‘'¿«bšMÞeen–Îterminated“and“not‘Íp˜ermanenš²!tly“reinstated,‘:¹receipt“of“a“cop˜y“of“some‘Íor“all“of“theŽ¡‘'¿«same–¦fmaterial“doMÞes“not“givš²!e“y˜ou“an˜y“righ˜ts“to“use“it.ŽŽŒ‹CpŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:67ŽŽŽ ƒ33 ý ÌÍ‘‡“10.Ž‘'¿«FUTURE–¦fREVISIONS“OF“THIS“LICENSEŽ©33‘'¿«The›ÿaF‘ÿeree‘ÿbSoft•²!w“are˜F‘ÿeoundation‘ÿbma“y˜publish–ÿbnew,‘UŸrevised“v²!ersions˜of“the˜GNU‘ÿ F‘ÿereeޤ 33‘'¿«DoMÞcumenš²!tation–ÙâLicense‘Ùãfrom“time“to“time.‘xRSuc˜h“new‘Ùãv˜ersions“will“bMÞe“similar‘Ùãin“spiritŽ¡‘'¿«to– æthe“presenš²!t“v˜ersion,‘?…but“ma˜y“di er“in“detail“to“address‘ ånew“problems“or“concerns.Ž¡‘'¿«See‘¦fâhttp://www.gnu.org/copyleft/á.ަ‘'¿«Eac•²!h›ˆ×v“ersion˜of˜the˜License˜is˜giv“en˜a˜distinguishing˜v“ersion˜n“um“b•MÞer.‘ÔIf˜the˜Do“cumen²!tŽ¡‘'¿«spšMÞeci es–r”that“a“particular“n•²!um“b˜ered›r”v“ersion˜of˜this˜License˜\or˜an“y˜later˜v“ersion"Ž¡‘'¿«applies‘æQto–æPit,‘öLyš²!ou“ha˜v˜e–æQthe“option‘æPof“follo˜wing“the“terms›æPand“conditions“either˜of“thatŽ¡‘'¿«spMÞeci ed–Žvš²!ersion“or“of“an˜y“later“v˜ersion“that‘Žhas“bMÞeen“published“(not“as“a“draft)“b˜yŽ¡‘'¿«the›î!F‘ÿeree‘î"Soft•²!w“are˜F‘ÿeoundation.‘µIf‘î"the˜DošMÞcumen“t‘î"do˜es–î!not“sp˜ecify›î"a“v•²!ersion˜n“um“bMÞer‘î!ofŽ¡‘'¿«this–$œLicense,‘D)yš²!ou“ma˜y“c˜hoMÞose‘$an˜y“v˜ersion“ev˜er“published“(not“as“a“draft)“b˜y“the“F‘ÿereeŽ¡‘'¿«Soft•²!w“are–ÖUF‘ÿeoundation.‘m©If“the“DošMÞcumen²!t“sp˜eci es“that“a“proš²!xy‘ÖTcan“decide“whic˜h“futureŽ¡‘'¿«v²!ersions–é)of›é*this“License˜can“bMÞe“used,‘ùÚthat˜proš²!xy's“public“statemen˜t›é*of“acceptance˜of“aŽ¡‘'¿«v•²!ersion›¦fpMÞermanen“tly˜authorizes˜y“ou˜to˜c“hoMÞose˜that˜v“ersion˜for˜the˜DoMÞcumen“t.ަ‘‡“11.Ž‘'¿«RELICENSINGަ‘'¿«\Massivš²!e–{"Multiauthor‘{#CollabMÞoration“Site"“(or“\MMC‘zìSite")“means“an˜y‘{#W‘ÿeorld“WideŽ¡‘'¿«W‘ÿeeb–Leservš²!er“that“publishes“cop˜yrigh˜table‘Lfw˜orks“and“also“pro˜vides“prominen˜t“facilitiesŽ¡‘'¿«for›M an²!yb•MÞo“dy˜to˜edit˜those˜w•²!orks.‘ÀEA‘MŠpublic˜wiki˜that‘MŸan“yb•MÞo“dy˜can˜edit˜is˜an˜example˜ofŽ¡‘'¿«sucš²!h– Ya“serv˜er.‘µA‘ ?\Massiv˜e‘ XMultiauthor“CollabMÞoration"“(or“\MMC")‘ >con˜tained“in“theŽ¡‘'¿«site–¦fmeans“anš²!y“set“of“cop˜yrigh˜table“w˜orks“th˜us“published“on“the“MMC“site.ަ‘'¿«\CC-BY-SA"‘8¤means–8Éthe‘8ÊCreativš²!e“Commons“A˜ttribution-Share‘8ÊAlik˜e“3.0‘8Êlicense“pub-Ž¡‘'¿«lished›8b•²!y‘8Creativ“e˜Commons–8CorpMÞoration,‘N(a˜not-for-pro t“corpMÞoration˜with“a˜principalŽ¡‘'¿«place–òof“business“in“San“F‘ÿerancisco,‘7£California,‘7¢as“wš²!ell“as“future“cop˜yleft“v˜ersions“of“thatŽ¡‘'¿«license–¦fpublished“b²!y“that“same“organization.ަ‘'¿«\IncorpšMÞorate"–­zmeans“to“publish‘­yor“republish“a“Do˜cumen²!t,›¯?in“whole“or‘­yin“part,˜as“partŽ¡‘'¿«of–¦fanother“DoMÞcumen²!t.ަ‘'¿«An–&\MMC‘&)‘ùi‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ +$¬15Ž¡’óáðÉend-of-line‘T(C-e)‘Öê‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥¬14Ž¡’óáðÉexchange-point-and-mark–T(C-x“C-x)‘ÜK‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¬20ަ’óáðexpand-tilde‘þV‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘0¬6ŽŸŠ)’óáðë\FŽ©)’óáðÉforward-backward-delete-char‘T()‘§P‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Ù ¬16Ž¡’óáðÉforward-char‘T(C-f)‘ˆW‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘º¬14Ž¡’óáðÉforward-search-history‘T(C-s)‘“ ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÄĬ15Ž¡’óáðÉforward-word‘T(M-f)‘ˆW‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘º¬14ŽŸŠ(’óáðë\Hަ’óáð¬history-preserv•¾9e-pAÇoin“te/‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘–é¬6Ž¡’óáðÉhistory-search-backward‘T()!÷‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘S²¬15Ž¡’óáðÉhistory-search-forward‘T()pŠ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¢E¬15Ž¡’óáðhistory-size‘0¼‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘bv¬6ŽŸ ˜^’óáðÉhistory-substr-search-backward‘T() *‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘;å¬15Ž¡’óáðÉhistory-substr-search-forward‘T()X½‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Šx¬15Ž¡’óáðhorizon¾9tal-scroll-moAÇde‘Ù‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ Ѭ6ŽŸˆæ’óáðë\Iަ’óáð¬input-meta‘£9‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Ôó¬7Ž¡’óáðÉinsert-comment‘T(M-#)‘ùi‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ +$¬20Ž¡’óáðÉinsert-completions‘T(M-*)‘¿‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ðج19Ž¡’óáðisearc¾9h-terminators‘®ƒ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘à>¬7ŽŸˆæ’óáðë\Kަ’óáð¬k¾9eymap9r‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘k-¬7Ž¡’óáðÉkill-line‘T(C-k)‘t‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥Ë¬17Ž¡’óáðÉkill-region‘T()‘£‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ô^¬18ŽŸ ˜^’óáðÉkill-whole-line‘T()‘ˆW‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘º¬17Ž¡’óáðÉkill-word‘T(M-d)‘t‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥Ë¬17ŽŸŠ(’óáðë\Mަ’óáð¬mark-moAÇdi ed-lines‘’m‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Ä'¬7Ž¡’óáðmark-symlink¾9ed-directoriesDK‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘v¬7Ž¡’óáðmatc¾9h-hidden- les‘{P‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘­ ¬7ŽŽŽŽŒ‹G£HŸò‘GáF›ÿeunction–¦fand“V˜ariable“Index’œÃ71ŽŽŽ ƒ33 ý ÌÍ‘GÉmenu-complete‘T()‘%}‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘W8¬19ޤ „:‘GÉmenu-complete-backward‘T()pŠ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¢E¬19Ž¡‘Gmen•¾9u-complete-displa“y-pre x‘Úm‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ '¬8Ž¡‘Gmeta- ag‘«‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Qe¬7ŽŸ g‘Gë\NŽŸ ÿµ‘GÉnext-history‘T(C-n)‘ˆW‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘º¬15Ž¡‘GÉnon-incremental-forward-search-history‘T(M-n)Ž© €‘$ª?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘J»¬15Ž¡‘GÉnon-incremental-reverse-search-history‘T(M-p)ަ‘$ª?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘J»¬15ŽŸ$‘Gë\OŽ© ÿµ‘G¬output-meta‘Ýä‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ž¬8Ž¡‘GÉoverwrite-mode‘T()‘Öê‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥¬17ŽŸ f‘Gë\Pަ‘G¬page-completions‘œ3‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Íî¬8ŽŸ „9‘GÉpossible-completions‘T(M-?)!÷‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘S²¬19Ž¡‘GÉprefix-meta‘T(ESC)‘Öê‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥¬20Ž¡‘GÉprevious-history‘T(C-p)‘\C‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘þ¬14Ž¡‘GÉprint-last-kbd-macro‘T()‘ °‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘?k¬19ޤ`g‘Gë\Qަ‘GÉquoted-insert–T(C-q“or“C-v)‘Æ9‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘÷ô¬16Ž¡‘Gë\Rަ‘GÉre-read-init-file–T(C-x“C-r)‘¥…‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘×@¬19ޤ „:‘GÉreadline‘¹¼‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ëw¬22Ž¡‘GÉredraw-current-line‘T()‘\C‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘þ¬14Ž¡‘GÉreverse-search-history‘T(C-r)‘“ ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÄĬ15Ž¡‘Grev¾9ert-all-at-newline‘ÞV‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ¬8Ž¡‘GÉrevert-line‘T(M-r)‘Öê‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥¬20Ž¡‘GÉrl_add_defun‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬30Ž¡‘GÉrl_add_funmap_entry‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬34Ž¡‘GÉrl_add_undo‘Ü;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ö¬34Ž© „9‘GÉrl_alphabetic‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ38Ž¡‘GÉrl_already_prompted‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬26Ž¡‘GÉrl_attempted_completion_function‘”Ô‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Ƭ48Ž¡‘GÉrl_attempted_completion_over‘Àè‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ò£¬52Ž¡‘GÉrl_basic_quote_characters‘¬¡‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Þ\¬50Ž¡‘GÉrl_basic_word_break_characters#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘U}¬50Ž¡‘GÉrl_begin_undo_group‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬34Ž¡‘GÉrl_bind_key‘Ü;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ö¬31Ž¡‘GÉrl_bind_key_if_unbound‘Š"‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘»Ý¬32Ž¡‘GÉrl_bind_key_if_unbound_in_maprU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬32Ž¡‘GÉrl_bind_key_in_map‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬31ަ‘GÉrl_bind_keyseq‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬32Ž¡‘GÉrl_bind_keyseq_if_unbound‘¬¡‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Þ\¬32Ž¡‘GÉrl_bind_keyseq_if_unbound_in_map‘”Ô‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Ƭ32Ž¡‘GÉrl_bind_keyseq_in_map‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬32Ž¡‘GÉrl_binding_keymapÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬28Ž¡‘GÉrl_callback_handler_install‘{‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘A6¬40ŽŽ ý ÌÍ’óáðÉrl_callback_handler_remove‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ40ޤ §’óáðÉrl_callback_read_char‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬40Ž¡’óáðÉrl_catch_signalsS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬44Ž¡’óáðÉrl_catch_sigwinchÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬44Ž© §’óáðÉrl_change_environment‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬44Ž¡’óáðÉrl_char_is_quoted_p‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬48Ž¡’óáðÉrl_cleanup_after_signal;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘mJ¬45Ž¡’óáðÉrl_clear_historyS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬40Ž¡’óáðÉrl_clear_messageS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬35Ž¡’óáðÉrl_clear_pending_input‘Š"‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘»Ý¬37Ž¡’óáðÉrl_clear_signalsS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬45ަ’óáðÉrl_complete‘“X‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:ޑŬ46,‘T47Ž¡’óáðÉrl_complete_internal‘'H‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Y¬47Ž¡’óáðÉrl_completer_quote_charactersrU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬50Ž¡’óáðÉrl_completer_word_break_characters‘÷®‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘)i¬50Ž¡’óáðÉrl_completion_append_character#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘U}¬51Ž¡’óáðÉrl_completion_display_matches_hook‘÷®‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘)i¬50Ž¡’óáðÉrl_completion_entry_function‘†=‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘·ø¬46,‘T48ަ’óáðÉrl_completion_found_quote‘¬¡‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Þ\¬51Ž¡’óáðÉrl_completion_invoking_key‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ52Ž¡’óáðÉrl_completion_mark_symlink_dirs‘ãg‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ "¬51Ž¡’óáðÉrl_completion_matches‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬47Ž¡’óáðÉrl_completion_mode‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬47Ž¡’óáðÉrl_completion_query_items‘¬¡‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Þ\¬51Ž¡’óáðÉrl_completion_quote_characterrU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬51ަ’óáðÉrl_completion_suppress_appendrU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬51Ž¡’óáðÉrl_completion_suppress_quote‘Àè‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ò£¬51Ž¡’óáðÉrl_completion_type‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬52Ž¡’óáðÉrl_completion_word_break_hookrU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬50Ž¡’óáðÉrl_copy_keymap‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬31Ž¡’óáðÉrl_copy_text‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬36Ž¡’óáðÉrl_crlf‘O‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘: ¬35Ž¡’óáðÉrl_delete_text‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬36ަ’óáðÉrl_deprep_term_function;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘mJ¬28Ž¡’óáðÉrl_deprep_terminal‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬37Ž¡’óáðÉrl_ding‘O‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘: ¬38Ž¡’óáðÉrl_directory_completion_hook‘Àè‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ò£¬49Ž¡’óáðÉrl_directory_rewrite_hook;‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ49Ž¡’óáðÉrl_discard_keymapÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬31Ž¡’óáðÉrl_dispatching‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬25ަ’óáðÉrl_display_match_list‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬38Ž¡’óáðÉrl_display_promptÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬26Ž¡’óáðÉrl_do_undo–‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘NQ¬34Ž¡’óáðÉrl_done‘O‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘: ¬25Ž¡’óáðÉrl_echo_signal_char‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬45Ž¡’óáðÉrl_editing_mode‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬30Ž¡’óáðÉrl_end‘Vâ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ˆ¬25ަ’óáðÉrl_end_undo_groupÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬34Ž¡’óáðÉrl_erase_empty_line‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬25Ž¡’óáðÉrl_event_hook‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ27Ž¡’óáðÉrl_execute_next‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬37Ž¡’óáðÉrl_executing_keyS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬28Ž¡’óáðÉrl_executing_keymap‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬28Ž¡’óáðÉrl_executing_keyseq‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬28ަ’óáðÉrl_executing_macro‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬28Ž¡’óáðÉrl_expand_promptS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬36Ž¡’óáðÉrl_explicit_arg‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬30Ž¡’óáðÉrl_extend_line_buffer‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬38ŽŽŽŽŒ‹Hî—Ÿò‘GáF›ÿeunction–¦fand“V˜ariable“Index’œÃ72ŽŽŽ ƒ33 ý ÌÍ‘GÉrl_filename_completion_desired#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘U}¬52ޤ §‘GÉrl_filename_completion_function‘ãg‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ "¬47Ž¡‘GÉrl_filename_dequoting_function#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘U}¬48Ž¡‘GÉrl_filename_quote_characters‘Àè‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ò£¬50Ž© §‘GÉrl_filename_quoting_desired‘{‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘A6¬52Ž¡‘GÉrl_filename_quoting_function‘Àè‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ò£¬48Ž¡‘GÉrl_filename_rewrite_hook‘û4‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ,ï¬49Ž¡‘GÉrl_filename_stat_hook‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬49Ž¡‘GÉrl_forced_update_display‘û4‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ,ï¬35Ž¡‘GÉrl_free‘O‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘: ¬38Ž¡‘GÉrl_free_keymap‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬31ަ‘GÉrl_free_line_state‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬45Ž¡‘GÉrl_free_undo_listÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬34Ž¡‘GÉrl_function_dumper‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬33Ž¡‘GÉrl_function_of_keyseq‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬33Ž¡‘GÉrl_funmap_names‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬33Ž¡‘GÉrl_generic_bind‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬33Ž¡‘GÉrl_get_keymap‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ31ަ‘GÉrl_get_keymap_by_name‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬31Ž¡‘GÉrl_get_keymap_name‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬31Ž¡‘GÉrl_get_screen_size‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬45Ž¡‘GÉrl_get_termcap‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬39Ž¡‘GÉrl_getc‘O‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘: ¬37Ž¡‘GÉrl_getc_functionS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬27Ž¡‘GÉrl_gnu_readline_pÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬26ަ‘GÉrl_ignore_completion_duplicates‘ãg‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ "¬51Ž¡‘GÉrl_ignore_some_completions_function‘©‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÚÖ¬49Ž¡‘GÉrl_inhibit_completion‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬52Ž¡‘GÉrl_initialize‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ38Ž¡‘GÉrl_input_available_hook;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘mJ¬27Ž¡‘GÉrl_insert_completions‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬47Ž¡‘GÉrl_insert_text‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬36Ž¡‘GÉrl_instream‘Ü;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ö¬26ަ‘GÉrl_invoking_keyseqs‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬33Ž¡‘GÉrl_invoking_keyseqs_in_map‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ33Ž¡‘GÉrl_key_sequence_length‘Š"‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘»Ý¬28Ž¡‘GÉrl_kill_text‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬36Ž¡‘GÉrl_last_func‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬27Ž¡‘GÉrl_library_version‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬26Ž¡‘GÉrl_line_buffer‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬25ަ‘GÉrl_list_funmap_names‘'H‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Y¬33Ž¡‘GÉrl_macro_bind‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ39Ž¡‘GÉrl_macro_dumper‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬39Ž¡‘GÉrl_make_bare_keymap‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬30Ž¡‘GÉrl_make_keymap‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬31Ž¡‘GÉrl_mark‘O‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘: ¬25Ž¡‘GÉrl_message–‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘NQ¬35ަ‘GÉrl_modifying‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬34Ž¡‘GÉrl_named_functionÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬33Ž¡‘GÉrl_num_chars_to_read‘'H‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Y¬25Ž¡‘GÉrl_numeric_arg‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬30Ž¡‘GÉrl_on_new_line‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬35Ž¡‘GÉrl_on_new_line_with_prompt‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ35Ž¡‘GÉrl_outstream‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬26ަ‘GÉrl_parse_and_bindÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬33Ž¡‘GÉrl_pending_inputS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬25Ž¡‘GÉrl_point‘¹¼‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ëw¬25Ž¡‘GÉrl_possible_completions;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘mJ¬47ŽŽ ý ÌÍ’óáðÉrl_pre_input_hookÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬27ޤ “’óáðÉrl_prefer_env_winsize‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬26Ž© “’óáðÉrl_prep_term_function‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬28Ž¡’óáðÉrl_prep_terminalS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬37ަ’óáðÉrl_promptk)‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘œä¬26Ž¡’óáðÉrl_push_macro_input‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬36Ž¡’óáðÉrl_read_init_fileÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬33ަ’óáðÉrl_read_key‘Ü;‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ö¬36Ž¡’óáðÉrl_readline_nameS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬26Ž¡’óáðÉrl_readline_stateÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬28ަ’óáðÉrl_readline_version‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬26Ž¡’óáðÉrl_redisplay‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬35ަ’óáðÉrl_redisplay_function‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬27Ž¡’óáðÉrl_replace_line‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬38Ž¡’óáðÉrl_reset_after_signal‘ص‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ p¬45ަ’óáðÉrl_reset_line_state‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬35Ž¡’óáðÉrl_reset_screen_size‘'H‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Y¬45Ž¡’óáðÉrl_reset_terminalÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬37ަ’óáðÉrl_resize_terminal‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬45Ž¡’óáðÉrl_restore_promptÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬36ަ’óáðÉrl_restore_stateS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬38Ž¡’óáðÉrl_save_prompt‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬35Ž¡’óáðÉrl_save_state‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ38ަ’óáðÉrl_set_key–‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘NQ¬32Ž¡’óáðÉrl_set_keyboard_input_timeoutrU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬37ަ’óáðÉrl_set_keymap‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ31Ž¡’óáðÉrl_set_paren_blink_timeout‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ39Ž¡’óáðÉrl_set_prompt‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ36ަ’óáðÉrl_set_screen_size‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬45Ž¡’óáðÉrl_set_signals‘ð‚‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘"=¬45Ž¡’óáðÉrl_show_char‘¨‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¿c¬35ަ’óáðÉrl_signal_event_hook‘'H‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Y¬27Ž¡’óáðÉrl_sort_completion_matches‘^‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ɬ52ަ’óáðÉrl_special_prefixes‘uÛ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘§–¬50Ž¡’óáðÉrl_startup_hook‘¡ï‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Óª¬27Ž¡’óáðÉrl_stuff_char‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ37ަ’óáðÉrl_terminal_nameS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬26Ž¡’óáðÉrl_tty_set_default_bindings‘{‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘A6¬37ަ’óáðÉrl_tty_unset_default_bindingsrU‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¤¬37Ž¡’óáðÉrl_unbind_command_in_map‘û4‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ ,ï¬32Ž¡’óáðÉrl_unbind_function_in_map‘¬¡‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Þ\¬32ަ’óáðÉrl_unbind_key‘?‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘pЬ32Ž¡’óáðÉrl_unbind_key_in_map‘'H‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Y¬32Ž¡’óáðÉrl_username_completion_function‘ãg‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ "¬48ަ’óáðÉrl_variable_bindS\‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘…¬39Ž¡’óáðÉrl_variable_dumper‘Än‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ö)¬39ަ’óáðÉrl_variable_valueÉ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬39ŽŸŽ’óáðë\SŽŸ’óáðÉself-insert–T(a,“b,“A,“1,“!,“...Ž‘B)Vò‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ˆ­¬16Ž¡’óáðÉset-mark‘T(C-@)‘£‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ô^¬20ަ’óáðsho•¾9w-all-if-am“biguous‘ò‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘#ˬ8Ž¡’óáðsho¾9w-all-if-unmoAÇdi ed‘ÿO‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ 1 ¬8Ž¡’óáðsho¾9w-moAÇde-in-promptQ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘‚Ò¬8ަ’óáðskip-completed-text‘”¦‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Æ`¬8Ž¡’óáðÉskip-csi-sequence‘T()‘ùi‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ +$¬20Ž¡’óáðÉstart-kbd-macro–T(C-x“()‘ßÑ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ Œ¬19ŽŽŽŽŒ‹ILUŸò‘GáF›ÿeunction–¦fand“V˜ariable“Index’œÃ73ŽŽŽ ƒ33 þ$É” ÿ|9‘Gë\TŽ© ÿ¡‘GÉtab-insert‘T(M-TAB)‘ˆW‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘º¬16ޤ „0‘GÉtilde-expand‘T(M-~)‘ˆW‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘º¬20Ž¡‘GÉtranspose-chars‘T(C-t)‘ªÖ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:ޑܑ¬16Ž¡‘GÉtranspose-words‘T(M-t)‘ªÖ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:ޑܑ¬17ŽŸ`4‘Gë\Uަ‘GÉundo–T(C-_“or“C-x“C-u)É‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘6„¬20ŽŸ „1‘GÉuniversal-argument‘T()‘ªÖ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:ޑܑ¬18Ž¡‘GÉunix-filename-rubout‘T()‘ °‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘?k¬18Ž¡‘GÉunix-line-discard‘T(C-u)‘ °‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘?k¬17Ž¡‘GÉunix-word-rubout‘T(C-w)‘\C‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘þ¬17ŽŽ ÿ|9’óáðÉupcase-word‘T(M-u)‘Öê‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¥¬17ŽŸWë’óáðë\VŽŸ`\’óáðÉvi-editing-mode‘T(M-C-j)‘ °‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘?k¬21ޤ ³_’óáðvisible-stats%¶‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘Wq¬9ŽŸ¨’óáðë\YŽŸ`[’óáðÉyank‘T(C-y)‘î·‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ r¬18ŽŸ ³`’óáðÉyank-last-arg–T(M-.“or“M-_)‘Æ9‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘÷ô¬16Ž¡’óáðÉyank-nth-arg‘T(M-C-y)‘ùi‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ +$¬15Ž¡’óáðÉyank-pop‘T(M-y)‘£‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ô^¬18ŽŽŽŽŒøºùƒ’À;è…ïÿïÿMóeÂÖN  #× cmbx12óc·ág£ff cmmi12ó\ÂÖN ff cmbx12óSÂÖN G® cmbx12óJÂÖN ¼j cmbx12óEßê  b> ó3 cmmi10ó=ßê  b> ó3 cmmi10é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ À3á1ޤ 33‘0G1.1.1‘ ó5Ev•²!en“t‘¦fDesignators‘äÄ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ hûá1Ž¡‘0G1.1.2‘ ó5W‘ÿeord‘¦fDesignators‘·‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ;9á2Ž¡‘0G1.1.3‘ ó5MoMÞdi erswΑé˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘üá2ŽŸ33‘Gë\2‘32Programming–ffwith“GNU“History‘䯑32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘œë\4ަ‘!Gá2.1‘ ó5In²!troMÞduction–¦fto“History2@‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘¶xá4Ž¡‘!G2.2‘ ó5History‘¦fStorage‘Þ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ bÇá4Ž¡‘!G2.3‘ ó5History‘¦fF‘ÿeunctions‘yS‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ýŠá5Ž¡‘0G2.3.1‘ ó5Initializing–¦fHistory“and“State“Managemen²!tP©‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Ôáá5Ž¡‘0G2.3.2‘ ó5History–¦fList“Managemen²!t\s‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘àªá5Ž¡‘0G2.3.3‘ ó5Information–¦fAbMÞout“the“History“List‘¦[‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ *“á6Ž¡‘0G2.3.4‘ ó5Mo²!ving–¦fAround“the“History“List‘ô>‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ xvá6Ž¡‘0G2.3.5‘ ó5Searc²!hing–¦fthe“History“List‘8‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Ÿoá7Ž¡‘0G2.3.6‘ ó5Managing–¦fthe“History“File‘²‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 6Pá7Ž¡‘0G2.3.7‘ ó5History‘¦fExpansion5‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘¹Æá8Ž¡‘!G2.4‘ ó5History‘¦fV‘ÿeariablesQp‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:ޑՍá8Ž¡‘!G2.5‘ ó5History–¦fProgramming“Example‘£‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 'Qá10ŽŸ33‘Gë\Apps3endix‘ffAŽ‘|(·GNU–ffF‘þ¦free“Dos3cumenŒÌtation“LicenseŽŸ‘4‹w‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ Ë3ë\12ޤ ÿ‘GApps3endix‘ffBŽ‘|(·Concept‘ffIndex‘¡[‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ XÃë\20Ž¡‘GApps3endix‘ffCŽ‘|(·F›þ¦function–ffand“V˜ariable“Index‘âA‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž‘™©ë\21ŽŽŒ‹»Ÿò‘GáChapter–¦f1:‘ÝÝUsing“History“In•²!teractiv“ely’òcä1ŽŽŽ ƒ33 ý ÌÍ‘GëS1‘ ¸QUsing–z³History“In–ÿuÂteractiv“elyŽŽŸ^›‘GáThis–‚cš²!hapter‘describMÞes“ho˜w›to“use˜the“ó<Œ-ø ó3 cmcsc10çgnu˜áHistory“Library˜in•²!teractiv“ely‘ÿe,‘zfrom˜a‘‚user'sޤ 33‘GstandpšMÞoin²!t.‘ úIt–pshould“b˜e›oconsidered“a“user's˜guide.‘ úF‘ÿeor“information“on“using˜the“çgnuŽ¡‘GáHistory–5½Library“in“yš²!our“o˜wn“programs,‘Y’see“Chapter“2“[Programming“with“GNU‘5˜History],Ž¡‘Gpage‘¦f4.ŽŸ´‘Gë\1.1‘™History‘f@ExpansionŽŽŸ33‘GáThe–pHistory“library“pro²!vides›pa“history“expansion“feature“that“is˜similar“to“the“historyŽ¡‘Gexpansion–eproš²!vided“b˜y“âcshá.‘ ¶This“section“describMÞes“the“syn˜tax‘eused“to“manipulate“theŽ¡‘Ghistory‘¦finformation.ŽŸìU‘!GHistory–¨3expansions“inš²!troMÞduce“w˜ords“from“the“history“list“in˜to“the“input“stream,‘¨¦makingŽ¡‘Git–¦deasy“to›¦crepMÞeat“commands,‘¦einsert˜the“argumen²!ts“to“a“previous“command˜inš²!to“the“curren˜tŽ¡‘Ginput–¦fline,“or“ x“errors“in“previous“commands“quic²!kly‘ÿe.ŽŸìV‘!GHistory–g expansion“takš²!es“place“in“t˜w˜o“parts.‘ÉThe“ rst“is“to“determine“whic˜h“line“fromŽ¡‘Gthe–÷§history“list›÷¦should“bMÞe“used“during˜substitution.‘Ñ The˜second“is“to“select˜pMÞortions“ofŽ¡‘Gthat–¬line“for‘¬inclusion“inš²!to“the“curren˜t“one.‘î¸The“line“selected“from“the‘¬history“is“called“theŽ¡‘Gó:p®0J ó3 cmsl10åev•²!en“tá,‘Wðand–DSthe“pMÞortions›DRof“that“line“that˜are“acted“upMÞon“are˜called“åw²!ordsá.‘½,V‘ÿearious“åmoMÞdi ersŽ¡‘Gáare–õ-aš²!v‘ÿdDailable“to“manipulate“the“selected“w˜ords.‘Ê3The“line“is“brok˜en“in˜to“w˜ords“in“the“sameŽ¡‘Gfashion–¼Ëthat›¼ÊBash“doMÞes,‘ëƒso˜that“sev•²!eral˜w“ords‘¼Ësurrounded˜b“y–¼Ëquotes˜are“considered˜one“w²!ord.Ž¡‘GHistory–kãexpansions‘kâare“inš²!troMÞduced“b˜y›kâthe“appMÞearance˜of“the“history˜expansion“c²!haracter,Ž¡‘Gwhicš²!h–¦fis“`â!á'“b˜y“default.ŽŸ¹"‘GóeÂÖN  #× cmbx12ëe1.1.1‘d(Ev•–áen“t‘íMDesignatorsŽŽŸ³3‘GáAn›ï€ev•²!en“t˜designator–ïis˜a˜reference˜to“a˜command˜line˜en²!try˜in“the˜history˜list.‘¹,Unless˜theŽ¡‘Greference–¦fis“absolute,“ev•²!en“ts–¦fare“relativš²!e“to“the“curren˜t“pMÞosition“in“the“history“list.ŽŸHç‘Gâ!‘4IáStart–ña“history›ðsubstitution,‘Texcept“when˜follo•²!w“ed›ñb“y˜a˜space,–Stab,“the˜end˜ofŽ¡‘Kâ:the–¦fline,“or“`â=á'.ޤìV‘Gâ!ó=ßê“áin˜an²!y“ leŽ¡‘Gthat–ß?uses›ß>the“History˜library's“features.‘›{It˜supplies“extern˜declarations“for˜all“of˜the“library'sŽ¡‘Gpublic–¦ffunctions“and“v‘ÿdDariables,“and“declares“all“of“the“public“data“structures.ŽŸ‚Ù‘Gë\2.2‘™History‘f@StorageŽŽŸ33‘GáThe–¦fhistory“list“is“an“arraš²!y“of“history“en˜tries.‘ÝÝA“history“en˜try“is“declared“as“follo˜ws:ަ‘.ùœâtypedef–¿ªvoid“*histdata_t;ŽŸff‘.ùœtypedef–¿ªstruct“_hist_entry“{Ž¡‘:xðchar‘¿ª*line;Ž¡‘:xðchar‘¿ª*timestamp;Ž¡‘:xðhistdata_t‘¿ªdata;Ž¡‘.ùœ}‘¿ªHIST_ENTRY;ޤôŸ‘!GáThe–¦fhistory“list“itself“migh²!t“therefore“bMÞe“declared“asަ‘.ùœâHIST_ENTRY‘¿ª**the_history_list;Ž¡‘!GáThe–¦fstate“of“the“History“library“is“encapsulated“in²!to“a“single“structure:ަ‘.ùœâ/*ޤ 33‘4¹F*–¿ªA“structure“used“to“pass“around“the“current“state“of“the“history.Ž¡‘4¹F*/Ž¡‘.ùœtypedef–¿ªstruct“_hist_state“{Ž¡‘:xðHIST_ENTRY–¿ª**entries;“/*“Pointer“to“the“entries“themselves.“*/Ž¡‘:xðint–¿ªoffset;‘?‰x³HøŽ‘ÑtST“A“TE‘¦f*stateæ)Ž¡‘.ùœáSet–¦fthe“state“of“the“history“list“according“to“åstateá.ŽŸEï‘Gëe2.3.2‘d(History–íMList“Managemen–átŽŽŸ³3‘GáThese–×Ufunctions›×Vmanage“individual“en²!tries“on˜the“history“list,‘ã‘or“set˜parameters“managingŽ¡‘Gthe–¦flist“itself.ŽŸ¿’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉadd_history‘yšæ(åconst–¦fc²!har“*stringæ)Ž¡‘.ùœáPlace–™ååstring‘‰üáat“the›™äend“of˜the“history˜list.‘Ù²The˜assoMÞciated“data˜ eld“(if˜an²!y)“is˜set“toŽ¡‘.ùœâNULLá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉadd_history_time‘yšæ(åconst–¦fc²!har“*stringæ)Ž¡‘.ùœáChange–¦fthe“time“stamp“assoMÞciated“with“the“most“recenš²!t“history“en˜try“to“åstringá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ*“remove_history‘yšæ(åin•²!t‘¦fwhic“hæ)Ž¡‘.ùœáRemo•²!v“e–xDhistory“enš²!try“at“o set“åwhic˜h“áfrom‘xEthe“history‘ÿe.‘ SwThe“remo˜v˜ed“elemen˜t“isŽ¡‘.ùœreturned–¦fso“yš²!ou“can“free“the“line,“data,“and“con˜taining“structure.ŽŸ¿’“z[F‘ÿeunction]ŽŽ‘Gë@histdata_t‘LÉfree_history_entry‘yšæ(åHIST‘Ä>‰x³HøŽ‘ÑtENTR‘ÿeY‘¦f*histen²!tæ)Ž¡‘.ùœáF‘ÿeree–[üthe“history“enš²!try“åhisten˜t‘˜üáand“an˜y‘[ýhistory“library“priv‘ÿdDate“data“assoMÞciated“with“it.Ž¡‘.ùœReturns–¦fthe“application-spšMÞeci c“data“so“the“caller“can“disp˜ose“of“it.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ*“replace_history_entry‘yšæ(åin•²!t›¦fwhic“h,˜const˜c“har˜*line,Ž¡‘DGhistdata‘Ä>‰x³HøŽ‘Ñtt‘¦fdataæ)Ž¡‘.ùœáMakš²!e–PÍthe“history“en˜try“at“o set“åwhic˜h“áha˜v˜e“åline‘íÔáand‘PÌådataá.‘ÁUThis“returns“the“old“en˜tryŽ¡‘.ùœso–u the“caller“can“dispšMÞose“of“an²!y“application-sp˜eci c“data.‘IÉIn“the“case“of“an“in²!v‘ÿdDalidŽ¡‘.ùœåwhicš²!há,–¦fa“âNULL“ápMÞoin˜ter“is“returned.ŽŽŒ‹I”Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ6ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉclear_history‘yšæ(åv²!oidæ)ޤ 33‘.ùœáClear–¦fthe“history“list“bš²!y“deleting“all“the“en˜tries.Ž©fg’“z[F‘ÿeunction]ŽŽ‘Gë@void‘LÉstifle_history‘yšæ(åin²!t‘¦fmaxæ)Ž¡‘.ùœáSti e–¦fthe“history“list,“rememš²!bMÞering“only“the“last“åmax‘gÅáen˜tries.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉunstifle_history‘yšæ(åv²!oidæ)Ž¡‘.ùœáStop–H¨sti ing“the“history‘ÿe.‘¾žThis“returns“the“previously-set“maximš²!um“n˜um˜bMÞer“of“historyŽ¡‘.ùœenš²!tries–7 (as‘7set“b˜y“âstifle_history()á).‘¸ÀThe“v‘ÿdDalue‘7is“pMÞositiv˜e›7if“the“history˜w²!as“sti ed,Ž¡‘.ùœnegativš²!e–¦fif“it“w˜asn't.ŽŸff’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_is_stifled‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturns–¦fnon-zero“if“the“history“is“sti ed,“zero“if“it“is“not.ŽŸš‘Gëe2.3.3‘d(Information–íMAbiout“the“History“ListŽŽŸ³3‘GáThese–¦ffunctions“return“information“abMÞout“the“enš²!tire“history“list“or“individual“list“en˜tries.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ**“history_list‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturn–©ha“âNULL“áterminated“arraš²!y“of‘©iâHIST_ENTRY‘¦f*“áwhic˜h“is“the“curren˜t“input“history‘ÿe.Ž¡‘.ùœElemen²!t–¦f0“of“this“list“is“the“bMÞeginning“of“time.‘ÝÝIf“there“is“no“history‘ÿe,“return“âNULLá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉwhere_history‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturns–¦fthe“o set“of“the“currenš²!t“history“elemen˜t.ŽŸff’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ*“current_history‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturn–ûûthe“history“enš²!try‘ûüat“the“curren˜t“pMÞosition,‘as“determined“b˜y“âwhere_history()á.Ž¡‘.ùœIf–¦fthere“is“no“enš²!try“there,“return“a“âNULL“ápMÞoin˜ter.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ*“history_get‘yšæ(åin²!t‘¦fo setæ)Ž¡‘.ùœáReturn–þÕthe›þÔhistory“en²!try“at˜pMÞosition“åo setá,‘Tïstarting“from“âhistory_base˜á(see“Sec-Ž¡‘.ùœtion–ØÏ2.4“[History›ØÐV‘ÿeariables],‘åipage“8).‘uIf“there“is“no˜en²!try“there,‘åior“if˜åo set‘Ïáis“greaterŽ¡‘.ùœthan–¦fthe“history“length,“return“a“âNULL“ápMÞoin²!ter.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@time_t‘LÉhistory_get_time‘yšæ(åHIST‘Ä>‰x³HøŽ‘ÑtENTR‘ÿeY‘¦f*en²!tryæ)Ž¡‘.ùœáReturn–¦fthe“time“stamp“assoMÞciated“with“the“history“enš²!try“åen˜tryá.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_total_bytes‘yšæ(åv²!oidæ)Ž¡‘.ùœáReturn›PHthe‘PIn•²!um“bMÞer˜of˜b“ytes˜that–PIthe˜primary˜history“en²!tries˜are˜using.‘Á)This˜functionŽ¡‘.ùœreturns–¦fthe“sum“of“the“lengths“of“all“the“lines“in“the“history‘ÿe.ŽŸš‘Gëe2.3.4‘d(Mo–áving–íMAround“the“History“ListŽŽŸ³3‘GáThese–¦ffunctions“alloš²!w“the“curren˜t“index“in˜to“the“history“list“to“bMÞe“set“or“c˜hanged.ŽŸff’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_set_pos‘yšæ(åin²!t‘¦fpMÞosæ)Ž¡‘.ùœáSet–fthe›fcurren²!t“history˜o set“to“åpMÞosá,‘•ûan“absolute˜index“in²!to˜the“list.‘ÜReturns˜1“onŽ¡‘.ùœsuccess,–¦f0“if“åpšMÞos‘èáis“less“than“zero“or“greater“than“the“n•²!um“b˜er–¦fof“history“en²!tries.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ*“previous_history‘yšæ(åv²!oidæ)Ž¡‘.ùœáBacš²!k–u¦up‘u¥the“curren˜t“history›u¥o set“to˜the“previous“history˜en²!try‘ÿe,‘fand“return˜a“pMÞoin²!terŽ¡‘.ùœto–¦fthat“enš²!try‘ÿe.‘ÝÝIf“there“is“no“previous“en˜try‘ÿe,“return“a“âNULL“ápMÞoin˜ter.ŽŽŒ‹UΟò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ7ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@HIST_ENTRY–LÉ*“next_history‘yšæ(åv²!oidæ)ޤ 33‘.ùœáMo•²!v“e–E1the“currenš²!t‘E2history“o set“forw˜ard“to‘E2the“next“history“en˜try‘ÿe,‘läand‘E2return“the“aŽ¡‘.ùœpMÞoinš²!ter–¦fto“that“en˜try‘ÿe.‘ÝÝIf“there“is“no“next“en˜try‘ÿe,“return“a“âNULL“ápMÞoin˜ter.ŽŸŽ¡‘Gëe2.3.5‘d(Searc–áhing–íMthe“History“ListŽŽŸ³3‘GáThese–]functions“alloš²!w“searc˜hing“of“the“history“list“for“en˜tries“con˜taining“a“spMÞeci c“string.Ž¡‘GSearc•²!hing›LØma“y‘L×b•MÞe˜p“erformed‘L×b“oth˜forw•²!ard‘L×and˜bac“kw“ard˜from‘L×the˜curren“t‘L×history˜pMÞosition.Ž¡‘GThe–Ãsearcš²!h“ma˜y“bMÞe“åanc˜horedá,‘ÊÅmeaning“that“the“string“m˜ust“matc˜h“at“the“bMÞeginning“of“theŽ¡‘Ghistory‘¦fen²!try‘ÿe.Ž©Pv’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_search‘yšæ(åconst–¦fcš²!har“*string,“in˜t“directionæ)Ž¡‘.ùœáSearc²!h–wSthe“history›wRfor“åstringá,‘€½starting“at“the˜curren²!t“history“o set.‘Î,If˜ådirection“áis“lessŽ¡‘.ùœthan–ÍY0,‘then“the›ÍXsearc²!h“is˜through“previous˜en²!tries,‘otherwise˜through“subsequen²!tŽ¡‘.ùœenš²!tries.‘â÷If–¨åstring‘˜2áis“found,‘¨†then“the‘¨curren˜t“history“index“is›¨set“to“that˜history“en²!try‘ÿe,Ž¡‘.ùœand–ºthe“v‘ÿdDalue›¹returned“is“the“o set˜in“the“line“of˜the“enš²!try“where“åstring‘óÑáw˜as“found.Ž¡‘.ùœOtherwise,–¦fnothing“is“c²!hanged,“and“a“-1“is“returned.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_search_prefix‘yšæ(åconst–¦fcš²!har“*string,“in˜t“directionæ)Ž¡‘.ùœáSearc²!h–ß2the›ß1history“for“åstringá,‘-dstarting˜at“the“curren²!t˜history“o set.‘ˆ@The˜searc²!h“isŽ¡‘.ùœanc•²!hored:‘Τmatc“hing›‡ôlines‘‡óm“ust˜bMÞegin˜with˜åstringá.‘Ó·If˜ådirection‘‡óáis˜less˜than˜0,‘Ž then˜theŽ¡‘.ùœsearcš²!h–Áâis“through‘Áãprevious“en˜tries,‘ÈÁotherwise“through‘Áãsubsequen˜t“en˜tries.‘0RIf“åstring‘±úáisŽ¡‘.ùœfound,‘  then–÷athe›÷bcurren²!t“history“index“is˜set“to“that˜en²!try‘ÿe,‘  and“the“return“v‘ÿdDalue˜is“0.Ž¡‘.ùœOtherwise,–¦fnothing“is“c²!hanged,“and“a“-1“is“returned.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_search_pos‘yšæ(åconst–¦fcš²!har“*string,“in˜t“direction,“in˜t“pMÞosæ)Ž¡‘.ùœáSearc²!h–×for“åstring‘ ïáin“the“history“list,›:sstarting‘Öat“åpMÞosá,˜an“absolute“index“in²!to“the“list.Ž¡‘.ùœIf–TÓådirection‘TÒáis“negativš²!e,‘€mthe“searc˜h‘TÒproMÞceeds“bac˜kw˜ard‘TÒfrom“åpMÞosá,‘€motherwise“forw˜ard.Ž¡‘.ùœReturns–Jsthe“absolute“index“of‘Jrthe“history“elemenš²!t“where“åstring‘:‹áw˜as“found,‘³uor“-1Ž¡‘.ùœotherwise.ŽŸŽ¡‘Gëe2.3.6‘d(Managing–íMthe“History“FileŽŽŸ³3‘GáThe–1History“library›1can“read“the“history“from“and˜write“it“to“a“ le.‘¶ÃThis“section“doMÞcumen²!tsŽ¡‘Gthe–¦ffunctions“for“managing“a“history“ le.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉread_history‘yšæ(åconst–¦fc²!har“* lenameæ)Ž¡‘.ùœáAdd›Žgthe‘Žfcon•²!ten“ts˜of˜å lename–+máto˜the˜history˜list,‘“3a˜line‘Žfat˜a˜time.‘ÕÝIf˜å lename“áis˜âNULLá,Ž¡‘.ùœthen–¦fread“from“â~/.historyá.‘ÝÝReturns“0“if“successful,“or“âerrno“áif“not.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉread_history_range‘yšæ(åconst–¦fcš²!har“* lename,“in˜t“from,“in˜t“toæ)Ž¡‘.ùœáRead–Y a“range›Y of“lines“from“å lenameá,‘h„adding“them“to˜the“history“list.‘ÄStart“reading“atŽ¡‘.ùœline–&=åfrom“áand“end‘&>at“åtoá.›³%If“åfrom“áis“zero,‘?ßstart“at“the“bMÞeginning.˜If“åto‘³áis“less“than“åfromá,Ž¡‘.ùœthen–ù«read“un²!til“the“end“of“the“ le.‘׫If“å lename‘–²áis“âNULLá,‘|then“read“from“â~/.historyá.Ž¡‘.ùœReturns–¦f0“if“successful,“or“âerrno“áif“not.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉwrite_history‘yšæ(åconst–¦fc²!har“* lenameæ)Ž¡‘.ùœáW‘ÿerite–#%the“currenš²!t“history“to‘#$å lenameá,‘BUo˜v˜erwriting“å lename‘À,áif‘#$necessary‘ÿe.‘TIf“å lenameŽ¡‘.ùœáis–B¹âNULLá,‘V©then›Bºwrite“the˜history“list˜to“â~/.historyá.‘¼¤Returns“0˜on“success,‘V©or˜âerrno“áonŽ¡‘.ùœa–¦fread“or“write“error.ŽŽŒ‹cŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ8ŽŽŽ ƒ33 ý ÌÍ’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉappend_history‘yšæ(åin•²!t›¦fnelemen“ts,˜const˜c“har˜* lenameæ)ޤ 33‘.ùœáAppMÞend–)‚the“last›)ånelemen²!ts‘áof“the“history“list“to˜å lenameá.‘g1If“å lename‘Ɖáis˜âNULLá,‘JIthenŽ¡‘.ùœappMÞend–¦fto“â~/.historyá.‘ÝÝReturns“0“on“success,“or“âerrno“áon“a“read“or“write“error.ŽŸu1’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_truncate_file‘yšæ(åconst–¦fcš²!har“* lename,“in˜t“nlinesæ)Ž¡‘.ùœáT‘ÿeruncate–Ÿáthe“history“ le“å lenameá,‘Þ@lea²!ving“only“the“last“ånlines‘cálines.‘ÊOIf“å lename‘<èáisŽ¡‘.ùœâNULLá,–¦fthen“â~/.history“áis“truncated.‘ÝÝReturns“0“on“success,“or“âerrno“áon“failure.ŽŸ ÿ‘Gëe2.3.7‘d(History‘íMExpansionŽŽŸ³3‘GáThese–¦ffunctions“implemen²!t“history“expansion.ŽŸu2’“z[F‘ÿeunction]ŽŽ‘Gë@int‘LÉhistory_expand‘yšæ(åcš²!har–¦f*string,“c˜har“**outputæ)Ž¡‘.ùœáExpand–!)åstringá,‘?Ùplacing“the“result“inš²!to“åoutputá,‘?Úa‘!(pMÞoin˜ter“to“a“string“(see“Section“1.1Ž¡‘.ùœ[History–¦fIn²!teraction],“page“1).‘ÝÝReturns:Ž©d²‘.ùœâ0‘4IáIf–Åno›Äexpansions“toMÞok˜place“(or,‘¶if˜the“only˜c²!hange“in˜the“text˜w²!as“theŽ¡‘hÊremoš²!v‘ÿdDal‘œwof–œxescapMÞe“c˜haracters–œwpreceding“the›œxhistory“expansion˜c²!haracter);ޤT2‘.ùœâ1‘4Iáif–¦fexpansions“did“tak²!e“place;Ž¡‘.ùœâ-1‘.QŸáif–¦fthere“w²!as“an“error“in“expansion;Ž¡‘.ùœâ2‘4Iáif–O$the›O#returned“line˜should“bMÞe˜displa•²!y“ed,–`—but‘O$not˜executed,“as–O$with˜the“â:pޤ 33‘hÊámošMÞdi er–¦f(see“Section“1.1.3“[Mo˜di ers],“page“2).ަ‘.ùœIf–¦fan“error“oMÞccurred“in“expansion,“then“åoutput‘ãfáconš²!tains“a“descriptiv˜e“error“message.Ž©u1’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ*“get_history_event‘yšæ(åconst–¦fcš²!har“*string,“in˜t“*cindex,“in˜t“qc˜haræ)Ž¡‘.ùœáReturns–vøthe“text“of‘vùthe“history“ev•²!en“t–vøbMÞeginning“at“åstring‘gâ+“å*cindexá.‘ O”å*cindex‘8WáisŽ¡‘.ùœmošMÞdi ed–…to“p˜oinš²!t“to‘…after“the“ev˜en˜t“spMÞeci er.‘ÒÀA˜t“function“en˜try‘ÿe,‘‹»åcindex‘FnápMÞoin˜ts“to“theŽ¡‘.ùœindex›Nãin²!to–Näåstring‘>ûáwhere“the˜history“ev•²!en“t˜sp•MÞeci cation˜b“egins.‘×Våqc•²!har‘ áis‘Näa˜c“haracterŽ¡‘.ùœthat–:Xis“allo•²!w“ed–:Xto“end“the“ev•²!en“t‘:YspMÞeci cation–:Xin“addition“to“the“\normal"“terminatingŽ¡‘.ùœc²!haracters.ަ’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ**“history_tokenize‘yšæ(åconst–¦fc²!har“*stringæ)Ž¡‘.ùœáReturn–µ‘an“arraš²!y‘µ’of“tok˜ens“parsed“out“of–µ’åstringá,‘¹[m˜uc˜h“as–µ‘the“shell“migh˜t.‘ _The“tok˜ensŽ¡‘.ùœare–«6split›«7on“the˜c²!haracters“in˜the“åhistory‘Ä>‰x³HøŽ–Ñtw²!ord‘Ä>‰x³HøŽ“delimiters‘¹áv‘ÿdDariable,‘¬jand˜shell‘«6quotingŽ¡‘.ùœcon•²!v“en“tions–¦fare“obMÞey²!ed.Ž©u2’“z[F‘ÿeunction]ŽŽ‘Gë@char–LÉ*“history_arg_extract‘yšæ(åinš²!t–¦f rst,“in˜t“last,“const“c˜har“*stringæ)Ž¡‘.ùœáExtract–ÙHa›ÙGstring“segmen²!t“consisting˜of“the“å rst‘Gáthrough“ålast‘Háargumen•²!ts˜presen“t‘ÙHinŽ¡‘.ùœåstringá.‘ÝÝArgumen²!ts–¦fare“split“using“âhistory_tokenizeá.ŽŸ1~‘Gë\2.4‘™History‘f@V‘þ¦fariablesŽŽŸ33‘GáThis–:‚section“describšMÞes“the“externally-visible“v‘ÿdDariables“exp˜orted“b²!y“the“çgnu“áHistory“Library‘ÿe.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉhistory_baseŽ¡‘.ùœáThe–¦flogical“o set“of“the“ rst“en²!try“in“the“history“list.ŽŸu1’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉhistory_lengthŽ¡‘.ùœáThe›¦fn•²!um“bMÞer˜of˜en“tries˜curren“tly˜stored˜in˜the˜history˜list.ŽŽŒ‹ rÁŸò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ9ŽŽŽ ƒ33 ý ÌÍ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉhistory_max_entriesޤ 33‘.ùœáThe›…Zmaxim•²!um‘…Yn“um“bMÞer˜of˜history›…Yen“tries.‘ z¹This˜m“ust–…ZbMÞe“c²!hanged˜using“âstifle_Ž¡‘.ùœhistory()á.Ž©M’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉhistory_write_timestampsŽ¡‘.ùœáIf–\ˆnon-zero,‘Êtimestamps›\‡are“written“to˜the“history˜ le,‘Êso˜they“can˜bMÞe“preserv²!edŽ¡‘.ùœbMÞet•²!w“een–¦fsessions.‘ÝÝThe“default“v‘ÿdDalue“is“0,“meaning“that“timestamps“are“not“sa•²!v“ed.ŽŸ@‘.ùœThe–üúcurrenš²!t“timestamp“format“uses‘üûthe“v‘ÿdDalue“of“åhistory‘Ä>‰x³HøŽ–Ñtcommen˜t‘Ä>‰x³HøŽ“c˜har‘Æ#áto‘üúdelimitŽ¡‘.ùœtimestamp–£en²!tries›¤in“the“history˜ le.‘ +•If“that“v‘ÿdDariable“doMÞes˜not“ha•²!v“e–£a˜v‘ÿdDalue“(theŽ¡‘.ùœdefault),–¦ftimestamps“will“not“bMÞe“written.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char‘LÉhistory_expansion_charŽ¡‘.ùœáThe–;ycš²!haracter“that“in˜troMÞduces‘;xa“history“ev˜en˜t.›The‘;xdefault“is“`â!á'.˜Setting‘;xthis“to“0Ž¡‘.ùœinhibits–¦fhistory“expansion.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char‘LÉhistory_subst_charŽ¡‘.ùœáThe–ä|cš²!haracter‘ä}that“in˜v˜ok˜es“w˜ord“substitution›ä}if“found“at“the˜start“of“a“line.‘˜ TheŽ¡‘.ùœdefault–¦fis“`â^á'.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char‘LÉhistory_comment_charŽ¡‘.ùœáDuring–‰átokš²!enization,‘¿if“this“c˜haracter“is“seen“as“the“ rst“c˜haracter“of“a“w˜ord,‘¿thenŽ¡‘.ùœit–4and›4all“subsequen•²!t˜c“haracters–4up“to˜a“newline˜are“ignored,‘—ysuppressing“historyŽ¡‘.ùœexpansion–¦ffor“the“remainder“of“the“line.‘ÝÝThis“is“disabled“b²!y“default.ŽŸL’–3[V‘ÿeariable]ŽŽ‘Gë@char–LÉ*“history_word_delimitersŽ¡‘.ùœáThe–M÷cš²!haracters“that‘Møseparate“tok˜ens“for“âhistory_tokenize()á.‘ÀcThe“default‘Møv‘ÿdDalue“is“â"Ž¡‘.ùœ\t\n()<>;&|"á.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char–LÉ*“history_search_delimiter_charsŽ¡‘.ùœáThe– îlist› ïof“additional“c•²!haracters˜whic“h– îcan“delimit˜a“history“searc²!h˜string,‘; in“additionŽ¡‘.ùœto–¦fspace,“T‘ÿeAB,“`â:á'“and“`â?á'“in“the“case“of“a“substring“searcš²!h.‘ÝÝThe“default“is“empt˜y‘ÿe.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@char–LÉ*“history_no_expand_charsŽ¡‘.ùœáThe–”klist“of“cš²!haracters“whic˜h“inhibit‘”lhistory“expansion“if“found“immediately“follo˜wingŽ¡‘.ùœåhistory‘Ä>‰x³HøŽ–Ñtexpansion‘Ä>‰x³HøŽ“c²!hará.‘ÝÝThe–¦fdefault“is“space,“tab,“newline,“carriage“return,“and“`â=á'.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@int‘LÉhistory_quotes_inhibit_expansionŽ¡‘.ùœáIf–Wnon-zero,‘ˆÁsingle-quoted›Xw²!ords“are“not˜scanned“for˜the“history˜expansion“c²!haracter.Ž¡‘.ùœThe–¦fdefault“v‘ÿdDalue“is“0.ަ’–3[V‘ÿeariable]ŽŽ‘Gë@rl_linebuf_func_t–LÉ*“history_inhibit_expansion_functionŽ¡‘.ùœáThis–?should›>bMÞe“set“to˜the“address˜of“a“function˜that“takš²!es“t˜w˜o‘>argumen˜ts:‘‘Ža“âchar‘¦f*Ž¡‘.ùœá(åstring‘ðá)–0nand“an›0oâint“áindex“in²!to“that˜string“(åi‘”ƒá).‘¶ŠIt˜should“return“a“non-zero˜v‘ÿdDalue“if“theŽ¡‘.ùœhistory–õexpansion›ôstarting“at˜åstring[i]‘àöáshould˜not“b•MÞe˜p“erformed;‘Žzero–õif˜the“expansionŽ¡‘.ùœshould–ÖObMÞe›ÖPdone.‘m™It“is˜in²!tended“for˜use“b²!y˜applications“lik²!e“Bash˜that“use˜the“historyŽ¡‘.ùœexpansion–¦fc²!haracter“for“additional“purpMÞoses.‘ÝÝBy“default,“this“v‘ÿdDariable“is“set“to“âNULLá.ŽŽŒ‹ €„Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“History’лî10ŽŽŽ ƒ33 ý ÌÍ‘Gë\2.5‘™History–f@Programming“ExampleŽŽŸ33‘GáThe–¦ffollo²!wing“program“demonstrates“simple“use“of“the“çgnu“áHistory“Library‘ÿe.ޤ‘.ùœóߤN cmtt9É#include‘¹–Ž© €‘.ùœ#include‘¹–Ž¡‘.ùœmain–¹–(argc,“argv)ަ‘F™Šint‘¹–argc;ަ‘F™Šchar‘¹–**argv;ަ‘.ùœ{ަ‘8lÈchar–¹–line[1024],“*t;ަ‘8lÈint–¹–len,“done“=“0;Ž¡‘8lÈline[0]–¹–=“0;Ž¡‘8lÈusing_history‘¹–();ަ‘8lÈwhile‘¹–(!done)ަ‘Aßô{ަ‘KS printf–¹–("history$“");ަ‘KS fflush‘¹–(stdout);ަ‘KS t–¹–=“fgets“(line,“sizeof“(line)“-“1,“stdin);ަ‘KS if–¹–(t“&&“*t)ަ‘TÆL{ަ‘^9xlen–¹–=“strlen“(t);ަ‘^9xif–¹–(t[len“-“1]“==“'\n')ަ‘g¬¤t[len–¹–-“1]“=“'\0';ަ‘TÆL}Ž¡‘KS if‘¹–(!t)ަ‘TÆLstrcpy–¹–(line,“"quit");Ž¡‘KS if‘¹–(line[0])ަ‘TÆL{ަ‘^9xchar‘¹–*expansion;ަ‘^9xint‘¹–result;Ž¡‘^9xresult–¹–=“history_expand“(line,“&expansion);ަ‘^9xif‘¹–(result)ަ‘g¬¤fprintf–¹–(stderr,“"%s\n",“expansion);Ž¡‘^9xif–¹–(result“<“0“||“result“==“2)ަ‘g¬¤{ަ‘qÐfree‘¹–(expansion);ަ‘qÐcontinue;ަ‘g¬¤}Ž¡‘^9xadd_history‘¹–(expansion);ަ‘^9xstrncpy–¹–(line,“expansion,“sizeof“(line)“-“1);ަ‘^9xfree‘¹–(expansion);ަ‘TÆL}Ž¡‘KS if–¹–(strcmp“(line,“"quit")“==“0)ަ‘TÆLdone–¹–=“1;ަ‘KS else–¹–if“(strcmp“(line,“"save")“==“0)ަ‘TÆLwrite_history‘¹–("history_file");ަ‘KS else–¹–if“(strcmp“(line,“"read")“==“0)ަ‘TÆLread_history‘¹–("history_file");ަ‘KS else–¹–if“(strcmp“(line,“"list")“==“0)ŽŽŒ‹ ­Ÿò‘GáChapter–¦f2:‘ÝÝProgramming“with“GNU“History’лî11ŽŽŽ ƒ33 ý ÌÍ‘TÆLÉ{ޤ €‘^9xregister–¹–HIST_ENTRY“**the_list;Ž¡‘^9xregister–¹–int“i;ŽŸ‘^9xthe_list–¹–=“history_list“();Ž¡‘^9xif‘¹–(the_list)Ž¡‘g¬¤for–¹–(i“=“0;“the_list[i];“i++)Ž¡‘qÐprintf–¹–("%d:“%s\n",“i“+“history_base,“the_list[i]->line);Ž¡‘TÆL}Ž¡‘KS else–¹–if“(strncmp“(line,“"delete",“6)“==“0)Ž¡‘TÆL{Ž¡‘^9xint‘¹–which;Ž¡‘^9xif–¹–((sscanf“(line“+“6,“"%d",“&which))“==“1)Ž¡‘g¬¤{Ž¡‘qÐHIST_ENTRY–¹–*entry“=“remove_history“(which);Ž¡‘qÐif‘¹–(!entry)Ž¡‘z’üfprintf–¹–(stderr,“"No“such“entry“%d\n",“which);Ž¡‘qÐelseŽ¡‘z’ü{Ž¡’„(free‘¹–(entry->line);Ž¡’„(free‘¹–(entry);Ž¡‘z’ü}Ž¡‘g¬¤}Ž¡‘^9xelseŽ¡‘g¬¤{Ž¡‘qÐfprintf–¹–(stderr,“"non-numeric“arg“given“to“`delete'\n");Ž¡‘g¬¤}Ž¡‘TÆL}Ž¡‘Aßô}Ž¡‘.ùœ}ŽŽŒ‹ “ÆŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:12ŽŽŽ ƒ33 ý ÌÍ‘GëSApp›Š=endix‘záA‘ ¸QGNU–z³F‘þaGree“Do˜cumen‘ÿuÂtation“LicenseŽŽŸƒª’£¤AáV‘ÿeersion–¦f1.3,“3“No•²!v“em“bMÞer‘¦f2008Ž©Q‘.ùœCop•²!yrigh“t‘±ž«‚cŽŽŽ‘¦fê ŽŽŽŽ‘@á2000,–¦f2001,“2002,“2007,“2008“F›ÿeree“Soft•²!w“are–¦fF˜oundation,“Inc.ޤ 33‘.ùœâhttp://fsf.org/ŽŸff‘.ùœáEv•²!ery“one–¦fis“pMÞermitted“to“copš²!y“and“distribute“v˜erbatim“copiesŽ¡‘.ùœof–¦fthis“license“doMÞcumenš²!t,“but“c˜hanging“it“is“not“allo˜w˜ed.ަ‘-0.Ž‘'¿«PREAMBLEަ‘'¿«The–vQpurpMÞose›vRof“this˜License“is˜to“mak²!e“a˜man²!ual,›ªLtextb•MÞo“ok,˜or–vQother‘vRfunctional“andŽ¡‘'¿«useful–žïdoMÞcumen²!t›žîåfree‘;öáin“the“sense˜of“freedom:‘Ú!to“assure“ev•²!ery“one‘žïthe˜e ectiv“e‘žïfreedomŽ¡‘'¿«to–Æ9cop²!y›Æ:and“redistribute“it,‘Î.with“or˜without“moMÞdifying“it,‘Î.either“commercially˜or“non-Ž¡‘'¿«commercially–ÿe.‘cÏSecondarily“,‘Hàthis–(aLicense›(bpreserv²!es“for“the˜author“and“publisher˜a“w•²!a“yŽ¡‘'¿«to–W9get“credit›W8for“their“w²!ork,‘ƒmwhile“not“bMÞeing“considered˜respšMÞonsible“for“mo˜di cationsŽ¡‘'¿«made–¦fb²!y“others.ަ‘'¿«This–È/License›È0is“a“kind“of˜\cop•²!yleft",‘ô whic“h–È/means˜that“deriv‘ÿdDativš²!e“w˜orks“of‘È0the“doMÞcumen˜tŽ¡‘'¿«m•²!ust›õthemselv“es–ôbMÞe˜free˜in˜the“same˜sense.‘ ‰It˜complemen²!ts˜the“GNU‘ÙGeneral˜PublicŽ¡‘'¿«License,–¦fwhicš²!h“is“a“cop˜yleft“license“designed“for“free“soft˜w˜are.ަ‘'¿«W‘ÿee›‹#ha•²!v“e˜designed˜this˜License˜in˜order˜to˜use˜it‘‹"for˜man“uals˜for˜free˜soft“w“are,‘—bMÞecauseŽ¡‘'¿«free›?soft•²!w“are˜needs˜free‘>doMÞcumen“tation:‘³a˜free˜program˜should‘>come˜with˜man“ualsŽ¡‘'¿«pro²!viding–urthe›ussame“freedoms˜that“the˜soft•²!w“are–urdoMÞes.‘ÍŒBut˜this“License˜is“not˜limited“toŽ¡‘'¿«soft•²!w“are›­âman“uals;‘±¡it–­ãcan˜bMÞe“used˜for“an²!y˜textual“w²!ork,‘¯Áregardless“of˜sub‘›»ject“matter˜orŽ¡‘'¿«whether–Ç2it“is“published“as“a“prin²!ted“b•MÞo“ok.‘@BW‘ÿee–Ç2recommend“this“License“principally“forŽ¡‘'¿«w²!orks–¦fwhose“purpMÞose“is“instruction“or“reference.ަ‘-1.Ž‘'¿«APPLICABILITY–¦fAND“DEFINITIONSŽŸP‘'¿«This–Ì>License‘Ì=applies“to“anš²!y“man˜ual‘Ì=or“other“w˜ork,‘³in“an˜y–Ì=medium,‘´that“con˜tains‘Ì>aŽ¡‘'¿«notice–ýplaced›ýb²!y“the˜cop•²!yrigh“t‘ýholder˜sa“ying–ýit˜can“bMÞe˜distributed“under˜the“termsŽ¡‘'¿«of–€†this“License.‘l=Sucš²!h“a“notice“gran˜ts“a“w˜orld-wide,‘· ro˜y˜alt˜y-free“license,‘·unlimited“inŽ¡‘'¿«duration,‘â to–o·use›o¶that“w²!ork“under˜the“conditions“stated˜herein.‘ 9ÏThe“\DoMÞcumen²!t",Ž¡‘'¿«bMÞeloš²!w,‘tkrefers–gìto“an˜y“suc˜h‘gíman˜ual“or“w˜ork.‘É An˜y“mem˜bMÞer“of“the‘gípublic“is“a“licensee,‘tkandŽ¡‘'¿«is–ÿaddressed“as“\yš²!ou".‘¦@Y‘ÿeou“accept“the“license“if“y˜ou“cop˜y‘ÿe,‘ îmoMÞdify“or“distribute“the“w˜orkŽ¡‘'¿«in–¦fa“w•²!a“y–¦frequiring“pMÞermission“under“cop•²!yrigh“t‘¦fla“w.ަ‘'¿«A‘ ¦\MošMÞdi ed– ÀV‘ÿeersion"‘ Áof“the“Do˜cumenš²!t“means‘ Áan˜y“w˜ork“con˜taining“the‘ ÁDoMÞcumen˜t“orŽ¡‘'¿«a–‚hpMÞortion›‚gof“it,‘¹heither˜copied“v²!erbatim,‘¹hor˜with“moMÞdi cations“and/or˜translated“in²!toŽ¡‘'¿«another‘¦flanguage.ަ‘'¿«A‘ž\Secondary–ÀSection"“is›Áa“named˜appMÞendix“or˜a“fron²!t-matter˜section“of˜the“DoMÞcumen²!tŽ¡‘'¿«that–Ž/deals“exclusiv²!ely›Ž0with“the“relationship“of˜the“publishers“or“authors˜of“the“DoMÞcumen²!tŽ¡‘'¿«to–z the‘zDoMÞcumenš²!t's“o˜v˜erall›zsub‘›»ject“(or˜to“related“matters)˜and“con²!tains˜nothing“thatŽ¡‘'¿«could–Ø®fall›دdirectly“within“that“o•²!v“erall˜sub‘›»ject.‘tµ(Th“us,‘%@if˜the›Ø®DoMÞcumen“t˜is˜in‘دpart˜aŽ¡‘'¿«textb•MÞo“ok›Õ†of–Õ…mathematics,‘ÿMa“Secondary˜Section˜ma²!y˜not“explain˜an²!y˜mathematics.)‘˜=TheŽ¡‘'¿«relationship–GÞcould“bMÞe“a“matter“of“historical“connection“with“the“sub‘›»ject“or“with“relatedŽ¡‘'¿«matters,–jor‘Bøof›B÷legal,“commercial,‘jphilosophical,“ethical˜or˜p•MÞolitical‘Bøp“osition˜regardingŽ¡‘'¿«them.ަ‘'¿«The›r\In•²!v‘ÿdDarian“t–sSections"˜are˜certain˜Secondary“Sections˜whose˜titles˜are“designated,‘0ÖasŽ¡‘'¿«bMÞeing–2Dthose›2Cof“In•²!v‘ÿdDarian“t–2DSections,‘I}in“the“notice˜that“sa²!ys˜that“the“DoMÞcumen²!t˜is“releasedŽŽŒ‹ —Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:13ŽŽŽ ƒ33 ý ÌÍ‘'¿«under–S5this“License.‘Â"If›S4a“section“doMÞes“not“ t˜the“abMÞo•²!v“e–S5de nition“of“Secondary˜then“it“isޤ 33‘'¿«not›Óallo•²!w“ed˜to‘ÓŽbMÞe˜designated˜as˜In“v‘ÿdDarian“t.‘eSThe˜DoMÞcumen“t˜ma“y‘ÓŽcon“tain˜zero˜In“v‘ÿdDarian“tŽ¡‘'¿«Sections.‘¢ÄIf–õthe“DošMÞcumen²!t“do˜es‘õnot“idenš²!tify“an˜y“In˜v‘ÿdDarian˜t“Sections“then‘õthere“are“none.Ž©&g‘'¿«The›f­\Co•²!v“er–f¬T‘ÿeexts"˜are˜certain˜short“passages˜of˜text˜that“are˜listed,‘–¾as˜F‘ÿeron•²!t-Co“v“erŽ¡‘'¿«T›ÿeexts–-or“Bac•²!k-Co“v“er‘,T˜exts,‘"8in–-the“notice“that‘,saš²!ys“that“the“DoMÞcumen˜t‘,is“released“underŽ¡‘'¿«this›’License.‘¯AA‘nF‘ÿeron•²!t-Co“v“er˜T‘ÿeext˜ma“y˜bMÞe˜at˜most˜5›‘w“ords,‘6Šand˜a›’Bac“k-Co“v“er˜T‘ÿeext˜ma“yŽ¡‘'¿«bMÞe–¦fat“most“25“w²!ords.ŽŸ&h‘'¿«A‘C¦\T‘ÿeransparen•²!t"›CÎcop“y˜of‘CÏthe˜DoMÞcumen“t˜means˜a‘CÏmac“hine-readable˜cop“y‘ÿe,‘k(represen“tedŽ¡‘'¿«in–Jma“format›Jnwhose“spMÞeci cation“is“a²!v‘ÿdDailable“to“the˜general“public,‘snthat˜is“suitable“forŽ¡‘'¿«revising–Îàthe‘ÎßdoMÞcumenš²!t“straigh˜tforw˜ardly“with›Îßgeneric“text˜editors“or“(for˜images“com-Ž¡‘'¿«pMÞosed–ÚÃof›ÚÄpixels)“generic˜pain²!t“programs˜or“(for˜dra²!wings)“some˜widely“a•²!v‘ÿdDailable˜dra“wingŽ¡‘'¿«editor,‘…úand–}ßthat“is“suitable“for“input“to‘}àtext“formatters“or“for“automatic“translation“toŽ¡‘'¿«a–9Ov‘ÿdDariet²!y“of›9Nformats“suitable“for“input“to“text˜formatters.‘¹A‘93cop²!y“made˜in“an“otherwiseŽ¡‘'¿«T‘ÿeransparen²!t–„æ le“format›„åwhose“markup,‘¼†or“absence˜of“markup,‘¼†has˜bMÞeen“arranged“toŽ¡‘'¿«th•²!w“art–0ûor›0üdiscourage“subsequen²!t“moMÞdi cation˜b²!y“readers“is˜not“T‘ÿeransparen²!t.‘¶ºAn“imageŽ¡‘'¿«format– Éis“not“T‘ÿeransparenš²!t“if“used‘ Èfor“an˜y“substan˜tial“amoun˜t“of“text.‘MA‘ ©cop˜y“that“isŽ¡‘'¿«not–¦f\T‘ÿeransparen²!t"“is“called“\Opaque".ަ‘'¿«Examples–cXof“suitable›cWformats“for“T‘ÿeransparen²!t“copies“include˜plain“çasci>Ki“áwithoutŽ¡‘'¿«markup,‘„ÂT‘ÿeexinfo–XIinput“format,›„ÁLaT‘þ,³Ÿ[wEŽ‘B X‘XJinput“format,˜óKñ`y cmr10«SGML“áor‘XJ«XML“áusing“a“publiclyŽ¡‘'¿«a²!v‘ÿdDailable–«DTDá,‘üand›Âstandard-conforming“simple˜«HTMLá,‘üP²!ostScript“or˜«PDF“ádesignedŽ¡‘'¿«for–˜.hš²!uman“moMÞdi cation.‘³4Examples“of“transparen˜t“image“formats“include“«PNGá,‘ÔŸ«X¸ãCFŽ¡‘'¿«áand–¢«JPGá.‘ÐáOpaque“formats“include“proprietary‘¢formats“that“can“bMÞe“read“and“editedŽ¡‘'¿«only–sbš²!y‘sproprietary“w˜ord›sproMÞcessors,‘&J«SGML“áor˜«XML“áfor˜whic²!h“the˜«DTD“áand/orŽ¡‘'¿«pro•MÞcessing›W*to“ols˜are˜not‘W)generally˜a•²!v‘ÿdDailable,‘CYand˜the˜mac“hine-generated˜«HTMLá,Ž¡‘'¿«Pš²!ostScript–¦for“«PDF“áproMÞduced“b˜y“some“w˜ord“prošMÞcessors“for“output“purp˜oses“only‘ÿe.ަ‘'¿«The–Ü\Title›ÛP²!age"“means,‘<ùfor˜a“prin²!ted˜b•MÞo“ok,‘<ùthe–Ütitle˜page“itself,‘<ùplus˜sucš²!h“follo˜wingŽ¡‘'¿«pages–RÃas“are“needed“to“hold,–c}legibly‘ÿe,“the–RÃmaterial“this‘RÂLicense“requires“to“appMÞear“in“theŽ¡‘'¿«title–1.page.‘¶ÊF‘ÿeor“w²!orks›1-in“formats˜whic²!h“do“not˜ha•²!v“e‘1.an“y˜title–1.page“as˜sucš²!h,‘HŸ\Title“P˜age"Ž¡‘'¿«means–­Žthe“text“near›­the“most“prominen²!t“appMÞearance“of“the˜w²!ork's“title,‘¯Xpreceding“theŽ¡‘'¿«bšMÞeginning–¦fof“the“b˜o˜dy“of“the“text.ަ‘'¿«The–)—\publisher"“means‘)˜anš²!y“pMÞerson“or“en˜tit˜y“that“distributes‘)˜copies“of“the“DoMÞcumen˜tŽ¡‘'¿«to–¦fthe“public.ŽŸ&h‘'¿«A›ísection–ò\En²!titled“XYZ"˜means“a“named›ósubunit“of“the“DoMÞcumen²!t˜whose“title“eitherŽ¡‘'¿«is–Uªprecisely‘U©XYZ›U•or“con²!tains“XYZ˜in“paren•²!theses›U©follo“wing–Uªtext“that˜translates“XYZ‘U•inŽ¡‘'¿«another–þ¯language.‘¥ö(Here“XYZ‘þ„stands“for“a“spšMÞeci c“section“name“men²!tioned“b˜elo•²!w,‘ :suc“hŽ¡‘'¿«as›aa\Ac•²!kno“wledgemen“ts",–o/\Dedications",“\Endorsemen²!ts",“or˜\History".)‘ÆÛT‘ÿeo˜\Preserv²!eŽ¡‘'¿«the–›Title"›šof“suc²!h˜a“section“when˜y²!ou“moMÞdify˜the“DoMÞcumen²!t“means˜that“it˜remains“aŽ¡‘'¿«section–¦f\En²!titled“XYZ"“according“to“this“de nition.ަ‘'¿«The–SuDoMÞcumenš²!t“ma˜y“include“W‘ÿearran˜t˜y“Disclaimers“next‘Svto“the“notice“whic˜h“states“thatŽ¡‘'¿«this–¹License“applies‘ºto“the“DoMÞcumenš²!t.‘×These“W‘ÿearran˜t˜y“Disclaimers‘ºare“considered“toŽ¡‘'¿«bMÞe–„ýincluded›„þb²!y“reference“in“this˜License,‘¼£but“only“as“regards˜disclaiming“w•²!arran“ties:Ž¡‘'¿«an²!y–nother›n‘implication“that˜these“W‘ÿearran•²!t“y˜Disclaimers‘nma“y˜ha“v“e‘nis˜v“oid–nand˜has“noŽ¡‘'¿«e ect–¦fon“the“meaning“of“this“License.ަ‘-2.Ž‘'¿«VERBA‘ÿeTIM‘¦fCOPYINGŽŽŒ‹§ÖŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:14ŽŽŽ ƒ33 ý ÌÍ‘'¿«Y‘ÿeou–’ùmaš²!y“cop˜y“and“distribute“the“DoMÞcumen˜t“in“an˜y“medium,‘Îeither“commercially“orޤ 33‘'¿«noncommercially‘ÿe,›zªpro²!vided–that‘this“License,˜the‘cop•²!yrigh“t–notices,˜and‘the“licenseŽ¡‘'¿«notice–Ksa²!ying›K this“License˜applies“to˜the“DoMÞcumen²!t“are˜reproMÞduced“in˜all“copies,‘t7andŽ¡‘'¿«that–1'yš²!ou“add“no‘1(other“conditions“whatsoMÞev˜er“to“those“of“this“License.‘¶ÉY‘ÿeou“ma˜y“not“useŽ¡‘'¿«tec²!hnical–ò“measures›ò”to“obstruct˜or“con²!trol˜the“reading˜or“further˜cop²!ying“of˜the“copiesŽ¡‘'¿«y•²!ou›òÇmak“e‘òÈor˜distribute.‘¡þHo“w“ev“er,‘´y“ou˜ma“y˜accept‘òÈcompMÞensation˜in˜exc“hange‘òÈfor˜copies.Ž¡‘'¿«If–Þy²!ou›Þdistribute“a“large˜enough“n•²!um“bMÞer˜of–Þcopies“y•²!ou˜m“ust–Þalso“follo²!w˜the“conditionsŽ¡‘'¿«in–¦fsection“3.Ž©"#‘'¿«Y‘ÿeou–}ìma²!y“also›}ëlend“copies,‘¹7under“the“same“conditions“stated˜abMÞo•²!v“e,‘¹8and˜y“ou›}ìma“y˜publiclyŽ¡‘'¿«displa²!y‘¦fcopies.ަ‘-3.Ž‘'¿«COPYING–¦fIN“QUANTITYަ‘'¿«If–Ãyš²!ou‘Âpublish“prin˜ted›Âcopies“(or˜copies˜in“media“that˜commonly“ha•²!v“e˜prin“ted˜co“v“ers)‘ÃofŽ¡‘'¿«the‘Ñ.DošMÞcumen•²!t,‘Ûßn“um“b˜ering–Ñ.more“than–Ñ-100,‘Ûàand“the–Ñ.Do˜cumen²!t's“license‘Ñ-notice“requiresŽ¡‘'¿«Co•²!v“er›ÜT‘ÿeexts,‘<ùy“ou‘Ûm“ust˜enclose˜the˜copies‘Ûin˜co“v“ers˜that˜carry–ÿe,‘<ùclearly‘Ûand˜legibly“,‘<ùallŽ¡‘'¿«these›´@Co•²!v“er˜T–ÿeexts:‘ùF“ron•²!t-Co“v“er˜T‘ÿeexts˜on˜the˜fron“t˜co“v“er,‘÷µand˜Bac“k-Co“v“er˜T‘ÿeexts˜onŽ¡‘'¿«the›öbac•²!k‘õco“v“er.‘Ñ Both˜co“v“ers˜m“ust–õalso˜clearly˜and˜legibly“iden•²!tify˜y“ou˜as‘õthe˜publisherŽ¡‘'¿«of›,these–+copies.‘H/The“fron•²!t˜co“v“er˜m“ust˜presen“t–+the˜full˜title“with˜all˜w²!ords˜of“the˜titleŽ¡‘'¿«equally–³xprominenš²!t“and‘³yvisible.‘Y‘ÿeou“ma˜y›³yadd“other“material“on“the˜co•²!v“ers–³xin“addition.Ž¡‘'¿«Cop•²!ying›Y4with‘Y3c“hanges˜limited–Y3to˜the“co•²!v“ers,‘…ças–Y3long˜as“they˜preserv²!e“the˜title“of˜theŽ¡‘'¿«DošMÞcumen²!t–uand“satisfy“these“conditions,‘¨Åcan“b˜e“treated‘uas“vš²!erbatim“cop˜ying“in“otherŽ¡‘'¿«respMÞects.ަ‘'¿«If–î|the“required›î}texts“for“either“co•²!v“er–î|are“toMÞo˜vš²!oluminous“to“ t“legibly‘ÿe,‘‚y˜ou“should“putŽ¡‘'¿«the–ò rst›òones“listed“(as“man²!y˜as“ t“reasonably)“on˜the“actual“co•²!v“er,‘ùand˜con“tin“ue‘òtheŽ¡‘'¿«rest–¦fonš²!to“adjacen˜t“pages.ŽŸ""‘'¿«If–?|y²!ou›?{publish“or˜distribute“Opaque˜copies“of˜the“DoMÞcumen•²!t˜n“um“bMÞering–?|more˜than“100,Ž¡‘'¿«y•²!ou›\3m“ust˜either‘\4include˜a˜mac“hine-readable˜T‘ÿeransparen“t˜cop“y˜along‘\4with˜eac“h˜OpaqueŽ¡‘'¿«cop²!y‘ÿe,‘[>or›7state–7in“or˜with“eacš²!h“Opaque“cop˜y‘7a“computer-net˜w˜ork“loMÞcation‘7from“whic˜hŽ¡‘'¿«the›éSgeneral‘éRnet•²!w“ork-using˜public˜has‘éRaccess˜to˜do“wnload˜using‘éRpublic-standard˜net“w“orkŽ¡‘'¿«protoMÞcols–¬=a“complete‘¬>T‘ÿeransparenš²!t“cop˜y“of“the“DoMÞcumen˜t,‘í³free“of“added“material.‘ïcIfŽ¡‘'¿«yš²!ou–ªuse“the‘ªlatter“option,‘êùy˜ou“m˜ust‘ªtak˜e“reasonably“pruden˜t“steps,‘êøwhen“y˜ou“bMÞeginŽ¡‘'¿«distribution–—lof›—mOpaque“copies˜in“quan•²!tit“y‘ÿe,‘Ó®to–—lensure“that˜this“T‘ÿeransparen•²!t˜cop“y‘—lwillŽ¡‘'¿«remain– Cthš²!us“accessible‘ Dat“the“stated“loMÞcation“un˜til‘ Dat“least“one“y˜ear“after‘ Dthe“last“timeŽ¡‘'¿«yš²!ou–k‘distribute‘k’an“Opaque“cop˜y‘k’(directly“or“through“y˜our‘k’agen˜ts“or“retailers)‘k’of“thatŽ¡‘'¿«edition–¦fto“the“public.ަ‘'¿«It–&Nis“requested,‘FHbut“not“required,‘FGthat“yš²!ou“con˜tact“the“authors“of“the“DoMÞcumen˜t“w˜ellŽ¡‘'¿«bMÞefore–oÅredistributing‘oÄanš²!y“large“n˜um˜bMÞer›oÄof“copies,‘z²to˜giv²!e“them˜a“c²!hance“to˜proš²!vide“y˜ouŽ¡‘'¿«with–¦fan“upšMÞdated“v²!ersion“of“the“Do˜cumen²!t.ަ‘-4.Ž‘'¿«MODIFICA‘ÿeTIONSަ‘'¿«Y‘ÿeou–*maš²!y“cop˜y“and›)distribute“a“MoMÞdi ed“V‘ÿeersion“of“the˜DoMÞcumen²!t“under“the“conditionsŽ¡‘'¿«of–…šsections›…›2“and˜3“abMÞo•²!v“e,‘¿]pro“vided˜that‘…šy“ou˜release–…šthe˜MoMÞdi ed“V‘ÿeersion˜under“preciselyŽ¡‘'¿«this–{ÞLicense,‘„`with“the›{ßMoMÞdi ed“V‘ÿeersion“ lling˜the“role“of˜the“DoMÞcumen•²!t,‘„`th“us‘{ÞlicensingŽ¡‘'¿«distribution–¸and“mošMÞdi cation‘¹of“the“Mo˜di ed“V‘ÿeersion“to“who˜ev²!er‘¹p˜ossesses“a“cop²!y“ofŽ¡‘'¿«it.‘ÝÝIn–¦faddition,“yš²!ou“m˜ust“do“these“things“in“the“MoMÞdi ed“V‘ÿeersion:ަ‘*òÄA.Ž‘=nUse–ípin“the“Title“Pš²!age“(and“on“the“co˜v˜ers,‘ÿ2if“an˜y)“a“title“distinct“from“that“of“theŽ¡‘=nDoMÞcumenš²!t,‘+and–ˆfrom“those“of“previous“v˜ersions‘‡(whic˜h“should,‘+if“there“w˜ere“an˜y‘ÿe,ŽŽŒ‹º:Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:15ŽŽŽ ƒ33 ý ÌÍ‘=nbšMÞe–Âølisted“in“the“History‘Â÷section“of“the“Do˜cumenš²!t).‘3“Y‘ÿeou“ma˜y‘Â÷use“the“same“title“asޤ 33‘=na–¦fprevious“vš²!ersion“if“the“original“publisher“of“that“v˜ersion“giv˜es“pMÞermission.Ž©€‘+gB.Ž‘=nList–ª\on“the“Title›ª[P²!age,‘«Zas“authors,‘«Yone“or“more“pMÞersons˜or“en²!tities“respMÞonsible“forŽ¡‘=nauthorship–"of›"the“moMÞdi cations“in˜the“MoMÞdi ed˜V‘ÿeersion,‘<|together“with“at˜least“ v²!eŽ¡‘=nof–߸the“principal“authors“of“the“DoMÞcumenš²!t“(all“of“its“principal“authors,‘uif“it“has“few˜erŽ¡‘=nthan–¦f vš²!e),“unless“they“release“y˜ou“from“this“requiremen˜t.ŽŸ€‘+@¢C.Ž‘=nState–±Óon›±Òthe“Title˜page“the˜name“of˜the“publisher˜of“the˜MoMÞdi ed“V‘ÿeersion,‘´­as“theŽ¡‘=npublisher.ަ‘*ËÕD.Ž‘=nPreservš²!e–¦fall“the“cop˜yrigh˜t“notices“of“the“DoMÞcumen˜t.ަ‘+µoE.Ž‘=nAdd–Äean›Ädappropriate“cop•²!yrigh“t˜notice‘Äefor˜y“our‘ÄemoMÞdi cations˜adjacen“t–Äeto˜the“otherŽ¡‘=ncop•²!yrigh“t‘¦fnotices.ŽŸ€‘,LF.Ž‘=nInclude,›hSimmediately–XÎafter“the“cop•²!yrigh“t–XÎnotices,˜a“license“notice“giving“the“publicŽ¡‘=npMÞermission–ïËto›ïÊuse“the˜MoMÞdi ed“V‘ÿeersion“under˜the“terms˜of“this“License,‘Pin˜the“formŽ¡‘=nshoš²!wn–¦fin“the“Addendum“bMÞelo˜w.ަ‘*‘nG.Ž‘=nPreserv²!e–¼min›¼lthat“license˜notice“the˜full“lists˜of“In•²!v‘ÿdDarian“t˜Sections–¼mand˜required“Co•²!v“erŽ¡‘=nT‘ÿeexts–¦fgivš²!en“in“the“DoMÞcumen˜t's“license“notice.ަ‘*òÄH.Ž‘=nInclude–¦fan“unaltered“cop²!y“of“this“License.ŽŸ€‘/4çI.Ž‘=nPreservš²!e–Ú†the‘Ú‡section“En˜titled‘Ú‡\History",‘çŽPreserv˜e“its›Ú‡Title,‘çŽand“add˜to“it˜an“itemŽ¡‘=nstating–_ at›_ least“the˜title,–mQy²!ear,“new˜authors,“and–_ publisher˜of“the˜MoMÞdi ed“V‘ÿeersionŽ¡‘=nas–ÄXgivš²!en“on‘ÄWthe“Title“P˜age.‘7³If‘ÄWthere“is“no“section“En˜titled“\History"‘ÄWin“the“DoMÞcu-Ž¡‘=nmenš²!t,‘O#create‘-eone–-dstating“the“title,‘O$y˜ear,–O#authors,“and‘-epublisher–-dof“the“DoMÞcumen˜tŽ¡‘=nas–Wgivš²!en“on“its“Title“P˜age,‘ƒFthen“add“an“item“describing“the“MoMÞdi ed“V‘ÿeersion“asŽ¡‘=nstated–¦fin“the“previous“sen²!tence.ަ‘-ˆ¢J.Ž‘=nPreservš²!e–æthe“net˜w˜ork“loMÞcation,‘õúif“an˜y‘ÿe,‘õúgiv˜en“in“the“DoMÞcumen˜t‘æfor“public“access“toŽ¡‘=na–½…T‘ÿeransparenš²!t“cop˜y‘½†of“the“DoMÞcumen˜t,‘ÃMand“lik˜ewise“the“net˜w˜ork‘½†loMÞcations“giv˜en“inŽ¡‘=nthe–Í„DoMÞcumenš²!t‘̓for“previous“v˜ersions‘̓it“w˜as“based“on.‘S6These‘̓ma˜y“bMÞe“placed‘̓in“theŽ¡‘=n\History"–8section.‘¦ÎY‘ÿeou›9ma²!y“omit˜a“net•²!w“ork–8loMÞcation˜for“a˜w²!ork“that˜w²!as“publishedŽ¡‘=nat–Kleast“four‘Ky²!ears“bšMÞefore“the“Do˜cumen²!t“itself,‘t@or“if“the“original‘Kpublisher“of“theŽ¡‘=nvš²!ersion–¦fit“refers“to“giv˜es“pMÞermission.ަ‘*¤åK.Ž‘=nF‘ÿeor–Ùranš²!y“section“En˜titled“\Ac˜kno˜wledgemen˜ts"“or“\Dedications",‘oPreserv˜e“the“TitleŽ¡‘=nof›/Rthe–/Qsection,‘G#and“preserv²!e˜in˜the“section˜all˜the“substance˜and“tone˜of˜eac²!h“of˜theŽ¡‘=ncon•²!tributor›¦fac“kno“wledgemen“ts˜and/or˜dedications˜giv“en˜therein.ަ‘,Q*L.Ž‘=nPreservš²!e–?Ôall‘?Óthe“In˜v‘ÿdDarian˜t›?ÓSections“of˜the“DoMÞcumen²!t,‘f/unaltered˜in“their˜text“andŽ¡‘=nin›PÜtheir–PÝtitles.‘Ý@Section“n•²!um“bMÞers˜or‘PÝthe˜equiv‘ÿdDalen“t–PÝare˜not“considered˜part“of˜theŽ¡‘=nsection‘¦ftitles.ŽŸ€‘)M.Ž‘=nDelete–°5anš²!y“section“En˜titled‘°4\Endorsemen˜ts".‘ûJSuc˜h“a“section‘°4ma˜y“not“bMÞe“includedŽ¡‘=nin–¦fthe“MoMÞdi ed“V‘ÿeersion.ަ‘*òÄN.Ž‘=nDo–g!not›g"retitle“an²!y˜existing“section“to˜bMÞe“Enš²!titled“\Endorsemen˜ts"›g"or“to˜con ict“inŽ¡‘=ntitle–¦fwith“anš²!y“In˜v‘ÿdDarian˜t“Section.ަ‘*¤åO.Ž‘=nPreserv•²!e›¦fan“y˜W‘ÿearran“t“y˜Disclaimers.ŽŸÌΑ'¿«If–Øthe›×MoMÞdi ed“V‘ÿeersion˜includes“new˜fron²!t-matter“sections˜or“appMÞendices˜that“qualifyŽ¡‘'¿«as–XSecondary›X Sections“and“con²!tain“no˜material“copied“from˜the“DoMÞcumen•²!t,‘g´y“ou˜ma“y‘XatŽ¡‘'¿«y²!our–ãkoption›ãldesignate“some˜or“all“of˜these“sections˜as“in•²!v‘ÿdDarian“t.‘”íT‘ÿeo˜do–ãkthis,‘ò­add“theirŽŽŒ‹ÌœŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:16ŽŽŽ ƒ33 ý ÌÍ‘'¿«titles–@«to“the“list›@¬of“In•²!v‘ÿdDarian“t–@«Sections“in“the“MoMÞdi ed“V‘ÿeersion's“license˜notice.‘¬¬Theseޤ 33‘'¿«titles–¦fmš²!ust“bMÞe“distinct“from“an˜y“other“section“titles.Ž©(ö‘'¿«Y‘ÿeou–pmaš²!y‘qadd“a“section“En˜titled‘q\Endorsemen˜ts",‘s²pro˜vided“it“con˜tains‘qnothing“butŽ¡‘'¿«endorsemen•²!ts›‘of‘‘y“our˜MoMÞdi ed˜V‘ÿeersion˜b“y‘‘v‘ÿdDarious˜parties|for˜example,‘•Zstatemen“ts˜ofŽ¡‘'¿«pšMÞeer–D review“or‘Dthat“the“text“has“b˜een‘Dappro•²!v“ed›D b“y˜an˜organization‘Das˜the˜authoritativ“eŽ¡‘'¿«de nition–¦fof“a“standard.ŽŸ(÷‘'¿«Y‘ÿeou–f,ma²!y›f-add“a˜passage“of˜up“to˜ vš²!e“w˜ords›f-as“a˜F›ÿeron•²!t-Co“v“er–f,T˜ext,‘sand›f-a“passage˜of“upŽ¡‘'¿«to–@25“wš²!ords‘@Žas“a“Bac˜k-Co˜v˜er“T‘ÿeext,‘Tìto›@Žthe“end“of“the˜list“of“Co•²!v“er–@T‘ÿeexts˜in“the“MoMÞdi edŽ¡‘'¿«V›ÿeersion.‘Õ+Only–N+one‘N*passage“of“F˜ron•²!t-Co“v“er‘N*T˜ext–N+and“one‘N*of“Bac•²!k-Co“v“er‘N+T˜ext‘N*ma“y‘N+bMÞeŽ¡‘'¿«added–NÁbš²!y“(or“through“arrangemen˜ts“made“b˜y)‘NÂan˜y“one“en˜tit˜y‘ÿe.‘À¦If“the“DoMÞcumen˜t“alreadyŽ¡‘'¿«includes›Éa‘Èco•²!v“er˜text–Èfor˜the˜same“co•²!v“er,‘/!previously˜added˜b“y‘Èy“ou˜or‘Èb“y˜arrangemen“tŽ¡‘'¿«made–:Çbš²!y“the“same“en˜tit˜y“y˜ou“are“acting“on“bMÞehalf“of,‘_ßy˜ou“ma˜y‘:Ènot“add“another;‘„÷butŽ¡‘'¿«y•²!ou›)ma“y˜replace–*the˜old˜one,‘2on˜explicit˜pMÞermission˜from˜the“previous˜publisher˜thatŽ¡‘'¿«added–¦fthe“old“one.ަ‘'¿«The–^author(s)›]and“publisher(s)˜of“the“DoMÞcumen²!t˜do“not“b²!y˜this“License˜giv²!e“pMÞermissionŽ¡‘'¿«to–¤juse“their›¤knames“for“publicit²!y“for“or˜to“assert“or“imply“endorsemen²!t˜of“an²!y“MoMÞdi edŽ¡‘'¿«V‘ÿeersion.ŽŸ(÷‘-5.Ž‘'¿«COMBINING‘¦fDOCUMENTSަ‘'¿«Y‘ÿeou›¦Çma•²!y‘¦Ècom“bine˜the˜DoMÞcumen“t–¦Èwith˜other“doMÞcumen²!ts˜released˜under“this˜License,Ž¡‘'¿«under–—sthe“terms›—tde ned“in“section“4˜abšMÞo•²!v“e–—sfor“mo˜di ed“v•²!ersions,‘Ó·pro“vided–—sthat“y²!ouŽ¡‘'¿«include– in› the“com²!bination“all“of˜the“In•²!v‘ÿdDarian“t– Sections˜of“all“of“the˜original“doMÞcumen²!ts,Ž¡‘'¿«unmoMÞdi ed,‘L3and–5¦list›5§them“all˜as“In•²!v‘ÿdDarian“t–5¦Sections˜of“yš²!our“com˜bined‘5§w˜ork“in‘5§its“licenseŽ¡‘'¿«notice,–¦fand“that“yš²!ou“preserv˜e“all“their“W‘ÿearran˜t˜y“Disclaimers.ަ‘'¿«The–¢@comš²!bined“w˜ork“need“only“con˜tain“one“cop˜y“of“this“License,‘£and“m˜ultiple“iden˜ticalŽ¡‘'¿«In•²!v‘ÿdDarian“t–æÝSections“maš²!y“bMÞe“replaced“with“a“single‘æÜcop˜y‘ÿe.‘ŸBIf“there“are“m˜ultiple“In˜v‘ÿdDarian˜tŽ¡‘'¿«Sections–6Çwith›6Èthe“same˜name“but˜di erenš²!t“con˜ten˜ts,‘Mmak˜e›6Èthe“title˜of“eac•²!h˜suc“h‘6ÇsectionŽ¡‘'¿«unique–bb²!y›cadding“at˜the“end˜of“it,‘1"in“paren²!theses,‘1!the˜name“of˜the“original˜author“orŽ¡‘'¿«publisher–of“that›~section“if“kno²!wn,‘!­or“else“a“unique˜n•²!um“bMÞer.‘¦‘Mak“e˜the–same“adjustmen²!tŽ¡‘'¿«to–î‡the›î†section“titles“in˜the“list“of˜In•²!v‘ÿdDarian“t–î‡Sections“in“the˜license“notice“of˜the“com²!binedŽ¡‘'¿«w²!ork.ŽŸ(÷‘'¿«In›ö"the‘ö#com•²!bination,‘Jy“ou˜m“ust‘ö#com“bine˜an“y‘ö#sections˜En“titled–ö#\History"˜in“the˜v‘ÿdDari-Ž¡‘'¿«ous–ÜÛoriginal›ÜÚdoMÞcumen²!ts,‘êxforming“one˜section“Enš²!titled“\History";‘ølik˜ewise‘ÜÚcom˜bine“an˜yŽ¡‘'¿«sections–ÑEnš²!titled“\Ac˜kno˜wledgemen˜ts",‘Û¿and“an˜y“sections“En˜titled“\Dedications".‘]çY‘ÿeouŽ¡‘'¿«mš²!ust–¦fdelete“all“sections“En˜titled“\Endorsemen˜ts."ަ‘-6.Ž‘'¿«COLLECTIONS–¦fOF“DOCUMENTSŽŸ(÷‘'¿«Y‘ÿeou–Ò¤maš²!y“mak˜e“a“collection“consisting“of‘Ò£the“DoMÞcumen˜t“and“other“doMÞcumen˜ts“releasedŽ¡‘'¿«under–this“License,‘sÚand“replace“the“individual“copies“of“this“License“in“the“v‘ÿdDariousŽ¡‘'¿«doMÞcumenš²!ts–Dwith‘Ca“single“cop˜y›Cthat“is˜included“in“the˜collection,‘y»pro²!vided˜that“y²!ouŽ¡‘'¿«follo²!w–t”the›t•rules“of˜this“License˜for“v•²!erbatim˜cop“ying‘t”of˜eac“h–t”of˜the“doMÞcumen²!ts˜in“allŽ¡‘'¿«other‘¦frespMÞects.ަ‘'¿«Y‘ÿeou–Æ=maš²!y“extract“a“single“doMÞcumen˜t“from“suc˜h“a“collection,‘Î2and“distribute“it“individu-Ž¡‘'¿«ally–4under›4this“License,‘Wnpro•²!vided˜y“ou–4insert“a“cop²!y˜of“this“License“in²!to˜the“extractedŽ¡‘'¿«doMÞcumen•²!t,‘ùøand›éBfollo“w–éAthis˜License“in“all˜other“respMÞects˜regarding“v•²!erbatim˜cop“ying‘éAofŽ¡‘'¿«that‘¦fdoMÞcumen²!t.ŽŽŒ‹ÜýŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:17ŽŽŽ ƒ33 ý ÌÍ‘-7.Ž‘'¿«Aš²!GGREGA‘ÿeTION–¦fWITH“INDEPENDENT“W˜ORKSŽ©(ö‘'¿«A‘]Æcompilation–]Øof“the“DoMÞcumenš²!t‘]Ùor“its“deriv‘ÿdDativ˜es“with“other‘]Ùseparate“and“indepMÞenden˜tޤ 33‘'¿«doMÞcumen•²!ts›ÿhor‘ÿiw“orks,‘©in˜or˜on‘ÿia˜v“olume–ÿiof˜a“storage˜or˜distribution“medium,‘©is˜calledŽ¡‘'¿«an– \aggregate"“if“the› cop•²!yrigh“t– resulting“from“the“compilation“is“not˜used“to“limit“theŽ¡‘'¿«legal–1 righ²!ts›1of“the“compilation's˜users“bMÞey²!ond˜what“the“individual˜w²!orks“pMÞermit.‘¶¾WhenŽ¡‘'¿«the–žDošMÞcumen²!t“is“included‘žin“an“aggregate,‘Ûðthis“License“do˜es“not‘žapply“to“the“otherŽ¡‘'¿«wš²!orks–¦fin“the“aggregate“whic˜h“are“not“themselv˜es“deriv‘ÿdDativ˜e“w˜orks“of“the“DoMÞcumen˜t.ŽŸ(÷‘'¿«If–»Vthe“Co•²!v“er–»VT‘ÿeext“requiremenš²!t“of“section“3‘»Uis“applicable“to“these“copies“of“the“DoMÞcumen˜t,Ž¡‘'¿«then–°Dif›°Ethe“DoMÞcumen²!t“is“less˜than“one“half“of˜the“en²!tire“aggregate,‘á~the˜DoMÞcumenš²!t's“Co˜v˜erŽ¡‘'¿«T‘ÿeexts–0maš²!y“bMÞe“placed“on“co˜v˜ers“that“brac˜k˜et“the“DoMÞcumen˜t“within“the‘0aggregate,‘G°or“theŽ¡‘'¿«electronic–5qequiv‘ÿdDalenš²!t‘5pof“co˜v˜ers›5pif“the˜DoMÞcumen²!t“is“in˜electronic“form.‘ŠüOtherwise“theyŽ¡‘'¿«mš²!ust–¦fappMÞear“on“prin˜ted“co˜v˜ers“that“brac˜k˜et“the“whole“aggregate.ަ‘-8.Ž‘'¿«TRANSLA‘ÿeTIONŽŸ(÷‘'¿«T‘ÿeranslation–̯is›̰considered“a˜kind“of“moMÞdi cation,‘Aso˜yš²!ou“ma˜y‘̰distribute“translationsŽ¡‘'¿«of–Tþthe›TýDoMÞcumen²!t“under˜the“terms˜of“section“4.‘ é£Replacing“In•²!v‘ÿdDarian“t˜Sections‘TþwithŽ¡‘'¿«translations–v²requires‘v³spšMÞecial“p˜ermission“from“their›v³cop•²!yrigh“t‘v²holders,‘êÄbut˜y“ou‘v²ma“yŽ¡‘'¿«include–ðktranslations“of“some›ðjor“all“In•²!v‘ÿdDarian“t–ðkSections“in“addition˜to“the“original“v²!ersionsŽ¡‘'¿«of›Æthese‘ÆIn•²!v‘ÿdDarian“t˜Sections.‘=Y‘ÿeou‘Æma“y˜include–Æa˜translation˜of“this˜License,‘Î and“all˜theŽ¡‘'¿«license–òúnotices›òûin“the“DoMÞcumen•²!t,‘Fand˜an“y›òúW‘ÿearran“t“y˜Disclaimers,‘Fpro“vided‘òûthat˜y“ouŽ¡‘'¿«also–Ïinclude›Îÿthe“original“English˜v²!ersion“of“this“License˜and“the“original˜v²!ersions“ofŽ¡‘'¿«those–notices“and“disclaimers.‘5åIn“case“of“a“disagreemen•²!t‘bMÞet“w“een–the“translation“andŽ¡‘'¿«the–:•original›:”v²!ersion“of˜this“License˜or“a˜notice“or˜disclaimer,‘_ the“original˜v²!ersion“willŽ¡‘'¿«prev‘ÿdDail.ަ‘'¿«If–pèa“section“in‘péthe“DoMÞcumenš²!t“is“En˜titled“\Ac˜kno˜wledgemen˜ts",–{›\Dedications",“or‘pè\His-Ž¡‘'¿«tory",‘A¿the–(•requiremenš²!t“(section“4)“to“Preserv˜e“its“Title“(section“1)“will“t˜ypically“requireŽ¡‘'¿«c²!hanging–¦fthe“actual“title.ަ‘-9.Ž‘'¿«TERMINA‘ÿeTIONŽŸ(÷‘'¿«Y‘ÿeou–”maš²!y“not‘”cop˜y–ÿe,›—¾moMÞdify“,˜sublicense,˜or–”distribute“the“DoMÞcumen²!t‘”except“as“expresslyŽ¡‘'¿«proš²!vided–¡ðunder‘¡ñthis“License.‘Ð|An˜y›¡ñattempt“otherwise˜to“cop²!y–ÿe,›àÓmoMÞdify“,‘àÒsublicense,˜orŽ¡‘'¿«distribute–¦fit“is“vš²!oid,“and“will“automatically“terminate“y˜our“righ˜ts“under“this“License.ަ‘'¿«Ho•²!w“ev“er,‘ó·if›äAy“ou–ä@cease˜all“violation˜of“this“License,‘ó¸then“y²!our˜license“from˜a“particularŽ¡‘'¿«cop•²!yrigh“t–Jholder“is‘Jreinstated“(a)“proš²!visionally‘ÿe,‘sšunless“and“un˜til‘Jthe“cop˜yrigh˜t“holderŽ¡‘'¿«explicitly–á_and“ nally“terminates“yš²!our“license,‘0and“(b)“pMÞermanen˜tly‘ÿe,‘0if“the“cop˜yrigh˜tŽ¡‘'¿«holder–"fails“to“notify“yš²!ou“of“the“violation‘"b˜y“some“reasonable“means“prior“to“60“da˜ysŽ¡‘'¿«after–¦fthe“cessation.ŽŸ(÷‘'¿«Moreo•²!v“er,‘Ï8y“our–Ç license›Çfrom“a˜particular˜cop•²!yrigh“t–Ç holder˜is˜reinstated“pMÞermanen²!tly˜ifŽ¡‘'¿«the›V`cop•²!yrigh“t˜holder‘Vanoti es˜y“ou˜of˜the˜violation‘Vab“y˜some˜reasonable˜means,‘fbthis˜is˜theŽ¡‘'¿« rst–Wtime“y•²!ou‘Wha“v“e›Wreceiv“ed˜notice˜of˜violation‘Wof˜this˜License˜(for˜an“y‘Ww“ork)˜from˜thatŽ¡‘'¿«cop•²!yrigh“t–Õúholder,‘áÞand“yš²!ou“cure“the“violation“prior‘Õùto“30“da˜ys“after“y˜our‘Õùreceipt“of“theŽ¡‘'¿«notice.ަ‘'¿«T‘ÿeermination–Nuof“yš²!our“righ˜ts“under“this“section‘NtdoMÞes“not“terminate“the“licenses“of“partiesŽ¡‘'¿«who›•qha•²!v“e˜receiv“ed˜copies˜or˜righ“ts˜from˜y“ou‘•punder˜this˜License.‘ªþIf˜y“our˜righ“ts˜ha“v“eŽ¡‘'¿«bšMÞeen–Îterminated“and“not‘Íp˜ermanenš²!tly“reinstated,‘:¹receipt“of“a“cop˜y“of“some‘Íor“all“of“theŽ¡‘'¿«same–¦fmaterial“doMÞes“not“givš²!e“y˜ou“an˜y“righ˜ts“to“use“it.ŽŽŒ‹îbŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:18ŽŽŽ ƒ33 ý ÌÍ‘‡“10.Ž‘'¿«FUTURE–¦fREVISIONS“OF“THIS“LICENSEŽ©33‘'¿«The›ÿaF‘ÿeree‘ÿbSoft•²!w“are˜F‘ÿeoundation‘ÿbma“y˜publish–ÿbnew,‘UŸrevised“v²!ersions˜of“the˜GNU‘ÿ F‘ÿereeޤ 33‘'¿«DoMÞcumenš²!tation–ÙâLicense‘Ùãfrom“time“to“time.‘xRSuc˜h“new‘Ùãv˜ersions“will“bMÞe“similar‘Ùãin“spiritŽ¡‘'¿«to– æthe“presenš²!t“v˜ersion,‘?…but“ma˜y“di er“in“detail“to“address‘ ånew“problems“or“concerns.Ž¡‘'¿«See‘¦fâhttp://www.gnu.org/copyleft/á.ަ‘'¿«Eac•²!h›ˆ×v“ersion˜of˜the˜License˜is˜giv“en˜a˜distinguishing˜v“ersion˜n“um“b•MÞer.‘ÔIf˜the˜Do“cumen²!tŽ¡‘'¿«spšMÞeci es–r”that“a“particular“n•²!um“b˜ered›r”v“ersion˜of˜this˜License˜\or˜an“y˜later˜v“ersion"Ž¡‘'¿«applies‘æQto–æPit,‘öLyš²!ou“ha˜v˜e–æQthe“option‘æPof“follo˜wing“the“terms›æPand“conditions“either˜of“thatŽ¡‘'¿«spMÞeci ed–Žvš²!ersion“or“of“an˜y“later“v˜ersion“that‘Žhas“bMÞeen“published“(not“as“a“draft)“b˜yŽ¡‘'¿«the›î!F‘ÿeree‘î"Soft•²!w“are˜F‘ÿeoundation.‘µIf‘î"the˜DošMÞcumen“t‘î"do˜es–î!not“sp˜ecify›î"a“v•²!ersion˜n“um“bMÞer‘î!ofŽ¡‘'¿«this–$œLicense,‘D)yš²!ou“ma˜y“c˜hoMÞose‘$an˜y“v˜ersion“ev˜er“published“(not“as“a“draft)“b˜y“the“F‘ÿereeŽ¡‘'¿«Soft•²!w“are–ÖUF‘ÿeoundation.‘m©If“the“DošMÞcumen²!t“sp˜eci es“that“a“proš²!xy‘ÖTcan“decide“whic˜h“futureŽ¡‘'¿«v²!ersions–é)of›é*this“License˜can“bMÞe“used,‘ùÚthat˜proš²!xy's“public“statemen˜t›é*of“acceptance˜of“aŽ¡‘'¿«v•²!ersion›¦fpMÞermanen“tly˜authorizes˜y“ou˜to˜c“hoMÞose˜that˜v“ersion˜for˜the˜DoMÞcumen“t.ަ‘‡“11.Ž‘'¿«RELICENSINGަ‘'¿«\Massivš²!e–{"Multiauthor‘{#CollabMÞoration“Site"“(or“\MMC‘zìSite")“means“an˜y‘{#W‘ÿeorld“WideŽ¡‘'¿«W‘ÿeeb–Leservš²!er“that“publishes“cop˜yrigh˜table‘Lfw˜orks“and“also“pro˜vides“prominen˜t“facilitiesŽ¡‘'¿«for›M an²!yb•MÞo“dy˜to˜edit˜those˜w•²!orks.‘ÀEA‘MŠpublic˜wiki˜that‘MŸan“yb•MÞo“dy˜can˜edit˜is˜an˜example˜ofŽ¡‘'¿«sucš²!h– Ya“serv˜er.‘µA‘ ?\Massiv˜e‘ XMultiauthor“CollabMÞoration"“(or“\MMC")‘ >con˜tained“in“theŽ¡‘'¿«site–¦fmeans“anš²!y“set“of“cop˜yrigh˜table“w˜orks“th˜us“published“on“the“MMC“site.ަ‘'¿«\CC-BY-SA"‘8¤means–8Éthe‘8ÊCreativš²!e“Commons“A˜ttribution-Share‘8ÊAlik˜e“3.0‘8Êlicense“pub-Ž¡‘'¿«lished›8b•²!y‘8Creativ“e˜Commons–8CorpMÞoration,‘N(a˜not-for-pro t“corpMÞoration˜with“a˜principalŽ¡‘'¿«place–òof“business“in“San“F‘ÿerancisco,‘7£California,‘7¢as“wš²!ell“as“future“cop˜yleft“v˜ersions“of“thatŽ¡‘'¿«license–¦fpublished“b²!y“that“same“organization.ަ‘'¿«\IncorpšMÞorate"–­zmeans“to“publish‘­yor“republish“a“Do˜cumen²!t,›¯?in“whole“or‘­yin“part,˜as“partŽ¡‘'¿«of–¦fanother“DoMÞcumen²!t.ަ‘'¿«An–&\MMC‘&Þ’óáðhistory‘Texpansion‘ΑÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÿ̬1Ž¡’óáðHistory‘TSearc¾9hingo~‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¡9¬7ŽŽŽŽŒ‹—Ÿò‘GáAppMÞendix–¦fC:“F›ÿeunction“and“V˜ariable“Index’ÜÓ$21ŽŽŽ ƒ33 ý ÌÍ‘GëSApp‘Š=endix‘záC‘ ¸QF›þaGunction–z³and“V˜ariable“IndexŽŽ »]÷ þm~1‘Gë\Aޤ¢‘GÉadd_historyÊ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘A…¬5Ž© ‡›‘GÉadd_history_time‘•#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÆÞ¬5ŽŸ ‡š‘GÉappend_history‘2I‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘d¬8ŽŸr$‘Gë\CŽ¡‘GÉclear_history‘€Ü‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘²—¬6ަ‘GÉcurrent_history‘ã¶‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘q¬6Ž©r#‘Gë\FŽ¡‘GÉfree_history_entry‘5‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ 7ð¬5ŽŸr$‘Gë\GŽ¡‘GÉget_history_eventF‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘xK¬8ަ‘Gë\HŽ¡‘GÉhistory_arg_extract‘·¢‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘é]¬8ޤ ‡›‘GÉhistory_base‘Ïo‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ *¬8Ž¡‘GÉhistory_comment_char‘i‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘šÊ¬9Ž© ‡š‘GÉhistory_expand‘2I‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘d¬8Ž¡‘GÉhistory_expansion_char‘Ëé‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ý¤¬9Ž¡‘GÉhistory_getÊ‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘A…¬6Ž¡‘GÉhistory_get_history_state‘îh‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ #¬5ަ‘GÉhistory_get_time‘•#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÆÞ¬6Ž¡‘GÉhistory_inhibit_expansion_function‘9u‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘k0¬9Ž¡‘GÉhistory_is_stifled‘5‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ 7ð¬6Ž¡‘GÉhistory_length‘2I‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘d¬8ަ‘GÉhistory_list‘Ïo‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ *¬6Ž¡‘GÉhistory_max_entries‘·¢‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘é]¬9Ž¡‘GÉhistory_no_expand_chars}V‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¯¬9Ž¡‘GÉhistory_quotes_inhibit_expansion‘Ö›‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ V¬9ަ‘GÉhistory_search‘2I‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘d¬7Ž¡‘GÉhistory_search_delimiter_charse‰‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘—D¬9Ž¡‘GÉhistory_search_pos‘5‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ 7ð¬7ŽŽ þm~1’óáðÉhistory_search_prefix‘|‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘L7¬7ޤ ‚'’óáðÉhistory_set_history_state‘îh‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ #¬5Ž¡’óáðÉhistory_set_pos‘ã¶‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘q¬6Ž¡’óáðÉhistory_subst_char‘5‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ 7ð¬9Ž¡’óáðÉhistory_tokenize‘•#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÆÞ¬8Ž¡’óáðÉhistory_total_bytes‘·¢‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘é]¬6Ž¡’óáðÉhistory_truncate_file‘|‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘L7¬8Ž¡’óáðÉhistory_word_delimiters}V‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘¯¬9Ž¡’óáðÉhistory_write_timestamps.ÑÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘`~¬9ޤU„’óáðë\NŽ© ûu’óáðÉnext_history‘Ïo‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ *¬7Ž¡’óáðë\PŽŸ ût’óáðÉprevious_history‘•#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÆÞ¬6Ž¡’óáðë\Rަ’óáðÉread_history‘Ïo‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ *¬7ޤ ‚'’óáðÉread_history_range‘5‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ 7ð¬7Ž¡’óáðÉremove_history‘2I‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘d¬5Ž¡’óáðÉreplace_history_entry‘|‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘L7¬5ޤU„’óáðë\Sަ’óáðÉstifle_history‘2I‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘d¬6Ž¡’óáðë\UŽŸ ût’óáðÉunstifle_history‘•#‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘ÆÞ¬6ŽŸ ‚'’óáðÉusing_history‘€Ü‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘²—¬5Ž¡’óáðë\Wަ’óáðÉwhere_history‘€Ü‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘²—¬6ŽŸ ‚'’óáðÉwrite_history‘€Ü‘ÅU²:Ž–p‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž“‘ÅU:Ž‘²—¬7ŽŽŽŽŒøvƒ’À;è…ïÿïÿóeÂÖN  #× cmbx12óc·ág£ff cmmi12ó\ÂÖN ff cmbx12óSÂÖN G® cmbx12óJÂÖN ¼j cmbx12óEßê  b> ó3 cmmi10ó=ßê  b> ó3 cmmi10é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘›/á1ޤ 33‘!G1.2‘ ó5Readline‘¦fIn²!teractionQl‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:ޑգá1Ž¡‘0G1.2.1‘ ó5Readline–¦fBare“Essen²!tials-¾‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘±õá1Ž¡‘0G1.2.2‘ ó5Readline›¦fMo•²!v“emen“t˜CommandsA*‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Åaá2Ž¡‘0G1.2.3‘ ó5Readline–¦fKilling“Commands‘Ÿ”‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ #Ëá2Ž¡‘0G1.2.4‘ ó5Readline‘¦fArgumen²!ts‘²#‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 6[á3Ž¡‘0G1.2.5‘ ó5Searc²!hing–¦ffor“Commands“in“the“Historyh ‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ìCá3Ž¡‘!G1.3‘ ó5Readline–¦fInit“File‘‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ ™Gá4Ž¡‘0G1.3.1‘ ó5Readline–¦fInit“File“Syn²!tax‘‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ £Uá4Ž¡‘0G1.3.2‘ ó5Conditional–¦fInit“Constructs‘j‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ î>á11Ž¡‘0G1.3.3‘ ó5Sample–¦fInit“File‘½Ö‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ B á11Ž¡‘!G1.4‘ ó5Bindable–¦fReadline“Commands‘®Ê‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 3á14Ž¡‘0G1.4.1‘ ó5Commands–¦fF‘ÿeor“Mo²!ving=P‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘Á‡á14Ž¡‘0G1.4.2‘ ó5Commands–¦fF‘ÿeor“Manipulating“The“History‘hú‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ í1á14Ž¡‘0G1.4.3‘ ó5Commands–¦fF›ÿeor“Changing“T˜ext‘鈑é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ m¿á16Ž¡‘0G1.4.4‘ ó5Killing–¦fAnd“Y‘ÿeanking‘¼‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Œôá17Ž¡‘0G1.4.5‘ ó5SpMÞecifying–¦fNumeric“Argumen²!ts‘]^‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ á•á18Ž¡‘0G1.4.6‘ ó5Letting–¦fReadline“T²!ypMÞe“F›ÿeor“Y˜ou‘¹Ú‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ >á18Ž¡‘0G1.4.7‘ ó5KeybMÞoard‘¦fMacros‘Ò?‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ Vvá19Ž¡‘0G1.4.8‘ ó5Some–¦fMiscellaneous“Commands‘f‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ êSá19Ž¡‘!G1.5‘ ó5Readline–¦fvi“MoMÞde‘³¸‘é˜é:Ž–ÝÛ‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž“‘é˜:Ž‘ 7ïá21ŽŸ33‘Gë\Apps3endix‘ffAŽ‘|(·GNU–ffF‘þ¦free“Dos3cumenŒÌtation“LicenseŽŸ‘4‹w‘32ëc:Ž–Q ‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž“‘32:Ž‘ Ë3ë\22ŽŽŒ‹ôŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH1ŽŽŽ ƒ33 ý ÌÍ‘GëS1‘ ¸QCommand–z³Line“EditingŽŽŸ§‘GáThis–¦fcš²!hapter“describMÞes“the“basic“features“of“the“ó<Œ-ø ó3 cmcsc10çgnu“ácommand“line“editing“in˜terface.ŽŸñÈ‘Gë\1.1‘™InŒÌtros3duction–f@to“Line“EditingŽŽŸ33‘GáThe–¦ffolloš²!wing“paragraphs“describMÞe“the“notation“used“to“represen˜t“k˜eystrok˜es.Ž©,‘!GThe–Yútext›Yùó=ßêKi“ákš²!ey“sequence“b˜y“stripping“the“eigh˜th“bit“and“pre xingŽŽŒ‹aKŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH6ŽŽŽ ƒ33 ý ÌÍ’…³-an–íÎâESC“ác•²!haracter,‘¹con“v“erting–íÎthem“to‘íÍa“meta-pre xed“k²!ey“sequence.ޤ 33’…³-The–¦fdefault“v‘ÿdDalue“is“`âoná'.Ž©™š‘Kâ:âdisable-completionŽ¡’…³-áIf–gset“to–g`âOná',‘—?Readline“will–ginhibit“w²!ord“completion.‘èCompletionŽ¡’…³-cš²!haracters–!Ÿwill“bMÞe‘!žinserted“in˜to“the“line“as“if‘!žthey“had“bšMÞeen“mapp˜edŽ¡’…³-to–¦fâself-insertá.‘ÝÝThe“default“is“`âoffá'.ŽŸ™›‘Kâ:âediting-modeŽ¡’…³-áThe–rÖâediting-mode“áv‘ÿdDariable“conš²!trols“whic˜h‘r×default“set“of“k˜ey“bind-Ž¡’…³-ings›?is–>used.‘§&By“default,‘#Readline˜starts˜up“in˜Emacs“editing˜moMÞde,Ž¡’…³-where›~«the‘~ªk•²!eystrok“es˜are–~ªmost˜similar˜to“Emacs.‘ПThis“v‘ÿdDariable˜canŽ¡’…³-bMÞe–¦fset“to“either“`âemacsá'“or“`âviá'.ަ‘Kâ:âecho-control-charactersŽ¡’…³-áWhen–¡îset›¡ïto“`âoná',‘¢Óon˜opMÞerating“systems˜that“indicate˜they“suppMÞortŽ¡’…³-it,‘Òýreadline‘Êecš²!hoMÞes–Êa“c˜haracter›ÊcorrespMÞonding“to“a˜signal“generatedŽ¡’…³-from–¦fthe“k²!eybMÞoard.‘ÝÝThe“default“is“`âoná'.ަ‘Kâ:âenable-keypadŽ¡’…³-áWhen–Ìïset“to“`âoná',‘ømReadline“will“try‘Ìîto“enable“the“application“k²!eypadŽ¡’…³-when–1Ûit›1Üis“called.‘·Some“systems“need˜this“to˜enable“the˜arroš²!w“k˜eys.Ž¡’…³-The–¦fdefault“is“`âoffá'.ŽŸ™›‘Kâ:âenable-meta-keyŽ¡’…³-áWhen–ÇJset›ÇIto“`âoná',‘‚Readline˜will“try“to˜enable“an²!y˜meta“moMÞdi erŽ¡’…³-k²!ey–Ÿthe› terminal“claims“to˜suppMÞort“when“it“is˜called.‘û‰On“man²!yŽ¡’…³-terminals,‘^=the–9ymeta“kš²!ey“is“used“to“send“eigh˜t-bit“c˜haracters.‘—TheŽ¡’…³-default–¦fis“`âoná'.ަ‘Kâ:âexpand-tildeŽ¡’…³-áIf–Pset“to›P`âoná',‘a[tilde“expansion“is“pMÞerformed˜when“Readline“attemptsŽ¡’…³-w²!ord–¦fcompletion.‘ÝÝThe“default“is“`âoffá'.ަ‘Kâ:âhistory-preserve-pointŽ¡’…³-áIf–œset“to›`âoná',‘Zéthe“history“coMÞde“attempts“to“place˜the“pMÞoin²!t“(theŽ¡’…³-curren²!t–;kcursor›;jpMÞosition)“at˜the“same“loMÞcation˜on“eac²!h˜history“lineŽ¡’…³-retriev²!ed–^Éwith“âprevious-history“áor‘^Êânext-historyá.‘The“defaultŽ¡’…³-is‘¦f`âoffá'.ŽŸ™›‘Kâ:âhistory-sizeŽ¡’…³-áSet–°ÿthe“maxim•²!um‘°þn“um“bMÞer–°ÿof“history“enš²!tries“sa˜v˜ed‘°þin“the“historyŽ¡’…³-list.‘óIf–mset“to“zero,‘(oanš²!y“existing“history“en˜tries“are‘ndeleted“and“noŽ¡’…³-new–Ïqenš²!tries“are–Ïpsa˜v˜ed.‘XþIf“set–Ïqto“a“v‘ÿdDalue‘Ïpless“than“zero,‘Ù³the“n˜um˜bMÞerŽ¡’…³-of–ª»history›ª¼en²!tries“is˜not“limited.‘êÝBy˜default,‘«Ñthe“n•²!um“bMÞer˜of‘ª»historyŽ¡’…³-en²!tries–¦fis“not“limited.ަ‘Kâ:âhorizontal-scroll-modeŽ¡’…³-áThis–NËv‘ÿdDariable›NÌcan“bMÞe“set“to˜either“`âoná'“or“`âoffá'.‘× Setting“it˜to“`âoná'Ž¡’…³-means–$jthat“the“text“of“the‘$ilines“bMÞeing“edited“will“scroll“horizon²!tallyŽ¡’…³-on–ÎÁa›ÎÂsingle“screen“line˜when“they“are“longer˜than“the“width˜of“theŽ¡’…³-screen,›:Åinstead–Ýof“wrapping‘Þon²!to“a“new“screen“line.‘±By“default,˜thisŽ¡’…³-v‘ÿdDariable–¦fis“set“to“`âoffá'.ŽŽŒ‹mПò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH7ŽŽŽ ƒ33 ý ÌÍ‘Kâ:âinput-metaޤ 33’…³-áIf–¾Ìset›¾Ëto“`âoná',‘ÄåReadline˜will“enable˜eigh²!t-bit“input˜(it“will˜not“clearŽ¡’…³-the–Ã"eighš²!th“bit“in‘Ã!the“c˜haracters“it“reads),‘ Pregardless“of“what“theŽ¡’…³-terminal–ÌÖclaims“it“can“suppMÞort.‘Q.The“default“v‘ÿdDalue“is“`âoffá'.‘Q-TheŽ¡’…³-name–¦fâmeta-flag“áis“a“synon²!ym“for“this“v‘ÿdDariable.Ž©Ûo‘Kâ:âisearch-terminatorsŽ¡’…³-áThe–5Ñstring›5Òof“c²!haracters˜that“should“terminate˜an“incremen²!talŽ¡’…³-searcš²!h–ú|without“subsequen˜tly“executing“the“c˜haracter“as“a“commandŽ¡’…³-(see–Z±Section“1.2.5“[Searc²!hing],‘ÇÃpage“3).‘ ú¿If“this“v‘ÿdDariable“has“notŽ¡’…³-bMÞeen–Bggivš²!en“a“v‘ÿdDalue,‘igthe“c˜haracters‘BfâESC“áand“èC-J“áwill“terminate“anŽ¡’…³-incremen•²!tal‘¦fsearc“h.ŽŸÛn‘Kâ:âkeymap‘R÷áSets–©5Readline's›©6idea“of˜the“currenš²!t“k˜eymap‘©6for“k˜ey‘©6binding“com-Ž¡’…³-mands.‘ ä™Acceptable–SPâkeymap›SOánames“are˜âemacsá,‘¾‰âemacs-standardá,Ž¡’…³-âemacs-metaá,– 0âemacs-ctlxá,“âviá,‘ 0âvi-moveá,“âvi-commandá,“andŽ¡’…³-âvi-insertá.‘öÚâvi–®ºáis“equiv›ÿdDalen²!t“to‘®»âvi-commandá;‘2äâemacs“áis“equiv˜alen²!tŽ¡’…³-to–Ó¯âemacs-standardá.›e·The“default“v‘ÿdDalue“is“âemacsá.˜The“v‘ÿdDalue“of“theŽ¡’…³-âediting-mode–¦fáv‘ÿdDariable“also“a ects“the“default“k²!eymap.ަ‘Kâ:âkeyseq-timeoutŽ¡’…³-áSpMÞeci es– „the“duration“Readline“will“wš²!ait‘ …for“a“c˜haracter“when“read-Ž¡’…³-ing–—Ían‘—Ìamš²!biguous“k˜ey“sequence›—Ì(one“that˜can“form“a˜complete“k²!eyŽ¡’…³-sequence–ý-using›ý.the“input˜read“so“far,‘ßor˜can“tak²!e˜additional“inputŽ¡’…³-to–óKcomplete“a“longer“kš²!ey“sequence).‘ÄŒIf“no“input“is“receiv˜ed“withinŽ¡’…³-the–*átimeout,‘‹ÿReadline›*àwill“use“the“shorter“but˜complete“k²!ey“se-Ž¡’…³-quence.‘«éReadline›‹uses–Šthis“v‘ÿdDalue“to˜determine“whether“or˜not“inputŽ¡’…³-is–­«a²!v‘ÿdDailable›­ªon“the˜curren²!t“input˜source“(ârl_instream˜áb²!y“default).Ž¡’…³-The– ˜v›ÿdDalue“is“spMÞeci ed“in“milliseconds,‘(ôso“a“v˜alue“of“1000“means“thatŽ¡’…³-Readline–®Äwill›®Ãw²!ait“one˜second“for“additional˜input.‘‹RIf“this˜v‘ÿdDariable“isŽ¡’…³-set–Yàto›Yßa“v‘ÿdDalue˜less“than˜or“equal“to˜zero,‘i.or˜to“a˜non-n²!umeric“v‘ÿdDalue,Ž¡’…³-Readline–ƒûwill‘ƒúwš²!ait“un˜til“another“k˜ey›ƒúis“pressed“to“decide˜whicš²!h“k˜eyŽ¡’…³-sequence–¦fto“complete.‘ÝÝThe“default“v‘ÿdDalue“is“â500á.ަ‘Kâ:âmark-directoriesŽ¡’…³-áIf––¿set“to›–¾`âoná',‘ÒÕcompleted“directory“names“ha•²!v“e˜a––¿slash“appMÞended.Ž¡’…³-The–¦fdefault“is“`âoná'.ަ‘Kâ:âmark-modified-linesŽ¡’…³-áThis–N”v‘ÿdDariable,‘xŸwhen“set“to“`âoná',‘x causes“Readline“to“displa²!y“an“as-Ž¡’…³-terisk– š(`â*á')› ™at“the“start˜of“history˜lines“whicš²!h“ha˜v˜e‘ ™bšMÞeen“mo˜di ed.Ž¡’…³-This–¦fv‘ÿdDariable“is“`âoffá'“b²!y“default.ŽŸÛn‘Kâ:âmark-symlinked-directoriesŽ¡’…³-áIf–$Ôset›$Óto“`âoná',‘mcompleted“names“whic²!h˜are“sym²!bMÞolic˜links“toŽ¡’…³-directories›\Ëha•²!v“e˜a˜slash˜appMÞended‘\Ì(sub‘›»ject˜to˜the˜v‘ÿdDalue˜ofŽ¡’…³-âmark-directoriesá).‘ÝÝThe–¦fdefault“is“`âoffá'.ަ‘Kâ:âmatch-hidden-filesŽ¡’…³-áThis–«sv‘ÿdDariable,›Ý£when“set“to“`âoná',˜causes“Readline“to‘«rmatc²!h“ les“whoseŽ¡’…³-names–MÍbšMÞegin“with“a“`â.á'“(hidden“ les)“when“p˜erforming“ lenameŽŽŒ‹yߟò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’MH8ŽŽŽ ƒ33 ý ÌÍ’…³-completion.‘ÎþIf–öÆset“to–öÇ`âoffá',‘JÝthe“leading–öÆ`â.á'“mš²!ust“bMÞe‘öÇsupplied“b˜yޤ 33’…³-the–Luser›Min“the“ lename“to˜bMÞe“completed.‘9This“v‘ÿdDariable“is˜`âoná'“b²!yŽ¡’…³-default.Ž©™š‘Kâ:âmenu-complete-display-prefixŽ¡’…³-áIf–ßset“to‘Þ`âoná',‘ýmenš²!u“completion“displa˜ys“the“common‘Þpre x“of“theŽ¡’…³-list–ƒXof›ƒYpMÞossible“completions˜(whicš²!h“ma˜y‘ƒYbMÞe“empt˜y)‘ƒYbMÞefore“cyclingŽ¡’…³-through–¦fthe“list.‘ÝÝThe“default“is“`âoffá'.ŽŸ™›‘Kâ:âoutput-metaŽ¡’…³-áIf–Aset“to“`âoná',‘gªReadline“will“displaš²!y“c˜haracters“with“the“eigh˜th“bitŽ¡’…³-set–`!directly“rather“than“as“a‘`"meta-pre xed“escapMÞe“sequence.‘ TheŽ¡’…³-default–¦fis“`âoffá'.ަ‘Kâ:âpage-completionsŽ¡’…³-áIf–ôset“to‘ó`âoná',‘,×Readline“uses“an“inš²!ternal“âmoreá-lik˜e‘ópager“to“displa˜yŽ¡’…³-a–ã¹screenful“of“pMÞossible‘ã¸completions“at“a“time.‘•ÕThis“v‘ÿdDariable“is“`âoná'Ž¡’…³-b²!y‘¦fdefault.ަ‘Kâ:âprint-completions-horizontallyŽ¡’…³-áIf–àset›àto“`âoná',‘»Readline˜will“displa²!y“completions“with˜matc²!hes“sortedŽ¡’…³-horizonš²!tally–8Ôin“alphabMÞetical“order,‘orather“than“do˜wn“the“screen.Ž¡’…³-The–¦fdefault“is“`âoffá'.ŽŸ™›‘Kâ:ârevert-all-at-newlineŽ¡’…³-áIf–Œêset“to“`âoná',‘’Readline“will“undo“all‘Œëc²!hanges“to“history“lines“bMÞeforeŽ¡’…³-returning–qXwhen›qYâaccept-line“áis˜executed.‘Ì-By˜default,‘{õhistory“linesŽ¡’…³-ma²!y–¦bšMÞe“mo˜di ed“and“retain“individual‘¥undo“lists“across“calls“toŽ¡’…³-âreadlineá.‘ÝÝThe–¦fdefault“is“`âoffá'.ަ‘Kâ:âshow-all-if-ambiguousŽ¡’…³-áThis–™]alters“the“default“bMÞeha²!vior“of“the‘™\completion“functions.‘Ù…If“setŽ¡’…³-to–L`âoná',‘^.wš²!ords“whic˜h‘L ha˜v˜e“more“than›L one“pMÞossible˜completion“causeŽ¡’…³-the–­matc²!hes“to“bšMÞe“listed“immediately‘­instead“of“ringing“the“b˜ell.Ž¡’…³-The–¦fdefault“v‘ÿdDalue“is“`âoffá'.ަ‘Kâ:âshow-all-if-unmodifiedŽ¡’…³-áThis–¤‰alters“the›¤Šdefault“bMÞeha²!vior“of“the“completion˜functions“in“aŽ¡’…³-fashion–€similar“to“åsho•²!w-all-if-am“biguousá.‘«If–€set“to“`âoná',‘-®wš²!ords“whic˜hŽ¡’…³-ha•²!v“e–²Ömore“than“one“pšMÞossible‘²×completion“without“an²!y“p˜ossible“par-Ž¡’…³-tial–Ãcompletion›Ä(the“pMÞossible˜completions“don't“share˜a“commonŽ¡’…³-pre x)–¢cause›¢the“matc²!hes“to˜bMÞe“listed“immediately“instead˜of“ring-Ž¡’…³-ing–¦fthe“bMÞell.‘ÝÝThe“default“v‘ÿdDalue“is“`âoffá'.ŽŸ™›‘Kâ:âshow-mode-in-promptŽ¡’…³-áIf–KÂset“to›KÃ`âoná',‘uadd“a“c²!haracter˜to“the“bMÞeginning“of˜the“prompt“in-Ž¡’…³-dicating–Çthe›Èediting“moMÞde:‘¢ emacs˜(`â@á'),‘a_vi˜command“(`â:á'),‘a`or“viŽ¡’…³-insertion–¦f(`â+á').‘ÝÝThe“default“v‘ÿdDalue“is“`âoffá'.ަ‘Kâ:âskip-completed-textŽ¡’…³-áIf–ñjset“to“`âoná',‘+this‘ñialters“the“default“completion“bMÞeha²!vior“when“in-Ž¡’…³-serting–}=a‘}“output"ަ’…³-áIn› \Àthe‘ \¿abMÞo•²!v“e˜example,‘ JSèC-u˜áis˜bMÞound˜to‘ \¿the˜functionŽ¡’…³-âuniversal-argumentá,‘|èM-DEL› &áis– %bMÞound“to˜the“functionŽ¡’…³-âbackward-kill-wordá,‘ šand–iLèC-o›iKáis“bMÞound˜to“run˜the“macroŽ¡’…³-expressed–~Jon“the›~Irigh²!t“hand“side“(that“is,‘ôBto“insert˜the“text“`â>Ž¡’…³-outputá'–¦fin²!to“the“line).ŽŸP’…³-A‘nbn•²!um“bšMÞer–o[of“sym²!b˜olic“c²!haracter“names“are“recognized“whileŽ¡’…³-proMÞcessing–Ê3this“kš²!ey“binding“syn˜tax:‘%wåDELá,–&åESCá,“åESCAPEá,“åLFDá,Ž¡’…³-åNEWLINEá,–¦fåRETá,“åRETURNá,“åRš²!UBOUTá,“åSP‘ÿeA˜CEá,“åSPCá,“and“åT‘ÿeABá.ŽŸÛo‘Kâ:â"åk²!eyseq@æâ"á:‘ÝÝåfunction-name‘Cmáor‘¦fåmacroŽŽ¡’…³-k•²!eyseq‘ú«ádi ers‘¹Äfrom›¹Ååk“eyname‘VËáabMÞo“v“e˜in˜that–¹Ästrings˜denoting“an˜en-Ž¡’…³-tire– hkš²!ey“sequence“can“b•MÞe‘ gsp“eci ed,‘%éb˜y‘ gplacing– hthe“k˜ey“sequence“inŽ¡’…³-double–‰ôquotes.‘ÔbSome“çgnu“áEmacs“stš²!yle“k˜ey“escapšMÞes“can“b˜e“used,‘¤asŽ¡’…³-in–Ãthe›Âfollo²!wing“example,‘(Ùbut˜the“spMÞecial˜c²!haracter“names˜are“notŽ¡’…³-recognized.ަ’¢›‚â"\C-u":‘¿ªuniversal-argumentŽ¡’¢›‚"\C-x\C-r":‘¿ªre-read-init-fileŽŽŒ‹ “YŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®10ŽŽŽ ƒ33 ý ÌÍ’¢›‚â"\e[11~":–¿ª"Function“Key“1"ŽŸÌ’…³-áIn–Â×the“abšMÞo•²!v“e–Â×example,‘ÉòèC-u“áis“again‘ÂØb˜ound“to“the“functionޤ 33’…³-âuniversal-argument–?ßá(just“as“it“w²!as“in“the“ rst‘?Þexample),‘¦=`èC-xŽ¡’…³-C-rá'–¤Öis“bMÞound“to“the“function“âre-read-init-fileá,‘¥&and“`âESC–¦f[“1“1Ž¡’…³-~á'–¦fis“bMÞound“to“insert“the“text“`âFunction“Key“1á'.Ž©dö‘Kâ:The–’Äfolloš²!wing“çgnu“áEmacs“st˜yle“escapMÞe‘’Åsequences“are“a˜v‘ÿdDailable“when“spMÞecifyingŽ¡‘Kâ:k²!ey‘¦fsequences:ަ‘Kâ:è\C-‘(‘õácon²!trol‘¦fpre xަ‘Kâ:è\M-‘(‘õámeta‘¦fpre xަ‘Kâ:è\e‘.QŸáan–¦fescapMÞe“c²!haracterަ‘Kâ:è\\‘.QŸábac²!kslashަ‘Kâ:è\â"‘.QŸ"á,–¦fa“double“quotation“markަ‘Kâ:è\'‘.QŸâ'á,–¦fa“single“quote“or“apMÞostropheަ‘Kâ:In–Qaddition“to›Qthe“çgnu“áEmacs“st²!yle˜escapMÞe“sequences,‘b)a“second˜set“of“bac²!kslashŽ¡‘Kâ:escapMÞes–¦fis“a²!v‘ÿdDailable:ަ‘Kâ:â\a‘.QŸáalert‘¦f(bMÞell)ަ‘Kâ:â\b‘.QŸábac²!kspaceަ‘Kâ:â\d‘.QŸádeleteަ‘Kâ:â\f‘.QŸáform‘¦ffeedަ‘Kâ:â\n‘.QŸánewlineަ‘Kâ:â\r‘.QŸácarriage‘¦freturnަ‘Kâ:â\t‘.QŸáhorizon²!tal‘¦ftabަ‘Kâ:â\v‘.QŸáv²!ertical‘¦ftabަ‘Kâ:â\ènnn‘"ÒKáthe–$«eighš²!t-bit“c˜haracter‘$ªwhose“v›ÿdDalue“is“the“oMÞctal“v˜alue‘$ªånnn“á(one“toŽ¡’…³-three‘¦fdigits)ަ‘Kâ:â\xèHH‘"ÒKáthe›˜eigh•²!t-bit‘˜c“haracter˜whose˜v‘ÿdDalue–˜is˜the˜hexadecimal“v‘ÿdDalue˜åHHŽ¡’…³-á(one–¦for“t•²!w“o–¦fhex“digits)ަ‘Kâ:When–}Ëenš²!tering“the“text“of“a“macro,‘³£single“or“double“quotes“m˜ust“bMÞe“used“toŽ¡‘Kâ:indicate–“Ša›“‰macro“de nition.‘‚?Unquoted˜text“is“assumed“to˜bMÞe“a“function˜name.‘‚?InŽ¡‘Kâ:the‘Ämacro›Åb•MÞo“dy‘ÿe,‘Ç~the˜bac²!kslash‘Äescap“es˜describ“ed‘Äab“o•²!v“e˜are‘Äexpanded.‘€ýBac“kslashŽ¡‘Kâ:will–Íquote‘Íanš²!y“other“c˜haracter›Íin“the“macro˜text,‘Éincluding“`â"á'˜and“`â'á'.‘RF‘ÿeorŽ¡‘Kâ:example,‘4 the–folloš²!wing‘Žbinding“will“mak˜e›Ž`èC-x‘¦fâ\á'“insert“a˜single“`â\á'“in²!to˜the“line:ŽŸÌ‘hÊâ"\C-x\\":‘¿ª"\\"ŽŽŒ‹  ›Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®11ŽŽŽ ƒ33 ý ÌÍ‘Gëe1.3.2‘d(Conditional–íMInit“ConstructsŽŽŸ³3‘GáReadline–iimplemenš²!ts“a“facilit˜y“similar“in‘ispirit“to“the“conditional“compilation“features“ofޤ 33‘Gthe–¯JC‘¯HpreproMÞcessor‘¯Kwhicš²!h“allo˜ws‘¯Kk˜ey“bindings“and›¯Kv‘ÿdDariable“settings“to˜bšMÞe“p˜erformed‘¯Kas“theŽ¡‘Gresult–¦fof“tests.‘ÝÝThere“are“four“parser“directiv²!es“used.Ž©33‘Gâ$if‘(‘õáThe–ÃNâ$if“áconstruct“allo²!ws“bindings“to“bšMÞe‘ÃOmade“based“on“the“editing“mo˜de,‘ʈtheŽ¡‘Kâ:terminal–’ŽbMÞeing›’used,‘͘or“the“application˜using“Readline.‘¢VThe“text“of˜the“testŽ¡‘Kâ:extends–¦fto“the“end“of“the“line;“no“c²!haracters“are“required“to“isolate“it.ަ‘Kâ:âmode‘"ÒKáThe–žÞâmode=›žßáform“of“the“â$if“ádirectiv²!e˜is“used“to“test˜whether“Read-Ž¡’…³-line–3½is“in‘3¼âemacs“áor“âvi“ámošMÞde.‘ …áThis“ma²!y“b˜e‘3¼used“in“conjunctionŽ¡’…³-with–º the“`âset‘¦fkeymapá'“command,–ÿfor‘º!instance,“to–º set“bindings“inŽ¡’…³-the–ÌÇâemacs-standard“áand›ÌÆâemacs-ctlx“ák²!eymaps“only“if˜Readline“isŽ¡’…³-starting–¦fout“in“âemacs“ámoMÞde.ަ‘Kâ:âterm‘"ÒKáThe–<âterm=“áform›<ma²!y“bMÞe“used“to“include˜terminal-spMÞeci c“k²!ey“bind-Ž¡’…³-ings,‘ƒpMÞerhaps–Vîto“bind›Víthe“k²!ey˜sequences“output“b²!y˜the“terminal'sŽ¡’…³-function–Þ€kš²!eys.‘›;The“w˜ord“on‘Þthe“righ˜t“side“of“the“`â=á'‘Þis“tested“againstŽ¡’…³-bšMÞoth–šPthe“full“name“of“the‘šOterminal“and“the“p˜ortion“of“the“terminalŽ¡’…³-name–×bMÞefore›Öthe“ rst˜`â-á'.‘ÿ/This“allo²!ws˜âsun“áto˜matc²!h“bMÞoth˜âsun“áandŽ¡’…³-âsun-cmdá,–¦ffor“instance.ަ‘Kâ:âapplicationŽ¡’…³-áThe–¢âåapplication“áconstruct›¢ãis“used“to“include˜application-spMÞeci c“set-Ž¡’…³-tings.‘£mEac²!h–÷program“using“the‘÷Readline“library“sets“the“åapplicationŽ¡’…³-nameá,‘õwand–ÉŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®14ŽŽŽ ƒ33 ý ÌÍ‘.ùœâ#–¿ªFor“FTPޤ 33‘.ùœ$if‘¿ªFtpŽ¡‘.ùœ"\C-xg":–¿ª"get“\M-?"Ž¡‘.ùœ"\C-xt":–¿ª"put“\M-?"Ž¡‘.ùœ"\M-.":‘¿ªyank-last-argŽ¡‘.ùœ$endifŽŸƨ‘Gë\1.4‘™Bindable–f@Readline“CommandsŽŽŸ33‘GáThis–\section›[describMÞes“Readline“commands˜that“ma²!y“b•MÞe˜b“ound–\to“k²!ey˜sequences.‘¬ÚCommandŽ¡‘Gnames–¦fwithout“an“accompanš²!ying“k˜ey“sequence“are“un˜bMÞound“b˜y“default.ŽŸˆ‘!GIn–%Xthe‘%Wfolloš²!wing“descriptions,‘?'åpMÞoin˜t‘bXárefers›%Wto“the˜curren²!t“cursor“pMÞosition,‘?'and˜åmark‘Ï\árefersŽ¡‘Gto–«Aa“cursor‘«BpMÞosition“sa•²!v“ed›«Ab“y˜the˜âset-mark‘«Bácommand.‘ìnThe˜text˜bMÞet“w“een‘«Bthe˜pMÞoin“t˜andŽ¡‘Gmark–¦fis“referred“to“as“the“åregioná.ŽŸƨ‘Gëe1.4.1‘d(Commands–íMF‘þÄ£or“Mo–ávingŽŽŸ–‡‘Gâbeginning-of-line‘¦f(C-a)Ž¡‘Kâ:áMo•²!v“e–¦fto“the“start“of“the“curren²!t“line.Ž©ùÜ‘Gâend-of-line‘¦f(C-e)Ž¡‘Kâ:áMo•²!v“e–¦fto“the“end“of“the“line.ŽŸùÛ‘Gâforward-char‘¦f(C-f)Ž¡‘Kâ:áMo•²!v“e›¦fforw“ard˜a˜c“haracter.ަ‘Gâbackward-char‘¦f(C-b)Ž¡‘Kâ:áMo•²!v“e›¦fbac“k˜a˜c“haracter.ŽŸùÛ‘Gâforward-word‘¦f(M-f)Ž¡‘Kâ:áMo•²!v“e›¢kforw“ard˜to‘¢jthe˜end˜of˜the˜next˜w“ord.‘܉W‘ÿeords˜are˜compMÞosed‘¢jof˜letters˜andŽ¡‘Kâ:digits.ަ‘Gâbackward-word‘¦f(M-b)Ž¡‘Kâ:áMo•²!v“e››bac“k˜to˜the˜start˜of˜the˜curren“t˜or˜previous˜w“ord.‘|W‘ÿeords˜are˜compMÞosedŽ¡‘Kâ:of–¦fletters“and“digits.ŽŸùÛ‘Gâclear-screen‘¦f(C-l)Ž¡‘Kâ:áClear–2Ôthe›2Õscreen“and˜redra²!w“the˜currenš²!t“line,‘Iñlea˜ving‘2Õthe“curren˜t›2Õline“at˜the“topŽ¡‘Kâ:of–¦fthe“screen.ަ‘Gâredraw-current-line‘¦f()Ž¡‘Kâ:áRefresh–¦fthe“currenš²!t“line.‘ÝÝBy“default,“this“is“un˜bMÞound.ŽŸƨ‘Gëe1.4.2‘d(Commands–íMF‘þÄ£or“Manipulating“The“HistoryŽŽŸ–ˆ‘Gâaccept-line–¦f(Newline“or“Return)Ž¡‘Kâ:áAccept–:the“line“regardless“of›:where“the“cursor“is.‘˜äIf“this˜line“is“non-empt²!y‘ÿe,‘^þitŽ¡‘Kâ:ma²!y–Ô0bMÞe›Ô1added“to˜the“history“list˜for“future˜recall“with“âadd_history()á.‘g=If“thisŽ¡‘Kâ:line–¦fis“a“moMÞdi ed“history“line,“the“history“line“is“restored“to“its“original“state.ŽŸùÛ‘Gâprevious-history‘¦f(C-p)Ž¡‘Kâ:áMo•²!v“e›¦f`bac“k'˜through˜the˜history˜list,˜fetc“hing˜the˜previous˜command.ŽŽŒ‹ÀÄŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®15ŽŽŽ ƒ33 ý ÌÍ‘Gânext-history‘¦f(C-n)ޤ 33‘Kâ:áMo•²!v“e›¦f`forw“ard'˜through˜the˜history˜list,˜fetc“hing˜the˜next˜command.Ž©‘Gâbeginning-of-history‘¦f(M-<)Ž¡‘Kâ:áMo•²!v“e–¦fto“the“ rst“line“in“the“history‘ÿe.ŽŸ‘Gâend-of-history‘¦f(M->)Ž¡‘Kâ:áMo•²!v“e–¦fto“the“end“of“the“input“history‘ÿe,“i.e.,“the“line“currenš²!tly“bMÞeing“en˜tered.ަ‘Gâreverse-search-history‘¦f(C-r)Ž¡‘Kâ:áSearc•²!h›½:bac“kw“ard˜starting‘½;at˜the˜curren“t˜line˜and˜mo“ving‘½;`up'˜through˜the˜his-Ž¡‘Kâ:tory–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.ŽŸ‘Gâforward-search-history‘¦f(C-s)Ž¡‘Kâ:áSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.ަ‘Gânon-incremental-reverse-search-history‘¦f(M-p)Ž¡‘Kâ:áSearc•²!h›½:bac“kw“ard˜starting‘½;at˜the˜curren“t˜line˜and˜mo“ving‘½;`up'˜through˜the˜his-Ž¡‘Kâ:tory–Ryas“necessary“using‘Rxa“non-incremenš²!tal“searc˜h“for“a“string‘Rxsupplied“b˜y“theŽ¡‘Kâ:user.ŽŸ‘Gânon-incremental-forward-search-history‘¦f(M-n)Ž¡‘Kâ:áSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–3ªas›3©necessary“using“a˜non-incremenš²!tal“searc˜h“for›3©a“string“supplied˜b²!y“theŽ¡‘Kâ:user.ަ‘Gâhistory-search-forward‘¦f()Ž¡‘Kâ:áSearc•²!h›úOforw“ard˜through–úPthe˜history˜for˜the˜string˜of“c•²!haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–QËof›QÌthe“curren²!t“line˜and“the“pMÞoinš²!t.‘à The“searc˜h‘QÌstring“m˜ust“matc˜h‘QÌat“theŽ¡‘Kâ:bMÞeginning–è"of“a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘thisŽ¡‘Kâ:command–¦fis“un²!bMÞound.ŽŸ‘Gâhistory-search-backward‘¦f()Ž¡‘Kâ:áSearc•²!h›-»bac“kw“ard–-¼through˜the“history˜for“the˜string“of˜cš²!haracters“bMÞet˜w˜een‘-»theŽ¡‘Kâ:start–QËof›QÌthe“curren²!t“line˜and“the“pMÞoinš²!t.‘à The“searc˜h‘QÌstring“m˜ust“matc˜h‘QÌat“theŽ¡‘Kâ:bMÞeginning–è"of“a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘thisŽ¡‘Kâ:command–¦fis“un²!bMÞound.ަ‘Gâhistory-substr-search-forward‘¦f()Ž¡‘Kâ:áSearc•²!h›úOforw“ard˜through–úPthe˜history˜for˜the˜string˜of“c•²!haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–uæof›uçthe“curren²!t“line“and˜the“pMÞoinš²!t.‘ͳThe“searc˜h“string“ma˜y‘uçmatc˜h“an˜ywhereŽ¡‘Kâ:in–è"a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘this“commandŽ¡‘Kâ:is‘¦fun²!bMÞound.ŽŸ‘Gâhistory-substr-search-backward‘¦f()Ž¡‘Kâ:áSearc•²!h›-»bac“kw“ard–-¼through˜the“history˜for“the˜string“of˜cš²!haracters“bMÞet˜w˜een‘-»theŽ¡‘Kâ:start–uæof›uçthe“curren²!t“line“and˜the“pMÞoinš²!t.‘ͳThe“searc˜h“string“ma˜y‘uçmatc˜h“an˜ywhereŽ¡‘Kâ:in–è"a“history“line.‘£This“is“a“non-incremenš²!tal“searc˜h.‘£By“default,‘ø‘this“commandŽ¡‘Kâ:is‘¦fun²!bMÞound.ަ‘Gâyank-nth-arg‘¦f(M-C-y)Ž¡‘Kâ:áInsert–sÐthe›sÏ rst“argumen²!t˜to“the˜previous“command˜(usually“the˜second“w²!ordŽ¡‘Kâ:on–Ô|the›Ô}previous“line)˜at“pMÞoin²!t.‘h!With“an˜argumen²!t“åná,‘àinsert˜the“ånáth˜w²!ord“fromŽŽŒ‹ÉÒŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®16ŽŽŽ ƒ33 ý ÌÍ‘Kâ:the–0previous“command“(the“wš²!ords“in‘0the“previous“command“bMÞegin“with“w˜ordޤ 33‘Kâ:0).‘-dA‘À negativ•²!e›Àéargumen“t–Àèinserts˜the“ånáth“w²!ord˜from“the˜end“of˜the“previousŽ¡‘Kâ:command.‘ÍOnce–öGthe“argumenš²!t‘öFån“áis“computed,‘ >the“argumen˜t“is“extracted‘öFas“ifŽ¡‘Kâ:the–¦f`â!èná'“history“expansion“had“bšMÞeen“sp˜eci ed.Ž©ŽÓ‘Gâyank-last-arg–¦f(M-.“or“M-_)Ž¡‘Kâ:áInsert–5Elast›5Fargumen²!t“to“the˜previous“command“(the˜last“w²!ord“of˜the“previousŽ¡‘Kâ:history–"enš²!try).‘With“a‘#n˜umeric“argumen˜t,‘ ’bMÞeha˜v˜e“exactly‘#lik˜e“âyank-nth-argá.Ž¡‘Kâ:Successivš²!e–ú%calls‘ú&to“âyank-last-arg“ámo˜v˜e‘ú&bac˜k“through‘ú&the“history“list,‘™insertingŽ¡‘Kâ:the–µlast‘µwš²!ord“(or“the“w˜ord‘µspMÞeci ed“b˜y“the“argumen˜t›µto“the“ rst“call)˜of“eac²!h“lineŽ¡‘Kâ:in–`¿turn.‘ êAnš²!y“n˜umeric‘`Àargumen˜t“supplied“to‘`Àthese“successiv˜e‘`Àcalls“determinesŽ¡‘Kâ:the–-Idirection›-Jto“mo•²!v“e˜through‘-Ithe˜history‘ÿe.‘r‡A‘-'negativ“e‘-Iargumen“t˜switc“hes‘-ItheŽ¡‘Kâ:direction–¼òthrough›¼óthe“history“(bac²!k˜or“forw²!ard).‘ The“history˜expansion“facilitiesŽ¡‘Kâ:are–Mêused“to›Mëextract“the“last“argumen²!t,‘_as“if“the“`â!$á'“history˜expansion“had“bMÞeenŽ¡‘Kâ:spMÞeci ed.ŽŸ[ ‘Gëe1.4.3‘d(Commands–íMF›þÄ£or“Changing“T˜extŽŽŸa‘Gèend-of-file–¦fâ(usually“C-d)Ž¡‘Kâ:áThe–%¡c²!haracter›% indicating“end-of- le“as“set,–?bfor˜example,“b²!y–%¡âsttyá.‘²ñIf˜this“c²!harac-Ž¡‘Kâ:ter–×is“read“when“there“are“no“cš²!haracters“on“the“line,‘ÒÁand“pMÞoin˜t“is“at“the“bMÞeginningŽ¡‘Kâ:of–¦fthe“line,“Readline“in²!terprets“it“as“the“end“of“input“and“returns“çeofá.ަ‘Gâdelete-char‘¦f(C-d)Ž¡‘Kâ:áDelete–þ¾the“cš²!haracter“at“pMÞoin˜t.‘æåIf‘þ½this“function“is“bMÞound“to“the“same“c˜haracterŽ¡‘Kâ:as–¦fthe“ttš²!y“çeof“ác˜haracter,“as“èC-d“ácommonly“is,“see“abMÞo˜v˜e“for“the“e ects.ަ‘Gâbackward-delete-char‘¦f(Rubout)Ž¡‘Kâ:áDelete–Ÿ§the“cš²!haracter‘Ÿ¨bMÞehind“the“cursor.‘ÛA‘Ÿ¦n˜umeric“argumen˜t“means‘Ÿ¨to“kill“theŽ¡‘Kâ:c²!haracters–¦finstead“of“deleting“them.ަ‘Gâforward-backward-delete-char‘¦f()Ž¡‘Kâ:áDelete–˜‘the›˜’c²!haracter“under˜the“cursor,‘Õunless“the˜cursor“is“at˜the“end˜of“theŽ¡‘Kâ:line,‘×~in–Í­whicš²!h‘ͬcase“the“c˜haracter›ͬbMÞehind“the˜cursor“is˜deleted.‘S±By“default,‘×~thisŽ¡‘Kâ:is–¦fnot“bMÞound“to“a“k²!ey‘ÿe.ަ‘Gâquoted-insert–¦f(C-q“or“C-v)Ž¡‘Kâ:áAdd–¸the‘¹next“cš²!haracter“t˜ypMÞed‘¹to“the“line“v˜erbatim.‘CÔThis‘¹is“ho˜w“to‘¹insert“k˜eyŽ¡‘Kâ:sequences–¦flik²!e“èC-qá,“for“example.ŽŸŽÒ‘Gâtab-insert‘¦f(M-TAB)Ž¡‘Kâ:áInsert–¦fa“tab“c²!haracter.ަ‘Gâself-insert–¦f(a,“b,“A,“1,“!,“...Ž‘åe)Ž¡‘Kâ:áInsert‘¦fy²!ourself.ަ‘Gâtranspose-chars‘¦f(C-t)Ž¡‘Kâ:áDrag–Õãthe“cš²!haracter“bMÞefore‘Õâthe“cursor“forw˜ard“o˜v˜er“the“c˜haracter‘Õâat“the“cursor,Ž¡‘Kâ:moš²!ving–C"the“cursor‘C!forw˜ard“as“w˜ell.‘´If“the“insertion‘C!pMÞoin˜t“is“at“the‘C!end“of“theŽ¡‘Kâ:line,‘ÕÍthen–¡¦this“transpMÞoses“the“last“t•²!w“o‘¡§c“haracters–¡¦of“the“line.‘†óNegativš²!e“argumen˜tsŽ¡‘Kâ:ha•²!v“e–¦fno“e ect.ŽŽŒ‹ÖXŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®17ŽŽŽ ƒ33 ý ÌÍ‘Gâtranspose-words‘¦f(M-t)ޤ 33‘Kâ:áDrag–áÜthe“w²!ord‘áÝbšMÞefore“p˜oinš²!t“past“the“w˜ord‘áÝafter“p•MÞoin˜t,‘ð¹mo˜ving‘áÝp“oin˜t–áÜpast“thatŽ¡‘Kâ:wš²!ord–g¸as“w˜ell.‘ÈùIf“the“insertion“pMÞoin˜t“is“at“the“end“of“the‘g¹line,‘tAthis“transpMÞoses“theŽ¡‘Kâ:last›¦ft•²!w“o˜w“ords˜on˜the˜line.Ž©Ù‘Gâupcase-word‘¦f(M-u)Ž¡‘Kâ:áUppMÞercase–ÖÓthe‘ÖÒcurrenš²!t“(or“follo˜wing)“w˜ord.‘o#With“a‘ÖÒnegativ˜e“argumen˜t,‘âîuppMÞer-Ž¡‘Kâ:case–¦fthe“previous“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ަ‘Gâdowncase-word‘¦f(M-l)Ž¡‘Kâ:áLo•²!w“ercase›”ãthe‘”âcurren“t˜(or‘”âfollo“wing)˜w“ord.‘‚²With‘”âa˜negativ“e˜argumen“t,‘Ë–lo“w“ercaseŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ަ‘Gâcapitalize-word‘¦f(M-c)Ž¡‘Kâ:áCapitalize–6the›5curren²!t“(or˜folloš²!wing)“w˜ord.‘€#With‘5a“negativ˜e“argumen˜t,‘ÅrcapitalizeŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ަ‘Gâoverwrite-mode‘¦f()Ž¡‘Kâ:áT‘ÿeoggle›öo•²!v“erwrite˜mo•MÞde.‘Í With˜an˜explicit˜p“ositiv•²!e‘ö n“umeric˜argumen“t,‘ switc“hesŽ¡‘Kâ:to›™ÿo•²!v“erwrite–šmoMÞde.‘„fWith˜an“explicit˜non-pMÞositivš²!e“n˜umeric–™ÿargumen˜t,‘Ï®switc˜hes“toŽ¡‘Kâ:insert–¬ÛmoMÞde.‘ñ=This›¬Ücommand“a ects“only˜âemacs“ámošMÞde;‘°âvi“ámo˜de‘¬Üdo˜es“o•²!v“erwriteŽ¡‘Kâ:di eren•²!tly‘ÿe.‘ÝÝEac“h–¦fcall“to“âreadline()“ástarts“in“insert“moMÞde.Ž©†%‘Kâ:In›Ièo•²!v“erwrite˜moMÞde,‘òÈc“haracters˜bMÞound˜to˜âself-insert‘Iéáreplace˜the˜text˜atŽ¡‘Kâ:pMÞoinš²!t–rather“than“pushing“the“text“to“the“righ˜t.‘‚Characters“bMÞound“toŽ¡‘Kâ:âbackward-delete-char–¦fáreplace“the“c²!haracter“bšMÞefore“p˜oin²!t“with“a“space.ަ‘Kâ:By–¦fdefault,“this“command“is“un²!bMÞound.ŽŸ¥ä‘Gëe1.4.4‘d(Killing–íMAnd“Y‘þÄ£ankingŽŽŸ$‘Gâkill-line‘¦f(C-k)Ž¡‘Kâ:áKill–¦fthe“text“from“pMÞoin²!t“to“the“end“of“the“line.Ž©Ù‘Gâbackward-kill-line–¦f(C-x“Rubout)Ž¡‘Kâ:áKill›¦fbac•²!kw“ard˜to˜the˜bMÞeginning˜of˜the˜line.ަ‘Gâunix-line-discard‘¦f(C-u)Ž¡‘Kâ:áKill›¦fbac•²!kw“ard˜from˜the˜cursor˜to˜the˜bMÞeginning˜of˜the˜curren“t˜line.ަ‘Gâkill-whole-line‘¦f()Ž¡‘Kâ:áKill–cjall“cš²!haracters‘cion“the“curren˜t“line,‘’ªno“matter“where“pMÞoin˜t“is.‘èBy“default,Ž¡‘Kâ:this–¦fis“un²!bMÞound.ަ‘Gâkill-word‘¦f(M-d)Ž¡‘Kâ:áKill–‡ from“pMÞoin²!t›‡ to“the“end“of“the˜currenš²!t“w˜ord,‘Por‘‡ if“bMÞet˜w˜een“w˜ords,‘Qto“the“endŽ¡‘Kâ:of–¦fthe“next“w²!ord.‘ÝÝW‘ÿeord“bMÞoundaries“are“the“same“as“âforward-wordá.ަ‘Gâbackward-kill-word‘¦f(M-DEL)Ž¡‘Kâ:áKill–wÖthe›w×w²!ord“b•MÞehind˜p“oin²!t.‘ÎXW‘ÿeord›wÖb“oundaries˜are–w×the˜same“as˜âbackward-wordá.ަ‘Gâunix-word-rubout‘¦f(C-w)Ž¡‘Kâ:áKill–ÍLthe“w²!ord“bšMÞehind“p˜oinš²!t,‘×using“white“space“as“a“w˜ord“bMÞoundary‘ÿe.‘RThe“killedŽ¡‘Kâ:text–¦fis“sa•²!v“ed–¦fon“the“kill-ring.ŽŽŒ‹ãŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®18ŽŽŽ ƒ33 ý ÌÍ‘Gâunix-filename-rubout‘¦f()ޤ 33‘Kâ:áKill–]Üthe“w²!ord“bšMÞehind“p˜oinš²!t,‘‹ºusing“white“space“and“the“slash“c˜haracter“as“theŽ¡‘Kâ:wš²!ord–¦fbMÞoundaries.‘ÝÝThe“killed“text“is“sa˜v˜ed“on“the“kill-ring.Ž©î‘Gâdelete-horizontal-space‘¦f()Ž¡‘Kâ:áDelete–¦fall“spaces“and“tabs“around“pMÞoinš²!t.‘ÝÝBy“default,“this“is“un˜bMÞound.ަ‘Gâkill-region‘¦f()Ž¡‘Kâ:áKill–¦fthe“text“in“the“currenš²!t“region.‘ÝÝBy“default,“this“command“is“un˜bMÞound.ŽŸí‘Gâcopy-region-as-kill‘¦f()Ž¡‘Kâ:áCop²!y–³the›²text“in˜the“region˜to“the˜kill“bu er,‘0Eso˜it“can˜bMÞe“y•²!ank“ed˜righ“t‘³a“w“a“y‘ÿe.Ž¡‘Kâ:By–¦fdefault,“this“command“is“un²!bMÞound.ަ‘Gâcopy-backward-word‘¦f()Ž¡‘Kâ:áCopš²!y–žthe“w˜ord“bšMÞefore“p˜oinš²!t“to“the“kill‘žbu er.‘ÄÿThe“w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“âbackward-wordá.‘ÝÝBy“default,“this“command“is“un²!bMÞound.ަ‘Gâcopy-forward-word‘¦f()Ž¡‘Kâ:áCopš²!y–º8the“w˜ord“follo˜wing‘º9pMÞoin˜t“to“the“kill“bu er.‘SThe‘º9w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“âforward-wordá.‘ÝÝBy“default,“this“command“is“un²!bMÞound.ަ‘Gâyank‘¦f(C-y)Ž¡‘Kâ:áY‘ÿeank–¦fthe“top“of“the“kill“ring“inš²!to“the“bu er“at“pMÞoin˜t.ަ‘Gâyank-pop‘¦f(M-y)Ž¡‘Kâ:áRotate–'!the“kill-ring,‘GPand“y²!ank“the“new“top.‘`Y‘ÿeou“can‘'"only“do“this“if“the“priorŽ¡‘Kâ:command–¦fis“âyank“áor“âyank-popá.ŽŸ軑Gëe1.4.5‘d(Spiecifying–íMNumeric“Argumen–átsŽŽŸ§‘Gâdigit-argument–¦f(èM-0â,“èM-1â,“...Ž‘‹ËèM--â)Ž¡‘Kâ:áAdd–:Lthis›:Kdigit“to“the˜argumenš²!t“already“accum˜ulating,‘Oêor“start“a‘:Knew“argumen˜t.Ž¡‘Kâ:èM--–¦fástarts“a“negativš²!e“argumen˜t.ަ‘Gâuniversal-argument‘¦f()Ž¡‘Kâ:áThis–kis“another“w•²!a“y›jto–kspMÞecify“an“argumen²!t.‘«ßIf“this“command˜is“follo•²!w“ed›kb“y˜oneŽ¡‘Kâ:or–more›digits,‘“´optionally“with˜a“leading“min²!us“sign,‘“³those“digits“de ne˜the“ar-Ž¡‘Kâ:gumenš²!t.‘ÐÚIf‘[the–\command“is“follo˜w˜ed“b˜y“digits,‘‡*executing“âuniversal-argumentŽ¡‘Kâ:áagain–Ñ«ends‘Ѫthe“nš²!umeric“argumen˜t,‘Ü{but“is“otherwise›Ѫignored.‘_«As“a˜spMÞecial“case,Ž¡‘Kâ:if–ñúthis›ñûcommand“is“immediately˜follo•²!w“ed›ñúb“y˜a˜c“haracter–ñûthat˜is˜neither“a˜digitŽ¡‘Kâ:or‘Zwminš²!us–Zxsign,‘i§the“argumen˜t‘Zwcoun˜t“for›Zwthe“next˜command“is˜mš²!ultiplied“b˜y‘Zwfour.Ž¡‘Kâ:The›{targumen•²!t‘{ucoun“t˜is˜initially–{uone,‘°·so˜executing“this˜function˜the“ rst˜timeŽ¡‘Kâ:makš²!es–Ï2the“argumen˜t“coun˜t“four,‘Ùea“second‘Ï3time“mak˜es“the“argumen˜t“coun˜t“six-Ž¡‘Kâ:teen,–¦fand“so“on.‘ÝÝBy“default,“this“is“not“bMÞound“to“a“k²!ey‘ÿe.ŽŸ軑Gëe1.4.6‘d(Letting–íMReadline“T–áypie“F›þÄ£or“Y˜ouŽŽŸ§‘Gâcomplete‘¦f(TAB)Ž¡‘Kâ:áA²!ttempt–¶èto›¶çpMÞerform“completion˜on“the˜text“b•MÞefore˜p“oin²!t.‘Ž The˜actual‘¶ècompletionŽ¡‘Kâ:pšMÞerformed–¦fis“application-sp˜eci c.‘ÝÝThe“default“is“ lename“completion.ŽŽŒ‹ò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®19ŽŽŽ ƒ33 ý ÌÍ‘Gâpossible-completions‘¦f(M-?)ޤ 33‘Kâ:áList–)¯the›)®pMÞossible“completions˜of“the˜text“b•MÞefore˜p“oin•²!t.‘g·When˜displa“ying‘)¯com-Ž¡‘Kâ:pletions,‘ôfReadline–äÌsets›äÍthe“n•²!um“bMÞer˜of–äÌcolumns“used˜for“displa²!y˜to“the˜v‘ÿdDalue“ofŽ¡‘Kâ:âcompletion-display-widthá,‘Uthe–aŒv›ÿdDalue“of“the“en•²!vironmen“t–aŒv˜ariable“âCOLUMNSá,Ž¡‘Kâ:or–¦fthe“screen“width,“in“that“order.Ž©‚T‘Gâinsert-completions‘¦f(M-*)Ž¡‘Kâ:áInsert–«µall“completions“of“the“text“bšMÞefore“p˜oinš²!t“that“w˜ould“ha˜v˜e“bMÞeen“generatedŽ¡‘Kâ:b²!y‘¦fâpossible-completionsá.ŽŸ‚U‘Gâmenu-complete‘¦f()Ž¡‘Kâ:áSimilar–ÛVto“âcompleteá,‘óbut“replaces“the“wš²!ord“to‘ÛWbMÞe“completed“with“a“single“matc˜hŽ¡‘Kâ:from–‹æthe‘‹çlist“of“pšMÞossible“completions.‘Ž^Rep˜eated“execution‘‹çof“âmenu-completeŽ¡‘Kâ:ásteps–Õ¯through›Õ°the“list“of“pMÞossible˜completions,‘!inserting“eacš²!h“matc˜h‘Õ°in“turn.Ž¡‘Kâ:A²!t–jthe“end“of›jthe“list“of“completions,‘›šthe“bMÞell“is“rung˜(sub‘›»ject“to“the“settingŽ¡‘Kâ:of–Thâbell-styleá)“and“the›Tioriginal“text“is“restored.‘çãAn“argumen²!t˜of“ån“ámo•²!v“es‘ThånŽ¡‘Kâ:ápMÞositions–,Rforw²!ard›,Qin“the“list˜of“matcš²!hes;‘oGa“negativ˜e‘,Qargumen˜t“ma˜y“bMÞe‘,Qused“toŽ¡‘Kâ:mo•²!v“e›™Žbac“kw“ard˜through˜the˜list.‘·VThis˜command˜is˜in“tended˜to˜b•MÞe˜b“ound˜toŽ¡‘Kâ:âTABá,–¦fbut“is“unš²!bMÞound“b˜y“default.ަ‘Gâmenu-complete-backward‘¦f()Ž¡‘Kâ:áIdenš²!tical–5ato“âmenu-completeá,‘Ybut‘5`mo˜v˜es“bac˜kw˜ard“through“the‘5`list“of“pMÞossibleŽ¡‘Kâ:completions,–¦fas“if“âmenu-complete“áhad“bMÞeen“givš²!en“a“negativ˜e“argumen˜t.ަ‘Gâdelete-char-or-list‘¦f()Ž¡‘Kâ:áDeletes–«éthe›«èc²!haracter“under“the“cursor˜if“not“at˜the“bMÞeginning“or“end˜of“theŽ¡‘Kâ:line–öØ(lik²!e›öÙâdelete-chará).‘ Ï4If“at˜the“end“of˜the“line,‘ŠôbMÞeha•²!v“es˜iden“tically‘öØtoŽ¡‘Kâ:âpossible-completionsá.‘ÝÝThis–¦fcommand“is“unš²!bMÞound“b˜y“default.ŽŸO!‘Gëe1.4.7‘d(Keybioard‘íMMacrosŽŽŸÚÄ‘Gâstart-kbd-macro–¦f(C-x“()Ž¡‘Kâ:áBegin–¦fsaš²!ving“the“c˜haracters“t˜ypMÞed“in˜to“the“curren˜t“k˜eybMÞoard“macro.ަ‘Gâend-kbd-macro–¦f(C-x“))Ž¡‘Kâ:áStop–G!saš²!ving“the“c˜haracters‘G"t˜ypMÞed“in˜to“the“curren˜t“k˜eybMÞoard“macro‘G"and“sa˜v˜e“theŽ¡‘Kâ:de nition.ŽŸ‚U‘Gâcall-last-kbd-macro–¦f(C-x“e)Ž¡‘Kâ:áRe-execute–9Bthe“last‘9Ckš²!eybMÞoard“macro“de ned,‘]ùb˜y“making“the‘9Cc˜haracters“in“theŽ¡‘Kâ:macro–¦fappšMÞear“as“if“t²!yp˜ed“at“the“k²!eyb˜oard.ަ‘Gâprint-last-kbd-macro‘¦f()Ž¡‘Kâ:áPrinš²!t–¦fthe“last“k˜ebMÞoard“macro“de ned“in“a“format“suitable“for“the“åinputrc‘Pjá le.ŽŸO!‘Gëe1.4.8‘d(Some–íMMiscellaneous“CommandsŽŽŸÚÄ‘Gâre-read-init-file–¦f(C-x“C-r)Ž¡‘Kâ:áRead– kin“the› jcon•²!ten“ts– kof“the“åinputrc‘Joá le,‘ÔÐand“incorpMÞorate“an²!y˜bindings“or“v‘ÿdDariableŽ¡‘Kâ:assignmen²!ts–¦ffound“there.ަ‘Gâabort‘¦f(C-g)Ž¡‘Kâ:áAbMÞort–/the›/curren²!t“editing˜command“and˜ring“the˜terminal's“bMÞell˜(sub‘›»ject“to˜theŽ¡‘Kâ:setting–¦fof“âbell-styleá).ŽŽŒ‹ú9Ÿò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®20ŽŽŽ ƒ33 ý ÌÍ‘Gâdo-uppercase-version–¦f(M-a,“M-b,“M-èxâ,“...Ž‘åe)ޤ 33‘Kâ:áIf–Qõthe“meta ed“cš²!haracter“åx‘Táis“lo˜w˜ercase,‘bÙrun“the“command“that“is“bMÞound“to“theŽ¡‘Kâ:corresp•MÞonding›¦fupp“ercase˜c²!haracter.Ž©‘Gâprefix-meta‘¦f(ESC)Ž¡‘Kâ:áMetafy–‚2the›‚1next“c•²!haracter˜t“ypMÞed.‘q@This–‚2is˜for“k²!eybMÞoards˜without“a˜meta“k²!ey‘ÿe.Ž¡‘Kâ:Tš²!yping–¦f`âESC“fá'“is“equiv‘ÿdDalen˜t“to“t˜yping“èM-fá.ŽŸ‘Gâundo–¦f(C-_“or“C-x“C-u)Ž¡‘Kâ:áIncremenš²!tal–¦fundo,“separately“remem˜bMÞered“for“eac˜h“line.ަ‘Gârevert-line‘¦f(M-r)Ž¡‘Kâ:áUndo–úall“cš²!hanges“made“to“this“line.‘ØåThis“is“lik˜e“executing“the“âundo“ácommandŽ¡‘Kâ:enough–¦ftimes“to“get“bac²!k“to“the“bMÞeginning.ŽŸ‘Gâtilde-expand‘¦f(M-~)Ž¡‘Kâ:áPš²!erform–¦ftilde“expansion“on“the“curren˜t“w˜ord.ަ‘Gâset-mark‘¦f(C-@)Ž¡‘Kâ:áSet–ðthe“mark“to“the“pMÞoinš²!t.‘ºØIf“a‘ðn˜umeric“argumen˜t“is“supplied,‘ythe“mark“is“setŽ¡‘Kâ:to–¦fthat“pMÞosition.ŽŸ‘Gâexchange-point-and-mark–¦f(C-x“C-x)Ž¡‘Kâ:áSwš²!ap–¾Òthe“pMÞoin˜t“with“the“mark.‘'"The“curren˜t“cursor“pMÞosition“is“set“to“the“sa˜v˜edŽ¡‘Kâ:pšMÞosition,–¦fand“the“old“cursor“p˜osition“is“sa•²!v“ed–¦fas“the“mark.ަ‘Gâcharacter-search‘¦f(C-])Ž¡‘Kâ:áA‘ü&cš²!haracter–üQis‘üRread“and“pMÞoin˜t‘üRis“mo˜v˜ed“to›üRthe“next“oMÞccurrence“of˜that“c²!haracter.Ž¡‘Kâ:A–¦fnegativš²!e“coun˜t“searc˜hes“for“previous“oMÞccurrences.ŽŸ‘Gâcharacter-search-backward‘¦f(M-C-])Ž¡‘Kâ:áA‘c"c²!haracter–c•is›c”read“and˜pMÞoinš²!t“is“mo˜v˜ed›c”to“the˜previous“oMÞccurrence˜of“thatŽ¡‘Kâ:c•²!haracter.‘ÝÝA›¦fnegativ“e˜coun“t˜searc“hes˜for˜subsequen“t˜oMÞccurrences.ަ‘Gâskip-csi-sequence‘¦f()Ž¡‘Kâ:áRead–G¬enough“cš²!haracters‘G­to“consume“a“m˜ulti-k˜ey“sequence“suc˜h‘G­as“those“de nedŽ¡‘Kâ:for–z÷kš²!eys“lik˜e‘zøHome“and“End.‘[‘Suc˜h“sequences“bMÞegin“with‘zøa“Con˜trol“SequenceŽ¡‘Kâ:Indicator–fM(CSI),“usually–fLESC-[.‘’If“this–fMsequence“is“bMÞound‘fLto“â"\áe[â"á,‘–Fk²!eys“pro-Ž¡‘Kâ:ducing–Ö‰sucš²!h“sequences“will‘Öˆha˜v˜e“no“e ect“unless“explicitly“bMÞound‘Öˆto“a“readlineŽ¡‘Kâ:command,‘ßÔinstead–ÔXof“inserting“straš²!y“c˜haracters“in˜to“the“editing‘ÔWbu er.‘g³This“isŽ¡‘Kâ:un•²!bMÞound›¦fb“y˜default,˜but˜usually˜bMÞound˜to˜ESC-[.ŽŸ‘Gâinsert-comment‘¦f(M-#)Ž¡‘Kâ:áWithout–GÑa‘GÐnš²!umeric“argumen˜t,‘p*the“v‘ÿdDalue›GÐof“the˜âcomment-begin“áv‘ÿdDariable˜is“in-Ž¡‘Kâ:serted–Ìèat›Ìéthe“bMÞeginning“of“the˜currenš²!t“line.‘QdIf“a“n˜umeric“argumen˜t‘Ìéis“supplied,Ž¡‘Kâ:this–cøcommand“acts“as“a“toggle:‘Yif‘c÷the“c²!haracters“at“the“bMÞeginning“of“the“lineŽ¡‘Kâ:do–¬Ânot“matc²!h“the‘¬Ãv›ÿdDalue“of“âcomment-beginá,‘®Ythe“v˜alue“is‘¬Ãinserted,‘®Yotherwise“theŽ¡‘Kâ:c²!haracters–Ó6in“âcomment-begin“áare›Ó5deleted“from“the“bMÞeginning“of“the˜line.‘dMInŽ¡‘Kâ:either–¦fcase,“the“line“is“accepted“as“if“a“newline“had“bšMÞeen“t²!yp˜ed.ަ‘Gâdump-functions‘¦f()Ž¡‘Kâ:áPrin²!t–,Qall›,Pof“the˜functions“and“their˜k²!ey“bindings“to˜the“Readline˜output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t›Îðis“supplied,‘Ùthe“output“is“formatted“in˜sucš²!h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“åinputrc‘Pjá le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.ŽŽŒ‹xŸò‘GáChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®21ŽŽŽ ƒ33 ý ÌÍ‘Gâdump-variables‘¦f()ޤ 33‘Kâ:áPrin²!t–ŽÉall“of“the‘ŽÈsettable“v›ÿdDariables“and“their“v˜alues“to‘ŽÈthe“Readline“output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t›Îðis“supplied,‘Ùthe“output“is“formatted“in˜sucš²!h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“åinputrc‘Pjá le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.Ž©33‘Gâdump-macros‘¦f()Ž¡‘Kâ:áPrinš²!t– ˆall“of“the‘ ‡Readline“k˜ey“sequences“bMÞound“to“macros‘ ‡and“the“strings“theyŽ¡‘Kâ:output.‘rŠIf–-Ja“nš²!umeric“argumen˜t“is›-Ksupplied,‘Othe“output“is“formatted˜in“suc²!h“aŽ¡‘Kâ:w•²!a“y–šthat›šit“can“bMÞe˜made“part“of˜an“åinputrc‘Dá le.‘ÙÂThis“command“is˜unš²!bMÞound“b˜yŽ¡‘Kâ:default.ަ‘Gâemacs-editing-mode‘¦f(C-e)Ž¡‘Kâ:áWhen–¦fin“âvi“ácommand“mošMÞde,“this“causes“a“switc²!h“to“âemacs“áediting“mo˜de.ަ‘Gâvi-editing-mode‘¦f(M-C-j)Ž¡‘Kâ:áWhen–¦fin“âemacs“áediting“mošMÞde,“this“causes“a“switc²!h“to“âvi“áediting“mo˜de.ŽŸ‘Gë\1.5‘™Readline–f@vi“Mos3deŽŽ¦‘GáWhile–É`the“Readline›É_library“doMÞes“not“ha•²!v“e–É`a˜full“set“of“âvi˜áediting“functions,‘Òit“doMÞes“con²!tainŽ¡‘Genough–to›žallo²!w“simple˜editing“of“the˜line.‘.ƒThe˜Readline“âvi“ámo•MÞde˜b“eha•²!v“es–as˜spMÞeci ed“inŽ¡‘Gthe–¦fçposix“ástandard.Ž©33‘!GIn–|Uorder›|Vto“switc•²!h˜in“teractiv“ely‘|UbMÞet“w“een˜âemacs–|Uáand˜âvi“áediting˜moMÞdes,‘„¿use˜the“commandŽ¡‘GèM-C-j–iá(bšMÞound‘jto“emacs-editing-mo˜de“when“in‘jâvi“ámo˜de“and“to‘jvi-editing-mo˜de“in“âemacsŽ¡‘GámošMÞde).‘ÝÝThe–¦fReadline“default“is“âemacs“ámo˜de.ަ‘!GWhen–›‰yš²!ou“en˜ter“a“line“in“âvi“ámoMÞde,‘µy˜ou‘›Šare“already“placed“in“`insertion'“moMÞde,‘µas“if“y˜ouŽ¡‘Ghad–ˆtš²!ypMÞed“an‘ˆ`âiá'.‘ÓÃPressing“âESC“áswitc˜hes‘ˆy˜ou“in˜to“`command'“moMÞde,‘Ž(where“y˜ou‘ˆcan“edit“theŽ¡‘Gtext–of“the“line“with“the“standard“âvi“ámo•²!v“emen“t›k“eys,‘);mo“v“e˜to˜previous˜history˜lines˜withŽ¡‘G`âká'–¦fand“subsequen²!t“lines“with“`âjá',“and“so“forth.ŽŽŒ‹˜Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:22ŽŽŽ ƒ33 ý ÌÍ‘GëSApp›Š=endix‘záA‘ ¸QGNU–z³F‘þaGree“Do˜cumen‘ÿuÂtation“LicenseŽŽŸƒª’£¤AáV‘ÿeersion–¦f1.3,“3“No•²!v“em“bMÞer‘¦f2008Ž©Q‘.ùœCop•²!yrigh“t‘±ž«‚cŽŽŽ‘¦fê ŽŽŽŽ‘@á2000,–¦f2001,“2002,“2007,“2008“F›ÿeree“Soft•²!w“are–¦fF˜oundation,“Inc.ޤ 33‘.ùœâhttp://fsf.org/ŽŸff‘.ùœáEv•²!ery“one–¦fis“pMÞermitted“to“copš²!y“and“distribute“v˜erbatim“copiesŽ¡‘.ùœof–¦fthis“license“doMÞcumenš²!t,“but“c˜hanging“it“is“not“allo˜w˜ed.ަ‘-0.Ž‘'¿«PREAMBLEަ‘'¿«The–vQpurpMÞose›vRof“this˜License“is˜to“mak²!e“a˜man²!ual,›ªLtextb•MÞo“ok,˜or–vQother‘vRfunctional“andŽ¡‘'¿«useful–žïdoMÞcumen²!t›žîåfree‘;öáin“the“sense˜of“freedom:‘Ú!to“assure“ev•²!ery“one‘žïthe˜e ectiv“e‘žïfreedomŽ¡‘'¿«to–Æ9cop²!y›Æ:and“redistribute“it,‘Î.with“or˜without“moMÞdifying“it,‘Î.either“commercially˜or“non-Ž¡‘'¿«commercially–ÿe.‘cÏSecondarily“,‘Hàthis–(aLicense›(bpreserv²!es“for“the˜author“and“publisher˜a“w•²!a“yŽ¡‘'¿«to–W9get“credit›W8for“their“w²!ork,‘ƒmwhile“not“bMÞeing“considered˜respšMÞonsible“for“mo˜di cationsŽ¡‘'¿«made–¦fb²!y“others.ަ‘'¿«This–È/License›È0is“a“kind“of˜\cop•²!yleft",‘ô whic“h–È/means˜that“deriv‘ÿdDativš²!e“w˜orks“of‘È0the“doMÞcumen˜tŽ¡‘'¿«m•²!ust›õthemselv“es–ôbMÞe˜free˜in˜the“same˜sense.‘ ‰It˜complemen²!ts˜the“GNU‘ÙGeneral˜PublicŽ¡‘'¿«License,–¦fwhicš²!h“is“a“cop˜yleft“license“designed“for“free“soft˜w˜are.ަ‘'¿«W‘ÿee›‹#ha•²!v“e˜designed˜this˜License˜in˜order˜to˜use˜it‘‹"for˜man“uals˜for˜free˜soft“w“are,‘—bMÞecauseŽ¡‘'¿«free›?soft•²!w“are˜needs˜free‘>doMÞcumen“tation:‘³a˜free˜program˜should‘>come˜with˜man“ualsŽ¡‘'¿«pro²!viding–urthe›ussame“freedoms˜that“the˜soft•²!w“are–urdoMÞes.‘ÍŒBut˜this“License˜is“not˜limited“toŽ¡‘'¿«soft•²!w“are›­âman“uals;‘±¡it–­ãcan˜bMÞe“used˜for“an²!y˜textual“w²!ork,‘¯Áregardless“of˜sub‘›»ject“matter˜orŽ¡‘'¿«whether–Ç2it“is“published“as“a“prin²!ted“b•MÞo“ok.‘@BW‘ÿee–Ç2recommend“this“License“principally“forŽ¡‘'¿«w²!orks–¦fwhose“purpMÞose“is“instruction“or“reference.ަ‘-1.Ž‘'¿«APPLICABILITY–¦fAND“DEFINITIONSŽŸP‘'¿«This–Ì>License‘Ì=applies“to“anš²!y“man˜ual‘Ì=or“other“w˜ork,‘³in“an˜y–Ì=medium,‘´that“con˜tains‘Ì>aŽ¡‘'¿«notice–ýplaced›ýb²!y“the˜cop•²!yrigh“t‘ýholder˜sa“ying–ýit˜can“bMÞe˜distributed“under˜the“termsŽ¡‘'¿«of–€†this“License.‘l=Sucš²!h“a“notice“gran˜ts“a“w˜orld-wide,‘· ro˜y˜alt˜y-free“license,‘·unlimited“inŽ¡‘'¿«duration,‘â to–o·use›o¶that“w²!ork“under˜the“conditions“stated˜herein.‘ 9ÏThe“\DoMÞcumen²!t",Ž¡‘'¿«bMÞeloš²!w,‘tkrefers–gìto“an˜y“suc˜h‘gíman˜ual“or“w˜ork.‘É An˜y“mem˜bMÞer“of“the‘gípublic“is“a“licensee,‘tkandŽ¡‘'¿«is–ÿaddressed“as“\yš²!ou".‘¦@Y‘ÿeou“accept“the“license“if“y˜ou“cop˜y‘ÿe,‘ îmoMÞdify“or“distribute“the“w˜orkŽ¡‘'¿«in–¦fa“w•²!a“y–¦frequiring“pMÞermission“under“cop•²!yrigh“t‘¦fla“w.ަ‘'¿«A‘ ¦\MošMÞdi ed– ÀV‘ÿeersion"‘ Áof“the“Do˜cumenš²!t“means‘ Áan˜y“w˜ork“con˜taining“the‘ ÁDoMÞcumen˜t“orŽ¡‘'¿«a–‚hpMÞortion›‚gof“it,‘¹heither˜copied“v²!erbatim,‘¹hor˜with“moMÞdi cations“and/or˜translated“in²!toŽ¡‘'¿«another‘¦flanguage.ަ‘'¿«A‘ž\Secondary–ÀSection"“is›Áa“named˜appMÞendix“or˜a“fron²!t-matter˜section“of˜the“DoMÞcumen²!tŽ¡‘'¿«that–Ž/deals“exclusiv²!ely›Ž0with“the“relationship“of˜the“publishers“or“authors˜of“the“DoMÞcumen²!tŽ¡‘'¿«to–z the‘zDoMÞcumenš²!t's“o˜v˜erall›zsub‘›»ject“(or˜to“related“matters)˜and“con²!tains˜nothing“thatŽ¡‘'¿«could–Ø®fall›دdirectly“within“that“o•²!v“erall˜sub‘›»ject.‘tµ(Th“us,‘%@if˜the›Ø®DoMÞcumen“t˜is˜in‘دpart˜aŽ¡‘'¿«textb•MÞo“ok›Õ†of–Õ…mathematics,‘ÿMa“Secondary˜Section˜ma²!y˜not“explain˜an²!y˜mathematics.)‘˜=TheŽ¡‘'¿«relationship–GÞcould“bMÞe“a“matter“of“historical“connection“with“the“sub‘›»ject“or“with“relatedŽ¡‘'¿«matters,–jor‘Bøof›B÷legal,“commercial,‘jphilosophical,“ethical˜or˜p•MÞolitical‘Bøp“osition˜regardingŽ¡‘'¿«them.ަ‘'¿«The›r\In•²!v‘ÿdDarian“t–sSections"˜are˜certain˜Secondary“Sections˜whose˜titles˜are“designated,‘0ÖasŽ¡‘'¿«bMÞeing–2Dthose›2Cof“In•²!v‘ÿdDarian“t–2DSections,‘I}in“the“notice˜that“sa²!ys˜that“the“DoMÞcumen²!t˜is“releasedŽŽŒ‹ÙŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:23ŽŽŽ ƒ33 ý ÌÍ‘'¿«under–S5this“License.‘Â"If›S4a“section“doMÞes“not“ t˜the“abMÞo•²!v“e–S5de nition“of“Secondary˜then“it“isޤ 33‘'¿«not›Óallo•²!w“ed˜to‘ÓŽbMÞe˜designated˜as˜In“v‘ÿdDarian“t.‘eSThe˜DoMÞcumen“t˜ma“y‘ÓŽcon“tain˜zero˜In“v‘ÿdDarian“tŽ¡‘'¿«Sections.‘¢ÄIf–õthe“DošMÞcumen²!t“do˜es‘õnot“idenš²!tify“an˜y“In˜v‘ÿdDarian˜t“Sections“then‘õthere“are“none.Ž©&g‘'¿«The›f­\Co•²!v“er–f¬T‘ÿeexts"˜are˜certain˜short“passages˜of˜text˜that“are˜listed,‘–¾as˜F‘ÿeron•²!t-Co“v“erŽ¡‘'¿«T›ÿeexts–-or“Bac•²!k-Co“v“er‘,T˜exts,‘"8in–-the“notice“that‘,saš²!ys“that“the“DoMÞcumen˜t‘,is“released“underŽ¡‘'¿«this›’License.‘¯AA‘nF‘ÿeron•²!t-Co“v“er˜T‘ÿeext˜ma“y˜bMÞe˜at˜most˜5›‘w“ords,‘6Šand˜a›’Bac“k-Co“v“er˜T‘ÿeext˜ma“yŽ¡‘'¿«bMÞe–¦fat“most“25“w²!ords.ŽŸ&h‘'¿«A‘C¦\T‘ÿeransparen•²!t"›CÎcop“y˜of‘CÏthe˜DoMÞcumen“t˜means˜a‘CÏmac“hine-readable˜cop“y‘ÿe,‘k(represen“tedŽ¡‘'¿«in–Jma“format›Jnwhose“spMÞeci cation“is“a²!v‘ÿdDailable“to“the˜general“public,‘snthat˜is“suitable“forŽ¡‘'¿«revising–Îàthe‘ÎßdoMÞcumenš²!t“straigh˜tforw˜ardly“with›Îßgeneric“text˜editors“or“(for˜images“com-Ž¡‘'¿«pMÞosed–ÚÃof›ÚÄpixels)“generic˜pain²!t“programs˜or“(for˜dra²!wings)“some˜widely“a•²!v‘ÿdDailable˜dra“wingŽ¡‘'¿«editor,‘…úand–}ßthat“is“suitable“for“input“to‘}àtext“formatters“or“for“automatic“translation“toŽ¡‘'¿«a–9Ov‘ÿdDariet²!y“of›9Nformats“suitable“for“input“to“text˜formatters.‘¹A‘93cop²!y“made˜in“an“otherwiseŽ¡‘'¿«T‘ÿeransparen²!t–„æ le“format›„åwhose“markup,‘¼†or“absence˜of“markup,‘¼†has˜bMÞeen“arranged“toŽ¡‘'¿«th•²!w“art–0ûor›0üdiscourage“subsequen²!t“moMÞdi cation˜b²!y“readers“is˜not“T‘ÿeransparen²!t.‘¶ºAn“imageŽ¡‘'¿«format– Éis“not“T‘ÿeransparenš²!t“if“used‘ Èfor“an˜y“substan˜tial“amoun˜t“of“text.‘MA‘ ©cop˜y“that“isŽ¡‘'¿«not–¦f\T‘ÿeransparen²!t"“is“called“\Opaque".ަ‘'¿«Examples–cXof“suitable›cWformats“for“T‘ÿeransparen²!t“copies“include˜plain“çasci>Ki“áwithoutŽ¡‘'¿«markup,‘„ÂT‘ÿeexinfo–XIinput“format,›„ÁLaT‘þ,³Ÿ[wEŽ‘B X‘XJinput“format,˜óKñ`y cmr10«SGML“áor‘XJ«XML“áusing“a“publiclyŽ¡‘'¿«a²!v‘ÿdDailable–«DTDá,‘üand›Âstandard-conforming“simple˜«HTMLá,‘üP²!ostScript“or˜«PDF“ádesignedŽ¡‘'¿«for–˜.hš²!uman“moMÞdi cation.‘³4Examples“of“transparen˜t“image“formats“include“«PNGá,‘ÔŸ«X¸ãCFŽ¡‘'¿«áand–¢«JPGá.‘ÐáOpaque“formats“include“proprietary‘¢formats“that“can“bMÞe“read“and“editedŽ¡‘'¿«only–sbš²!y‘sproprietary“w˜ord›sproMÞcessors,‘&J«SGML“áor˜«XML“áfor˜whic²!h“the˜«DTD“áand/orŽ¡‘'¿«pro•MÞcessing›W*to“ols˜are˜not‘W)generally˜a•²!v‘ÿdDailable,‘CYand˜the˜mac“hine-generated˜«HTMLá,Ž¡‘'¿«Pš²!ostScript–¦for“«PDF“áproMÞduced“b˜y“some“w˜ord“prošMÞcessors“for“output“purp˜oses“only‘ÿe.ަ‘'¿«The–Ü\Title›ÛP²!age"“means,‘<ùfor˜a“prin²!ted˜b•MÞo“ok,‘<ùthe–Ütitle˜page“itself,‘<ùplus˜sucš²!h“follo˜wingŽ¡‘'¿«pages–RÃas“are“needed“to“hold,–c}legibly‘ÿe,“the–RÃmaterial“this‘RÂLicense“requires“to“appMÞear“in“theŽ¡‘'¿«title–1.page.‘¶ÊF‘ÿeor“w²!orks›1-in“formats˜whic²!h“do“not˜ha•²!v“e‘1.an“y˜title–1.page“as˜sucš²!h,‘HŸ\Title“P˜age"Ž¡‘'¿«means–­Žthe“text“near›­the“most“prominen²!t“appMÞearance“of“the˜w²!ork's“title,‘¯Xpreceding“theŽ¡‘'¿«bšMÞeginning–¦fof“the“b˜o˜dy“of“the“text.ަ‘'¿«The–)—\publisher"“means‘)˜anš²!y“pMÞerson“or“en˜tit˜y“that“distributes‘)˜copies“of“the“DoMÞcumen˜tŽ¡‘'¿«to–¦fthe“public.ŽŸ&h‘'¿«A›ísection–ò\En²!titled“XYZ"˜means“a“named›ósubunit“of“the“DoMÞcumen²!t˜whose“title“eitherŽ¡‘'¿«is–Uªprecisely‘U©XYZ›U•or“con²!tains“XYZ˜in“paren•²!theses›U©follo“wing–Uªtext“that˜translates“XYZ‘U•inŽ¡‘'¿«another–þ¯language.‘¥ö(Here“XYZ‘þ„stands“for“a“spšMÞeci c“section“name“men²!tioned“b˜elo•²!w,‘ :suc“hŽ¡‘'¿«as›aa\Ac•²!kno“wledgemen“ts",–o/\Dedications",“\Endorsemen²!ts",“or˜\History".)‘ÆÛT‘ÿeo˜\Preserv²!eŽ¡‘'¿«the–›Title"›šof“suc²!h˜a“section“when˜y²!ou“moMÞdify˜the“DoMÞcumen²!t“means˜that“it˜remains“aŽ¡‘'¿«section–¦f\En²!titled“XYZ"“according“to“this“de nition.ަ‘'¿«The–SuDoMÞcumenš²!t“ma˜y“include“W‘ÿearran˜t˜y“Disclaimers“next‘Svto“the“notice“whic˜h“states“thatŽ¡‘'¿«this–¹License“applies‘ºto“the“DoMÞcumenš²!t.‘×These“W‘ÿearran˜t˜y“Disclaimers‘ºare“considered“toŽ¡‘'¿«bMÞe–„ýincluded›„þb²!y“reference“in“this˜License,‘¼£but“only“as“regards˜disclaiming“w•²!arran“ties:Ž¡‘'¿«an²!y–nother›n‘implication“that˜these“W‘ÿearran•²!t“y˜Disclaimers‘nma“y˜ha“v“e‘nis˜v“oid–nand˜has“noŽ¡‘'¿«e ect–¦fon“the“meaning“of“this“License.ަ‘-2.Ž‘'¿«VERBA‘ÿeTIM‘¦fCOPYINGŽŽŒ‹,‘Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:24ŽŽŽ ƒ33 ý ÌÍ‘'¿«Y‘ÿeou–’ùmaš²!y“cop˜y“and“distribute“the“DoMÞcumen˜t“in“an˜y“medium,‘Îeither“commercially“orޤ 33‘'¿«noncommercially‘ÿe,›zªpro²!vided–that‘this“License,˜the‘cop•²!yrigh“t–notices,˜and‘the“licenseŽ¡‘'¿«notice–Ksa²!ying›K this“License˜applies“to˜the“DoMÞcumen²!t“are˜reproMÞduced“in˜all“copies,‘t7andŽ¡‘'¿«that–1'yš²!ou“add“no‘1(other“conditions“whatsoMÞev˜er“to“those“of“this“License.‘¶ÉY‘ÿeou“ma˜y“not“useŽ¡‘'¿«tec²!hnical–ò“measures›ò”to“obstruct˜or“con²!trol˜the“reading˜or“further˜cop²!ying“of˜the“copiesŽ¡‘'¿«y•²!ou›òÇmak“e‘òÈor˜distribute.‘¡þHo“w“ev“er,‘´y“ou˜ma“y˜accept‘òÈcompMÞensation˜in˜exc“hange‘òÈfor˜copies.Ž¡‘'¿«If–Þy²!ou›Þdistribute“a“large˜enough“n•²!um“bMÞer˜of–Þcopies“y•²!ou˜m“ust–Þalso“follo²!w˜the“conditionsŽ¡‘'¿«in–¦fsection“3.Ž©"#‘'¿«Y‘ÿeou–}ìma²!y“also›}ëlend“copies,‘¹7under“the“same“conditions“stated˜abMÞo•²!v“e,‘¹8and˜y“ou›}ìma“y˜publiclyŽ¡‘'¿«displa²!y‘¦fcopies.ަ‘-3.Ž‘'¿«COPYING–¦fIN“QUANTITYަ‘'¿«If–Ãyš²!ou‘Âpublish“prin˜ted›Âcopies“(or˜copies˜in“media“that˜commonly“ha•²!v“e˜prin“ted˜co“v“ers)‘ÃofŽ¡‘'¿«the‘Ñ.DošMÞcumen•²!t,‘Ûßn“um“b˜ering–Ñ.more“than–Ñ-100,‘Ûàand“the–Ñ.Do˜cumen²!t's“license‘Ñ-notice“requiresŽ¡‘'¿«Co•²!v“er›ÜT‘ÿeexts,‘<ùy“ou‘Ûm“ust˜enclose˜the˜copies‘Ûin˜co“v“ers˜that˜carry–ÿe,‘<ùclearly‘Ûand˜legibly“,‘<ùallŽ¡‘'¿«these›´@Co•²!v“er˜T–ÿeexts:‘ùF“ron•²!t-Co“v“er˜T‘ÿeexts˜on˜the˜fron“t˜co“v“er,‘÷µand˜Bac“k-Co“v“er˜T‘ÿeexts˜onŽ¡‘'¿«the›öbac•²!k‘õco“v“er.‘Ñ Both˜co“v“ers˜m“ust–õalso˜clearly˜and˜legibly“iden•²!tify˜y“ou˜as‘õthe˜publisherŽ¡‘'¿«of›,these–+copies.‘H/The“fron•²!t˜co“v“er˜m“ust˜presen“t–+the˜full˜title“with˜all˜w²!ords˜of“the˜titleŽ¡‘'¿«equally–³xprominenš²!t“and‘³yvisible.‘Y‘ÿeou“ma˜y›³yadd“other“material“on“the˜co•²!v“ers–³xin“addition.Ž¡‘'¿«Cop•²!ying›Y4with‘Y3c“hanges˜limited–Y3to˜the“co•²!v“ers,‘…ças–Y3long˜as“they˜preserv²!e“the˜title“of˜theŽ¡‘'¿«DošMÞcumen²!t–uand“satisfy“these“conditions,‘¨Åcan“b˜e“treated‘uas“vš²!erbatim“cop˜ying“in“otherŽ¡‘'¿«respMÞects.ަ‘'¿«If–î|the“required›î}texts“for“either“co•²!v“er–î|are“toMÞo˜vš²!oluminous“to“ t“legibly‘ÿe,‘‚y˜ou“should“putŽ¡‘'¿«the–ò rst›òones“listed“(as“man²!y˜as“ t“reasonably)“on˜the“actual“co•²!v“er,‘ùand˜con“tin“ue‘òtheŽ¡‘'¿«rest–¦fonš²!to“adjacen˜t“pages.ŽŸ""‘'¿«If–?|y²!ou›?{publish“or˜distribute“Opaque˜copies“of˜the“DoMÞcumen•²!t˜n“um“bMÞering–?|more˜than“100,Ž¡‘'¿«y•²!ou›\3m“ust˜either‘\4include˜a˜mac“hine-readable˜T‘ÿeransparen“t˜cop“y˜along‘\4with˜eac“h˜OpaqueŽ¡‘'¿«cop²!y‘ÿe,‘[>or›7state–7in“or˜with“eacš²!h“Opaque“cop˜y‘7a“computer-net˜w˜ork“loMÞcation‘7from“whic˜hŽ¡‘'¿«the›éSgeneral‘éRnet•²!w“ork-using˜public˜has‘éRaccess˜to˜do“wnload˜using‘éRpublic-standard˜net“w“orkŽ¡‘'¿«protoMÞcols–¬=a“complete‘¬>T‘ÿeransparenš²!t“cop˜y“of“the“DoMÞcumen˜t,‘í³free“of“added“material.‘ïcIfŽ¡‘'¿«yš²!ou–ªuse“the‘ªlatter“option,‘êùy˜ou“m˜ust‘ªtak˜e“reasonably“pruden˜t“steps,‘êøwhen“y˜ou“bMÞeginŽ¡‘'¿«distribution–—lof›—mOpaque“copies˜in“quan•²!tit“y‘ÿe,‘Ó®to–—lensure“that˜this“T‘ÿeransparen•²!t˜cop“y‘—lwillŽ¡‘'¿«remain– Cthš²!us“accessible‘ Dat“the“stated“loMÞcation“un˜til‘ Dat“least“one“y˜ear“after‘ Dthe“last“timeŽ¡‘'¿«yš²!ou–k‘distribute‘k’an“Opaque“cop˜y‘k’(directly“or“through“y˜our‘k’agen˜ts“or“retailers)‘k’of“thatŽ¡‘'¿«edition–¦fto“the“public.ަ‘'¿«It–&Nis“requested,‘FHbut“not“required,‘FGthat“yš²!ou“con˜tact“the“authors“of“the“DoMÞcumen˜t“w˜ellŽ¡‘'¿«bMÞefore–oÅredistributing‘oÄanš²!y“large“n˜um˜bMÞer›oÄof“copies,‘z²to˜giv²!e“them˜a“c²!hance“to˜proš²!vide“y˜ouŽ¡‘'¿«with–¦fan“upšMÞdated“v²!ersion“of“the“Do˜cumen²!t.ަ‘-4.Ž‘'¿«MODIFICA‘ÿeTIONSަ‘'¿«Y‘ÿeou–*maš²!y“cop˜y“and›)distribute“a“MoMÞdi ed“V‘ÿeersion“of“the˜DoMÞcumen²!t“under“the“conditionsŽ¡‘'¿«of–…šsections›…›2“and˜3“abMÞo•²!v“e,‘¿]pro“vided˜that‘…šy“ou˜release–…šthe˜MoMÞdi ed“V‘ÿeersion˜under“preciselyŽ¡‘'¿«this–{ÞLicense,‘„`with“the›{ßMoMÞdi ed“V‘ÿeersion“ lling˜the“role“of˜the“DoMÞcumen•²!t,‘„`th“us‘{ÞlicensingŽ¡‘'¿«distribution–¸and“mošMÞdi cation‘¹of“the“Mo˜di ed“V‘ÿeersion“to“who˜ev²!er‘¹p˜ossesses“a“cop²!y“ofŽ¡‘'¿«it.‘ÝÝIn–¦faddition,“yš²!ou“m˜ust“do“these“things“in“the“MoMÞdi ed“V‘ÿeersion:ަ‘*òÄA.Ž‘=nUse–ípin“the“Title“Pš²!age“(and“on“the“co˜v˜ers,‘ÿ2if“an˜y)“a“title“distinct“from“that“of“theŽ¡‘=nDoMÞcumenš²!t,‘+and–ˆfrom“those“of“previous“v˜ersions‘‡(whic˜h“should,‘+if“there“w˜ere“an˜y‘ÿe,ŽŽŒ‹>õŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:25ŽŽŽ ƒ33 ý ÌÍ‘=nbšMÞe–Âølisted“in“the“History‘Â÷section“of“the“Do˜cumenš²!t).‘3“Y‘ÿeou“ma˜y‘Â÷use“the“same“title“asޤ 33‘=na–¦fprevious“vš²!ersion“if“the“original“publisher“of“that“v˜ersion“giv˜es“pMÞermission.Ž©€‘+gB.Ž‘=nList–ª\on“the“Title›ª[P²!age,‘«Zas“authors,‘«Yone“or“more“pMÞersons˜or“en²!tities“respMÞonsible“forŽ¡‘=nauthorship–"of›"the“moMÞdi cations“in˜the“MoMÞdi ed˜V‘ÿeersion,‘<|together“with“at˜least“ v²!eŽ¡‘=nof–߸the“principal“authors“of“the“DoMÞcumenš²!t“(all“of“its“principal“authors,‘uif“it“has“few˜erŽ¡‘=nthan–¦f vš²!e),“unless“they“release“y˜ou“from“this“requiremen˜t.ŽŸ€‘+@¢C.Ž‘=nState–±Óon›±Òthe“Title˜page“the˜name“of˜the“publisher˜of“the˜MoMÞdi ed“V‘ÿeersion,‘´­as“theŽ¡‘=npublisher.ަ‘*ËÕD.Ž‘=nPreservš²!e–¦fall“the“cop˜yrigh˜t“notices“of“the“DoMÞcumen˜t.ަ‘+µoE.Ž‘=nAdd–Äean›Ädappropriate“cop•²!yrigh“t˜notice‘Äefor˜y“our‘ÄemoMÞdi cations˜adjacen“t–Äeto˜the“otherŽ¡‘=ncop•²!yrigh“t‘¦fnotices.ŽŸ€‘,LF.Ž‘=nInclude,›hSimmediately–XÎafter“the“cop•²!yrigh“t–XÎnotices,˜a“license“notice“giving“the“publicŽ¡‘=npMÞermission–ïËto›ïÊuse“the˜MoMÞdi ed“V‘ÿeersion“under˜the“terms˜of“this“License,‘Pin˜the“formŽ¡‘=nshoš²!wn–¦fin“the“Addendum“bMÞelo˜w.ަ‘*‘nG.Ž‘=nPreserv²!e–¼min›¼lthat“license˜notice“the˜full“lists˜of“In•²!v‘ÿdDarian“t˜Sections–¼mand˜required“Co•²!v“erŽ¡‘=nT‘ÿeexts–¦fgivš²!en“in“the“DoMÞcumen˜t's“license“notice.ަ‘*òÄH.Ž‘=nInclude–¦fan“unaltered“cop²!y“of“this“License.ŽŸ€‘/4çI.Ž‘=nPreservš²!e–Ú†the‘Ú‡section“En˜titled‘Ú‡\History",‘çŽPreserv˜e“its›Ú‡Title,‘çŽand“add˜to“it˜an“itemŽ¡‘=nstating–_ at›_ least“the˜title,–mQy²!ear,“new˜authors,“and–_ publisher˜of“the˜MoMÞdi ed“V‘ÿeersionŽ¡‘=nas–ÄXgivš²!en“on‘ÄWthe“Title“P˜age.‘7³If‘ÄWthere“is“no“section“En˜titled“\History"‘ÄWin“the“DoMÞcu-Ž¡‘=nmenš²!t,‘O#create‘-eone–-dstating“the“title,‘O$y˜ear,–O#authors,“and‘-epublisher–-dof“the“DoMÞcumen˜tŽ¡‘=nas–Wgivš²!en“on“its“Title“P˜age,‘ƒFthen“add“an“item“describing“the“MoMÞdi ed“V‘ÿeersion“asŽ¡‘=nstated–¦fin“the“previous“sen²!tence.ަ‘-ˆ¢J.Ž‘=nPreservš²!e–æthe“net˜w˜ork“loMÞcation,‘õúif“an˜y‘ÿe,‘õúgiv˜en“in“the“DoMÞcumen˜t‘æfor“public“access“toŽ¡‘=na–½…T‘ÿeransparenš²!t“cop˜y‘½†of“the“DoMÞcumen˜t,‘ÃMand“lik˜ewise“the“net˜w˜ork‘½†loMÞcations“giv˜en“inŽ¡‘=nthe–Í„DoMÞcumenš²!t‘̓for“previous“v˜ersions‘̓it“w˜as“based“on.‘S6These‘̓ma˜y“bMÞe“placed‘̓in“theŽ¡‘=n\History"–8section.‘¦ÎY‘ÿeou›9ma²!y“omit˜a“net•²!w“ork–8loMÞcation˜for“a˜w²!ork“that˜w²!as“publishedŽ¡‘=nat–Kleast“four‘Ky²!ears“bšMÞefore“the“Do˜cumen²!t“itself,‘t@or“if“the“original‘Kpublisher“of“theŽ¡‘=nvš²!ersion–¦fit“refers“to“giv˜es“pMÞermission.ަ‘*¤åK.Ž‘=nF‘ÿeor–Ùranš²!y“section“En˜titled“\Ac˜kno˜wledgemen˜ts"“or“\Dedications",‘oPreserv˜e“the“TitleŽ¡‘=nof›/Rthe–/Qsection,‘G#and“preserv²!e˜in˜the“section˜all˜the“substance˜and“tone˜of˜eac²!h“of˜theŽ¡‘=ncon•²!tributor›¦fac“kno“wledgemen“ts˜and/or˜dedications˜giv“en˜therein.ަ‘,Q*L.Ž‘=nPreservš²!e–?Ôall‘?Óthe“In˜v‘ÿdDarian˜t›?ÓSections“of˜the“DoMÞcumen²!t,‘f/unaltered˜in“their˜text“andŽ¡‘=nin›PÜtheir–PÝtitles.‘Ý@Section“n•²!um“bMÞers˜or‘PÝthe˜equiv‘ÿdDalen“t–PÝare˜not“considered˜part“of˜theŽ¡‘=nsection‘¦ftitles.ŽŸ€‘)M.Ž‘=nDelete–°5anš²!y“section“En˜titled‘°4\Endorsemen˜ts".‘ûJSuc˜h“a“section‘°4ma˜y“not“bMÞe“includedŽ¡‘=nin–¦fthe“MoMÞdi ed“V‘ÿeersion.ަ‘*òÄN.Ž‘=nDo–g!not›g"retitle“an²!y˜existing“section“to˜bMÞe“Enš²!titled“\Endorsemen˜ts"›g"or“to˜con ict“inŽ¡‘=ntitle–¦fwith“anš²!y“In˜v‘ÿdDarian˜t“Section.ަ‘*¤åO.Ž‘=nPreserv•²!e›¦fan“y˜W‘ÿearran“t“y˜Disclaimers.ŽŸÌΑ'¿«If–Øthe›×MoMÞdi ed“V‘ÿeersion˜includes“new˜fron²!t-matter“sections˜or“appMÞendices˜that“qualifyŽ¡‘'¿«as–XSecondary›X Sections“and“con²!tain“no˜material“copied“from˜the“DoMÞcumen•²!t,‘g´y“ou˜ma“y‘XatŽ¡‘'¿«y²!our–ãkoption›ãldesignate“some˜or“all“of˜these“sections˜as“in•²!v‘ÿdDarian“t.‘”íT‘ÿeo˜do–ãkthis,‘ò­add“theirŽŽŒ‹QWŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:26ŽŽŽ ƒ33 ý ÌÍ‘'¿«titles–@«to“the“list›@¬of“In•²!v‘ÿdDarian“t–@«Sections“in“the“MoMÞdi ed“V‘ÿeersion's“license˜notice.‘¬¬Theseޤ 33‘'¿«titles–¦fmš²!ust“bMÞe“distinct“from“an˜y“other“section“titles.Ž©(ö‘'¿«Y‘ÿeou–pmaš²!y‘qadd“a“section“En˜titled‘q\Endorsemen˜ts",‘s²pro˜vided“it“con˜tains‘qnothing“butŽ¡‘'¿«endorsemen•²!ts›‘of‘‘y“our˜MoMÞdi ed˜V‘ÿeersion˜b“y‘‘v‘ÿdDarious˜parties|for˜example,‘•Zstatemen“ts˜ofŽ¡‘'¿«pšMÞeer–D review“or‘Dthat“the“text“has“b˜een‘Dappro•²!v“ed›D b“y˜an˜organization‘Das˜the˜authoritativ“eŽ¡‘'¿«de nition–¦fof“a“standard.ŽŸ(÷‘'¿«Y‘ÿeou–f,ma²!y›f-add“a˜passage“of˜up“to˜ vš²!e“w˜ords›f-as“a˜F›ÿeron•²!t-Co“v“er–f,T˜ext,‘sand›f-a“passage˜of“upŽ¡‘'¿«to–@25“wš²!ords‘@Žas“a“Bac˜k-Co˜v˜er“T‘ÿeext,‘Tìto›@Žthe“end“of“the˜list“of“Co•²!v“er–@T‘ÿeexts˜in“the“MoMÞdi edŽ¡‘'¿«V›ÿeersion.‘Õ+Only–N+one‘N*passage“of“F˜ron•²!t-Co“v“er‘N*T˜ext–N+and“one‘N*of“Bac•²!k-Co“v“er‘N+T˜ext‘N*ma“y‘N+bMÞeŽ¡‘'¿«added–NÁbš²!y“(or“through“arrangemen˜ts“made“b˜y)‘NÂan˜y“one“en˜tit˜y‘ÿe.‘À¦If“the“DoMÞcumen˜t“alreadyŽ¡‘'¿«includes›Éa‘Èco•²!v“er˜text–Èfor˜the˜same“co•²!v“er,‘/!previously˜added˜b“y‘Èy“ou˜or‘Èb“y˜arrangemen“tŽ¡‘'¿«made–:Çbš²!y“the“same“en˜tit˜y“y˜ou“are“acting“on“bMÞehalf“of,‘_ßy˜ou“ma˜y‘:Ènot“add“another;‘„÷butŽ¡‘'¿«y•²!ou›)ma“y˜replace–*the˜old˜one,‘2on˜explicit˜pMÞermission˜from˜the“previous˜publisher˜thatŽ¡‘'¿«added–¦fthe“old“one.ަ‘'¿«The–^author(s)›]and“publisher(s)˜of“the“DoMÞcumen²!t˜do“not“b²!y˜this“License˜giv²!e“pMÞermissionŽ¡‘'¿«to–¤juse“their›¤knames“for“publicit²!y“for“or˜to“assert“or“imply“endorsemen²!t˜of“an²!y“MoMÞdi edŽ¡‘'¿«V‘ÿeersion.ŽŸ(÷‘-5.Ž‘'¿«COMBINING‘¦fDOCUMENTSަ‘'¿«Y‘ÿeou›¦Çma•²!y‘¦Ècom“bine˜the˜DoMÞcumen“t–¦Èwith˜other“doMÞcumen²!ts˜released˜under“this˜License,Ž¡‘'¿«under–—sthe“terms›—tde ned“in“section“4˜abšMÞo•²!v“e–—sfor“mo˜di ed“v•²!ersions,‘Ó·pro“vided–—sthat“y²!ouŽ¡‘'¿«include– in› the“com²!bination“all“of˜the“In•²!v‘ÿdDarian“t– Sections˜of“all“of“the˜original“doMÞcumen²!ts,Ž¡‘'¿«unmoMÞdi ed,‘L3and–5¦list›5§them“all˜as“In•²!v‘ÿdDarian“t–5¦Sections˜of“yš²!our“com˜bined‘5§w˜ork“in‘5§its“licenseŽ¡‘'¿«notice,–¦fand“that“yš²!ou“preserv˜e“all“their“W‘ÿearran˜t˜y“Disclaimers.ަ‘'¿«The–¢@comš²!bined“w˜ork“need“only“con˜tain“one“cop˜y“of“this“License,‘£and“m˜ultiple“iden˜ticalŽ¡‘'¿«In•²!v‘ÿdDarian“t–æÝSections“maš²!y“bMÞe“replaced“with“a“single‘æÜcop˜y‘ÿe.‘ŸBIf“there“are“m˜ultiple“In˜v‘ÿdDarian˜tŽ¡‘'¿«Sections–6Çwith›6Èthe“same˜name“but˜di erenš²!t“con˜ten˜ts,‘Mmak˜e›6Èthe“title˜of“eac•²!h˜suc“h‘6ÇsectionŽ¡‘'¿«unique–bb²!y›cadding“at˜the“end˜of“it,‘1"in“paren²!theses,‘1!the˜name“of˜the“original˜author“orŽ¡‘'¿«publisher–of“that›~section“if“kno²!wn,‘!­or“else“a“unique˜n•²!um“bMÞer.‘¦‘Mak“e˜the–same“adjustmen²!tŽ¡‘'¿«to–î‡the›î†section“titles“in˜the“list“of˜In•²!v‘ÿdDarian“t–î‡Sections“in“the˜license“notice“of˜the“com²!binedŽ¡‘'¿«w²!ork.ŽŸ(÷‘'¿«In›ö"the‘ö#com•²!bination,‘Jy“ou˜m“ust‘ö#com“bine˜an“y‘ö#sections˜En“titled–ö#\History"˜in“the˜v‘ÿdDari-Ž¡‘'¿«ous–ÜÛoriginal›ÜÚdoMÞcumen²!ts,‘êxforming“one˜section“Enš²!titled“\History";‘ølik˜ewise‘ÜÚcom˜bine“an˜yŽ¡‘'¿«sections–ÑEnš²!titled“\Ac˜kno˜wledgemen˜ts",‘Û¿and“an˜y“sections“En˜titled“\Dedications".‘]çY‘ÿeouŽ¡‘'¿«mš²!ust–¦fdelete“all“sections“En˜titled“\Endorsemen˜ts."ަ‘-6.Ž‘'¿«COLLECTIONS–¦fOF“DOCUMENTSŽŸ(÷‘'¿«Y‘ÿeou–Ò¤maš²!y“mak˜e“a“collection“consisting“of‘Ò£the“DoMÞcumen˜t“and“other“doMÞcumen˜ts“releasedŽ¡‘'¿«under–this“License,‘sÚand“replace“the“individual“copies“of“this“License“in“the“v‘ÿdDariousŽ¡‘'¿«doMÞcumenš²!ts–Dwith‘Ca“single“cop˜y›Cthat“is˜included“in“the˜collection,‘y»pro²!vided˜that“y²!ouŽ¡‘'¿«follo²!w–t”the›t•rules“of˜this“License˜for“v•²!erbatim˜cop“ying‘t”of˜eac“h–t”of˜the“doMÞcumen²!ts˜in“allŽ¡‘'¿«other‘¦frespMÞects.ަ‘'¿«Y‘ÿeou–Æ=maš²!y“extract“a“single“doMÞcumen˜t“from“suc˜h“a“collection,‘Î2and“distribute“it“individu-Ž¡‘'¿«ally–4under›4this“License,‘Wnpro•²!vided˜y“ou–4insert“a“cop²!y˜of“this“License“in²!to˜the“extractedŽ¡‘'¿«doMÞcumen•²!t,‘ùøand›éBfollo“w–éAthis˜License“in“all˜other“respMÞects˜regarding“v•²!erbatim˜cop“ying‘éAofŽ¡‘'¿«that‘¦fdoMÞcumen²!t.ŽŽŒ‹a¸Ÿò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:27ŽŽŽ ƒ33 ý ÌÍ‘-7.Ž‘'¿«Aš²!GGREGA‘ÿeTION–¦fWITH“INDEPENDENT“W˜ORKSŽ©(ö‘'¿«A‘]Æcompilation–]Øof“the“DoMÞcumenš²!t‘]Ùor“its“deriv‘ÿdDativ˜es“with“other‘]Ùseparate“and“indepMÞenden˜tޤ 33‘'¿«doMÞcumen•²!ts›ÿhor‘ÿiw“orks,‘©in˜or˜on‘ÿia˜v“olume–ÿiof˜a“storage˜or˜distribution“medium,‘©is˜calledŽ¡‘'¿«an– \aggregate"“if“the› cop•²!yrigh“t– resulting“from“the“compilation“is“not˜used“to“limit“theŽ¡‘'¿«legal–1 righ²!ts›1of“the“compilation's˜users“bMÞey²!ond˜what“the“individual˜w²!orks“pMÞermit.‘¶¾WhenŽ¡‘'¿«the–žDošMÞcumen²!t“is“included‘žin“an“aggregate,‘Ûðthis“License“do˜es“not‘žapply“to“the“otherŽ¡‘'¿«wš²!orks–¦fin“the“aggregate“whic˜h“are“not“themselv˜es“deriv‘ÿdDativ˜e“w˜orks“of“the“DoMÞcumen˜t.ŽŸ(÷‘'¿«If–»Vthe“Co•²!v“er–»VT‘ÿeext“requiremenš²!t“of“section“3‘»Uis“applicable“to“these“copies“of“the“DoMÞcumen˜t,Ž¡‘'¿«then–°Dif›°Ethe“DoMÞcumen²!t“is“less˜than“one“half“of˜the“en²!tire“aggregate,‘á~the˜DoMÞcumenš²!t's“Co˜v˜erŽ¡‘'¿«T‘ÿeexts–0maš²!y“bMÞe“placed“on“co˜v˜ers“that“brac˜k˜et“the“DoMÞcumen˜t“within“the‘0aggregate,‘G°or“theŽ¡‘'¿«electronic–5qequiv‘ÿdDalenš²!t‘5pof“co˜v˜ers›5pif“the˜DoMÞcumen²!t“is“in˜electronic“form.‘ŠüOtherwise“theyŽ¡‘'¿«mš²!ust–¦fappMÞear“on“prin˜ted“co˜v˜ers“that“brac˜k˜et“the“whole“aggregate.ަ‘-8.Ž‘'¿«TRANSLA‘ÿeTIONŽŸ(÷‘'¿«T‘ÿeranslation–̯is›̰considered“a˜kind“of“moMÞdi cation,‘Aso˜yš²!ou“ma˜y‘̰distribute“translationsŽ¡‘'¿«of–Tþthe›TýDoMÞcumen²!t“under˜the“terms˜of“section“4.‘ é£Replacing“In•²!v‘ÿdDarian“t˜Sections‘TþwithŽ¡‘'¿«translations–v²requires‘v³spšMÞecial“p˜ermission“from“their›v³cop•²!yrigh“t‘v²holders,‘êÄbut˜y“ou‘v²ma“yŽ¡‘'¿«include–ðktranslations“of“some›ðjor“all“In•²!v‘ÿdDarian“t–ðkSections“in“addition˜to“the“original“v²!ersionsŽ¡‘'¿«of›Æthese‘ÆIn•²!v‘ÿdDarian“t˜Sections.‘=Y‘ÿeou‘Æma“y˜include–Æa˜translation˜of“this˜License,‘Î and“all˜theŽ¡‘'¿«license–òúnotices›òûin“the“DoMÞcumen•²!t,‘Fand˜an“y›òúW‘ÿearran“t“y˜Disclaimers,‘Fpro“vided‘òûthat˜y“ouŽ¡‘'¿«also–Ïinclude›Îÿthe“original“English˜v²!ersion“of“this“License˜and“the“original˜v²!ersions“ofŽ¡‘'¿«those–notices“and“disclaimers.‘5åIn“case“of“a“disagreemen•²!t‘bMÞet“w“een–the“translation“andŽ¡‘'¿«the–:•original›:”v²!ersion“of˜this“License˜or“a˜notice“or˜disclaimer,‘_ the“original˜v²!ersion“willŽ¡‘'¿«prev‘ÿdDail.ަ‘'¿«If–pèa“section“in‘péthe“DoMÞcumenš²!t“is“En˜titled“\Ac˜kno˜wledgemen˜ts",–{›\Dedications",“or‘pè\His-Ž¡‘'¿«tory",‘A¿the–(•requiremenš²!t“(section“4)“to“Preserv˜e“its“Title“(section“1)“will“t˜ypically“requireŽ¡‘'¿«c²!hanging–¦fthe“actual“title.ަ‘-9.Ž‘'¿«TERMINA‘ÿeTIONŽŸ(÷‘'¿«Y‘ÿeou–”maš²!y“not‘”cop˜y–ÿe,›—¾moMÞdify“,˜sublicense,˜or–”distribute“the“DoMÞcumen²!t‘”except“as“expresslyŽ¡‘'¿«proš²!vided–¡ðunder‘¡ñthis“License.‘Ð|An˜y›¡ñattempt“otherwise˜to“cop²!y–ÿe,›àÓmoMÞdify“,‘àÒsublicense,˜orŽ¡‘'¿«distribute–¦fit“is“vš²!oid,“and“will“automatically“terminate“y˜our“righ˜ts“under“this“License.ަ‘'¿«Ho•²!w“ev“er,‘ó·if›äAy“ou–ä@cease˜all“violation˜of“this“License,‘ó¸then“y²!our˜license“from˜a“particularŽ¡‘'¿«cop•²!yrigh“t–Jholder“is‘Jreinstated“(a)“proš²!visionally‘ÿe,‘sšunless“and“un˜til‘Jthe“cop˜yrigh˜t“holderŽ¡‘'¿«explicitly–á_and“ nally“terminates“yš²!our“license,‘0and“(b)“pMÞermanen˜tly‘ÿe,‘0if“the“cop˜yrigh˜tŽ¡‘'¿«holder–"fails“to“notify“yš²!ou“of“the“violation‘"b˜y“some“reasonable“means“prior“to“60“da˜ysŽ¡‘'¿«after–¦fthe“cessation.ŽŸ(÷‘'¿«Moreo•²!v“er,‘Ï8y“our–Ç license›Çfrom“a˜particular˜cop•²!yrigh“t–Ç holder˜is˜reinstated“pMÞermanen²!tly˜ifŽ¡‘'¿«the›V`cop•²!yrigh“t˜holder‘Vanoti es˜y“ou˜of˜the˜violation‘Vab“y˜some˜reasonable˜means,‘fbthis˜is˜theŽ¡‘'¿« rst–Wtime“y•²!ou‘Wha“v“e›Wreceiv“ed˜notice˜of˜violation‘Wof˜this˜License˜(for˜an“y‘Ww“ork)˜from˜thatŽ¡‘'¿«cop•²!yrigh“t–Õúholder,‘áÞand“yš²!ou“cure“the“violation“prior‘Õùto“30“da˜ys“after“y˜our‘Õùreceipt“of“theŽ¡‘'¿«notice.ަ‘'¿«T‘ÿeermination–Nuof“yš²!our“righ˜ts“under“this“section‘NtdoMÞes“not“terminate“the“licenses“of“partiesŽ¡‘'¿«who›•qha•²!v“e˜receiv“ed˜copies˜or˜righ“ts˜from˜y“ou‘•punder˜this˜License.‘ªþIf˜y“our˜righ“ts˜ha“v“eŽ¡‘'¿«bšMÞeen–Îterminated“and“not‘Íp˜ermanenš²!tly“reinstated,‘:¹receipt“of“a“cop˜y“of“some‘Íor“all“of“theŽ¡‘'¿«same–¦fmaterial“doMÞes“not“givš²!e“y˜ou“an˜y“righ˜ts“to“use“it.ŽŽŒ‹sŸò‘GáAppšMÞendix–¦fA:“GNU“F‘ÿeree“Do˜cumen²!tation“License’Á:28ŽŽŽ ƒ33 ý ÌÍ‘‡“10.Ž‘'¿«FUTURE–¦fREVISIONS“OF“THIS“LICENSEŽ©33‘'¿«The›ÿaF‘ÿeree‘ÿbSoft•²!w“are˜F‘ÿeoundation‘ÿbma“y˜publish–ÿbnew,‘UŸrevised“v²!ersions˜of“the˜GNU‘ÿ F‘ÿereeޤ 33‘'¿«DoMÞcumenš²!tation–ÙâLicense‘Ùãfrom“time“to“time.‘xRSuc˜h“new‘Ùãv˜ersions“will“bMÞe“similar‘Ùãin“spiritŽ¡‘'¿«to– æthe“presenš²!t“v˜ersion,‘?…but“ma˜y“di er“in“detail“to“address‘ ånew“problems“or“concerns.Ž¡‘'¿«See‘¦fâhttp://www.gnu.org/copyleft/á.ަ‘'¿«Eac•²!h›ˆ×v“ersion˜of˜the˜License˜is˜giv“en˜a˜distinguishing˜v“ersion˜n“um“b•MÞer.‘ÔIf˜the˜Do“cumen²!tŽ¡‘'¿«spšMÞeci es–r”that“a“particular“n•²!um“b˜ered›r”v“ersion˜of˜this˜License˜\or˜an“y˜later˜v“ersion"Ž¡‘'¿«applies‘æQto–æPit,‘öLyš²!ou“ha˜v˜e–æQthe“option‘æPof“follo˜wing“the“terms›æPand“conditions“either˜of“thatŽ¡‘'¿«spMÞeci ed–Žvš²!ersion“or“of“an˜y“later“v˜ersion“that‘Žhas“bMÞeen“published“(not“as“a“draft)“b˜yŽ¡‘'¿«the›î!F‘ÿeree‘î"Soft•²!w“are˜F‘ÿeoundation.‘µIf‘î"the˜DošMÞcumen“t‘î"do˜es–î!not“sp˜ecify›î"a“v•²!ersion˜n“um“bMÞer‘î!ofŽ¡‘'¿«this–$œLicense,‘D)yš²!ou“ma˜y“c˜hoMÞose‘$an˜y“v˜ersion“ev˜er“published“(not“as“a“draft)“b˜y“the“F‘ÿereeŽ¡‘'¿«Soft•²!w“are–ÖUF‘ÿeoundation.‘m©If“the“DošMÞcumen²!t“sp˜eci es“that“a“proš²!xy‘ÖTcan“decide“whic˜h“futureŽ¡‘'¿«v²!ersions–é)of›é*this“License˜can“bMÞe“used,‘ùÚthat˜proš²!xy's“public“statemen˜t›é*of“acceptance˜of“aŽ¡‘'¿«v•²!ersion›¦fpMÞermanen“tly˜authorizes˜y“ou˜to˜c“hoMÞose˜that˜v“ersion˜for˜the˜DoMÞcumen“t.ަ‘‡“11.Ž‘'¿«RELICENSINGަ‘'¿«\Massivš²!e–{"Multiauthor‘{#CollabMÞoration“Site"“(or“\MMC‘zìSite")“means“an˜y‘{#W‘ÿeorld“WideŽ¡‘'¿«W‘ÿeeb–Leservš²!er“that“publishes“cop˜yrigh˜table‘Lfw˜orks“and“also“pro˜vides“prominen˜t“facilitiesŽ¡‘'¿«for›M an²!yb•MÞo“dy˜to˜edit˜those˜w•²!orks.‘ÀEA‘MŠpublic˜wiki˜that‘MŸan“yb•MÞo“dy˜can˜edit˜is˜an˜example˜ofŽ¡‘'¿«sucš²!h– Ya“serv˜er.‘µA‘ ?\Massiv˜e‘ XMultiauthor“CollabMÞoration"“(or“\MMC")‘ >con˜tained“in“theŽ¡‘'¿«site–¦fmeans“anš²!y“set“of“cop˜yrigh˜table“w˜orks“th˜us“published“on“the“MMC“site.ަ‘'¿«\CC-BY-SA"‘8¤means–8Éthe‘8ÊCreativš²!e“Commons“A˜ttribution-Share‘8ÊAlik˜e“3.0‘8Êlicense“pub-Ž¡‘'¿«lished›8b•²!y‘8Creativ“e˜Commons–8CorpMÞoration,‘N(a˜not-for-pro t“corpMÞoration˜with“a˜principalŽ¡‘'¿«place–òof“business“in“San“F‘ÿerancisco,‘7£California,‘7¢as“wš²!ell“as“future“cop˜yleft“v˜ersions“of“thatŽ¡‘'¿«license–¦fpublished“b²!y“that“same“organization.ަ‘'¿«\IncorpšMÞorate"–­zmeans“to“publish‘­yor“republish“a“Do˜cumen²!t,›¯?in“whole“or‘­yin“part,˜as“partŽ¡‘'¿«of–¦fanother“DoMÞcumen²!t.ަ‘'¿«An–&\MMC‘&  b> ó3 cmmi10ó=ßê 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 key is pressed. The Meta key is labeled on many keyboards. On keyboards with two keys labeled (usually to either side of the space bar), the on the left side is generally set to work as a Meta key. The key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. If you do not have a Meta or key, or another key working as a Meta key, the identical keystroke can be generated by typing _first_, and then typing . Either process is known as "metafying" the 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, , , , , , and all stand for themselves when seen in this text, or in an init file (*note Readline Init File::). If your keyboard lacks a key, typing will produce the desired character. The key may be labeled or on some keyboards.  File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing 1.2 Readline Interaction ======================== 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 . You do not have to be at the end of the line to press ; the entire line is accepted regardless of the location of the cursor within the line. * Menu: * Readline Bare Essentials:: The least you need to know about Readline. * Readline Movement Commands:: Moving about the input line. * Readline Killing Commands:: How to delete text, and how to get it back! * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines.  File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction 1.2.1 Readline Bare Essentials ------------------------------ In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type `C-b' to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with `C-f'. When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. `C-b' Move back one character. `C-f' Move forward one character. or Delete the character to the left of the cursor. `C-d' Delete the character underneath the cursor. Printing characters Insert the character into the line at the cursor. `C-_' or `C-x C-u' Undo the last editing command. You can undo all the way back to an empty line. (Depending on your configuration, the key be set to delete the character to the left of the cursor and the key set to delete the character underneath the cursor, like `C-d', rather than the character to the left of the cursor.)  File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction 1.2.2 Readline Movement Commands -------------------------------- The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to `C-b', `C-f', `C-d', and . Here are some commands for moving more rapidly about the line. `C-a' Move to the start of the line. `C-e' Move to the end of the line. `M-f' Move forward a word, where a word is composed of letters and digits. `M-b' Move backward a word. `C-l' Clear the screen, reprinting the current line at the top. Notice how `C-f' moves forward a character, while `M-f' moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.  File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction 1.2.3 Readline Killing Commands ------------------------------- "Killing" text means to delete the text from the line, but to save it away for later use, usually by "yanking" (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.) If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later. When you use a kill command, the text is saved in a "kill-ring". Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. Here is the list of commands for killing text. `C-k' Kill the text from the current cursor position to the end of the line. `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 those used by `M-f'. `M-' Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by `M-b'. `C-w' Kill from the cursor to the previous whitespace. This is different than `M-' because the word boundaries differ. Here is how to "yank" the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. `C-y' Yank the most recently killed text back into the buffer at the cursor. `M-y' Rotate the kill-ring, and yank the new top. You can only do this if the prior command is `C-y' or `M-y'.  File: readline.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction 1.2.4 Readline Arguments ------------------------ You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type `M-- C-k'. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (`-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the `C-d' command an argument of 10, you could type `M-1 0 C-d', which will delete the next ten characters on the input line.  File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction 1.2.5 Searching for Commands in the History ------------------------------------------- Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: "incremental" and "non-incremental". Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type `C-r'. Typing `C-s' searches forward through the history. The characters present in the value of the `isearch-terminators' variable are used to terminate an incremental search. If that variable has not been assigned a value, the and `C-J' characters will terminate an incremental search. `C-g' will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type `C-r' or `C-s' as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Readline remembers the last incremental search string. If two `C-r's are typed without any intervening characters defining a new search string, any remembered search string is used. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.  File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing 1.3 Readline Init File ====================== Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an "inputrc" file, conventionally in his home directory. The name of this file is taken from the value of the environment variable `INPUTRC'. If that variable is unset, the default is `~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is `/etc/inputrc'. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. In addition, the `C-x C-r' command re-reads this init file, thus incorporating any changes that you might have made to it. * Menu: * Readline Init File Syntax:: Syntax for the commands in the inputrc file. * Conditional Init Constructs:: Conditional key bindings in the inputrc file. * Sample Init File:: An example inputrc file.  File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File 1.3.1 Readline Init File Syntax ------------------------------- 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 (*note 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. The syntax is simple: set VARIABLE VALUE Here, for example, is how to change from the default Emacs-like key binding to use `vi' line editing commands: set editing-mode vi Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, ON (case-insensitive), or 1. Any other value results in the variable being set to off. 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. `bind-tty-special-chars' If set to `on', Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents. `colored-stats' If set to `on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the `LS_COLORS' environment variable. The default is `off'. `comment-begin' The string to insert at the beginning of the line when the `insert-comment' command is executed. The default value is `"#"'. `completion-display-width' The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. `completion-ignore-case' If set to `on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is `off'. `completion-map-case' If set to `on', and COMPLETION-IGNORE-CASE is enabled, Readline treats hyphens (`-') and underscores (`_') as equivalent when performing case-insensitive filename matching and completion. `completion-prefix-display-length' The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. `completion-query-items' The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. 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. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. 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 prefixing an 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'. `echo-control-characters' When set to `on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is `on'. `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'. `enable-meta-key' When set to `on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is `on'. `expand-tilde' If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'. `history-preserve-point' If set to `on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with `previous-history' or `next-history'. The default is `off'. `history-size' Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. `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'. `input-meta' If set to `on', Readline will enable eight-bit input (it will not clear the eighth bit in 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. `isearch-terminators' The string of characters that should terminate an incremental search without subsequently executing the character as a command (*note Searching::). If this variable has not been given a value, the characters and `C-J' will terminate an incremental search. `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-move', `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. `keyseq-timeout' Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (`rl_instream' by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is `500'. `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. `mark-symlinked-directories' If set to `on', completed names which are symbolic links to directories have a slash appended (subject to the value of `mark-directories'). The default is `off'. `match-hidden-files' This variable, when set to `on', causes Readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to `off', the leading `.' must be supplied by the user in the filename to be completed. This variable is `on' by default. `menu-complete-display-prefix' If set to `on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is `off'. `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'. `page-completions' If set to `on', Readline uses an internal `more'-like pager to display a screenful of possible completions at a time. This variable is `on' by default. `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'. `revert-all-at-newline' If set to `on', Readline will undo all changes to history lines before returning when `accept-line' is executed. By default, history lines may be modified and retain individual undo lists across calls to `readline'. 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'. `show-all-if-unmodified' This alters the default behavior of the completion functions in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to `on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is `off'. `show-mode-in-prompt' If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs (`@'), vi command (`:'), or vi insertion (`+'). The default value is `off'. `skip-completed-text' If set to `on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the `e' in `Makefile' will result in `Makefile' rather than `Makefilefile', assuming there is a single possible completion. 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 need to find 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 on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon - that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a MACRO). 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', `M-DEL' is bound to the function `backward-kill-word', 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). A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. "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 again 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 ` <[> <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 `\"' <">, a double quotation mark `\'' <'>, a single quote or apostrophe 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 eight-bit character whose value is the octal value NNN (one to three digits) `\xHH' the eight-bit character whose value is the hexadecimal value HH (one or two hex 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\\": "\\"  File: readline.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File 1.3.2 Conditional Init Constructs --------------------------------- 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 a particular value. 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. For example, the following directive reads from `/etc/inputrc': $include /etc/inputrc  File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File 1.3.3 Sample Init File ---------------------- 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 system-wide 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  File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing 1.4 Bindable Readline Commands ============================== * Menu: * Commands For Moving:: Moving about the line. * Commands For History:: Getting at previous lines. * Commands For Text:: Commands for changing text. * Commands For Killing:: Commands for killing and yanking. * Numeric Arguments:: Specifying numeric arguments, repeat counts. * Commands For Completion:: Getting Readline to do the typing for you. * Keyboard Macros:: Saving and re-executing typed characters * Miscellaneous Commands:: Other miscellaneous commands. This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default. In the following descriptions, "point" refers to the current cursor position, and "mark" refers to a cursor position saved by the `set-mark' command. The text between the point and mark is referred to as the "region".  File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands 1.4.1 Commands For Moving ------------------------- `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 the current or 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.  File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands 1.4.2 Commands For Manipulating The History ------------------------------------------- `accept-line (Newline or Return)' Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with `add_history()'. If this line is a modified history line, the history line is restored to its original state. `previous-history (C-p)' Move `back' through the history list, fetching the previous command. `next-history (C-n)' Move `forward' through the history list, fetching the next command. `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 point. The search string must match at the beginning of a history line. 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. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. `history-substr-search-forward ()' Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. `history-substr-search-backward ()' Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. 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) at point. 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. Once the argument N is computed, the argument is extracted as if the `!N' history expansion had been specified. `yank-last-arg (M-. or M-_)' Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like `yank-nth-arg'. Successive calls to `yank-last-arg' move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the `!$' history expansion had been specified.  File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands 1.4.3 Commands For Changing Text -------------------------------- `end-of-file (usually C-d)' The character indicating end-of-file as set, for example, by `stty'. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. `delete-char (C-d)' Delete the character at point. If this function is bound to the same character as the tty EOF character, as `C-d' commonly is, see above for the effects. `backward-delete-char (Rubout)' Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. `forward-backward-delete-char ()' Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. `quoted-insert (C-q or 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-)' 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 have no effect. `transpose-words (M-t)' Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. `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. `overwrite-mode ()' Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only `emacs' mode; `vi' mode does overwrite differently. Each call to `readline()' starts in insert mode. In overwrite mode, characters bound to `self-insert' replace the text at point rather than pushing the text to the right. Characters bound to `backward-delete-char' replace the character before point with a space. By default, this command is unbound.  File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands 1.4.4 Killing And Yanking ------------------------- `kill-line (C-k)' Kill the text from point 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. `kill-whole-line ()' Kill all characters on the current line, no matter where point is. By default, this is unbound. `kill-word (M-d)' Kill from point 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-)' Kill the word behind point. Word boundaries are the same as `backward-word'. `unix-word-rubout (C-w)' Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. `unix-filename-rubout ()' Kill the word behind point, using white space and the slash character as the word boundaries. 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 in the current 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 point. `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'.  File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands 1.4.5 Specifying Numeric Arguments ---------------------------------- `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.  File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands 1.4.6 Letting Readline Type For You ----------------------------------- `complete ()' Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion. `possible-completions (M-?)' List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of `completion-display-width', the value of the environment variable `COLUMNS', or the screen width, in that order. `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 (subject to the setting of `bell-style') 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 , but is unbound by default. `menu-complete-backward ()' Identical to `menu-complete', but moves backward through the list of possible completions, as if `menu-complete' had been given a negative argument. `delete-char-or-list ()' Deletes the character under the cursor if not at the beginning or end of the line (like `delete-char'). If at the end of the line, behaves identically to `possible-completions'. This command is unbound by default.  File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands 1.4.7 Keyboard Macros --------------------- `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. `print-last-kbd-macro ()' Print the last keboard macro defined in a format suitable for the INPUTRC file.  File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands 1.4.8 Some Miscellaneous Commands --------------------------------- `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 ()' Metafy the next character typed. This is for keyboards without a meta key. Typing ` f' is equivalent to typing `M-f'. `undo (C-_ or 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 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. `skip-csi-sequence ()' Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. `insert-comment (M-#)' Without a numeric argument, the value of the `comment-begin' variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of `comment-begin', the value is inserted, otherwise the characters in `comment-begin' are deleted from the beginning of the line. In either case, 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 output. 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. `emacs-editing-mode (C-e)' When in `vi' command mode, this causes a switch to `emacs' editing mode. `vi-editing-mode (M-C-j)' When in `emacs' editing mode, this causes a switch to `vi' editing mode.  File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing 1.5 Readline vi Mode ==================== 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 standard. In order to switch interactively between `emacs' and `vi' editing modes, use the command `M-C-j' (bound to emacs-editing-mode when in `vi' mode and to vi-editing-mode in `emacs' 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 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 document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface. Copyright (C) 1988-2014 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare 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.  File: readline.info, Node: Programming with GNU Readline, Next: GNU Free Documentation License, Prev: Command Line Editing, Up: Top 2 Programming with GNU Readline ******************************* 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. * Menu: * Basic Behavior:: Using the default behavior of Readline. * Custom Functions:: Adding your own functions to Readline. * Readline Variables:: Variables accessible to custom functions. * Readline Convenience Functions:: Functions which Readline supplies to aid in writing your own custom functions. * Readline Signal Handling:: How Readline behaves when it receives signals. * Custom Completers:: Supplanting or supplementing Readline's completion functions.  File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline 2.1 Basic Behavior ================== 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 PROMPT and then reads and returns a single line of text from the user. If PROMPT is `NULL' or the empty string, no prompt is displayed. The line `readline' returns is allocated with `malloc()'; the caller should `free()' the line when it has finished with it. The declaration for `readline' in ANSI C is `char *readline (const 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 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 completion: completion on file names. If you do not want Readline to complete on filenames, you can change the binding of the key with `rl_bind_key()'. `int rl_bind_key (int KEY, rl_command_func_t *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 to `rl_insert()' makes 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 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 (*note Custom Completers::).  File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline 2.2 Custom Functions ==================== 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. Before declaring any functions that customize Readline's behavior, or using any functionality Readline provides in other code, an application writer should include the file `' in any file that uses Readline's features. Since some of the definitions in `readline.h' use the `stdio' library, the file `' should be included before `readline.h'. `readline.h' defines a C preprocessor variable that should be treated as an integer, `RL_READLINE_VERSION', which may be used to conditionally compile application code depending on the installed Readline version. The value is a hexadecimal encoding of the major and minor version numbers of the library, of the form 0xMMMM. MM is the two-digit major version number; MM is the two-digit minor version number. For Readline 4.2, for example, the value of `RL_READLINE_VERSION' would be `0x0402'. * Menu: * Readline Typedefs:: C declarations to make code readable. * Function Writing:: Variables and calling conventions.  File: readline.info, Node: Readline Typedefs, Next: Function Writing, Up: Custom Functions 2.2.1 Readline Typedefs ----------------------- For readability, we declare a number of new object types, all pointers to functions. The reason for declaring these new types is to make it easier to write code describing pointers to C functions with appropriately prototyped arguments and return values. For instance, say we want to declare a variable FUNC as a pointer to a function which takes two `int' arguments and returns an `int' (this is the type of all of the Readline bindable functions). Instead of the classic C declaration `int (*func)();' or the ANSI-C style declaration `int (*func)(int, int);' we may write `rl_command_func_t *func;' The full list of function pointer types available is `typedef int rl_command_func_t (int, int);' `typedef char *rl_compentry_func_t (const char *, int);' `typedef char **rl_completion_func_t (const char *, int, int);' `typedef char *rl_quote_func_t (char *, int, char *);' `typedef char *rl_dequote_func_t (char *, int);' `typedef int rl_compignore_func_t (char **);' `typedef void rl_compdisp_func_t (char **, int, int);' `typedef int rl_hook_func_t (void);' `typedef int rl_getc_func_t (FILE *);' `typedef int rl_linebuf_func_t (char *, int);' `typedef int rl_intfunc_t (int);' `#define rl_ivoidfunc_t rl_hook_func_t' `typedef int rl_icpfunc_t (char *);' `typedef int rl_icppfunc_t (char **);' `typedef void rl_voidfunc_t (void);' `typedef void rl_vintfunc_t (int);' `typedef void rl_vcpfunc_t (char *);' `typedef void rl_vcppfunc_t (char **);'  File: readline.info, Node: Function Writing, Prev: Readline Typedefs, Up: Custom Functions 2.2.2 Writing a New Function ---------------------------- 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 `int 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. A command function should return 0 if its action completes successfully, and a non-zero value if some error occurs. This is the convention obeyed by all of the builtin Readline bindable command functions.  File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline 2.3 Readline Variables ====================== 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 *note Allowing Undoing::. The function `rl_extend_line_buffer' is available to increase the memory allocated to `rl_line_buffer'. -- 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_num_chars_to_read Setting this to a positive value before calling `readline()' causes Readline to return after accepting that many characters, rather than reading up to a character bound to `accept-line'. -- 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: int rl_dispatching Set to a non-zero value if a function is being called from a key binding; zero otherwise. Application functions can test this to discover whether they were called directly or by Readline's dispatching mechanism. -- Variable: int rl_erase_empty_line Setting this to a non-zero value causes Readline to completely erase the current line, including any prompt, any time a newline is typed as the only character on an otherwise-empty line. The cursor is moved to the beginning of the newly-blank line. -- Variable: char * rl_prompt The prompt Readline uses. This is set from the argument to `readline()', and should not be assigned to directly. The `rl_set_prompt()' function (*note Redisplay::) may be used to modify the prompt string after calling `readline()'. -- Variable: char * rl_display_prompt The string displayed as the prompt. This is usually identical to RL_PROMPT, but may be changed temporarily by functions that use the prompt string as a message area, such as incremental search. -- Variable: int rl_already_prompted If an application wishes to display the prompt itself, rather than have Readline do it the first time `readline()' is called, it should set this variable to a non-zero value after displaying the prompt. The prompt must also be passed as the argument to `readline()' so the redisplay functions can update the display properly. The calling application is responsible for managing the value; Readline never sets it. -- Variable: const char * rl_library_version The version number of this revision of the library. -- Variable: int rl_readline_version An integer encoding the current version of the library. The encoding is of the form 0xMMMM, where MM is the two-digit major version number, and MM is the two-digit minor version number. For example, for Readline-4.2, `rl_readline_version' would have the value 0x0402. -- Variable: int rl_gnu_readline_p Always set to 1, denoting that this is GNU readline rather than some emulation. -- Variable: const char * rl_terminal_name The terminal type, used for initialization. If not set by the application, Readline sets this to the value of the `TERM' environment variable the first time it is called. -- Variable: const 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 (*note Conditional Init Constructs::). -- Variable: FILE * rl_instream The stdio stream from which Readline reads input. If `NULL', Readline defaults to STDIN. -- Variable: FILE * rl_outstream The stdio stream to which Readline performs output. If `NULL', Readline defaults to STDOUT. -- Variable: int rl_prefer_env_winsize If non-zero, Readline gives values found in the `LINES' and `COLUMNS' environment variables greater precedence than values fetched from the kernel when computing the screen dimensions. -- Variable: rl_command_func_t * rl_last_func The address of the last command function Readline executed. May be used to test whether or not a function is being executed twice in succession, for example. -- Variable: rl_hook_func_t * rl_startup_hook If non-zero, this is the address of a function to call just before `readline' prints the first prompt. -- Variable: rl_hook_func_t * rl_pre_input_hook If non-zero, this is the address of a function to call after the first prompt has been printed and just before `readline' starts reading input characters. -- Variable: rl_hook_func_t * rl_event_hook If non-zero, this is the address of a function to call periodically when Readline is waiting for terminal input. By default, this will be called at most ten times a second if there is no keyboard input. -- Variable: rl_getc_func_t * 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 (*note Character Input::). In general, an application that sets RL_GETC_FUNCTION should consider setting RL_INPUT_AVAILABLE_HOOK as well. -- Variable: rl_hook_func_t * rl_signal_event_hook If non-zero, this is the address of a function to call if a read system call is interrupted when Readline is reading terminal input. -- Variable: rl_hook_func_t * rl_input_available_hook If non-zero, Readline will use this function's return value when it needs to determine whether or not there is available input on the current input source. The default hook checks `rl_instream'; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. This may use an application-specific timeout before returning a value; Readline uses the value passed to `rl_set_keyboard_input_timeout()' or the value of the user-settable KEYSEQ-TIMEOUT variable. This is designed for use by applications using Readline's callback interface (*note Alternate Interface::), which may not use the traditional `read(2)' and file descriptor interface, or other applications using a different input mechanism. If an application uses an input mechanism or hook that can potentially exceed the value of KEYSEQ-TIMEOUT, it should increase the timeout or set this hook appropriately even when not using the callback interface. In general, an application that sets RL_GETC_FUNCTION should consider setting RL_INPUT_AVAILABLE_HOOK as well. -- Variable: rl_voidfunc_t * 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 (*note Redisplay::). -- Variable: rl_vintfunc_t * rl_prep_term_function If non-zero, Readline will call indirectly through this pointer to initialize the terminal. The function takes a single argument, an `int' flag that says whether or not to use eight-bit characters. By default, this is set to `rl_prep_terminal' (*note Terminal Management::). -- Variable: rl_voidfunc_t * rl_deprep_term_function If non-zero, Readline will call indirectly through this pointer to reset the terminal. This function should undo the effects of `rl_prep_term_function'. By default, this is set to `rl_deprep_terminal' (*note Terminal Management::). -- Variable: Keymap rl_executing_keymap This variable is set to the keymap (*note Keymaps::) in which the currently executing readline function was found. -- Variable: Keymap rl_binding_keymap This variable is set to the keymap (*note Keymaps::) in which the last key binding occurred. -- Variable: char * rl_executing_macro This variable is set to the text of any currently-executing macro. -- Variable: int rl_executing_key The key that caused the dispatch to the currently-executing Readline function. -- Variable: char * rl_executing_keyseq The full key sequence that caused the dispatch to the currently-executing Readline function. -- Variable: int rl_key_sequence_length The number of characters in RL_EXECUTING_KEYSEQ. -- Variable: int rl_readline_state A variable with bit values that encapsulate the current Readline state. A bit is set with the `RL_SETSTATE' macro, and unset with the `RL_UNSETSTATE' macro. Use the `RL_ISSTATE' macro to test whether a particular state bit is set. Current state bits include: `RL_STATE_NONE' Readline has not yet been called, nor has it begun to initialize. `RL_STATE_INITIALIZING' Readline is initializing its internal data structures. `RL_STATE_INITIALIZED' Readline has completed its initialization. `RL_STATE_TERMPREPPED' Readline has modified the terminal modes to do its own input and redisplay. `RL_STATE_READCMD' Readline is reading a command from the keyboard. `RL_STATE_METANEXT' Readline is reading more input after reading the meta-prefix character. `RL_STATE_DISPATCHING' Readline is dispatching to a command. `RL_STATE_MOREINPUT' Readline is reading more input while executing an editing command. `RL_STATE_ISEARCH' Readline is performing an incremental history search. `RL_STATE_NSEARCH' Readline is performing a non-incremental history search. `RL_STATE_SEARCH' Readline is searching backward or forward through the history for a string. `RL_STATE_NUMERICARG' Readline is reading a numeric argument. `RL_STATE_MACROINPUT' Readline is currently getting its input from a previously-defined keyboard macro. `RL_STATE_MACRODEF' Readline is currently reading characters defining a keyboard macro. `RL_STATE_OVERWRITE' Readline is in overwrite mode. `RL_STATE_COMPLETING' Readline is performing word completion. `RL_STATE_SIGHANDLER' Readline is currently executing the readline signal handler. `RL_STATE_UNDOING' Readline is performing an undo. `RL_STATE_INPUTPENDING' Readline has input pending due to a call to `rl_execute_next()'. `RL_STATE_TTYCSAVED' Readline has saved the values of the terminal's special characters. `RL_STATE_CALLBACK' Readline is currently using the alternate (callback) interface (*note Alternate Interface::). `RL_STATE_VIMOTION' Readline is reading the argument to a vi-mode "motion" command. `RL_STATE_MULTIKEY' Readline is reading a multiple-keystroke command. `RL_STATE_VICMDONCE' Readline has entered vi command (movement) mode at least one time during the current call to `readline()'. `RL_STATE_DONE' Readline has read a key sequence bound to `accept-line' and is about to return the line to the caller. -- Variable: int rl_explicit_arg Set to a non-zero value if an explicit numeric argument was specified by the user. Only valid in a bindable command function. -- Variable: int rl_numeric_arg Set to the value of any numeric argument explicitly specified by the user before executing the current Readline function. Only valid in a bindable command function. -- Variable: int rl_editing_mode Set to a value denoting Readline's current editing mode. A value of 1 means Readline is currently in emacs mode; 0 means that vi mode is active.  File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline 2.4 Readline Convenience Functions ================================== * Menu: * Function Naming:: How to give a function you write a name. * Keymaps:: Making keymaps. * Binding Keys:: Changing Keymaps. * Associating Function Names and Bindings:: Translate function names to key sequences. * Allowing Undoing:: How to make your functions undoable. * Redisplay:: Functions to control line display. * Modifying Text:: Functions to modify `rl_line_buffer'. * Character Input:: Functions to read keyboard input. * Terminal Management:: Functions to manage terminal settings. * Utility Functions:: Generally useful functions and hooks. * Miscellaneous Functions:: Functions that don't fall into any category. * Alternate Interface:: Using Readline in a `callback' fashion. * A Readline Example:: An example Readline function. * Alternate Interface Example:: An example program using the alternate interface.  File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions 2.4.1 Naming a Function ----------------------- 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 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 (const char *name, rl_command_func_t *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.  File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions 2.4.2 Selecting a Keymap ------------------------ 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 (void) Returns a new, empty keymap. The space for the keymap is allocated with `malloc()'; the caller should free it by calling `rl_free_keymap()' when done. -- Function: Keymap rl_copy_keymap (Keymap map) Return a new keymap which is a copy of MAP. -- Function: Keymap rl_make_keymap (void) 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 the data in KEYMAP. The caller should free KEYMAP. -- Function: void rl_free_keymap (Keymap keymap) Free all storage associated with KEYMAP. This calls `rl_discard_keymap' to free subordindate keymaps and macros. Readline has several internal keymaps. These functions allow you to change which keymap is active. -- Function: Keymap rl_get_keymap (void) 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 (const char *name) Return the keymap matching NAME. NAME is one which would be supplied in a `set keymap' inputrc line (*note 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 (*note Readline Init File::).  File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions 2.4.3 Binding Keys ------------------ Key sequences are associate 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. Since `readline()' installs a set of default key bindings the first time it is called, there is always the danger that a custom binding installed before the first call to `readline()' will be overridden. An alternate mechanism is to install custom key bindings in an initialization function assigned to the `rl_startup_hook' variable (*note Readline Variables::). These functions manage key bindings. -- Function: int rl_bind_key (int key, rl_command_func_t *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, rl_command_func_t *function, Keymap map) Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an invalid KEY. -- Function: int rl_bind_key_if_unbound (int key, rl_command_func_t *function) Binds KEY to FUNCTION if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid KEY or if KEY is already bound. -- Function: int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map) Binds KEY to FUNCTION if it is not already bound in MAP. Returns non-zero in the case of an invalid KEY or if KEY is already bound. -- 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 (rl_command_func_t *function, Keymap map) Unbind all keys that execute FUNCTION in MAP. -- Function: int rl_unbind_command_in_map (const char *command, Keymap map) Unbind all keys that are bound to COMMAND in MAP. -- Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function) Bind the key sequence represented by the string KEYSEQ to the function FUNCTION, beginning in the current keymap. This makes new keymaps as necessary. The return value is non-zero if KEYSEQ is invalid. -- Function: int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Bind the key sequence represented by the string KEYSEQ to the function FUNCTION. This makes new keymaps as necessary. Initial bindings are performed in MAP. The return value is non-zero if KEYSEQ is invalid. -- Function: int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) Equivalent to `rl_bind_keyseq_in_map'. -- Function: int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function) Binds KEYSEQ to FUNCTION if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid KEYSEQ or if KEYSEQ is already bound. -- Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Binds KEYSEQ to FUNCTION if it is not already bound in MAP. Returns non-zero in the case of an invalid KEYSEQ or if KEYSEQ is already bound. -- Function: int rl_generic_bind (int type, const 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 (*note Readline Init File::). -- Function: int rl_read_init_file (const char *filename) Read keybindings and variable assignments from FILENAME (*note Readline Init File::).  File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions 2.4.4 Associating Function Names and Bindings --------------------------------------------- These functions allow you to find out what keys invoke named functions and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function. -- Function: rl_command_func_t * rl_named_function (const char *name) Return the function with name NAME. -- Function: rl_command_func_t * rl_function_of_keyseq (const 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 the `int' variable it points to (one of `ISFUNC', `ISKMAP', or `ISMACR'). -- Function: char ** rl_invoking_keyseqs (rl_command_func_t *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 (rl_command_func_t *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 (void) Print the names of all bindable Readline functions to `rl_outstream'. -- Function: const char ** rl_funmap_names (void) Return a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free the array, but not the pointers, using `free' or `rl_free' when you are done. -- Function: int rl_add_funmap_entry (const char *name, rl_command_func_t *function) Add NAME to the list of bindable Readline command names, and make FUNCTION the function to be called when NAME is invoked.  File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions 2.4.5 Allowing Undoing ---------------------- 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. 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 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 (void) 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 (void) 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 rl_free_undo_list (void) Free the existing undo list. -- Function: int rl_do_undo (void) 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.  File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions 2.4.6 Redisplay --------------- -- Function: void rl_redisplay (void) Change what's displayed on the screen to reflect the current contents of `rl_line_buffer'. -- Function: int rl_forced_update_display (void) Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct. -- Function: int rl_on_new_line (void) Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline. -- Function: int rl_on_new_line_with_prompt (void) Tell the update functions that we have moved onto a new line, with RL_PROMPT already displayed. This could be used by applications that want to output the prompt string themselves, but still need Readline to know the prompt string length for redisplay. It should be used after setting RL_ALREADY_PROMPTED. -- Function: int rl_reset_line_state (void) Reset the display state to a clean state and redisplay the current line starting on a new line. -- Function: int rl_crlf (void) Move the cursor to the start of the next screen line. -- Function: int rl_show_char (int c) Display character C on `rl_outstream'. If Readline has not been set to display meta characters directly, this will convert meta characters to a meta-prefixed key sequence. This is intended for use by applications which wish to do their own redisplay. -- Function: int rl_message (const char *, ...) The arguments are a format string as would be supplied to `printf', possibly containing conversion specifications such as `%d', and any additional arguments necessary to satisfy the conversion specifications. The resulting string is displayed in the "echo area". The echo area is also used to display numeric arguments and search strings. You should call `rl_save_prompt' to save the prompt information before calling this function. -- Function: int rl_clear_message (void) Clear the message in the echo area. If the prompt was saved with a call to `rl_save_prompt' before the last call to `rl_message', call `rl_restore_prompt' before calling this function. -- Function: void rl_save_prompt (void) Save the local Readline prompt display state in preparation for displaying a new message in the message area with `rl_message()'. -- Function: void rl_restore_prompt (void) Restore the local Readline prompt display state saved by the most recent call to `rl_save_prompt'. if `rl_save_prompt' was called to save the prompt before a call to `rl_message', this function should be called before the corresponding call to `rl_clear_message'. -- Function: int rl_expand_prompt (char *prompt) Expand any special character sequences in PROMPT and set up the local Readline prompt redisplay variables. This function is called by `readline()'. It may also be called to expand the primary prompt if the `rl_on_new_line_with_prompt()' function or `rl_already_prompted' variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers `RL_PROMPT_START_IGNORE' and `RL_PROMPT_END_IGNORE' (declared in `readline.h'. This may be used to embed terminal-specific escape sequences in prompts. -- Function: int rl_set_prompt (const char *prompt) Make Readline use PROMPT for subsequent redisplay. This calls `rl_expand_prompt()' to expand the prompt and sets `rl_prompt' to the result.  File: readline.info, Node: Modifying Text, Next: Character Input, Prev: Redisplay, Up: Readline Convenience Functions 2.4.7 Modifying Text -------------------- -- Function: int rl_insert_text (const char *text) Insert TEXT into the line at the current cursor position. Returns the number of characters inserted. -- Function: int rl_delete_text (int start, int end) Delete the text between START and END in the current line. Returns the number of characters deleted. -- 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_push_macro_input (char *macro) Cause MACRO to be inserted into the line, as if it had been invoked by a key bound to a macro. Not especially useful; use `rl_insert_text()' instead.  File: readline.info, Node: Character Input, Next: Terminal Management, Prev: Modifying Text, Up: Readline Convenience Functions 2.4.8 Character Input --------------------- -- Function: int rl_read_key (void) Return the next character available from Readline's current input stream. This handles input inserted into the input stream via RL_PENDING_INPUT (*note Readline Variables::) and `rl_stuff_char()', macros, and characters read from the keyboard. While waiting for input, this function will call any function assigned to the `rl_event_hook' variable. -- Function: int rl_getc (FILE *stream) Return the next character available from STREAM, which is assumed to be 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()'. Up to 512 characters may be pushed back. `rl_stuff_char' returns 1 if the character was successfully inserted; 0 otherwise. -- Function: int rl_execute_next (int c) Make C be the next command to be executed when `rl_read_key()' is called. This sets RL_PENDING_INPUT. -- Function: int rl_clear_pending_input (void) Unset RL_PENDING_INPUT, effectively negating the effect of any previous call to `rl_execute_next()'. This works only if the pending input has not already been read with `rl_read_key()'. -- Function: int rl_set_keyboard_input_timeout (int u) While waiting for keyboard input in `rl_read_key()', Readline will wait for U microseconds for input before calling any function assigned to `rl_event_hook'. U must be greater than or equal to zero (a zero-length timeout is equivalent to a poll). The default waiting period is one-tenth of a second. Returns the old timeout value.  File: readline.info, Node: Terminal Management, Next: Utility Functions, Prev: Character Input, Up: Readline Convenience Functions 2.4.9 Terminal Management ------------------------- -- Function: void rl_prep_terminal (int meta_flag) Modify the terminal settings for Readline's use, so `readline()' can read a single character at a time from the keyboard. The META_FLAG argument should be non-zero if Readline should read eight-bit input. -- Function: void rl_deprep_terminal (void) Undo the effects of `rl_prep_terminal()', leaving the terminal in the state in which it was before the most recent call to `rl_prep_terminal()'. -- Function: void rl_tty_set_default_bindings (Keymap kmap) Read the operating system's terminal editing characters (as would be displayed by `stty') to their Readline equivalents. The bindings are performed in KMAP. -- Function: void rl_tty_unset_default_bindings (Keymap kmap) Reset the bindings manipulated by `rl_tty_set_default_bindings' so that the terminal editing characters are bound to `rl_insert'. The bindings are performed in KMAP. -- Function: int rl_reset_terminal (const char *terminal_name) Reinitialize Readline's idea of the terminal settings using TERMINAL_NAME as the terminal type (e.g., `vt100'). If TERMINAL_NAME is `NULL', the value of the `TERM' environment variable is used.  File: readline.info, Node: Utility Functions, Next: Miscellaneous Functions, Prev: Terminal Management, Up: Readline Convenience Functions 2.4.10 Utility Functions ------------------------ -- Function: int rl_save_state (struct readline_state *sp) Save a snapshot of Readline's internal state to SP. The contents of the READLINE_STATE structure are documented in `readline.h'. The caller is responsible for allocating the structure. -- Function: int rl_restore_state (struct readline_state *sp) Restore Readline's internal state to that stored in SP, which must have been saved by a call to `rl_save_state'. The contents of the READLINE_STATE structure are documented in `readline.h'. The caller is responsible for freeing the structure. -- Function: void rl_free (void *mem) Deallocate the memory pointed to by MEM. MEM must have been allocated by `malloc'. -- Function: void rl_replace_line (const char *text, int clear_undo) Replace the contents of `rl_line_buffer' with TEXT. The point and mark are preserved, if possible. If CLEAR_UNDO is non-zero, the undo list associated with the current line is cleared. -- Function: void 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 (void) Initialize or re-initialize Readline's internal state. It's not strictly necessary to call this; `readline()' calls it before reading any input. -- Function: int rl_ding (void) Ring the terminal bell, obeying the setting of `bell-style'. -- Function: int rl_alphabetic (int c) Return 1 if C is an alphabetic character. -- Function: void rl_display_match_list (char **matches, int len, int max) A convenience function for displaying a list of strings in columnar format on Readline's output stream. `matches' is the list of strings, in argv format, such as a list of completion matches. `len' is the number of strings in `matches', and `max' is the length of the longest string in `matches'. This function uses the setting of `print-completions-horizontally' to select how the matches are displayed (*note Readline Init File Syntax::). When displaying completions, this function sets the number of columns used for display to the value of `completion-display-width', the value of the environment variable `COLUMNS', or the screen width, in that order. The following are implemented as macros, defined in `chardefs.h'. Applications should refrain from using them. -- Function: int _rl_uppercase_p (int c) Return 1 if C is an uppercase alphabetic character. -- Function: int _rl_lowercase_p (int c) Return 1 if C is a lowercase alphabetic character. -- Function: int _rl_digit_p (int c) Return 1 if C is a numeric character. -- Function: int _rl_to_upper (int c) If C is a lowercase alphabetic character, return the corresponding uppercase character. -- Function: int _rl_to_lower (int c) If C is an uppercase alphabetic character, return the corresponding lowercase character. -- Function: int _rl_digit_value (int c) If C is a number, return the value it represents.  File: readline.info, Node: Miscellaneous Functions, Next: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions 2.4.11 Miscellaneous Functions ------------------------------ -- Function: int rl_macro_bind (const char *keyseq, const char *macro, Keymap map) Bind the key sequence KEYSEQ to invoke the macro MACRO. The binding is performed in MAP. When KEYSEQ is invoked, the MACRO will be inserted into the line. This function is deprecated; use `rl_generic_bind()' instead. -- Function: void rl_macro_dumper (int readable) Print the key sequences bound to macros and their values, using the current keymap, 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: int rl_variable_bind (const char *variable, const char *value) Make the Readline variable VARIABLE have VALUE. This behaves as if the readline command `set VARIABLE VALUE' had been executed in an `inputrc' file (*note Readline Init File Syntax::). -- Function: char * rl_variable_value (const char *variable) Return a string representing the value of the Readline variable VARIABLE. For boolean variables, this string is either `on' or `off'. -- Function: void rl_variable_dumper (int readable) Print the readline variable names and their current values 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: int rl_set_paren_blink_timeout (int u) Set the time interval (in microseconds) that Readline waits when showing a balancing character when `blink-matching-paren' has been enabled. -- Function: char * rl_get_termcap (const char *cap) Retrieve the string value of the termcap capability CAP. Readline fetches the termcap entry for the current terminal name and uses those capabilities to move around the screen line and perform other terminal-specific operations, like erasing a line. Readline does not use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses. -- Function: void rl_clear_history (void) Clear the history list by deleting all of the entries, in the same manner as the History library's `clear_history()' function. This differs from `clear_history' because it frees private data Readline saves in the history list.  File: readline.info, Node: Alternate Interface, Next: A Readline Example, Prev: Miscellaneous Functions, Up: Readline Convenience Functions 2.4.12 Alternate Interface -------------------------- 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 accommodate 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 (const char *prompt, rl_vcpfunc_t *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 handler function to call when a complete line of input has been entered. The handler function receives the text of the line as an argument. -- Function: void rl_callback_read_char (void) 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 installed by `rl_callback_handler_install' to process the line. Before calling the LHANDLER function, the terminal settings are reset to the values they had before calling `rl_callback_handler_install'. If the LHANDLER function returns, and the line handler remains installed, the terminal settings are modified for Readline's use again. `EOF' is indicated by calling LHANDLER with a `NULL' line. -- Function: void rl_callback_handler_remove (void) Restore the terminal to its initial state and remove the line handler. This may be called from within a callback as well as independently. If the LHANDLER installed by `rl_callback_handler_install' does not exit the program, either this function or the function referred to by the value of `rl_deprep_term_function' should be called before the program exits to reset the terminal settings.  File: readline.info, Node: A Readline Example, Next: Alternate Interface Example, Prev: Alternate Interface, Up: Readline Convenience Functions 2.4.13 A Readline Example ------------------------- 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 (_rl_uppercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); else if (_rl_lowercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_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); }  File: readline.info, Node: Alternate Interface Example, Prev: A Readline Example, Up: Readline Convenience Functions 2.4.14 Alternate Interface Example ---------------------------------- Here is a complete program that illustrates Readline's alternate interface. It reads lines from the terminal and displays them, providing the standard history and TAB completion functions. It understands the EOF character or "exit" to exit the program. /* Standard include files. stdio.h is required. */ #include #include /* Used for select(2) */ #include #include #include /* Standard readline include files. */ #include #include static void cb_linehandler (char *); int running; const char *prompt = "rltest$ "; /* Callback function called for each line when accept-line executed, EOF seen, or EOF character read. This sets a flag and returns; it could also call exit(3). */ static void cb_linehandler (char *line) { /* Can use ^D (stty eof) or `exit' to exit. */ if (line == NULL || strcmp (line, "exit") == 0) { if (line == 0) printf ("\n"); printf ("exit\n"); /* This function needs to be called to reset the terminal settings, and calling it from the line handler keeps one extra prompt from being displayed. */ rl_callback_handler_remove (); running = 0; } else { if (*line) add_history (line); printf ("input line: %s\n", line); free (line); } } int main (int c, char **v) { fd_set fds; int r; /* Install the line handler. */ rl_callback_handler_install (prompt, cb_linehandler); /* Enter a simple event loop. This waits until something is available to read on readline's input stream (defaults to standard input) and calls the builtin character read callback to read it. It does not have to modify the user's terminal settings. */ running = 1; while (running) { FD_ZERO (&fds); FD_SET (fileno (rl_instream), &fds); r = select (FD_SETSIZE, &fds, NULL, NULL, NULL); if (r < 0) { perror ("rltest: select"); rl_callback_handler_remove (); break; } if (FD_ISSET (fileno (rl_instream), &fds)) rl_callback_read_char (); } printf ("rltest: Event loop has exited\n"); return 0; }  File: readline.info, Node: Readline Signal Handling, Next: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline 2.5 Readline Signal Handling ============================ Signals are asynchronous events sent to a process by the Unix kernel, sometimes on behalf of another process. They are intended to indicate exceptional events, like a user pressing the interrupt key on his terminal, or a network connection being broken. There is a class of signals that can be sent to the process currently reading input from the keyboard. Since Readline changes the terminal attributes when it is called, it needs to perform special processing when such a signal is received in order to restore the terminal to a sane state, or provide application writers with functions to do so manually. Readline contains an internal signal handler that is installed for a number of signals (`SIGINT', `SIGQUIT', `SIGTERM', `SIGHUP', `SIGALRM', `SIGTSTP', `SIGTTIN', and `SIGTTOU'). When one of these signals is received, the signal handler will reset the terminal attributes to those that were in effect before `readline()' was called, reset the signal handling to what it was before `readline()' was called, and resend the signal to the calling application. If and when the calling application's signal handler returns, Readline will reinitialize the terminal and continue to accept input. When a `SIGINT' is received, the Readline signal handler performs some additional work, which will cause any partially-entered line to be aborted (see the description of `rl_free_line_state()' below). There is an additional Readline signal handler, for `SIGWINCH', which the kernel sends to a process whenever the terminal's size changes (for example, if a user resizes an `xterm'). The Readline `SIGWINCH' handler updates Readline's internal screen size information, and then calls any `SIGWINCH' signal handler the calling application has installed. Readline calls the application's `SIGWINCH' signal handler without resetting the terminal to its original state. If the application's signal handler does more than update its idea of the terminal size and return (for example, a `longjmp' back to a main processing loop), it _must_ call `rl_cleanup_after_signal()' (described below), to restore the terminal state. Readline provides two variables that allow application writers to control whether or not it will catch certain signals and act on them when they are received. It is important that applications change the values of these variables only when calling `readline()', not in a signal handler, so Readline's internal signal state is not corrupted. -- Variable: int rl_catch_signals If this variable is non-zero, Readline will install signal handlers for `SIGINT', `SIGQUIT', `SIGTERM', `SIGHUP', `SIGALRM', `SIGTSTP', `SIGTTIN', and `SIGTTOU'. The default value of `rl_catch_signals' is 1. -- Variable: int rl_catch_sigwinch If this variable is set to a non-zero value, Readline will install a signal handler for `SIGWINCH'. The default value of `rl_catch_sigwinch' is 1. -- Variable: int rl_change_environment If this variable is set to a non-zero value, and Readline is handling `SIGWINCH', Readline will modify the LINES and COLUMNS environment variables upon receipt of a `SIGWINCH' The default value of `rl_change_environment' is 1. If an application does not wish to have Readline catch any signals, or to handle signals other than those Readline catches (`SIGHUP', for example), Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal. -- Function: void rl_cleanup_after_signal (void) This function will reset the state of the terminal to what it was before `readline()' was called, and remove the Readline signal handlers for all signals, depending on the values of `rl_catch_signals' and `rl_catch_sigwinch'. -- Function: void rl_free_line_state (void) This will free any partial state associated with the current input line (undo information, any partial history entry, any partially-entered keyboard macro, and any partially-entered numeric argument). This should be called before `rl_cleanup_after_signal()'. The Readline signal handler for `SIGINT' calls this to abort the current input line. -- Function: void rl_reset_after_signal (void) This will reinitialize the terminal and reinstall any Readline signal handlers, depending on the values of `rl_catch_signals' and `rl_catch_sigwinch'. If an application does not wish Readline to catch `SIGWINCH', it may call `rl_resize_terminal()' or `rl_set_screen_size()' to force Readline to update its idea of the terminal size when a `SIGWINCH' is received. -- Function: void rl_echo_signal_char (int sig) If an application wishes to install its own signal handlers, but still have readline display characters that generate signals, calling this function with SIG set to `SIGINT', `SIGQUIT', or `SIGTSTP' will display the character generating that signal. -- Function: void rl_resize_terminal (void) Update Readline's internal screen size by reading values from the kernel. -- Function: void rl_set_screen_size (int rows, int cols) Set Readline's idea of the terminal size to ROWS rows and COLS columns. If either ROWS or COLUMNS is less than or equal to 0, Readline's idea of that terminal dimension is unchanged. If an application does not want to install a `SIGWINCH' handler, but is still interested in the screen dimensions, Readline's idea of the screen size may be queried. -- Function: void rl_get_screen_size (int *rows, int *cols) Return Readline's idea of the terminal's size in the variables pointed to by the arguments. -- Function: void rl_reset_screen_size (void) Cause Readline to reobtain the screen size and recalculate its dimensions. The following functions install and remove Readline's signal handlers. -- Function: int rl_set_signals (void) Install Readline's signal handler for `SIGINT', `SIGQUIT', `SIGTERM', `SIGHUP', `SIGALRM', `SIGTSTP', `SIGTTIN', `SIGTTOU', and `SIGWINCH', depending on the values of `rl_catch_signals' and `rl_catch_sigwinch'. -- Function: int rl_clear_signals (void) Remove all of the Readline signal handlers installed by `rl_set_signals()'.  File: readline.info, Node: Custom Completers, Prev: Readline Signal Handling, Up: Programming with GNU Readline 2.6 Custom Completers ===================== 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. * Menu: * How Completing Works:: The logic used to do completion. * Completion Functions:: Functions provided by Readline. * Completion Variables:: Variables which control completion. * A Short Completion Example:: An example of writing completer subroutines.  File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers 2.6.1 How Completing Works -------------------------- 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: 1. The user-interface function `rl_complete()'. This function is called with the same arguments as other bindable Readline functions: COUNT and INVOKING_KEY. It isolates the word to be completed and calls `rl_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. 2. The internal function `rl_completion_matches()' uses an application-supplied "generator" function to generate the list of possible matches, and then returns the array of these matches. The caller should place the address of its generator function in `rl_completion_entry_function'. 3. The generator function is called repeatedly from `rl_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. The generator function returns `(char *)NULL' to inform `rl_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. Such a generator function is referred to as an "application-specific completion function". -- 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 `rl_completion_matches()'). The default is to do filename completion. -- Variable: rl_compentry_func_t * rl_completion_entry_function This is a pointer to the generator function for `rl_completion_matches()'. If the value of `rl_completion_entry_function' is `NULL' then the default filename generator function, `rl_filename_completion_function()', is used. An "application-specific completion function" is a function whose address is assigned to `rl_completion_entry_function' and whose return values are used to generate possible completions.  File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers 2.6.2 Completion Functions -------------------------- 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. `@' is similar to `!', but possible completions are not listed if the possible completions share a common prefix. -- 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 `rl_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: int rl_completion_mode (rl_command_func_t *cfunc) Returns the appropriate value to pass to `rl_complete_internal()' depending on whether CFUNC was called twice in succession and the values of the `show-all-if-ambiguous' and `show-all-if-unmodified' variables. Application-specific completion functions may use this function to present the same interface as `rl_complete()'. -- Function: char ** rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) Returns an array of strings which is a list of completions for TEXT. If there are no completions, returns `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 * rl_filename_completion_function (const char *text, int state) A generator function for filename completion in the general case. TEXT is a partial filename. The Bash source is a useful reference for writing application-specific completion functions (the Bash completion functions call this and other Readline functions). -- Function: char * rl_username_completion_function (const 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.  File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers 2.6.3 Completion Variables -------------------------- -- Variable: rl_compentry_func_t * rl_completion_entry_function A pointer to the generator function for `rl_completion_matches()'. `NULL' means to use `rl_filename_completion_function()', the default filename completer. -- Variable: rl_completion_func_t * 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' defining the boundaries of TEXT, which is a character string. 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. If this function sets the `rl_attempted_completion_over' variable to a non-zero value, Readline will not perform its default completion even if this function returns no matches. -- Variable: rl_quote_func_t * 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: rl_dequote_func_t * 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: rl_linebuf_func_t * 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: rl_compignore_func_t * 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: rl_icppfunc_t * rl_directory_completion_hook This function, if defined, is allowed to modify the directory portion of filenames Readline completes. It could be used to expand symbolic links or shell variables in pathnames. It is called with the address of a string (the current directory name) as an argument, and may modify that string. If the string is replaced with a new string, the old value should be freed. Any modified directory name should have a trailing slash. The modified value will be used as part of the completion, replacing the directory portion of the pathname the user typed. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to `opendir()'. The directory completion hook returns an integer that should be non-zero if the function modifies its directory argument. The function should not modify the directory argument if it returns 0. -- Variable: rl_icppfunc_t * rl_directory_rewrite_hook; If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike `rl_directory_completion_hook', it only modifies the directory name used in `opendir', not what is displayed when the possible completions are printed or inserted. It is called before rl_directory_completion_hook. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to `opendir()'. The directory rewrite hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. -- Variable: rl_icppfunc_t * rl_filename_stat_hook If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. This function modifies its filename name argument, and the modified value is passed to `stat()' to determine the file's type and characteristics. This function does not need to remove quote characters from the filename. The stat hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. -- Variable: rl_dequote_func_t * rl_filename_rewrite_hook If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. The function takes two arguments: FNAME, the filename to be converted, and FNLEN, its length in bytes. It must either return its first argument (if no conversion takes place) or the converted filename in newly-allocated memory. The converted form is used to compare against the word to be completed, and, if it matches, is added to the list of matches. Readline will free the allocated string. -- Variable: rl_compdisp_func_t * rl_completion_display_matches_hook If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called in lieu of Readline displaying the list. It takes three arguments: (`char **'MATCHES, `int' NUM_MATCHES, `int' MAX_LENGTH) where MATCHES is the array of matching strings, NUM_MATCHES is the number of strings in that array, and MAX_LENGTH is the length of the longest string in that array. Readline provides a convenience function, `rl_display_match_list', that takes care of doing the display to Readline's output stream. That function may be called from this hook. -- Variable: const 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: `" \t\n\"\\'`@$><=;|&{("'. -- Variable: const char * rl_basic_quote_characters A list of quote characters which can cause a word break. -- Variable: const 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: rl_cpvfunc_t * rl_completion_word_break_hook If non-zero, this is the address of a function to call when Readline is deciding where to separate words for word completion. It should return a character string like `rl_completer_word_break_characters' to be used to perform the current completion. The function may choose to set `rl_completer_word_break_characters' itself. If the function returns `NULL', `rl_completer_word_break_characters' is used. -- Variable: const char * rl_completer_quote_characters A 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: const 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: const 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_query_items Up to this many items will be displayed in response to a possible-completions call. After that, readline asks the user if she is sure she wants to see them all. The default value is 100. A negative value indicates that Readline should never ask the user. -- 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 application-specific completion functions to provide the "most sensible word separator character" according to an application-specific command line syntax specification. -- Variable: int rl_completion_suppress_append If non-zero, RL_COMPLETION_APPEND_CHARACTER is not appended to matches at the end of the command line, as described above. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. -- Variable: int rl_completion_quote_character When Readline is completing quoted text, as delimited by one of the characters in RL_COMPLETER_QUOTE_CHARACTERS, it sets this variable to the quoting character found. This is set before any application-specific completion function is called. -- Variable: int rl_completion_suppress_quote If non-zero, Readline does not append a matching quote character when performing completion on a quoted string. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. -- Variable: int rl_completion_found_quote When Readline is completing quoted text, it sets this variable to a non-zero value if the word being completed contains or is delimited by any quoting characters, including backslashes. This is set before any application-specific completion function is called. -- Variable: int rl_completion_mark_symlink_dirs If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the user-settable MARK-DIRECTORIES variable. This variable exists so that application-specific completion functions can override the user's global preference (set via the MARK-SYMLINKED-DIRECTORIES Readline variable) if appropriate. This variable is set to the user's preference before any application-specific completion function is called, so unless that function modifies the value, the user's preferences are honored. -- Variable: int rl_ignore_completion_duplicates If non-zero, then duplicates in the matches are removed. The 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 when completion is attempted, and can only be changed within an application-specific completion function. If it is set to a non-zero value by such a function, directory names have a slash appended and Readline attempts to quote completed filenames if they contain any characters in `rl_filename_quote_characters' and `rl_filename_quoting_desired' is set to a non-zero value. -- 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 when completion is attempted, and can only be changed within an application-specific completion function. The quoting is effected via a call to the function pointed to by `rl_filename_quoting_function'. -- Variable: int rl_attempted_completion_over If an application-specific completion function assigned to `rl_attempted_completion_function' sets this variable to a non-zero value, Readline will not perform its default filename completion even if the application's completion function returns no matches. It should be set only by an application's completion function. -- Variable: int rl_sort_completion_matches If an application sets this variable to 0, Readline will not sort the list of completions (which implies that it cannot remove any duplicate completions). The default value is 1, which means that Readline will sort the completions and, depending on the value of `rl_ignore_completion_duplicates', will attempt to remove duplicate matches. -- Variable: int rl_completion_type Set to a character describing the type of completion Readline is currently attempting; see the description of `rl_complete_internal()' (*note Completion Functions::) for the list of characters. This is set to the appropriate value before any application-specific completion function is called, allowing such functions to present the same interface as `rl_complete()'. -- Variable: int rl_completion_invoking_key Set to the final character in the key sequence that invoked one of the completion functions that call `rl_complete_internal()'. This is set to the appropriate value before any application-specific completion function is called. -- Variable: int rl_inhibit_completion If this variable is non-zero, completion is inhibited. The completion character will be inserted as any other bound to `self-insert'.  File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers 2.6.4 A Short Completion Example -------------------------------- 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_SYS_FILE_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #ifdef HAVE_STDLIB_H # include #endif #include #include #include extern char *xmalloc PARAMS((size_t)); /* The names of functions that actually do the manipulation. */ int com_list PARAMS((char *)); int com_view PARAMS((char *)); int com_rename PARAMS((char *)); int com_stat PARAMS((char *)); int com_pwd PARAMS((char *)); int com_delete PARAMS((char *)); int com_help PARAMS((char *)); int com_cd PARAMS((char *)); int com_quit PARAMS((char *)); /* A structure which contains information on the commands this program can understand. */ typedef struct { char *name; /* User printable name of the function. */ rl_icpfunc_t *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, (rl_icpfunc_t *)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) char *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 PARAMS((const char *, int)); char **fileman_completion PARAMS((const char *, int, int)); /* 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 = 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) const 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 = rl_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) const 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; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ sprintf (syscom, "less %s", arg); #else sprintf (syscom, "more %s", arg); #endif 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 = getcwd (dir, sizeof(dir) - 1); 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); }  File: readline.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Programming with GNU Readline, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: GNU Free Documentation License, Up: Top Concept Index ************* [index] * Menu: * application-specific completion functions: Custom Completers. (line 6) * command editing: Readline Bare Essentials. (line 6) * editing command lines: Readline Bare Essentials. (line 6) * initialization file, readline: Readline Init File. (line 6) * interaction, readline: Readline Interaction. (line 6) * kill ring: Readline Killing Commands. (line 19) * killing text: Readline Killing Commands. (line 6) * notation, readline: Readline Bare Essentials. (line 6) * readline, function: Basic Behavior. (line 12) * variables, readline: Readline Init File Syntax. (line 34) * yanking text: Readline Killing Commands. (line 6)  File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top Function and Variable Index *************************** [index] * Menu: * _rl_digit_p: Utility Functions. (line 65) * _rl_digit_value: Utility Functions. (line 76) * _rl_lowercase_p: Utility Functions. (line 62) * _rl_to_lower: Utility Functions. (line 72) * _rl_to_upper: Utility Functions. (line 68) * _rl_uppercase_p: Utility Functions. (line 59) * abort (C-g): Miscellaneous Commands. (line 10) * accept-line (Newline or Return): Commands For History. (line 6) * backward-char (C-b): Commands For Moving. (line 15) * backward-delete-char (Rubout): Commands For Text. (line 17) * backward-kill-line (C-x Rubout): Commands For Killing. (line 9) * backward-kill-word (M-): Commands For Killing. (line 24) * backward-word (M-b): Commands For Moving. (line 22) * beginning-of-history (M-<): Commands For History. (line 19) * beginning-of-line (C-a): Commands For Moving. (line 6) * bell-style: Readline Init File Syntax. (line 35) * bind-tty-special-chars: Readline Init File Syntax. (line 42) * call-last-kbd-macro (C-x e): Keyboard Macros. (line 13) * capitalize-word (M-c): Commands For Text. (line 55) * character-search (C-]): Miscellaneous Commands. (line 41) * character-search-backward (M-C-]): Miscellaneous Commands. (line 46) * clear-screen (C-l): Commands For Moving. (line 26) * colored-stats: Readline Init File Syntax. (line 47) * comment-begin: Readline Init File Syntax. (line 53) * complete (): Commands For Completion. (line 6) * completion-display-width: Readline Init File Syntax. (line 58) * completion-ignore-case: Readline Init File Syntax. (line 65) * completion-map-case: Readline Init File Syntax. (line 70) * completion-prefix-display-length: Readline Init File Syntax. (line 76) * completion-query-items: Readline Init File Syntax. (line 83) * convert-meta: Readline Init File Syntax. (line 93) * copy-backward-word (): Commands For Killing. (line 49) * copy-forward-word (): Commands For Killing. (line 54) * copy-region-as-kill (): Commands For Killing. (line 45) * delete-char (C-d): Commands For Text. (line 12) * delete-char-or-list (): Commands For Completion. (line 39) * delete-horizontal-space (): Commands For Killing. (line 37) * digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) * disable-completion: Readline Init File Syntax. (line 99) * do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. (line 14) * downcase-word (M-l): Commands For Text. (line 51) * dump-functions (): Miscellaneous Commands. (line 70) * dump-macros (): Miscellaneous Commands. (line 82) * dump-variables (): Miscellaneous Commands. (line 76) * editing-mode: Readline Init File Syntax. (line 104) * enable-keypad: Readline Init File Syntax. (line 115) * end-kbd-macro (C-x )): Keyboard Macros. (line 9) * end-of-file (usually C-d): Commands For Text. (line 6) * end-of-history (M->): Commands For History. (line 22) * end-of-line (C-e): Commands For Moving. (line 9) * exchange-point-and-mark (C-x C-x): Miscellaneous Commands. (line 36) * expand-tilde: Readline Init File Syntax. (line 126) * forward-backward-delete-char (): Commands For Text. (line 21) * forward-char (C-f): Commands For Moving. (line 12) * forward-search-history (C-s): Commands For History. (line 30) * forward-word (M-f): Commands For Moving. (line 18) * history-preserve-point: Readline Init File Syntax. (line 130) * history-search-backward (): Commands For History. (line 51) * history-search-forward (): Commands For History. (line 45) * history-size: Readline Init File Syntax. (line 136) * history-substr-search-backward (): Commands For History. (line 63) * history-substr-search-forward (): Commands For History. (line 57) * horizontal-scroll-mode: Readline Init File Syntax. (line 143) * input-meta: Readline Init File Syntax. (line 150) * insert-comment (M-#): Miscellaneous Commands. (line 60) * insert-completions (M-*): Commands For Completion. (line 18) * isearch-terminators: Readline Init File Syntax. (line 157) * keymap: Readline Init File Syntax. (line 164) * kill-line (C-k): Commands For Killing. (line 6) * kill-region (): Commands For Killing. (line 41) * kill-whole-line (): Commands For Killing. (line 15) * kill-word (M-d): Commands For Killing. (line 19) * mark-modified-lines: Readline Init File Syntax. (line 193) * mark-symlinked-directories: Readline Init File Syntax. (line 198) * match-hidden-files: Readline Init File Syntax. (line 203) * menu-complete (): Commands For Completion. (line 22) * menu-complete-backward (): Commands For Completion. (line 34) * menu-complete-display-prefix: Readline Init File Syntax. (line 210) * meta-flag: Readline Init File Syntax. (line 150) * next-history (C-n): Commands For History. (line 16) * non-incremental-forward-search-history (M-n): Commands For History. (line 40) * non-incremental-reverse-search-history (M-p): Commands For History. (line 35) * output-meta: Readline Init File Syntax. (line 215) * overwrite-mode (): Commands For Text. (line 59) * page-completions: Readline Init File Syntax. (line 220) * possible-completions (M-?): Commands For Completion. (line 11) * prefix-meta (): Miscellaneous Commands. (line 18) * previous-history (C-p): Commands For History. (line 12) * print-last-kbd-macro (): Keyboard Macros. (line 17) * quoted-insert (C-q or C-v): Commands For Text. (line 26) * re-read-init-file (C-x C-r): Miscellaneous Commands. (line 6) * readline: Basic Behavior. (line 12) * redraw-current-line (): Commands For Moving. (line 30) * reverse-search-history (C-r): Commands For History. (line 26) * revert-all-at-newline: Readline Init File Syntax. (line 230) * revert-line (M-r): Miscellaneous Commands. (line 25) * rl_add_defun: Function Naming. (line 20) * rl_add_funmap_entry: Associating Function Names and Bindings. (line 47) * rl_add_undo: Allowing Undoing. (line 41) * rl_alphabetic: Utility Functions. (line 39) * rl_already_prompted: Readline Variables. (line 64) * rl_attempted_completion_function: Completion Variables. (line 12) * rl_attempted_completion_over: Completion Variables. (line 255) * rl_basic_quote_characters: Completion Variables. (line 144) * rl_basic_word_break_characters: Completion Variables. (line 138) * rl_begin_undo_group: Allowing Undoing. (line 29) * rl_bind_key: Binding Keys. (line 22) * rl_bind_key_if_unbound: Binding Keys. (line 32) * rl_bind_key_if_unbound_in_map: Binding Keys. (line 38) * rl_bind_key_in_map: Binding Keys. (line 27) * rl_bind_keyseq: Binding Keys. (line 59) * rl_bind_keyseq_if_unbound: Binding Keys. (line 77) * rl_bind_keyseq_if_unbound_in_map: Binding Keys. (line 83) * rl_bind_keyseq_in_map: Binding Keys. (line 66) * rl_binding_keymap: Readline Variables. (line 186) * rl_callback_handler_install: Alternate Interface. (line 15) * rl_callback_handler_remove: Alternate Interface. (line 35) * rl_callback_read_char: Alternate Interface. (line 22) * rl_catch_signals: Readline Signal Handling. (line 48) * rl_catch_sigwinch: Readline Signal Handling. (line 55) * rl_change_environment: Readline Signal Handling. (line 61) * rl_char_is_quoted_p: Completion Variables. (line 46) * rl_cleanup_after_signal: Readline Signal Handling. (line 73) * rl_clear_history: Miscellaneous Functions. (line 50) * rl_clear_message: Redisplay. (line 48) * rl_clear_pending_input: Character Input. (line 30) * rl_clear_signals: Readline Signal Handling. (line 132) * rl_complete <1>: How Completing Works. (line 49) * rl_complete: Completion Functions. (line 20) * rl_complete_internal: Completion Functions. (line 10) * rl_completer_quote_characters: Completion Variables. (line 161) * rl_completer_word_break_characters: Completion Variables. (line 147) * rl_completion_append_character: Completion Variables. (line 185) * rl_completion_display_matches_hook: Completion Variables. (line 125) * rl_completion_entry_function <1>: How Completing Works. (line 55) * rl_completion_entry_function: Completion Variables. (line 7) * rl_completion_found_quote: Completion Variables. (line 213) * rl_completion_invoking_key: Completion Variables. (line 278) * rl_completion_mark_symlink_dirs: Completion Variables. (line 220) * rl_completion_matches: Completion Functions. (line 45) * rl_completion_mode: Completion Functions. (line 37) * rl_completion_query_items: Completion Variables. (line 179) * rl_completion_quote_character: Completion Variables. (line 201) * rl_completion_suppress_append: Completion Variables. (line 195) * rl_completion_suppress_quote: Completion Variables. (line 207) * rl_completion_type: Completion Variables. (line 270) * rl_completion_word_break_hook: Completion Variables. (line 152) * rl_copy_keymap: Keymaps. (line 17) * rl_copy_text: Modifying Text. (line 15) * rl_crlf: Redisplay. (line 30) * rl_delete_text: Modifying Text. (line 11) * rl_deprep_term_function: Readline Variables. (line 176) * rl_deprep_terminal: Terminal Management. (line 13) * rl_ding: Utility Functions. (line 36) * rl_directory_completion_hook: Completion Variables. (line 64) * rl_directory_rewrite_hook;: Completion Variables. (line 82) * rl_discard_keymap: Keymaps. (line 26) * rl_dispatching: Readline Variables. (line 41) * rl_display_match_list: Utility Functions. (line 43) * rl_display_prompt: Readline Variables. (line 59) * rl_do_undo: Allowing Undoing. (line 48) * rl_done: Readline Variables. (line 28) * rl_echo_signal_char: Readline Signal Handling. (line 96) * rl_editing_mode: Readline Variables. (line 308) * rl_end: Readline Variables. (line 19) * rl_end_undo_group: Allowing Undoing. (line 35) * rl_erase_empty_line: Readline Variables. (line 47) * rl_event_hook: Readline Variables. (line 124) * rl_execute_next: Character Input. (line 26) * rl_executing_key: Readline Variables. (line 193) * rl_executing_keymap: Readline Variables. (line 182) * rl_executing_keyseq: Readline Variables. (line 197) * rl_executing_macro: Readline Variables. (line 190) * rl_expand_prompt: Redisplay. (line 64) * rl_explicit_arg: Readline Variables. (line 299) * rl_extend_line_buffer: Utility Functions. (line 27) * rl_filename_completion_desired: Completion Variables. (line 235) * rl_filename_completion_function: Completion Functions. (line 59) * rl_filename_dequoting_function: Completion Variables. (line 37) * rl_filename_quote_characters: Completion Variables. (line 167) * rl_filename_quoting_desired: Completion Variables. (line 245) * rl_filename_quoting_function: Completion Variables. (line 24) * rl_filename_rewrite_hook: Completion Variables. (line 110) * rl_filename_stat_hook: Completion Variables. (line 98) * rl_forced_update_display: Redisplay. (line 11) * rl_free: Utility Functions. (line 18) * rl_free_keymap: Keymaps. (line 30) * rl_free_line_state: Readline Signal Handling. (line 79) * rl_free_undo_list: Allowing Undoing. (line 45) * rl_function_dumper: Associating Function Names and Bindings. (line 30) * rl_function_of_keyseq: Associating Function Names and Bindings. (line 15) * rl_funmap_names: Associating Function Names and Bindings. (line 40) * rl_generic_bind: Binding Keys. (line 89) * rl_get_keymap: Keymaps. (line 37) * rl_get_keymap_by_name: Keymaps. (line 43) * rl_get_keymap_name: Keymaps. (line 48) * rl_get_screen_size: Readline Signal Handling. (line 115) * rl_get_termcap: Miscellaneous Functions. (line 42) * rl_getc: Character Input. (line 15) * rl_getc_function: Readline Variables. (line 130) * rl_gnu_readline_p: Readline Variables. (line 83) * rl_ignore_completion_duplicates: Completion Variables. (line 231) * rl_ignore_some_completions_function: Completion Variables. (line 56) * rl_inhibit_completion: Completion Variables. (line 284) * rl_initialize: Utility Functions. (line 31) * rl_input_available_hook: Readline Variables. (line 142) * rl_insert_completions: Completion Functions. (line 32) * rl_insert_text: Modifying Text. (line 7) * rl_instream: Readline Variables. (line 97) * rl_invoking_keyseqs: Associating Function Names and Bindings. (line 21) * rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. (line 26) * rl_key_sequence_length: Readline Variables. (line 201) * rl_kill_text: Modifying Text. (line 19) * rl_last_func: Readline Variables. (line 110) * rl_library_version: Readline Variables. (line 73) * rl_line_buffer: Readline Variables. (line 9) * rl_list_funmap_names: Associating Function Names and Bindings. (line 36) * rl_macro_bind: Miscellaneous Functions. (line 8) * rl_macro_dumper: Miscellaneous Functions. (line 14) * rl_make_bare_keymap: Keymaps. (line 12) * rl_make_keymap: Keymaps. (line 20) * rl_mark: Readline Variables. (line 24) * rl_message: Redisplay. (line 39) * rl_modifying: Allowing Undoing. (line 57) * rl_named_function: Associating Function Names and Bindings. (line 11) * rl_num_chars_to_read: Readline Variables. (line 32) * rl_numeric_arg: Readline Variables. (line 303) * rl_on_new_line: Redisplay. (line 15) * rl_on_new_line_with_prompt: Redisplay. (line 19) * rl_outstream: Readline Variables. (line 101) * rl_parse_and_bind: Binding Keys. (line 96) * rl_pending_input: Readline Variables. (line 37) * rl_point: Readline Variables. (line 15) * rl_possible_completions: Completion Functions. (line 28) * rl_pre_input_hook: Readline Variables. (line 119) * rl_prefer_env_winsize: Readline Variables. (line 105) * rl_prep_term_function: Readline Variables. (line 169) * rl_prep_terminal: Terminal Management. (line 7) * rl_prompt: Readline Variables. (line 53) * rl_push_macro_input: Modifying Text. (line 26) * rl_read_init_file: Binding Keys. (line 101) * rl_read_key: Character Input. (line 7) * rl_readline_name: Readline Variables. (line 92) * rl_readline_state: Readline Variables. (line 204) * rl_readline_version: Readline Variables. (line 76) * rl_redisplay: Redisplay. (line 7) * rl_redisplay_function: Readline Variables. (line 163) * rl_replace_line: Utility Functions. (line 22) * rl_reset_after_signal: Readline Signal Handling. (line 87) * rl_reset_line_state: Redisplay. (line 26) * rl_reset_screen_size: Readline Signal Handling. (line 119) * rl_reset_terminal: Terminal Management. (line 28) * rl_resize_terminal: Readline Signal Handling. (line 102) * rl_restore_prompt: Redisplay. (line 57) * rl_restore_state: Utility Functions. (line 12) * rl_save_prompt: Redisplay. (line 53) * rl_save_state: Utility Functions. (line 7) * rl_set_key: Binding Keys. (line 73) * rl_set_keyboard_input_timeout: Character Input. (line 35) * rl_set_keymap: Keymaps. (line 40) * rl_set_paren_blink_timeout: Miscellaneous Functions. (line 37) * rl_set_prompt: Redisplay. (line 78) * rl_set_screen_size: Readline Signal Handling. (line 106) * rl_set_signals: Readline Signal Handling. (line 126) * rl_show_char: Redisplay. (line 33) * rl_signal_event_hook: Readline Variables. (line 138) * rl_sort_completion_matches: Completion Variables. (line 262) * rl_special_prefixes: Completion Variables. (line 172) * rl_startup_hook: Readline Variables. (line 115) * rl_stuff_char: Character Input. (line 19) * rl_terminal_name: Readline Variables. (line 87) * rl_tty_set_default_bindings: Terminal Management. (line 18) * rl_tty_unset_default_bindings: Terminal Management. (line 23) * rl_unbind_command_in_map: Binding Keys. (line 55) * rl_unbind_function_in_map: Binding Keys. (line 51) * rl_unbind_key: Binding Keys. (line 42) * rl_unbind_key_in_map: Binding Keys. (line 46) * rl_username_completion_function: Completion Functions. (line 66) * rl_variable_bind: Miscellaneous Functions. (line 21) * rl_variable_dumper: Miscellaneous Functions. (line 31) * rl_variable_value: Miscellaneous Functions. (line 26) * self-insert (a, b, A, 1, !, ...): Commands For Text. (line 33) * set-mark (C-@): Miscellaneous Commands. (line 32) * show-all-if-ambiguous: Readline Init File Syntax. (line 236) * show-all-if-unmodified: Readline Init File Syntax. (line 242) * show-mode-in-prompt: Readline Init File Syntax. (line 251) * skip-completed-text: Readline Init File Syntax. (line 256) * skip-csi-sequence (): Miscellaneous Commands. (line 51) * start-kbd-macro (C-x (): Keyboard Macros. (line 6) * transpose-chars (C-t): Commands For Text. (line 36) * transpose-words (M-t): Commands For Text. (line 42) * undo (C-_ or C-x C-u): Miscellaneous Commands. (line 22) * universal-argument (): Numeric Arguments. (line 10) * unix-filename-rubout (): Commands For Killing. (line 32) * unix-line-discard (C-u): Commands For Killing. (line 12) * unix-word-rubout (C-w): Commands For Killing. (line 28) * upcase-word (M-u): Commands For Text. (line 47) * visible-stats: Readline Init File Syntax. (line 269) * yank (C-y): Commands For Killing. (line 59) * yank-last-arg (M-. or M-_): Commands For History. (line 78) * yank-nth-arg (M-C-y): Commands For History. (line 69) * yank-pop (M-y): Commands For Killing. (line 62)  Tag Table: Node: Top907 Node: Command Line Editing1632 Node: Introduction and Notation2284 Node: Readline Interaction3907 Node: Readline Bare Essentials5099 Node: Readline Movement Commands6889 Node: Readline Killing Commands7855 Node: Readline Arguments9776 Node: Searching10821 Node: Readline Init File12973 Node: Readline Init File Syntax14127 Node: Conditional Init Constructs30832 Node: Sample Init File33366 Node: Bindable Readline Commands36485 Node: Commands For Moving37543 Node: Commands For History38405 Node: Commands For Text42560 Node: Commands For Killing45543 Node: Numeric Arguments47686 Node: Commands For Completion48826 Node: Keyboard Macros50796 Node: Miscellaneous Commands51485 Node: Readline vi Mode55342 Node: Programming with GNU Readline57159 Node: Basic Behavior58145 Node: Custom Functions61562 Node: Readline Typedefs63046 Node: Function Writing64686 Node: Readline Variables65993 Node: Readline Convenience Functions78671 Node: Function Naming79743 Node: Keymaps81005 Node: Binding Keys82998 Node: Associating Function Names and Bindings87545 Node: Allowing Undoing89830 Node: Redisplay92380 Node: Modifying Text96281 Node: Character Input97527 Node: Terminal Management99425 Node: Utility Functions100861 Node: Miscellaneous Functions104189 Node: Alternate Interface106778 Node: A Readline Example109012 Node: Alternate Interface Example110951 Node: Readline Signal Handling113724 Node: Custom Completers120246 Node: How Completing Works120966 Node: Completion Functions124280 Node: Completion Variables127854 Node: A Short Completion Example143502 Node: GNU Free Documentation License156281 Node: Concept Index181474 Node: Function and Variable Index182995  End Tag Table readline-6.3/doc/history.info0000664000043600000000000016706312276516310015106 0ustar chetwheelThis is history.info, produced by makeinfo version 4.13 from /usr/homes/chet/src/bash/readline-src/doc/history.texi. This document describes the GNU History library (version 6.3, 6 January 2014), a programming tool that provides a consistent user interface for recalling lines of previously typed input. Copyright (C) 1988-2014 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Libraries START-INFO-DIR-ENTRY * History: (history). The GNU history library API. END-INFO-DIR-ENTRY  File: history.info, Node: Top, Next: Using History Interactively, Up: (dir) GNU History Library ******************* This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input. * Menu: * Using History Interactively:: GNU History User's Manual. * Programming with GNU History:: GNU History Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables.  File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top 1 Using History Interactively ***************************** This chapter describes how to use the GNU History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the GNU History Library in your own programs, *note Programming with GNU History::. * Menu: * History Interaction:: What it feels like using History as a user.  File: history.info, Node: History Interaction, Up: Using History Interactively 1.1 History Expansion ===================== The History library provides a history expansion feature that is similar to the history expansion provided by `csh'. This section describes the syntax used to manipulate the history information. History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is called the "event", and the portions of that line that are acted upon are called "words". Various "modifiers" are available to manipulate the selected words. The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is `!' by default. * Menu: * Event Designators:: How to specify which history line to use. * Word Designators:: Specifying which words are of interest. * Modifiers:: Modifying the results of substitution.  File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction 1.1.1 Event Designators ----------------------- An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. `!' Start a history substitution, except when followed by a space, tab, the end of the line, or `='. `!N' Refer to command line N. `!-N' Refer to the command N lines back. `!!' Refer to the previous command. This is a synonym for `!-1'. `!STRING' Refer to the most recent command preceding the current position in the history list starting with STRING. `!?STRING[?]' Refer to the most recent command preceding the current position in the history list containing STRING. The trailing `?' may be omitted if the STRING is followed immediately by a newline. `^STRING1^STRING2^' Quick Substitution. Repeat the last command, replacing STRING1 with STRING2. Equivalent to `!!:s/STRING1/STRING2/'. `!#' The entire command line typed so far.  File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction 1.1.2 Word Designators ---------------------- Word designators are used to select desired words from the event. A `:' separates the event specification from the word designator. It may be omitted if the word designator begins with a `^', `$', `*', `-', or `%'. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. For example, `!!' designates the preceding command. When you type this, the preceding command is repeated in toto. `!!:$' designates the last argument of the preceding command. This may be shortened to `!$'. `!fi:2' designates the second argument of the most recent command starting with the letters `fi'. Here are the word designators: `0 (zero)' The `0'th word. For many applications, this is the command word. `N' The Nth word. `^' The first argument; that is, word 1. `$' The last argument. `%' The word matched by the most recent `?STRING?' search. `X-Y' A range of words; `-Y' abbreviates `0-Y'. `*' All of the words, except the `0'th. This is a synonym for `1-$'. It is not an error to use `*' if there is just one word in the event; the empty string is returned in that case. `X*' Abbreviates `X-$' `X-' Abbreviates `X-$' like `X*', but omits the last word. If a word designator is supplied without an event specification, the previous command is used as the event.  File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction 1.1.3 Modifiers --------------- After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a `:'. `h' Remove a trailing pathname component, leaving only the head. `t' Remove all leading pathname components, leaving the tail. `r' Remove a trailing suffix of the form `.SUFFIX', leaving the basename. `e' Remove all but the trailing suffix. `p' Print the new command but do not execute it. `s/OLD/NEW/' Substitute NEW for the first occurrence of OLD in the event line. Any delimiter may be used in place of `/'. The delimiter may be quoted in OLD and NEW with a single backslash. If `&' appears in NEW, it is replaced by OLD. A single backslash will quote the `&'. The final delimiter is optional if it is the last character on the input line. `&' Repeat the previous substitution. `g' `a' Cause changes to be applied over the entire event line. Used in conjunction with `s', as in `gs/OLD/NEW/', or with `&'. `G' Apply the following `s' modifier once to each word in the event.  File: history.info, Node: Programming with GNU History, Next: GNU Free Documentation License, Prev: Using History Interactively, Up: Top 2 Programming with GNU History ****************************** This chapter describes how to interface programs that you write with the GNU History Library. It should be considered a technical guide. For information on the interactive use of GNU History, *note Using History Interactively::. * Menu: * Introduction to History:: What is the GNU History library for? * History Storage:: How information is stored. * History Functions:: Functions that you can use. * History Variables:: Variables that control behaviour. * History Programming Example:: Example of using the GNU History Library.  File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History 2.1 Introduction to History =========================== Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history "expansion" function is available which provides for a consistent user interface across different programs. The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are similar to the history substitution provided by `csh'. If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing. Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file `' in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures.  File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History 2.2 History Storage =================== The history list is an array of history entries. A history entry is declared as follows: typedef void *histdata_t; typedef struct _hist_entry { char *line; char *timestamp; histdata_t data; } HIST_ENTRY; The history list itself might therefore be declared as HIST_ENTRY **the_history_list; The state of the History library is encapsulated into a single structure: /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; If the flags member includes `HS_STIFLED', the history has been stifled.  File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History 2.3 History Functions ===================== This section describes the calling sequence for the various functions exported by the GNU History library. * Menu: * Initializing History and State Management:: Functions to call when you want to use history in a program. * History List Management:: Functions used to manage the list of history entries. * Information About the History List:: Functions returning information about the history list. * Moving Around the History List:: Functions used to change the position in the history list. * Searching the History List:: Functions to search the history list for entries containing a string. * Managing the History File:: Functions that read and write a file containing the history list. * History Expansion:: Functions to perform csh-like history expansion.  File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions 2.3.1 Initializing History and State Management ----------------------------------------------- This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. -- Function: void using_history (void) Begin a session in which the history functions might be used. This initializes the interactive variables. -- Function: HISTORY_STATE * history_get_history_state (void) Return a structure describing the current state of the input history. -- Function: void history_set_history_state (HISTORY_STATE *state) Set the state of the history list according to STATE.  File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions 2.3.2 History List Management ----------------------------- These functions manage individual entries on the history list, or set parameters managing the list itself. -- Function: void add_history (const char *string) Place STRING at the end of the history list. The associated data field (if any) is set to `NULL'. -- Function: void add_history_time (const char *string) Change the time stamp associated with the most recent history entry to STRING. -- Function: HIST_ENTRY * remove_history (int which) Remove history entry at offset WHICH from the history. The removed element is returned so you can free the line, data, and containing structure. -- Function: histdata_t free_history_entry (HIST_ENTRY *histent) Free the history entry HISTENT and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. -- Function: HIST_ENTRY * replace_history_entry (int which, const char *line, histdata_t data) Make the history entry at offset WHICH have LINE and DATA. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid WHICH, a `NULL' pointer is returned. -- Function: void clear_history (void) Clear the history list by deleting all the entries. -- Function: void stifle_history (int max) Stifle the history list, remembering only the last MAX entries. -- Function: int unstifle_history (void) Stop stifling the history. This returns the previously-set maximum number of history entries (as set by `stifle_history()'). The value is positive if the history was stifled, negative if it wasn't. -- Function: int history_is_stifled (void) Returns non-zero if the history is stifled, zero if it is not.  File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions 2.3.3 Information About the History List ---------------------------------------- These functions return information about the entire history list or individual list entries. -- Function: HIST_ENTRY ** history_list (void) Return a `NULL' terminated array of `HIST_ENTRY *' which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return `NULL'. -- Function: int where_history (void) Returns the offset of the current history element. -- Function: HIST_ENTRY * current_history (void) Return the history entry at the current position, as determined by `where_history()'. If there is no entry there, return a `NULL' pointer. -- Function: HIST_ENTRY * history_get (int offset) Return the history entry at position OFFSET, starting from `history_base' (*note History Variables::). If there is no entry there, or if OFFSET is greater than the history length, return a `NULL' pointer. -- Function: time_t history_get_time (HIST_ENTRY *entry) Return the time stamp associated with the history entry ENTRY. -- Function: int history_total_bytes (void) Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history.  File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions 2.3.4 Moving Around the History List ------------------------------------ These functions allow the current index into the history list to be set or changed. -- Function: int history_set_pos (int pos) Set the current history offset to POS, an absolute index into the list. Returns 1 on success, 0 if POS is less than zero or greater than the number of history entries. -- Function: HIST_ENTRY * previous_history (void) Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a `NULL' pointer. -- Function: HIST_ENTRY * next_history (void) Move the current history offset forward to the next history entry, and return the a pointer to that entry. If there is no next entry, return a `NULL' pointer.  File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions 2.3.5 Searching the History List -------------------------------- These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be "anchored", meaning that the string must match at the beginning of the history entry. -- Function: int history_search (const char *string, int direction) Search the history for STRING, starting at the current history offset. If DIRECTION is less than 0, then the search is through previous entries, otherwise through subsequent entries. If STRING is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where STRING was found. Otherwise, nothing is changed, and a -1 is returned. -- Function: int history_search_prefix (const char *string, int direction) Search the history for STRING, starting at the current history offset. The search is anchored: matching lines must begin with STRING. If DIRECTION is less than 0, then the search is through previous entries, otherwise through subsequent entries. If STRING is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. -- Function: int history_search_pos (const char *string, int direction, int pos) Search for STRING in the history list, starting at POS, an absolute index into the list. If DIRECTION is negative, the search proceeds backward from POS, otherwise forward. Returns the absolute index of the history element where STRING was found, or -1 otherwise.  File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions 2.3.6 Managing the History File ------------------------------- The History library can read the history from and write it to a file. This section documents the functions for managing a history file. -- Function: int read_history (const char *filename) Add the contents of FILENAME to the history list, a line at a time. If FILENAME is `NULL', then read from `~/.history'. Returns 0 if successful, or `errno' if not. -- Function: int read_history_range (const char *filename, int from, int to) Read a range of lines from FILENAME, adding them to the history list. Start reading at line FROM and end at TO. If FROM is zero, start at the beginning. If TO is less than FROM, then read until the end of the file. If FILENAME is `NULL', then read from `~/.history'. Returns 0 if successful, or `errno' if not. -- Function: int write_history (const char *filename) Write the current history to FILENAME, overwriting FILENAME if necessary. If FILENAME is `NULL', then write the history list to `~/.history'. Returns 0 on success, or `errno' on a read or write error. -- Function: int append_history (int nelements, const char *filename) Append the last NELEMENTS of the history list to FILENAME. If FILENAME is `NULL', then append to `~/.history'. Returns 0 on success, or `errno' on a read or write error. -- Function: int history_truncate_file (const char *filename, int nlines) Truncate the history file FILENAME, leaving only the last NLINES lines. If FILENAME is `NULL', then `~/.history' is truncated. Returns 0 on success, or `errno' on failure.  File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions 2.3.7 History Expansion ----------------------- These functions implement history expansion. -- Function: int history_expand (char *string, char **output) Expand STRING, placing the result into OUTPUT, a pointer to a string (*note History Interaction::). Returns: `0' If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); `1' if expansions did take place; `-1' if there was an error in expansion; `2' if the returned line should be displayed, but not executed, as with the `:p' modifier (*note Modifiers::). If an error occurred in expansion, then OUTPUT contains a descriptive error message. -- Function: char * get_history_event (const char *string, int *cindex, int qchar) Returns the text of the history event beginning at STRING + *CINDEX. *CINDEX is modified to point to after the event specifier. At function entry, CINDEX points to the index into STRING where the history event specification begins. QCHAR is a character that is allowed to end the event specification in addition to the "normal" terminating characters. -- Function: char ** history_tokenize (const char *string) Return an array of tokens parsed out of STRING, much as the shell might. The tokens are split on the characters in the HISTORY_WORD_DELIMITERS variable, and shell quoting conventions are obeyed. -- Function: char * history_arg_extract (int first, int last, const char *string) Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are split using `history_tokenize'.  File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History 2.4 History Variables ===================== This section describes the externally-visible variables exported by the GNU History Library. -- Variable: int history_base The logical offset of the first entry in the history list. -- Variable: int history_length The number of entries currently stored in the history list. -- Variable: int history_max_entries The maximum number of history entries. This must be changed using `stifle_history()'. -- Variable: int history_write_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved. The current timestamp format uses the value of HISTORY_COMMENT_CHAR to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. -- Variable: char history_expansion_char The character that introduces a history event. The default is `!'. Setting this to 0 inhibits history expansion. -- Variable: char history_subst_char The character that invokes word substitution if found at the start of a line. The default is `^'. -- Variable: char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. -- Variable: char * history_word_delimiters The characters that separate tokens for `history_tokenize()'. The default value is `" \t\n()<>;&|"'. -- Variable: char * history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, TAB, `:' and `?' in the case of a substring search. The default is empty. -- Variable: char * history_no_expand_chars The list of characters which inhibit history expansion if found immediately following HISTORY_EXPANSION_CHAR. The default is space, tab, newline, carriage return, and `='. -- Variable: int history_quotes_inhibit_expansion If non-zero, single-quoted words are not scanned for the history expansion character. The default value is 0. -- Variable: rl_linebuf_func_t * history_inhibit_expansion_function This should be set to the address of a function that takes two arguments: a `char *' (STRING) and an `int' index into that string (I). It should return a non-zero value if the history expansion starting at STRING[I] should not be performed; zero if the expansion should be done. It is intended for use by applications like Bash that use the history expansion character for additional purposes. By default, this variable is set to `NULL'.  File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History 2.5 History Programming Example =============================== The following program demonstrates simple use of the GNU History Library. #include #include main (argc, argv) int argc; char **argv; { char line[1024], *t; int len, done = 0; line[0] = 0; using_history (); while (!done) { printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) { len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; } if (!t) strcpy (line, "quit"); if (line[0]) { char *expansion; int result; result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) { free (expansion); continue; } add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); } if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) { register HIST_ENTRY **the_list; register int i; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) printf ("%d: %s\n", i + history_base, the_list[i]->line); } else if (strncmp (line, "delete", 6) == 0) { int which; if ((sscanf (line + 6, "%d", &which)) == 1) { HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else { free (entry->line); free (entry); } } else { fprintf (stderr, "non-numeric arg given to `delete'\n"); } } } }  File: history.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Programming with GNU History, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: GNU Free Documentation License, Up: Top Appendix B Concept Index ************************ [index] * Menu: * anchored search: Searching the History List. (line 10) * event designators: Event Designators. (line 6) * history events: Event Designators. (line 8) * history expansion: History Interaction. (line 6) * History Searching: Searching the History List. (line 6)  File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top Appendix C Function and Variable Index ************************************** [index] * Menu: * add_history: History List Management. (line 10) * add_history_time: History List Management. (line 14) * append_history: Managing the History File. (line 29) * clear_history: History List Management. (line 35) * current_history: Information About the History List. (line 18) * free_history_entry: History List Management. (line 23) * get_history_event: History Expansion. (line 31) * history_arg_extract: History Expansion. (line 46) * history_base: History Variables. (line 10) * history_comment_char: History Variables. (line 38) * history_expand: History Expansion. (line 9) * history_expansion_char: History Variables. (line 30) * history_get: Information About the History List. (line 23) * history_get_history_state: Initializing History and State Management. (line 15) * history_get_time: Information About the History List. (line 29) * history_inhibit_expansion_function: History Variables. (line 62) * history_is_stifled: History List Management. (line 47) * history_length: History Variables. (line 13) * history_list: Information About the History List. (line 10) * history_max_entries: History Variables. (line 16) * history_no_expand_chars: History Variables. (line 53) * history_quotes_inhibit_expansion: History Variables. (line 58) * history_search: Searching the History List. (line 13) * history_search_delimiter_chars: History Variables. (line 48) * history_search_pos: Searching the History List. (line 33) * history_search_prefix: Searching the History List. (line 23) * history_set_history_state: Initializing History and State Management. (line 19) * history_set_pos: Moving Around the History List. (line 10) * history_subst_char: History Variables. (line 34) * history_tokenize: History Expansion. (line 39) * history_total_bytes: Information About the History List. (line 32) * history_truncate_file: Managing the History File. (line 35) * history_word_delimiters: History Variables. (line 44) * history_write_timestamps: History Variables. (line 20) * next_history: Moving Around the History List. (line 20) * previous_history: Moving Around the History List. (line 15) * read_history: Managing the History File. (line 10) * read_history_range: Managing the History File. (line 16) * remove_history: History List Management. (line 18) * replace_history_entry: History List Management. (line 29) * stifle_history: History List Management. (line 38) * unstifle_history: History List Management. (line 41) * using_history: Initializing History and State Management. (line 11) * where_history: Information About the History List. (line 15) * write_history: Managing the History File. (line 23)  Tag Table: Node: Top891 Node: Using History Interactively1536 Node: History Interaction2044 Node: Event Designators3468 Node: Word Designators4610 Node: Modifiers6249 Node: Programming with GNU History7474 Node: Introduction to History8217 Node: History Storage9907 Node: History Functions11042 Node: Initializing History and State Management12031 Node: History List Management12843 Node: Information About the History List14875 Node: Moving Around the History List16372 Node: Searching the History List17373 Node: Managing the History File19305 Node: History Expansion21125 Node: History Variables23034 Node: History Programming Example26066 Node: GNU Free Documentation License28743 Node: Concept Index53934 Node: Function and Variable Index54639  End Tag Table readline-6.3/doc/rluserman.info0000664000043600000000000024025712276516310015412 0ustar chetwheelThis is rluserman.info, produced by makeinfo version 4.13 from /usr/homes/chet/src/bash/readline-src/doc/rluserman.texi. This manual describes the end user interface of the GNU Readline Library (version 6.3, 6 January 2014), a library which aids in the consistency of user interface across discrete programs which provide a command line interface. Copyright (C) 1988-2014 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Libraries START-INFO-DIR-ENTRY * RLuserman: (rluserman). The GNU readline library User's Manual. END-INFO-DIR-ENTRY  File: rluserman.info, Node: Top, Next: Command Line Editing, Up: (dir) GNU Readline Library ******************** This document describes the end user interface of the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is `http://www.gnu.org/software/readline/'. * Menu: * Command Line Editing:: GNU Readline User's Manual. * GNU Free Documentation License:: License for copying this manual.  File: rluserman.info, Node: Command Line Editing, Next: GNU Free Documentation License, Prev: Top, Up: Top 1 Command Line Editing ********************** This chapter describes the basic features of the GNU command line editing interface. * Menu: * Introduction and Notation:: Notation used in this text. * Readline Interaction:: The minimum set of commands for editing a line. * Readline Init File:: Customizing Readline from a user's view. * Bindable Readline Commands:: A description of most of the Readline commands available for binding * Readline vi Mode:: A short description of how to make Readline behave like the vi editor.  File: rluserman.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing 1.1 Introduction to Line Editing ================================ 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 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 key is pressed. The Meta key is labeled on many keyboards. On keyboards with two keys labeled (usually to either side of the space bar), the on the left side is generally set to work as a Meta key. The key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. If you do not have a Meta or key, or another key working as a Meta key, the identical keystroke can be generated by typing _first_, and then typing . Either process is known as "metafying" the 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, , , , , , and all stand for themselves when seen in this text, or in an init file (*note Readline Init File::). If your keyboard lacks a key, typing will produce the desired character. The key may be labeled or on some keyboards.  File: rluserman.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing 1.2 Readline Interaction ======================== 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 . You do not have to be at the end of the line to press ; the entire line is accepted regardless of the location of the cursor within the line. * Menu: * Readline Bare Essentials:: The least you need to know about Readline. * Readline Movement Commands:: Moving about the input line. * Readline Killing Commands:: How to delete text, and how to get it back! * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines.  File: rluserman.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction 1.2.1 Readline Bare Essentials ------------------------------ In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type `C-b' to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with `C-f'. When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. `C-b' Move back one character. `C-f' Move forward one character. or Delete the character to the left of the cursor. `C-d' Delete the character underneath the cursor. Printing characters Insert the character into the line at the cursor. `C-_' or `C-x C-u' Undo the last editing command. You can undo all the way back to an empty line. (Depending on your configuration, the key be set to delete the character to the left of the cursor and the key set to delete the character underneath the cursor, like `C-d', rather than the character to the left of the cursor.)  File: rluserman.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction 1.2.2 Readline Movement Commands -------------------------------- The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to `C-b', `C-f', `C-d', and . Here are some commands for moving more rapidly about the line. `C-a' Move to the start of the line. `C-e' Move to the end of the line. `M-f' Move forward a word, where a word is composed of letters and digits. `M-b' Move backward a word. `C-l' Clear the screen, reprinting the current line at the top. Notice how `C-f' moves forward a character, while `M-f' moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.  File: rluserman.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction 1.2.3 Readline Killing Commands ------------------------------- "Killing" text means to delete the text from the line, but to save it away for later use, usually by "yanking" (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.) If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later. When you use a kill command, the text is saved in a "kill-ring". Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. Here is the list of commands for killing text. `C-k' Kill the text from the current cursor position to the end of the line. `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 those used by `M-f'. `M-' Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by `M-b'. `C-w' Kill from the cursor to the previous whitespace. This is different than `M-' because the word boundaries differ. Here is how to "yank" the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. `C-y' Yank the most recently killed text back into the buffer at the cursor. `M-y' Rotate the kill-ring, and yank the new top. You can only do this if the prior command is `C-y' or `M-y'.  File: rluserman.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction 1.2.4 Readline Arguments ------------------------ You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type `M-- C-k'. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (`-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the `C-d' command an argument of 10, you could type `M-1 0 C-d', which will delete the next ten characters on the input line.  File: rluserman.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction 1.2.5 Searching for Commands in the History ------------------------------------------- Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: "incremental" and "non-incremental". Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type `C-r'. Typing `C-s' searches forward through the history. The characters present in the value of the `isearch-terminators' variable are used to terminate an incremental search. If that variable has not been assigned a value, the and `C-J' characters will terminate an incremental search. `C-g' will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type `C-r' or `C-s' as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Readline remembers the last incremental search string. If two `C-r's are typed without any intervening characters defining a new search string, any remembered search string is used. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.  File: rluserman.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing 1.3 Readline Init File ====================== Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an "inputrc" file, conventionally in his home directory. The name of this file is taken from the value of the environment variable `INPUTRC'. If that variable is unset, the default is `~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is `/etc/inputrc'. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. In addition, the `C-x C-r' command re-reads this init file, thus incorporating any changes that you might have made to it. * Menu: * Readline Init File Syntax:: Syntax for the commands in the inputrc file. * Conditional Init Constructs:: Conditional key bindings in the inputrc file. * Sample Init File:: An example inputrc file.  File: rluserman.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File 1.3.1 Readline Init File Syntax ------------------------------- 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 (*note 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. The syntax is simple: set VARIABLE VALUE Here, for example, is how to change from the default Emacs-like key binding to use `vi' line editing commands: set editing-mode vi Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, ON (case-insensitive), or 1. Any other value results in the variable being set to off. 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. `bind-tty-special-chars' If set to `on', Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents. `colored-stats' If set to `on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the `LS_COLORS' environment variable. The default is `off'. `comment-begin' The string to insert at the beginning of the line when the `insert-comment' command is executed. The default value is `"#"'. `completion-display-width' The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. `completion-ignore-case' If set to `on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is `off'. `completion-map-case' If set to `on', and COMPLETION-IGNORE-CASE is enabled, Readline treats hyphens (`-') and underscores (`_') as equivalent when performing case-insensitive filename matching and completion. `completion-prefix-display-length' The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. `completion-query-items' The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. 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. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. 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 prefixing an 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'. `echo-control-characters' When set to `on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is `on'. `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'. `enable-meta-key' When set to `on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is `on'. `expand-tilde' If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'. `history-preserve-point' If set to `on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with `previous-history' or `next-history'. The default is `off'. `history-size' Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. `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'. `input-meta' If set to `on', Readline will enable eight-bit input (it will not clear the eighth bit in 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. `isearch-terminators' The string of characters that should terminate an incremental search without subsequently executing the character as a command (*note Searching::). If this variable has not been given a value, the characters and `C-J' will terminate an incremental search. `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-move', `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. `keyseq-timeout' Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (`rl_instream' by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is `500'. `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. `mark-symlinked-directories' If set to `on', completed names which are symbolic links to directories have a slash appended (subject to the value of `mark-directories'). The default is `off'. `match-hidden-files' This variable, when set to `on', causes Readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to `off', the leading `.' must be supplied by the user in the filename to be completed. This variable is `on' by default. `menu-complete-display-prefix' If set to `on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is `off'. `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'. `page-completions' If set to `on', Readline uses an internal `more'-like pager to display a screenful of possible completions at a time. This variable is `on' by default. `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'. `revert-all-at-newline' If set to `on', Readline will undo all changes to history lines before returning when `accept-line' is executed. By default, history lines may be modified and retain individual undo lists across calls to `readline'. 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'. `show-all-if-unmodified' This alters the default behavior of the completion functions in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to `on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is `off'. `show-mode-in-prompt' If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs (`@'), vi command (`:'), or vi insertion (`+'). The default value is `off'. `skip-completed-text' If set to `on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the `e' in `Makefile' will result in `Makefile' rather than `Makefilefile', assuming there is a single possible completion. 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 need to find 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 on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon - that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a MACRO). 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', `M-DEL' is bound to the function `backward-kill-word', 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). A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. "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 again 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 ` <[> <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 `\"' <">, a double quotation mark `\'' <'>, a single quote or apostrophe 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 eight-bit character whose value is the octal value NNN (one to three digits) `\xHH' the eight-bit character whose value is the hexadecimal value HH (one or two hex 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\\": "\\"  File: rluserman.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File 1.3.2 Conditional Init Constructs --------------------------------- 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 a particular value. 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. For example, the following directive reads from `/etc/inputrc': $include /etc/inputrc  File: rluserman.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File 1.3.3 Sample Init File ---------------------- 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 system-wide 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  File: rluserman.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing 1.4 Bindable Readline Commands ============================== * Menu: * Commands For Moving:: Moving about the line. * Commands For History:: Getting at previous lines. * Commands For Text:: Commands for changing text. * Commands For Killing:: Commands for killing and yanking. * Numeric Arguments:: Specifying numeric arguments, repeat counts. * Commands For Completion:: Getting Readline to do the typing for you. * Keyboard Macros:: Saving and re-executing typed characters * Miscellaneous Commands:: Other miscellaneous commands. This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default. In the following descriptions, "point" refers to the current cursor position, and "mark" refers to a cursor position saved by the `set-mark' command. The text between the point and mark is referred to as the "region".  File: rluserman.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands 1.4.1 Commands For Moving ------------------------- `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 the current or 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.  File: rluserman.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands 1.4.2 Commands For Manipulating The History ------------------------------------------- `accept-line (Newline or Return)' Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with `add_history()'. If this line is a modified history line, the history line is restored to its original state. `previous-history (C-p)' Move `back' through the history list, fetching the previous command. `next-history (C-n)' Move `forward' through the history list, fetching the next command. `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 point. The search string must match at the beginning of a history line. 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. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. `history-substr-search-forward ()' Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. `history-substr-search-backward ()' Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. 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) at point. 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. Once the argument N is computed, the argument is extracted as if the `!N' history expansion had been specified. `yank-last-arg (M-. or M-_)' Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like `yank-nth-arg'. Successive calls to `yank-last-arg' move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the `!$' history expansion had been specified.  File: rluserman.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands 1.4.3 Commands For Changing Text -------------------------------- `end-of-file (usually C-d)' The character indicating end-of-file as set, for example, by `stty'. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. `delete-char (C-d)' Delete the character at point. If this function is bound to the same character as the tty EOF character, as `C-d' commonly is, see above for the effects. `backward-delete-char (Rubout)' Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. `forward-backward-delete-char ()' Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. `quoted-insert (C-q or 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-)' 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 have no effect. `transpose-words (M-t)' Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. `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. `overwrite-mode ()' Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only `emacs' mode; `vi' mode does overwrite differently. Each call to `readline()' starts in insert mode. In overwrite mode, characters bound to `self-insert' replace the text at point rather than pushing the text to the right. Characters bound to `backward-delete-char' replace the character before point with a space. By default, this command is unbound.  File: rluserman.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands 1.4.4 Killing And Yanking ------------------------- `kill-line (C-k)' Kill the text from point 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. `kill-whole-line ()' Kill all characters on the current line, no matter where point is. By default, this is unbound. `kill-word (M-d)' Kill from point 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-)' Kill the word behind point. Word boundaries are the same as `backward-word'. `unix-word-rubout (C-w)' Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. `unix-filename-rubout ()' Kill the word behind point, using white space and the slash character as the word boundaries. 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 in the current 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 point. `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'.  File: rluserman.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands 1.4.5 Specifying Numeric Arguments ---------------------------------- `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.  File: rluserman.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands 1.4.6 Letting Readline Type For You ----------------------------------- `complete ()' Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion. `possible-completions (M-?)' List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of `completion-display-width', the value of the environment variable `COLUMNS', or the screen width, in that order. `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 (subject to the setting of `bell-style') 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 , but is unbound by default. `menu-complete-backward ()' Identical to `menu-complete', but moves backward through the list of possible completions, as if `menu-complete' had been given a negative argument. `delete-char-or-list ()' Deletes the character under the cursor if not at the beginning or end of the line (like `delete-char'). If at the end of the line, behaves identically to `possible-completions'. This command is unbound by default.  File: rluserman.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands 1.4.7 Keyboard Macros --------------------- `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. `print-last-kbd-macro ()' Print the last keboard macro defined in a format suitable for the INPUTRC file.  File: rluserman.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands 1.4.8 Some Miscellaneous Commands --------------------------------- `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 ()' Metafy the next character typed. This is for keyboards without a meta key. Typing ` f' is equivalent to typing `M-f'. `undo (C-_ or 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 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. `skip-csi-sequence ()' Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. `insert-comment (M-#)' Without a numeric argument, the value of the `comment-begin' variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of `comment-begin', the value is inserted, otherwise the characters in `comment-begin' are deleted from the beginning of the line. In either case, 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 output. 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. `emacs-editing-mode (C-e)' When in `vi' command mode, this causes a switch to `emacs' editing mode. `vi-editing-mode (M-C-j)' When in `emacs' editing mode, this causes a switch to `vi' editing mode.  File: rluserman.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing 1.5 Readline vi Mode ==================== 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 standard. In order to switch interactively between `emacs' and `vi' editing modes, use the command `M-C-j' (bound to emacs-editing-mode when in `vi' mode and to vi-editing-mode in `emacs' 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 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.  File: rluserman.info, Node: GNU Free Documentation License, Prev: Command Line Editing, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  Tag Table: Node: Top950 Node: Command Line Editing1472 Node: Introduction and Notation2126 Node: Readline Interaction3750 Node: Readline Bare Essentials4943 Node: Readline Movement Commands6734 Node: Readline Killing Commands7701 Node: Readline Arguments9623 Node: Searching10669 Node: Readline Init File12822 Node: Readline Init File Syntax13977 Node: Conditional Init Constructs30683 Node: Sample Init File33218 Node: Bindable Readline Commands36338 Node: Commands For Moving37397 Node: Commands For History38260 Node: Commands For Text42416 Node: Commands For Killing45400 Node: Numeric Arguments47544 Node: Commands For Completion48685 Node: Keyboard Macros50656 Node: Miscellaneous Commands51346 Node: Readline vi Mode55204 Node: GNU Free Documentation License56118  End Tag Table readline-6.3/doc/readline.html0000664000043600000000000126075512276516307015212 0ustar chetwheel GNU Readline Library:
    ' . &t2h_anchor('', $href, $entry) . '  ' . $descr . "
    ' . $entry . '' . $descr . "
    [Top] [Contents] [Index] [ ? ]

    GNU Readline Library

    This document describes the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is http://www.gnu.org/software/readline/.

    1. Command Line Editing  GNU Readline User's Manual.
    2. Programming with GNU Readline  GNU Readline Programmer's Manual.
    A. GNU Free Documentation License  License for copying this manual.
    Concept Index  Index of concepts described in this manual.
    Function and Variable Index  Index of externally visible functions and variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Command Line Editing

    This chapter describes the basic features of the GNU command line editing interface.

    1.1 Introduction to Line Editing  Notation used in this text.
    1.2 Readline Interaction  The minimum set of commands for editing a line.
    1.3 Readline Init File  Customizing Readline from a user's view.
    1.4 Bindable Readline Commands  A description of most of the Readline commands available for binding
    1.5 Readline vi Mode  A short description of how to make Readline behave like the vi editor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Introduction to Line Editing

    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. The Meta key is labeled ALT on many keyboards. On keyboards with two keys labeled ALT (usually to either side of the space bar), the ALT on the left side is generally set to work as a Meta key. The ALT key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters.

    If you do not have a Meta or ALT key, or another key working as 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 (see section 1.3 Readline Init File). If your keyboard lacks a LFD key, typing C-j will produce the desired character. The RET key may be labeled Return or Enter on some keyboards.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Readline Interaction

    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 RET. You do not have to be at the end of the line to press RET; the entire line is accepted regardless of the location of the cursor within the line.

    1.2.1 Readline Bare Essentials  The least you need to know about Readline.
    1.2.2 Readline Movement Commands  Moving about the input line.
    1.2.3 Readline Killing Commands  How to delete text, and how to get it back!
    1.2.4 Readline Arguments  Giving numeric arguments to commands.
    1.2.5 Searching for Commands in the History  Searching through previous lines.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.1 Readline Bare Essentials

    In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character.

    Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type C-b to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with C-f.

    When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows.

    C-b
    Move back one character.
    C-f
    Move forward one character.
    DEL or Backspace
    Delete the character to the left of the cursor.
    C-d
    Delete the character underneath the cursor.
    Printing characters
    Insert the character into the line at the cursor.
    C-_ or C-x C-u
    Undo the last editing command. You can undo all the way back to an empty line.

    (Depending on your configuration, the Backspace key be set to delete the character to the left of the cursor and the DEL key set to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.2 Readline Movement Commands

    The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to C-b, C-f, C-d, and DEL. Here are some commands for moving more rapidly about the line.

    C-a
    Move to the start of the line.
    C-e
    Move to the end of the line.
    M-f
    Move forward a word, where a word is composed of letters and digits.
    M-b
    Move backward a word.
    C-l
    Clear the screen, reprinting the current line at the top.

    Notice how C-f moves forward a character, while M-f moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.3 Readline Killing Commands

    Killing text means to delete the text from the line, but to save it away for later use, usually by yanking (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)

    If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later.

    When you use a kill command, the text is saved in a kill-ring. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line.

    Here is the list of commands for killing text.

    C-k
    Kill the text from the current cursor position to the end of the line.

    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 those used by M-f.

    M-DEL
    Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by M-b.

    C-w
    Kill from the cursor to the previous whitespace. This is different than M-DEL because the word boundaries differ.

    Here is how to yank the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer.

    C-y
    Yank the most recently killed text back into the buffer at the cursor.

    M-y
    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or M-y.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.4 Readline Arguments

    You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type `M-- C-k'.

    The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (`-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the C-d command an argument of 10, you could type `M-1 0 C-d', which will delete the next ten characters on the input line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.5 Searching for Commands in the History

    Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: incremental and non-incremental.

    Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type C-r. Typing C-s searches forward through the history. The characters present in the value of the isearch-terminators variable are used to terminate an incremental search. If that variable has not been assigned a value, the ESC and C-J characters will terminate an incremental search. C-g will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line.

    To find other matching entries in the history list, type C-r or C-s as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a RET will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing.

    Readline remembers the last incremental search string. If two C-rs are typed without any intervening characters defining a new search string, any remembered search string is used.

    Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 Readline Init File

    Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an inputrc file, conventionally in his home directory. The name of this file is taken from the value of the environment variable INPUTRC. If that variable is unset, the default is `~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is `/etc/inputrc'.

    When a program which uses the Readline library starts up, the init file is read, and the key bindings are set.

    In addition, the C-x C-r command re-reads this init file, thus incorporating any changes that you might have made to it.

    1.3.1 Readline Init File Syntax  Syntax for the commands in the inputrc file.

    1.3.2 Conditional Init Constructs  Conditional key bindings in the inputrc file.

    1.3.3 Sample Init File  An example inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.1 Readline Init File Syntax

    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 1.3.2 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. The syntax is simple:

     
    set variable value
    

    Here, for example, is how to change from the default Emacs-like key binding to use vi line editing commands:

     
    set editing-mode vi
    

    Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored.

    Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, on (case-insensitive), or 1. Any other value results in the variable being set to off.

    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.

    bind-tty-special-chars
    If set to `on', Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents.

    colored-stats
    If set to `on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is `off'.

    comment-begin
    The string to insert at the beginning of the line when the insert-comment command is executed. The default value is "#".

    completion-display-width
    The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1.

    completion-ignore-case
    If set to `on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is `off'.

    completion-map-case
    If set to `on', and completion-ignore-case is enabled, Readline treats hyphens (`-') and underscores (`_') as equivalent when performing case-insensitive filename matching and completion.

    completion-prefix-display-length
    The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions.

    completion-query-items
    The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. 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. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. 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 prefixing 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'.

    echo-control-characters
    When set to `on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is `on'.

    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'.

    enable-meta-key
    When set to `on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is `on'.

    expand-tilde
    If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'.

    history-preserve-point
    If set to `on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with previous-history or next-history. The default is `off'.

    history-size
    Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited.

    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'.

    input-meta
    If set to `on', Readline will enable eight-bit input (it will not clear the eighth bit in 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.

    isearch-terminators
    The string of characters that should terminate an incremental search without subsequently executing the character as a command (see section 1.2.5 Searching for Commands in the History). If this variable has not been given a value, the characters ESC and C-J will terminate an incremental search.

    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-move, 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.

    keyseq-timeout
    Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (rl_instream by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is 500.

    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.

    mark-symlinked-directories
    If set to `on', completed names which are symbolic links to directories have a slash appended (subject to the value of mark-directories). The default is `off'.

    match-hidden-files
    This variable, when set to `on', causes Readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to `off', the leading `.' must be supplied by the user in the filename to be completed. This variable is `on' by default.

    menu-complete-display-prefix
    If set to `on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is `off'.

    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'.

    page-completions
    If set to `on', Readline uses an internal more-like pager to display a screenful of possible completions at a time. This variable is `on' by default.

    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'.

    revert-all-at-newline
    If set to `on', Readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. 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'.

    show-all-if-unmodified
    This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to `on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is `off'.

    show-mode-in-prompt
    If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs (`@'), vi command (`:'), or vi insertion (`+'). The default value is `off'.

    skip-completed-text
    If set to `on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the `e' in `Makefile' will result in `Makefile' rather than `Makefilefile', assuming there is a single possible completion. 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 need to find 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 on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon -- that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable.

    In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a macro).

    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, M-DEL is bound to the function backward-kill-word, 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).

    A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.

    "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 again 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
    \"
    ", a double quotation mark
    \'
    ', a single quote or apostrophe

    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 eight-bit character whose value is the octal value nnn (one to three digits)
    \xHH
    the eight-bit character whose value is the hexadecimal value HH (one or two hex 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\\": "\\"
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.2 Conditional Init Constructs

    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 a particular value. 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. For example, the following directive reads from `/etc/inputrc':
     
    $include /etc/inputrc
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.3 Sample Init File

    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 system-wide 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
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 Bindable Readline Commands

    1.4.1 Commands For Moving  Moving about the line.
    1.4.2 Commands For Manipulating The History  Getting at previous lines.
    1.4.3 Commands For Changing Text  Commands for changing text.
    1.4.4 Killing And Yanking  Commands for killing and yanking.
    1.4.5 Specifying Numeric Arguments  Specifying numeric arguments, repeat counts.
    1.4.6 Letting Readline Type For You  Getting Readline to do the typing for you.
    1.4.7 Keyboard Macros  Saving and re-executing typed characters
    1.4.8 Some Miscellaneous Commands  Other miscellaneous commands.

    This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default.

    In the following descriptions, point refers to the current cursor position, and mark refers to a cursor position saved by the set-mark command. The text between the point and mark is referred to as the region.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.1 Commands For Moving

    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 the current or 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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.2 Commands For Manipulating The History

    accept-line (Newline or Return)
    Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with add_history(). If this line is a modified history line, the history line is restored to its original state.

    previous-history (C-p)
    Move `back' through the history list, fetching the previous command.

    next-history (C-n)
    Move `forward' through the history list, fetching the next command.

    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 point. The search string must match at the beginning of a history line. 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. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-forward ()
    Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-backward ()
    Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. 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) at point. 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. Once the argument n is computed, the argument is extracted as if the `!n' history expansion had been specified.

    yank-last-arg (M-. or M-_)
    Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the `!$' history expansion had been specified.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.3 Commands For Changing Text

    end-of-file (usually C-d)
    The character indicating end-of-file as set, for example, by stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.

    delete-char (C-d)
    Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.

    backward-delete-char (Rubout)
    Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.

    forward-backward-delete-char ()
    Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key.

    quoted-insert (C-q or 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 have no effect.

    transpose-words (M-t)
    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line.

    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.

    overwrite-mode ()
    Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only emacs mode; vi mode does overwrite differently. Each call to readline() starts in insert mode.

    In overwrite mode, characters bound to self-insert replace the text at point rather than pushing the text to the right. Characters bound to backward-delete-char replace the character before point with a space.

    By default, this command is unbound.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.4 Killing And Yanking

    kill-line (C-k)
    Kill the text from point 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.

    kill-whole-line ()
    Kill all characters on the current line, no matter where point is. By default, this is unbound.

    kill-word (M-d)
    Kill from point 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 point. Word boundaries are the same as backward-word.

    unix-word-rubout (C-w)
    Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.

    unix-filename-rubout ()
    Kill the word behind point, using white space and the slash character as the word boundaries. 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 in the current 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 point.

    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.5 Specifying Numeric Arguments

    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.6 Letting Readline Type For You

    complete (TAB)
    Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion.

    possible-completions (M-?)
    List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    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 (subject to the setting of bell-style) 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.

    menu-complete-backward ()
    Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument.

    delete-char-or-list ()
    Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions. This command is unbound by default.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.7 Keyboard Macros

    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.

    print-last-kbd-macro ()
    Print the last keboard macro defined in a format suitable for the inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.8 Some Miscellaneous Commands

    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)
    Metafy the next character typed. This is for keyboards without a meta key. Typing `ESC f' is equivalent to typing M-f.

    undo (C-_ or 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 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.

    skip-csi-sequence ()
    Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.

    insert-comment (M-#)
    Without a numeric argument, the value of the comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of comment-begin, the value is inserted, otherwise the characters in comment-begin are deleted from the beginning of the line. In either case, 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 output. 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.

    emacs-editing-mode (C-e)
    When in vi command mode, this causes a switch to emacs editing mode.

    vi-editing-mode (M-C-j)
    When in emacs editing mode, this causes a switch to vi editing mode.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 Readline vi Mode

    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 standard.

    In order to switch interactively between emacs and vi editing modes, use the command M-C-j (bound to emacs-editing-mode when in vi mode and to vi-editing-mode in emacs 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 document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface.

    Copyright (C) 1988--2014 Free Software Foundation, Inc.

    Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare 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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Programming with GNU Readline

    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.

    2.1 Basic Behavior  Using the default behavior of Readline.
    2.2 Custom Functions  Adding your own functions to Readline.
    2.3 Readline Variables  Variables accessible to custom functions.
    2.4 Readline Convenience Functions  Functions which Readline supplies to aid in writing your own custom functions.
    2.5 Readline Signal Handling  How Readline behaves when it receives signals.
    2.6 Custom Completers  Supplanting or supplementing Readline's completion functions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Basic Behavior

    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 prompt and then reads and returns a single line of text from the user. If prompt is NULL or the empty string, no prompt is displayed. The line readline returns is allocated with malloc(); the caller should free() the line when it has finished with it. The declaration for readline in ANSI C is

     
    char *readline (const 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, rl_command_func_t *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 2.6 Custom Completers).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Custom Functions

    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.

    Before declaring any functions that customize Readline's behavior, or using any functionality Readline provides in other code, an application writer should include the file <readline/readline.h> in any file that uses Readline's features. Since some of the definitions in readline.h use the stdio library, the file <stdio.h> should be included before readline.h.

    readline.h defines a C preprocessor variable that should be treated as an integer, RL_READLINE_VERSION, which may be used to conditionally compile application code depending on the installed Readline version. The value is a hexadecimal encoding of the major and minor version numbers of the library, of the form 0xMMmm. MM is the two-digit major version number; mm is the two-digit minor version number. For Readline 4.2, for example, the value of RL_READLINE_VERSION would be 0x0402.

    2.2.1 Readline Typedefs  C declarations to make code readable.
    2.2.2 Writing a New Function  Variables and calling conventions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 Readline Typedefs

    For readability, we declare a number of new object types, all pointers to functions.

    The reason for declaring these new types is to make it easier to write code describing pointers to C functions with appropriately prototyped arguments and return values.

    For instance, say we want to declare a variable func as a pointer to a function which takes two int arguments and returns an int (this is the type of all of the Readline bindable functions). Instead of the classic C declaration

    int (*func)();

    or the ANSI-C style declaration

    int (*func)(int, int);

    we may write

    rl_command_func_t *func;

    The full list of function pointer types available is

    typedef int rl_command_func_t (int, int);

    typedef char *rl_compentry_func_t (const char *, int);

    typedef char **rl_completion_func_t (const char *, int, int);

    typedef char *rl_quote_func_t (char *, int, char *);

    typedef char *rl_dequote_func_t (char *, int);

    typedef int rl_compignore_func_t (char **);

    typedef void rl_compdisp_func_t (char **, int, int);

    typedef int rl_hook_func_t (void);

    typedef int rl_getc_func_t (FILE *);

    typedef int rl_linebuf_func_t (char *, int);

    typedef int rl_intfunc_t (int);
    #define rl_ivoidfunc_t rl_hook_func_t
    typedef int rl_icpfunc_t (char *);
    typedef int rl_icppfunc_t (char **);

    typedef void rl_voidfunc_t (void);
    typedef void rl_vintfunc_t (int);
    typedef void rl_vcpfunc_t (char *);
    typedef void rl_vcppfunc_t (char **);


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 Writing a New Function

    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

     
    int 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.

    A command function should return 0 if its action completes successfully, and a non-zero value if some error occurs. This is the convention obeyed by all of the builtin Readline bindable command functions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Readline Variables

    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 2.4.5 Allowing Undoing. The function rl_extend_line_buffer is available to increase the memory allocated to rl_line_buffer.

    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_num_chars_to_read
    Setting this to a positive value before calling readline() causes Readline to return after accepting that many characters, rather than reading up to a character bound to accept-line.

    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: int rl_dispatching
    Set to a non-zero value if a function is being called from a key binding; zero otherwise. Application functions can test this to discover whether they were called directly or by Readline's dispatching mechanism.

    Variable: int rl_erase_empty_line
    Setting this to a non-zero value causes Readline to completely erase the current line, including any prompt, any time a newline is typed as the only character on an otherwise-empty line. The cursor is moved to the beginning of the newly-blank line.

    Variable: char * rl_prompt
    The prompt Readline uses. This is set from the argument to readline(), and should not be assigned to directly. The rl_set_prompt() function (see section 2.4.6 Redisplay) may be used to modify the prompt string after calling readline().

    Variable: char * rl_display_prompt
    The string displayed as the prompt. This is usually identical to rl_prompt, but may be changed temporarily by functions that use the prompt string as a message area, such as incremental search.

    Variable: int rl_already_prompted
    If an application wishes to display the prompt itself, rather than have Readline do it the first time readline() is called, it should set this variable to a non-zero value after displaying the prompt. The prompt must also be passed as the argument to readline() so the redisplay functions can update the display properly. The calling application is responsible for managing the value; Readline never sets it.

    Variable: const char * rl_library_version
    The version number of this revision of the library.

    Variable: int rl_readline_version
    An integer encoding the current version of the library. The encoding is of the form 0xMMmm, where MM is the two-digit major version number, and mm is the two-digit minor version number. For example, for Readline-4.2, rl_readline_version would have the value 0x0402.

    Variable: int rl_gnu_readline_p
    Always set to 1, denoting that this is GNU readline rather than some emulation.

    Variable: const char * rl_terminal_name
    The terminal type, used for initialization. If not set by the application, Readline sets this to the value of the TERM environment variable the first time it is called.

    Variable: const 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 1.3.2 Conditional Init Constructs).

    Variable: FILE * rl_instream
    The stdio stream from which Readline reads input. If NULL, Readline defaults to stdin.

    Variable: FILE * rl_outstream
    The stdio stream to which Readline performs output. If NULL, Readline defaults to stdout.

    Variable: int rl_prefer_env_winsize
    If non-zero, Readline gives values found in the LINES and COLUMNS environment variables greater precedence than values fetched from the kernel when computing the screen dimensions.

    Variable: rl_command_func_t * rl_last_func
    The address of the last command function Readline executed. May be used to test whether or not a function is being executed twice in succession, for example.

    Variable: rl_hook_func_t * rl_startup_hook
    If non-zero, this is the address of a function to call just before readline prints the first prompt.

    Variable: rl_hook_func_t * rl_pre_input_hook
    If non-zero, this is the address of a function to call after the first prompt has been printed and just before readline starts reading input characters.

    Variable: rl_hook_func_t * rl_event_hook
    If non-zero, this is the address of a function to call periodically when Readline is waiting for terminal input. By default, this will be called at most ten times a second if there is no keyboard input.

    Variable: rl_getc_func_t * 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 2.4.8 Character Input). In general, an application that sets rl_getc_function should consider setting rl_input_available_hook as well.

    Variable: rl_hook_func_t * rl_signal_event_hook
    If non-zero, this is the address of a function to call if a read system call is interrupted when Readline is reading terminal input.

    Variable: rl_hook_func_t * rl_input_available_hook
    If non-zero, Readline will use this function's return value when it needs to determine whether or not there is available input on the current input source. The default hook checks rl_instream; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. This may use an application-specific timeout before returning a value; Readline uses the value passed to rl_set_keyboard_input_timeout() or the value of the user-settable keyseq-timeout variable. This is designed for use by applications using Readline's callback interface (see section 2.4.12 Alternate Interface), which may not use the traditional read(2) and file descriptor interface, or other applications using a different input mechanism. If an application uses an input mechanism or hook that can potentially exceed the value of keyseq-timeout, it should increase the timeout or set this hook appropriately even when not using the callback interface. In general, an application that sets rl_getc_function should consider setting rl_input_available_hook as well.

    Variable: rl_voidfunc_t * 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 2.4.6 Redisplay).

    Variable: rl_vintfunc_t * rl_prep_term_function
    If non-zero, Readline will call indirectly through this pointer to initialize the terminal. The function takes a single argument, an int flag that says whether or not to use eight-bit characters. By default, this is set to rl_prep_terminal (see section 2.4.9 Terminal Management).

    Variable: rl_voidfunc_t * rl_deprep_term_function
    If non-zero, Readline will call indirectly through this pointer to reset the terminal. This function should undo the effects of rl_prep_term_function. By default, this is set to rl_deprep_terminal (see section 2.4.9 Terminal Management).

    Variable: Keymap rl_executing_keymap
    This variable is set to the keymap (see section 2.4.2 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 2.4.2 Selecting a Keymap) in which the last key binding occurred.

    Variable: char * rl_executing_macro
    This variable is set to the text of any currently-executing macro.

    Variable: int rl_executing_key
    The key that caused the dispatch to the currently-executing Readline function.

    Variable: char * rl_executing_keyseq
    The full key sequence that caused the dispatch to the currently-executing Readline function.

    Variable: int rl_key_sequence_length
    The number of characters in rl_executing_keyseq.

    Variable: int rl_readline_state
    A variable with bit values that encapsulate the current Readline state. A bit is set with the RL_SETSTATE macro, and unset with the RL_UNSETSTATE macro. Use the RL_ISSTATE macro to test whether a particular state bit is set. Current state bits include:

    RL_STATE_NONE
    Readline has not yet been called, nor has it begun to initialize.
    RL_STATE_INITIALIZING
    Readline is initializing its internal data structures.
    RL_STATE_INITIALIZED
    Readline has completed its initialization.
    RL_STATE_TERMPREPPED
    Readline has modified the terminal modes to do its own input and redisplay.
    RL_STATE_READCMD
    Readline is reading a command from the keyboard.
    RL_STATE_METANEXT
    Readline is reading more input after reading the meta-prefix character.
    RL_STATE_DISPATCHING
    Readline is dispatching to a command.
    RL_STATE_MOREINPUT
    Readline is reading more input while executing an editing command.
    RL_STATE_ISEARCH
    Readline is performing an incremental history search.
    RL_STATE_NSEARCH
    Readline is performing a non-incremental history search.
    RL_STATE_SEARCH
    Readline is searching backward or forward through the history for a string.
    RL_STATE_NUMERICARG
    Readline is reading a numeric argument.
    RL_STATE_MACROINPUT
    Readline is currently getting its input from a previously-defined keyboard macro.
    RL_STATE_MACRODEF
    Readline is currently reading characters defining a keyboard macro.
    RL_STATE_OVERWRITE
    Readline is in overwrite mode.
    RL_STATE_COMPLETING
    Readline is performing word completion.
    RL_STATE_SIGHANDLER
    Readline is currently executing the readline signal handler.
    RL_STATE_UNDOING
    Readline is performing an undo.
    RL_STATE_INPUTPENDING
    Readline has input pending due to a call to rl_execute_next().
    RL_STATE_TTYCSAVED
    Readline has saved the values of the terminal's special characters.
    RL_STATE_CALLBACK
    Readline is currently using the alternate (callback) interface (see section 2.4.12 Alternate Interface).
    RL_STATE_VIMOTION
    Readline is reading the argument to a vi-mode "motion" command.
    RL_STATE_MULTIKEY
    Readline is reading a multiple-keystroke command.
    RL_STATE_VICMDONCE
    Readline has entered vi command (movement) mode at least one time during the current call to readline().
    RL_STATE_DONE
    Readline has read a key sequence bound to accept-line and is about to return the line to the caller.

    Variable: int rl_explicit_arg
    Set to a non-zero value if an explicit numeric argument was specified by the user. Only valid in a bindable command function.

    Variable: int rl_numeric_arg
    Set to the value of any numeric argument explicitly specified by the user before executing the current Readline function. Only valid in a bindable command function.

    Variable: int rl_editing_mode
    Set to a value denoting Readline's current editing mode. A value of 1 means Readline is currently in emacs mode; 0 means that vi mode is active.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 Readline Convenience Functions

    2.4.1 Naming a Function  How to give a function you write a name.
    2.4.2 Selecting a Keymap  Making keymaps.
    2.4.3 Binding Keys  Changing Keymaps.
    2.4.4 Associating Function Names and Bindings  Translate function names to key sequences.
    2.4.5 Allowing Undoing  How to make your functions undoable.
    2.4.6 Redisplay  Functions to control line display.
    2.4.7 Modifying Text  Functions to modify rl_line_buffer.
    2.4.8 Character Input  Functions to read keyboard input.
    2.4.9 Terminal Management  Functions to manage terminal settings.
    2.4.10 Utility Functions  Generally useful functions and hooks.
    2.4.11 Miscellaneous Functions  Functions that don't fall into any category.
    2.4.12 Alternate Interface  Using Readline in a `callback' fashion.
    2.4.13 A Readline Example  An example Readline function.
    2.4.14 Alternate Interface Example  An example program using the alternate interface.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Naming a Function

    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 (const char *name, rl_command_func_t *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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.2 Selecting a Keymap

    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 (void)
    Returns a new, empty keymap. The space for the keymap is allocated with malloc(); the caller should free it by calling rl_free_keymap() when done.

    Function: Keymap rl_copy_keymap (Keymap map)
    Return a new keymap which is a copy of map.

    Function: Keymap rl_make_keymap (void)
    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 the data in keymap. The caller should free keymap.

    Function: void rl_free_keymap (Keymap keymap)
    Free all storage associated with keymap. This calls rl_discard_keymap to free subordindate keymaps and macros.

    Readline has several internal keymaps. These functions allow you to change which keymap is active.

    Function: Keymap rl_get_keymap (void)
    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 (const char *name)
    Return the keymap matching name. name is one which would be supplied in a set keymap inputrc line (see section 1.3 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 (see section 1.3 Readline Init File).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.3 Binding Keys

    Key sequences are associate 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.

    Since readline() installs a set of default key bindings the first time it is called, there is always the danger that a custom binding installed before the first call to readline() will be overridden. An alternate mechanism is to install custom key bindings in an initialization function assigned to the rl_startup_hook variable (see section 2.3 Readline Variables).

    These functions manage key bindings.

    Function: int rl_bind_key (int key, rl_command_func_t *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, rl_command_func_t *function, Keymap map)
    Bind key to function in map. Returns non-zero in the case of an invalid key.

    Function: int rl_bind_key_if_unbound (int key, rl_command_func_t *function)
    Binds key to function if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid key or if key is already bound.

    Function: int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map)
    Binds key to function if it is not already bound in map. Returns non-zero in the case of an invalid key or if key is already bound.

    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 (rl_command_func_t *function, Keymap map)
    Unbind all keys that execute function in map.

    Function: int rl_unbind_command_in_map (const char *command, Keymap map)
    Unbind all keys that are bound to command in map.

    Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function)
    Bind the key sequence represented by the string keyseq to the function function, beginning in the current keymap. This makes new keymaps as necessary. The return value is non-zero if keyseq is invalid.

    Function: int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
    Bind the key sequence represented by the string keyseq to the function function. This makes new keymaps as necessary. Initial bindings are performed in map. The return value is non-zero if keyseq is invalid.

    Function: int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)
    Equivalent to rl_bind_keyseq_in_map.

    Function: int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function)
    Binds keyseq to function if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid keyseq or if keyseq is already bound.

    Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
    Binds keyseq to function if it is not already bound in map. Returns non-zero in the case of an invalid keyseq or if keyseq is already bound.

    Function: int rl_generic_bind (int type, const 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 (see section 1.3 Readline Init File).

    Function: int rl_read_init_file (const char *filename)
    Read keybindings and variable assignments from filename (see section 1.3 Readline Init File).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.4 Associating Function Names and Bindings

    These functions allow you to find out what keys invoke named functions and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function.

    Function: rl_command_func_t * rl_named_function (const char *name)
    Return the function with name name.

    Function: rl_command_func_t * rl_function_of_keyseq (const 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 the int variable it points to (one of ISFUNC, ISKMAP, or ISMACR).

    Function: char ** rl_invoking_keyseqs (rl_command_func_t *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 (rl_command_func_t *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 (void)
    Print the names of all bindable Readline functions to rl_outstream.

    Function: const char ** rl_funmap_names (void)
    Return a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free the array, but not the pointers, using free or rl_free when you are done.

    Function: int rl_add_funmap_entry (const char *name, rl_command_func_t *function)
    Add name to the list of bindable Readline command names, and make function the function to be called when name is invoked.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.5 Allowing Undoing

    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.

    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 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 (void)
    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 (void)
    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 rl_free_undo_list (void)
    Free the existing undo list.

    Function: int rl_do_undo (void)
    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.6 Redisplay

    Function: void rl_redisplay (void)
    Change what's displayed on the screen to reflect the current contents of rl_line_buffer.

    Function: int rl_forced_update_display (void)
    Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct.

    Function: int rl_on_new_line (void)
    Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline.

    Function: int rl_on_new_line_with_prompt (void)
    Tell the update functions that we have moved onto a new line, with rl_prompt already displayed. This could be used by applications that want to output the prompt string themselves, but still need Readline to know the prompt string length for redisplay. It should be used after setting rl_already_prompted.

    Function: int rl_reset_line_state (void)
    Reset the display state to a clean state and redisplay the current line starting on a new line.

    Function: int rl_crlf (void)
    Move the cursor to the start of the next screen line.

    Function: int rl_show_char (int c)
    Display character c on rl_outstream. If Readline has not been set to display meta characters directly, this will convert meta characters to a meta-prefixed key sequence. This is intended for use by applications which wish to do their own redisplay.

    Function: int rl_message (const char *, ...)
    The arguments are a format string as would be supplied to printf, possibly containing conversion specifications such as `%d', and any additional arguments necessary to satisfy the conversion specifications. The resulting string is displayed in the echo area. The echo area is also used to display numeric arguments and search strings. You should call rl_save_prompt to save the prompt information before calling this function.

    Function: int rl_clear_message (void)
    Clear the message in the echo area. If the prompt was saved with a call to rl_save_prompt before the last call to rl_message, call rl_restore_prompt before calling this function.

    Function: void rl_save_prompt (void)
    Save the local Readline prompt display state in preparation for displaying a new message in the message area with rl_message().

    Function: void rl_restore_prompt (void)
    Restore the local Readline prompt display state saved by the most recent call to rl_save_prompt. if rl_save_prompt was called to save the prompt before a call to rl_message, this function should be called before the corresponding call to rl_clear_message.

    Function: int rl_expand_prompt (char *prompt)
    Expand any special character sequences in prompt and set up the local Readline prompt redisplay variables. This function is called by readline(). It may also be called to expand the primary prompt if the rl_on_new_line_with_prompt() function or rl_already_prompted variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE (declared in `readline.h'. This may be used to embed terminal-specific escape sequences in prompts.

    Function: int rl_set_prompt (const char *prompt)
    Make Readline use prompt for subsequent redisplay. This calls rl_expand_prompt() to expand the prompt and sets rl_prompt to the result.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.7 Modifying Text

    Function: int rl_insert_text (const char *text)
    Insert text into the line at the current cursor position. Returns the number of characters inserted.

    Function: int rl_delete_text (int start, int end)
    Delete the text between start and end in the current line. Returns the number of characters deleted.

    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_push_macro_input (char *macro)
    Cause macro to be inserted into the line, as if it had been invoked by a key bound to a macro. Not especially useful; use rl_insert_text() instead.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.8 Character Input

    Function: int rl_read_key (void)
    Return the next character available from Readline's current input stream. This handles input inserted into the input stream via rl_pending_input (see section 2.3 Readline Variables) and rl_stuff_char(), macros, and characters read from the keyboard. While waiting for input, this function will call any function assigned to the rl_event_hook variable.

    Function: int rl_getc (FILE *stream)
    Return the next character available from stream, which is assumed to be 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(). Up to 512 characters may be pushed back. rl_stuff_char returns 1 if the character was successfully inserted; 0 otherwise.

    Function: int rl_execute_next (int c)
    Make c be the next command to be executed when rl_read_key() is called. This sets rl_pending_input.

    Function: int rl_clear_pending_input (void)
    Unset rl_pending_input, effectively negating the effect of any previous call to rl_execute_next(). This works only if the pending input has not already been read with rl_read_key().

    Function: int rl_set_keyboard_input_timeout (int u)
    While waiting for keyboard input in rl_read_key(), Readline will wait for u microseconds for input before calling any function assigned to rl_event_hook. u must be greater than or equal to zero (a zero-length timeout is equivalent to a poll). The default waiting period is one-tenth of a second. Returns the old timeout value.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.9 Terminal Management

    Function: void rl_prep_terminal (int meta_flag)
    Modify the terminal settings for Readline's use, so readline() can read a single character at a time from the keyboard. The meta_flag argument should be non-zero if Readline should read eight-bit input.

    Function: void rl_deprep_terminal (void)
    Undo the effects of rl_prep_terminal(), leaving the terminal in the state in which it was before the most recent call to rl_prep_terminal().

    Function: void rl_tty_set_default_bindings (Keymap kmap)
    Read the operating system's terminal editing characters (as would be displayed by stty) to their Readline equivalents. The bindings are performed in kmap.

    Function: void rl_tty_unset_default_bindings (Keymap kmap)
    Reset the bindings manipulated by rl_tty_set_default_bindings so that the terminal editing characters are bound to rl_insert. The bindings are performed in kmap.

    Function: int rl_reset_terminal (const char *terminal_name)
    Reinitialize Readline's idea of the terminal settings using terminal_name as the terminal type (e.g., vt100). If terminal_name is NULL, the value of the TERM environment variable is used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.10 Utility Functions

    Function: int rl_save_state (struct readline_state *sp)
    Save a snapshot of Readline's internal state to sp. The contents of the readline_state structure are documented in `readline.h'. The caller is responsible for allocating the structure.

    Function: int rl_restore_state (struct readline_state *sp)
    Restore Readline's internal state to that stored in sp, which must have been saved by a call to rl_save_state. The contents of the readline_state structure are documented in `readline.h'. The caller is responsible for freeing the structure.

    Function: void rl_free (void *mem)
    Deallocate the memory pointed to by mem. mem must have been allocated by malloc.

    Function: void rl_replace_line (const char *text, int clear_undo)
    Replace the contents of rl_line_buffer with text. The point and mark are preserved, if possible. If clear_undo is non-zero, the undo list associated with the current line is cleared.

    Function: void 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 (void)
    Initialize or re-initialize Readline's internal state. It's not strictly necessary to call this; readline() calls it before reading any input.

    Function: int rl_ding (void)
    Ring the terminal bell, obeying the setting of bell-style.

    Function: int rl_alphabetic (int c)
    Return 1 if c is an alphabetic character.

    Function: void rl_display_match_list (char **matches, int len, int max)
    A convenience function for displaying a list of strings in columnar format on Readline's output stream. matches is the list of strings, in argv format, such as a list of completion matches. len is the number of strings in matches, and max is the length of the longest string in matches. This function uses the setting of print-completions-horizontally to select how the matches are displayed (see section 1.3.1 Readline Init File Syntax). When displaying completions, this function sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    The following are implemented as macros, defined in chardefs.h. Applications should refrain from using them.

    Function: int _rl_uppercase_p (int c)
    Return 1 if c is an uppercase alphabetic character.

    Function: int _rl_lowercase_p (int c)
    Return 1 if c is a lowercase alphabetic character.

    Function: int _rl_digit_p (int c)
    Return 1 if c is a numeric character.

    Function: int _rl_to_upper (int c)
    If c is a lowercase alphabetic character, return the corresponding uppercase character.

    Function: int _rl_to_lower (int c)
    If c is an uppercase alphabetic character, return the corresponding lowercase character.

    Function: int _rl_digit_value (int c)
    If c is a number, return the value it represents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.11 Miscellaneous Functions

    Function: int rl_macro_bind (const char *keyseq, const char *macro, Keymap map)
    Bind the key sequence keyseq to invoke the macro macro. The binding is performed in map. When keyseq is invoked, the macro will be inserted into the line. This function is deprecated; use rl_generic_bind() instead.

    Function: void rl_macro_dumper (int readable)
    Print the key sequences bound to macros and their values, using the current keymap, 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: int rl_variable_bind (const char *variable, const char *value)
    Make the Readline variable variable have value. This behaves as if the readline command `set variable value' had been executed in an inputrc file (see section 1.3.1 Readline Init File Syntax).

    Function: char * rl_variable_value (const char *variable)
    Return a string representing the value of the Readline variable variable. For boolean variables, this string is either `on' or `off'.

    Function: void rl_variable_dumper (int readable)
    Print the readline variable names and their current values 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: int rl_set_paren_blink_timeout (int u)
    Set the time interval (in microseconds) that Readline waits when showing a balancing character when blink-matching-paren has been enabled.

    Function: char * rl_get_termcap (const char *cap)
    Retrieve the string value of the termcap capability cap. Readline fetches the termcap entry for the current terminal name and uses those capabilities to move around the screen line and perform other terminal-specific operations, like erasing a line. Readline does not use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses.

    Function: void rl_clear_history (void)
    Clear the history list by deleting all of the entries, in the same manner as the History library's clear_history() function. This differs from clear_history because it frees private data Readline saves in the history list.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.12 Alternate Interface

    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 accommodate 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 (const char *prompt, rl_vcpfunc_t *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 handler function to call when a complete line of input has been entered. The handler function receives the text of the line as an argument.

    Function: void rl_callback_read_char (void)
    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 installed by rl_callback_handler_install to process the line. Before calling the lhandler function, the terminal settings are reset to the values they had before calling rl_callback_handler_install. If the lhandler function returns, and the line handler remains installed, the terminal settings are modified for Readline's use again. EOF is indicated by calling lhandler with a NULL line.

    Function: void rl_callback_handler_remove (void)
    Restore the terminal to its initial state and remove the line handler. This may be called from within a callback as well as independently. If the lhandler installed by rl_callback_handler_install does not exit the program, either this function or the function referred to by the value of rl_deprep_term_function should be called before the program exits to reset the terminal settings.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.13 A Readline Example

    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 (_rl_uppercase_p (rl_line_buffer[i]))
            rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
          else if (_rl_lowercase_p (rl_line_buffer[i]))
            rl_line_buffer[i] = _rl_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);
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.14 Alternate Interface Example

    Here is a complete program that illustrates Readline's alternate interface. It reads lines from the terminal and displays them, providing the standard history and TAB completion functions. It understands the EOF character or "exit" to exit the program.

     
    /* Standard include files. stdio.h is required. */
    #include <stdlib.h>
    #include <unistd.h>
    
    /* Used for select(2) */
    #include <sys/types.h>
    #include <sys/select.h>
    
    #include <stdio.h>
    
    /* Standard readline include files. */
    #include <readline/readline.h>
    #include <readline/history.h>
    
    static void cb_linehandler (char *);
    
    int running;
    const char *prompt = "rltest$ ";
    
    /* Callback function called for each line when accept-line executed, EOF
       seen, or EOF character read.  This sets a flag and returns; it could
       also call exit(3). */
    static void
    cb_linehandler (char *line)
    {
      /* Can use ^D (stty eof) or `exit' to exit. */
      if (line == NULL || strcmp (line, "exit") == 0)
        {
          if (line == 0)
            printf ("\n");
          printf ("exit\n");
          /* This function needs to be called to reset the terminal settings,
             and calling it from the line handler keeps one extra prompt from
             being displayed. */
          rl_callback_handler_remove ();
    
          running = 0;
        }
      else
        {
          if (*line)
            add_history (line);
          printf ("input line: %s\n", line);
          free (line);
        }
    }
    
    int
    main (int c, char **v)
    {
      fd_set fds;
      int r;
    
      /* Install the line handler. */
      rl_callback_handler_install (prompt, cb_linehandler);
    
      /* Enter a simple event loop.  This waits until something is available
         to read on readline's input stream (defaults to standard input) and
         calls the builtin character read callback to read it.  It does not
         have to modify the user's terminal settings. */
      running = 1;
      while (running)
        {
          FD_ZERO (&fds);
          FD_SET (fileno (rl_instream), &fds);    
    
          r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
          if (r < 0)
            {
              perror ("rltest: select");
              rl_callback_handler_remove ();
              break;
            }
    
          if (FD_ISSET (fileno (rl_instream), &fds))
            rl_callback_read_char ();
        }
    
      printf ("rltest: Event loop has exited\n");
      return 0;
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 Readline Signal Handling

    Signals are asynchronous events sent to a process by the Unix kernel, sometimes on behalf of another process. They are intended to indicate exceptional events, like a user pressing the interrupt key on his terminal, or a network connection being broken. There is a class of signals that can be sent to the process currently reading input from the keyboard. Since Readline changes the terminal attributes when it is called, it needs to perform special processing when such a signal is received in order to restore the terminal to a sane state, or provide application writers with functions to do so manually.

    Readline contains an internal signal handler that is installed for a number of signals (SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU). When one of these signals is received, the signal handler will reset the terminal attributes to those that were in effect before readline() was called, reset the signal handling to what it was before readline() was called, and resend the signal to the calling application. If and when the calling application's signal handler returns, Readline will reinitialize the terminal and continue to accept input. When a SIGINT is received, the Readline signal handler performs some additional work, which will cause any partially-entered line to be aborted (see the description of rl_free_line_state() below).

    There is an additional Readline signal handler, for SIGWINCH, which the kernel sends to a process whenever the terminal's size changes (for example, if a user resizes an xterm). The Readline SIGWINCH handler updates Readline's internal screen size information, and then calls any SIGWINCH signal handler the calling application has installed. Readline calls the application's SIGWINCH signal handler without resetting the terminal to its original state. If the application's signal handler does more than update its idea of the terminal size and return (for example, a longjmp back to a main processing loop), it must call rl_cleanup_after_signal() (described below), to restore the terminal state.

    Readline provides two variables that allow application writers to control whether or not it will catch certain signals and act on them when they are received. It is important that applications change the values of these variables only when calling readline(), not in a signal handler, so Readline's internal signal state is not corrupted.

    Variable: int rl_catch_signals
    If this variable is non-zero, Readline will install signal handlers for SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU.

    The default value of rl_catch_signals is 1.

    Variable: int rl_catch_sigwinch
    If this variable is set to a non-zero value, Readline will install a signal handler for SIGWINCH.

    The default value of rl_catch_sigwinch is 1.

    Variable: int rl_change_environment
    If this variable is set to a non-zero value, and Readline is handling SIGWINCH, Readline will modify the LINES and COLUMNS environment variables upon receipt of a SIGWINCH

    The default value of rl_change_environment is 1.

    If an application does not wish to have Readline catch any signals, or to handle signals other than those Readline catches (SIGHUP, for example), Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal.

    Function: void rl_cleanup_after_signal (void)
    This function will reset the state of the terminal to what it was before readline() was called, and remove the Readline signal handlers for all signals, depending on the values of rl_catch_signals and rl_catch_sigwinch.

    Function: void rl_free_line_state (void)
    This will free any partial state associated with the current input line (undo information, any partial history entry, any partially-entered keyboard macro, and any partially-entered numeric argument). This should be called before rl_cleanup_after_signal(). The Readline signal handler for SIGINT calls this to abort the current input line.

    Function: void rl_reset_after_signal (void)
    This will reinitialize the terminal and reinstall any Readline signal handlers, depending on the values of rl_catch_signals and rl_catch_sigwinch.

    If an application does not wish Readline to catch SIGWINCH, it may call rl_resize_terminal() or rl_set_screen_size() to force Readline to update its idea of the terminal size when a SIGWINCH is received.

    Function: void rl_echo_signal_char (int sig)
    If an application wishes to install its own signal handlers, but still have readline display characters that generate signals, calling this function with sig set to SIGINT, SIGQUIT, or SIGTSTP will display the character generating that signal.

    Function: void rl_resize_terminal (void)
    Update Readline's internal screen size by reading values from the kernel.

    Function: void rl_set_screen_size (int rows, int cols)
    Set Readline's idea of the terminal size to rows rows and cols columns. If either rows or columns is less than or equal to 0, Readline's idea of that terminal dimension is unchanged.

    If an application does not want to install a SIGWINCH handler, but is still interested in the screen dimensions, Readline's idea of the screen size may be queried.

    Function: void rl_get_screen_size (int *rows, int *cols)
    Return Readline's idea of the terminal's size in the variables pointed to by the arguments.

    Function: void rl_reset_screen_size (void)
    Cause Readline to reobtain the screen size and recalculate its dimensions.

    The following functions install and remove Readline's signal handlers.

    Function: int rl_set_signals (void)
    Install Readline's signal handler for SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGALRM, SIGTSTP, SIGTTIN, SIGTTOU, and SIGWINCH, depending on the values of rl_catch_signals and rl_catch_sigwinch.

    Function: int rl_clear_signals (void)
    Remove all of the Readline signal handlers installed by rl_set_signals().


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 Custom Completers

    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.

    2.6.1 How Completing Works  The logic used to do completion.
    2.6.2 Completion Functions  Functions provided by Readline.
    2.6.3 Completion Variables  Variables which control completion.
    2.6.4 A Short Completion Example  An example of writing completer subroutines.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.1 How Completing Works

    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:

    1. The user-interface function rl_complete(). This function is called with the same arguments as other bindable Readline functions: count and invoking_key. It isolates the word to be completed and calls rl_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.

    2. The internal function rl_completion_matches() uses an application-supplied generator function to generate the list of possible matches, and then returns the array of these matches. The caller should place the address of its generator function in rl_completion_entry_function.

    3. The generator function is called repeatedly from rl_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. The generator function returns (char *)NULL to inform rl_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. Such a generator function is referred to as an application-specific completion function.

    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 rl_completion_matches()). The default is to do filename completion.

    Variable: rl_compentry_func_t * rl_completion_entry_function
    This is a pointer to the generator function for rl_completion_matches(). If the value of rl_completion_entry_function is NULL then the default filename generator function, rl_filename_completion_function(), is used. An application-specific completion function is a function whose address is assigned to rl_completion_entry_function and whose return values are used to generate possible completions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.2 Completion Functions

    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. `@' is similar to `!', but possible completions are not listed if the possible completions share a common prefix.

    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 rl_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: int rl_completion_mode (rl_command_func_t *cfunc)
    Returns the appropriate value to pass to rl_complete_internal() depending on whether cfunc was called twice in succession and the values of the show-all-if-ambiguous and show-all-if-unmodified variables. Application-specific completion functions may use this function to present the same interface as rl_complete().

    Function: char ** rl_completion_matches (const char *text, rl_compentry_func_t *entry_func)
    Returns an array of strings which is a list of completions for text. If there are no completions, returns 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 * rl_filename_completion_function (const char *text, int state)
    A generator function for filename completion in the general case. text is a partial filename. The Bash source is a useful reference for writing application-specific completion functions (the Bash completion functions call this and other Readline functions).

    Function: char * rl_username_completion_function (const 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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.3 Completion Variables

    Variable: rl_compentry_func_t * rl_completion_entry_function
    A pointer to the generator function for rl_completion_matches(). NULL means to use rl_filename_completion_function(), the default filename completer.

    Variable: rl_completion_func_t * 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 defining the boundaries of text, which is a character string. 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. If this function sets the rl_attempted_completion_over variable to a non-zero value, Readline will not perform its default completion even if this function returns no matches.

    Variable: rl_quote_func_t * 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: rl_dequote_func_t * 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: rl_linebuf_func_t * 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: rl_compignore_func_t * 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: rl_icppfunc_t * rl_directory_completion_hook
    This function, if defined, is allowed to modify the directory portion of filenames Readline completes. It could be used to expand symbolic links or shell variables in pathnames. It is called with the address of a string (the current directory name) as an argument, and may modify that string. If the string is replaced with a new string, the old value should be freed. Any modified directory name should have a trailing slash. The modified value will be used as part of the completion, replacing the directory portion of the pathname the user typed. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to opendir().

    The directory completion hook returns an integer that should be non-zero if the function modifies its directory argument. The function should not modify the directory argument if it returns 0.

    Variable: rl_icppfunc_t * rl_directory_rewrite_hook;
    If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike rl_directory_completion_hook, it only modifies the directory name used in opendir, not what is displayed when the possible completions are printed or inserted. It is called before rl_directory_completion_hook. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to opendir().

    The directory rewrite hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0.

    Variable: rl_icppfunc_t * rl_filename_stat_hook
    If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. This function modifies its filename name argument, and the modified value is passed to stat() to determine the file's type and characteristics. This function does not need to remove quote characters from the filename.

    The stat hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0.

    Variable: rl_dequote_func_t * rl_filename_rewrite_hook
    If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. The function takes two arguments: fname, the filename to be converted, and fnlen, its length in bytes. It must either return its first argument (if no conversion takes place) or the converted filename in newly-allocated memory. The converted form is used to compare against the word to be completed, and, if it matches, is added to the list of matches. Readline will free the allocated string.

    Variable: rl_compdisp_func_t * rl_completion_display_matches_hook
    If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called in lieu of Readline displaying the list. It takes three arguments: (char **matches, int num_matches, int max_length) where matches is the array of matching strings, num_matches is the number of strings in that array, and max_length is the length of the longest string in that array. Readline provides a convenience function, rl_display_match_list, that takes care of doing the display to Readline's output stream. That function may be called from this hook.

    Variable: const 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: " \t\n\"\\'`@$><=;|&{(".

    Variable: const char * rl_basic_quote_characters
    A list of quote characters which can cause a word break.

    Variable: const 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: rl_cpvfunc_t * rl_completion_word_break_hook
    If non-zero, this is the address of a function to call when Readline is deciding where to separate words for word completion. It should return a character string like rl_completer_word_break_characters to be used to perform the current completion. The function may choose to set rl_completer_word_break_characters itself. If the function returns NULL, rl_completer_word_break_characters is used.

    Variable: const char * rl_completer_quote_characters
    A 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: const 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: const 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_query_items
    Up to this many items will be displayed in response to a possible-completions call. After that, readline asks the user if she is sure she wants to see them all. The default value is 100. A negative value indicates that Readline should never ask the user.

    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 application-specific completion functions to provide the "most sensible word separator character" according to an application-specific command line syntax specification.

    Variable: int rl_completion_suppress_append
    If non-zero, rl_completion_append_character is not appended to matches at the end of the command line, as described above. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function.

    Variable: int rl_completion_quote_character
    When Readline is completing quoted text, as delimited by one of the characters in rl_completer_quote_characters, it sets this variable to the quoting character found. This is set before any application-specific completion function is called.

    Variable: int rl_completion_suppress_quote
    If non-zero, Readline does not append a matching quote character when performing completion on a quoted string. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function.

    Variable: int rl_completion_found_quote
    When Readline is completing quoted text, it sets this variable to a non-zero value if the word being completed contains or is delimited by any quoting characters, including backslashes. This is set before any application-specific completion function is called.

    Variable: int rl_completion_mark_symlink_dirs
    If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the user-settable mark-directories variable. This variable exists so that application-specific completion functions can override the user's global preference (set via the mark-symlinked-directories Readline variable) if appropriate. This variable is set to the user's preference before any application-specific completion function is called, so unless that function modifies the value, the user's preferences are honored.

    Variable: int rl_ignore_completion_duplicates
    If non-zero, then duplicates in the matches are removed. The 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 when completion is attempted, and can only be changed within an application-specific completion function. If it is set to a non-zero value by such a function, directory names have a slash appended and Readline attempts to quote completed filenames if they contain any characters in rl_filename_quote_characters and rl_filename_quoting_desired is set to a non-zero value.

    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 when completion is attempted, and can only be changed within an application-specific completion function. The quoting is effected via a call to the function pointed to by rl_filename_quoting_function.

    Variable: int rl_attempted_completion_over
    If an application-specific completion function assigned to rl_attempted_completion_function sets this variable to a non-zero value, Readline will not perform its default filename completion even if the application's completion function returns no matches. It should be set only by an application's completion function.

    Variable: int rl_sort_completion_matches
    If an application sets this variable to 0, Readline will not sort the list of completions (which implies that it cannot remove any duplicate completions). The default value is 1, which means that Readline will sort the completions and, depending on the value of rl_ignore_completion_duplicates, will attempt to remove duplicate matches.

    Variable: int rl_completion_type
    Set to a character describing the type of completion Readline is currently attempting; see the description of rl_complete_internal() (see section 2.6.2 Completion Functions) for the list of characters. This is set to the appropriate value before any application-specific completion function is called, allowing such functions to present the same interface as rl_complete().

    Variable: int rl_completion_invoking_key
    Set to the final character in the key sequence that invoked one of the completion functions that call rl_complete_internal(). This is set to the appropriate value before any application-specific completion function is called.

    Variable: int rl_inhibit_completion
    If this variable is non-zero, completion is inhibited. The completion character will be inserted as any other bound to self-insert.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.4 A Short Completion Example

    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. */
    
    #ifdef HAVE_CONFIG_H
    #  include <config.h>
    #endif
    
    #include <sys/types.h>
    #ifdef HAVE_SYS_FILE_H
    #  include <sys/file.h>
    #endif
    #include <sys/stat.h>
    
    #ifdef HAVE_UNISTD_H
    #  include <unistd.h>
    #endif
    
    #include <fcntl.h>
    #include <stdio.h>
    #include <errno.h>
    
    #if defined (HAVE_STRING_H)
    #  include <string.h>
    #else /* !HAVE_STRING_H */
    #  include <strings.h>
    #endif /* !HAVE_STRING_H */
    
    #ifdef HAVE_STDLIB_H
    #  include <stdlib.h>
    #endif
    
    #include <time.h>
    
    #include <readline/readline.h>
    #include <readline/history.h>
    
    extern char *xmalloc PARAMS((size_t));
    
    /* The names of functions that actually do the manipulation. */
    int com_list PARAMS((char *));
    int com_view PARAMS((char *));
    int com_rename PARAMS((char *));
    int com_stat PARAMS((char *));
    int com_pwd PARAMS((char *));
    int com_delete PARAMS((char *));
    int com_help PARAMS((char *));
    int com_cd PARAMS((char *));
    int com_quit PARAMS((char *));
    
    /* A structure which contains information on the commands this program
       can understand. */
    
    typedef struct {
      char *name;			/* User printable name of the function. */
      rl_icpfunc_t *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, (rl_icpfunc_t *)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)
         char *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 PARAMS((const char *, int));
    char **fileman_completion PARAMS((const char *, int, int));
    
    /* 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 = 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)
         const 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 = rl_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)
         const 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;
    
    #if defined (__MSDOS__)
      /* more.com doesn't grok slashes in pathnames */
      sprintf (syscom, "less %s", arg);
    #else
      sprintf (syscom, "more %s", arg);
    #endif
      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 = getcwd (dir, sizeof(dir) - 1);
      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);
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. GNU Free Documentation License

    Version 1.3, 3 November 2008

     
    Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    http://fsf.org/
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    

    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

      A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

      The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

      The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

      The "publisher" means any person or entity that distributes copies of the Document to the public.

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

      4. Preserve all the copyright notices of the Document.

      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

      8. Include an unaltered copy of this License.

      9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

      15. Preserve any Warranty Disclaimers.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

      You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

      However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

      Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

      Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

    12. RELICENSING

      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

      "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

      An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

      The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

    ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.3
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
      Texts.  A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

     
        with the Invariant Sections being list their titles, with
        the Front-Cover Texts being list, and with the Back-Cover Texts
        being list.
    

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Concept Index

    Jump to:   A   C   E   I   K   N   R   V   Y  

    Index Entry Section

    A
    application-specific completion functions2.6 Custom Completers

    C
    command editing1.2.1 Readline Bare Essentials

    E
    editing command lines1.2.1 Readline Bare Essentials

    I
    initialization file, readline1.3 Readline Init File
    interaction, readline1.2 Readline Interaction

    K
    kill ring1.2.3 Readline Killing Commands
    killing text1.2.3 Readline Killing Commands

    N
    notation, readline1.2.1 Readline Bare Essentials

    R
    readline, function2.1 Basic Behavior

    V
    variables, readline1.3.1 Readline Init File Syntax

    Y
    yanking text1.2.3 Readline Killing Commands

    Jump to:   A   C   E   I   K   N   R   V   Y  


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Function and Variable Index

    Jump to:   _  
    A   B   C   D   E   F   H   I   K   M   N   O   P   Q   R   S   T   U   V   Y  

    Index Entry Section

    _
    _rl_digit_p2.4.10 Utility Functions
    _rl_digit_value2.4.10 Utility Functions
    _rl_lowercase_p2.4.10 Utility Functions
    _rl_to_lower2.4.10 Utility Functions
    _rl_to_upper2.4.10 Utility Functions
    _rl_uppercase_p2.4.10 Utility Functions

    A
    abort (C-g)1.4.8 Some Miscellaneous Commands
    abort (C-g)1.4.8 Some Miscellaneous Commands
    accept-line (Newline or Return)1.4.2 Commands For Manipulating The History
    accept-line (Newline or Return)1.4.2 Commands For Manipulating The History

    B
    backward-char (C-b)1.4.1 Commands For Moving
    backward-char (C-b)1.4.1 Commands For Moving
    backward-delete-char (Rubout)1.4.3 Commands For Changing Text
    backward-delete-char (Rubout)1.4.3 Commands For Changing Text
    backward-kill-line (C-x Rubout)1.4.4 Killing And Yanking
    backward-kill-line (C-x Rubout)1.4.4 Killing And Yanking
    backward-kill-word (M-DEL)1.4.4 Killing And Yanking
    backward-kill-word (M-DEL)1.4.4 Killing And Yanking
    backward-word (M-b)1.4.1 Commands For Moving
    backward-word (M-b)1.4.1 Commands For Moving
    beginning-of-history (M-&#60;)1.4.2 Commands For Manipulating The History
    beginning-of-history (M-&#60;)1.4.2 Commands For Manipulating The History
    beginning-of-line (C-a)1.4.1 Commands For Moving
    beginning-of-line (C-a)1.4.1 Commands For Moving
    bell-style1.3.1 Readline Init File Syntax
    bind-tty-special-chars1.3.1 Readline Init File Syntax

    C
    call-last-kbd-macro (C-x e)1.4.7 Keyboard Macros
    call-last-kbd-macro (C-x e)1.4.7 Keyboard Macros
    capitalize-word (M-c)1.4.3 Commands For Changing Text
    capitalize-word (M-c)1.4.3 Commands For Changing Text
    character-search (C-])1.4.8 Some Miscellaneous Commands
    character-search (C-])1.4.8 Some Miscellaneous Commands
    character-search-backward (M-C-])1.4.8 Some Miscellaneous Commands
    character-search-backward (M-C-])1.4.8 Some Miscellaneous Commands
    clear-screen (C-l)1.4.1 Commands For Moving
    clear-screen (C-l)1.4.1 Commands For Moving
    colored-stats1.3.1 Readline Init File Syntax
    comment-begin1.3.1 Readline Init File Syntax
    complete (TAB)1.4.6 Letting Readline Type For You
    complete (TAB)1.4.6 Letting Readline Type For You
    completion-display-width1.3.1 Readline Init File Syntax
    completion-ignore-case1.3.1 Readline Init File Syntax
    completion-map-case1.3.1 Readline Init File Syntax
    completion-prefix-display-length1.3.1 Readline Init File Syntax
    completion-query-items1.3.1 Readline Init File Syntax
    convert-meta1.3.1 Readline Init File Syntax
    copy-backward-word ()1.4.4 Killing And Yanking
    copy-backward-word ()1.4.4 Killing And Yanking
    copy-forward-word ()1.4.4 Killing And Yanking
    copy-forward-word ()1.4.4 Killing And Yanking
    copy-region-as-kill ()1.4.4 Killing And Yanking
    copy-region-as-kill ()1.4.4 Killing And Yanking

    D
    delete-char (C-d)1.4.3 Commands For Changing Text
    delete-char (C-d)1.4.3 Commands For Changing Text
    delete-char-or-list ()1.4.6 Letting Readline Type For You
    delete-char-or-list ()1.4.6 Letting Readline Type For You
    delete-horizontal-space ()1.4.4 Killing And Yanking
    delete-horizontal-space ()1.4.4 Killing And Yanking
    digit-argument (M-0, M-1, <small>...</small> M--)1.4.5 Specifying Numeric Arguments
    digit-argument (M-0, M-1, <small>...</small> M--)1.4.5 Specifying Numeric Arguments
    disable-completion1.3.1 Readline Init File Syntax
    do-uppercase-version (M-a, M-b, M-x, <small>...</small>)1.4.8 Some Miscellaneous Commands
    do-uppercase-version (M-a, M-b, M-x, <small>...</small>)1.4.8 Some Miscellaneous Commands
    downcase-word (M-l)1.4.3 Commands For Changing Text
    downcase-word (M-l)1.4.3 Commands For Changing Text
    dump-functions ()1.4.8 Some Miscellaneous Commands
    dump-functions ()1.4.8 Some Miscellaneous Commands
    dump-macros ()1.4.8 Some Miscellaneous Commands
    dump-macros ()1.4.8 Some Miscellaneous Commands
    dump-variables ()1.4.8 Some Miscellaneous Commands
    dump-variables ()1.4.8 Some Miscellaneous Commands

    E
    editing-mode1.3.1 Readline Init File Syntax
    emacs-editing-mode (C-e)1.4.8 Some Miscellaneous Commands
    emacs-editing-mode (C-e)1.4.8 Some Miscellaneous Commands
    enable-keypad1.3.1 Readline Init File Syntax
    end-kbd-macro (C-x ))1.4.7 Keyboard Macros
    end-kbd-macro (C-x ))1.4.7 Keyboard Macros
    end-of-file (usually C-d)1.4.3 Commands For Changing Text
    end-of-file (usually C-d)1.4.3 Commands For Changing Text
    end-of-history (M-&#62;)1.4.2 Commands For Manipulating The History
    end-of-history (M-&#62;)1.4.2 Commands For Manipulating The History
    end-of-line (C-e)1.4.1 Commands For Moving
    end-of-line (C-e)1.4.1 Commands For Moving
    exchange-point-and-mark (C-x C-x)1.4.8 Some Miscellaneous Commands
    exchange-point-and-mark (C-x C-x)1.4.8 Some Miscellaneous Commands
    expand-tilde1.3.1 Readline Init File Syntax

    F
    forward-backward-delete-char ()1.4.3 Commands For Changing Text
    forward-backward-delete-char ()1.4.3 Commands For Changing Text
    forward-char (C-f)1.4.1 Commands For Moving
    forward-char (C-f)1.4.1 Commands For Moving
    forward-search-history (C-s)1.4.2 Commands For Manipulating The History
    forward-search-history (C-s)1.4.2 Commands For Manipulating The History
    forward-word (M-f)1.4.1 Commands For Moving
    forward-word (M-f)1.4.1 Commands For Moving

    H
    history-preserve-point1.3.1 Readline Init File Syntax
    history-search-backward ()1.4.2 Commands For Manipulating The History
    history-search-backward ()1.4.2 Commands For Manipulating The History
    history-search-forward ()1.4.2 Commands For Manipulating The History
    history-search-forward ()1.4.2 Commands For Manipulating The History
    history-size1.3.1 Readline Init File Syntax
    history-substr-search-backward ()1.4.2 Commands For Manipulating The History
    history-substr-search-backward ()1.4.2 Commands For Manipulating The History
    history-substr-search-forward ()1.4.2 Commands For Manipulating The History
    history-substr-search-forward ()1.4.2 Commands For Manipulating The History
    horizontal-scroll-mode1.3.1 Readline Init File Syntax

    I
    input-meta1.3.1 Readline Init File Syntax
    insert-comment (M-#)1.4.8 Some Miscellaneous Commands
    insert-comment (M-#)1.4.8 Some Miscellaneous Commands
    insert-completions (M-*)1.4.6 Letting Readline Type For You
    insert-completions (M-*)1.4.6 Letting Readline Type For You
    isearch-terminators1.3.1 Readline Init File Syntax

    K
    keymap1.3.1 Readline Init File Syntax
    kill-line (C-k)1.4.4 Killing And Yanking
    kill-line (C-k)1.4.4 Killing And Yanking
    kill-region ()1.4.4 Killing And Yanking
    kill-region ()1.4.4 Killing And Yanking
    kill-whole-line ()1.4.4 Killing And Yanking
    kill-whole-line ()1.4.4 Killing And Yanking
    kill-word (M-d)1.4.4 Killing And Yanking
    kill-word (M-d)1.4.4 Killing And Yanking

    M
    mark-modified-lines1.3.1 Readline Init File Syntax
    mark-symlinked-directories1.3.1 Readline Init File Syntax
    match-hidden-files1.3.1 Readline Init File Syntax
    menu-complete ()1.4.6 Letting Readline Type For You
    menu-complete ()1.4.6 Letting Readline Type For You
    menu-complete-backward ()1.4.6 Letting Readline Type For You
    menu-complete-backward ()1.4.6 Letting Readline Type For You
    menu-complete-display-prefix1.3.1 Readline Init File Syntax
    meta-flag1.3.1 Readline Init File Syntax

    N
    next-history (C-n)1.4.2 Commands For Manipulating The History
    next-history (C-n)1.4.2 Commands For Manipulating The History
    non-incremental-forward-search-history (M-n)1.4.2 Commands For Manipulating The History
    non-incremental-forward-search-history (M-n)1.4.2 Commands For Manipulating The History
    non-incremental-reverse-search-history (M-p)1.4.2 Commands For Manipulating The History
    non-incremental-reverse-search-history (M-p)1.4.2 Commands For Manipulating The History

    O
    output-meta1.3.1 Readline Init File Syntax
    overwrite-mode ()1.4.3 Commands For Changing Text
    overwrite-mode ()1.4.3 Commands For Changing Text

    P
    page-completions1.3.1 Readline Init File Syntax
    possible-completions (M-?)1.4.6 Letting Readline Type For You
    possible-completions (M-?)1.4.6 Letting Readline Type For You
    prefix-meta (ESC)1.4.8 Some Miscellaneous Commands
    prefix-meta (ESC)1.4.8 Some Miscellaneous Commands
    previous-history (C-p)1.4.2 Commands For Manipulating The History
    previous-history (C-p)1.4.2 Commands For Manipulating The History
    print-last-kbd-macro ()1.4.7 Keyboard Macros
    print-last-kbd-macro ()1.4.7 Keyboard Macros

    Q
    quoted-insert (C-q or C-v)1.4.3 Commands For Changing Text
    quoted-insert (C-q or C-v)1.4.3 Commands For Changing Text

    R
    re-read-init-file (C-x C-r)1.4.8 Some Miscellaneous Commands
    re-read-init-file (C-x C-r)1.4.8 Some Miscellaneous Commands
    readline2.1 Basic Behavior
    redraw-current-line ()1.4.1 Commands For Moving
    redraw-current-line ()1.4.1 Commands For Moving
    reverse-search-history (C-r)1.4.2 Commands For Manipulating The History
    reverse-search-history (C-r)1.4.2 Commands For Manipulating The History
    revert-all-at-newline1.3.1 Readline Init File Syntax
    revert-line (M-r)1.4.8 Some Miscellaneous Commands
    revert-line (M-r)1.4.8 Some Miscellaneous Commands
    rl_add_defun2.4.1 Naming a Function
    rl_add_funmap_entry2.4.4 Associating Function Names and Bindings
    rl_add_undo2.4.5 Allowing Undoing
    rl_alphabetic2.4.10 Utility Functions
    rl_already_prompted2.3 Readline Variables
    rl_attempted_completion_function2.6.3 Completion Variables
    rl_attempted_completion_over2.6.3 Completion Variables
    rl_basic_quote_characters2.6.3 Completion Variables
    rl_basic_word_break_characters2.6.3 Completion Variables
    rl_begin_undo_group2.4.5 Allowing Undoing
    rl_bind_key2.4.3 Binding Keys
    rl_bind_key_if_unbound2.4.3 Binding Keys
    rl_bind_key_if_unbound_in_map2.4.3 Binding Keys
    rl_bind_key_in_map2.4.3 Binding Keys
    rl_bind_keyseq2.4.3 Binding Keys
    rl_bind_keyseq_if_unbound2.4.3 Binding Keys
    rl_bind_keyseq_if_unbound_in_map2.4.3 Binding Keys
    rl_bind_keyseq_in_map2.4.3 Binding Keys
    rl_binding_keymap2.3 Readline Variables
    rl_callback_handler_install2.4.12 Alternate Interface
    rl_callback_handler_remove2.4.12 Alternate Interface
    rl_callback_read_char2.4.12 Alternate Interface
    rl_catch_signals2.5 Readline Signal Handling
    rl_catch_sigwinch2.5 Readline Signal Handling
    rl_change_environment2.5 Readline Signal Handling
    rl_char_is_quoted_p2.6.3 Completion Variables
    rl_cleanup_after_signal2.5 Readline Signal Handling
    rl_clear_history2.4.11 Miscellaneous Functions
    rl_clear_message2.4.6 Redisplay
    rl_clear_pending_input2.4.8 Character Input
    rl_clear_signals2.5 Readline Signal Handling
    rl_complete2.6.1 How Completing Works
    rl_complete2.6.2 Completion Functions
    rl_complete_internal2.6.2 Completion Functions
    rl_completer_quote_characters2.6.3 Completion Variables
    rl_completer_word_break_characters2.6.3 Completion Variables
    rl_completion_append_character2.6.3 Completion Variables
    rl_completion_display_matches_hook2.6.3 Completion Variables
    rl_completion_entry_function2.6.1 How Completing Works
    rl_completion_entry_function2.6.3 Completion Variables
    rl_completion_found_quote2.6.3 Completion Variables
    rl_completion_invoking_key2.6.3 Completion Variables
    rl_completion_mark_symlink_dirs2.6.3 Completion Variables
    rl_completion_matches2.6.2 Completion Functions
    rl_completion_mode2.6.2 Completion Functions
    rl_completion_query_items2.6.3 Completion Variables
    rl_completion_quote_character2.6.3 Completion Variables
    rl_completion_suppress_append2.6.3 Completion Variables
    rl_completion_suppress_quote2.6.3 Completion Variables
    rl_completion_type2.6.3 Completion Variables
    rl_completion_word_break_hook2.6.3 Completion Variables
    rl_copy_keymap2.4.2 Selecting a Keymap
    rl_copy_text2.4.7 Modifying Text
    rl_crlf2.4.6 Redisplay
    rl_delete_text2.4.7 Modifying Text
    rl_deprep_term_function2.3 Readline Variables
    rl_deprep_terminal2.4.9 Terminal Management
    rl_ding2.4.10 Utility Functions
    rl_directory_completion_hook2.6.3 Completion Variables
    rl_directory_rewrite_hook;2.6.3 Completion Variables
    rl_discard_keymap2.4.2 Selecting a Keymap
    rl_dispatching2.3 Readline Variables
    rl_display_match_list2.4.10 Utility Functions
    rl_display_prompt2.3 Readline Variables
    rl_do_undo2.4.5 Allowing Undoing
    rl_done2.3 Readline Variables
    rl_echo_signal_char2.5 Readline Signal Handling
    rl_editing_mode2.3 Readline Variables
    rl_end2.3 Readline Variables
    rl_end_undo_group2.4.5 Allowing Undoing
    rl_erase_empty_line2.3 Readline Variables
    rl_event_hook2.3 Readline Variables
    rl_execute_next2.4.8 Character Input
    rl_executing_key2.3 Readline Variables
    rl_executing_keymap2.3 Readline Variables
    rl_executing_keyseq2.3 Readline Variables
    rl_executing_macro2.3 Readline Variables
    rl_expand_prompt2.4.6 Redisplay
    rl_explicit_arg2.3 Readline Variables
    rl_extend_line_buffer2.4.10 Utility Functions
    rl_filename_completion_desired2.6.3 Completion Variables
    rl_filename_completion_function2.6.2 Completion Functions
    rl_filename_dequoting_function2.6.3 Completion Variables
    rl_filename_quote_characters2.6.3 Completion Variables
    rl_filename_quoting_desired2.6.3 Completion Variables
    rl_filename_quoting_function2.6.3 Completion Variables
    rl_filename_rewrite_hook2.6.3 Completion Variables
    rl_filename_stat_hook2.6.3 Completion Variables
    rl_forced_update_display2.4.6 Redisplay
    rl_free2.4.10 Utility Functions
    rl_free_keymap2.4.2 Selecting a Keymap
    rl_free_line_state2.5 Readline Signal Handling
    rl_free_undo_list2.4.5 Allowing Undoing
    rl_function_dumper2.4.4 Associating Function Names and Bindings
    rl_function_of_keyseq2.4.4 Associating Function Names and Bindings
    rl_funmap_names2.4.4 Associating Function Names and Bindings
    rl_generic_bind2.4.3 Binding Keys
    rl_get_keymap2.4.2 Selecting a Keymap
    rl_get_keymap_by_name2.4.2 Selecting a Keymap
    rl_get_keymap_name2.4.2 Selecting a Keymap
    rl_get_screen_size2.5 Readline Signal Handling
    rl_get_termcap2.4.11 Miscellaneous Functions
    rl_getc2.4.8 Character Input
    rl_getc_function2.3 Readline Variables
    rl_gnu_readline_p2.3 Readline Variables
    rl_ignore_completion_duplicates2.6.3 Completion Variables
    rl_ignore_some_completions_function2.6.3 Completion Variables
    rl_inhibit_completion2.6.3 Completion Variables
    rl_initialize2.4.10 Utility Functions
    rl_input_available_hook2.3 Readline Variables
    rl_insert_completions2.6.2 Completion Functions
    rl_insert_text2.4.7 Modifying Text
    rl_instream2.3 Readline Variables
    rl_invoking_keyseqs2.4.4 Associating Function Names and Bindings
    rl_invoking_keyseqs_in_map2.4.4 Associating Function Names and Bindings
    rl_key_sequence_length2.3 Readline Variables
    rl_kill_text2.4.7 Modifying Text
    rl_last_func2.3 Readline Variables
    rl_library_version2.3 Readline Variables
    rl_line_buffer2.3 Readline Variables
    rl_list_funmap_names2.4.4 Associating Function Names and Bindings
    rl_macro_bind2.4.11 Miscellaneous Functions
    rl_macro_dumper2.4.11 Miscellaneous Functions
    rl_make_bare_keymap2.4.2 Selecting a Keymap
    rl_make_keymap2.4.2 Selecting a Keymap
    rl_mark2.3 Readline Variables
    rl_message2.4.6 Redisplay
    rl_modifying2.4.5 Allowing Undoing
    rl_named_function2.4.4 Associating Function Names and Bindings
    rl_num_chars_to_read2.3 Readline Variables
    rl_numeric_arg2.3 Readline Variables
    rl_on_new_line2.4.6 Redisplay
    rl_on_new_line_with_prompt2.4.6 Redisplay
    rl_outstream2.3 Readline Variables
    rl_parse_and_bind2.4.3 Binding Keys
    rl_pending_input2.3 Readline Variables
    rl_point2.3 Readline Variables
    rl_possible_completions2.6.2 Completion Functions
    rl_pre_input_hook2.3 Readline Variables
    rl_prefer_env_winsize2.3 Readline Variables
    rl_prep_term_function2.3 Readline Variables
    rl_prep_terminal2.4.9 Terminal Management
    rl_prompt2.3 Readline Variables
    rl_push_macro_input2.4.7 Modifying Text
    rl_read_init_file2.4.3 Binding Keys
    rl_read_key2.4.8 Character Input
    rl_readline_name2.3 Readline Variables
    rl_readline_state2.3 Readline Variables
    rl_readline_version2.3 Readline Variables
    rl_redisplay2.4.6 Redisplay
    rl_redisplay_function2.3 Readline Variables
    rl_replace_line2.4.10 Utility Functions
    rl_reset_after_signal2.5 Readline Signal Handling
    rl_reset_line_state2.4.6 Redisplay
    rl_reset_screen_size2.5 Readline Signal Handling
    rl_reset_terminal2.4.9 Terminal Management
    rl_resize_terminal2.5 Readline Signal Handling
    rl_restore_prompt2.4.6 Redisplay
    rl_restore_state2.4.10 Utility Functions
    rl_save_prompt2.4.6 Redisplay
    rl_save_state2.4.10 Utility Functions
    rl_set_key2.4.3 Binding Keys
    rl_set_keyboard_input_timeout2.4.8 Character Input
    rl_set_keymap2.4.2 Selecting a Keymap
    rl_set_paren_blink_timeout2.4.11 Miscellaneous Functions
    rl_set_prompt2.4.6 Redisplay
    rl_set_screen_size2.5 Readline Signal Handling
    rl_set_signals2.5 Readline Signal Handling
    rl_show_char2.4.6 Redisplay
    rl_signal_event_hook2.3 Readline Variables
    rl_sort_completion_matches2.6.3 Completion Variables
    rl_special_prefixes2.6.3 Completion Variables
    rl_startup_hook2.3 Readline Variables
    rl_stuff_char2.4.8 Character Input
    rl_terminal_name2.3 Readline Variables
    rl_tty_set_default_bindings2.4.9 Terminal Management
    rl_tty_unset_default_bindings2.4.9 Terminal Management
    rl_unbind_command_in_map2.4.3 Binding Keys
    rl_unbind_function_in_map2.4.3 Binding Keys
    rl_unbind_key2.4.3 Binding Keys
    rl_unbind_key_in_map2.4.3 Binding Keys
    rl_username_completion_function2.6.2 Completion Functions
    rl_variable_bind2.4.11 Miscellaneous Functions
    rl_variable_dumper2.4.11 Miscellaneous Functions
    rl_variable_value2.4.11 Miscellaneous Functions

    S
    self-insert (a, b, A, 1, !, <small>...</small>)1.4.3 Commands For Changing Text
    self-insert (a, b, A, 1, !, <small>...</small>)1.4.3 Commands For Changing Text
    set-mark (C-@)1.4.8 Some Miscellaneous Commands
    set-mark (C-@)1.4.8 Some Miscellaneous Commands
    show-all-if-ambiguous1.3.1 Readline Init File Syntax
    show-all-if-unmodified1.3.1 Readline Init File Syntax
    show-mode-in-prompt1.3.1 Readline Init File Syntax
    skip-completed-text1.3.1 Readline Init File Syntax
    skip-csi-sequence ()1.4.8 Some Miscellaneous Commands
    skip-csi-sequence ()1.4.8 Some Miscellaneous Commands
    start-kbd-macro (C-x ()1.4.7 Keyboard Macros
    start-kbd-macro (C-x ()1.4.7 Keyboard Macros

    T
    tab-insert (M-TAB)1.4.3 Commands For Changing Text
    tab-insert (M-TAB)1.4.3 Commands For Changing Text
    tilde-expand (M-~)1.4.8 Some Miscellaneous Commands
    tilde-expand (M-~)1.4.8 Some Miscellaneous Commands
    transpose-chars (C-t)1.4.3 Commands For Changing Text
    transpose-chars (C-t)1.4.3 Commands For Changing Text
    transpose-words (M-t)1.4.3 Commands For Changing Text
    transpose-words (M-t)1.4.3 Commands For Changing Text

    U
    undo (C-_ or C-x C-u)1.4.8 Some Miscellaneous Commands
    undo (C-_ or C-x C-u)1.4.8 Some Miscellaneous Commands
    universal-argument ()1.4.5 Specifying Numeric Arguments
    universal-argument ()1.4.5 Specifying Numeric Arguments
    unix-filename-rubout ()1.4.4 Killing And Yanking
    unix-filename-rubout ()1.4.4 Killing And Yanking
    unix-line-discard (C-u)1.4.4 Killing And Yanking
    unix-line-discard (C-u)1.4.4 Killing And Yanking
    unix-word-rubout (C-w)1.4.4 Killing And Yanking
    unix-word-rubout (C-w)1.4.4 Killing And Yanking
    upcase-word (M-u)1.4.3 Commands For Changing Text
    upcase-word (M-u)1.4.3 Commands For Changing Text

    V
    vi-editing-mode (M-C-j)1.4.8 Some Miscellaneous Commands
    vi-editing-mode (M-C-j)1.4.8 Some Miscellaneous Commands
    visible-stats1.3.1 Readline Init File Syntax

    Y
    yank (C-y)1.4.4 Killing And Yanking
    yank (C-y)1.4.4 Killing And Yanking
    yank-last-arg (M-. or M-_)1.4.2 Commands For Manipulating The History
    yank-last-arg (M-. or M-_)1.4.2 Commands For Manipulating The History
    yank-nth-arg (M-C-y)1.4.2 Commands For Manipulating The History
    yank-nth-arg (M-C-y)1.4.2 Commands For Manipulating The History
    yank-pop (M-y)1.4.4 Killing And Yanking
    yank-pop (M-y)1.4.4 Killing And Yanking

    Jump to:   _  
    A   B   C   D   E   F   H   I   K   M   N   O   P   Q   R   S   T   U   V   Y  


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents

    1. Command Line Editing
    2. Programming with GNU Readline
    A. GNU Free Documentation License
    Concept Index
    Function and Variable Index

    [Top] [Contents] [Index] [ ? ]

    About this document

    This document was generated by Chet Ramey on February, 11 2014 using texi2html

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back previous section in reading order 1.2.2
    [ > ] Forward next section in reading order 1.2.4
    [ << ] FastBack previous or up-and-previous section 1.1
    [ Up ] Up up section 1.2
    [ >> ] FastForward next or up-and-next section 1.3
    [Top] Top cover (top) of document  
    [Contents] Contents table of contents  
    [Index] Index concept index  
    [ ? ] About this page  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four


    This document was generated by Chet Ramey on February, 11 2014 using texi2html readline-6.3/doc/history.html0000664000043600000000000030471512276516307015122 0ustar chetwheel GNU History Library:
    [Top] [Contents] [Index] [ ? ]

    GNU History Library

    This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input.

    1. Using History Interactively  GNU History User's Manual.
    2. Programming with GNU History  GNU History Programmer's Manual.
    A. GNU Free Documentation License  License for copying this manual.
    B. Concept Index  Index of concepts described in this manual.
    C. Function and Variable Index  Index of externally visible functions and variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Using History Interactively

    This chapter describes how to use the GNU History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the GNU History Library in your own programs, see section 2. Programming with GNU History.

    1.1 History Expansion  What it feels like using History as a user.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 History Expansion

    The History library provides a history expansion feature that is similar to the history expansion provided by csh. This section describes the syntax used to manipulate the history information.

    History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly.

    History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is called the event, and the portions of that line that are acted upon are called words. Various modifiers are available to manipulate the selected words. The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is `!' by default.

    1.1.1 Event Designators  How to specify which history line to use.
    1.1.2 Word Designators  Specifying which words are of interest.
    1.1.3 Modifiers  Modifying the results of substitution.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Event Designators

    An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list.

    !
    Start a history substitution, except when followed by a space, tab, the end of the line, or `='.

    !n
    Refer to command line n.

    !-n
    Refer to the command n lines back.

    !!
    Refer to the previous command. This is a synonym for `!-1'.

    !string
    Refer to the most recent command preceding the current position in the history list starting with string.

    !?string[?]
    Refer to the most recent command preceding the current position in the history list containing string. The trailing `?' may be omitted if the string is followed immediately by a newline.

    ^string1^string2^
    Quick Substitution. Repeat the last command, replacing string1 with string2. Equivalent to !!:s/string1/string2/.

    !#
    The entire command line typed so far.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.2 Word Designators

    Word designators are used to select desired words from the event. A `:' separates the event specification from the word designator. It may be omitted if the word designator begins with a `^', `$', `*', `-', or `%'. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces.

    For example,

    !!
    designates the preceding command. When you type this, the preceding command is repeated in toto.

    !!:$
    designates the last argument of the preceding command. This may be shortened to !$.

    !fi:2
    designates the second argument of the most recent command starting with the letters fi.

    Here are the word designators:

    0 (zero)
    The 0th word. For many applications, this is the command word.

    n
    The nth word.

    ^
    The first argument; that is, word 1.

    $
    The last argument.

    %
    The word matched by the most recent `?string?' search.

    x-y
    A range of words; `-y' abbreviates `0-y'.

    *
    All of the words, except the 0th. This is a synonym for `1-$'. It is not an error to use `*' if there is just one word in the event; the empty string is returned in that case.

    x*
    Abbreviates `x-$'

    x-
    Abbreviates `x-$' like `x*', but omits the last word.

    If a word designator is supplied without an event specification, the previous command is used as the event.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.3 Modifiers

    After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a `:'.

    h
    Remove a trailing pathname component, leaving only the head.

    t
    Remove all leading pathname components, leaving the tail.

    r
    Remove a trailing suffix of the form `.suffix', leaving the basename.

    e
    Remove all but the trailing suffix.

    p
    Print the new command but do not execute it.

    s/old/new/
    Substitute new for the first occurrence of old in the event line. Any delimiter may be used in place of `/'. The delimiter may be quoted in old and new with a single backslash. If `&' appears in new, it is replaced by old. A single backslash will quote the `&'. The final delimiter is optional if it is the last character on the input line.

    &
    Repeat the previous substitution.

    g
    a
    Cause changes to be applied over the entire event line. Used in conjunction with `s', as in gs/old/new/, or with `&'.

    G
    Apply the following `s' modifier once to each word in the event.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Programming with GNU History

    This chapter describes how to interface programs that you write with the GNU History Library. It should be considered a technical guide. For information on the interactive use of GNU History, see section 1. Using History Interactively.

    2.1 Introduction to History  What is the GNU History library for?
    2.2 History Storage  How information is stored.
    2.3 History Functions  Functions that you can use.
    2.4 History Variables  Variables that control behaviour.
    2.5 History Programming Example  Example of using the GNU History Library.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Introduction to History

    Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones.

    The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history expansion function is available which provides for a consistent user interface across different programs.

    The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are similar to the history substitution provided by csh.

    If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing.

    Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file <readline/history.h> in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 History Storage

    The history list is an array of history entries. A history entry is declared as follows:

     
    typedef void *histdata_t;
    
    typedef struct _hist_entry {
      char *line;
      char *timestamp;
      histdata_t data;
    } HIST_ENTRY;
    

    The history list itself might therefore be declared as

     
    HIST_ENTRY **the_history_list;
    

    The state of the History library is encapsulated into a single structure:

     
    /*
     * A structure used to pass around the current state of the history.
     */
    typedef struct _hist_state {
      HIST_ENTRY **entries; /* Pointer to the entries themselves. */
      int offset;           /* The location pointer within this array. */
      int length;           /* Number of elements within this array. */
      int size;             /* Number of slots allocated to this array. */
      int flags;
    } HISTORY_STATE;
    

    If the flags member includes HS_STIFLED, the history has been stifled.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 History Functions

    This section describes the calling sequence for the various functions exported by the GNU History library.

    2.3.1 Initializing History and State Management  Functions to call when you want to use history in a program.
    2.3.2 History List Management  Functions used to manage the list of history entries.
    2.3.3 Information About the History List  Functions returning information about the history list.
    2.3.4 Moving Around the History List  Functions used to change the position in the history list.
    2.3.5 Searching the History List  Functions to search the history list for entries containing a string.
    2.3.6 Managing the History File  Functions that read and write a file containing the history list.
    2.3.7 History Expansion  Functions to perform csh-like history expansion.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.1 Initializing History and State Management

    This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program.

    Function: void using_history (void)
    Begin a session in which the history functions might be used. This initializes the interactive variables.

    Function: HISTORY_STATE * history_get_history_state (void)
    Return a structure describing the current state of the input history.

    Function: void history_set_history_state (HISTORY_STATE *state)
    Set the state of the history list according to state.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.2 History List Management

    These functions manage individual entries on the history list, or set parameters managing the list itself.

    Function: void add_history (const char *string)
    Place string at the end of the history list. The associated data field (if any) is set to NULL.

    Function: void add_history_time (const char *string)
    Change the time stamp associated with the most recent history entry to string.

    Function: HIST_ENTRY * remove_history (int which)
    Remove history entry at offset which from the history. The removed element is returned so you can free the line, data, and containing structure.

    Function: histdata_t free_history_entry (HIST_ENTRY *histent)
    Free the history entry histent and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it.

    Function: HIST_ENTRY * replace_history_entry (int which, const char *line, histdata_t data)
    Make the history entry at offset which have line and data. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid which, a NULL pointer is returned.

    Function: void clear_history (void)
    Clear the history list by deleting all the entries.

    Function: void stifle_history (int max)
    Stifle the history list, remembering only the last max entries.

    Function: int unstifle_history (void)
    Stop stifling the history. This returns the previously-set maximum number of history entries (as set by stifle_history()). The value is positive if the history was stifled, negative if it wasn't.

    Function: int history_is_stifled (void)
    Returns non-zero if the history is stifled, zero if it is not.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.3 Information About the History List

    These functions return information about the entire history list or individual list entries.

    Function: HIST_ENTRY ** history_list (void)
    Return a NULL terminated array of HIST_ENTRY * which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return NULL.

    Function: int where_history (void)
    Returns the offset of the current history element.

    Function: HIST_ENTRY * current_history (void)
    Return the history entry at the current position, as determined by where_history(). If there is no entry there, return a NULL pointer.

    Function: HIST_ENTRY * history_get (int offset)
    Return the history entry at position offset, starting from history_base (see section 2.4 History Variables). If there is no entry there, or if offset is greater than the history length, return a NULL pointer.

    Function: time_t history_get_time (HIST_ENTRY *entry)
    Return the time stamp associated with the history entry entry.

    Function: int history_total_bytes (void)
    Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.4 Moving Around the History List

    These functions allow the current index into the history list to be set or changed.

    Function: int history_set_pos (int pos)
    Set the current history offset to pos, an absolute index into the list. Returns 1 on success, 0 if pos is less than zero or greater than the number of history entries.

    Function: HIST_ENTRY * previous_history (void)
    Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer.

    Function: HIST_ENTRY * next_history (void)
    Move the current history offset forward to the next history entry, and return the a pointer to that entry. If there is no next entry, return a NULL pointer.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.5 Searching the History List

    These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be anchored, meaning that the string must match at the beginning of the history entry.

    Function: int history_search (const char *string, int direction)
    Search the history for string, starting at the current history offset. If direction is less than 0, then the search is through previous entries, otherwise through subsequent entries. If string is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where string was found. Otherwise, nothing is changed, and a -1 is returned.

    Function: int history_search_prefix (const char *string, int direction)
    Search the history for string, starting at the current history offset. The search is anchored: matching lines must begin with string. If direction is less than 0, then the search is through previous entries, otherwise through subsequent entries. If string is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned.

    Function: int history_search_pos (const char *string, int direction, int pos)
    Search for string in the history list, starting at pos, an absolute index into the list. If direction is negative, the search proceeds backward from pos, otherwise forward. Returns the absolute index of the history element where string was found, or -1 otherwise.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.6 Managing the History File

    The History library can read the history from and write it to a file. This section documents the functions for managing a history file.

    Function: int read_history (const char *filename)
    Add the contents of filename to the history list, a line at a time. If filename is NULL, then read from `~/.history'. Returns 0 if successful, or errno if not.

    Function: int read_history_range (const char *filename, int from, int to)
    Read a range of lines from filename, adding them to the history list. Start reading at line from and end at to. If from is zero, start at the beginning. If to is less than from, then read until the end of the file. If filename is NULL, then read from `~/.history'. Returns 0 if successful, or errno if not.

    Function: int write_history (const char *filename)
    Write the current history to filename, overwriting filename if necessary. If filename is NULL, then write the history list to `~/.history'. Returns 0 on success, or errno on a read or write error.

    Function: int append_history (int nelements, const char *filename)
    Append the last nelements of the history list to filename. If filename is NULL, then append to `~/.history'. Returns 0 on success, or errno on a read or write error.

    Function: int history_truncate_file (const char *filename, int nlines)
    Truncate the history file filename, leaving only the last nlines lines. If filename is NULL, then `~/.history' is truncated. Returns 0 on success, or errno on failure.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.7 History Expansion

    These functions implement history expansion.

    Function: int history_expand (char *string, char **output)
    Expand string, placing the result into output, a pointer to a string (see section 1.1 History Expansion). Returns:
    0
    If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character);
    1
    if expansions did take place;
    -1
    if there was an error in expansion;
    2
    if the returned line should be displayed, but not executed, as with the :p modifier (see section 1.1.3 Modifiers).

    If an error occurred in expansion, then output contains a descriptive error message.

    Function: char * get_history_event (const char *string, int *cindex, int qchar)
    Returns the text of the history event beginning at string + *cindex. *cindex is modified to point to after the event specifier. At function entry, cindex points to the index into string where the history event specification begins. qchar is a character that is allowed to end the event specification in addition to the "normal" terminating characters.

    Function: char ** history_tokenize (const char *string)
    Return an array of tokens parsed out of string, much as the shell might. The tokens are split on the characters in the history_word_delimiters variable, and shell quoting conventions are obeyed.

    Function: char * history_arg_extract (int first, int last, const char *string)
    Extract a string segment consisting of the first through last arguments present in string. Arguments are split using history_tokenize.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 History Variables

    This section describes the externally-visible variables exported by the GNU History Library.

    Variable: int history_base
    The logical offset of the first entry in the history list.

    Variable: int history_length
    The number of entries currently stored in the history list.

    Variable: int history_max_entries
    The maximum number of history entries. This must be changed using stifle_history().

    Variable: int history_write_timestamps
    If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved.

    The current timestamp format uses the value of history_comment_char to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written.

    Variable: char history_expansion_char
    The character that introduces a history event. The default is `!'. Setting this to 0 inhibits history expansion.

    Variable: char history_subst_char
    The character that invokes word substitution if found at the start of a line. The default is `^'.

    Variable: char history_comment_char
    During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default.

    Variable: char * history_word_delimiters
    The characters that separate tokens for history_tokenize(). The default value is " \t\n()<>;&|".

    Variable: char * history_search_delimiter_chars
    The list of additional characters which can delimit a history search string, in addition to space, TAB, `:' and `?' in the case of a substring search. The default is empty.

    Variable: char * history_no_expand_chars
    The list of characters which inhibit history expansion if found immediately following history_expansion_char. The default is space, tab, newline, carriage return, and `='.

    Variable: int history_quotes_inhibit_expansion
    If non-zero, single-quoted words are not scanned for the history expansion character. The default value is 0.

    Variable: rl_linebuf_func_t * history_inhibit_expansion_function
    This should be set to the address of a function that takes two arguments: a char * (string) and an int index into that string (i). It should return a non-zero value if the history expansion starting at string[i] should not be performed; zero if the expansion should be done. It is intended for use by applications like Bash that use the history expansion character for additional purposes. By default, this variable is set to NULL.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 History Programming Example

    The following program demonstrates simple use of the GNU History Library.

     
    #include <stdio.h>
    #include <readline/history.h>
    
    main (argc, argv)
         int argc;
         char **argv;
    {
      char line[1024], *t;
      int len, done = 0;
    
      line[0] = 0;
    
      using_history ();
      while (!done)
        {
          printf ("history$ ");
          fflush (stdout);
          t = fgets (line, sizeof (line) - 1, stdin);
          if (t && *t)
            {
              len = strlen (t);
              if (t[len - 1] == '\n')
                t[len - 1] = '\0';
            }
    
          if (!t)
            strcpy (line, "quit");
    
          if (line[0])
            {
              char *expansion;
              int result;
    
              result = history_expand (line, &expansion);
              if (result)
                fprintf (stderr, "%s\n", expansion);
    
              if (result < 0 || result == 2)
                {
                  free (expansion);
                  continue;
                }
    
              add_history (expansion);
              strncpy (line, expansion, sizeof (line) - 1);
              free (expansion);
            }
    
          if (strcmp (line, "quit") == 0)
            done = 1;
          else if (strcmp (line, "save") == 0)
            write_history ("history_file");
          else if (strcmp (line, "read") == 0)
            read_history ("history_file");
          else if (strcmp (line, "list") == 0)
            {
              register HIST_ENTRY **the_list;
              register int i;
    
              the_list = history_list ();
              if (the_list)
                for (i = 0; the_list[i]; i++)
                  printf ("%d: %s\n", i + history_base, the_list[i]->line);
            }
          else if (strncmp (line, "delete", 6) == 0)
            {
              int which;
              if ((sscanf (line + 6, "%d", &which)) == 1)
                {
                  HIST_ENTRY *entry = remove_history (which);
                  if (!entry)
                    fprintf (stderr, "No such entry %d\n", which);
                  else
                    {
                      free (entry->line);
                      free (entry);
                    }
                }
              else
                {
                  fprintf (stderr, "non-numeric arg given to `delete'\n");
                }
            }
        }
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. GNU Free Documentation License

    Version 1.3, 3 November 2008

     
    Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    http://fsf.org/
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    

    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

      A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

      The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

      The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

      The "publisher" means any person or entity that distributes copies of the Document to the public.

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

      4. Preserve all the copyright notices of the Document.

      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

      8. Include an unaltered copy of this License.

      9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

      15. Preserve any Warranty Disclaimers.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

      You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

      However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

      Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

      Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

    12. RELICENSING

      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

      "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

      An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

      The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

    ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.3
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
      Texts.  A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

     
        with the Invariant Sections being list their titles, with
        the Front-Cover Texts being list, and with the Back-Cover Texts
        being list.
    

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Concept Index

    Jump to:   A   E   H  

    Index Entry Section

    A
    anchored search2.3.5 Searching the History List

    E
    event designators1.1.1 Event Designators

    H
    history events1.1.1 Event Designators
    history expansion1.1 History Expansion
    History Searching2.3.5 Searching the History List

    Jump to:   A   E   H  


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Function and Variable Index

    Jump to:   A   C   F   G   H   N   P   R   S   U   W  

    Index Entry Section

    A
    add_history2.3.2 History List Management
    add_history_time2.3.2 History List Management
    append_history2.3.6 Managing the History File

    C
    clear_history2.3.2 History List Management
    current_history2.3.3 Information About the History List

    F
    free_history_entry2.3.2 History List Management

    G
    get_history_event2.3.7 History Expansion

    H
    history_arg_extract2.3.7 History Expansion
    history_base2.4 History Variables
    history_comment_char2.4 History Variables
    history_expand2.3.7 History Expansion
    history_expansion_char2.4 History Variables
    history_get2.3.3 Information About the History List
    history_get_history_state2.3.1 Initializing History and State Management
    history_get_time2.3.3 Information About the History List
    history_inhibit_expansion_function2.4 History Variables
    history_is_stifled2.3.2 History List Management
    history_length2.4 History Variables
    history_list2.3.3 Information About the History List
    history_max_entries2.4 History Variables
    history_no_expand_chars2.4 History Variables
    history_quotes_inhibit_expansion2.4 History Variables
    history_search2.3.5 Searching the History List
    history_search_delimiter_chars2.4 History Variables
    history_search_pos2.3.5 Searching the History List
    history_search_prefix2.3.5 Searching the History List
    history_set_history_state2.3.1 Initializing History and State Management
    history_set_pos2.3.4 Moving Around the History List
    history_subst_char2.4 History Variables
    history_tokenize2.3.7 History Expansion
    history_total_bytes2.3.3 Information About the History List
    history_truncate_file2.3.6 Managing the History File
    history_word_delimiters2.4 History Variables
    history_write_timestamps2.4 History Variables

    N
    next_history2.3.4 Moving Around the History List

    P
    previous_history2.3.4 Moving Around the History List

    R
    read_history2.3.6 Managing the History File
    read_history_range2.3.6 Managing the History File
    remove_history2.3.2 History List Management
    replace_history_entry2.3.2 History List Management

    S
    stifle_history2.3.2 History List Management

    U
    unstifle_history2.3.2 History List Management
    using_history2.3.1 Initializing History and State Management

    W
    where_history2.3.3 Information About the History List
    write_history2.3.6 Managing the History File

    Jump to:   A   C   F   G   H   N   P   R   S   U   W  


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents

    1. Using History Interactively
    2. Programming with GNU History
    A. GNU Free Documentation License
    B. Concept Index
    C. Function and Variable Index

    [Top] [Contents] [Index] [ ? ]

    About this document

    This document was generated by Chet Ramey on February, 11 2014 using texi2html

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back previous section in reading order 1.2.2
    [ > ] Forward next section in reading order 1.2.4
    [ << ] FastBack previous or up-and-previous section 1.1
    [ Up ] Up up section 1.2
    [ >> ] FastForward next or up-and-next section 1.3
    [Top] Top cover (top) of document  
    [Contents] Contents table of contents  
    [Index] Index concept index  
    [ ? ] About this page  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four


    This document was generated by Chet Ramey on February, 11 2014 using texi2html readline-6.3/doc/rluserman.html0000664000043600000000000035223412276516307015430 0ustar chetwheel GNU Readline Library:
    [Top] [Contents] [Index] [ ? ]

    GNU Readline Library

    This document describes the end user interface of the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is http://www.gnu.org/software/readline/.

    1. Command Line Editing  GNU Readline User's Manual.
    A. GNU Free Documentation License  License for copying this manual.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Command Line Editing

    This chapter describes the basic features of the GNU command line editing interface.

    1.1 Introduction to Line Editing  Notation used in this text.
    1.2 Readline Interaction  The minimum set of commands for editing a line.
    1.3 Readline Init File  Customizing Readline from a user's view.
    1.4 Bindable Readline Commands  A description of most of the Readline commands available for binding
    1.5 Readline vi Mode  A short description of how to make Readline behave like the vi editor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Introduction to Line Editing

    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. The Meta key is labeled ALT on many keyboards. On keyboards with two keys labeled ALT (usually to either side of the space bar), the ALT on the left side is generally set to work as a Meta key. The ALT key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters.

    If you do not have a Meta or ALT key, or another key working as 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 (see section 1.3 Readline Init File). If your keyboard lacks a LFD key, typing C-j will produce the desired character. The RET key may be labeled Return or Enter on some keyboards.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Readline Interaction

    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 RET. You do not have to be at the end of the line to press RET; the entire line is accepted regardless of the location of the cursor within the line.

    1.2.1 Readline Bare Essentials  The least you need to know about Readline.
    1.2.2 Readline Movement Commands  Moving about the input line.
    1.2.3 Readline Killing Commands  How to delete text, and how to get it back!
    1.2.4 Readline Arguments  Giving numeric arguments to commands.
    1.2.5 Searching for Commands in the History  Searching through previous lines.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.1 Readline Bare Essentials

    In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character.

    Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type C-b to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with C-f.

    When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows.

    C-b
    Move back one character.
    C-f
    Move forward one character.
    DEL or Backspace
    Delete the character to the left of the cursor.
    C-d
    Delete the character underneath the cursor.
    Printing characters
    Insert the character into the line at the cursor.
    C-_ or C-x C-u
    Undo the last editing command. You can undo all the way back to an empty line.

    (Depending on your configuration, the Backspace key be set to delete the character to the left of the cursor and the DEL key set to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.2 Readline Movement Commands

    The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to C-b, C-f, C-d, and DEL. Here are some commands for moving more rapidly about the line.

    C-a
    Move to the start of the line.
    C-e
    Move to the end of the line.
    M-f
    Move forward a word, where a word is composed of letters and digits.
    M-b
    Move backward a word.
    C-l
    Clear the screen, reprinting the current line at the top.

    Notice how C-f moves forward a character, while M-f moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.3 Readline Killing Commands

    Killing text means to delete the text from the line, but to save it away for later use, usually by yanking (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)

    If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later.

    When you use a kill command, the text is saved in a kill-ring. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line.

    Here is the list of commands for killing text.

    C-k
    Kill the text from the current cursor position to the end of the line.

    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 those used by M-f.

    M-DEL
    Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by M-b.

    C-w
    Kill from the cursor to the previous whitespace. This is different than M-DEL because the word boundaries differ.

    Here is how to yank the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer.

    C-y
    Yank the most recently killed text back into the buffer at the cursor.

    M-y
    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or M-y.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.4 Readline Arguments

    You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type `M-- C-k'.

    The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (`-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the C-d command an argument of 10, you could type `M-1 0 C-d', which will delete the next ten characters on the input line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.5 Searching for Commands in the History

    Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: incremental and non-incremental.

    Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type C-r. Typing C-s searches forward through the history. The characters present in the value of the isearch-terminators variable are used to terminate an incremental search. If that variable has not been assigned a value, the ESC and C-J characters will terminate an incremental search. C-g will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line.

    To find other matching entries in the history list, type C-r or C-s as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a RET will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing.

    Readline remembers the last incremental search string. If two C-rs are typed without any intervening characters defining a new search string, any remembered search string is used.

    Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 Readline Init File

    Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an inputrc file, conventionally in his home directory. The name of this file is taken from the value of the environment variable INPUTRC. If that variable is unset, the default is `~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is `/etc/inputrc'.

    When a program which uses the Readline library starts up, the init file is read, and the key bindings are set.

    In addition, the C-x C-r command re-reads this init file, thus incorporating any changes that you might have made to it.

    1.3.1 Readline Init File Syntax  Syntax for the commands in the inputrc file.

    1.3.2 Conditional Init Constructs  Conditional key bindings in the inputrc file.

    1.3.3 Sample Init File  An example inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.1 Readline Init File Syntax

    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 1.3.2 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. The syntax is simple:

     
    set variable value
    

    Here, for example, is how to change from the default Emacs-like key binding to use vi line editing commands:

     
    set editing-mode vi
    

    Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored.

    Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, on (case-insensitive), or 1. Any other value results in the variable being set to off.

    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.

    bind-tty-special-chars
    If set to `on', Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents.

    colored-stats
    If set to `on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is `off'.

    comment-begin
    The string to insert at the beginning of the line when the insert-comment command is executed. The default value is "#".

    completion-display-width
    The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1.

    completion-ignore-case
    If set to `on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is `off'.

    completion-map-case
    If set to `on', and completion-ignore-case is enabled, Readline treats hyphens (`-') and underscores (`_') as equivalent when performing case-insensitive filename matching and completion.

    completion-prefix-display-length
    The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions.

    completion-query-items
    The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. 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. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. 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 prefixing 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'.

    echo-control-characters
    When set to `on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is `on'.

    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'.

    enable-meta-key
    When set to `on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is `on'.

    expand-tilde
    If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'.

    history-preserve-point
    If set to `on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with previous-history or next-history. The default is `off'.

    history-size
    Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited.

    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'.

    input-meta
    If set to `on', Readline will enable eight-bit input (it will not clear the eighth bit in 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.

    isearch-terminators
    The string of characters that should terminate an incremental search without subsequently executing the character as a command (see section 1.2.5 Searching for Commands in the History). If this variable has not been given a value, the characters ESC and C-J will terminate an incremental search.

    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-move, 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.

    keyseq-timeout
    Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (rl_instream by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is 500.

    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.

    mark-symlinked-directories
    If set to `on', completed names which are symbolic links to directories have a slash appended (subject to the value of mark-directories). The default is `off'.

    match-hidden-files
    This variable, when set to `on', causes Readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to `off', the leading `.' must be supplied by the user in the filename to be completed. This variable is `on' by default.

    menu-complete-display-prefix
    If set to `on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is `off'.

    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'.

    page-completions
    If set to `on', Readline uses an internal more-like pager to display a screenful of possible completions at a time. This variable is `on' by default.

    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'.

    revert-all-at-newline
    If set to `on', Readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. 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'.

    show-all-if-unmodified
    This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to `on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is `off'.

    show-mode-in-prompt
    If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs (`@'), vi command (`:'), or vi insertion (`+'). The default value is `off'.

    skip-completed-text
    If set to `on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the `e' in `Makefile' will result in `Makefile' rather than `Makefilefile', assuming there is a single possible completion. 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 need to find 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 on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon -- that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable.

    In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a macro).

    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, M-DEL is bound to the function backward-kill-word, 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).

    A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.

    "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 again 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
    \"
    ", a double quotation mark
    \'
    ', a single quote or apostrophe

    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 eight-bit character whose value is the octal value nnn (one to three digits)
    \xHH
    the eight-bit character whose value is the hexadecimal value HH (one or two hex 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\\": "\\"
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.2 Conditional Init Constructs

    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 a particular value. 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. For example, the following directive reads from `/etc/inputrc':
     
    $include /etc/inputrc
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.3 Sample Init File

    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 system-wide 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
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 Bindable Readline Commands

    1.4.1 Commands For Moving  Moving about the line.
    1.4.2 Commands For Manipulating The History  Getting at previous lines.
    1.4.3 Commands For Changing Text  Commands for changing text.
    1.4.4 Killing And Yanking  Commands for killing and yanking.
    1.4.5 Specifying Numeric Arguments  Specifying numeric arguments, repeat counts.
    1.4.6 Letting Readline Type For You  Getting Readline to do the typing for you.
    1.4.7 Keyboard Macros  Saving and re-executing typed characters
    1.4.8 Some Miscellaneous Commands  Other miscellaneous commands.

    This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default.

    In the following descriptions, point refers to the current cursor position, and mark refers to a cursor position saved by the set-mark command. The text between the point and mark is referred to as the region.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.1 Commands For Moving

    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 the current or 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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.2 Commands For Manipulating The History

    accept-line (Newline or Return)
    Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with add_history(). If this line is a modified history line, the history line is restored to its original state.

    previous-history (C-p)
    Move `back' through the history list, fetching the previous command.

    next-history (C-n)
    Move `forward' through the history list, fetching the next command.

    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 point. The search string must match at the beginning of a history line. 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. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-forward ()
    Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-backward ()
    Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. 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) at point. 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. Once the argument n is computed, the argument is extracted as if the `!n' history expansion had been specified.

    yank-last-arg (M-. or M-_)
    Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the `!$' history expansion had been specified.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.3 Commands For Changing Text

    end-of-file (usually C-d)
    The character indicating end-of-file as set, for example, by stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.

    delete-char (C-d)
    Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.

    backward-delete-char (Rubout)
    Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.

    forward-backward-delete-char ()
    Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key.

    quoted-insert (C-q or 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 have no effect.

    transpose-words (M-t)
    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line.

    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.

    overwrite-mode ()
    Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only emacs mode; vi mode does overwrite differently. Each call to readline() starts in insert mode.

    In overwrite mode, characters bound to self-insert replace the text at point rather than pushing the text to the right. Characters bound to backward-delete-char replace the character before point with a space.

    By default, this command is unbound.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.4 Killing And Yanking

    kill-line (C-k)
    Kill the text from point 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.

    kill-whole-line ()
    Kill all characters on the current line, no matter where point is. By default, this is unbound.

    kill-word (M-d)
    Kill from point 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 point. Word boundaries are the same as backward-word.

    unix-word-rubout (C-w)
    Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.

    unix-filename-rubout ()
    Kill the word behind point, using white space and the slash character as the word boundaries. 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 in the current 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 point.

    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.5 Specifying Numeric Arguments

    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.6 Letting Readline Type For You

    complete (TAB)
    Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion.

    possible-completions (M-?)
    List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    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 (subject to the setting of bell-style) 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.

    menu-complete-backward ()
    Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument.

    delete-char-or-list ()
    Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions. This command is unbound by default.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.7 Keyboard Macros

    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.

    print-last-kbd-macro ()
    Print the last keboard macro defined in a format suitable for the inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.8 Some Miscellaneous Commands

    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)
    Metafy the next character typed. This is for keyboards without a meta key. Typing `ESC f' is equivalent to typing M-f.

    undo (C-_ or 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 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.

    skip-csi-sequence ()
    Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.

    insert-comment (M-#)
    Without a numeric argument, the value of the comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of comment-begin, the value is inserted, otherwise the characters in comment-begin are deleted from the beginning of the line. In either case, 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 output. 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.

    emacs-editing-mode (C-e)
    When in vi command mode, this causes a switch to emacs editing mode.

    vi-editing-mode (M-C-j)
    When in emacs editing mode, this causes a switch to vi editing mode.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 Readline vi Mode

    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 standard.

    In order to switch interactively between emacs and vi editing modes, use the command M-C-j (bound to emacs-editing-mode when in vi mode and to vi-editing-mode in emacs 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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. GNU Free Documentation License

    Version 1.3, 3 November 2008

     
    Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    http://fsf.org/
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    

    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

      A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

      The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

      The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

      The "publisher" means any person or entity that distributes copies of the Document to the public.

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

      4. Preserve all the copyright notices of the Document.

      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

      8. Include an unaltered copy of this License.

      9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

      15. Preserve any Warranty Disclaimers.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

      You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

      However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

      Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

      Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

    12. RELICENSING

      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

      "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

      An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

      The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

    ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.3
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
      Texts.  A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

     
        with the Invariant Sections being list their titles, with
        the Front-Cover Texts being list, and with the Back-Cover Texts
        being list.
    

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents

    1. Command Line Editing
    A. GNU Free Documentation License

    [Top] [Contents] [Index] [ ? ]

    About this document

    This document was generated by Chet Ramey on February, 11 2014 using texi2html

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back previous section in reading order 1.2.2
    [ > ] Forward next section in reading order 1.2.4
    [ << ] FastBack previous or up-and-previous section 1.1
    [ Up ] Up up section 1.2
    [ >> ] FastForward next or up-and-next section 1.3
    [Top] Top cover (top) of document  
    [Contents] Contents table of contents  
    [Index] Index concept index  
    [ ? ] About this page  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four


    This document was generated by Chet Ramey on February, 11 2014 using texi2html readline-6.3/doc/readline.00000664000043600000240000017154312276516310014377 0ustar chetstaffREADLINE(3) READLINE(3) NNAAMMEE readline - get a line from a user with editing SSYYNNOOPPSSIISS ##iinncclluuddee <> ##iinncclluuddee <> ##iinncclluuddee <> _c_h_a_r _* rreeaaddlliinnee (_c_o_n_s_t _c_h_a_r _*_p_r_o_m_p_t); CCOOPPYYRRIIGGHHTT Readline is Copyright (C) 1989-2011 Free Software Foundation, Inc. DDEESSCCRRIIPPTTIIOONN rreeaaddlliinnee will read a line from the terminal and return it, using pprroommpptt as a prompt. If pprroommpptt is NNUULLLL or the empty string, no prompt is issued. The line returned is allocated with _m_a_l_l_o_c(3); the caller must free it when finished. The line returned has the final newline removed, so only the text of the line remains. rreeaaddlliinnee offers editing capabilities while the user is entering the line. By default, the line editing commands are similar to those of emacs. A vi-style line editing interface is also available. This manual page describes only the most basic use of rreeaaddlliinnee. Much more functionality is available; see _T_h_e _G_N_U _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y and _T_h_e _G_N_U _H_i_s_t_o_r_y _L_i_b_r_a_r_y for additional information. RREETTUURRNN VVAALLUUEE rreeaaddlliinnee returns the text of the line read. A blank line returns the empty string. If EEOOFF is encountered while reading a line, and the line is empty, NNUULLLL is returned. If an EEOOFF is read with a non-empty line, it is treated as a newline. NNOOTTAATTIIOONN An Emacs-style notation is used to denote keystrokes. Control keys are denoted by C-_k_e_y, e.g., C-n means Control-N. Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x means Meta-X. (On keyboards without a _m_e_t_a key, M-_x means ESC _x, i.e., press the Escape key then the _x key. This makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means ESC-Control-_x, or press the Escape key then hold the Control key while pressing the _x key.) Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which normally act as a repeat count. Sometimes, however, it is the sign of the argument that is significant. Passing a negative argument to a command that acts in the forward direction (e.g., kkiillll--lliinnee) causes that command to act in a backward direction. Commands whose behavior with arguments deviates from this are noted. When a command is described as _k_i_l_l_i_n_g text, the text deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one unit, which can be yanked all at once. Commands which do not kill text separate the chunks of text on the kill ring. IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE Readline is customized by putting commands in an initialization file (the _i_n_p_u_t_r_c file). The name of this file is taken from the value of the IINNPPUUTTRRCC environment variable. If that variable is unset, the default is _~_/_._i_n_p_u_t_r_c. If that file does not exist or cannot be read, the ultimate default is _/_e_t_c_/_i_n_p_u_t_r_c. When a program which uses the readline library starts up, the init file is read, and the key bindings and variables are set. 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. Other lines denote key bindings and variable settings. Each program using this library may add its own commands and bindings. For example, placing M-Control-u: universal-argument or C-Meta-u: universal-argument into the _i_n_p_u_t_r_c would make M-C-u execute the readline command _u_n_i_v_e_r_- _s_a_l_-_a_r_g_u_m_e_n_t. The following symbolic character names are recognized while processing key bindings: _D_E_L, _E_S_C, _E_S_C_A_P_E, _L_F_D, _N_E_W_L_I_N_E, _R_E_T, _R_E_T_U_R_N, _R_U_B_O_U_T, _S_P_A_C_E, _S_P_C, and _T_A_B. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a _m_a_c_r_o). KKeeyy BBiinnddiinnggss The syntax for controlling key bindings in the _i_n_p_u_t_r_c file is simple. All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be speci- fied in one of two ways: as a symbolic key name, possibly with _M_e_t_a_- or _C_o_n_t_r_o_l_- prefixes, or as a key sequence. The name and key sequence are separated by a colon. There can be no whitespace between the name and the colon. When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e 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 uunniivveerrssaall--aarrgguummeenntt, _M_-_D_E_L is bound to the function bbaacckkwwaarrdd--kkiillll--wwoorrdd, 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). In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyysseeqq differs from kkeeyynnaammee above in that strings denoting an entire key sequence may be specified by placing the sequence within double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized. "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" In this example, _C_-_u is again bound to the function uunniivveerrssaall--aarrgguummeenntt. _C_-_x _C_-_r is bound to the function rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is bound to insert the text ``Function Key 1''. The full set of GNU Emacs style escape sequences available when speci- fying key sequences is \\CC-- control prefix \\MM-- meta prefix \\ee an escape character \\\\ backslash \\"" literal ", a double quote \\'' literal ', a single quote In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: \\aa alert (bell) \\bb backspace \\dd delete \\ff form feed \\nn newline \\rr carriage return \\tt horizontal tab \\vv vertical tab \\_n_n_n the eight-bit character whose value is the octal value _n_n_n (one to three digits) \\xx_H_H the eight-bit character whose value is the hexadecimal value _H_H (one or two hex digits) When entering the text of a macro, single or double quotes should 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 '. BBaasshh allows the current readline key bindings to be displayed or modi- fied with the bbiinndd builtin command. The editing mode may be switched during interactive use by using the --oo option to the sseett builtin com- mand. Other programs using this library provide similar mechanisms. The _i_n_p_u_t_r_c file may be edited and re-read if a program does not pro- vide any other means to incorporate new bindings. VVaarriiaabblleess Readline has variables that can be used to further customize its behav- ior. A variable may be set in the _i_n_p_u_t_r_c file with a statement of the form sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e Except where noted, readline variables can take the values OOnn or OOffff (without regard to case). Unrecognized variable names are ignored. When a variable value is read, empty or null values, "on" (case-insen- sitive), and "1" are equivalent to OOnn. All other values are equivalent to OOffff. The variables and their default values are: bbeellll--ssttyyllee ((aauuddiibbllee)) Controls what happens when readline wants to ring the terminal bell. If set to nnoonnee, readline never rings the bell. If set to vviissiibbllee, readline uses a visible bell if one is available. If set to aauuddiibbllee, readline attempts to ring the terminal's bell. bbiinndd--ttttyy--ssppeecciiaall--cchhaarrss ((OOnn)) If set to OOnn, readline attempts to bind the control characters treated specially by the kernel's terminal driver to their read- line equivalents. ccoolloorreedd--ssttaattss ((OOffff)) If set to OOnn, readline displays possible completions using dif- ferent colors to indicate their file type. The color defini- tions are taken from the value of the LLSS__CCOOLLOORRSS environment variable. ccoommmmeenntt--bbeeggiinn ((````##'''')) The string that is inserted in vvii mode when the iinnsseerrtt--ccoommmmeenntt command is executed. This command is bound to MM--## in emacs mode and to ## in vi command mode. ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh ((--11)) The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff)) If set to OOnn, readline performs filename matching and completion in a case-insensitive fashion. ccoommpplleettiioonn--mmaapp--ccaassee ((OOffff)) If set to OOnn, and ccoommpplleettiioonn--iiggnnoorree--ccaassee is enabled, readline treats hyphens (_-) and underscores (__) as equivalent when per- forming case-insensitive filename matching and completion. ccoommpplleettiioonn--pprreeffiixx--ddiissppllaayy--lleennggtthh ((00)) The length in characters of the common prefix of a list of pos- sible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possi- ble completions. ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) This determines when the user is queried about viewing the num- ber of possible completions generated by the ppoossssiibbllee--ccoommppllee-- ttiioonnss command. It may be set to any integer value greater than or equal to zero. If the number of possible completions is greater than or equal to the value of this variable, the user is asked whether or not he wishes to view them; otherwise they are simply listed on the terminal. A negative value causes readline to never ask. ccoonnvveerrtt--mmeettaa ((OOnn)) If set to OOnn, readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing it with an escape character (in effect, using escape as the _m_e_t_a _p_r_e_f_i_x). ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) If set to OOnn, readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to sseellff--iinnsseerrtt. eeddiittiinngg--mmooddee ((eemmaaccss)) Controls whether readline begins with a set of key bindings sim- ilar to _E_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can be set to either eemmaaccss or vvii. eecchhoo--ccoonnttrrooll--cchhaarraacctteerrss ((OOnn)) When set to OOnn, on operating systems that indicate they support it, readline echoes a character corresponding to a signal gener- ated from the keyboard. eennaabbllee--kkeeyyppaadd ((OOffff)) When set to OOnn, readline will try to enable the application key- pad when it is called. Some systems need this to enable the arrow keys. eennaabbllee--mmeettaa--kkeeyy ((OOnn)) When set to OOnn, readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. eexxppaanndd--ttiillddee ((OOffff)) If set to OOnn, tilde expansion is performed when readline attempts word completion. hhiissttoorryy--pprreesseerrvvee--ppooiinntt ((OOffff)) If set to OOnn, the history code attempts to place point at the same location on each history line retrieved with pprreevviioouuss--hhiiss-- ttoorryy or nneexxtt--hhiissttoorryy. hhiissttoorryy--ssiizzee ((00)) Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) When set to OOnn, makes readline use a single line for display, scrolling the input horizontally on a single screen line when it becomes longer than the screen width rather than wrapping to a new line. iinnppuutt--mmeettaa ((OOffff)) If set to OOnn, readline will enable eight-bit input (that is, it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The name mmeettaa--ffllaagg is a synonym for this variable. iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[ CC--JJ'''')) The string of characters that should terminate an incremental search without subsequently executing the character as a com- mand. If this variable has not been given a value, the charac- ters _E_S_C and _C_-_J will terminate an incremental search. kkeeyymmaapp ((eemmaaccss)) Set the current readline keymap. The set of legal keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t. _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s. The value of eeddiittiinngg--mmooddee also affects the default keymap. kkeeyysseeqq--ttiimmeeoouutt ((550000)) Specifies the duration _r_e_a_d_l_i_n_e will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, _r_e_a_d_l_i_n_e will use the shorter but complete key sequence. The value is specified in milliseconds, so a value of 1000 means that _r_e_a_d_l_i_n_e will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, _r_e_a_d_l_i_n_e will wait until another key is pressed to decide which key sequence to complete. mmaarrkk--ddiirreeccttoorriieess ((OOnn)) If set to OOnn, completed directory names have a slash appended. mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) If set to OOnn, history lines that have been modified are dis- played with a preceding asterisk (**). mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) If set to OOnn, completed names which are symbolic links to direc- tories have a slash appended (subject to the value of mmaarrkk--ddiirreeccttoorriieess). mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) This variable, when set to OOnn, causes readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to OOffff, the leading `.' must be supplied by the user in the filename to be completed. mmeennuu--ccoommpplleettee--ddiissppllaayy--pprreeffiixx ((OOffff)) If set to OOnn, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. oouuttppuutt--mmeettaa ((OOffff)) If set to OOnn, readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. ppaaggee--ccoommpplleettiioonnss ((OOnn)) If set to OOnn, readline uses an internal _m_o_r_e-like pager to dis- play a screenful of possible completions at a time. pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) If set to OOnn, readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. rreevveerrtt--aallll--aatt--nneewwlliinnee ((OOffff)) If set to OOnn, readline will undo all changes to history lines before returning when aacccceepptt--lliinnee is executed. By default, his- tory lines may be modified and retain individual undo lists across calls to rreeaaddlliinnee. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) This alters the default behavior of the completion functions. If set to OOnn, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. sshhooww--aallll--iiff--uunnmmooddiiffiieedd ((OOffff)) This alters the default behavior of the completion functions in a fashion similar to sshhooww--aallll--iiff--aammbbiigguuoouuss. If set to OOnn, words which have more than one possible completion without any possi- ble partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. sshhooww--mmooddee--iinn--pprroommpptt ((OOffff)) If set to OOnn, add a character to the beginning of the prompt indicating the editing mode: emacs (@), vi command (:) or vi insertion (+). sskkiipp--ccoommpplleetteedd--tteexxtt ((OOffff)) If set to OOnn, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. vviissiibbllee--ssttaattss ((OOffff)) If set to OOnn, a character denoting a file's type as reported by _s_t_a_t(2) is appended to the filename when listing possible com- pletions. CCoonnddiittiioonnaall CCoonnssttrruuccttss 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. $$iiff The $$iiff construct allows bindings to be made based on the edit- ing 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. mmooddee The mmooddee== form of the $$iiff directive is used to test whether readline is in emacs or vi mode. This may be used in conjunction with the sseett kkeeyymmaapp command, for instance, to set bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_-_c_t_l_x keymaps only if readline is starting out in emacs mode. tteerrmm The tteerrmm== 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 the full name of the terminal and the portion of the terminal name before the first --. This allows _s_u_n to match both _s_u_n and _s_u_n_-_c_m_d, for instance. aapppplliiccaattiioonn The aapppplliiccaattiioonn construct is used to include application- specific settings. Each program using the readline library sets the _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization file can test for a particular value. 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 bbaasshh: $$iiff Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $$eennddiiff $$eennddiiff This command, as seen in the previous example, terminates an $$iiff command. $$eellssee Commands in this branch of the $$iiff directive are executed if the test fails. $$iinncclluuddee This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the follow- ing directive would read _/_e_t_c_/_i_n_p_u_t_r_c: $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c SSEEAARRCCHHIINNGG Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_t_a_l. Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, read- line displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type CC--rr. Typing CC--ss searches forward through the history. The characters present in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are used to terminate an incremental search. If that variable has not been assigned a value the _E_s_c_a_p_e and CC--JJ characters will terminate an incremental search. CC--GG will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type CC--ss or CC--rr as appropriate. This will search backward or forward in the history for the next line matching the search string typed so far. Any other key sequence bound to a readline command will terminate the search and exe- cute that command. For instance, a newline will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. EEDDIITTIINNGG CCOOMMMMAANNDDSS The following is a list of the names of the commands and the default key sequences to which they are bound. Command names without an accom- panying key sequence are unbound by default. In the following descriptions, _p_o_i_n_t refers to the current cursor posi- tion, and _m_a_r_k refers to a cursor position saved by the sseett--mmaarrkk com- mand. The text between the point and mark is referred to as the _r_e_g_i_o_n. CCoommmmaannddss ffoorr MMoovviinngg bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) Move to the start of the current line. eenndd--ooff--lliinnee ((CC--ee)) Move to the end of the line. ffoorrwwaarrdd--cchhaarr ((CC--ff)) Move forward a character. bbaacckkwwaarrdd--cchhaarr ((CC--bb)) Move back a character. ffoorrwwaarrdd--wwoorrdd ((MM--ff)) Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits). bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). cclleeaarr--ssccrreeeenn ((CC--ll)) Clear the screen leaving the current line at the top of the screen. With an argument, refresh the current line without clearing the screen. rreeddrraaww--ccuurrrreenntt--lliinnee Refresh the current line. CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with aadddd__hhiissttoorryy(()). If the line is a modified history line, the history line is restored to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) Fetch the previous command from the history list, moving back in the list. nneexxtt--hhiissttoorryy ((CC--nn)) Fetch the next command from the history list, moving forward in the list. bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) Move to the first line in the history. eenndd--ooff--hhiissttoorryy ((MM-->>)) Move to the end of the input history, i.e., the line currently being entered. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search. ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search. nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) Search backward through the history starting at the current line using a non-incremental search for a string supplied by the user. nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) Search forward through the history using a non-incremental search for a string supplied by the user. hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd Search backward through the history for the string of characters between the start of the current line and the current cursor position (the _p_o_i_n_t). The search string must match at the beginning of a history line. This is a non-incremental search. hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--bbaacckkwwaarrdd Search backward through the history for the string of characters between the start of the current line and the current cursor position (the _p_o_i_n_t). The search string may match anywhere in a history line. This is a non-incremental search. hhiissttoorryy--ssuubbssttrriinngg--sseeaarrcchh--ffoorrwwaarrdd Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non- incremental search. yyaannkk--nntthh--aarrgg ((MM--CC--yy)) Insert the first argument to the previous command (usually the second word on the previous line) at point. 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. Once the argument _n is computed, the argument is extracted as if the "!_n" history expansion had been specified. yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) Insert the last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified. CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt _e_n_d_-_o_f_-_f_i_l_e ((uussuuaallllyy CC--dd)) The character indicating end-of-file as set, for example, by ``stty''. If this character is read when there are no charac- ters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EEOOFF. ddeelleettee--cchhaarr ((CC--dd)) Delete the character at point. If this function is bound to the same character as the tty EEOOFF character, as CC--dd commonly is, see above for the effects. bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring. ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cur- sor is deleted. qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) Add the next character that you type to the line verbatim. This is how to insert characters like CC--qq, for example. ttaabb--iinnsseerrtt ((MM--TTAABB)) Insert a tab character. sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) Insert the character typed. ttrraannssppoossee--cchhaarrss ((CC--tt)) Drag the character before point forward over the character at point, moving point forward as well. If point is at the end of the line, then this transposes the two characters before point. Negative arguments have no effect. ttrraannssppoossee--wwoorrddss ((MM--tt)) Drag the word before point past the word after point, moving point over that word as well. If point is at the end of the line, this transposes the last two words on the line. uuppccaassee--wwoorrdd ((MM--uu)) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move point. ddoowwnnccaassee--wwoorrdd ((MM--ll)) Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move point. ccaappiittaalliizzee--wwoorrdd ((MM--cc)) Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move point. oovveerrwwrriittee--mmooddee Toggle overwrite mode. With an explicit positive numeric argu- ment, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only eemmaaccss mode; vvii mode does overwrite differently. Each call to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In overwrite mode, charac- ters bound to sseellff--iinnsseerrtt replace the text at point rather than pushing the text to the right. Characters bound to bbaacckk-- wwaarrdd--ddeelleettee--cchhaarr replace the character before point with a space. By default, this command is unbound. KKiilllliinngg aanndd YYaannkkiinngg kkiillll--lliinnee ((CC--kk)) Kill the text from point to the end of the line. bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) Kill backward to the beginning of the line. uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. kkiillll--wwhhoollee--lliinnee Kill all characters on the current line, no matter where point is. kkiillll--wwoorrdd ((MM--dd)) Kill from point the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by ffoorrwwaarrdd--wwoorrdd. bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) Kill the word behind point. Word boundaries are the same as those used by bbaacckkwwaarrdd--wwoorrdd. uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) Kill the word behind point, using white space as a word bound- ary. The killed text is saved on the kill-ring. uunniixx--ffiilleennaammee--rruubboouutt Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) Delete all spaces and tabs around point. kkiillll--rreeggiioonn Kill the text between the point and _m_a_r_k (saved cursor posi- tion). This text is referred to as the _r_e_g_i_o_n. ccooppyy--rreeggiioonn--aass--kkiillll Copy the text in the region to the kill buffer. ccooppyy--bbaacckkwwaarrdd--wwoorrdd Copy the word before point to the kill buffer. The word bound- aries are the same as bbaacckkwwaarrdd--wwoorrdd. ccooppyy--ffoorrwwaarrdd--wwoorrdd Copy the word following point to the kill buffer. The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd. yyaannkk ((CC--yy)) Yank the top of the kill ring into the buffer at point. yyaannkk--ppoopp ((MM--yy)) Rotate the kill ring, and yank the new top. Only works follow- ing yyaannkk or yyaannkk--ppoopp. NNuummeerriicc AArrgguummeennttss ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument. uunniivveerrssaall--aarrgguummeenntt 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 fol- lowed by digits, executing uunniivveerrssaall--aarrgguummeenntt 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 argu- ment count four, a second time makes the argument count sixteen, and so on. CCoommpplleettiinngg ccoommpplleettee ((TTAABB)) Attempt to perform completion on the text before point. The actual completion performed is application-specific. BBaasshh, for instance, attempts completion treating the text as a variable (if the text begins with $$), username (if the text begins with ~~), hostname (if the text begins with @@), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. GGddbb, on the other hand, allows completion of program functions and variables, and only attempts filename completion under certain circumstances. ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) List the possible completions of the text before point. When displaying completions, readline sets the number of columns used for display to the value of ccoommpplleettiioonn--ddiissppllaayy--wwiiddtthh, the value of the environment variable CCOOLLUUMMNNSS, or the screen width, in that order. iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) Insert all completions of the text before point that would have been generated by ppoossssiibbllee--ccoommpplleettiioonnss. mmeennuu--ccoommpplleettee Similar to ccoommpplleettee, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of mmeennuu--ccoommpplleettee steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bbeellll--ssttyyllee) 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 TTAABB, but is unbound by default. mmeennuu--ccoommpplleettee--bbaacckkwwaarrdd Identical to mmeennuu--ccoommpplleettee, but moves backward through the list of possible completions, as if mmeennuu--ccoommpplleettee had been given a negative argument. This command is unbound by default. ddeelleettee--cchhaarr--oorr--lliisstt Deletes the character under the cursor if not at the beginning or end of the line (like ddeelleettee--cchhaarr). If at the end of the line, behaves identically to ppoossssiibbllee--ccoommpplleettiioonnss. KKeeyybbooaarrdd MMaaccrrooss ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) Begin saving the characters typed into the current keyboard macro. eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) Stop saving the characters typed into the current keyboard macro and store the definition. ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) Re-execute the last keyboard macro defined, by making the char- acters in the macro appear as if typed at the keyboard. pprriinntt--llaasstt--kkbbdd--mmaaccrroo (()) Print the last keyboard macro defined in a format suitable for the _i_n_p_u_t_r_c file. MMiisscceellllaanneeoouuss rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) Read in the contents of the _i_n_p_u_t_r_c file, and incorporate any bindings or variable assignments found there. aabboorrtt ((CC--gg)) Abort the current editing command and ring the terminal's bell (subject to the setting of bbeellll--ssttyyllee). ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......)) If the metafied character _x is lowercase, run the command that is bound to the corresponding uppercase character. pprreeffiixx--mmeettaa ((EESSCC)) Metafy the next character typed. EESSCC ff is equivalent to MMeettaa--ff. uunnddoo ((CC--__,, CC--xx CC--uu)) Incremental undo, separately remembered for each line. rreevveerrtt--lliinnee ((MM--rr)) Undo all changes made to this line. This is like executing the uunnddoo command enough times to return the line to its initial state. ttiillddee--eexxppaanndd ((MM--&&)) Perform tilde expansion on the current word. sseett--mmaarrkk ((CC--@@,, MM--<>)) Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) 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. cchhaarraacctteerr--sseeaarrcchh ((CC--]])) A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occur- rences. cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) A character is read and point is moved to the previous occur- rence of that character. A negative count searches for subse- quent occurrences. sskkiipp--ccssii--sseeqquueennccee Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. iinnsseerrtt--ccoommmmeenntt ((MM--##)) Without a numeric argument, the value of the readline ccoomm-- mmeenntt--bbeeggiinn variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of ccoommmmeenntt--bbeeggiinn, the value is inserted, other- wise the characters in ccoommmmeenntt--bbeeggiinn are deleted from the begin- ning of the line. In either case, the line is accepted as if a newline had been typed. The default value of ccoommmmeenntt--bbeeggiinn makes the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. dduummpp--ffuunnccttiioonnss Print all of the functions and their key bindings to the read- line output stream. If a numeric argument is supplied, the out- put is formatted in such a way that it can be made part of an _i_n_p_u_t_r_c file. dduummpp--vvaarriiaabblleess 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 _i_n_p_u_t_r_c file. dduummpp--mmaaccrrooss Print all of the readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an _i_n_p_u_t_r_c file. eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee)) When in vvii command mode, this causes a switch to eemmaaccss editing mode. vvii--eeddiittiinngg--mmooddee ((MM--CC--jj)) When in eemmaaccss editing mode, this causes a switch to vvii editing mode. DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS The following is a list of the default emacs and vi bindings. Charac- ters with the eighth bit set are written as M-, 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 sseellff--iinnsseerrtt function, which just inserts the given character into the input line. In vi insertion mode, all characters not specifically men- tioned are bound to sseellff--iinnsseerrtt. Characters assigned to signal genera- tion by _s_t_t_y(1) or the terminal driver, such as C-Z or C-C, retain that function. Upper and lower case metafied characters are bound to the same function in the emacs mode meta keymap. The remaining characters are unbound, which causes readline to ring the bell (subject to the setting of the bbeellll--ssttyyllee variable). 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 "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 "M-Y" yank-pop "M-\" delete-horizontal-space "M-~" tilde-expand "M-C-?" backward-kill-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 "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-_" vi-undo " " 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 "p" vi-put "r" vi-change-char "s" vi-subst "t" vi-char-search "u" vi-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 bfox@gnu.org Chet Ramey, Case Western Reserve University chet.ramey@case.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_._r_a_m_e_y_@_c_a_s_e_._e_d_u. BBUUGGSS It's too big and too slow. GNU Readline 6.3 2014 January 6 READLINE(3) readline-6.3/doc/history.00000664000043600000240000007152512276516310014314 0ustar chetstaffHISTORY(3) HISTORY(3) NNAAMMEE history - GNU History Library CCOOPPYYRRIIGGHHTT The GNU History Library is Copyright (C) 1989-2011 by the Free Software Foundation, Inc. DDEESSCCRRIIPPTTIIOONN Many programs read input from the user a line at a time. The GNU His- tory library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. HHIISSTTOORRYY EEXXPPAANNSSIIOONN The history library supports a history expansion feature that is iden- tical to the history expansion in bbaasshh.. This section describes what syntax features are available. History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. History expansion is usually performed immediately after a complete line is read. It takes place in two parts. The first is to determine which line from the history list to use during substitution. The sec- ond is to select portions of that line for inclusion into the current one. The line selected from the history is the _e_v_e_n_t, and the portions of that line that are acted upon are _w_o_r_d_s. Various _m_o_d_i_f_i_e_r_s are available to manipulate the selected words. The line is broken into words in the same fashion as bbaasshh does when reading input, so that sev- eral words that would otherwise be separated are considered one word when surrounded by quotes (see the description of hhiissttoorryy__ttookkeenniizzee(()) below). History expansions are introduced by the appearance of the history expansion character, which is !! by default. Only backslash (\\) and single quotes can quote the history expansion character. EEvveenntt DDeessiiggnnaattoorrss An event designator is a reference to a command line entry in the his- tory list. Unless the reference is absolute, events are relative to the current position in the history list. !! Start a history substitution, except when followed by a bbllaannkk, newline, = or (. !!_n Refer to command line _n. !!--_n Refer to the current command minus _n. !!!! Refer to the previous command. This is a synonym for `!-1'. !!_s_t_r_i_n_g Refer to the most recent command preceding the current position in the history list starting with _s_t_r_i_n_g. !!??_s_t_r_i_n_g[[??]] Refer to the most recent command preceding the current position in the history list containing _s_t_r_i_n_g. The trailing ?? may be omitted if _s_t_r_i_n_g is followed immediately by a newline. ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^ Quick substitution. Repeat the last command, replacing _s_t_r_i_n_g_1 with _s_t_r_i_n_g_2. Equivalent to ``!!:s/_s_t_r_i_n_g_1/_s_t_r_i_n_g_2/'' (see MMoodd-- iiffiieerrss below). !!## The entire command line typed so far. WWoorrdd DDeessiiggnnaattoorrss Word designators are used to select desired words from the event. A :: separates the event specification from the word designator. It may be omitted if the word designator begins with a ^^, $$, **, --, or %%. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line sepa- rated by single spaces. 00 ((zzeerroo)) The zeroth word. For the shell, this is the command word. _n The _nth word. ^^ The first argument. That is, word 1. $$ The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line. %% The word matched by the most recent `?_s_t_r_i_n_g?' search. _x--_y A range of words; `-_y' abbreviates `0-_y'. ** All of the words but the zeroth. This is a synonym for `_1_-_$'. It is not an error to use ** if there is just one word in the event; the empty string is returned in that case. xx** Abbreviates _x_-_$. xx-- Abbreviates _x_-_$ like xx**, but omits the last word. If a word designator is supplied without an event specification, the previous command is used as the event. MMooddiiffiieerrss After the optional word designator, there may appear a sequence of one or more of the following modifiers, each preceded by a `:'. hh Remove a trailing file name component, leaving only the head. tt Remove all leading file name components, leaving the tail. rr Remove a trailing suffix of the form _._x_x_x, leaving the basename. ee Remove all but the trailing suffix. pp Print the new command but do not execute it. qq Quote the substituted words, escaping further substitutions. xx Quote the substituted words as with qq, but break into words at bbllaannkkss and newlines. ss//_o_l_d//_n_e_w// Substitute _n_e_w for the first occurrence of _o_l_d in the event line. Any delimiter can be used in place of /. The final delimiter is optional if it is the last character of the event line. The delimiter may be quoted in _o_l_d and _n_e_w with a single backslash. If & appears in _n_e_w, it is replaced by _o_l_d. A sin- gle backslash will quote the &. If _o_l_d is null, it is set to the last _o_l_d substituted, or, if no previous history substitu- tions took place, the last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. && Repeat the previous substitution. gg Cause changes to be applied over the entire event line. This is used in conjunction with `::ss' (e.g., `::ggss//_o_l_d//_n_e_w//') or `::&&'. If used with `::ss', any delimiter can be used in place of /, and the final delimiter is optional if it is the last character of the event line. An aa may be used as a synonym for gg. GG Apply the following `ss' modifier once to each word in the event line. PPRROOGGRRAAMMMMIINNGG WWIITTHH HHIISSTTOORRYY FFUUNNCCTTIIOONNSS This section describes how to use the History library in other pro- grams. IInnttrroodduuccttiioonn ttoo HHiissttoorryy The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history _e_x_p_a_n_s_i_o_n function is avail- able which provides for a consistent user interface across different programs. The user using programs written with the History library has the bene- fit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are identical to the history substitution provided by bbaasshh. If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advan- tage of command line editing. Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file _<_r_e_a_d_l_i_n_e_/_h_i_s_t_o_r_y_._h_> in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the pub- lic data structures. HHiissttoorryy SSttoorraaggee The history list is an array of history entries. A history entry is declared as follows: _t_y_p_e_d_e_f _v_o_i_d _* hhiissttddaattaa__tt;; typedef struct _hist_entry { char *line; char *timestamp; histdata_t data; } HIST_ENTRY; The history list itself might therefore be declared as _H_I_S_T___E_N_T_R_Y _*_* tthhee__hhiissttoorryy__lliisstt;; The state of the History library is encapsulated into a single struc- ture: /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; If the flags member includes HHSS__SSTTIIFFLLEEDD, the history has been stifled. HHiissttoorryy FFuunnccttiioonnss This section describes the calling sequence for the various functions exported by the GNU History library. IInniittiiaalliizziinngg HHiissttoorryy aanndd SSttaattee MMaannaaggeemmeenntt This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. _v_o_i_d uussiinngg__hhiissttoorryy (_v_o_i_d) Begin a session in which the history functions might be used. This initializes the interactive variables. _H_I_S_T_O_R_Y___S_T_A_T_E _* hhiissttoorryy__ggeett__hhiissttoorryy__ssttaattee (_v_o_i_d) Return a structure describing the current state of the input history. _v_o_i_d hhiissttoorryy__sseett__hhiissttoorryy__ssttaattee (_H_I_S_T_O_R_Y___S_T_A_T_E _*_s_t_a_t_e) Set the state of the history list according to _s_t_a_t_e. HHiissttoorryy LLiisstt MMaannaaggeemmeenntt These functions manage individual entries on the history list, or set parameters managing the list itself. _v_o_i_d aadddd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) Place _s_t_r_i_n_g at the end of the history list. The associated data field (if any) is set to NNUULLLL. _v_o_i_d aadddd__hhiissttoorryy__ttiimmee (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) Change the time stamp associated with the most recent history entry to _s_t_r_i_n_g. _H_I_S_T___E_N_T_R_Y _* rreemmoovvee__hhiissttoorryy (_i_n_t _w_h_i_c_h) Remove history entry at offset _w_h_i_c_h from the history. The removed element is returned so you can free the line, data, and containing structure. _h_i_s_t_d_a_t_a___t ffrreeee__hhiissttoorryy__eennttrryy (_H_I_S_T___E_N_T_R_Y _*_h_i_s_t_e_n_t) Free the history entry _h_i_s_t_e_n_t and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. _H_I_S_T___E_N_T_R_Y _* rreeppllaaccee__hhiissttoorryy__eennttrryy (_i_n_t _w_h_i_c_h_, _c_o_n_s_t _c_h_a_r _*_l_i_n_e_, _h_i_s_t_- _d_a_t_a___t _d_a_t_a) Make the history entry at offset _w_h_i_c_h have _l_i_n_e and _d_a_t_a. This returns the old entry so the caller can dispose of any application-spe- cific data. In the case of an invalid _w_h_i_c_h, a NNUULLLL pointer is returned. _v_o_i_d cclleeaarr__hhiissttoorryy (_v_o_i_d) Clear the history list by deleting all the entries. _v_o_i_d ssttiiffllee__hhiissttoorryy (_i_n_t _m_a_x) Stifle the history list, remembering only the last _m_a_x entries. _i_n_t uunnssttiiffllee__hhiissttoorryy (_v_o_i_d) Stop stifling the history. This returns the previously-set maximum number of history entries (as set by ssttiiffllee__hhiissttoorryy(())). history was stifled. The value is positive if the history was stifled, negative if it wasn't. _i_n_t hhiissttoorryy__iiss__ssttiifflleedd (_v_o_i_d) Returns non-zero if the history is stifled, zero if it is not. IInnffoorrmmaattiioonn AAbboouutt tthhee HHiissttoorryy LLiisstt These functions return information about the entire history list or individual list entries. _H_I_S_T___E_N_T_R_Y _*_* hhiissttoorryy__lliisstt (_v_o_i_d) Return a NNUULLLL terminated array of _H_I_S_T___E_N_T_R_Y _* which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return NNUULLLL. _i_n_t wwhheerree__hhiissttoorryy (_v_o_i_d) Returns the offset of the current history element. _H_I_S_T___E_N_T_R_Y _* ccuurrrreenntt__hhiissttoorryy (_v_o_i_d) Return the history entry at the current position, as determined by wwhheerree__hhiissttoorryy(()). If there is no entry there, return a NNUULLLL pointer. _H_I_S_T___E_N_T_R_Y _* hhiissttoorryy__ggeett (_i_n_t _o_f_f_s_e_t) Return the history entry at position _o_f_f_s_e_t, starting from hhiiss-- ttoorryy__bbaassee. If there is no entry there, or if _o_f_f_s_e_t is greater than the history length, return a NNUULLLL pointer. _t_i_m_e___t hhiissttoorryy__ggeett__ttiimmee (_H_I_S_T___E_N_T_R_Y _*) Return the time stamp associated with the history entry passed as the argument. _i_n_t hhiissttoorryy__ttoottaall__bbyytteess (_v_o_i_d) Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history. MMoovviinngg AArroouunndd tthhee HHiissttoorryy LLiisstt These functions allow the current index into the history list to be set or changed. _i_n_t hhiissttoorryy__sseett__ppooss (_i_n_t _p_o_s) Set the current history offset to _p_o_s, an absolute index into the list. Returns 1 on success, 0 if _p_o_s is less than zero or greater than the number of history entries. _H_I_S_T___E_N_T_R_Y _* pprreevviioouuss__hhiissttoorryy (_v_o_i_d) Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NNUULLLL pointer. _H_I_S_T___E_N_T_R_Y _* nneexxtt__hhiissttoorryy (_v_o_i_d) Move the current history offset forward to the next history entry, and return the a pointer to that entry. If there is no next entry, return a NNUULLLL pointer. SSeeaarrcchhiinngg tthhee HHiissttoorryy LLiisstt These functions allow searching of the history list for entries con- taining a specific string. Searching may be performed both forward and backward from the current history position. The search may be _a_n_c_h_o_r_e_d, meaning that the string must match at the beginning of the history entry. _i_n_t hhiissttoorryy__sseeaarrcchh (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n) Search the history for _s_t_r_i_n_g, starting at the current history offset. If _d_i_r_e_c_t_i_o_n is less than 0, then the search is through previous entries, otherwise through subsequent entries. If _s_t_r_i_n_g is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where _s_t_r_i_n_g was found. Otherwise, nothing is changed, and a -1 is returned. _i_n_t hhiissttoorryy__sseeaarrcchh__pprreeffiixx (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n) Search the history for _s_t_r_i_n_g, starting at the current history offset. The search is anchored: matching lines must begin with _s_t_r_i_n_g. If _d_i_r_e_c_t_i_o_n is less than 0, then the search is through previous entries, otherwise through subsequent entries. If _s_t_r_i_n_g is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. _i_n_t hhiissttoorryy__sseeaarrcchh__ppooss (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n_, _i_n_t _p_o_s) Search for _s_t_r_i_n_g in the history list, starting at _p_o_s, an absolute index into the list. If _d_i_r_e_c_t_i_o_n is negative, the search proceeds backward from _p_o_s, otherwise forward. Returns the absolute index of the history element where _s_t_r_i_n_g was found, or -1 otherwise. MMaannaaggiinngg tthhee HHiissttoorryy FFiillee The History library can read the history from and write it to a file. This section documents the functions for managing a history file. _i_n_t rreeaadd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) Add the contents of _f_i_l_e_n_a_m_e to the history list, a line at a time. If _f_i_l_e_n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_t_o_r_y. Returns 0 if successful, or eerrrrnnoo if not. _i_n_t rreeaadd__hhiissttoorryy__rraannggee (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e_, _i_n_t _f_r_o_m_, _i_n_t _t_o) Read a range of lines from _f_i_l_e_n_a_m_e, adding them to the history list. Start reading at line _f_r_o_m and end at _t_o. If _f_r_o_m is zero, start at the beginning. If _t_o is less than _f_r_o_m, then read until the end of the file. If _f_i_l_e_n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_t_o_r_y. Returns 0 if successful, or eerrrrnnoo if not. _i_n_t wwrriittee__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) Write the current history to _f_i_l_e_n_a_m_e, overwriting _f_i_l_e_n_a_m_e if neces- sary. If _f_i_l_e_n_a_m_e is NNUULLLL, then write the history list to _~_/_._h_i_s_t_o_r_y. Returns 0 on success, or eerrrrnnoo on a read or write error. _i_n_t aappppeenndd__hhiissttoorryy (_i_n_t _n_e_l_e_m_e_n_t_s_, _c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) Append the last _n_e_l_e_m_e_n_t_s of the history list to _f_i_l_e_n_a_m_e. If _f_i_l_e_n_a_m_e is NNUULLLL, then append to _~_/_._h_i_s_t_o_r_y. Returns 0 on success, or eerrrrnnoo on a read or write error. _i_n_t hhiissttoorryy__ttrruunnccaattee__ffiillee (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e_, _i_n_t _n_l_i_n_e_s) Truncate the history file _f_i_l_e_n_a_m_e, leaving only the last _n_l_i_n_e_s lines. If _f_i_l_e_n_a_m_e is NNUULLLL, then _~_/_._h_i_s_t_o_r_y is truncated. Returns 0 on suc- cess, or eerrrrnnoo on failure. HHiissttoorryy EExxppaannssiioonn These functions implement history expansion. _i_n_t hhiissttoorryy__eexxppaanndd (_c_h_a_r _*_s_t_r_i_n_g_, _c_h_a_r _*_*_o_u_t_p_u_t) Expand _s_t_r_i_n_g, placing the result into _o_u_t_p_u_t, a pointer to a string. Returns: 0 If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); 1 if expansions did take place; -1 if there was an error in expansion; 2 if the returned line should be displayed, but not exe- cuted, as with the ::pp modifier. If an error ocurred in expansion, then _o_u_t_p_u_t contains a descriptive error message. _c_h_a_r _* ggeett__hhiissttoorryy__eevveenntt (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _*_c_i_n_d_e_x_, _i_n_t _q_c_h_a_r) Returns the text of the history event beginning at _s_t_r_i_n_g + _*_c_i_n_d_e_x. _*_c_i_n_d_e_x is modified to point to after the event specifier. At function entry, _c_i_n_d_e_x points to the index into _s_t_r_i_n_g where the history event specification begins. _q_c_h_a_r is a character that is allowed to end the event specification in addition to the ``normal'' terminating charac- ters. _c_h_a_r _*_* hhiissttoorryy__ttookkeenniizzee (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) Return an array of tokens parsed out of _s_t_r_i_n_g, much as the shell might. The tokens are split on the characters in the hhiiss-- ttoorryy__wwoorrdd__ddeelliimmiitteerrss variable, and shell quoting conventions are obeyed. _c_h_a_r _* hhiissttoorryy__aarrgg__eexxttrraacctt (_i_n_t _f_i_r_s_t_, _i_n_t _l_a_s_t_, _c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) Extract a string segment consisting of the _f_i_r_s_t through _l_a_s_t arguments present in _s_t_r_i_n_g. Arguments are split using hhiissttoorryy__ttookkeenniizzee(()). HHiissttoorryy VVaarriiaabblleess This section describes the externally-visible variables exported by the GNU History Library. _i_n_t hhiissttoorryy__bbaassee The logical offset of the first entry in the history list. _i_n_t hhiissttoorryy__lleennggtthh The number of entries currently stored in the history list. _i_n_t hhiissttoorryy__mmaaxx__eennttrriieess The maximum number of history entries. This must be changed using ssttii-- ffllee__hhiissttoorryy(()). _i_n_t hhiissttoorryy__wwiittee__ttiimmeessttaammppss If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that time- stamps are not saved. The current timestamp format uses the value of _h_i_s_t_o_r_y___c_o_m_m_e_n_t___c_h_a_r to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. _c_h_a_r hhiissttoorryy__eexxppaannssiioonn__cchhaarr The character that introduces a history event. The default is !!. Set- ting this to 0 inhibits history expansion. _c_h_a_r hhiissttoorryy__ssuubbsstt__cchhaarr The character that invokes word substitution if found at the start of a line. The default is ^^. _c_h_a_r hhiissttoorryy__ccoommmmeenntt__cchhaarr During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. _c_h_a_r _* hhiissttoorryy__wwoorrdd__ddeelliimmiitteerrss The characters that separate tokens for hhiissttoorryy__ttookkeenniizzee(()). The default value is "" \\tt\\nn(())<<>>;;&&||"". _c_h_a_r _* hhiissttoorryy__nnoo__eexxppaanndd__cchhaarrss The list of characters which inhibit history expansion if found immedi- ately following hhiissttoorryy__eexxppaannssiioonn__cchhaarr. The default is space, tab, newline, \\rr, and ==. _c_h_a_r _* hhiissttoorryy__sseeaarrcchh__ddeelliimmiitteerr__cchhaarrss The list of additional characters which can delimit a history search string, in addition to space, tab, _: and _? in the case of a substring search. The default is empty. _i_n_t hhiissttoorryy__qquuootteess__iinnhhiibbiitt__eexxppaannssiioonn If non-zero, single-quoted words are not scanned for the history expan- sion character. The default value is 0. _r_l___l_i_n_e_b_u_f___f_u_n_c___t _* hhiissttoorryy__iinnhhiibbiitt__eexxppaannssiioonn__ffuunnccttiioonn This should be set to the address of a function that takes two argu- ments: a cchhaarr ** (_s_t_r_i_n_g) and an iinntt index into that string (_i). It should return a non-zero value if the history expansion starting at _s_t_r_i_n_g_[_i_] should not be performed; zero if the expansion should be done. It is intended for use by applications like bbaasshh that use the history expansion character for additional purposes. By default, this variable is set to NNUULLLL. FFIILLEESS _~_/_._h_i_s_t_o_r_y Default filename for reading and writing saved history 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) _r_e_a_d_l_i_n_e(3) AAUUTTHHOORRSS Brian Fox, Free Software Foundation bfox@gnu.org Chet Ramey, Case Western Reserve University chet.ramey@case.edu BBUUGG RREEPPOORRTTSS If you find a bug in the hhiissttoorryy library, 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 hhiissttoorryy 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_._r_a_m_e_y_@_c_a_s_e_._e_d_u. GNU History 6.3 2013 June 27 HISTORY(3) readline-6.3/doc/readline_3.ps0000664000043600000240000025416412276516306015112 0ustar chetstaff%!PS-Adobe-3.0 %%Creator: groff version 1.19.2 %%CreationDate: Tue Feb 11 16:57:26 2014 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%+ font Courier %%DocumentSuppliedResources: procset grops 1.19 2 %%Pages: 16 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait %%EndComments %%BeginDefaults %%PageMedia: Default %%EndDefaults %%BeginProlog %%BeginResource: procset grops 1.19 2 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /setcmykcolor where{ pop /Ck/setcmykcolor load def }if /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def /setpagedevice{}def }bind def /PEND{ countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%EndProlog %%BeginSetup %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic %%IncludeResource: font Courier grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn /germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE /Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 (readline \255 get a line from a user with editing)108 96 Q F1(SYNOPSIS) 72 112.8 Q/F2 10/Times-Bold@0 SF(#include )108 124.8 Q (#include )-.18 E(#include )-.7 E/F3 10/Times-Italic@0 SF -.15(ch)108 165.6 S(ar *).15 E F2 -.18(re)108 177.6 S(adline).18 E F0 (\()2.5 E F3(const c)A(har *pr)-.15 E(ompt)-.45 E F0(\);)A F1(COPYRIGHT) 72 194.4 Q F0(Readline is Cop)108 206.4 Q (yright \251 1989\2552011 Free Softw)-.1 E(are F)-.1 E(oundation, Inc.) -.15 E F1(DESCRIPTION)72 223.2 Q F2 -.18(re)108 235.2 S(adline).18 E F0 .088(will read a line from the terminal and return it, using)2.588 F F2 (pr)2.587 E(ompt)-.18 E F0 .087(as a prompt.)2.587 F(If)5.087 E F2(pr) 2.587 E(ompt)-.18 E F0(is)2.587 E F2(NULL)2.587 E F0(or)2.587 E .42 (the empty string, no prompt is issued.)108 247.2 R .421 (The line returned is allocated with)5.42 F F3(malloc)2.921 E F0 .421 (\(3\); the caller must free it).31 F(when \214nished.)108 259.2 Q (The line returned has the \214nal ne)5 E(wline remo)-.25 E -.15(ve)-.15 G(d, so only the te).15 E(xt of the line remains.)-.15 E F2 -.18(re)108 276 S(adline).18 E F0(of)3.79 E 1.29 (fers editing capabilities while the user is entering the line.)-.25 F 1.289(By def)6.289 F 1.289(ault, the line editing com-)-.1 F (mands are similar to those of emacs.)108 288 Q 2.5(Av)5 G (i\255style line editing interf)-2.5 E(ace is also a)-.1 E -.25(va)-.2 G (ilable.).25 E .272 (This manual page describes only the most basic use of)108 304.8 R F2 -.18(re)2.772 G(adline).18 E F0 5.272(.M)C .272 (uch more functionality is a)-5.272 F -.25(va)-.2 G .272(ilable; see).25 F F3(The GNU Readline Libr)108 316.8 Q(ary)-.15 E F0(and)2.5 E F3 (The GNU History Libr)2.5 E(ary)-.15 E F0(for additional information.) 2.5 E F1(RETURN V)72 333.6 Q(ALUE)-1.478 E F2 -.18(re)108 345.6 S (adline).18 E F0 1.09(returns the te)3.59 F 1.09(xt of the line read.) -.15 F 3.589(Ab)6.09 G 1.089(lank line returns the empty string.)-3.589 F(If)6.089 E F2(EOF)3.589 E F0 1.089(is encountered)3.589 F .283 (while reading a line, and the line is empty)108 357.6 R(,)-.65 E F2 (NULL)2.783 E F0 .283(is returned.)2.783 F .283(If an)5.283 F F2(EOF) 2.783 E F0 .283(is read with a non\255empty line, it)2.783 F (is treated as a ne)108 369.6 Q(wline.)-.25 E F1(NO)72 386.4 Q -.986(TA) -.438 G(TION)-.054 E F0 .077 (An Emacs-style notation is used to denote k)108 398.4 R -.15(ey)-.1 G (strok).15 E 2.576(es. Control)-.1 F -.1(ke)2.576 G .076 (ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.576(,e)C .076 (.g., C\255n means)-2.576 F 2.582(Control\255N. Similarly)108 410.4 R(,) -.65 E F3(meta)2.962 E F0 -.1(ke)2.842 G .082(ys are denoted by M\255) -.05 F F3 -.1(ke)C(y)-.2 E F0 2.583(,s)C 2.583(oM)-2.583 G .083 (\255x means Meta\255X.)-2.583 F .083(\(On k)5.083 F -.15(ey)-.1 G .083 (boards without a).15 F F3(meta)108 422.4 Q F0 -.1(ke)3.491 G 2.031 -.65 (y, M)-.05 H.65 E F3(x)A F0 .731(means ESC)3.231 F F3(x)3.231 E F0 3.231(,i)C .731(.e., press the Escape k)-3.231 F 1.03 -.15(ey t)-.1 H .73(hen the).15 F F3(x)4 E F0 -.1(ke)3.76 G 4.53 -.65(y. T)-.05 H .73 (his mak).65 F .73(es ESC the)-.1 F F3 .73(meta pr)3.23 F(e\214x)-.37 E F0(.)A .48(The combination M\255C\255)108 434.4 R F3(x)A F0 .48 (means ESC\255Control\255)2.98 F F3(x)A F0 2.98(,o)C 2.98(rp)-2.98 G .48 (ress the Escape k)-2.98 F .78 -.15(ey t)-.1 H .48 (hen hold the Control k).15 F .78 -.15(ey w)-.1 H(hile).15 E (pressing the)108 446.4 Q F3(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G (\)).65 E .62(Readline commands may be gi)108 463.2 R -.15(ve)-.25 G 3.119(nn).15 G(umeric)-3.119 E F3(ar)3.119 E(guments)-.37 E F0 3.119(,w) .27 G .619(hich normally act as a repeat count.)-3.119 F(Sometimes,) 5.619 E(ho)108 475.2 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti).4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 (gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) .15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 (ument to a command that).18 F 1.019(acts in the forw)108 487.2 R 1.018 (ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C 1.018(auses that command to act in a backw)-3.518 F 1.018 (ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 499.2 Q (vior with ar)-.2 E(guments de)-.18 E(viates from this are noted.)-.25 E .811(When a command is described as)108 516 R F3(killing)3.311 E F0(te) 3.311 E .811(xt, the te)-.15 F .811(xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .812(or possible future retrie)-3.311 F -.25(va)-.25 G 3.312(l\().25 G F3(yank-)-3.312 E(ing)108 528 Q F0 2.529(\). The)B .029 (killed te)2.529 F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F3 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029 (xt to be accumulated into one unit,)-.15 F .567(which can be yank)108 540 R .567(ed all at once.)-.1 F .567(Commands which do not kill te) 5.567 F .567(xt separate the chunks of te)-.15 F .567(xt on the kill) -.15 F(ring.)108 552 Q F1(INITIALIZA)72 568.8 Q(TION FILE)-1.04 E F0 .091(Readline is customized by putting commands in an initialization \ \214le \(the)108 580.8 R F3(inputr)2.591 E(c)-.37 E F0 2.591 (\214le\). The)2.591 F .091(name of this \214le)2.591 F 1.442(is tak)108 592.8 R 1.443(en from the v)-.1 F 1.443(alue of the)-.25 F F2(INPUTRC) 3.943 E F0(en)3.943 E 1.443(vironment v)-.4 F 3.943(ariable. If)-.25 F 1.443(that v)3.943 F 1.443(ariable is unset, the def)-.25 F 1.443 (ault is)-.1 F F3(~/.inputr)108 604.8 Q(c)-.37 E F0 5.058(.I).31 G 2.558 (ft)-5.058 G .058(hat \214le)-2.558 F .058(does not e)5.058 F .058 (xist or cannot be read, the ultimate def)-.15 F .058(ault is)-.1 F F3 (/etc/inputr)2.557 E(c)-.37 E F0 5.057(.W).31 G .057(hen a program) -5.057 F 1.158(which uses the readline library starts up, the init \214\ le is read, and the k)108 616.8 R 1.459 -.15(ey b)-.1 H 1.159 (indings and v).15 F 1.159(ariables are set.)-.25 F .029 (There are only a fe)108 628.8 R 2.529(wb)-.25 G .029 (asic constructs allo)-2.529 F .028(wed in the readline init \214le.) -.25 F .028(Blank lines are ignored.)5.028 F .028(Lines be)5.028 F(gin-) -.15 E .553(ning with a)108 640.8 R F2(#)3.053 E F0 .554(are comments.) 3.053 F .554(Lines be)5.554 F .554(ginning with a)-.15 F F2($)3.054 E F0 .554(indicate conditional constructs.)3.054 F .554(Other lines denote) 5.554 F -.1(ke)108 652.8 S 2.987(yb)-.05 G .487(indings and v)-2.987 F .487(ariable settings.)-.25 F .487 (Each program using this library may add its o)5.487 F .486 (wn commands and bind-)-.25 F(ings.)108 664.8 Q -.15(Fo)108 681.6 S 2.5 (re).15 G(xample, placing)-2.65 E(M\255Control\255u: uni)144 698.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(or)108 710.4 Q (C\255Meta\255u: uni)144 722.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument) -.18 E(GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(1)198.45 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R (into the)108 84 Q/F1 10/Times-Italic@0 SF(inputr)2.51 E(c)-.37 E F0 -.1 (wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e)-2.5 E -.15(xe)-.15 G (cute the readline command).15 E F1(univer)2.5 E(sal\255ar)-.1 E(gument) -.37 E F0(.).68 E 2.795(The follo)108 100.8 R 2.795 (wing symbolic character names are recognized while processing k)-.25 F 3.095 -.15(ey b)-.1 H(indings:).15 E F1(DEL)5.295 E F0(,).53 E F1(ESC) 5.295 E F0(,).72 E F1(ESCAPE)108 112.8 Q F0(,).73 E F1(LFD)2.5 E F0(,) .28 E F1(NEWLINE)2.5 E F0(,).73 E F1(RET)2.5 E F0(,)1.27 E F1(RETURN)2.5 E F0(,)1.1 E F1 -.4(RU)2.5 G(BOUT).4 E F0(,)1.27 E F1(SP)2.5 E -.3(AC) -.9 G(E).3 E F0(,).73 E F1(SPC)2.5 E F0 2.5(,a).72 G(nd)-2.5 E F1 -.5 (TA)2.5 G(B).5 E F0(.).27 E .209 (In addition to command names, readline allo)108 129.6 R .209(ws k)-.25 F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 (ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) -.1 H(s).15 E(pressed \(a)108 141.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A/F2 10/Times-Bold@0 SF -.25(Ke)87 163.2 S 2.5(yB).25 G(indings)-2.5 E F0 .366(The syntax for controlling k)108 175.2 R .666 -.15(ey b)-.1 H .366 (indings in the).15 F F1(inputr)2.876 E(c)-.37 E F0 .366 (\214le is simple.)3.176 F .366(All that is required is the name of the) 5.366 F .383(command or the te)108 187.2 R .383(xt of a macro and a k) -.15 F .683 -.15(ey s)-.1 H .383 (equence to which it should be bound. The name may be speci-).15 F .853 (\214ed in one of tw)108 199.2 R 3.353(ow)-.1 G .853 (ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H .853 (ame, possibly with).15 F F1(Meta\255)3.353 E F0(or)3.353 E F1(Contr) 3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15 F -.15 (ey)-.1 G 2.919(sequence. The)108 211.2 R .419(name and k)2.919 F .719 -.15(ey s)-.1 H .419(equence are separated by a colon.).15 F .419 (There can be no whitespace between the)5.419 F(name and the colon.)108 223.2 Q 1.755(When using the form)108 240 R F2 -.1(ke)4.255 G(yname).1 E F0(:)A F1(function-name).833 E F0(or)4.255 E F1(macr)4.255 E(o)-.45 E F0 (,)A F1 -.1(ke)4.255 G(yname)-.2 E F0 1.756(is the name of a k)4.435 F 2.056 -.15(ey s)-.1 H 1.756(pelled out in).15 F 2.5(English. F)108 252 R (or e)-.15 E(xample:)-.15 E(Control\255u: uni)144 276 Q -.15(ve)-.25 G (rsal\255ar).15 E(gument)-.18 E(Meta\255Rubout: backw)144 288 Q (ard\255kill\255w)-.1 E(ord)-.1 E(Control\255o: "> output")144 300 Q .148(In the abo)108 316.8 R .448 -.15(ve ex)-.15 H(ample,).15 E F1 (C\255u)2.488 E F0 .148(is bound to the function)2.898 F F2(uni)2.647 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M-DEL)3.327 E F0 .147(is bound to the function)3.177 F F2(backward\255kill\255w)108 328.8 Q(ord)-.1 E F0 3.835(,a)C(nd)-3.835 E F1(C\255o)3.675 E F0 1.336 (is bound to run the macro e)4.016 F 1.336 (xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 340.8 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 (into the line\).)2.5 E .056(In the second form,)108 357.6 R F2("k)2.556 E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr) 2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 (fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 (ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 (denoting an entire k)108 369.6 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ ay be speci\214ed by placing the sequence within double quotes.).15 F (Some)6.284 E .386(GNU Emacs style k)108 381.6 R .686 -.15(ey e)-.1 H .385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385 (xample, b)-.15 F .385(ut the symbolic character names)-.2 F (are not recognized.)108 393.6 Q("\\C\255u": uni)144 417.6 Q -.15(ve) -.25 G(rsal\255ar).15 E(gument)-.18 E ("\\C\255x\\C\255r": re\255read\255init\255\214le)144 429.6 Q ("\\e[11~": "Function K)144 441.6 Q .3 -.15(ey 1)-.25 H(").15 E .198 (In this e)108 458.4 R(xample,)-.15 E F1(C-u)2.538 E F0 .199(is ag)2.949 F .199(ain bound to the function)-.05 F F2(uni)2.699 E -.1(ve)-.1 G (rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .199(C-x C-r)5.039 F F0 .199 (is bound to the function)3.429 F F2 -.18(re)108 470.4 S.18 E (ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F3(Function Key 1)2.5 E F0(.)A(The full set of GNU Emacs style escape sequences a)108 487.2 Q -.25(va)-.2 G(ilable when specifying k).25 E .3 -.15(ey s)-.1 H (equences is).15 E F2<5c43ad>144 499.2 Q F0(control pre\214x)20.3 E F2 <5c4dad>144 511.2 Q F0(meta pre\214x)18.08 E F2(\\e)144 523.2 Q F0 (an escape character)28.78 E F2(\\\\)144 535.2 Q F0(backslash)30.44 E F2 (\\")144 547.2 Q F0(literal ", a double quote)27.67 E F2(\\')144 559.2 Q F0(literal ', a single quote)29.89 E(In addition to the GNU Emacs style\ escape sequences, a second set of backslash escapes is a)108 576 Q -.25 (va)-.2 G(ilable:).25 E F2(\\a)144 588 Q F0(alert \(bell\))28.22 E F2 (\\b)144 600 Q F0(backspace)27.66 E F2(\\d)144 612 Q F0(delete)27.66 E F2(\\f)144 624 Q F0(form feed)29.89 E F2(\\n)144 636 Q F0(ne)27.66 E (wline)-.25 E F2(\\r)144 648 Q F0(carriage return)28.78 E F2(\\t)144 660 Q F0(horizontal tab)29.89 E F2(\\v)144 672 Q F0 -.15(ve)28.22 G (rtical tab).15 E F2(\\)144 684 Q F1(nnn)A F0 (the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E (alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 696 Q F1(HH)A F0(the eight-bit character whose v)13.78 E(alue is the he) -.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E .74(When entering the te) 108 712.8 R .74(xt of a macro, single or double quotes should be used t\ o indicate a macro de\214nition.)-.15 F .089(Unquoted te)108 724.8 R .089(xt is assumed to be a function name.)-.15 F .09(In the macro body) 5.089 F 2.59(,t)-.65 G .09(he backslash escapes described abo)-2.59 F -.15(ve)-.15 G(GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(2) 198.45 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R(are e) 108 84 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G (ther character in the macro te)-2.5 E(xt, including " and '.)-.15 E/F1 10/Times-Bold@0 SF(Bash)108 100.8 Q F0(allo)2.93 E .43 (ws the current readline k)-.25 F .73 -.15(ey b)-.1 H .429 (indings to be displayed or modi\214ed with the).15 F F1(bind)2.929 E F0 -.2(bu)2.929 G .429(iltin command.).2 F 1.095 (The editing mode may be switched during interacti)108 112.8 R 1.395 -.15(ve u)-.25 H 1.095(se by using the).15 F F13.595 E F0 1.095 (option to the)3.595 F F1(set)3.595 E F0 -.2(bu)3.595 G 1.095 (iltin com-).2 F 3.076(mand. Other)108 124.8 R .576 (programs using this library pro)3.076 F .575(vide similar mechanisms.) -.15 F(The)5.575 E/F2 10/Times-Italic@0 SF(inputr)3.085 E(c)-.37 E F0 .575(\214le may be edited and)3.385 F(re-read if a program does not pro) 108 136.8 Q(vide an)-.15 E 2.5(yo)-.15 G(ther means to incorporate ne) -2.5 E 2.5(wb)-.25 G(indings.)-2.5 E F1 -.92(Va)87 153.6 S(riables).92 E F0 .043(Readline has v)108 165.6 R .043 (ariables that can be used to further customize its beha)-.25 F(vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043(riable may be set in the).25 F F2 (inpu-)2.554 E(tr)108 177.6 Q(c)-.37 E F0 (\214le with a statement of the form)2.81 E F1(set)144 194.4 Q F2 (variable\255name value)2.5 E F0 .79(Except where noted, readline v)108 211.2 R .79(ariables can tak)-.25 F 3.29(et)-.1 G .79(he v)-3.29 F (alues)-.25 E F1(On)3.29 E F0(or)3.29 E F1(Off)3.29 E F0 .79 (\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).).05 F(Unrecog-) 5.79 E .448(nized v)108 223.2 R .448(ariable names are ignored.)-.25 F .448(When a v)5.448 F .448(ariable v)-.25 F .448 (alue is read, empty or null v)-.25 F .449(alues, "on" \(case-insensi-) -.25 F(ti)108 235.2 Q -.15(ve)-.25 G .468(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F1(On)2.968 E F0 5.468(.A)C .468 (ll other v)-5.468 F .468(alues are equi)-.25 F -.25(va)-.25 G .468 (lent to).25 F F1(Off)2.968 E F0 5.468(.T)C .467(he v)-5.468 F .467 (ariables and their def)-.25 F(ault)-.1 E -.25(va)108 247.2 S(lues are:) .25 E F1(bell\255style \(audible\))108 264 Q F0 .01 (Controls what happens when readline w)144 276 R .011 (ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none) 2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E .94(rings the bell.)144 288 R .94(If set to)5.94 F F1(visible)3.44 E F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va) -.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0(,)A (readline attempts to ring the terminal')144 300 Q 2.5(sb)-.55 G(ell.) -2.5 E F1(bind\255tty\255special\255chars \(On\))108 312 Q F0 .055 (If set to)144 324 R F1(On)2.555 E F0 2.555(,r)C .056(eadline attempts \ to bind the control characters treated specially by the k)-2.555 F (ernel')-.1 E 2.556(st)-.55 G(ermi-)-2.556 E(nal dri)144 336 Q -.15(ve) -.25 G 2.5(rt).15 G 2.5(ot)-2.5 G(heir readline equi)-2.5 E -.25(va)-.25 G(lents.).25 E F1(color)108 348 Q(ed\255stats \(Off\))-.18 E F0 1.58 (If set to)144 360 R F1(On)4.08 E F0 4.08(,r)C 1.579 (eadline displays possible completions using dif)-4.08 F 1.579 (ferent colors to indicate their \214le)-.25 F 2.5(type. The)144 372 R (color de\214nitions are tak)2.5 E(en from the v)-.1 E(alue of the)-.25 E F1(LS_COLORS)2.5 E F0(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F1 (comment\255begin \(`)108 384 Q(`#')-.63 E('\))-.63 E F0 .062 (The string that is inserted in)144 396 R F1(vi)2.562 E F0 .062 (mode when the)2.562 F F1(insert\255comment)2.562 E F0 .062 (command is e)2.562 F -.15(xe)-.15 G 2.562(cuted. This).15 F(com-)2.562 E(mand is bound to)144 408 Q F1(M\255#)2.5 E F0(in emacs mode and to)2.5 E F1(#)2.5 E F0(in vi command mode.)2.5 E F1 (completion\255display\255width \(-1\))108 420 Q F0 1.453(The number of\ screen columns used to display possible matches when performing comple\ tion.)144 432 R .193(The v)144 444 R .193(alue is ignored if it is less\ than 0 or greater than the terminal screen width.)-.25 F 2.694(Av)5.194 G .194(alue of 0 will)-2.944 F (cause matches to be displayed one per line.)144 456 Q(The def)5 E (ault v)-.1 E(alue is -1.)-.25 E F1(completion\255ignor)108 468 Q (e\255case \(Off\))-.18 E F0(If set to)144 480 Q F1(On)2.5 E F0 2.5(,r)C (eadline performs \214lename matching and completion in a case\255insen\ siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 (completion\255map\255case \(Off\))108 492 Q F0 .094(If set to)144 504 R F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor)2.593 E (e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F .093 (yphens \()-.05 F F2A F0 2.593(\)a)C .093(nd underscores)-2.593 F (\()144 516 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E .3 -.15(ve \214)-.25 H (lename matching and completion.).15 E F1(completion\255pr)108 528 Q (e\214x\255display\255length \(0\))-.18 E F0 .829(The length in charact\ ers of the common pre\214x of a list of possible completions that is di\ splayed)144 540 R 1.275(without modi\214cation.)144 552 R 1.275 (When set to a v)6.275 F 1.274(alue greater than zero, common pre\214x) -.25 F 1.274(es longer than this)-.15 F -.25(va)144 564 S(lue are repla\ ced with an ellipsis when displaying possible completions.).25 E F1 (completion\255query\255items \(100\))108 576 Q F0 .529 (This determines when the user is queried about vie)144 588 R .53 (wing the number of possible completions gen-)-.25 F .561(erated by the) 144 600 R F1(possible\255completions)3.061 E F0 3.061(command. It)3.061 F .561(may be set to an)3.061 F 3.06(yi)-.15 G(nte)-3.06 E .56(ger v) -.15 F .56(alue greater than or)-.25 F .782(equal to zero.)144 612 R .783(If the number of possible completions is greater than or equal to \ the v)5.782 F .783(alue of this)-.25 F -.25(va)144 624 S .237 (riable, the user is ask).25 F .237(ed whether or not he wishes to vie) -.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G .237(re simply listed)-2.737 F(on the terminal.)144 636 Q 2.5(An)5 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve v)-.25 H (alue causes readline to ne)-.1 E -.15(ve)-.25 G 2.5(ra).15 G(sk.)-2.5 E F1(con)108 648 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .612(If set to) 144 660 R F1(On)3.112 E F0 3.112(,r)C .613(eadline will con)-3.112 F -.15(ve)-.4 G .613(rt characters with the eighth bit set to an ASCII k) .15 F .913 -.15(ey s)-.1 H .613(equence by).15 F 1.316(stripping the ei\ ghth bit and pre\214xing it with an escape character \(in ef)144 672 R 1.315(fect, using escape as the)-.25 F F2(meta pr)144 684 Q(e\214x)-.37 E F0(\).)A F1(disable\255completion \(Off\))108 696 Q F0 .038(If set to) 144 708 R F1(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w)-2.538 F .038(ord completion.)-.1 F .038 (Completion characters will be inserted into the)5.038 F(line as if the) 144 720 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0 (.)A(GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(3)198.45 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 /Times-Bold@0 SF(editing\255mode \(emacs\))108 84 Q F0 .142 (Controls whether readline be)144 96 R .141(gins with a set of k)-.15 F .441 -.15(ey b)-.1 H .141(indings similar to).15 F/F2 10/Times-Italic@0 SF(Emacs)2.641 E F0(or)2.641 E F2(vi)2.641 E F0(.)A F1(editing\255mode) 5.141 E F0(can be set to either)144 108 Q F1(emacs)2.5 E F0(or)2.5 E F1 (vi)2.5 E F0(.)A F1(echo\255contr)108 120 Q(ol\255characters \(On\))-.18 E F0 1.21(When set to)144 132 R F1(On)3.71 E F0 3.71(,o)C 3.71(no)-3.71 G 1.211(perating systems that indicate the)-3.71 F 3.711(ys)-.15 G 1.211 (upport it, readline echoes a character)-3.711 F (corresponding to a signal generated from the k)144 144 Q -.15(ey)-.1 G (board.).15 E F1(enable\255k)108 156 Q(eypad \(Off\))-.1 E F0 .893 (When set to)144 168 R F1(On)3.393 E F0 3.393(,r)C .893 (eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G .893(pad when it is called.).15 F .892(Some sys-)5.893 F (tems need this to enable the arro)144 180 Q 2.5(wk)-.25 G -.15(ey)-2.6 G(s.).15 E F1(enable\255meta\255k)108 192 Q(ey \(On\))-.1 E F0 .64 (When set to)144 204 R F1(On)3.14 E F0 3.14(,r)C .64 (eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 (eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 (he terminal claims to support).15 F(when it is called.)144 216 Q (On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H 2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 (expand\255tilde \(Off\))108 228 Q F0(If set to)144 240 Q F1(On)2.5 E F0 2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) -.15 E(ord completion.)-.1 E F1(history\255pr)108 252 Q(eser)-.18 E -.1 (ve)-.1 G(\255point \(Off\)).1 E F0 1.339(If set to)144 264 R F1(On) 3.839 E F0 3.839(,t)C 1.338(he history code attempts to place point at \ the same location on each history line)-3.839 F(retrie)144 276 Q -.15 (ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G (ious-history).15 E F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1 (history\255size \(0\))108 288 Q F0 .948 (Set the maximum number of history entries sa)144 300 R -.15(ve)-.2 G 3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.)-3.448 F .949 (If set to zero, an)5.948 F 3.449(ye)-.15 G(xisting)-3.599 E .483 (history entries are deleted and no ne)144 312 R 2.983(we)-.25 G .483 (ntries are sa)-2.983 F -.15(ve)-.2 G 2.983(d. If).15 F .482(set to a v) 2.983 F .482(alue less than zero, the num-)-.25 F (ber of history entries is not limited.)144 324 Q(By def)5 E (ault, the number of history entries is not limited.)-.1 E F1 (horizontal\255scr)108 336 Q(oll\255mode \(Off\))-.18 E F0 .448 (When set to)144 348 R F1(On)2.948 E F0 2.948(,m)C(ak)-2.948 E .448 (es readline use a single line for display)-.1 F 2.948(,s)-.65 G .449 (crolling the input horizontally on a)-2.948 F 1.194(single screen line\ when it becomes longer than the screen width rather than wrapping to a\ ne)144 360 R(w)-.25 E(line.)144 372 Q F1(input\255meta \(Off\))108 384 Q F0 .367(If set to)144 396 R F1(On)2.867 E F0 2.867(,r)C .367(eadline \ will enable eight-bit input \(that is, it will not clear the eighth bit\ in the char)-2.867 F(-)-.2 E .957(acters it reads\), re)144 408 R -.05 (ga)-.15 G .956(rdless of what the terminal claims it can support.).05 F .956(The name)5.956 F F1(meta\255\215ag)3.456 E F0 .956(is a)3.456 F (synon)144 420 Q(ym for this v)-.15 E(ariable.)-.25 E F1(isear)108 432 Q (ch\255terminators \(`)-.18 E(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439 (The string of characters that should terminate an incremental search w\ ithout subsequently e)144 444 R -.15(xe)-.15 G(cut-).15 E .935 (ing the character as a command.)144 456 R .935(If this v)5.935 F .935 (ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934 (alue, the characters)-3.684 F F2(ESC)3.434 E F0(and)144 468 Q F2 (C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke) 108 480 S(ymap \(emacs\)).1 E F0 2.323(Set the current readline k)144 492 R -.15(ey)-.1 G 4.823(map. The).15 F 2.323(set of le)4.823 F -.05 (ga)-.15 G 4.823(lk).05 G -.15(ey)-4.923 G 2.323(map names is).15 F F2 2.324(emacs, emacs-standar)4.823 F(d,)-.37 E .809 (emacs-meta, emacs-ctlx, vi, vi-mo)144 504 R(ve)-.1 E 3.308(,v)-.1 G (i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F2(vi-insert)3.308 E F0(.) .68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .808(lent to) .25 F F2(vi-command)3.308 E F0(;)A F2(emacs)144 516 Q F0 .697(is equi) 3.196 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d) -.37 E F0 5.697(.T)C .697(he def)-5.697 F .697(ault v)-.1 F .697 (alue is)-.25 F F2(emacs)3.197 E F0 5.697(.T).27 G .697(he v)-5.697 F .697(alue of)-.25 F F1(editing\255mode)3.197 E F0(also af)144 528 Q (fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -.1(ke) 108 540 S(yseq\255timeout \(500\)).1 E F0 .368(Speci\214es the duration) 144 552 R F2 -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367 (ait for a character when reading an ambiguous k)-.1 F .667 -.15(ey s) -.1 H(equence).15 E 1.356(\(one that can form a complete k)144 564 R 1.656 -.15(ey s)-.1 H 1.356(equence using the input read so f).15 F(ar) -.1 E 3.856(,o)-.4 G 3.856(rc)-3.856 G 1.356(an tak)-3.856 F 3.856(ea) -.1 G(dditional)-3.856 E .32(input to complete a longer k)144 576 R .62 -.15(ey s)-.1 H 2.82(equence\). If).15 F .32(no input is recei)2.82 F -.15(ve)-.25 G 2.82(dw).15 G .32(ithin the timeout,)-2.82 F F2 -.37(re) 2.82 G(adline).37 E F0(will)2.82 E .906(use the shorter b)144 588 R .907 (ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407(equence. The).15 F -.25 (va)3.407 G .907(lue is speci\214ed in milliseconds, so a v).25 F .907 (alue of)-.25 F .05(1000 means that)144 600 R F2 -.37(re)2.55 G(adline) .37 E F0 .05(will w)2.55 F .05(ait one second for additional input.)-.1 F .05(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051 (less than or equal to zero, or to a non-numeric v)144 612 R(alue,)-.25 E F2 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051 (ait until another k)-.1 F .352 -.15(ey i)-.1 H 2.552(sp).15 G(ressed) -2.552 E(to decide which k)144 624 Q .3 -.15(ey s)-.1 H (equence to complete.).15 E F1(mark\255dir)108 636 Q(ectories \(On\)) -.18 E F0(If set to)144 648 Q F1(On)2.5 E F0 2.5(,c)C (ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.) .15 E F1(mark\255modi\214ed\255lines \(Off\))108 660 Q F0(If set to)144 672 Q F1(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b) -.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F1 (*)A F0(\).)A F1(mark\255symlink)108 684 Q(ed\255dir)-.1 E (ectories \(Off\))-.18 E F0 .175(If set to)144 696 R F1(On)2.675 E F0 2.675(,c)C .175 (ompleted names which are symbolic links to directories ha)-2.675 F .475 -.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 708 Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A (GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(4)198.45 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 /Times-Bold@0 SF(match\255hidden\255\214les \(On\))108 84 Q F0 .192 (This v)144 96 R .192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692 (,c)C .192(auses readline to match \214les whose names be)-2.692 F .193 (gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E .457 (\214les\) when performing \214lename completion.)144 108 R .456 (If set to)5.456 F F1(Off)2.956 E F0 2.956(,t)C .456(he leading `.) -2.956 F 2.956('m)-.7 G .456(ust be supplied by the)-2.956 F (user in the \214lename to be completed.)144 120 Q F1 (menu\255complete\255display\255pr)108 132 Q(e\214x \(Off\))-.18 E F0 1.585(If set to)144 144 R F1(On)4.085 E F0 4.085(,m)C 1.585(enu complet\ ion displays the common pre\214x of the list of possible completions) -4.085 F(\(which may be empty\) before c)144 156 Q (ycling through the list.)-.15 E F1(output\255meta \(Off\))108 168 Q F0 .507(If set to)144 180 R F1(On)3.007 E F0 3.007(,r)C .507(eadline will \ display characters with the eighth bit set directly rather than as a me\ ta-)-3.007 F(pre\214x)144 192 Q(ed escape sequence.)-.15 E F1 (page\255completions \(On\))108 204 Q F0 .808(If set to)144 216 R F1(On) 3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F/F2 10 /Times-Italic@0 SF(mor)3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 (ager to display a screenful of possible comple-)-3.308 F (tions at a time.)144 228 Q F1 (print\255completions\255horizontally \(Off\))108 240 Q F0 1.319 (If set to)144 252 R F1(On)3.819 E F0 3.819(,r)C 1.318(eadline will dis\ play completions with matches sorted horizontally in alphabetical)-3.819 F(order)144 264 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25 E F1 -2.29 -.18(re v)108 276 T(ert\255all\255at\255newline \(Off\)).08 E F0 .698(If set to)144 288 R F1(On)3.198 E F0 3.198(,r)C .699 (eadline will undo all changes to history lines before returning when) -3.198 F F1(accept\255line)3.199 E F0(is)3.199 E -.15(exe)144 300 S 2.686(cuted. By).15 F(def)2.686 E .186 (ault, history lines may be modi\214ed and retain indi)-.1 F .186 (vidual undo lists across calls to)-.25 F F1 -.18(re)144 312 S(adline) .18 E F0(.)A F1(sho)108 324 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .303(This alters the def)144 336 R .303(ault beha)-.1 F .304 (vior of the completion functions.)-.2 F .304(If set to)5.304 F F1(On) 2.804 E F0 2.804(,w)C .304(ords which ha)-2.904 F .604 -.15(ve m)-.2 H (ore).15 E 1.264(than one possible completion cause the matches to be l\ isted immediately instead of ringing the)144 348 R(bell.)144 360 Q F1 (sho)108 372 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.345 (This alters the def)144 384 R 5.345(ault beha)-.1 F 5.345 (vior of the completion functions in a f)-.2 F 5.346(ashion similar to) -.1 F F1(sho)144 396 Q(w\255all\255if\255ambiguous)-.1 E F0 6.691(.I)C 4.191(fs)-6.691 G 1.691(et to)-4.191 F F1(On)4.191 E F0 4.191(,w)C 1.691 (ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691 (ore than one possible completion).15 F 1.039(without an)144 408 R 3.539 (yp)-.15 G 1.039 (ossible partial completion \(the possible completions don')-3.539 F 3.539(ts)-.18 G 1.04(hare a common pre\214x\))-3.539 F(cause the matche\ s to be listed immediately instead of ringing the bell.)144 420 Q F1 (sho)108 432 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.019 (If set to)144 444 R F1(On)3.519 E F0 3.519(,a)C 1.018 (dd a character to the be)-3.519 F 1.018 (ginning of the prompt indicating the editing mode: emacs)-.15 F (\(@\), vi command \(:\) or vi insertion \(+\).)144 456 Q F1 (skip\255completed\255text \(Off\))108 468 Q F0 .094(If set to)144 480 R F1(On)2.594 E F0 2.594(,t)C .095(his alters the def)-2.594 F .095 (ault completion beha)-.1 F .095 (vior when inserting a single match into the line.)-.2 F(It')144 492 Q 2.546(so)-.55 G .046(nly acti)-2.546 F .346 -.15(ve w)-.25 H .046 (hen performing completion in the middle of a w).15 F 2.545(ord. If)-.1 F .045(enabled, readline does not)2.545 F 1.394(insert characters from \ the completion that match characters after point in the w)144 504 R 1.395(ord being com-)-.1 F(pleted, so portions of the w)144 516 Q (ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1 (visible\255stats \(Off\))108 528 Q F0 .847(If set to)144 540 R F1(On) 3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346 (st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846 (\(2\) is appended to the \214lename)B (when listing possible completions.)144 552 Q F1(Conditional Constructs) 87 568.8 Q F0 .05(Readline implements a f)108 580.8 R .05(acility simil\ ar in spirit to the conditional compilation features of the C preproces\ sor)-.1 F .097(which allo)108 592.8 R .097(ws k)-.25 F .396 -.15(ey b) -.1 H .096(indings and v).15 F .096 (ariable settings to be performed as the result of tests.)-.25 F .096 (There are four parser)5.096 F(directi)108 604.8 Q -.15(ve)-.25 G 2.5 (su).15 G(sed.)-2.5 E F1($if)108 621.6 Q F0(The)24.89 E F1($if)2.962 E F0 .462(construct allo)2.962 F .463(ws bindings to be made based on the\ editing mode, the terminal being used,)-.25 F .478 (or the application using readline.)144 633.6 R .477(The te)5.477 F .477 (xt of the test e)-.15 F .477 (xtends to the end of the line; no characters)-.15 F (are required to isolate it.)144 645.6 Q F1(mode)144 662.4 Q F0(The) 12.67 E F1(mode=)3.711 E F0 1.211(form of the)3.711 F F1($if)3.711 E F0 (directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 (sed to test whether readline is in emacs or vi)-3.711 F 3.065 (mode. This)180 674.4 R .565(may be used in conjunction with the)3.065 F F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to) 3.065 F .029(set bindings in the)180 686.4 R F2(emacs-standar)2.529 E(d) -.37 E F0(and)2.529 E F2(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029 (ymaps only if readline is starting out)-.05 F(in emacs mode.)180 698.4 Q F1(term)144 715.2 Q F0(The)15.46 E F1(term=)3.197 E F0 .696 (form may be used to include terminal-speci\214c k)3.197 F .996 -.15 (ey b)-.1 H .696(indings, perhaps to bind).15 F .654(the k)180 727.2 R .954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 (sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 (wo)3.154 G .654(rd on the right side of).1 F(GNU Readline 6.3)72 768 Q (2014 January 6)128.74 E(5)198.45 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R(the) 180 84 Q/F1 10/Times-Bold@0 SF(=)3.004 E F0 .504(is tested ag)3.004 F .503(ainst the full name of the terminal and the portion of the termina\ l name)-.05 F(before the \214rst)180 96 Q F12.5 E F0 5(.T)C (his allo)-5 E(ws)-.25 E/F2 10/Times-Italic@0 SF(sun)2.84 E F0 (to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.5 E F0 2.5(,f).77 G(or instance.)-2.5 E F1(application)144 112.8 Q F0(The)180 124.8 Q F1(application)3.003 E F0 .503 (construct is used to include application-speci\214c settings.)3.003 F .503(Each program)5.503 F .114(using the readline library sets the)180 136.8 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 (nd an initialization \214le can test for a)-2.614 F .5(particular v)180 148.8 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15 (ey s)-.1 H .501(equences to functions useful for a spe-).15 F .397 (ci\214c program.)180 160.8 R -.15(Fo)5.397 G 2.896(ri).15 G .396 (nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 (ey s)-.1 H .396(equence that quotes the).15 F(current or pre)180 172.8 Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 196.8 Q F0 (Bash)2.5 E 2.5(#Q)180 208.8 S(uote the current or pre)-2.5 E(vious w) -.25 E(ord)-.1 E("\\C-xq": "\\eb\\"\\ef\\"")180 220.8 Q F1($endif)180 232.8 Q($endif)108 249.6 Q F0(This command, as seen in the pre)9.33 E (vious e)-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0(command.) 2.5 E F1($else)108 266.4 Q F0(Commands in this branch of the)15.45 E F1 ($if)2.5 E F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G(cuted if the test f).15 E(ails.)-.1 E F1($include)108 283.2 Q F0 .356 (This directi)144 295.2 R .656 -.15(ve t)-.25 H(ak).15 E .356 (es a single \214lename as an ar)-.1 F .357 (gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) 144 307.2 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 -.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1 ($include)144 331.2 Q F2(/etc/inputr)5.833 E(c)-.37 E/F3 10.95 /Times-Bold@0 SF(SEARCHING)72 348 Q F0 1.004(Readline pro)108 360 R 1.003(vides commands for searching through the command history for line\ s containing a speci\214ed)-.15 F 2.5(string. There)108 372 R(are tw)2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E(emental)-.37 E F0(and) 3.01 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 E .697 (Incremental searches be)108 388.8 R .697 (gin before the user has \214nished typing the search string.)-.15 F .698(As each character of the)5.698 F .113 (search string is typed, readline displays the ne)108 400.8 R .112 (xt entry from the history matching the string typed so f)-.15 F(ar)-.1 E 5.112(.A)-.55 G(n)-5.112 E .544 (incremental search requires only as man)108 412.8 R 3.044(yc)-.15 G .544(haracters as needed to \214nd the desired history entry)-3.044 F 5.545(.T)-.65 G 3.045(os)-6.345 G(earch)-3.045 E(backw)108 424.8 Q .181 (ard in the history for a particular string, type)-.1 F F1(C\255r)2.681 E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.68 E F0 .18(searches forw) 2.68 F .18(ard through the history)-.1 F(.)-.65 E .354 (The characters present in the v)108 436.8 R .354(alue of the)-.25 F F1 (isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354 (riable are used to terminate an incremen-).25 F .6(tal search.)108 448.8 R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F .6(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6 (characters will terminate an)3.1 F .122(incremental search.)108 460.8 R F1(C\255G)5.122 E F0 .122 (will abort an incremental search and restore the original line.)2.622 F .123(When the search is)5.123 F(terminated, the history entry containin\ g the search string becomes the current line.)108 472.8 Q 2.407 -.8 (To \214)108 489.6 T .806 (nd other matching entries in the history list, type).8 F F1(C\255s) 3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F .806(This will search back-)5.806 F -.1(wa)108 501.6 S 1.308(rd or forw) .1 F 1.309(ard in the history for the ne)-.1 F 1.309 (xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A) -.55 G 1.609 -.15(ny o)-6.309 H 1.309(ther k).15 F -.15(ey)-.1 G .317 (sequence bound to a readline command will terminate the search and e) 108 513.6 R -.15(xe)-.15 G .317(cute that command.).15 F -.15(Fo)5.317 G 2.817(ri).15 G(nstance,)-2.817 E 3.48(an)108 525.6 S -.25(ew)-3.48 G .98 (line will terminate the search and accept the line, thereby e).25 F -.15(xe)-.15 G .981(cuting the command from the history).15 F 3.062 (list. A)108 537.6 R(mo)3.062 E -.15(ve)-.15 G .562 (ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562 (he last line found the current line, and be)-3.062 F(gin)-.15 E (editing.)108 549.6 Q .567(Non-incremental searches read the entire sea\ rch string before starting to search for matching history lines.)108 566.4 R(The search string may be typed by the user or be part of the co\ ntents of the current line.)108 578.4 Q F3(EDITING COMMANDS)72 595.2 Q F0 1.392(The follo)108 607.2 R 1.391 (wing is a list of the names of the commands and the def)-.25 F 1.391 (ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F 3.891(ya)-.15 G(re)-3.891 E 2.5(bound. Command)108 619.2 R (names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H (equence are unbound by def).15 E(ault.)-.1 E .054(In the follo)108 636 R .054(wing descriptions,)-.25 F F2(point)2.554 E F0 .055 (refers to the current cursor position, and)2.554 F F2(mark)2.555 E F0 .055(refers to a cursor position)2.555 F(sa)108 648 Q -.15(ve)-.2 G 2.5 (db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5 (command. The)2.5 F(te)2.5 E (xt between the point and mark is referred to as the)-.15 E F2 -.37(re) 2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 664.8 Q(or Mo)-.25 E(ving)-.1 E(beginning\255of\255line \(C\255a\))108 676.8 Q F0(Mo)144 688.8 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 (end\255of\255line \(C\255e\))108 700.8 Q F0(Mo)144 712.8 Q .3 -.15 (ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E(GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(6)198.45 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 /Times-Bold@0 SF -.25(fo)108 84 S(rward\255char \(C\255f\)).25 E F0(Mo) 144 96 Q .3 -.15(ve f)-.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1 (backward\255char \(C\255b\))108 108 Q F0(Mo)144 120 Q .3 -.15(ve b)-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 132 S(rward\255w).25 E (ord \(M\255f\))-.1 E F0(Mo)144 144 Q .823 -.15(ve f)-.15 H(orw).15 E .523(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W)-.1 F .522(ords are composed of alphanumeric characters \(let-)-.8 F (ters and digits\).)144 156 Q F1(backward\255w)108 168 Q(ord \(M\255b\)) -.1 E F0(Mo)144 180 Q 1.71 -.15(ve b)-.15 H 1.41 (ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 (ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F (characters \(letters and digits\).)144 192 Q F1(clear\255scr)108 204 Q (een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 216 R .993 (ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G .993(th an ar).4 F .993(gument, refresh the)-.18 F (current line without clearing the screen.)144 228 Q F1 -.18(re)108 240 S(draw\255curr).18 E(ent\255line)-.18 E F0(Refresh the current line.)144 252 Q F1(Commands f)87 268.8 Q(or Manipulating the History)-.25 E (accept\255line \(Newline, Retur)108 280.8 Q(n\))-.15 E F0 .364 (Accept the line re)144 292.8 R -.05(ga)-.15 G .364 (rdless of where the cursor is.).05 F .364(If this line is non-empty) 5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .365(ay be added to the)-2.864 F .741(history list for future recall with)144 304.8 R F1 (add_history\(\))3.241 E F0 5.741(.I)C 3.241(ft)-5.741 G .74 (he line is a modi\214ed history line, the history)-3.241 F (line is restored to its original state.)144 316.8 Q F1(pr)108 328.8 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0(Fetch the pre)144 340.8 Q(vious command from the history list, mo)-.25 E (ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 352.8 Q F0(Fetch the ne)144 364.8 Q(xt command from the history list, mo)-.15 E (ving forw)-.15 E(ard in the list.)-.1 E F1 (beginning\255of\255history \(M\255<\))108 376.8 Q F0(Mo)144 388.8 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.) -.65 E F1(end\255of\255history \(M\255>\))108 400.8 Q F0(Mo)144 412.8 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5 (,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18 (re v)108 424.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47(Search backw)144 436.8 R 1.471 (ard starting at the current line and mo)-.1 F 1.471 (ving `up' through the history as necessary)-.15 F(.)-.65 E (This is an incremental search.)144 448.8 Q F1 -.25(fo)108 460.8 S (rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132 (Search forw)144 472.8 R 1.132(ard starting at the current line and mo) -.1 F 1.131(ving `do)-.15 F 1.131(wn' through the history as necessary) -.25 F(.)-.65 E(This is an incremental search.)144 484.8 Q F1 (non\255incr)108 496.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H (rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .164(Search backw) 144 508.8 R .164(ard through the history starting at the current line u\ sing a non-incremental search for)-.1 F 2.5(as)144 520.8 S (tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 532.8 Q (emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18 E F0 1.354(Search forw)144 544.8 R 1.354(ard through the history using \ a non-incremental search for a string supplied by the)-.1 F(user)144 556.8 Q(.)-.55 E F1(history\255sear)108 568.8 Q(ch\255backward)-.18 E F0 .95(Search backw)144 580.8 R .951(ard through the history for the strin\ g of characters between the start of the current)-.1 F .12 (line and the current cursor position \(the)144 592.8 R/F2 10 /Times-Italic@0 SF(point)2.62 E F0 2.62(\). The)B .12 (search string must match at the be)2.62 F .12(ginning of a)-.15 F (history line.)144 604.8 Q(This is a non-incremental search.)5 E F1 (history\255sear)108 616.8 Q(ch\255f)-.18 E(orward)-.25 E F0 .248 (Search forw)144 628.8 R .249(ard through the history for the string of\ characters between the start of the current line)-.1 F .036 (and the point.)144 640.8 R .036(The search string must match at the be) 5.036 F .035(ginning of a history line.)-.15 F .035 (This is a non-incre-)5.035 F(mental search.)144 652.8 Q F1 (history\255substring\255sear)108 664.8 Q(ch\255backward)-.18 E F0 .95 (Search backw)144 676.8 R .951(ard through the history for the string o\ f characters between the start of the current)-.1 F .007 (line and the current cursor position \(the)144 688.8 R F2(point)2.507 E F0 2.507(\). The)B .007(search string may match an)2.507 F .006 (ywhere in a history)-.15 F 2.5(line. This)144 700.8 R (is a non-incremental search.)2.5 E(GNU Readline 6.3)72 768 Q (2014 January 6)128.74 E(7)198.45 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 /Times-Bold@0 SF(history\255substring\255sear)108 84 Q(ch\255f)-.18 E (orward)-.25 E F0 .248(Search forw)144 96 R .249(ard through the histor\ y for the string of characters between the start of the current line)-.1 F .319(and the point.)144 108 R .319(The search string may match an) 5.319 F .319(ywhere in a history line.)-.15 F .318 (This is a non-incremental)5.318 F(search.)144 120 Q F1 (yank\255nth\255ar)108 132 Q 2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622 (Insert the \214rst ar)144 144 R .622(gument to the pre)-.18 F .622 (vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .795(at point.)144 156 R -.4(Wi)5.795 G .794 (th an ar).4 F(gument)-.18 E/F2 10/Times-Italic@0 SF(n)3.294 E F0 3.294 (,i).24 G .794(nsert the)-3.294 F F2(n)3.294 E F0 .794(th w)B .794 (ord from the pre)-.1 F .794(vious command \(the w)-.25 F .794 (ords in the)-.1 F(pre)144 168 Q .291(vious command be)-.25 F .291 (gin with w)-.15 F .291(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a) -2.791 H(ti).15 E .591 -.15(ve a)-.25 H -.18(rg).15 G .291 (ument inserts the).18 F F2(n)2.791 E F0 .291(th w)B .292 (ord from the end of)-.1 F .282(the pre)144 180 R .282(vious command.) -.25 F .282(Once the ar)5.282 F(gument)-.18 E F2(n)2.781 E F0 .281 (is computed, the ar)2.781 F .281(gument is e)-.18 F .281 (xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 192 Q (xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 204 Q 2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307 (Insert the last ar)144 216 R 1.307(gument to the pre)-.18 F 1.307 (vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308 (vious history entry\).)-.25 F -.4(Wi)144 228 S .204(th a numeric ar).4 F .204(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) -.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0 5.203(.S)C(uccessi)-5.203 E .503 -.15(ve c)-.25 H .203(alls to).15 F F1(yank\255last\255ar)2.703 E (g)-.1 E F0(mo)144 240 Q .806 -.15(ve b)-.15 H .507 (ack through the history list, inserting the last w).15 F .507 (ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E 1.397(to the \214rst call\) of each line in turn.)144 252 R(An)6.396 E 3.896(yn)-.15 G 1.396(umeric ar)-3.896 F 1.396 (gument supplied to these successi)-.18 F 1.696 -.15(ve c)-.25 H(alls) .15 E .491(determines the direction to mo)144 264 R .791 -.15(ve t)-.15 H .491(hrough the history).15 F 5.492(.A)-.65 G(ne)-2.5 E -.05(ga)-.15 G (ti).05 E .792 -.15(ve a)-.25 H -.18(rg).15 G .492 (ument switches the direction).18 F .494 (through the history \(back or forw)144 276 R 2.994(ard\). The)-.1 F .494(history e)2.994 F .494(xpansion f)-.15 F .494 (acilities are used to e)-.1 F .494(xtract the last)-.15 F(ar)144 288 Q (gument, as if the "!$" history e)-.18 E(xpansion had been speci\214ed.) -.15 E F1(Commands f)87 304.8 Q(or Changing T)-.25 E(ext)-.92 E F2 (end\255of\255\214le)108 316.8 Q F1(\(usually C\255d\))2.5 E F0 .798 (The character indicating end-of-\214le as set, for e)144 328.8 R .799 (xample, by)-.15 F/F3 10/Courier@0 SF(stty)3.299 E F0 5.799(.I)C 3.299 (ft)-5.799 G .799(his character is read when)-3.299 F .592 (there are no characters on the line, and point is at the be)144 340.8 R .592(ginning of the line, Readline interprets it)-.15 F (as the end of input and returns)144 352.8 Q/F4 9/Times-Bold@0 SF(EOF) 2.5 E/F5 9/Times-Roman@0 SF(.)A F1(delete\255char \(C\255d\))108 364.8 Q F0 .441(Delete the character at point.)144 376.8 R .442 (If this function is bound to the same character as the tty)5.441 F F1 (EOF)2.942 E F0(char)2.942 E(-)-.2 E(acter)144 388.8 Q 2.5(,a)-.4 G(s) -2.5 E F1(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H (or the ef).15 E(fects.)-.25 E F1(backward\255delete\255char \(Rubout\)) 108 400.8 Q F0 .553(Delete the character behind the cursor)144 412.8 R 5.553(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553 (umeric ar)-3.053 F .552(gument, sa)-.18 F .852 -.15(ve t)-.2 H .552 (he deleted te).15 F .552(xt on)-.15 F(the kill ring.)144 424.8 Q F1 -.25(fo)108 436.8 S(rward\255backward\255delete\255char).25 E F0 .473 (Delete the character under the cursor)144 448.8 R 2.973(,u)-.4 G .474 (nless the cursor is at the end of the line, in which case the)-2.973 F (character behind the cursor is deleted.)144 460.8 Q F1 (quoted\255insert \(C\255q, C\255v\))108 472.8 Q F0 1.229(Add the ne)144 484.8 R 1.228(xt character that you type to the line v)-.15 F 3.728 (erbatim. This)-.15 F 1.228(is ho)3.728 F 3.728(wt)-.25 G 3.728(oi) -3.728 G 1.228(nsert characters lik)-3.728 F(e)-.1 E F1(C\255q)144 496.8 Q F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F1(tab\255insert \(M-T)108 508.8 Q(AB\))-.9 E F0(Insert a tab character)144 520.8 Q(.)-.55 E F1 (self\255insert \(a, b, A, 1, !, ...\))108 532.8 Q F0 (Insert the character typed.)144 544.8 Q F1 (transpose\255chars \(C\255t\))108 556.8 Q F0 .321 (Drag the character before point forw)144 568.8 R .321(ard o)-.1 F -.15 (ve)-.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .322 (ving point forw)-.15 F .322(ard as well.)-.1 F 1.182 (If point is at the end of the line, then this transposes the tw)144 580.8 R 3.682(oc)-.1 G 1.182(haracters before point.)-3.682 F(Ne)6.182 E -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 592.8 Q(guments ha)-.18 E .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 (transpose\255w)108 604.8 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144 616.8 R .023(ord before point past the w)-.1 F .023(ord after point, mo) -.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.524(rt).15 G .024(hat w) -2.524 F .024(ord as well.)-.1 F .024(If point)5.024 F (is at the end of the line, this transposes the last tw)144 628.8 Q 2.5 (ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 640.8 Q (ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 652.8 R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698 (ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 664.8 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 676.8 Q (wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 688.8 Q 1.647 (wercase the current \(or follo)-.25 F 1.647(wing\) w)-.25 F 4.147 (ord. W)-.1 F 1.648(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.948 -.15 (ve a)-.25 H -.18(rg).15 G 1.648(ument, lo).18 F 1.648(wercase the pre) -.25 F(vious)-.25 E -.1(wo)144 700.8 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E(GNU Readline 6.3)72 768 Q(2014 January 6) 128.74 E(8)198.45 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 /Times-Bold@0 SF(capitalize\255w)108 84 Q(ord \(M\255c\))-.1 E F0 1.975 (Capitalize the current \(or follo)144 96 R 1.974(wing\) w)-.25 F 4.474 (ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 2.274 -.15 (ve a)-.25 H -.18(rg).15 G 1.974(ument, capitalize the pre).18 F(vious) -.25 E -.1(wo)144 108 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 120 S(rwrite\255mode).1 E F0 -.8(To)144 132 S .437(ggle o).8 F -.15(ve)-.15 G .437(rwrite mode.).15 F -.4(Wi)5.437 G .437(th an e).4 F .437(xplicit positi)-.15 F .738 -.15(ve n)-.25 H .438 (umeric ar).15 F .438(gument, switches to o)-.18 F -.15(ve)-.15 G .438 (rwrite mode.).15 F -.4(Wi)144 144 S .781(th an e).4 F .781 (xplicit non-positi)-.15 F 1.081 -.15(ve n)-.25 H .781(umeric ar).15 F .781(gument, switches to insert mode.)-.18 F .78(This command af)5.781 F (fects)-.25 E(only)144 156 Q F1(emacs)4.394 E F0(mode;)4.394 E F1(vi) 4.394 E F0 1.894(mode does o)4.394 F -.15(ve)-.15 G 1.894(rwrite dif).15 F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F2 10 /Times-Italic@0 SF -.37(re)4.395 G(adline\(\)).37 E F0 1.895 (starts in insert)4.395 F 3.969(mode. In)144 168 R -.15(ove)3.969 G 1.469(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E F0 1.468(replace the te)3.969 F 1.468(xt at point rather than)-.15 F .957(pushing the te)144 180 R .957(xt to the right.)-.15 F .958 (Characters bound to)5.957 F F1(backward\255delete\255char)3.458 E F0 .958(replace the character)3.458 F(before point with a space.)144 192 Q (By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87 208.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 220.8 Q F0 (Kill the te)144 232.8 Q(xt from point to the end of the line.)-.15 E F1 (backward\255kill\255line \(C\255x Rubout\))108 244.8 Q F0(Kill backw) 144 256.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 (unix\255line\255discard \(C\255u\))108 268.8 Q F0(Kill backw)144 280.8 Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E (The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) -2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 292.8 Q F0 (Kill all characters on the current line, no matter where point is.)144 304.8 Q F1(kill\255w)108 316.8 Q(ord \(M\255d\))-.1 E F0 1.308 (Kill from point the end of the current w)144 328.8 R 1.308 (ord, or if between w)-.1 F 1.308(ords, to the end of the ne)-.1 F 1.307 (xt w)-.15 F(ord.)-.1 E -.8(Wo)144 340.8 S (rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G (rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 352.8 Q (ord \(M\255Rubout\))-.1 E F0(Kill the w)144 364.8 Q(ord behind point.) -.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1 (backward\255w)2.5 E(ord)-.1 E F0(.)A F1(unix\255w)108 376.8 Q (ord\255rubout \(C\255w\))-.1 E F0 .364(Kill the w)144 388.8 R .364 (ord behind point, using white space as a w)-.1 F .365(ord boundary)-.1 F 5.365(.T)-.65 G .365(he killed te)-5.365 F .365(xt is sa)-.15 F -.15 (ve)-.2 G 2.865(do).15 G 2.865(nt)-2.865 G(he)-2.865 E(kill-ring.)144 400.8 Q F1(unix\255\214lename\255rubout)108 412.8 Q F0 .167(Kill the w) 144 424.8 R .166 (ord behind point, using white space and the slash character as the w) -.1 F .166(ord boundaries.)-.1 F(The)5.166 E(killed te)144 436.8 Q (xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) -2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 448.8 Q F0 (Delete all spaces and tabs around point.)144 460.8 Q F1(kill\255r)108 472.8 Q(egion)-.18 E F0 1.13(Kill the te)144 484.8 R 1.13 (xt between the point and)-.15 F F2(mark)3.63 E F0(\(sa)3.63 E -.15(ve) -.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F 1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144 496.8 S(gion)-.03 E F0(.)A F1(copy\255r)108 508.8 Q(egion\255as\255kill)-.18 E F0(Cop)144 520.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E (gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 (copy\255backward\255w)108 532.8 Q(ord)-.1 E F0(Cop)144 544.8 Q 4.801 (yt)-.1 G 2.301(he w)-4.801 F 2.301(ord before point to the kill b)-.1 F (uf)-.2 E(fer)-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.3 (ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 556.8 Q(ord)-.1 E F0(.)A F1(copy\255f)108 568.8 Q(orward\255w)-.25 E(ord)-.1 E F0(Cop)144 580.8 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo) -.1 F 2.007(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008 (.T)-.55 G 2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1 F F1 -.25(fo)4.508 G -.37(r-).25 G(ward\255w)144 592.8 Q(ord)-.1 E F0(.) A F1(yank \(C\255y\))108 604.8 Q F0 -1(Ya)144 616.8 S (nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 E F1(yank\255pop \(M\255y\))108 628.8 Q F0 (Rotate the kill ring, and yank the ne)144 640.8 Q 2.5(wt)-.25 G 2.5 (op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 657.6 Q (guments)-.1 E(digit\255ar)108 669.6 Q (gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .642 (Add this digit to the ar)144 681.6 R .641 (gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18 (rg)-3.141 G 3.141(ument. M\255\255).18 F .641(starts a ne)3.141 F(g-) -.15 E(ati)144 693.6 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1 (uni)108 705.6 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778 (This is another w)144 717.6 R .779(ay to specify an ar)-.1 F 3.279 (gument. If)-.18 F .779(this command is follo)3.279 F .779 (wed by one or more digits,)-.25 F 2.684 (optionally with a leading minus sign, those digits de\214ne the ar)144 729.6 R 5.184(gument. If)-.18 F 2.684(the command is)5.184 F (GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(9)198.45 E 0 Cg EP %%Page: 10 10 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R(follo) 144 84 Q .244(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E/F1 10 /Times-Bold@0 SF(uni)2.744 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)2.744 E .244(ain ends the numeric ar)-.05 F .244(gument, b)-.18 F .245(ut is other)-.2 F(-)-.2 E .899(wise ignored.)144 96 R .898 (As a special case, if this command is immediately follo)5.899 F .898 (wed by a character that is)-.25 F .243 (neither a digit or minus sign, the ar)144 108 R .243 (gument count for the ne)-.18 F .243(xt command is multiplied by four) -.15 F 5.243(.T)-.55 G(he)-5.243 E(ar)144 120 Q .378 (gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378 (cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F .378(gument count)-.18 F(four)144 132 Q 2.5(,as)-.4 G(econd time mak) -2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1 (Completing)87 148.8 Q(complete \(T)108 160.8 Q(AB\))-.9 E F0 1.908 (Attempt to perform completion on the te)144 172.8 R 1.908 (xt before point.)-.15 F 1.909(The actual completion performed is)6.909 F(application-speci\214c.)144 184.8 Q F1(Bash)5.518 E F0 3.018(,f)C .518 (or instance, attempts completion treating the te)-3.018 F .517 (xt as a v)-.15 F .517(ariable \(if the)-.25 F(te)144 196.8 Q .656 (xt be)-.15 F .656(gins with)-.15 F F1($)3.156 E F0 .656 (\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1 (~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656 (gins with)-.15 F F1(@)3.157 E F0 .657(\), or)B .93 (command \(including aliases and functions\) in turn.)144 208.8 R .929 (If none of these produces a match, \214lename)5.929 F 1.273 (completion is attempted.)144 220.8 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773 (nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273 (ws completion of program functions and)-.25 F -.25(va)144 232.8 S(riab\ les, and only attempts \214lename completion under certain circumstance\ s.).25 E F1(possible\255completions \(M\255?\))108 244.8 Q F0 .262 (List the possible completions of the te)144 256.8 R .262 (xt before point.)-.15 F .261 (When displaying completions, readline sets)5.261 F 1.002 (the number of columns used for display to the v)144 268.8 R 1.002 (alue of)-.25 F F1(completion-display-width)3.502 E F0 3.502(,t)C 1.003 (he v)-3.502 F 1.003(alue of)-.25 F(the en)144 280.8 Q(vironment v)-.4 E (ariable)-.25 E/F2 9/Times-Bold@0 SF(COLUMNS)2.5 E/F3 9/Times-Roman@0 SF (,)A F0(or the screen width, in that order)2.25 E(.)-.55 E F1 (insert\255completions \(M\255*\))108 292.8 Q F0 .783 (Insert all completions of the te)144 304.8 R .783 (xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H .783(een generated by).15 F F1(possible\255com-)3.282 E(pletions)144 316.8 Q F0(.)A F1(menu\255complete)108 328.8 Q F0 .928(Similar to)144 340.8 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628 F .929(ord to be completed with a single match from the list of)-.1 F 1.194(possible completions.)144 352.8 R 1.194(Repeated e)6.194 F -.15 (xe)-.15 G 1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193 (steps through the list of possible)3.694 F .828 (completions, inserting each match in turn.)144 364.8 R .828 (At the end of the list of completions, the bell is rung)5.828 F .727 (\(subject to the setting of)144 376.8 R F1(bell\255style)3.227 E F0 3.227(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F .727(An ar)5.727 F .727(gument of)-.18 F/F4 10/Times-Italic@0 SF(n)3.227 E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F4(n)3.227 E F0 1.73 (positions forw)144 388.8 R 1.73(ard in the list of matches; a ne)-.1 F -.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73 (ument may be used to mo).18 F 2.03 -.15(ve b)-.15 H(ackw).15 E(ard)-.1 E(through the list.)144 400.8 Q(This command is intended to be bound to) 5 E F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C(ut is unbound by def)-2.7 E (ault.)-.1 E F1(menu\255complete\255backward)108 412.8 Q F0 .82 (Identical to)144 424.8 R F1(menu\255complete)3.32 E F0 3.32(,b)C .82 (ut mo)-3.52 F -.15(ve)-.15 G 3.32(sb).15 G(ackw)-3.32 E .82 (ard through the list of possible completions, as if)-.1 F F1 (menu\255complete)144 436.8 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5 (nan).15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg) .15 G 2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E F1(delete\255char\255or\255list)108 448.8 Q F0 .373 (Deletes the character under the cursor if not at the be)144 460.8 R .374(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char) 2.874 E F0(\).)A(If at the end of the line, beha)144 472.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A F1 -.25(Ke)87 489.6 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr) 108 501.6 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 513.6 Q (gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15 (ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 525.6 Q 2.5(o\() -.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 537.6 Q (ving the characters typed into the current k)-.2 E -.15(ey)-.1 G (board macro and store the de\214nition.).15 E F1 (call\255last\255kbd\255macr)108 549.6 Q 2.5(o\()-.18 G(C\255x e\))-2.5 E F0(Re-e)144 561.6 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1 G .999(board macro de\214ned, by making the characters in the macro app\ ear as if).15 F .662(typed at the k)144 573.6 R -.15(ey)-.1 G(board.).15 E F1(print\255last\255kbd\255macr)5.663 E 3.163(o\()-.18 G(\))-3.163 E F0 .663(Print the last k)3.163 F -.15(ey)-.1 G .663 (board macro de\214ned in a for).15 F(-)-.2 E(mat suitable for the)144 585.6 Q F4(inputr)2.5 E(c)-.37 E F0(\214le.)2.5 E F1(Miscellaneous)87 602.4 Q -.18(re)108 614.4 S.18 E (ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.777 (Read in the contents of the)144 626.4 R F4(inputr)4.277 E(c)-.37 E F0 1.776(\214le, and incorporate an)4.276 F 4.276(yb)-.15 G 1.776 (indings or v)-4.276 F 1.776(ariable assignments)-.25 F(found there.)144 638.4 Q F1(abort \(C\255g\))108 650.4 Q F0 3.248 (Abort the current editing command and ring the terminal')144 662.4 R 5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F1 (bell\255style)144 674.4 Q F0(\).)A F1(do\255upper)108 686.4 Q (case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F4(x)A F1 2.5(,.) C(..\))-2.5 E F0 1.756(If the meta\214ed character)144 698.4 R F4(x) 4.256 E F0 1.755(is lo)4.256 F 1.755 (wercase, run the command that is bound to the corresponding)-.25 F (uppercase character)144 710.4 Q(.)-.55 E(GNU Readline 6.3)72 768 Q (2014 January 6)128.74 E(10)193.45 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 /Times-Bold@0 SF(pr)108 84 Q(e\214x\255meta \(ESC\))-.18 E F0 (Metafy the ne)144 96 Q(xt character typed.)-.15 E/F2 9/Times-Bold@0 SF (ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 (Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 108 Q F0 (Incremental undo, separately remembered for each line.)144 120 Q F1 -2.29 -.18(re v)108 132 T(ert\255line \(M\255r\)).08 E F0 1.095 (Undo all changes made to this line.)144 144 R 1.095(This is lik)6.095 F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E F0 1.095(command enough times to)3.595 F (return the line to its initial state.)144 156 Q F1 (tilde\255expand \(M\255&\))108 168 Q F0(Perform tilde e)144 180 Q (xpansion on the current w)-.15 E(ord.)-.1 E F1 (set\255mark \(C\255@, M\255\))108 192 Q F0 (Set the mark to the point.)144 204 Q(If a numeric ar)5 E (gument is supplied, the mark is set to that position.)-.18 E F1 (exchange\255point\255and\255mark \(C\255x C\255x\))108 216 Q F0(Sw)144 228 Q .283(ap the point with the mark.)-.1 F .283 (The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G 2.782(dp).15 G .282(osition, and the old)-2.782 F(cursor position is sa) 144 240 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 (character\255sear)108 252 Q(ch \(C\255]\))-.18 E F0 3.035(Ac)144 264 S .535(haracter is read and point is mo)-3.035 F -.15(ve)-.15 G 3.035(dt) .15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 (xt occurrence of that character)-.15 F 5.536(.A)-.55 G(ne)-2.5 E -.05 (ga)-.15 G(ti).05 E .836 -.15(ve c)-.25 H(ount).15 E(searches for pre) 144 276 Q(vious occurrences.)-.25 E F1(character\255sear)108 288 Q (ch\255backward \(M\255C\255]\))-.18 E F0 3.544(Ac)144 300 S 1.044 (haracter is read and point is mo)-3.544 F -.15(ve)-.15 G 3.544(dt).15 G 3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 (vious occurrence of that character)-.25 F 6.043(.A)-.55 G(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G (count searches for subsequent occurrences.)144 312 Q F1 (skip\255csi\255sequence)108 324 Q F0 1.826 (Read enough characters to consume a multi-k)144 336 R 2.126 -.15(ey s) -.1 H 1.827(equence such as those de\214ned for k).15 F -.15(ey)-.1 G 4.327(sl).15 G(ik)-4.327 E(e)-.1 E .791(Home and End.)144 348 R .791 (Such sequences be)5.791 F .791 (gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F .331(If this sequence is bound to "\\[", k)144 360 R -.15(ey)-.1 G 2.831 (sp).15 G .331(roducing such sequences will ha)-2.831 F .632 -.15(ve n) -.2 H 2.832(oe).15 G -.25(ff)-2.832 G .332(ect unless e).25 F(xplic-) -.15 E .026(itly bound to a readline command, instead of inserting stra\ y characters into the editing b)144 372 R(uf)-.2 E(fer)-.25 E 5.026(.T) -.55 G(his)-5.026 E(is unbound by def)144 384 Q(ault, b)-.1 E (ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 396 Q F0 -.4(Wi)144 408 S .48(thout a numeric ar).4 F .48(gument, the v) -.18 F .481(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0 -.25(va)2.981 G .481(riable is inserted at the).25 F(be)144 420 Q .098 (ginning of the current line.)-.15 F .098(If a numeric ar)5.098 F .097 (gument is supplied, this command acts as a toggle:)-.18 F(if)5.097 E .321(the characters at the be)144 432 R .321 (ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 (comment\255begin)2.821 E F0 2.822(,t)C .322(he v)-2.822 F .322(alue is) -.25 F 1.014(inserted, otherwise the characters in)144 444 R F1 (comment-begin)3.514 E F0 1.014(are deleted from the be)3.514 F 1.013 (ginning of the line.)-.15 F 1.468 (In either case, the line is accepted as if a ne)144 456 R 1.468 (wline had been typed.)-.25 F 1.469(The def)6.469 F 1.469(ault v)-.1 F 1.469(alue of)-.25 F F1(com-)3.969 E(ment\255begin)144 468 Q F0(mak) 2.983 E .483(es the current line a shell comment.)-.1 F .483 (If a numeric ar)5.483 F .482(gument causes the comment)-.18 F (character to be remo)144 480 Q -.15(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G(cuted by the shell.).15 E F1(dump\255functions)108 492 Q F0 .626(Print all of the functions and their k)144 504 R .926 -.15 (ey b)-.1 H .627(indings to the readline output stream.).15 F .627 (If a numeric ar)5.627 F(gu-)-.18 E (ment is supplied, the output is formatted in such a w)144 516 Q (ay that it can be made part of an)-.1 E/F3 10/Times-Italic@0 SF(inputr) 2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 528 Q(ariables)-.1 E F0 .283(Print all of the settable v)144 540 R .283(ariables and their v) -.25 F .283(alues to the readline output stream.)-.25 F .283 (If a numeric ar)5.283 F(gu-)-.18 E (ment is supplied, the output is formatted in such a w)144 552 Q (ay that it can be made part of an)-.1 E F3(inputr)2.5 E(c)-.37 E F0 (\214le.)2.5 E F1(dump\255macr)108 564 Q(os)-.18 E F0 .592 (Print all of the readline k)144 576 R .892 -.15(ey s)-.1 H .592 (equences bound to macros and the strings the).15 F 3.093(yo)-.15 G 3.093(utput. If)-3.093 F 3.093(an)3.093 G(umeric)-3.093 E(ar)144 588 Q .528(gument is supplied, the output is formatted in such a w)-.18 F .528 (ay that it can be made part of an)-.1 F F3(inputr)3.027 E(c)-.37 E F0 (\214le.)144 600 Q F1(emacs\255editing\255mode \(C\255e\))108 612 Q F0 (When in)144 624 Q F1(vi)2.5 E F0(command mode, this causes a switch to) 2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1 (vi\255editing\255mode \(M\255C\255j\))108 636 Q F0(When in)144 648 Q F1 (emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E F0(editing mode.)2.5 E/F4 10.95/Times-Bold@0 SF(DEF)72 664.8 Q -.548(AU) -.986 G 2.014 -1.007(LT K).548 H(EY BINDINGS)1.007 E F0 .064(The follo) 108 676.8 R .064(wing is a list of the def)-.25 F .064 (ault emacs and vi bindings.)-.1 F .065 (Characters with the eighth bit set are written as)5.065 F .527 (M\255, and are referred to as)108 688.8 R F3(meta\214ed) 3.407 E F0 3.027(characters. The)3.797 F .527 (printable ASCII characters not mentioned)3.027 F 1.115 (in the list of emacs standard bindings are bound to the)108 700.8 R F1 (self\255insert)3.615 E F0 1.116(function, which just inserts the gi) 3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108 712.8 R .945(In vi insertion mode, all characters not speci\214cally me\ ntioned are bound to)5.945 F F1(self\255insert)108 724.8 Q F0 5.358(.C)C .358(haracters assigned to signal generation by)-5.358 F F3(stty)2.859 E F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s) .15 H .359(uch as C-Z or C-C,).4 F(GNU Readline 6.3)72 768 Q (2014 January 6)128.74 E(11)193.45 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R .188 (retain that function.)108 84 R .188(Upper and lo)5.188 F .188(wer case\ meta\214ed characters are bound to the same function in the emacs)-.25 F .304(mode meta k)108 96 R -.15(ey)-.1 G 2.804(map. The).15 F .305(rem\ aining characters are unbound, which causes readline to ring the bell \ \(subject)2.804 F(to the setting of the)108 108 Q/F1 10/Times-Bold@0 SF (bell\255style)2.5 E F0 -.25(va)2.5 G(riable\).).25 E F1(Emacs Mode)87 124.8 Q F0(Emacs Standard bindings)151.2 136.8 Q 2.5("C-@" set-mark) 151.2 160.8 R 2.5("C-A" be)151.2 172.8 R(ginning-of-line)-.15 E 2.5 ("C-B" backw)151.2 184.8 R(ard-char)-.1 E 2.5("C-D" delete-char)151.2 196.8 R 2.5("C-E" end-of-line)151.2 208.8 R 2.5("C-F" forw)151.2 220.8 R (ard-char)-.1 E 2.5("C-G" abort)151.2 232.8 R 2.5("C-H" backw)151.2 244.8 R(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 256.8 R 2.5 ("C-J" accept-line)151.2 268.8 R 2.5("C-K" kill-line)151.2 280.8 R 2.5 ("C-L" clear)151.2 292.8 R(-screen)-.2 E 2.5("C-M" accept-line)151.2 304.8 R 2.5("C-N" ne)151.2 316.8 R(xt-history)-.15 E 2.5("C-P" pre)151.2 328.8 R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 340.8 R 2.5 ("C-R" re)151.2 352.8 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 ("C-S" forw)151.2 364.8 R(ard-search-history)-.1 E 2.5 ("C-T" transpose-chars)151.2 376.8 R 2.5("C-U" unix-line-discard)151.2 388.8 R 2.5("C-V" quoted-insert)151.2 400.8 R 2.5("C-W" unix-w)151.2 412.8 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 424.8 R 2.5 ("C-]" character)151.2 436.8 R(-search)-.2 E 2.5("C-_" undo)151.2 448.8 R 3.333("")151.2 460.8 S(to "/")-.833 E(self-insert)5 E 2.5("0" to)151.2 472.8 R 2.5("9" self-insert)2.5 F 2.5(":" to)151.2 484.8 R 2.5 ("~" self-insert)2.5 F 2.5("C-?" backw)151.2 496.8 R(ard-delete-char)-.1 E(Emacs Meta bindings)151.2 513.6 Q 2.5("M-C-G" abort)151.2 537.6 R 2.5 ("M-C-H" backw)151.2 549.6 R(ard-kill-w)-.1 E(ord)-.1 E 2.5 ("M-C-I" tab-insert)151.2 561.6 R 2.5("M-C-J" vi-editing-mode)151.2 573.6 R 2.5("M-C-M" vi-editing-mode)151.2 585.6 R 2.5("M-C-R" re)151.2 597.6 R -.15(ve)-.25 G(rt-line).15 E 2.5("M-C-Y" yank-nth-ar)151.2 609.6 R(g)-.18 E 2.5("M-C-[" complete)151.2 621.6 R 2.5("M-C-]" character) 151.2 633.6 R(-search-backw)-.2 E(ard)-.1 E 2.5("M-space" set-mark)151.2 645.6 R 2.5("M-#" insert-comment)151.2 657.6 R 2.5("M-&" tilde-e)151.2 669.6 R(xpand)-.15 E 2.5("M-*" insert-completions)151.2 681.6 R 2.5 ("M--" digit-ar)151.2 693.6 R(gument)-.18 E 2.5("M-." yank-last-ar)151.2 705.6 R(g)-.18 E 2.5("M-0" digit-ar)151.2 717.6 R(gument)-.18 E 2.5 ("M-1" digit-ar)151.2 729.6 R(gument)-.18 E(GNU Readline 6.3)72 768 Q (2014 January 6)128.74 E(12)193.45 E 0 Cg EP %%Page: 13 13 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 ("M-2" digit-ar)151.2 84 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 96 R (gument)-.18 E 2.5("M-4" digit-ar)151.2 108 R(gument)-.18 E 2.5 ("M-5" digit-ar)151.2 120 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 132 R (gument)-.18 E 2.5("M-7" digit-ar)151.2 144 R(gument)-.18 E 2.5 ("M-8" digit-ar)151.2 156 R(gument)-.18 E 2.5("M-9" digit-ar)151.2 168 R (gument)-.18 E 2.5("M-<" be)151.2 180 R(ginning-of-history)-.15 E 2.5 ("M-=" possible-completions)151.2 192 R 2.5("M->" end-of-history)151.2 204 R 2.5("M-?" possible-completions)151.2 216 R 2.5("M-B" backw)151.2 228 R(ard-w)-.1 E(ord)-.1 E 2.5("M-C" capitalize-w)151.2 240 R(ord)-.1 E 2.5("M-D" kill-w)151.2 252 R(ord)-.1 E 2.5("M-F" forw)151.2 264 R(ard-w) -.1 E(ord)-.1 E 2.5("M-L" do)151.2 276 R(wncase-w)-.25 E(ord)-.1 E 2.5 ("M-N" non-incremental-forw)151.2 288 R(ard-search-history)-.1 E 2.5 ("M-P" non-incremental-re)151.2 300 R -.15(ve)-.25 G(rse-search-history) .15 E 2.5("M-R" re)151.2 312 R -.15(ve)-.25 G(rt-line).15 E 2.5 ("M-T" transpose-w)151.2 324 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 336 R (ord)-.1 E 2.5("M-Y" yank-pop)151.2 348 R 2.5 ("M-\\" delete-horizontal-space)151.2 360 R 2.5("M-~" tilde-e)151.2 372 R(xpand)-.15 E 2.5("M-C-?" backw)151.2 384 R(ard-kill-w)-.1 E(ord)-.1 E 2.5("M-_" yank-last-ar)151.2 396 R(g)-.18 E(Emacs Control-X bindings) 151.2 412.8 Q 2.5("C-XC-G" abort)151.2 436.8 R 2.5 ("C-XC-R" re-read-init-\214le)151.2 448.8 R 2.5("C-XC-U" undo)151.2 460.8 R 2.5("C-XC-X" e)151.2 472.8 R(xchange-point-and-mark)-.15 E 2.5 ("C-X\(" start-kbd-macro)151.2 484.8 R 2.5("C-X\)" end-kbd-macro)151.2 496.8 R 2.5("C-XE" call-last-kbd-macro)151.2 508.8 R 2.5("C-XC-?" backw) 151.2 520.8 R(ard-kill-line)-.1 E/F1 10/Times-Bold@0 SF (VI Mode bindings)87 549.6 Q F0(VI Insert Mode functions)151.2 561.6 Q 2.5("C-D" vi-eof-maybe)151.2 585.6 R 2.5("C-H" backw)151.2 597.6 R (ard-delete-char)-.1 E 2.5("C-I" complete)151.2 609.6 R 2.5 ("C-J" accept-line)151.2 621.6 R 2.5("C-M" accept-line)151.2 633.6 R 2.5 ("C-R" re)151.2 645.6 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 ("C-S" forw)151.2 657.6 R(ard-search-history)-.1 E 2.5 ("C-T" transpose-chars)151.2 669.6 R 2.5("C-U" unix-line-discard)151.2 681.6 R 2.5("C-V" quoted-insert)151.2 693.6 R 2.5("C-W" unix-w)151.2 705.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 717.6 R 2.5("C-[" vi-mo) 151.2 729.6 R -.15(ve)-.15 G(ment-mode).15 E(GNU Readline 6.3)72 768 Q (2014 January 6)128.74 E(13)193.45 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 ("C-_" undo)151.2 84 R 3.333("")151.2 96 S(to "~")-.833 E(self-insert)5 E 2.5("C-?" backw)151.2 108 R(ard-delete-char)-.1 E (VI Command Mode functions)151.2 124.8 Q 2.5("C-D" vi-eof-maybe)151.2 148.8 R 2.5("C-E" emacs-editing-mode)151.2 160.8 R 2.5("C-G" abort)151.2 172.8 R 2.5("C-H" backw)151.2 184.8 R(ard-char)-.1 E 2.5 ("C-J" accept-line)151.2 196.8 R 2.5("C-K" kill-line)151.2 208.8 R 2.5 ("C-L" clear)151.2 220.8 R(-screen)-.2 E 2.5("C-M" accept-line)151.2 232.8 R 2.5("C-N" ne)151.2 244.8 R(xt-history)-.15 E 2.5("C-P" pre)151.2 256.8 R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 268.8 R 2.5 ("C-R" re)151.2 280.8 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 ("C-S" forw)151.2 292.8 R(ard-search-history)-.1 E 2.5 ("C-T" transpose-chars)151.2 304.8 R 2.5("C-U" unix-line-discard)151.2 316.8 R 2.5("C-V" quoted-insert)151.2 328.8 R 2.5("C-W" unix-w)151.2 340.8 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 352.8 R 2.5("C-_" vi-undo) 151.2 364.8 R -4.166 3.333("" f)151.2 376.8 T(orw)-3.333 E(ard-char)-.1 E 2.5("#" insert-comment)151.2 388.8 R 2.5("$" end-of-line)151.2 400.8 R 2.5("%" vi-match)151.2 412.8 R 2.5("&" vi-tilde-e)151.2 424.8 R(xpand) -.15 E 2.5("*" vi-complete)151.2 436.8 R 2.5("+" ne)151.2 448.8 R (xt-history)-.15 E 2.5("," vi-char)151.2 460.8 R(-search)-.2 E 2.5 ("-" pre)151.2 472.8 R(vious-history)-.25 E 2.5("." vi-redo)151.2 484.8 R 2.5("/" vi-search)151.2 496.8 R 2.5("0" be)151.2 508.8 R (ginning-of-line)-.15 E("1" to "9")151.2 520.8 Q(vi-ar)5 E(g-digit)-.18 E 2.5(";" vi-char)151.2 532.8 R(-search)-.2 E 2.5("=" vi-complete)151.2 544.8 R 2.5("?" vi-search)151.2 556.8 R 2.5("A" vi-append-eol)151.2 568.8 R 2.5("B" vi-pre)151.2 580.8 R(v-w)-.25 E(ord)-.1 E 2.5 ("C" vi-change-to)151.2 592.8 R 2.5("D" vi-delete-to)151.2 604.8 R 2.5 ("E" vi-end-w)151.2 616.8 R(ord)-.1 E 2.5("F" vi-char)151.2 628.8 R (-search)-.2 E 2.5("G" vi-fetch-history)151.2 640.8 R 2.5 ("I" vi-insert-be)151.2 652.8 R(g)-.15 E 2.5("N" vi-search-ag)151.2 664.8 R(ain)-.05 E 2.5("P" vi-put)151.2 676.8 R 2.5("R" vi-replace)151.2 688.8 R 2.5("S" vi-subst)151.2 700.8 R 2.5("T" vi-char)151.2 712.8 R (-search)-.2 E 2.5("U" re)151.2 724.8 R -.15(ve)-.25 G(rt-line).15 E (GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(14)193.45 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 ("W" vi-ne)151.2 84 R(xt-w)-.15 E(ord)-.1 E 2.5("X" backw)151.2 96 R (ard-delete-char)-.1 E 2.5("Y" vi-yank-to)151.2 108 R 2.5 ("\\" vi-complete)151.2 120 R 2.5("^" vi-\214rst-print)151.2 132 R 2.5 ("_" vi-yank-ar)151.2 144 R(g)-.18 E 2.5("`" vi-goto-mark)151.2 156 R 2.5("a" vi-append-mode)151.2 168 R 2.5("b" vi-pre)151.2 180 R(v-w)-.25 E (ord)-.1 E 2.5("c" vi-change-to)151.2 192 R 2.5("d" vi-delete-to)151.2 204 R 2.5("e" vi-end-w)151.2 216 R(ord)-.1 E 2.5("f" vi-char)151.2 228 R (-search)-.2 E 2.5("h" backw)151.2 240 R(ard-char)-.1 E 2.5 ("i" vi-insertion-mode)151.2 252 R 2.5("j" ne)151.2 264 R(xt-history) -.15 E 2.5("k" pre)151.2 276 R(v-history)-.25 E 2.5("l" forw)151.2 288 R (ard-char)-.1 E 2.5("m" vi-set-mark)151.2 300 R 2.5("n" vi-search-ag) 151.2 312 R(ain)-.05 E 2.5("p" vi-put)151.2 324 R 2.5 ("r" vi-change-char)151.2 336 R 2.5("s" vi-subst)151.2 348 R 2.5 ("t" vi-char)151.2 360 R(-search)-.2 E 2.5("u" vi-undo)151.2 372 R 2.5 ("w" vi-ne)151.2 384 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 396 R 2.5("y" vi-yank-to)151.2 408 R 2.5("|" vi-column)151.2 420 R 2.5 ("~" vi-change-case)151.2 432 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 448.8 Q/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 460.8 Q(ary) -.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2 (The Gnu History Libr)108 472.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E (ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 484.8 Q F0(\(1\))A F1 (FILES)72 501.6 Q F2(~/.inputr)109.666 513.6 Q(c)-.37 E F0(Indi)144 525.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E F0(initialization \214le)2.5 E F1 -.548(AU)72 542.4 S(THORS).548 E F0 (Brian F)108 554.4 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E (bfox@gnu.or)108 566.4 Q(g)-.18 E(Chet Rame)108 583.2 Q 1.3 -.65(y, C) -.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve) -.25 G(rsity).15 E(chet.rame)108 595.2 Q(y@case.edu)-.15 E F1 -.11(BU)72 612 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .691(If you \214nd a b) 108 624 R .691(ug in)-.2 F F3 -.18(re)3.191 G(adline,).18 E F0 .691 (you should report it.)3.191 F .69(But \214rst, you should mak)5.69 F 3.19(es)-.1 G .69(ure that it really is a b)-3.19 F(ug,)-.2 E (and that it appears in the latest v)108 636 Q(ersion of the)-.15 E F3 -.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.) .15 E .704(Once you ha)108 652.8 R 1.004 -.15(ve d)-.2 H .704 (etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b) -.15 F .705(ug report to)-.2 F F2 -.2(bu)3.205 G(g\255r).2 E(eadline) -.37 E F0(@)A F2(gnu.or)A(g)-.37 E F0 5.705(.I)C 3.205(fy)-5.705 G(ou) -3.205 E(ha)108 664.8 Q 1.81 -.15(ve a \214)-.2 H 1.51 (x, you are welcome to mail that as well!).15 F 1.509 (Suggestions and `philosophical' b)6.509 F 1.509(ug reports may be)-.2 F (mailed to)108 676.8 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2 (gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3 (gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 693.6 Q (ug reports concerning this manual page should be directed to)-.2 E F2 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.).25 E (GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(15)193.45 E 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10.95/Times-Bold@0 SF -.11(BU)72 84 S(GS).11 E F0(It')108 96 Q 2.5(st) -.55 G(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 6.3)72 768 Q(2014 January 6)128.74 E(16)193.45 E 0 Cg EP %%Trailer end %%EOF readline-6.3/doc/history_3.ps0000664000043600000240000013127312276516306015023 0ustar chetstaff%!PS-Adobe-3.0 %%Creator: groff version 1.19.2 %%CreationDate: Tue Feb 11 16:57:26 2014 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%DocumentSuppliedResources: procset grops 1.19 2 %%Pages: 7 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait %%EndComments %%BeginDefaults %%PageMedia: Default %%EndDefaults %%BeginProlog %%BeginResource: procset grops 1.19 2 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /setcmykcolor where{ pop /Ck/setcmykcolor load def }if /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def /setpagedevice{}def }bind def /PEND{ countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%EndProlog %%BeginSetup %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn /germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE /Times-Roman@0 ENC0/Times-Roman RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME) .219 E F0(history \255 GNU History Library)108 96 Q F1(COPYRIGHT)72 112.8 Q F0(The GNU History Library is Cop)108 124.8 Q (yright \251 1989-2011 by the Free Softw)-.1 E(are F)-.1 E (oundation, Inc.)-.15 E F1(DESCRIPTION)72 141.6 Q F0(Man)108 153.6 Q 2.81(yp)-.15 G .31(rograms read input from the user a line at a time.) -2.81 F .309(The GNU History library is able to k)5.309 F .309 (eep track of)-.1 F .024(those lines, associate arbitrary data with eac\ h line, and utilize information from pre)108 165.6 R .024 (vious lines in composing)-.25 F(ne)108 177.6 Q 2.5(wo)-.25 G(nes.)-2.5 E F1(HIST)72 199.2 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION)-.81 E F0 .823(The history library supports a history e)108 211.2 R .822 (xpansion feature that is identical to the history e)-.15 F .822 (xpansion in)-.15 F/F2 10/Times-Bold@0 SF(bash.)3.322 E F0 (This section describes what syntax features are a)108 223.2 Q -.25(va) -.2 G(ilable.).25 E 1.305(History e)108 240 R 1.305 (xpansions introduce w)-.15 F 1.306(ords from the history list into the\ input stream, making it easy to repeat)-.1 F .21 (commands, insert the ar)108 252 R .21(guments to a pre)-.18 F .209 (vious command into the current input line, or \214x errors in pre)-.25 F(vious)-.25 E(commands quickly)108 264 Q(.)-.65 E 1.296(History e)108 280.8 R 1.297(xpansion is usually performed immediately after a complet\ e line is read.)-.15 F 1.297(It tak)6.297 F 1.297(es place in tw)-.1 F (o)-.1 E 2.855(parts. The)108 292.8 R .354(\214rst is to determine whic\ h line from the history list to use during substitution.)2.855 F .354 (The second is to)5.354 F .116 (select portions of that line for inclusion into the current one.)108 304.8 R .117(The line selected from the history is the)5.116 F/F3 10 /Times-Italic@0 SF -.15(ev)2.617 G(ent).15 E F0(,)A .846 (and the portions of that line that are acted upon are)108 316.8 R F3 (wor)3.346 E(ds)-.37 E F0 5.846(.V)C(arious)-6.956 E F3(modi\214er)3.346 E(s)-.1 E F0 .846(are a)3.346 F -.25(va)-.2 G .845(ilable to manipulate) .25 F .304(the selected w)108 328.8 R 2.804(ords. The)-.1 F .304 (line is brok)2.804 F .304(en into w)-.1 F .304(ords in the same f)-.1 F .304(ashion as)-.1 F F2(bash)2.804 E F0 .305 (does when reading input, so)2.804 F .539(that se)108 340.8 R -.15(ve) -.25 G .539(ral w).15 F .539(ords that w)-.1 F .539 (ould otherwise be separated are considered one w)-.1 F .538 (ord when surrounded by quotes)-.1 F .307(\(see the description of)108 352.8 R F2(history_tok)2.807 E(enize\(\))-.1 E F0(belo)2.807 E 2.807 (w\). History)-.25 F -.15(ex)2.807 G .307 (pansions are introduced by the appearance of).15 F .52(the history e) 108 364.8 R .52(xpansion character)-.15 F 3.02(,w)-.4 G .52(hich is) -3.02 F F2(!)3.853 E F0 .52(by def)3.853 F 3.02(ault. Only)-.1 F .52 (backslash \()3.02 F F2(\\).833 E F0 3.02(\)a).833 G .52 (nd single quotes can quote the)-3.02 F(history e)108 376.8 Q (xpansion character)-.15 E(.)-.55 E F2(Ev)87 393.6 Q(ent Designators)-.1 E F0 .204(An e)108 405.6 R -.15(ve)-.25 G .204(nt designator is a refer\ ence to a command line entry in the history list.).15 F .205 (Unless the reference is abso-)5.204 F(lute, e)108 417.6 Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot).15 G (he current position in the history list.)-2.5 E F2(!)108 434.4 Q F0 (Start a history substitution, e)32.67 E(xcept when follo)-.15 E (wed by a)-.25 E F2(blank)2.5 E F0 2.5(,n)C -.25(ew)-2.5 G (line, = or \(.).25 E F2(!)108 446.4 Q F3(n)A F0(Refer to command line) 27.67 E F3(n)2.5 E F0(.).24 E F2<21ad>108 458.4 Q F3(n)A F0 (Refer to the current command minus)21.97 E F3(n)2.5 E F0(.).24 E F2(!!) 108 470.4 Q F0(Refer to the pre)29.34 E(vious command.)-.25 E (This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 482.4 Q F3(string) A F0 .865(Refer to the most recent command preceding the current positi\ on in the history list starting with)9.33 F F3(string)144 494.4 Q F0(.) .22 E F2(!?)108 506.4 Q F3(string)A F2([?])A F0 1.503(Refer to the most\ recent command preceding the current position in the history list cont\ aining)144 518.4 R F3(string)144 530.4 Q F0 5(.T).22 G(he trailing)-5 E F2(?)2.5 E F0(may be omitted if)2.5 E F3(string)2.84 E F0(is follo)2.72 E(wed immediately by a ne)-.25 E(wline.)-.25 E/F4 12/Times-Bold@0 SF(^) 108 547.4 Q F3(string1)-5 I F4(^)5 I F3(string2)-5 I F4(^)5 I F0 2.63 (Quick substitution.)144 554.4 R 2.629 (Repeat the last command, replacing)7.629 F F3(string1)5.469 E F0(with) 5.129 E F3(string2)5.129 E F0 7.629(.E).02 G(qui)-7.629 E -.25(va)-.25 G 2.629(lent to).25 F -.74(``)144 566.4 S(!!:s/).74 E F3(string1)A F0(/)A F3(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F2(Modi\214ers)2.5 E F0 (belo)2.5 E(w\).)-.25 E F2(!#)108 578.4 Q F0 (The entire command line typed so f)27.67 E(ar)-.1 E(.)-.55 E F2 -.75 (Wo)87 595.2 S(rd Designators).75 E F0 -.8(Wo)108 607.2 S 1.313 (rd designators are used to select desired w).8 F 1.314(ords from the e) -.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F0 1.314 (separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation).15 F .53(from the w)108 619.2 R .529(ord designator)-.1 F 5.529(.I)-.55 G 3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 (ord designator be)-.1 F .529(gins with a)-.15 F F2(^)3.029 E F0(,)A F2 ($)3.029 E F0(,)A F2(*)3.029 E F0(,)A F23.029 E F0 3.029(,o)C(r) -3.029 E F2(%)3.029 E F0 5.529(.W)C(ords)-6.329 E 1.3 (are numbered from the be)108 631.2 R 1.3 (ginning of the line, with the \214rst w)-.15 F 1.301 (ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.301 G 1.301(rds are).8 F(inserted into the current line separated by single spaces.)108 643.2 Q F2 2.5(0\()108 660 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 672 Q 2.5 (ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E F3 (n)108.36 684 Q F0(The)30.64 E F3(n)2.5 E F0(th w)A(ord.)-.1 E F2(^)108 696 Q F0(The \214rst ar)32.67 E 2.5(gument. That)-.18 F(is, w)2.5 E (ord 1.)-.1 E F2($)108 708 Q F0 .064(The last w)31 F 2.564(ord. This)-.1 F .064(is usually the last ar)2.564 F .064(gument, b)-.18 F .064 (ut will e)-.2 F .064(xpand to the zeroth w)-.15 F .063 (ord if there is only)-.1 F(one w)144 720 Q(ord in the line.)-.1 E (GNU History 6.3)72 768 Q(2013 June 27)138.175 E(1)202.335 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(%)108 84 Q F0(The w)26 E (ord matched by the most recent `?)-.1 E/F2 10/Times-Italic@0 SF(string) A F0(?' search.)A F2(x)108.77 96 Q F1A F2(y)A F0 2.5(Ar)20.65 G (ange of w)-2.5 E(ords; `\255)-.1 E F2(y)A F0 2.5('a)C(bbre)-2.5 E (viates `0\255)-.25 E F2(y)A F0('.)A F1(*)108 108 Q F0 .315 (All of the w)31 F .315(ords b)-.1 F .315(ut the zeroth.)-.2 F .315 (This is a synon)5.315 F .315(ym for `)-.15 F F2(1\255$)A F0 2.815 ('. It)B .315(is not an error to use)2.815 F F1(*)2.816 E F0 .316 (if there is)2.816 F(just one w)144 120 Q(ord in the e)-.1 E -.15(ve) -.25 G(nt; the empty string is returned in that case.).15 E F1(x*)108 132 Q F0(Abbre)26 E(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1<78ad>108 144 Q F0(Abbre)25.3 E(viates)-.25 E F2(x\255$)2.5 E F0(lik)2.5 E(e)-.1 E F1 (x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E(ord.)-.1 E(If a w)108 160.8 Q(ord designator is supplied without an e)-.1 E -.15(ve)-.25 G (nt speci\214cation, the pre).15 E(vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1(Modi\214ers)87 177.6 Q F0 .184 (After the optional w)108 189.6 R .184(ord designator)-.1 F 2.684(,t)-.4 G .183(here may appear a sequence of one or more of the follo)-2.684 F .183(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 201.6 Q F1(h) 108 218.4 Q F0(Remo)30.44 E .3 -.15(ve a t)-.15 H (railing \214le name component, lea).15 E(ving only the head.)-.2 E F1 (t)108 230.4 Q F0(Remo)32.67 E .3 -.15(ve a)-.15 H (ll leading \214le name components, lea).15 E(ving the tail.)-.2 E F1(r) 108 242.4 Q F0(Remo)31.56 E .3 -.15(ve a t)-.15 H(railing suf).15 E (\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E (ving the basename.)-.2 E F1(e)108 254.4 Q F0(Remo)31.56 E .3 -.15(ve a) -.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 266.4 Q F0(Print the ne)30.44 E 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2 E -.15(xe)-.15 G(cute it.).15 E F1(q)108 278.4 Q F0 (Quote the substituted w)30.44 E(ords, escaping further substitutions.) -.1 E F1(x)108 290.4 Q F0(Quote the substituted w)31 E(ords as with)-.1 E F1(q)2.5 E F0 2.5(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks) 2.5 E F0(and ne)2.5 E(wlines.)-.25 E F1(s/)108 302.4 Q F2(old)A F1(/)A F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 314.4 Q F2(ne)3.081 E(w)-.15 E F0 .221(for the \214rst occurrence of)3.031 F F2(old)2.951 E F0 .221 (in the e)3.491 F -.15(ve)-.25 G .221(nt line.).15 F(An)5.221 E 2.721 (yd)-.15 G .221(elimiter can be used in place)-2.721 F .617(of /.)144 326.4 R .617 (The \214nal delimiter is optional if it is the last character of the e) 5.617 F -.15(ve)-.25 G .617(nt line.).15 F .616(The delimiter may)5.616 F .666(be quoted in)144 338.4 R F2(old)3.396 E F0(and)3.936 E F2(ne) 3.526 E(w)-.15 E F0 .666(with a single backslash.)3.476 F .666 (If & appears in)5.666 F F2(ne)3.166 E(w)-.15 E F0 3.166(,i).31 G 3.166 (ti)-3.166 G 3.166(sr)-3.166 G .666(eplaced by)-3.166 F F2(old)3.166 E F0 5.666(.A).77 G .275(single backslash will quote the &.)144 350.4 R (If)5.275 E F2(old)3.004 E F0 .274(is null, it is set to the last)3.544 F F2(old)3.004 E F0 .274(substituted, or)3.544 F 2.774(,i)-.4 G 2.774 (fn)-2.774 G 2.774(op)-2.774 G(re)-2.774 E(vi-)-.25 E (ous history substitutions took place, the last)144 362.4 Q F2(string) 2.84 E F0(in a)2.72 E F1(!?)2.5 E F2(string)A F1([?])A F0(search.)5 E F1 (&)108 374.4 Q F0(Repeat the pre)27.67 E(vious substitution.)-.25 E F1 (g)108 386.4 Q F0 .397(Cause changes to be applied o)31 F -.15(ve)-.15 G 2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398(nt line.) .15 F .398(This is used in conjunction with `)5.398 F F1(:s)A F0 2.898 ('\()C(e.g.,)-2.898 E(`)144 398.4 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w) -.15 E F1(/)A F0 1.219('\) or `)B F1(:&)A F0 3.719('. If)B 1.219 (used with `)3.719 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.218 (elimiter can be used in place of /, and the \214nal)-3.718 F .089 (delimiter is optional if it is the last character of the e)144 410.4 R -.15(ve)-.25 G .09(nt line.).15 F(An)5.09 E F1(a)2.59 E F0 .09 (may be used as a synon)2.59 F .09(ym for)-.15 F F1(g)144 422.4 Q F0(.)A F1(G)108 434.4 Q F0(Apply the follo)28.22 E(wing `)-.25 E F1(s)A F0 2.5 ('m)C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E -.15(ve)-.25 G (nt line.).15 E/F3 10.95/Times-Bold@0 SF(PR)72 451.2 Q (OGRAMMING WITH HIST)-.329 E(OR)-.197 E 2.738(YF)-.383 G(UNCTIONS)-2.738 E F0(This section describes ho)108 463.2 Q 2.5(wt)-.25 G 2.5(ou)-2.5 G (se the History library in other programs.)-2.5 E F1(Intr)87 480 Q (oduction to History)-.18 E F0 .797 (The programmer using the History library has a)108 492 R -.25(va)-.2 G .796(ilable functions for remembering lines on a history list,).25 F .307(associating arbitrary data with a line, remo)108 504 R .308 (ving lines from the list, searching through the list for a line con-) -.15 F .303(taining an arbitrary te)108 516 R .303 (xt string, and referencing an)-.15 F 2.803(yl)-.15 G .303 (ine in the list directly)-2.803 F 5.303(.I)-.65 G 2.803(na)-5.303 G .303(ddition, a history)-2.803 F F2 -.2(ex)2.802 G(pansion).2 E F0 (function is a)108 528 Q -.25(va)-.2 G(ilable which pro).25 E (vides for a consistent user interf)-.15 E(ace across dif)-.1 E (ferent programs.)-.25 E .059(The user using programs written with the \ History library has the bene\214t of a consistent user interf)108 544.8 R .059(ace with a)-.1 F .918(set of well-kno)108 556.8 R .917 (wn commands for manipulating the te)-.25 F .917(xt of pre)-.15 F .917 (vious lines and using that te)-.25 F .917(xt in ne)-.15 F 3.417(wc)-.25 G(om-)-3.417 E 4.183(mands. The)108 568.8 R 1.684(basic history manipul\ ation commands are identical to the history substitution pro)4.183 F 1.684(vided by)-.15 F F1(bash)108 580.8 Q F0(.)A .904 (If the programmer desires, he can use the Readline library)108 597.6 R 3.403(,w)-.65 G .903(hich includes some history manipulation by)-3.403 F (def)108 609.6 Q(ault, and has the added adv)-.1 E (antage of command line editing.)-.25 E .39(Before declaring an)108 626.4 R 2.89(yf)-.15 G .39(unctions using an)-2.89 F 2.89(yf)-.15 G .39 (unctionality the History library pro)-2.89 F .39 (vides in other code, an appli-)-.15 F .067 (cation writer should include the \214le)108 638.4 R F2()-.55 E F0 .067(in an)4.233 F 2.566<798c>-.15 G .066(le that uses the History library')-2.566 F 2.566(sf)-.55 G (eatures.)-2.566 E .538(It supplies e)108 650.4 R .538 (xtern declarations for all of the library')-.15 F 3.038(sp)-.55 G .538 (ublic functions and v)-3.038 F .539(ariables, and declares all of the) -.25 F(public data structures.)108 662.4 Q F1(History Storage)87 691.2 Q F0(The history list is an array of history entries.)108 703.2 Q 2.5(Ah)5 G(istory entry is declared as follo)-2.5 E(ws:)-.25 E F2(typedef void *) 108 720 Q F1(histdata_t;)2.5 E F0(GNU History 6.3)72 768 Q(2013 June 27) 138.175 E(2)202.335 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E(typedef struct _hist_entry {)108 84 Q (char *line;)113 96 Q(char *timestamp;)113 108 Q(histdata_t data;)113 120 Q 2.5(}H)108 132 S(IST_ENTR)-2.5 E -.92(Y;)-.65 G (The history list itself might therefore be declared as)108 148.8 Q/F1 10/Times-Italic@0 SF(HIST_ENTR)108 165.6 Q 2.5(Y*)-.18 G(*)-2.5 E/F2 10 /Times-Bold@0 SF(the_history_list;)2.5 E F0(The state of the History li\ brary is encapsulated into a single structure:)108 182.4 Q(/*)108 199.2 Q 2.5(*As)110.5 211.2 S (tructure used to pass around the current state of the history)-2.5 E(.) -.65 E(*/)110.5 223.2 Q(typedef struct _hist_state {)108 235.2 Q (HIST_ENTR)113 247.2 Q 2.5(Y*)-.65 G (*entries; /* Pointer to the entries themselv)-2.5 E(es. */)-.15 E (int of)113 259.2 Q 25(fset; /*)-.25 F (The location pointer within this array)2.5 E 2.5(.*)-.65 G(/)-2.5 E (int length;)113 271.2 Q(/* Number of elements within this array)27.5 E 2.5(.*)-.65 G(/)-2.5 E(int size;)113 283.2 Q (/* Number of slots allocated to this array)32.5 E 2.5(.*)-.65 G(/)-2.5 E(int \215ags;)113 295.2 Q 2.5(}H)108 307.2 S(IST)-2.5 E(OR)-.18 E(Y_ST) -.65 E -1.11(AT)-.93 G(E;)1.11 E(If the \215ags member includes)108 324 Q F2(HS_STIFLED)2.5 E F0 2.5(,t)C(he history has been sti\215ed.)-2.5 E /F3 10.95/Times-Bold@0 SF(History Functions)72 340.8 Q F0 (This section describes the calling sequence for the v)108 352.8 Q (arious functions e)-.25 E(xported by the GNU History library)-.15 E(.) -.65 E F2(Initializing History and State Management)87 369.6 Q F0 1.274 (This section describes functions used to initialize and manage the sta\ te of the History library when you)108 381.6 R -.1(wa)108 393.6 S (nt to use the history functions in your program.).1 E F1(void)108 417.6 Q F2(using_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Be)108 429.6 Q(gin a session in which the history functions might be used.)-.15 E(This initializes the interacti)5 E .3 -.15(ve v)-.25 H(ariables.)-.1 E F1(HIST)108 453.6 Q(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5(E*).37 G F2 (history_get_history_state)A F0(\()4.166 E F1(void)A F0(\))1.666 E (Return a structure describing the current state of the input history) 108 465.6 Q(.)-.65 E F1(void)108 489.6 Q F2(history_set_history_state) 2.5 E F0(\()4.166 E F1(HIST)A(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5 (E*).37 G(state)-2.5 E F0(\))1.666 E (Set the state of the history list according to)108 501.6 Q F1(state)2.5 E F0(.)A F2(History List Management)87 530.4 Q F0 (These functions manage indi)108 542.4 Q(vidual entries on the history \ list, or set parameters managing the list itself.)-.25 E F1(void)108 566.4 Q F2(add_history)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15 E F0(\))1.666 E(Place)108 578.4 Q F1(string)2.5 E F0 (at the end of the history list.)2.5 E (The associated data \214eld \(if an)5 E(y\) is set to)-.15 E F2(NULL) 2.5 E F0(.)A F1(void)108 602.4 Q F2(add_history_time)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15 E F0(\))1.666 E (Change the time stamp associated with the most recent history entry to) 108 614.4 Q F1(string)2.5 E F0(.)A F1(HIST_ENTR)108 638.4 Q 2.5(Y*)-.18 G F2 -.18(re)C(mo).18 E -.1(ve)-.1 G(_history).1 E F0(\()4.166 E F1 (int whic)A(h)-.15 E F0(\))1.666 E(Remo)108 650.4 Q .352 -.15(ve h)-.15 H .052(istory entry at of).15 F(fset)-.25 E F1(whic)2.553 E(h)-.15 E F0 .053(from the history)2.553 F 5.053(.T)-.65 G .053(he remo)-5.053 F -.15 (ve)-.15 G 2.553(de).15 G .053(lement is returned so you can free the) -2.553 F(line, data, and containing structure.)108 662.4 Q F1 (histdata_t)108 686.4 Q F2(fr)2.5 E(ee_history_entry)-.18 E F0(\()4.166 E F1(HIST_ENTR)A 2.5(Y*)-.18 G(histent)-2.5 E F0(\))1.666 E .934 (Free the history entry)108 698.4 R F1(histent)3.433 E F0 .933(and an) 3.433 F 3.433(yh)-.15 G .933(istory library pri)-3.433 F -.25(va)-.25 G .933(te data associated with it.).25 F .933(Returns the applica-)5.933 F (tion-speci\214c data so the caller can dispose of it.)108 710.4 Q (GNU History 6.3)72 768 Q(2013 June 27)138.175 E(3)202.335 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF(HIST_ENTR)108 84 Q 2.5 (Y*)-.18 G/F2 10/Times-Bold@0 SF -.18(re)C(place_history_entry).18 E F0 (\()4.166 E F1(int whic)A -.834(h, const)-.15 F -.15(ch)2.5 G(ar *line) .15 E 1.666(,h)-.1 G(istdata_t data)-1.666 E F0(\))3.332 E(Mak)108 96 Q 3.062(et)-.1 G .562(he history entry at of)-3.062 F(fset)-.25 E F1(whic) 3.062 E(h)-.15 E F0(ha)3.062 E -.15(ve)-.2 G F1(line)3.212 E F0(and) 3.062 E F1(data)3.062 E F0 5.563(.T)C .563 (his returns the old entry so the caller can dis-)-5.563 F(pose of an) 108 108 Q 2.5(ya)-.15 G(pplication-speci\214c data.)-2.5 E (In the case of an in)5 E -.25(va)-.4 G(lid).25 E F1(whic)2.5 E(h)-.15 E F0 2.5(,a)C F2(NULL)A F0(pointer is returned.)2.5 E F1(void)108 132 Q F2 (clear_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E (Clear the history list by deleting all the entries.)108 144 Q F1(void) 108 168 Q F2(sti\215e_history)2.5 E F0(\()4.166 E F1(int max)A F0(\)) 1.666 E(Sti\215e the history list, remembering only the last)108 180 Q F1(max)2.5 E F0(entries.)2.5 E F1(int)108 204 Q F2(unsti\215e_history) 2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .46 (Stop sti\215ing the history)108 216 R 5.46(.T)-.65 G .46 (his returns the pre)-5.46 F .46 (viously-set maximum number of history entries \(as set by)-.25 F F2 (sti-)2.96 E(\215e_history\(\))108 228 Q F0 2.5(\). history)B -.1(wa)2.5 G 2.5(ss).1 G 2.5(ti\215ed. The)-2.5 F -.25(va)2.5 G(lue is positi).25 E .3 -.15(ve i)-.25 H 2.5(ft).15 G(he history w)-2.5 E(as sti\215ed, ne) -.1 E -.05(ga)-.15 G(ti).05 E .3 -.15(ve i)-.25 H 2.5(fi).15 G 2.5(tw) -2.5 G(asn')-2.6 E(t.)-.18 E F1(int)108 252 Q F2(history_is_sti\215ed) 2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E (Returns non-zero if the history is sti\215ed, zero if it is not.)108 264 Q F2(Inf)87 292.8 Q(ormation About the History List)-.25 E F0(These\ functions return information about the entire history list or indi)108 304.8 Q(vidual list entries.)-.25 E F1(HIST_ENTR)108 328.8 Q 2.5(Y*)-.18 G(*)-2.5 E F2(history_list)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .707(Return a)108 340.8 R F2(NULL)3.207 E F0 .707(terminated array of) 3.207 F F1(HIST_ENTR)3.207 E 3.208(Y*)-.18 G F0 .708 (which is the current input history)B 5.708(.E)-.65 G .708 (lement 0 of this)-5.708 F(list is the be)108 352.8 Q(ginning of time.) -.15 E(If there is no history)5 E 2.5(,r)-.65 G(eturn)-2.5 E F2(NULL)2.5 E F0(.)A F1(int)108 376.8 Q F2(wher)2.5 E(e_history)-.18 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Returns the of)108 388.8 Q (fset of the current history element.)-.25 E F1(HIST_ENTR)108 412.8 Q 2.5(Y*)-.18 G F2(curr)A(ent_history)-.18 E F0(\()4.166 E F1(void)A F0 (\))1.666 E 1.373 (Return the history entry at the current position, as determined by)108 424.8 R F2(wher)3.873 E(e_history\(\))-.18 E F0 6.373(.I)C 3.873(ft) -6.373 G 1.373(here is no entry)-3.873 F(there, return a)108 436.8 Q F2 (NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(HIST_ENTR)108 460.8 Q 2.5(Y*) -.18 G F2(history_get)A F0(\()4.166 E F1(int of)A(fset)-.18 E F0(\)) 1.666 E .287(Return the history entry at position)108 472.8 R F1(of) 2.787 E(fset)-.18 E F0 2.787(,s)C .287(tarting from)-2.787 F F2 (history_base)2.787 E F0 5.287(.I)C 2.787(ft)-5.287 G .287 (here is no entry there, or if)-2.787 F F1(of)2.788 E(fset)-.18 E F0 (is greater than the history length, return a)108 484.8 Q F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(time_t)108 508.8 Q F2(history_get_time)2.5 E F0(\()4.166 E F1(HIST_ENTR)A 2.5(Y*)-.18 G F0(\))-.834 E(Return the t\ ime stamp associated with the history entry passed as the ar)108 520.8 Q (gument.)-.18 E F1(int)108 544.8 Q F2(history_total_bytes)2.5 E F0(\() 4.166 E F1(void)A F0(\))1.666 E .392 (Return the number of bytes that the primary history entries are using.) 108 556.8 R .391(This function returns the sum of the)5.392 F (lengths of all the lines in the history)108 568.8 Q(.)-.65 E F2(Mo)87 597.6 Q(ving Ar)-.1 E(ound the History List)-.18 E F0 (These functions allo)108 609.6 Q 2.5(wt)-.25 G(he current inde)-2.5 E 2.5(xi)-.15 G(nto the history list to be set or changed.)-2.5 E F1(int) 108 633.6 Q F2(history_set_pos)2.5 E F0(\()4.166 E F1(int pos)A F0(\)) 1.666 E .79(Set the current history of)108 645.6 R .79(fset to)-.25 F F1 (pos)3.29 E F0 3.29(,a)C 3.29(na)-3.29 G .79(bsolute inde)-3.29 F 3.29 (xi)-.15 G .79(nto the list.)-3.29 F .79(Returns 1 on success, 0 if)5.79 F F1(pos)3.29 E F0 .79(is less)3.29 F (than zero or greater than the number of history entries.)108 657.6 Q F1 (HIST_ENTR)108 681.6 Q 2.5(Y*)-.18 G F2(pr)A -.15(ev)-.18 G (ious_history).15 E F0(\()4.166 E F1(void)A F0(\))1.666 E .208 (Back up the current history of)108 693.6 R .208(fset to the pre)-.25 F .208(vious history entry)-.25 F 2.707(,a)-.65 G .207 (nd return a pointer to that entry)-2.707 F 5.207(.I)-.65 G 2.707(ft) -5.207 G .207(here is)-2.707 F(no pre)108 705.6 Q(vious entry)-.25 E 2.5 (,r)-.65 G(eturn a)-2.5 E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1 (HIST_ENTR)108 729.6 Q 2.5(Y*)-.18 G F2(next_history)A F0(\()4.166 E F1 (void)A F0(\))1.666 E(GNU History 6.3)72 768 Q(2013 June 27)138.175 E(4) 202.335 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E(Mo)108 84 Q 1.046 -.15(ve t)-.15 H .746 (he current history of).15 F .746(fset forw)-.25 F .746(ard to the ne) -.1 F .746(xt history entry)-.15 F 3.246(,a)-.65 G .747 (nd return the a pointer to that entry)-3.246 F 5.747(.I)-.65 G(f)-5.747 E(there is no ne)108 96 Q(xt entry)-.15 E 2.5(,r)-.65 G(eturn a)-2.5 E /F1 10/Times-Bold@0 SF(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(Sear)87 124.8 Q(ching the History List)-.18 E F0 .006(These functions allo)108 136.8 R 2.506(ws)-.25 G .006(earching of the history list for entries c\ ontaining a speci\214c string.)-2.506 F .005(Searching may be)5.005 F 1.451(performed both forw)108 148.8 R 1.451(ard and backw)-.1 F 1.451 (ard from the current history position.)-.1 F 1.452(The search may be) 6.452 F/F2 10/Times-Italic@0 SF(anc)3.952 E(hor)-.15 E(ed)-.37 E F0(,)A (meaning that the string must match at the be)108 160.8 Q (ginning of the history entry)-.15 E(.)-.65 E F2(int)108 184.8 Q F1 (history_sear)2.5 E(ch)-.18 E F0(\()4.166 E F2(const c)A(har *string) -.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\))1.666 E .156 (Search the history for)108 196.8 R F2(string)2.656 E F0 2.656(,s)C .156 (tarting at the current history of)-2.656 F 2.656(fset. If)-.25 F F2 (dir)2.656 E(ection)-.37 E F0 .155(is less than 0, then the search)2.656 F .801(is through pre)108 208.8 R .801 (vious entries, otherwise through subsequent entries.)-.25 F(If)5.801 E F2(string)3.301 E F0 .802(is found, then the current his-)3.301 F .065 (tory inde)108 220.8 R 2.565(xi)-.15 G 2.564(ss)-2.565 G .064 (et to that history entry)-2.564 F 2.564(,a)-.65 G .064(nd the v)-2.564 F .064(alue returned is the of)-.25 F .064 (fset in the line of the entry where)-.25 F F2(string)2.564 E F0 -.1(wa) 108 232.8 S 2.5(sf).1 G 2.5(ound. Otherwise,)-2.5 F (nothing is changed, and a -1 is returned.)2.5 E F2(int)108 256.8 Q F1 (history_sear)2.5 E(ch_pr)-.18 E(e\214x)-.18 E F0(\()4.166 E F2(const c) A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\)) 1.666 E .683(Search the history for)108 268.8 R F2(string)3.183 E F0 3.183(,s)C .683(tarting at the current history of)-3.183 F 3.183 (fset. The)-.25 F .683(search is anchored: matching lines)3.183 F 1.064 (must be)108 280.8 R 1.064(gin with)-.15 F F2(string)3.564 E F0 6.064 (.I)C(f)-6.064 E F2(dir)3.564 E(ection)-.37 E F0 1.063 (is less than 0, then the search is through pre)3.564 F 1.063 (vious entries, otherwise)-.25 F 1.114(through subsequent entries.)108 292.8 R(If)6.114 E F2(string)3.614 E F0 1.114 (is found, then the current history inde)3.614 F 3.615(xi)-.15 G 3.615 (ss)-3.615 G 1.115(et to that entry)-3.615 F 3.615(,a)-.65 G 1.115 (nd the)-3.615 F(return v)108 304.8 Q(alue is 0.)-.25 E (Otherwise, nothing is changed, and a -1 is returned.)5 E F2(int)108 328.8 Q F1(history_sear)2.5 E(ch_pos)-.18 E F0(\()4.166 E F2(const c)A (har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E -.834(ection, int) -.37 F(pos)2.5 E F0(\))3.332 E .604(Search for)108 340.8 R F2(string) 3.104 E F0 .604(in the history list, starting at)3.104 F F2(pos)3.104 E F0 3.104(,a)C 3.104(na)-3.104 G .604(bsolute inde)-3.104 F 3.104(xi)-.15 G .603(nto the list.)-3.104 F(If)5.603 E F2(dir)3.103 E(ection)-.37 E F0 .603(is ne)3.103 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(,).15 E .608 (the search proceeds backw)108 352.8 R .608(ard from)-.1 F F2(pos)3.108 E F0 3.108(,o)C .608(therwise forw)-3.108 F 3.108(ard. Returns)-.1 F .608(the absolute inde)3.108 F 3.108(xo)-.15 G 3.108(ft)-3.108 G .608 (he history ele-)-3.108 F(ment where)108 364.8 Q F2(string)2.5 E F0 -.1 (wa)2.5 G 2.5(sf).1 G(ound, or -1 otherwise.)-2.5 E F1 (Managing the History File)87 393.6 Q F0 .035(The History library can r\ ead the history from and write it to a \214le.)108 405.6 R .035 (This section documents the functions for)5.035 F (managing a history \214le.)108 417.6 Q F2(int)108 441.6 Q F1 -.18(re) 2.5 G(ad_history).18 E F0(\()4.166 E F2(const c)A(har *\214lename)-.15 E F0(\))1.666 E .15(Add the contents of)108 453.6 R F2(\214lename)2.65 E F0 .15(to the history list, a line at a time.)2.65 F(If)5.151 E F2 (\214lename)2.651 E F0(is)2.651 E F1(NULL)2.651 E F0 2.651(,t)C .151 (hen read from)-2.651 F F2(~/.his-)2.651 E(tory)108 465.6 Q F0 5(.R)C (eturns 0 if successful, or)-5 E F1(err)2.5 E(no)-.15 E F0(if not.)2.5 E F2(int)108 489.6 Q F1 -.18(re)2.5 G(ad_history_range).18 E F0(\()4.166 E F2(const c)A(har *\214lename)-.15 E 1.666(,i)-.1 G(nt fr)-1.666 E -.834 (om, int)-.45 F(to)2.5 E F0(\))3.332 E .053(Read a range of lines from) 108 501.6 R F2(\214lename)2.553 E F0 2.553(,a)C .053 (dding them to the history list.)-2.553 F .053(Start reading at line) 5.053 F F2(fr)2.553 E(om)-.45 E F0 .052(and end at)2.553 F F2(to)2.552 E F0(.)A(If)108 513.6 Q F2(fr)2.888 E(om)-.45 E F0 .388 (is zero, start at the be)2.888 F 2.889(ginning. If)-.15 F F2(to)2.889 E F0 .389(is less than)2.889 F F2(fr)2.889 E(om)-.45 E F0 2.889(,t)C .389 (hen read until the end of the \214le.)-2.889 F(If)5.389 E F2 (\214lename)2.889 E F0(is)108 525.6 Q F1(NULL)2.5 E F0 2.5(,t)C (hen read from)-2.5 E F2(~/.history)2.5 E F0 5(.R)C (eturns 0 if successful, or)-5 E F1(err)2.5 E(no)-.15 E F0(if not.)2.5 E F2(int)108 549.6 Q F1(write_history)2.5 E F0(\()4.166 E F2(const c)A (har *\214lename)-.15 E F0(\))1.666 E .962(Write the current history to) 108 561.6 R F2(\214lename)3.462 E F0 3.461(,o)C -.15(ve)-3.611 G (rwriting).15 E F2(\214lename)3.461 E F0 .961(if necessary)3.461 F 5.961 (.I)-.65 G(f)-5.961 E F2(\214lename)3.461 E F0(is)3.461 E F1(NULL)3.461 E F0 3.461(,t)C .961(hen write)-3.461 F(the history list to)108 573.6 Q F2(~/.history)2.5 E F0 5(.R)C(eturns 0 on success, or)-5 E F1(err)2.5 E (no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F2(int)108 609.6 Q F1(append_history)2.5 E F0(\()4.166 E F2(int nelements,)A(const c)1.666 E(har *\214lename)-.15 E F0(\))1.666 E .838(Append the last)108 621.6 R F2(nelements)3.338 E F0 .839(of the history list to)3.339 F F2 (\214lename)3.339 E F0 5.839(.I)C(f)-5.839 E F2(\214lename)3.339 E F0 (is)3.339 E F1(NULL)3.339 E F0 3.339(,t)C .839(hen append to)-3.339 F F2 (~/.history)3.339 E F0(.)A(Returns 0 on success, or)108 633.6 Q F1(err) 2.5 E(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F2(int)108 657.6 Q F1(history_truncate_\214le)2.5 E F0(\()4.166 E F2(const c)A (har *\214lename)-.15 E 1.666(,i)-.1 G(nt nlines)-1.666 E F0(\))1.666 E -.35(Tr)108 669.6 S .381(uncate the history \214le).35 F F2(\214lename) 2.881 E F0 2.881(,l)C(ea)-2.881 E .381(ving only the last)-.2 F F2 (nlines)2.881 E F0 2.88(lines. If)2.881 F F2(\214lename)2.88 E F0(is) 2.88 E F1(NULL)2.88 E F0 2.88(,t)C(hen)-2.88 E F2(~/.history)2.88 E F0 (is)2.88 E 2.5(truncated. Returns)108 681.6 R 2.5(0o)2.5 G 2.5(ns)-2.5 G (uccess, or)-2.5 E F1(err)2.5 E(no)-.15 E F0(on f)2.5 E(ailure.)-.1 E (GNU History 6.3)72 768 Q(2013 June 27)138.175 E(5)202.335 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(History Expansion)87 84 Q F0(These functions implement history e)108 96 Q(xpansion.)-.15 E/F2 10 /Times-Italic@0 SF(int)108 120 Q F1(history_expand)2.5 E F0(\()4.166 E F2 -.15(ch)C(ar *string).15 E 1.666(,c)-.1 G(har **output)-1.816 E F0 (\))1.666 E(Expand)108 132 Q F2(string)2.5 E F0 2.5(,p)C (lacing the result into)-2.5 E F2(output)2.5 E F0 2.5(,ap)C (ointer to a string.)-2.5 E(Returns:)5 E 31(0I)144 144 S 3.065(fn)-31 G 3.065(oe)-3.065 G .565(xpansions took place \(or)-3.215 F 3.065(,i)-.4 G 3.065(ft)-3.065 G .565(he only change in the te)-3.065 F .566(xt w)-.15 F .566(as the remo)-.1 F -.25(va)-.15 G 3.066(lo).25 G 3.066(fe)-3.066 G (scape)-3.066 E(characters preceding the history e)180 156 Q (xpansion character\);)-.15 E 31(1i)144 168 S 2.5(fe)-31 G (xpansions did tak)-2.65 E 2.5(ep)-.1 G(lace;)-2.5 E 25.17(-1 if)144 180 R(there w)2.5 E(as an error in e)-.1 E(xpansion;)-.15 E 31(2i)144 192 S 2.5(ft)-31 G(he returned line should be displayed, b)-2.5 E(ut not e)-.2 E -.15(xe)-.15 G(cuted, as with the).15 E F1(:p)2.5 E F0(modi\214er)2.5 E(.)-.55 E(If an error ocurred in e)108 204 Q(xpansion, then)-.15 E F2 (output)2.5 E F0(contains a descripti)2.5 E .3 -.15(ve e)-.25 H (rror message.).15 E F2 -.15(ch)108 228 S(ar *).15 E F1(get_history_e) 2.5 E -.1(ve)-.15 G(nt).1 E F0(\()4.166 E F2(const c)A(har *string)-.15 E 1.666(,i)-.1 G(nt *cinde)-1.666 E -.834(x, int)-.2 F(qc)2.5 E(har)-.15 E F0(\))3.332 E .263(Returns the te)108 240 R .263(xt of the history e) -.15 F -.15(ve)-.25 G .263(nt be).15 F .263(ginning at)-.15 F F2(string) 2.763 E F0(+)2.763 E F2(*cinde)2.763 E(x)-.2 E F0(.)A F2(*cinde)5.263 E (x)-.2 E F0 .262(is modi\214ed to point to after the)2.762 F -2.15 -.25 (ev e)108 252 T .709(nt speci\214er).25 F 5.709(.A)-.55 G 3.209(tf) -5.709 G .709(unction entry)-3.209 F(,)-.65 E F2(cinde)3.209 E(x)-.2 E F0 .709(points to the inde)3.209 F 3.209(xi)-.15 G(nto)-3.209 E F2 (string)3.21 E F0 .71(where the history e)3.21 F -.15(ve)-.25 G .71 (nt speci\214ca-).15 F .528(tion be)108 264 R(gins.)-.15 E F2(qc)5.528 E (har)-.15 E F0 .527(is a character that is allo)3.028 F .527 (wed to end the e)-.25 F -.15(ve)-.25 G .527 (nt speci\214cation in addition to the `).15 F(`normal')-.74 E(')-.74 E (terminating characters.)108 276 Q F2 -.15(ch)108 300 S(ar **).15 E F1 (history_tok)2.5 E(enize)-.1 E F0(\()4.166 E F2(const c)A(har *string) -.15 E F0(\))1.666 E .238(Return an array of tok)108 312 R .238 (ens parsed out of)-.1 F F2(string)2.738 E F0 2.738(,m)C .239 (uch as the shell might.)-2.738 F .239(The tok)5.239 F .239 (ens are split on the charac-)-.1 F(ters in the)108 324 Q F1(history_w) 2.5 E(ord_delimiters)-.1 E F0 -.25(va)2.5 G (riable, and shell quoting con).25 E -.15(ve)-.4 G(ntions are obe).15 E (yed.)-.15 E F2 -.15(ch)108 348 S(ar *).15 E F1(history_ar)2.5 E (g_extract)-.1 E F0(\()4.166 E F2(int \214r)A -.834(st, int)-.1 F -.834 (last, const)2.5 F -.15(ch)2.5 G(ar *string).15 E F0(\))3.332 E .026 (Extract a string se)108 360 R .026(gment consisting of the)-.15 F F2 <8c72>2.526 E(st)-.1 E F0(through)2.526 E F2(last)2.526 E F0(ar)2.526 E .025(guments present in)-.18 F F2(string)2.525 E F0 5.025(.A)C -.18(rg) -5.025 G .025(uments are split).18 F(using)108 372 Q F1(history_tok)2.5 E(enize\(\))-.1 E F0(.)A F1(History V)87 400.8 Q(ariables)-.92 E F0 (This section describes the e)108 412.8 Q(xternally-visible v)-.15 E (ariables e)-.25 E(xported by the GNU History Library)-.15 E(.)-.65 E F2 (int)108 436.8 Q F1(history_base)2.5 E F0(The logical of)108 448.8 Q (fset of the \214rst entry in the history list.)-.25 E F2(int)108 472.8 Q F1(history_length)2.5 E F0 (The number of entries currently stored in the history list.)108 484.8 Q F2(int)108 508.8 Q F1(history_max_entries)2.5 E F0 (The maximum number of history entries.)108 520.8 Q (This must be changed using)5 E F1(sti\215e_history\(\))2.5 E F0(.)A F2 (int)108 544.8 Q F1(history_wite_timestamps)2.5 E F0 1.468 (If non-zero, timestamps are written to the history \214le, so the)108 556.8 R 3.968(yc)-.15 G 1.468(an be preserv)-3.968 F 1.468 (ed between sessions.)-.15 F(The)6.469 E(def)108 568.8 Q .439(ault v)-.1 F .439(alue is 0, meaning that timestamps are not sa)-.25 F -.15(ve)-.2 G 2.939(d. The).15 F .439(current timestamp format uses the v)2.939 F .438(alue of)-.25 F F2(history_comment_c)108 580.8 Q(har)-.15 E F0 .051 (to delimit timestamp entries in the history \214le.)2.551 F .051 (If that v)5.051 F .052(ariable does not ha)-.25 F .352 -.15(ve a v)-.2 H(alue)-.1 E(\(the def)108 592.8 Q (ault\), timestamps will not be written.)-.1 E F2 -.15(ch)108 616.8 S (ar).15 E F1(history_expansion_char)2.5 E F0 (The character that introduces a history e)108 628.8 Q -.15(ve)-.25 G 2.5(nt. The).15 F(def)2.5 E(ault is)-.1 E F1(!)2.5 E F0 5(.S)C (etting this to 0 inhibits history e)-5 E(xpansion.)-.15 E F2 -.15(ch) 108 652.8 S(ar).15 E F1(history_subst_char)2.5 E F0 (The character that in)108 664.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(sw).1 G (ord substitution if found at the start of a line.)-2.6 E(The def)5 E (ault is)-.1 E F1(^)2.5 E F0(.)A F2 -.15(ch)108 688.8 S(ar).15 E F1 (history_comment_char)2.5 E F0 .117(During tok)108 700.8 R .117 (enization, if this character is seen as the \214rst character of a w) -.1 F .117(ord, then it and all subsequent char)-.1 F(-)-.2 E .276 (acters up to a ne)108 712.8 R .276 (wline are ignored, suppressing history e)-.25 F .276 (xpansion for the remainder of the line.)-.15 F .277(This is dis-)5.276 F(abled by def)108 724.8 Q(ault.)-.1 E(GNU History 6.3)72 768 Q (2013 June 27)138.175 E(6)202.335 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F (OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF -.15(ch)108 84 S(ar *) .15 E/F2 10/Times-Bold@0 SF(history_w)2.5 E(ord_delimiters)-.1 E F0 (The characters that separate tok)108 96 Q(ens for)-.1 E F2(history_tok) 2.5 E(enize\(\))-.1 E F0 5(.T)C(he def)-5 E(ault v)-.1 E(alue is)-.25 E F2 2.5("\\)2.5 G(t\\n\(\)<>;&|")-2.5 E F0(.)A F1 -.15(ch)108 120 S(ar *) .15 E F2(history_no_expand_chars)2.5 E F0 2.054 (The list of characters which inhibit history e)108 132 R 2.054 (xpansion if found immediately follo)-.15 F(wing)-.25 E F2 (history_expan-)4.554 E(sion_char)108 144 Q F0 5(.T)C(he def)-5 E (ault is space, tab, ne)-.1 E(wline,)-.25 E F2(\\r)2.5 E F0 2.5(,a)C(nd) -2.5 E F2(=)2.5 E F0(.)A F1 -.15(ch)108 168 S(ar *).15 E F2 (history_sear)2.5 E(ch_delimiter_chars)-.18 E F0 .401(The list of addit\ ional characters which can delimit a history search string, in addition\ to space, tab,)108 180 R F1(:)2.901 E F0(and)2.901 E F1(?)2.902 E F0 (in the case of a substring search.)108 192 Q(The def)5 E(ault is empty) -.1 E(.)-.65 E F1(int)108 216 Q F2(history_quotes_inhibit_expansion)2.5 E F0 .625(If non-zero, single-quoted w)108 228 R .625 (ords are not scanned for the history e)-.1 F .624(xpansion character) -.15 F 5.624(.T)-.55 G .624(he def)-5.624 F .624(ault v)-.1 F .624 (alue is)-.25 F(0.)108 240 Q F1(rl_lineb)108 264 Q(uf_func_t *)-.2 E F2 (history_inhibit_expansion_function)2.5 E F0 .347 (This should be set to the address of a function that tak)108 276 R .348 (es tw)-.1 F 2.848(oa)-.1 G -.18(rg)-2.848 G .348(uments: a).18 F F2 .348(char *)2.848 F F0(\()2.848 E F1(string)A F0 2.848(\)a)C .348(nd an) -2.848 F F2(int)2.848 E F0(inde)2.848 E(x)-.15 E .228 (into that string \()108 288 R F1(i)A F0 2.728(\). It)B .227 (should return a non-zero v)2.727 F .227(alue if the history e)-.25 F .227(xpansion starting at)-.15 F F1(string[i])2.727 E F0 .227 (should not)2.727 F .019(be performed; zero if the e)108 300 R .019 (xpansion should be done.)-.15 F .019 (It is intended for use by applications lik)5.019 F(e)-.1 E F2(bash) 2.519 E F0 .019(that use)2.519 F(the history e)108 312 Q (xpansion character for additional purposes.)-.15 E(By def)5 E (ault, this v)-.1 E(ariable is set to)-.25 E F2(NULL)2.5 E F0(.)A/F3 10.95/Times-Bold@0 SF(FILES)72 328.8 Q F1(~/.history)109.666 340.8 Q F0 (Def)144 352.8 Q(ault \214lename for reading and writing sa)-.1 E -.15 (ve)-.2 G 2.5(dh).15 G(istory)-2.5 E F3(SEE ALSO)72 369.6 Q F1 (The Gnu Readline Libr)108 381.6 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E (ox and Chet Rame)-.15 E(y)-.15 E F1(The Gnu History Libr)108 393.6 Q (ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F1(bash)108 405.6 Q F0(\(1\))A F1 -.37(re)108 417.6 S(adline).37 E F0 (\(3\))A F3 -.548(AU)72 434.4 S(THORS).548 E F0(Brian F)108 446.4 Q (ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 458.4 Q(g)-.18 E(Chet Rame)108 475.2 Q 1.3 -.65(y, C)-.15 H(ase W).65 E (estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E (chet.rame)108 487.2 Q(y@case.edu)-.15 E F3 -.11(BU)72 504 S 2.738(GR) .11 G(EPOR)-2.738 E(TS)-.438 E F0 .16(If you \214nd a b)108 516 R .16 (ug in the)-.2 F F2(history)2.66 E F0(library)2.66 E 2.66(,y)-.65 G .16 (ou should report it.)-2.66 F .16(But \214rst, you should mak)5.16 F 2.66(es)-.1 G .16(ure that it really is)-2.66 F 2.5(ab)108 528 S (ug, and that it appears in the latest v)-2.7 E(ersion of the)-.15 E F2 (history)2.5 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.).15 E .704 (Once you ha)108 544.8 R 1.004 -.15(ve d)-.2 H .704(etermined that a b) .15 F .704(ug actually e)-.2 F .704(xists, mail a b)-.15 F .705 (ug report to)-.2 F F1 -.2(bu)3.205 G(g\255r).2 E(eadline)-.37 E F0(@)A F1(gnu.or)A(g)-.37 E F0 5.705(.I)C 3.205(fy)-5.705 G(ou)-3.205 E(ha)108 556.8 Q 1.81 -.15(ve a \214)-.2 H 1.51 (x, you are welcome to mail that as well!).15 F 1.509 (Suggestions and `philosophical' b)6.509 F 1.509(ug reports may be)-.2 F (mailed to)108 568.8 Q F1 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F1 (gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2 (gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 585.6 Q (ug reports concerning this manual page should be directed to)-.2 E F1 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.).25 E (GNU History 6.3)72 768 Q(2013 June 27)138.175 E(7)202.335 E 0 Cg EP %%Trailer end %%EOF readline-6.3/doc/history.pdf0000664000043600000240000025423312276516311014726 0ustar chetstaff%PDF-1.5 %äðíø 7 0 obj <> stream xÚU‘]OÂ0†ïýç²K ôs]o! !Æza¼¨RâÙB7Dþ½ý!k–¾ÍyÏs>`ˆÿ((æLk˜,(0‚K©¡Þ­`Le……zóŠnÖŘ+îš~èÜ)‰î›wg¼x«—0¯aëJÂ1¹ËèÞ䬾à V‰Æ€¬I¤1N°(}TE±*#q¾i†¦k=ˆ3Tb> 7¶‹¸É‚_øU‰™ð-ã…œ_Ux¬2[ž‹Š#ëúÌ㇣g¬°V¾.†µŒ¡KÓL¡ƒI†¡"§@澟~Ì}Ãa \{ŠÞÙ§ÒÍΞ ÍÐ(é™éméK¡})ý`]›CmoÝwÁ ²éaÝ6^ÒXï.©»0c‰µˆ¤©kLö/¦+|¥?£‹gsº§n³ÃÏ8{Žá¨;´—p^0ÅZó¼àÒó*ý·à¬Ò‚W7¿a–‹ endstream endobj 12 0 obj <> stream xÚmSKÓ0¾ó+,NŽ´ÉÆvžâÄ.,°BDàB9¤‰»±Hã’Ç.žÛmUÔJÏ{æû†ýf‚Åð,—ðY³e7»¾“LÄQ—¬Ú0Q°0•e” Vµ?xÕ™)eóÖ·àͲÕC s>{µžšÑ¬M{×¹Ó(þîÓ7Þ›i¶ãžÌ½Y5=_ñG̦ÇÉØìY¤®@ÊSž‘Ï}í*.õ!ƒŒE² ¼SMN»Ñ>Œõ6 ~V÷0d(T$R7ÃÖ A˜ˆŒÏ4ƒíý³«g’ +<šgH„Ëšˆœ7v˜ ÷ãÈhZ&=R˜5¤Ñã¦n47ÖÛFÝÔ}, ¥Î¹ÝŠêGc—©ßûv°Æ~‡SqݞΑ¹9̰[æè¨Ï"¡œþÖî\ähºÆ›KšD2g‘’Χqºë»ôêPE±báÁe‹Ô{"‰Ò ¢‹(‹â/.?•Rü.(Ì©éõÕnÜOØC=:­DÉí2´õ _‘òÃÐСʢ²¤aWâ3±ak&O©¸£ L8àK8ÀvœÁá †ÆoûAV$)o5àå2kr©‡ö¡AyK4hÍfOй;”øË¡ô¯Çƒ¯¾¤P`‹rBWæ…?èÀâVáÖ…¯7Öí+únA¨ËøGÓèaÒ8JQòïw<‘òµF*AkÙ“²¯gíõ§§uA§Ý²îÍÔá.“2ækŸe×; Ï-'Ð!œ ŒÚs„_ašüÉÌ¥,~`î.,Há¶Fƒî 0¯n0t‚ySå".LT³ÞÒµâGUp<:è?3&Q2F¼É€õ\ÝMÝ`ï¿\pq,]p ©‚¿¦#­œ‹Z·zB‰¬H Tš¡é—öü|S¾t'ÂDcÓÓÀÌ=‚G²Z9æøC“‡C“ÄœSŽÖÏi> stream xÚíYMsÛ6½÷Wð´_DoŽc·é4v¢$‡´F¢mÎX¤JÑ®“_ßAJTÉj›'òØ3)pE¾·»ow‘ü•ˆ„ÓŸH,Ò?O¦óäÉ$ùþÁÁq—L.¥ 8› N'“ÙVŒþœüL‹L", Ð~ÑXaêW•ƒÛe“‘“,{{ÆÒ*V]ø£f§U9’‚5y8,;c* ¤2Þ'3¸j͈ÑXTìå²(/ƒ‰ŸŠeSÕïÂÉ3²ÃÉ\M›âÖÛ̯ßuFíÀ("dÛýŒ6vöy.n¿ºRÑ=¥è ÙKIt¸„,€êç|Œ”ììn‘•Ë‚àVÒáï¶»Á°ãnH ¢¡6¸KT` ±E_éž-Ï—sŽÝŽÐ0 LYãICö4_—eF,.c´!êGÚ†#(q5¨y=J‘Uõì0V(9dåð§>rV$`îcEVžW£1Åʬøƒ •GɰΠǃÊòG‘û”ƒTn ÛXjZ'c$‚\·,(ûouuYgóùJßÿ.š«ðéÇ__nJ~D×n"ŒJ™NSH{ùT‡©4®Tš*´¬©½3[6»¡º…DºÕì¦òGõÁën$iÁ}|ÿþÆÜ5–kX±A!íÀˆa®AŸÿ·K©ô1»Ìct° {¨ŠüMHŽ/ñ~eŒÀs/ç7eiQ tcúXXýw‹•Åv­òz—Êþ}Yü¬,š"».ÞA¤Ã–ˬœõQ™5yXð<+)>çyȬ‚‘> stream xÚÕXÝoܸï_±FN de‰¤¾(‚^›´W‡»žÓ—4Eé×+X+m()ŽÿûÎp†úðÊöèKa+’Ã!gæ7_Ü|ÞÄ›þâM&à?ÚìO›n6×ïÅ&ŽÂ"*67‡MœobÉæ¦üüé¨Ï½±Û”2ˆ¿ßî”RÁ‡®jîpJ­º¾µ´þc³YäzßW_¶"Lý¸ýtó·i˜$p2òŒÝÔõûtg¡ˆ½q—æ=ë;C^£BMmbJ•2jE9yBȾ°p€w_Ï  ]= – z4d‘ΰVdA=b V@rTİbG3š¨ŽÓ–40ã‰ní`t?XæÝuOÓsèªSUkK“Îyð×ßÅ3¾PÌâ1¿YI3·8öž.çž'a3böÝqE/p ¼Àµ‡„Àì§0˜ÂAFá þò@ùH¤¿â8FW(™¤¥ß“nªóPëÞÐ¥=ÆAPF Ï<ÎCèÌ_‰Byæé„Cø•Õј=t†÷.‡½¡ùz[vt …\p"áÇqζ†Á‚aKûFêª9LÑõÖèÓœô=úIÊ7­zâbtÇÒz¾Öœ)àhfºoO ÁÒy¢Ó ÄšþÉ´½N†îçä#?Mgk¾TíÀB3OÏã?Ñ Ïhk -]"sZ‚‚Ãwk99þ+ŠÕW¶Šµ­íƃÜïü.“|´öy¨ö(Æ=Æw¼fx‰…—À°×÷[Ô(εFËãJå)P¨ÌÉ-ÓhÛwàiq„ˆH‹¶w[;ÞÚÒoi B¼cÎGºõ‘øÕã‚C×:ȃ9‹+‰‡N9f§ ìa0]–2|wÃm×Wý@î²Ë£„EÁ5y«¤ÝN˜s’¸µ|Öy­íÉ‹p¹=\Ÿâ›” Š_²} JÞ×YççN3ºX:‚ –h¥m0gª$¦[/™ÓMI{½Ç&ž]2÷ØÔIˆ“{]×´'™åÕ8z’¦hK…EƒÀè×K•Ø×mxаó!ùÑÝDEÀe…W!N ™Õ†_$®MsÚò”&Iqn`ƒ4 ’ÜK¶"È!Sò§@·"K¦Ùü8þ?±VÑÖ9æ gåœvœ8¦Vè#Æ®9?“|®_w}™Æ’0‹mÐdÅÛÚMGXžç ™úˆ 3Àô(Ü?-Ýx2ÆMJ^‹3·¶½gÛºñ ”pî†N0¬˜ˆA§OæÒ º;:” 5šÂÇ0M_eËõ3`E@IÚµ4?ÑvŒ8«kb3KM8ìÀIÚ¡qÙéoñ¢´öyh{ q8O¸€yuŠã¶áÏ8¼”cJå"‡ªHgü¸L¦%-pâv÷>tê³ÏaV7{fn€¿L5K³‹“i¢©ÆzߨEÉH `p1iUœ=þ³R ©+îÕ R“0ó-ÊwÄÅË„œKsÐCÝûº4ޱ!Œ ´BŒ'‘‹éB…©ôÕ©¯Oß}Áž ‡9«TüÙtÕ]£ûvÕcP¾Ì3ú#‚0)žÄ$7UŽ\h\1n5 ­9œÖqèAΫSâ‡9v<†ÍûÈ,ùtvh_aS”ó9|hjÓuñºæ·‘r´“¾íÚzè}Ý€R¦^J®_(Z@f°B7}ËÒf,ždáYWõœˆ|ñ¡¦úfQk’L—àÁÞ#Bü<‹0£ç×^»ÂŒºP™Î:Ìôj[Ì×½9ó–‡#E'è%ÚºæfevÆJ&PNì»3”6̪׷þ‹Œ†¨)‰|=‡›gÊ7µêEIŽo$è^ñ¢5Eîb!ðlìÅòd¡Îø>kÍ\‡¹Ï[ÿ@l-‹çY]«Þ+™,ŽE˜Æ/’†Q:æÆ5Q²4ÙB”Ýš,Б«ä…s ¥ŽÅŠ0¼YªUY¢0+^8£½ºPì[·Ú=ùÜ?#]N]Ù$Ý+Àéî«}GHogÔnºª›5+®§l]çñx¢ |g±M‘BÍ㥼Úůôºëð”J†Ù7Áš=ßß½ŠQ~Ùò¯+áãÔb©_ÖìÇð%²ÉànñŒ«¥«óÛAw= zHS5O6=ûÔàÛ\‰¯cP½Ò£¦¤—œàårÂݳš€*S¾ìI`:¯uEZûš'-N›s“*”^ïß~ZƒAfù¼Œø3ʱÆs=¹®šI ÓdñÞ^4ͼ(|ã…Õ¬…ºœ®¹\&Bś߮'1+©€åIûôÇnWÚSÕSMƒê@Ï´køª•d¯‰&!Ñxù]`†óœšÜ;í$TnÙ¢G©N'0&´õãe-ÈO)yÀXº hgAäß¿)ˆÄkek„Q8ú.â7rY¶i*ŒÏ¿øT\üº|VPyN3¡bk9óÕzB©s,,oZµÞ?WÙ4JVõ±°jª±³}&(A‡Å«:y‚±” à32›«áÝç¡¢µžªoJp—ZN³ÉWWßw×kö9÷ßböëÿ‰Ù¯_®ÖVa, iZàøê÷/—7¾œäWY®Õ/+2R£s+z,1üÙñ#ÑA[ºÔ»›Í/¿û/áa6a endstream endobj 26 0 obj <> stream xÚÍX[oÛ6~߯p•‹š)ê–> Ù¥X ؆ }XWL‘éX›-y’Ü&ûõ;‡‡”(‡N´­CX¼ËÇs>rñç‚/Bøã‹TÀ¸(÷‹/¯/_‹Yæ‹«Í‚g ±<^\­ ¾Ú‡^µËUE¿X®¤”ÁÏ]Uß`— ¾­º¾iïhüM½iÓ‹²¯>,E¨ÝÝò׫ïR$,ŽA3ʺëåkÎQQ˜sÔº2SV2g™Ðó8ãL,Wq"‚·Ë< šv zR|­ºê¦.@qgD¹ö‡‹OYio—™Y(ò$X; ¡# ŠVáG;µ¦¯¾¡¡NíTÙS®kí„è$ˆì¨¹i›½Y¹5ÂÔœ¢ ˜E<¸¤¡ßŒÁ‘cp$r&…çÂãQÌÒÈ ?#1:mѫΣ9Ñš³ ×’`cbÆW€šÓžv˜ sËê]ÈeYôUSƒ‘al|‘¡$‰øa½¥Ö ¸•Äið¦§}óî°× öžd6ûªï•Y_mfЧ¶tSÕ´Ñ¡ëÆÇªßB<Àú‚~¼Ø&,“»÷~h-òÏ^ ˜Ì+† –dfÞÓO#æù#ýˆ˜ÔÌ[̓ˆžÃHÄ,·â>Ä9Œf‰ù˜ “œN#_cø÷~×d:mpˆb ¿ôæãǸ½5 ÆÂf2) vU­ŒãŽã¨Žn޹“¸a1Ýv=ÎãNxaËè3º8„[ÝôdŸ€A àH„AH]ï‚¿TÛ¼[j§Ã©Ó¡uZª5r8´dœdÜAyl[Ã4‚~ÑMæÁJXw?Þ‘twŠ˜¶;¥ê˜žÄ%Ë¥æ¼0Ñ_“8Sê¶Øv€àý}_™•"d¤áÉßݷ鉴!“s¹ ­*Õšp…fÙì÷E½FŠWÞnÁo݇ž5G³Xãm¨ÈÊ«:ØjÉ-nÐw_ôê>4¨€©:úmÕ6ÛàŠC5Y}Ó7̇öÑ¥ãâé|@„Œ ÃÇ®Àᢽ9î‡ÇŒðÉdÇElŽèIWÛÊGŠÅÀ€†)GºmñWƒ£÷8ôðGÄ"KO|.rŽIE¼Pe‚E9aeBgS]ˆ=ç&58ÄÙÔ&ø¸›'DÎô}CÙ-ÄÍM)ƒœ‘ÚmoR] ÔÁê˜À´SpF ÕÄ䉯³ySÍÂj•¥,vóê[Õš¼%ΈÌˆ=CA¶:ÊÅœŒ Iˆ%ª‡7àÊx~Âþbt0|ø0Ñ:63*_SEc°–HÁŸâpØUTa`f“ç6Gí¯ÁB:û7QbªE1 @0+v°žë;Ï8ï“°08/Юĵkš° w9äýãfѧ–Ž’‘3^YŒŠÞ¢öb(#‡Ï¢´§3Í!þ:µåñù £bøû¢/ÑŸ­2Ãq<HdS_ó»“úÐö–IYÎb»»_øÂÈ©lº¾E²ð€dQz"ä\udgU´%Ú¶õÇ®ÈË#w[n=z¼[=bûÇ,™ ·Ñø¥Á¬¨o šT£±üî^ê>s>žç,‰°dz{Ñ1u}ݪ•9 Îì^’ŽEnèÕ‹ÌÏTì ]8;™nð>8x/w;084øÙ{ v @br†9”]¥:ô4Ö{y—C`Åé\âÕ·HiªJ¿Rß}à§»«"^,²Cl4!Èÿ‘°Ü:ÅWÞ eøýýH•Ðdm†Ü ¤’K­oîQïxÁý¡. ±eŒ‰ÆVõǶ¦J>Fñ ²trGÙ¼,:åg‰Sê~„#¼`q–Ù»<—s­I4J<£Ð’Îê±Âñ™×-e,ænÎÍ$¿ÿ“ctFV,ÍÝÅaΉV¸œ¦ó”Îy ×G7øªÒ”’ã¡=­V<‘¨i,ß`ΤB“G*ܤHùäÛ:¶aVwÄbNÇvJu£­A95ýNÒ‡Vwææ>6¡3™­èaÙ7°9=¶ $ÓÍåvH[4Òƒ>MNq˜XÁ|!r¿ûÌÑ3ã÷HQ€€¶U=ôºH9y¹¡·Qnkøhèbwß·pl„!àH%8|¤ÑRÃÅzM« jwêÏ£ªKEúìAEµí0&ì›ÖÚ°¡‘Á¨M³Û5X_}´EÎôþÜèkøà·)ÕUAe E8]S uéÔgFçj0™âMqÞÛ¦÷æ1˜éïöá3ú'Þ€môþìp´Eµ3O×Qp(úm]ìMÐ@ÔQ¤¬TXš”Û)ý´ùÁ¬0awwq[U¬gÇý¿°]×  YÏ6¾;gýpÙê‹Yw†öáÝ!º’Ûi:@õÊþ0JS¬Ô¦/çŠÐî¸ÙT·«±”ONõ ç²q G3Bì/SyRëÿ°µ­Ê]褅nVˆ¶ã‡¶ïMbTX«žKø`غ¡Q*ùdoUyìÍâÊÐì7W‹?ûwŽ, endstream endobj 29 0 obj <> stream xÚVKsÓ0¾ó+|¢ÊL£ZÛ2·Ò¡Pn@838‰’+µfúïÑjåÄ)n’i¦’¬Õ>¾ý´«è1bQìþX”q÷‹£Ù:z?‰nîyÄbšÇy4YDLELÐ<‰&óänUlZ]ÆBÂÞÆRJò½1Õ>IòÉ4­­Ÿqÿ¡ñŒ8ñbÖš§WD—Ï£_“Ï‘ä)Mgt ÿéæ^ôŒŽƒÄXæTq/ÖÜ9v䣲SdËù€*–Q–‰A uÑã~¥wjè+HiìÉhê甉ףŒú«Þ`™(Zì4{c›Z?»mpÕtµ×…{‘Ý¥:J_qÚ•»Â), j©ø Hkqc_4`ánCi€Ÿ°°p›aά‚œÆ~iênýë}ÅÙPq3–¹®Û©„Jé½±ÕŸm5ƒÐÿ k@4Ä?ž*s†p 'Eƒ‰Øßì¾>‘PÅÂå+»×U_ïÜêLçg;·º¬'\#8¾Ýº¨NÃ%]g_×rézü?ž&Ý­ãPxV홿°eéé´ ï¯agYCû=™\Þ«ßNÍßsµ¥{îY|`ÀݳøEc% @í`në9ÒÿÞ¾`3‚òa}yó±-”@ endstream endobj 32 0 obj <> stream xÚ•Xmä¶ þÞ_áoõ.n¼~ÏmQ )r½-š /“E,´¶fG8=µäÝlŠþ÷"eË3n®Å0²D‰ùð!µÁ¿‚$ˆá_lSøõ)ørÜ}Hƒ$Žvñ.Ø‚¤ ’,ÚÁ¾ù)üËQœn6Y–…éû›Mžçá·Cÿ<ˆÓIuϸ‡¯ÊIä¯ßüHƒJ›~x»ùyÿ· O˨(@/ž˜Û©»el£4)På†%6ù.ªR+–ÞlŠ2½Pµ-œ*‘*øª–W‰ƒ \mí‰û£Ò`‡õMZ†îby± ©ëA=ÝlÒ*”V( ýMº _i‡éiRu8 û¢–´t& y—9 Cóo¨¤IÁë Œ$ ºÉJ¶yçÙœm“(+ÙYÏݸr­´ˆrðï¾Éve´-ƒ „/¡ðý]= –«,ŒÀ¡i>€y˜§ýØ64æ‹ÓGÝwZ5r¼(èÇHòZ§jÑÂ\êy9{l~@ý@ ª;ôÃIÕw¸9 é7¶7¶ƒÉ¢6ê况ÃÖQ“ObÿýaÅOIåéï»)âôÂO`å;hj) ©Äó0¡¹Ÿ~Ô îÉvýáÚðöíçw$yÏ|f±=yäQ–—åYå9@rå > stream xÚ½YYsÛF~ß_GÐŽ1®ø)ÙµÖÚr¼‰Å<¸â” G$jA€@)JÕþ÷tOÏ€ ”íµjË.sŽFOOŸ_ƒO"øÃƒTÀß((wÁ«àå…xÄò(V·Ï.Y«õoáß·Å~ÐÝb)¥ Å÷‹¥R*ü¹k7]±ÛUÍ7Tx_ ["ùç»_ið¦ê‡¶{Xü¾úW DÂâÎEޱYzy!½#—2K˜ –*g™0TU3,–±ˆÃZ7›aûÊ|ÄEb™¼|A»ï»”Çí-ýêZït3ô4CѪ†Æ0²«E׌Æ/^æK侄›óx*A_ý©¿æü¾nÝáE]·e1èµ=¿ý9nëbÓ¿²4œ©Ø§ú/Ò¨ðÍåÕêßï?\_­~X½~e5í?ÉÂ7_^Þ’Á†­&c~Œx 'ÑêNï" oKø×ùAÕ”õa­ûKr™1©¬–Þ\ —o_ÿcF’8e"µ„ßMDáÖ:MŠžC!²Pë†Öû¡BQõšYî*à OÌ=œ>_€cá‚IÐQ"FÏ\Ê4/¹ M9TmÓÏHªrƉÅÊØ ?ëµù‚& ‰²«¬t–€®ƒ|€âÄ|öé ›ÒnÝ¶Ý ñÝ"VàU{0lTx;Šföõ{sJÛŸÂ¥4ÏQ#ºBî]A³$ÂjzÓæ¼ÂÒxõÆ7A]ÝtL2:esŽY"ʹՒP ‡U4ã¤ê˦ª¢®þ50Q~ÑØK\ $4ü©hŠ ðBFápÆ")K”g¡øÑ"89µ®yªÄé¡G %LTâJå„Õ47Òá`gD²Ä[»Û“È8ÄÀÇ_»çy®:ÝáM"_Ã÷[çÉhÃö€Þ/Dg/@ôVP@$‘)æãÄ÷ ª¦Ìmèî)u“ey>Û –$F¦ß.ÐÆ–ÑïÎÔà BlSµùˆÜé®­Ö”y=Øøzëe}øPù™gLIûÝÇБD¾§2áRÇ‘˜Ïp‘㲘Íp˜âR_Ó?ê jCÉ4,ð'oé{ã-8q{÷ÛªÄc·45ZÆýQË8ñ´ŒD»j³Eƒ 8M\Š"Rt1ÈíiœZ?¥Ãœ—Ù´Ñ4é£ Px 8ìnA<Ñ\†(njÝ[+Æ1ãßdÅIÕ sÚúf¯~½Ñƒ³í5yþœ]ÁÒüÿ`agLH__ïõpè¬Ã®ûÊ”}áÿêAòs¤žö ê ¤ ‹o;­Oüºpmß0gÙ!µ ° i¤(  Gù\µƒ‡_ä}(æ˜`t3œq½,E|öøî°“ ‹!?Ä2GX'ÖqšÅt*bqjhj#cŒ´ë[òPngº¹¬£÷ ªƒâ“¬eÔI¦‹kº(õ ¬â‘Iè©jâÆQÂRái{*àÄ‘9ùÈ ¢Ä+šxǦco&ûš2€@„8ÔVAØzœNaÛ¦SØ®›É¸2ÍÒ£¦?ÉÙÅ~_We¶ìéõG—øð¥Ê£3“ »8¶6E]Ó›:†Æº²lÚþ¤Ëq²=OC9›e÷l>ïñ‚g,ûlG{É6sÝÛ˜»¾#7Üăl”È)@ñ‰1\¤žFR|ÅX&gðw ‚ˆ¥ãü\8q|°MˆLÒÓÕà™oNù±£˜êú<ˆôSñ¼¹qIî¢Ço~`â—çH<„å§KƒÄöÎ/ Ù|iˆŽPz[ ÕÉ3d¾ô-b®ü{ì0@ç¸x$ž"'\8G€¸T ö7’¶¤ô¤‹Qa­±eøH¡e›”$Œ8¹§"¸ˆ£qCq)E®`Ä©(;¦…¹ç©H7|à†p…$‰ÃËæÑÁSÞièN¯*º1œPW³j> stream xÚ½YmoÔFþÞ_áoõ¡Üâ}óK¿A…Š¢BB¥ PäÜí]¬úìÔöÒ_ß™}±×>ç‘€@œ_Ö»³ÏÌ<ûÌüÐ ‚?4Hü‚Õ.x~<}É‘,Ê‚³M@Ó€r’Éàlý1üõ2¿êT³XrÎCöËb)„ÿlêm“ïvEµÅ"¼.ºK3ä··ÌÅ«¢íêæfñùì÷@°˜H ë⌱~´ŒÈ~2’2ýüãËEÊÃ}µêŠºú¬=}Iy@)Ø"Ѱ%OÁ®ÄÎó¥.Ö‹¥d"\•*oÎ/½áCáDpûݧР‰¼!‚0á&^°$ÄÉgfb‘›ea_ûÈ-)—&ðË µø¡m‘îR™ g©¾)áÆ€xëê§,\«Ru=¼yYN¦PÕ‚Åaת%Ú.%¡°2c„ÓâÙvŦTGe‚$ô¾€î¬3;Ûå_çfäñ`É-Øò„Pæc{ÚŸ"*Õ]ðžµS;´äb±„Ucñåa]•7£IDXæà–™m1ÎIìv>ìÅ·°‰3;B™­~Êb è¦o û¢êŒ—öÕ=üÄá2½ËOrüô[22läœú pÎ2 't“A;Š,Æpá OYH€X 8Îà‘yרnßTíä‹«F})ê}[Þ,[Õ™gà„B»u¿3ëUö6ãCàÓk$‹ÜîɺC­O Óâ5öa¨Ô6¦Ç¤Åé1= KU×ø.o«Ÿ»Cöy`X[ÃÏ‹öÜ 8ŽTp"Å`tžbyè¼ï#©êjùŸjj ÏfÂ"#**ì7žô ÃïÌE¿ŠÅl§x8GÕÖ±”€m@8‘á|€ŸpÀ1fáëjS7»á‡I>ƒd€«÷¹7FÂÅ«ÞH¸ySô¼çã€i’˜ëU F[˵ëak¨ÉZ»‰‘xŠ]˜ØÕL3H»¢9v>K7•j]|)Öû¼œŽ8<Mˆ= ._½>=;ñöìýß&<Ÿ<Á_Ù‡i9à5Ð8õ²û{h ÞŸ P‹ù Q‰˜0·½·Þ¼™;Â<½ê„^ÞA"š)›&@R=\O¹‘JžÌ,—D„¹ñ×—Å §¿ô“F¸`‘ájß4jgW&¢äø@ÑäÆxF2œ%¨_D6¸6n—tCXMlà¡ dµ-ªjÐ.÷‹B.2|=ÐA£¦=u°øÄØcSèSCgwø‘̉‹(ïÇ`ækÜÆq™Íæ 6"à¢[9¹wS 4ËNyؾ>ˆ¤ï¨!PKap‰¡cGwÙ”šýd“ik†MX¬ºH<¤ð©SMö6ï&ƒG8ã›+­Ê´†©«Ì%iÔ ^+Ã7È68öV¹Å)ì8îIà Í[äV*rCD‘vé°Ûƒ”å“”þv1_õȾÂŽ¿9æ¥1ðbz7õºcÁŠ=[?©Æ˜McJù¨‡ÚøLÛªù#MÆ <¾©èë3qfZALn JN J!cgxÑ%Þx^Rê 2‡ÞÜh*ua51{ä&I˜Sûà}‘Æ ëòÆÔìhÀ¦©w3!$Ä¥©ƒû"55s(r¿Än•2;9U«¥eö8"rt¸Y­%)Aa.>êîþƒ&oŠü¢TígŒZ˜ñ*ß*ó:5eÔP:à‰Ë¸Ôy ™É¸÷ó@FCÀÞµR“ºl˜˜³Œðû@œ ªÀ,NÃm£rlGd:!«î2¯ŽvTµí.ï›­2#©|x¶¦$I’­¨(Î'Õ¤è9>Ÿ¯Àî{7g ôgÁ¿IpÐ,Åœ„‚4CÎÜÁ©¡Ov÷  Nƒw¦q8nŽÀ°ŒÁ0õz X·ëÔß53–' ‰í0¬x’yµë9]Cc‹­|we…kÛÖÚE«Â©Yîu.ç‹¶{Gû…ÒY°I«çf¾%Ôsœ éãÌ]ÝååùÅM§Ú‡GÅC !QŠÌ¹(b®•ÃoëÒX¹“wc?Ì;3ÀN:¢)v¹vTäçyÄüBPà<»ì¾†Ö½Ñw›†2ö°%ÔÌ*Ë{M³¢Ò0L;~{Ø¿-Aá´®œ½…±ú*æ>U¿0Uÿõ‚GáS•$"|ÖÔûjýý ~ØY~ºžìa¦J[«¯îR?¯{ý4“vCñÕÕ®;®k.‹¿šôLɘW[µ~¬Êÿ Á`Ñó«º}ä~¸kèÍ6ų;ÚSÀ¸£#𡵺’aä |3¥È“fæ£zVÁA›qï˜KƒGÿsc‡~E4 ñ<Æeò‹¶.÷5ÉFƒ¹tÑ \§c@šÆ ,úâ ¤ÖêÊ5/%‰FdÓîW+Õ¶'&>¢¾±6³-8ßûFÈ‘]±ˆ0êëæmÏ Nr¸>ž°QÉ{µ2è‘EÏæÿ$bæ©2S‘N»[ 6gß¡pmöã%i‚báœ'©njx.~žëtÿû™2ÜãñNm€cî¡ÒCÞzMü¨6CúÝÖÍÝèK‡?0³ÐÝšAx¯ÍË^LÂunæœêÁÃÃ¥«ûÐè¦rü¨ÛHÜÖ¤âXMêY=dÜVºµ)ÈdDøý›‚6]&Z$仟þ8Ê× endstream endobj 42 0 obj <> stream xÚÕZÝܶï_±ºÀKó[TÞÚ"nR8N_I`È»º;¡»’#i}nú·wfHJÔžt·Ž‡Â–"©™ápæ7ºÍo±áðOlr ÿùfwÜüåzóü…ÜÎ ^l®o6Âm„b…Ù\ïÎþzW¾ªîj«”Êä—W[­uö®½íÊã±nnqAg÷õpç·üíÕ~ðuÝm÷ï«_¯ÿ¾ÑÒ2c€/RÌij«%3~ æ$ÍÿüâÊ©ìÔ솺m~¥MÏ_µd1(ØV9+t¾þæõõ›¯^]ÿÓÕÖH}?&kªÛ»„9Ñéé¬dÊ¿dq O¶h&£°ï¯¤ËÚz¿DIòHå*,§ZÜ “3'àW1áuùm{%sO²%¹"îpPðlw꺪ÁåÁ¯ÄÐjû ª¯ÿtÓv÷¸³ìöJëFj¨?š‘ àý ®’«¬lö~±«†Sל*é`<=Ä»«-ikO+Z‰€¿wåàGÈÌzf:cÞn¾¹‰»ª®òú÷ÔAôsÏüÜ($ŒË t•^‰-WáZ^ýðòåÂŤ¶x~ïY  ðBx³“š)°UøÑ–ÞbìÍÊìuUv»+…ª&oÈuP_nF ‡—ð° *7gVÝ뻪'Õ»ì&xê§(²òp ë¹ÇÇ<ë‰+<®ðB{ãÃåÍLÈeäNÓ`>~**¸®zOt×z=”u3R-ýOš‚Wv5˜¢ÞyJ=¼Ûܲ‡6òúL:γc‰Ï( Ù[R;ŠÉe(w ×±ÚOàD*ð8·x˜ðV‹Kâó¯t<¤k~Ý+¸ÌŒ§ž1ÊÐö5j|á@×DF«Dïþy:õC”oHÅ}ðfù¶n&dHaAµP9“:ÕǤ¼à¨#¬xå ÞJŤú]è^7ƒ‡õÀê iþnÑ…cZ=…è:l#ïÂxÍ”¾ðZ HS¶¢d¶¯»Š_do83òÑP 5H±ì!ÀA˜p!"O4+,¹êÂi·HÎs w¿€sùçðP’ÃÞ²ü=u2`xÛ3‰™01!–«±|I´Â2 ý\m3+7,^…`p¨úÞÀ%+Tª/0úùºŒcತ±0Cò£H©sâöºöt{ç7½ëª÷u{ K ]… Su÷uhÎÞíOoûê·SÔјˆžÔ(â™-ÅùÔý)𠪬ò¦=5ûg>bz„‘Ì/ö'~ªÁ¤÷Õ‡0 Q×çH¢¤Ê03{õ,s Kr’q›žÞƒ²µA‹©Ž1¹N•Ÿ÷Ñ» »H›O»“,—›³åCÝ:PÓ’MRx4Ù=¥ zW¢`&Rñr4Í{ÌÕÊÞs!å³`¡F0—§§ÿ.ÚM )äÇj¼¿Ê ¦|[ù[”Ai”Φ·bþFÔYÀUc˜ø#põ ¸ÅMýáÓæx• ðj/‡Wñ8¼:Ç”\ƒW­ƒ‡ ?ŽV³kðŠºûXxÕ¹JàY¡#áoà=y''fÂ$ðš;î3|½?;JÝÇ \0eæþ7å_zxÿ·D)ȋд¤J3)cNvK~«TÒ-hGrÅr}‰v¢Éòµ€á˜UÆ ›¢!ˆLƒ„õáç8…ºpfLcdΓ*lžÌIO—Ÿ€ùø0Å |Jžr3“Æ‹ï&ñÂ;09‹`6ËŠQV1§.À*ž MpÎ96aÃQ1VFø”sÃTV$Ø«1lØ  ø Ê>"EaÃÊ5¦².5që8CÐc#¾†ÿ¿clÛ/"œ†bRbþ:X½’¿.¡o¬}EsÅt¬eðUÜa¯h-·ÍWaÖHf. ÅŨU_G‡ê:ÍNaë[<ËÓ,7'^‚m±–Ÿuú„25"is£|Û·‡Ó„‰^ A»í¬`IÂ=H3=óÐpÌ—€#H9Çû`·åP¿Ç{@wÑblëØ9ðÁÞw]KF°«ª}x}¡°.´/¬—‚‚‚“$ÚtëÚTIÌ™Rø,lZéÇL ŠÂ¥ºúžÜx ÓuàS¸b¶˜ìLÃ.ÌV‡ê8¦ÌÚÉõäQ:¨‚í“«¦ sÌ‘QÄ`uv`p€ÈŸQrÄú䌣Z–;RÒ±ý(ëûQß–My;Zÿr+êE}¨.hEÁEbzõÛ®ô7Ðp¶«Ê½Ÿâ[wÓ[2ôcpš §î»z[ë!¼Û†=þM‡ŠªML‡Ð®qº^@[÷ÁnOñû‡A#TGjÖQ£Z*þÇIcœåƒÊI¢|æÖªíÑV57S1ý Á‹ß”Çj‰K‘$²+ì’´™ þy€ #ºA¾{‡xï–ÛEXŽn *ç²ÍpMM­ZÂÓ”ãtCr‚Þ2Î4a#¥&RÇ…¡>’UA.¶–’ ¦å¥òe_ó~4ŒÆ \kGKVˆý§Î)™Ùps•2$3 §,s=Ñûïs67¯”±8›¥èzBV¤ÏC"zöýi·ƒ|ûætIÄÕgV€IhÕuM»ÔGÆ‘:drÞ½Œ¥Rî3{×›óÁ?2ùšìd)ûZʽ†vQ¦<õûå’·ÐÌÙyT$Ãà†ìœÛÌ™†Ô0áf,þ`j-’ -c.ñ¨ñCý©“ÌHpï÷¡ßOçè9‘ãòØâ©ãò˜Æ›ì5æmAv8L ec·6gfvfòñÅ•‰èÉAgng˜,Ɔ<%È«8XN ÙŽ-XêP²X¯yǤòñ(òPÿ©ºöƽââ¬#tÃUyabÞÒ\À€±s¾x"еrgrø²YQÙ½¤(øyâ€/ñ2Ø£‚‘¬Ûj@ò«ú0+b•¿;øî šVÆDÂ(õäçîBÈ/ì£/˜zñÇÉùxÎÞí*¼;9ñÿx_QðCÀWk€¯W?§Š ß­!>~2 ¯«Ÿù”T>šQ‰Äì.ïeÊØTøl•ÓxÉMüˆGö9±Êck;wg-ý<ý@«Sü˜Y3@³qb¸JmÑYò7 ês*sf<¬ ¾ÇýEOXGWR7V?n kÙ/!ò‹Ø Ë°Y x-3•AŠ_ZdᦪÅÅJÇ¥•NüÌŽ=^:Ë6~_vV7:+2âþÇBytÖg>®xª™ªïUOÌEƒ­¨Ë³³¯—åy.K© údÔumø{Н®7ÿüÓÿŠa endstream endobj 45 0 obj <> stream xÚµYߓ۸ ~ï_¡é“œÆŒDR•>¥¤—›ôæ~ìÝK6“ÑÚ\[Yr$y7éCÿö)‰Ý»ôfwÆI|øG£4Jà/ ÿI´9Dÿ¸Šž½âQš°2)£«Û(UQ*X™EWÛ·ñ?÷ÕqÔýj-„ˆùóÕZJÿØw»¾:êv‡2¾¯Ç=-ù׿ÒÃwõ0výçÕ»«ï#És–e wTfh-9Ë|”Lq3þöÕJ‰øÔnƺkß™EÏ^¥"JS8K†[ ç*ì>u;®Ö—qu<êvû~¿_”KRŤ°ß»ŽÝ’d±D2.§W¼ˆGTƒÇ­nôAÓÈð”TÛtí0ÚGœØWÖ>O®“T6º­:xŒ¼`ÅtŒ•]²4ýšç)Ë£5Ø?%û¿8Wk‚ •Äã^ÓCSÁ!š(θ•1^Ááâ2æÖv·gû;{’°ÚhŒó]Hhšp–:Íΰ)J&J»Áý©,~}Ú‘'L‰Çì(%ÚÊ^ÓRx·Ï¤² ~øõÍ›Àœ³Ò/¹äh‡–ÓÙÑzGmÑè/DÓã5€B·HâúÖ.ÞÛ9 Ýðd]®Ýi’Æ4ŸÓÒQéé—VÃ<O–Æêõ¡ÃEw«,«LÂK¢„p=l*Kxh`ƒé¼l©{ŒsÐãØëÞÚŠÀÑH±¤‘¸Ó„'F€·Ïõêï!„7E«óÜœ4ýºÕëÛ3X±0´­-¡«(UÛûG«? —,´~¤`P¼·H8™Ý0+‹Ì†=MŒƒ•;ë£ ÀqŽÄfv|è;ë-½av¦§aß;zc\ÑNlëÌ‚FúŒ•ƒÞb¬$E|sBdHxôH+õ'½9v"UaØVƒ‰˜|í,Êe~ A ]²ðÐCg”µúE&[Û}{ñò(z7›Sßk[Ôí™ï}I4|UŠ‚hÆÊrf³ŪšÜš;¾¾…íëãXß­\”òåaÀ3@]ÒÒd õ-)vc2æØ'ø‘Å;=¾ŸÒínÙ/Ë‚<:Û^dî^âõŠõ'Ò¶úShêã´IèdåÂ!Ã9Yð쬜¨,K ºø@ [zzS3Ó‡M7Eµ9)„»ºm‰©Ã²*HÊyV"Ad}?ÌXá¬ù·pŸÉ¥5]ÈáÖò©: m#˜xpÉ¿<* ï~cXa‚´ªŸ4И›«n‰E¸Ê ¿wfbœh½±``2~¿Xìèè+½YÞ ·ò4¤= #¢…uÚ‹F”¨)-¢Têô|Eb®X,-—Æ¡½Ájâ«Ü,ãsãä"#j–¹P¼·«Öv咢à 2_²äg†„Ї,VJãÅ…ñâ!è-œ§sŸG%÷ë°´X–W%µ'Ê o°æª½0׸‡àYs8~›—ðšÆœ{Jk4ihLš^>˜ßpqXm#£µ2¶ÛÚfÓæÓž××mתæ¯V¸îu ÛØKò8™§¥5¦È2´Ê7t\ØmÁ{j½tt[ÿGÿùØ’ ²Ò.”EiÎTþ%ãÖʦh@̾¯Pæg& ( <ÛÜæ@ãǪ(o+̽´¨ ¶+0;ðhÍ’ôá*+Ü2LB-”zÚ ííA{"bÈ%1Ý44w¨w{Ó…B`ÊJ,«¿8>•;E™µѪ·… ·Úè“Ûn@æDeg.µd-Ù‚«ùÚç v èb–Í—WÑÇk®ûˆCZ@ðIX Ó[ýýD¿2ø@ %+rZVÍ aîúíû犩r¹ÁQïEÀ²Rx"¶º©µÑ>@£t0R*!ˆæ¾®nm EEíÞl¾±,þxê¦èàË‘¬-c˜ÛABW“ðùÊ:›ú?›;Þþ ¡îGzÕïÞOA7·XËåú¹a±ÆÃ£ë–ü|ÀO¦vÛކ†(ý¾ ) YÞpe)ÅÔV0Ïz7·¦p ž Œ4-0$NŠKÁÁ±;š-Z™ýâð|Ñð÷}w‚(•3é–-ú±gmLg¸ÄÓôËjðÁS§ÖPš%ظ[êPó~›xá 6õ‘+y'ð?´4.T”> œçžå ÊtvFÇ(À1$2·ívNíL…)ŠÚ™2ÐÌüm… ‚"z¸ÐÐ,±ÙM Mb €§®°ÄüM…– ×áœ0|\ie|^ßÕC bh| %vS(‰Íö£#"7TqÃóÒÝJÐÔ#SìÚSØÓ&^7)gxSßôÑX /‰>ºü†“ö˜—Ð%g¿Ôg½©†ÐýÁµxu“Íi"nº]½1½&,§!zÄ ­ïPÖ–.q‰)¶¨¾¦_j¨©Ä§²Û.–~¹t€Z°‚{uï·ªÜèv7îÒ&lNÌ–)÷¾Ê®â¨µÍ¦Ã@ƒÕ …ëí²‰ô°öNúËÿì‡0ã endstream endobj 48 0 obj <> stream xÚµXm“Û¶þÞ_ÁæCBeN€oN_¦N›Ö™L¦™\òÅçª<:aB‘2_rv&?¾»X%žï’^Æ7,Àî³Ï.¼ ¢€Ã¿(Hüñ`{^^Ÿ})‚ˆ³œçÁõ.ˆ² ’,ƒëòuøÅ¾8öº]­¥”¡x±Z+¥Â·Í][¦¾ÃÞ›~O"ÿüæ{jüËt}Ó¾_½¹þ*P"aq ë¢ÆÜv­g\ÂOÎ2aû_ÿ°ÊdX´¦¸­ô+ôÙ—‘ ¢öãÆÖ2=Âé1u¿ZÇB…{Zis(ÞmtÝ·Fwn¶*‘±,XÃÁ":Øõ^Ãt®B˜f+‘†Ã;dX»øÿvµIˆÇGÉf‡¿ñ¸ uj+nWe«u' ÙtNõ f]OzQYjÒ±ÅYû¢¾Ó%Z“ö-½}˶¹3w½ÙUzCt#Þ™ÜÆn›ՂâˆÅÊ)bv\ò„·áŒ,&'Ü·¦×›Þtׇã‡=‘X¯À¬*Ëú©×?ë¶¹Byèé°ÃE ¦S9q‰Ìn?ú†Fû½œƒ7º ˆåÑ| Ùv Ò ƒ×",SêÊLïb5Ž™ðQä=™±vH,üíž(×ðA¸œe2£øNB N"Q“º²!„w$jQƒ’û5„~*èÇw3.h7r Ù7««%˜JÈ U5é:…š§Pvlƒc±‘üMl´EïÌèH¿;5åfû€ç–Ò(¼]l)ýA— Ghç®ÆrA9lѰ2KÑz8>9 û4eFîÁg °½[&õ¸Õ:-ÿ]ÊzÝíÔÔ—Î1¨.…Ŭã±\† „‰~;œ’hjM¦E;êŽ$o3* ŸZß#0ð#qU ôš»ºi5n)Ž8,qÄ2¤#¦É,‰Î¶9$¡²÷X;8Žmõ¡0uI5<™b6î@ªTì*סt1Â¥¤Þ[<ð{*\vŸŸ>ÅŸøTP‚Ÿ6.—¢eŸJá<š¡£>Ç᫵# õš¾&€:9´ãeFYÎÒx^×l`*âZ?PvG\žŠFˆs[Àš~iŸ¦[ÚW,‘NÛGŽÀó‹Ï77ýÍMúÓ_>ÿø—¶•d,•³Û€È2–ç¿‹;]´ÛýÉ–BžìKüY o‘ÇâoQ–©¤¨Hâ<E÷Ò½!8¬÷qîX›‘"œÒöÙ {3»¹ ‚Sä±­Íü\¥Í°X”‹­vµÑõ*áß^^Qø,±|š€òb™åG}B:-7=”4$Ç –äÿúHÒpQ_SÔOܰ-:×"Ú° j†™².*'sÍï>ÒOqjJqúpì‰J^|2e"ý®¢‚¯n¨ ,Ÿ€ºÄc€¡Nb¶ØÑï§€¡,A¬HÕÉŸŠ'd«áÓ8®¸°]aK¬T½Ǫª±WÍÓóÀì¢ÂÎ/A”¾µK¸ep§I¦ï‡®@™²œŽRiz–kΈ¤@GœVˆ$ +t‰HÚ‡!ݲ8“Ê#R%¸c8;…`º¸uèòïÕñ vçÔ´ºÚúê Ñ%R@ªÛÌŸ V6^Ÿõ©åíÐôºÛ8¸mæÎù0­¾²Èãþ“‹c•^[Å%IÜ#°!£E#÷C3{jt@ªõ(MÕ‡àŽA÷ñÏçø?ËÏì’E—Häá”çªDÚjƒð¸v›ÝPo7ý"©\XÝ ÷O3¿«³àþÝ훡*©}ºã€Æã& ¥’ñ!; ë`eH½––[ZâØ´7ÅÖ:Ø*~D?Ú[*¾LoW uíÝ0¾ t/ðA2• )%åhVŸpÑöŸ.œyídýª$\"0Å„šž7ÛËp\j,HÂ'56ªËR/p–É$ž$JýŽ´¹›}C_dAlÙÛËçˆxÆâñÍË,¬(YM‡°… _ê°M„makè㔾¼9·i„6KW̵àé™åŽBN×WÊäðUô‹gSœeùÌK¯Í›…3‚œiÂv”ty ‡ÅŽôÑâ“£.?ÇNÒ9QÖìÎÈdNqë(‹˜ˆüÄ=-so%ø(ºää‰59vÙŒ'kÀÎT¹c1:=êrhÇce¶öÛQOeèî@_/‹nO-¾": ô<õ>wþ Œç®xjV£ìqhÉ¢M§ÇGè—ïgùq|§›.z„¥ñ©Ð'Tb ÌœÍ"$Lžþæû¯¿^ 1q*@ÙX2|û‡ÿõ¼ endstream endobj 52 0 obj <> stream xÚV[oÓ0}çWx¶t"^ì8mà „©<­Ó§±”:]âìã¿cÇÎ¥mzC›Û9ßùÎws îŽüC`ˆå¿¦sða ή0@ôŒ#€F¹Ð÷À8¼¶>ÆÁBЬo»®ká·}›b}ÏÒYÌçŒÏÔ b=0kȧo?õâ3ËEš=õoÆ_ÁJn§dDNyvvE"Ð%åÓ6›øp„K†^ßö¸f²Ý¡·âZ\>óEB g;ØÈ‡H³cªuEi’¤}<”šµzl-4§%¤ó”ç" ͵EÎJåºÈ©†¥‘>qåÚo¹Æ:ðŒê02ˆ&BÉø•ýʹa ;äô:SØA<”OIå–æ/Ÿ&E(•y˜X¹Y ã÷¥±J‚U’× „qzkÿ-E®7×ø‰d³éµñÔò~Ò/áØ…i»a\h …?_—1ƒLNO†Øk<ÊsÔeíYJû5r0¹1¢NE‡7£FÂ)7¸0åT¯Þé‡s¾xÉîÜìĹl¤Û¸*¡‚M¬IIɰD>Ä,¡âH‰0”!âÝ/2JTÙ÷ŒÇWú ·âQ›DQRäqe"#-D'P,…ͨÈ++•“·œý¦iÔ~!(w¶~  ([w:bµ¹qy|\Õî dÈb.I–[Iî]¾¯kp¥¼*´á;™LøÉEµ5Y³®ÓÕhGnÛú¯>פM5âŽÖ3¡ûGÆ8]> stream xÚ•SÛnœ0}ïW¸+m Ù@°1,$jZ%Mû°ê…>T!ÚR0`i1[CUUÿ½ÆÆÈ^´HÇsΙƒßG|Ì‘øVà]ή€Ž:!ˆr];ô@”ÝïËdÝnZ®ëèÜ´0ÆÆg^<©*ÊŠî´-UȇÅwe\Ó¦­ùó6ú0‚¶ÈíÈŒJßÙô@`‡¾ßaZ®‡mßíɸ¿2,´1– ‡}é変;BòŒëߢåå"úúCíONÚ’,W"âBÞvö_¥¬íM(%PØ:‹Šx£–R)ÄFl>ÖybS‹AÃÀ¼–d°ˆ¤#(çB­úþ ½í=t6{L6ªÌš IäÉ4;Wö´‰c69í¯«e6Vô+iÈé¢õvEÑ -Øÿ)ÿSQdÕlæi9K«µÞvy{¼IFV¤%šŸ/Ä©BèJì)ÝîéØ4õ¡¤iy°5‚T“&,rÇ× §™f÷J¦Í§$áÉù’[CKX+ʰÿœTõ=YöýÑ{ôƒ²^ÊdûæíqF°ìJF8×2µ2š»´TÖ€×4 шÇîþß²œ¢ÉKÀñØ9c‡$àŽÙ„¸ÇÎì38ßÚ¸Ž¬f»«§©ò$¼PFAï ëŸY_ìŸjü_wÕÝ!f~Œ˜gú/#ðåŇ´t endstream endobj 58 0 obj <> stream xÚ…XÝsܸ ï_±“—Ê3YY¢¾¯OÎ%¹q'—¦{77Ý>È×ËžVÚ¥:þï‹/JZK™Ž=+A¸ûcîø w™‚ÿ`Wwïv·Õ. ü"(vÇ]˜ïÂÈ/’ÝCý/ïîr¹Ù«ÌÓmm¾Ýì£(öî~ÀoäýôùŸÜøx“+¯×{Ê{ßÁ„ܫƳno`æP¦k™ó“©tkõÍ¿þº‹UèÂ-*¢Ý~Lwaæ«0AEö² ?W³:Q8©“%ÞÝÍ>I•hý7E$Úd1iJ±60qÒÆ–Ú¼2AœøA´Û«Øyá_nòÈÓ½¶úÑ[nEüùÜánÿ‹?ú|xdÃõ<¬‚ §•öa˜ú „‡‰_d$üÇî‚Ó^zót™1&±¯²EÄS‰šÉBÍ}DZ:–C&››ñ“Dì Zo'…¹©æfö–Ï™4Þ8à¯Ýq@uŸQÕ²×Oäuc[“EÚ}[ù¢Q´Ô;Mü ÎÜ,d7; Ãå‡ÛÛ£=ú]ÿt»±‹N#õy£ØÊý jе¢—±¬·8l6àk¦ +T‰¥¹W¶57jc‡Þ<ŽƒlFä?Â^ÎÓD£-é,ïŽ<>œxùÈkÄ«XðëË †¥D.ROeûdÚ'¦qòÚnà=”MÓMv×5v¯”ŸKg ü›}šÞ—|¸ûùݧÄÃé×à 4ŒƒÌ»Œý…tì¬PpKqË–â. ‘MŠýsù;Y‹©%Î%mw,Øp¬oÐ߆G^‡§ÔëzYu8éž%ǶB'*‘ Ç´2ühõqlÐ2ÁÚÊâ?a°p <ô%×àˆÎ¼ö1µ`1-ËNt”¡gÝ©rè!‰©»3ÄÃ8ŽÄÇB¯´vìe’ÞðÔIfài¸²‘†Í[Š&ŒTá¤J°àŽÇËÓ2q¼teè±+Ç \Ó+g†!CNçÞ³NÌ„FÇ!¤täŠ@<³ks|agšÌ…->$VÝù¬ûÊ€CÊꌴ]»_Õ?D pÐ>_uÕA¸è Sq¡"t)+f¯‹òÀ»ôÚêž­)ãGZ5wæJ9Âv„ÈÁ™ãcc,+tf}FI%p¥0™¸H½'=p£B«R;“eËšži$­ëɧÃÐ{>™F3ß^`aç×lYÙµÖÔº§}ØŸÜC ?òôÅbÓá€ÇÄÅØht.k Ÿ{š™-wÝBt²*Iø†grï÷NÇ¢¹3ò‰³Õ ß+Ë49ì(Ô¢›ž…Δg˳k¡QÐ]“»˜Þ|i´‹4öÕ\!¡÷“nu ©_ЫµÎbvI .óYyºÐä[™F[óÔjIhì70Y¶ $û*moøÃ¯r0 E“Î䎲XAM O-|;dLîúšnœ’Ü ¤qâøËJÂe‹³‰TndR_9õÓIý·Ì gZ•£¹+ûòôàáëéLm!ÒZn:ÖœM· ‚|(ÊoÀ3s_úî©/ÏܱM›š‚Ÿ Ç]lÍiqãò‚$2¹©9H„‰¸4Ä%ÃÔeË=¾YÜ»†gaâ6¥! ìã¨ðÞÓ<:G`™ÏÈFàøÆž¢ÃÇIÝZýu£d¹ã¿ %|°l¹!8™;pŒ5·Ä…Sã…å!ŽéZEé2ìâX¯ŸÊ¾n´µ<Ìi,2>bàý2-SÎ%@Cˬöò|Òsº3’É$ðu En)äRF{Ã^ÃãÎCêAóCúùµäç^S‚t \$^ˆÈ­ÌÅåÜ„ì³V|Ž£BžO‹×8Cƒ˜¦¼0Vs•æbG¯ŸÚJBÅ~"Cšw_¾|ºÿñîÝý§û‡ßXÆÝç÷,äý‡÷Ÿïîÿöùë÷(!Ê(_ÀLè”—Kƒˆ›:„5‘ØJZÃÎìZØÏIÝ!Ih.órÊÁé•€ªÚÇ3q$rŸò3_~ÓZf,׿†Û:Ã0¤¨KSVxæq’NÙét1±Q]UyˆR{§®¡P‰ó,#ºÿ8Å 2ï –†ÔèɲP}±¤iU¸ªP}§nA¨" Zb}<Ò,÷¾Ž.Å!&d™¶ mzœ‰í‹X¼©÷Ï€nЪs9°.›?/{‰ 0³™’` ˆyl§HƒòàÈVº×cïŠÌ$’B¤H9¿Äšä‹9@ƒ˜§h‰¼A £)°íim7¼)À¹`ŽÃaõÂh¥¤D5,Ù@ŒP¡Ü(Ь!§EøNÎ-,š=%½¥‡cŸ.æld &Áî–ÎøøÀŽ’òãC¨8†¦@〄ÚF*ù#ÇA ²ÂfñE1ƒº®·RÈVYL¡¿‡Ã i8¾A !KÿÆ2©ªôe`NxИ° vÌ‘¿"…§MõNc­ ò«Š…' ð»,pî´Ìäë-I𴵬(”öúÑôS•αìü&$†a¯Z=é0d#‘ÏØëD?/‘>% ÿBù‚žŸÞ %ç#Í\ñ,+¯d²ÀplΉ4ÍW‡ÑŽ·˜æÓÛ’óÍÄ)Q@2MÏ9%Ä/”xÏ]A‰Dz\©¹½|z‘ðÑ ›à(hmVC4îzëøQ¶)—±Dmc—²•¤ÁgÔ>å“Þ>$•£»Úõ… _5¥Ï7Ü£Û‘sý^Úv«…r¿áçK$‘Ë:f¼k¹wEÁÕ±ZÒ3Í8ò—:7Îg]ÑrFu¡llêoU3ZÃGXD6²ŠÜ¥!а‰OæÂC¤Â’e*²E4í oUä–™V³ÞÿÿªÎ½2qÀ6ÜüÏ–9º¹^º«aâ5ôÃùyq*&Ñ´=ò ²ÕíᆻôŠ€Wp¦¡Ëp¢FYh߇®b(/X¥ßð hn¤£¹ –àç- RÒ¸Ú y/ íâjuåÒUN–ðKN‘“Ein¬M dŽù8ÌK+ïRöS®PNÊg owÙ„b±(/¤J'›Aµ .R¡ây`yK¸+^L“$¸ª$ç*©úÀ(#,SfD–Å">NXPN^ý•·…;†(X< ½dÚtÑ ÞÒ ]o*ʼЇ}´“öÀ'OiÄ_$½ª2Ž[×ÌÎÕ6nÈíðà¹hß ›FÆæÇ4!\N¦élŸj¢Aõ"ºÁ$M‚rp‡Çfš5‚þÄUzöFÑçÍg$ DÄÅû–=ìPöRÊé[ ’!WˆØ¨t?ð‘Cç*®†ÓîI5ƒÍÁ ¶¯$ñݰÀ—Øïâ2º¹ª€$!B ÎQø½o9”À]»ÚD1+ô–Ï“Ô&!"Â!d&RÌ-”ƒõ–eÌôiÚÆ-Upr”H Ä.­øÍ‡‡Ýßÿô?2f{’ endstream endobj 61 0 obj <> stream xÚ•YYsÜÈ ~ϯ˜ÒK¨*ÍûØ7íÚÞõÖN¬$ÞDy †-M—9ä,•µ¿>ø4‡ÒP®JIUÓF_àæ÷M¸ è/Üäý›Ýaóíõæõ»h~”›ë»MXlÂØ/ÓÍuýïêx¼ÜF¹gÚÚ~¹ÜÆqâ]}ƒßØûþ—HãÝey½1èEÞ›ŽÞn:˜ö’VŽÕh»V(²;Óæò¿×?n’(ôiÀ· cÛÆeé'åf›”~ñÌÔÖ¦§ÕAì{; •8>þå6!ÞßÉh%?ƒÙ鎴¦iŒ.l»QÆo‚0elÜ]Ë´¤þã«”‡ukO\;Ýñ£Ùum]õ3'%°Ê›ƹ‚Í–TŠJE†¤ôª¦á½x¯ZÇN~E#Ú ö¾­F&J¯dü=i8#YÓÌ«z[µ`4B+eä]ïuñÙ…Èð¡BçQ:t ¹+‹$…÷§é;Ùë}+ú8íg§ú(Z°{óDy ÊEcEŠ(+—÷*Ö ¶V2{÷(”ŸU;ëBñ”dÞ¿[½ÊR¹FÛµdDî,…|V]„ÞÍÍwh2ö2x}YÄžù2ÒgnIy;Ó‹Ñö]?JóX Cu#¢ÛÁïH,´µ¯´5³jì@—ýŠ:aÉ·ÁwظכÚB²b–ìì>f)qÒÄëzùý¶ÚaùçÓòœå1–D¼äî$õl+kôSÜ9ž¬Fi _Ì LNã󲵫'J;ÈtoS 0m¬?;Žø~TÄKß'¦W2(Ô‰œæÜÙ¤7Û>ÖΞ† O¿‡nàVâ¥2ð€Cv}ÍÊ!÷ªÚZWÙ‹Š}qó³3Þ Ò ÊB@¦‚V”ÊÌ–C’Ë%uÄEIvË[öU;ɦD-˜£kèŽêHè1’•ê§Xº†Dw0\ ¤•pàÌÛÛÖl{SÕÕmc;à„¤˜0áao޽”#]õÙÙwÊ™“vïºþÀ öþŒ4‡£ÜÕΑwîe¡~xý ˆ¶Q‘h˜QµŒô˜Ô¸7­é«FfÓmcw,j®|âI»Nv<±"ÑÎÅïÍv°í=À3×]Eë5èͽaì+{¿çbÇø_õuó(ÓvÜËz–Òî¤#€SÛ±ë†gã÷†%ã¦=Ü€v×¶Ky3–WõN¼. Ù ð{´_L3Ü\¢œ¶ç)@›ƒÙÀ;öÝ}_]ß˨ ¡ºg; ­Ì ‡î`dö¾y”Ñ•;Ãð‚Á¹ÂEteqŠ/Æ„”zwÔ⻣ßÅÝQO4„éö8)%›F8«W¨ÈøFÓ+·h^]McG|1à?kœ1 Ë3e‚c¦x²Ì訔p“²1TZ¦ ÉuJ†UrŒAr ‰ä'œC£á‘(fäíUm3YWµÒïðH>XÐÎß“§€‚×)âH R&a<»-Úê¶ 9Týçéÿ"ÃA0XÝìt!?Ša¼¤Œ¼=?|áŒÐxÉÑ­z’㦠>kÊ÷s\Uõ¬›@L”¼¹¶Ã®›zòôCÒ3 òûd8¼PÚƒømýf@|;«1ôzl#èðëDÜ%€)Co€ùNïJy±—žË>C_ž‹Ó¯„Œy¶ÆU&ìPNìÒh‰µRcœ@‡ÓŽ/YÆ?¬Ý4ãõ;eÃ"¡Sz¤¯ddñxº›úBœK7þâk+ÆÍŽ‚a–œ¸››_ÝÈÅÊ÷öKu86·´³ÁïÉWÒbáF˜b5 ±ª:LЙ¬chÛ]3ÕF:Ç^¿+ RœD~¨‰K5ì,]'ݦ.3©8ôãX êÝ4jš“Ç~/•u2üpŽl{ÇÏV6Ã5åp¯Ä~ª®™a˜‡~n¶‘ »·<œùA¶™Ç>=ã•ϼDrzJ¿ÌbH^„~–«ä¿ÿù§µÃÅ~(‰>‰Oy„ ¶‚O«,¢ï‘PLú|’„•H'¯ró¨*£ýÒ§€:gújœ‹¤Èceƒ7×oÖDˆü$R (5-å5IbB`rJîê-eGP ˆ„s°°Áµ#g…_8Óøáz]oÄOwüÀÝ0~Üõö8Ê«*Í3¿p)ó‡7ïÖΓú™ã.Y£F[Û8+ý<~†4’`0ZN‡ª•î ú äƼt ÚQ ïŸzU.ÏB©èÆÍÙAì<ìüpqZúé|º_¾_¿­ Ÿu·¢¿p×ý þÝšŠ½²·,l©­W¸Ñn¡“çÇkò„¤Rg=P¹¤@—$Á‹ƒ/ %‰DOG\:8#Õ„0,¶Ò˜“tðòHKl•ˆ‡ÜM'¡_†Ëh¯kj¥E9¿_)…éOdÀ¤K,æi ^Í0P°¹¦î°ŒOz &R?ü:Ld¸…¯ÂDéG&Î /,'\{é"ä^±‡ôA/ø?9¬”ùZEÄ£ægÉÒFD9냑 Ë%¯€ÒšAúœÀg®M4pw¨•:Ô"ÈS½Hæ¸WI(9¿&¹ I'ÿ我´,_ð9 áy^½±,ƒj¾ŠB‰ŸºýœÞêi'<ŒYcÚARŒžÌ½gæ'ƒÓ ˆœFyÅ)S?§3ƒ ±ÁÓ .Ķ ý0?+ð ‚¡ÐÄŽvX„ZÒå”F1Sò6Ñ9ŽÄ‹m¥ž+²Ÿu•ä¤N›9dÓÜ)é±™4Ö&g×à{×¹"ájtÔD°¹Ò'› Zcj/Tcû®AU)J¯1÷öjŠ<ÑB(¢pJ!$:䪦Õ-\ù–‡{ šmïv— hwW/®z­€¶®x»ëª^ ã$š´pKÂõÐYÅçA"sÉX¢eª*dÐh8ë^Æâ{õ:©®€D"` äŸI¡õ èÝupÙ§< ¨Osv2W/¡0BÔg.äV+êÁ˜›tuØVG¡Æ©`@,D«´ZqÎ:ŽÒO,RW¢úüWõ>î6&ûê ¹Ÿ„Xºæ¥úÓ½m[%Lt“Øm/ "„GõÆ;ÝÐIâ°^W‹€´ÈÁÝ@Ùæ…Œ8}‹»‰óÒÓs÷çÖ…¤qøÕ|ÍŽxç•Xóš¥$oìíí4eê‚|fq'¿Zó ¥æ•»2M¶VÞfû^êA¢Ó'‡,ç\”.¾BD€™·šr’åÁ§ßþ}!-wöHà…~ÚêàÈ(a›Zþœé•GîÊ©q.9 'sÉL4ÔhÓX¤÷+µ7EØåþ\† X@g•éò#z½’¤êåÄB¢@–ppØðÃSÄWGWF‘e‹ý5 {ZNi¹V!•ä¦jï'ÅRÙ÷ƒ–úUB48˜×b¸Sr©Ý¢‚ý´¬¨ Ü‚"î’GSR²žc3=ã+©3n’ÎEçódWR2ne!Yƽ9hj:\ÀqC$ÏoÈo% _ ¾mkz“fž‘»Ný@.Ðõ>ŠoI¬µ†éœ¦? Ûÿ×€™ ,+> stream xÚ…YY“Û¸~ϯÐ[¨*K! ŠÇ¾ÙÞx3©¬½[‘SåÚɇ„FŒy$mÏ¿O_ ÁÇ[ž2qu£»ÑÇh÷eì|øì’þü]ÑìÞœw{îÿ˜ùÙî|Ùé.PÇì´;—x¯û~O·eõ}P*ò^ÿ„_åýòþ#7ÞíÓÐ3Zc/ô~î€ õŠ©Ñí(Ç|¬º–Wþ«*t;èýÏÿÜEap„ }Ú&ˆhì ²ìe»C”Óf>íSåuÓþ‰×äÈñ‰;E×;½¼-±‘ze5Œ¦z˜FÍãUóÄ`<_µ–Á>Œ™[ì5º¬¦ætTæé xfRtM£MQåuýÄ#!Ñýݬ°ÕÚ®]-€×É÷½Þt¸÷תÔ(oƒ|9J£¤ÕÀ-±“аñ¢±©¯{Pedm7ÂúVbˆ8YÈjÇêÏÄDB8š,ô6mÕ>b?apÆuò¾¯+-3c'ß«Ìn˜yåFæFýqI9hÄ ÖuÍ P³"u"ŸÏõFp¶Y¬ŸptìäeÉ7Nx0zâÀS߀ÅÀ²è¯È„ú¤THJu¨4Òv;T <"69¢ƒ‹âÔì£,ˆÈ9mÙÔ®½¶U‘£î§ /&CŽ6pì{ÝøôTŒ< G£ ºìh:!æs€Fç%Ÿ$¼L†ÍÁ´½sÞ¸êÂß™ŸÂ­Ð‹Åã”ýL¶ãî&¾‚h Pyÿ §ÿ¶cÃÿæš>|ÎÍš:yQè~d†L=U;H: ãŒ<¿ú;Û1o5\Hh°Ç[5îPß“ZP§p•;p2ÇOäÕ¹y”ÝvµÉŧõyà$ix‚l tbÂÛ}<·i¹—×舸èÒÕµ˜Šfø0ˆÓì½7šT’\],™V-*ÇG?Y§Ò0tR)vXlÕÓGˆAl£0ŒRojKŠL:(6†¼ÑL´Š-œœ¯Kaý@ÇYŽ^Xæv£ÅÖbÅ^?=@î‚üy£3T_Û¥XuÜs>§cœ±æ)-kbpî·~ût÷þ6ÑÝ{®g¿|ýþ|wþD´i2ûI˜Äޔɉ®<ӛГ© ³öØqò^‚"^’ã&\frnJJ£…MÓµX^°wÍÅre¸ùí~‹qÍp¿çQp¼‰þmÔÂWìp.ÍhšŽÒx„y&o¹ø¾PÒqòäK{üuà‰z.(ЙkýeªÌVÒy몋A¿3¢ý}DU©s@ KzP€ÁRÝ5%sE†¦F²D§ˆ"Û/Ö6SóÉÐlnÌn+[µÎ N² ¡Çêa.ú¸+ÛÖY HQ˜-Úq ‰@ËY;[±Šc)ÏtlȤ‹9Ç w1DÊb¸Xbî®|K-f;B@ô&§|úù…}ÂyŸ÷yÁË‚Ì{>Ü[mydhõ*4̆þ3'f ç¡'i9ÍvB¶;4¬Ýi à+.ŽÕ…Fœ4C¼¦™E•ˆÖ`޲9;Žõ!›m§$òÎWeÇžx]±>UrÝ0œqyš¸æe",„›Vc-ì¿Ud«$¤„C¸]gJñTGR^ÈÔ7A˜1~U*EDÚTí"‡,s_«LJUü”býÙ‚ÊIÔDP .l6PLE¸F‘ŸÐ—ESéíy«D*YŠì¨œ·‹[²Ù*Ä󌞪«¦e&‚U­¸|%†@²_ÀdÝ1ÿDFˆî‰GèØŒÍȸÑÌÓž4é,2FáŽ1iA©1±©‘<&ò%… èE3 ãbÇ& ß-´(o>†‰g¸Êʲð)NzàïWÜH›`Ýðv+ ˆ•0ãS¼±=è-—Áb6ðC*[Ns>/e˜³6 žaÃ^­°]<Ëñàq|q@ÚNPõÈö]=ßvÓÀKG™»÷ƒhd(û,Ç'„J¹vS-²õÓøRFÈÓ Âµk@‹¤ å{vmòÖFôì¨#Îе9H†¥š}»ÂÞ@UŒEáðu¦V±­5Π4½ÀÖé |¤tŒœòòy1»!Žôù£~é|ÃÌ…BYì@!tzÃ.ŽÆñ}þeÒ<7ã ’P‚„&7.8ü,AZ†%!…!FŽ,yùæ¢üB€Þì‡>f¡¢žJÍ95\É®(x¹‚Ó“TMÞ=8k+·råD—𑌼$cAK W^"FºI3£4"?;«ôÄ@››”;ák§dh9»{8ãˆ3¹l ´9´z”[nø™Õ’¹ì£@ÙkdÏk%[mÇR!ø¨[mзC|¹À-b¾Â‡iàcbܾbáz¼Ò¦”ß’/LmÝå%/Ÿ¹ØÄìÔ–¹)]“y×[a¡$Ž¢gWÐIÐ: 4}­ém zºž~º‡=ts\.`,¹Íÿ˜Î#iZ¯I R"§«T¨Æ ¤þ»Ë<kÃ4/Ù b>ŽŒã`ƒOPö]Ñ-‘½q¾ácoÉ]Ì¥7S¹¼¦…葺§âtòÁtË£O„S„¿DðcÕnÞë8qwEÌÈðµ~ÙœB"@p•¬HÃrT£-QÄ/:¸.“ÑL&¯nAf_Ý‚l;”ùѯŸßSˆ¬-8ot“3~Á·36!ö|qÚŠ3ÌÒm‚VÉ€½.cî}_04‰^µ°rÀÀƒ4¡$qƒì ØXV^FcÎ^õL0@ÿȃüõsHäGƒ%‡D¾rm÷@cÀJÌFø¯†ßMD¼Á0 VpàYKbô˜Wµ\hiâbyåÅZ30â ǵMYµ#É[5 wêÑcgÂEcYÅO— Ã€qçé›'¬Ánt’Ú¥y~'~þ+m ( g‡9LHd÷Ìo’ìK¯C‘¼ýúáç»wwo_c8ß}xÿïí¡å Îky¯J2'ëc¸R†p‚‡•—𠱡–µÿ¡k¼¨ЇàÐmÁaûB7/Mý¾_Hòj8p/ä‹IBIóïôüçŒPÙxÀÖ‚^ÌWÚ®‘Æ­ ™ \L.ª> stream xÚ}XÛ’ÛÆ}ÏW°ô°jIã~É›ì]Ù²-Ç)m’J…yÀÃåD @à®÷ïÓ·f(¥-q0ÓséžîÓ§góul|øl²þüMuÞ|ÿ¸ùîC¸ ü}á›Çã&È7A´/’Ícýoïýå²Ý…™§ÚZÿ±ÝEQì½ÿ þFÞ¿ý¶yèõJáWèÝw0!÷ªëYµ[˜9–£îZ–üUWªÔö??oâ0ØÃ†>m$Ô·‹²lŸ›]\ìóFžx{˜Ç^£‡QÕØŽ<ÝrßxRÜñ vý÷ª’ma¤;:¢1Ÿ13gL½ñ°Ýowq{ÿÚæ åyç Cï:¨›U†ò,[zl¤³H³#lÄ’µ¿ôêEw׿^pmÕ“qô‘y}ht½~ÖmÙ°Ù/×'Pÿ¤zœ¤Ë‘n ½gý‚Ê©?/t/ª?ëeölñ Û)ü¤û8¢Ã~–HSîj …×3ŠCÇ£¨ ÍßqÓòYݱH9pwyO]?Ü™DºëYìÜõÒc5tíàÊÈÍèQ+±X¯YýdNp„ ¨‰Q¬ž²Õù 'M“R²þ’Ø8³§ÖúàqEn:ðú–#úÉEÄΠ¯°ÁAѰH¼±{V#]Ž¿êñÄ-¼"ümT9HâëYú 4 e{h\zÝVú‚®¦‘ÑŒÇX8š…ÈݯlwЇÿ·>*•¥ä—,ͧràŽ£ze—[j^)^-z‚Øa{ÇŽxm5 “O½™ÛEëˆë¿¡e( AþØwgãìZæõêëU÷ʨhœ9ßíÌ?ˆ3¢¥3ñæÌxs>{sæ]À“¹SF3¯å ljǛ!'"s·þÄ(3; vºNƒ=3<Y”˜yÚgÖ2qBöµL ïwˆÕ³µÙ`tå¨TÝmûØrÚ‚›Œl㶛ŸÝ--\ŠO²/ÄØ1ãAŽñ¾® ¢ËË¥ïÀÇø ƒ‘™C‹"Œò!XäH87讽@òjÌÒ&õËjòxBåî°;ŠM‹4±Ö=Ñ­Yf¬Œ[ã¢ñǶj®5`zú|V5*Û kû€†Ç‘œÄDÁÆÚ† *ÒJ%èl$mÒÄÉHЄ×í3 M+“»TFÍÈQS’¹ÉÇÙ)LsÎpØ(ÉW`/%§<¦ÄsMgÏ…Ï7m ^ì€ø’ ¶ö\¸úóR†S‡{•ä¦[ÇGcô: )WAŠ'Î+ Ï™'+ìûûñ6pŽwa\ð¡âBÒk˜øó%à‡¹ló¹¡q¼À’ì@Ð MÒ>FÁÕ_¶ dˆ„Vî‡>3W‘ e[sC N¾~ M^¶”- N6“… Zþ%]RúGæö ƒ-‚úÏBfw‹LLÎŒÿÉ !²Ó¸ ø#ߌ<¼ÉŒ1ÒÅ+x«xÆöFÈo . DŸ$´(|<°Jí5ËBßapÁ5¸—)âlJ $–ñ}`gYKƒp~1!Ò@k¾ûmïƒÌñ]$Á¨‘ÈÏ À¦ÄnΦàøTÙ ª´mIÆâV Åǃn;ù’쥗ÙÈwcyI[YmGB6ÝÞÀêãÌ~ $6zgâÝ‹„–EÛnAÔãÛ[ƒÍæ[“éí•G/Þ-0ަ*B¯êg Й)) Ï|5¹.ì{(lrD_d~˜j› óÛ+.YÙº½‹Ô±w!ô»ÈÄ;aÜØú,ú -˰³;'tsR«VCÕë'Vº0|¥X!¹Øé =g­ÀA#š0_àŒ[ö ¢¾jgTIö¹ì?#ØM’ƒàmÕHÈNä ÿ£”uD ð‚€­RU… Ûr-I#cf˜LçNÒy‹rLL’)ÏòêUÅ”èD+§ ŒDi¨–Ëv¸”½2i #À/_jVã@q¸¬Y︟=0FØþBú¼j®T 4Bci-Ø¡ýfº¡î£MV¨=-š­Ú'N qËì{s»:Xà3¦S¥‚5©÷%@ÍýX¢îâ<óOj=­Š<59^vk€ýÕ¼ƒĄ̈óÛˆfá^a2×ÿ84ífÐy¦(Kð"qtaT”rŒÊrdkž=!6ÃôSm•ÍÕ~½#ÙÉÐ<2?†–+‚ŠÀ˜èÈõvaÜ©X­q€ŒjŽ'~Æ¥x!1dO¶^& ú Éì"½8üâ‘‚¼€Ê¿£êMQع F ã†¼Z¤.´ÑãAz–"ÛA1áOSÎ ÜœƒÃ‡Ãû û¾@޽ÂÀóTiïXˆ†]‡{ ûDïîø¦]àBq!·€·áoá¢ì/ ¡„Ësb û†ÂøÅe«…Ïlue&pÝ_Öðõ »­äsZy¤´ˆ]|–\‰LqâqÓ»zµUÇ‚ÜrùÐi¶df[POØ&lþ]'ZõlJö„K–È54 XK€²@Λ9é éEx>ç÷ _×jÑ M²èq^tI¦ƒEÑtdº¦Ð߇‘}MŸäšîU£øU†Ó³Ô‰½VvË Aöpxhk `VL"zƒrŸ¯.s’GH^ÀYmN Q*:CïœIàCs-Ãdï^ý6²dMÐi±¦o•N¿Ié„>½2ÏÉø`p+ |¨í s1oƒ¯Y/d~²Ê¬ H<˜'T6_ܘ.e8ÃrkðÐ'Ñ•J˜€Ñbfæñ,’çNzuš S M…of^W>›Ô»ä]gwƒÐû'Úºì{ÃðŸl}¯‡ª)õ.Âøâ>Ïa‹bŸñË(©á•éNo9pšx˜+3h{ÀݹùÉ'¼Y„ÉÐð[^äé»­åá-MÍc>Lúz-}|ûF‘à'h»®­Ëþmú4›ø©) “ “Kr[z_â_8 ‚ÛhŒØE³‹¤æµÕ~QZ¥žà4ó+­o‘%zñZ)o¬‡<ÕîbŠõ+ýÜrmŸCw–SíDà;ŽS0M·Ì›$lfóK¯J è%Þñ1êÎ,¨© ¤ÎOƒQ‡ÇÍßþô?ýfSü endstream endobj 70 0 obj <> stream xÚYIs㸾çW¨úªÊV¸/É©÷Ä©n»R­™Tj<X„$Œ%RÃ¥m§òãó6 (ϤºËÄòð€·€¿-‚…ÿ‚E±9.>¬ù.UøÅb½]ù"ˆVE²X—?{ïO§åu˜yº*ÍËò:Šbïý_ñy?ÜýÈÏË<ô­±zŸjX{›þ¨«%¬ìTgêŠ)¿˜®Z½üeýE+ØÐ§m‚”Æ®£¢XÅÅâ:.VyH3麅åyîuµ|÷¸W^xÓv±'å`¦:cr;3I8ÂüFÞ}u@‹`æ UUÄŽÞ q•"úcá :÷Ø.WËè-õ᜕y ¿¥äoŘVg"#R–ðÃ1)øàj£8Ú훺ßí¹£šFU»IôñQ•z`[>,y|LÓÐaI€FÖBB„½â‘A—1„ÓíÖî(”³²)lVåë\(‡¾¤º’…äÆðÙ8¹EÊÉ18É).‹dOiÕQ BÌÈëÅ Q’ÑqÑp´HJfÞÂQo6Óã\QižŽËòÄæÌž¦Ï´Icãö9fv¡TP˰ÌàzÊdÄœÜb¯[¨·()dÊWÊ-ÂcL]ÐzÅL8‡!çŠjðßÀŒAt¹„M42²Ë$jC:­Àï¢VpÒ}ÄgÎÐÁO€7LÇ+¤Ê4GÓJyƒAA £]£ÁrÒë!c0n *Õ½‘eÙsAÒ‡sÍóýš2IVHYyðZ  Ìagg’R|;»ü‚ã‡$¦š§ÉØx”ÇI-ZDI­kDtb{Úº˜Ë†õ­$7 Uàt‚Ù8n"Q$Ãâ±`œ³_Ëò¢nºéœ`ñÊÓg(‡‡R;"¾pK?Oˆ’UZ8–J0§¾÷ñþë‡Û»Û»x›O÷üzs·þF«ÆE3äºÈ:›š`ì£Á,‡dË Ñ[âü³éöÜüŠ´å9mË$>hÕ”ª¾*í6:’ˆÑ¯æÊ°ä85ÀZn ¼aæ>E¡/tbžSœ.lB%˜9[ Žç÷”Ô‹ÆhÇþ9<,Dr›)9R7»ã×îÌÖnhŒ°pÕáÀ Ž0‡ü¶b!úw¢0K;FŒ]ù6+€;ØõàÆ¨5!ÜÚ‹&9ÓÔ•-˜„oâÎPü¹Å'ÀFËß·d€rïÈ ¿ãM{ŽË–¼J€Û÷AˆvÂæàÜT'âðïÊFê3UǹrLþ¼ˆ! 06Á&¹&òþ…pˆª$K%Å CÔ´›ƒ2Gð¨ w»5'ꀥK­tQä[´üÄó•æq&69w3;¥íÌÉÉpœ”B‰>l ÑljŽUÊÕöи=ñRðx)Øð˜™&“ž]Õ×-±7–Є«8k3Él=-yŠÓ ¶O·€è004HÅ, BÆ` yw#TÊ6H¡£4àv—=p&ÕÔùHèå¼#38TI‹a QŒDpœ¡b*ˆ.Í{¶@xÇz²Õ®ˆ,ÿ˜/ín,Äžf½gvm¿Av¶'¹ïBÜšßz=À¹Ôa C+ÀJ å€<èÒBPfË_Ó ¢1‚hàÂ-Âák É’; *¤#‡& ¹‡¶&ÔagæÔA=aK&‹í-ZCÒÇŽ‘é§Š’õsu…Ù?áË{–xúÀ#¦›|¬v°Mâôœ``pj³â’õu4‘•¹‰ ·ò×¾íÞ†Æt+LmNsçÔб/KHa옥”´šJZO³·ÞÆpÊñÚ4?çå¼yá(g@—µC9I´3qlÒ½Ìn±ü&¢$lœ9¬¦à(Cz“P‚ÅÄÞ–$ሣ°Ó"ó³÷-˜xø;(¬n^ß1…9?üë¹X µ“ÐuQX1G8WœpC9†p åÝÄ}ГfãÉáî¥!å …Ðφðk2©< *ÜÙ‰GmDq~¾Œ<<¼ç«wE7ïg˜ØM_þ˜½Û} “MxyÒ%”"z‡‘RøÚœ_'/¦%€ÃnZJcwÃh¦9™?]®Þ]FÊ途¿|¹ù¸¾½¿ûÆ,î?óVoaæó'0s|’ ŽM¤.Vͦ>›S¿jéxÇ}Ê€± Ù(ñ^»xËj¿”ò: ÍKèitý&tN¤ ­±ÖÇ…l„ÃÃ=–©¥aªÒÌíÑÿùù÷d´0BY.²¶KÏx¹µóWÊîäErÏH3~Ó@œ Hùõ;±g+_†Ü%Só2{ Ì1(#ñg¸ÖXžéð 0;ù¸p…B?ö> ™ž29Ž‘ªü̪ Z£ªüL. þðÌótä•ãð »ÃjÓ „åÅ«˜/Jðù>0OzãO€rå²½éÚß{Ž›$vôK×(úÉ#Ž9*’´ÅîˆL)OÐ",C‚9&¦ÂŒ$’Ðo,´%ü0´ž{!·ƒì¯Œ`$@¢<¶`8]0<û)9ÏSXSäQ ç³æ‘ã•ôì³åïŒ?w +¡¶D2,Z¼Ô³H¹âÚÁ¡R4:$â^Ù9qœ.JäײDn†Ø°Ö'îXßíT#01!OMGOuѸ¤T±—ª •”ìf½øçŸþٞà endstream endobj 73 0 obj <> stream xÚÙrã¸ñ=_¡Ú—ÐUc‡÷‘7'ãqv׳ñ(5•Šó@K„ŠÔ”¿O_I“žJÍ”A4Fßh­þXE«þE«"†ÿájs\ým½úËÏñ* ¯ª°Z­w«¨\EÉU•­ÖÛÿ×§ÓÅe\ªÝê—‹Ë$Iƒë¿â˜ŸîþÅ?_”q`”ÂY|ì`ClÎGÕ^Àξîu×2æ¯z£Z«.þ»þÇ*£+80¤c¢‚`—i”]Áù—iuUÆ´R\]\æy\#­OŸîo>]_”I°¾ýrÇç}»]fÆnï>Þü~îÖ|Ü7Üóåþ—¯DHçÕê2*ðXº`…E°éŽ'Ý8.Ðíp,ƒþ 0»’àuoyÃVýt‘e{º€Ê2ƳƶêT›º—3êvË`Ýn•—9ž—Ãyȼ'WëeÛа(xRž2Oy<#Ÿùn?À¼ˆ*ÃÝz'óš‡'¤Ñ5@MÈì&˶ïL½WS[m{£Ï"8€ÕVŸtbhËÀMÝ4j;¿AM6õ~oÔ$ñCôŽG–\†NÈß«Ñûеg°QöÜôºÝ3úÎtÇñFø˜ªI[Û®ç³U[ÙÔñØè£î:3¾`µáWQÀü$|œ£Ôp¤óã*ŸÿgÁåÕGÖò+ÉÕWað|¨û7TÀ"ô“ޞݱϴtË;NdœÊÛà+)ðýíF1cœè×-™3‚Q6iŒÇmšóÅBЖ¡µ²@ÍišU·Ï97MÄ>•¬‘¼iûéÔ¼2e8‚„¯X|cÆ·7eöw-±D”œ1üù 7¸ãÀÓÚ\TNV5dòJˆ¾ñ\`œáoÎ&·€#åìd.Ê+Ïqû·hi%ê„¿wx2ǃ 2XcU/=#õÇY5hQȶ²¢Æ†Í1†¡pŠÂÕ›ú±Q G ËÑV@àJZ º#é9›ÝæÃ¢Ñá¹iœæn{¶dW„gyl”µnG-4ºV1èP7;½%+Nš§ ŒóÄ!æ|þ8&’ÏÁ”x°^ l ¤/þt¬)ØðD|”ïÔÔµe§$lãh£6…Bï}øÑÔ¤öÖ{·,ô–†!²…n'A šÜ: CŠÂav#Õ€•˜®O¸LÊ4@ƒbón† —&{†õÍX@–×´¬±­—‹ê%<ËËä—xÖ›³w9B\ʪ2ø‚þ¬­ò”_缑öÙöìqõIÂ[mØã8’§ÁÉhæ‚ãw<¿C‹"p+¢@E¤^ö1£kÞFöäË¡j`w.¥Yß_ß}ýõ—j‘i… †eêÖº”&‡Ù“Zk5Ä ´I‰©‡ïºÝ2*!G–ûV?„Qº!J{!KÛŽ1_)J™>šoæ‹{}ŽV<ïnì\ôtb)®—–‹…®Ÿ¡01ŒáQ{H@–?™L1„*œ¤ ·*Ì‚{…^DIÁ·-k mÓh œÞñ”¯¼]ˆR 5Fãû@ÕXºàI³*°b=É!C¶´–™ —ø÷ц?©ê(&U¦·Çº*KÁÁÏ=c:§ƒ¿’[1p½QA(öåÀvwrs€@Å€wçÅH`¸ƒ"l¨·[- ”r©mù½×-•°ìÜç}ûHÒÔå“‚³g'wìp`€ÊÀ±ƒEIQÿFg@!o¤8ñBA‚µ1v›DÒŸM Ro`<„üÈõ3¦”®/Wo¾HÉ", `Ц’q]#[t/eC°ÄˆOB¾í+Óú†‘ 6ÆiþÈÊGm7M­l4)  Ç*ÍUVI B¢ÎŽæõrãÜÝË 'Ì.† ¯HœÝ´ûFÛOFZ‡–Êoð5o0©]z‡8—Nb%W€àB¥Ð‘•é hœ°¦àc;DNÑVðÍàv’Úq“ßRC|V.ÃóSã‘}ºÇk>S¦U-¯p„ŠS{.–Kä¤ÌG÷ÅÙD~˜ë8oÎÅËwóXóÀ·/£»£ýVÕŽÎ'G?k°ïã'£8$èf¹M"–! >,ㄲv”ÉñXÊò‘dyX¾a îÊ»yx¸æÌÚv(úgXس~À ìOx½¨¬ð8äì%ÀŠ…A$>k{¹ ŽÎ¼"n\I¢‰ËrR“Ä Î‡Q]\VAúpÁÈî`ü2‚2,LÞAvÄ]ã]kB¥ "¦R±Ì™•†'ÚW&$ü̹çWHÝîå…:ª7êMO¯9zKàù³bCZ•«6nûqµ1Xàq°q.O,%¥!æùêb7†Úóc3„טó.Œ œË}¹G‚Ò~Ù¨“|×–QÕ ˜«µÍë’O"#< ]­OMßGá`>×>ã³ïÕñÔ3^7œD ãñRLHc1Ä:Cš’ûÎ[1c‘€rµ”œÜkH9ztzûA*Z Xt’UQÍyî»#¸†X=R±Biý£–{gÃ$Æ}\ñãVÛI¯m>wCœ”w ²–K㢈œ†x(Ƙá‰a@xÒ¥™„Ã,w‡g“ÜœGòfQ6LÚ'c\’öMÆa§Ú€HÎM½ ó…Ú,Ç×fø³ø+lLêÖö5¿`þÔè׈NÖ1Vcx%Ùë5bËïUÜÂ*«Ð9ú5¼ŸŸúgב¾%õjËQ&Áîe)V†$FÄŸœ\tÉ9ºÄe:ŠCTŠgƒ¡Äò"ŠLÆ—V´•s×Ï(ùÇ#BçŠ:÷û ÍÖG‰ÒP)£¹fN&¶0´öÓ`?iÞ„%·w\_@‰õaaÞI!e¥ ¨¥‘³^ýóOÿÕÃùn endstream endobj 76 0 obj <> stream xÚ…ÉnãÈõž¯| X2‰ËÜ<Ž=q0íAZîA”C™,Y…¦H«=_Ÿ·QH`¬zõ¶z{iñûÂ[¸ðç-"þÝEzZüüº¸{òž»NÜdñzXxñ ÖÉvñšýÛ¹¯ªåÊ]dæÇrçþ'üÎ//ßxñ´Œ}§Öw¾ó—b'íNºXe«ZSŒù«IuÑèå^ÿ¶ØøÞº$Æ‹ ¶Úøî: à›¬cŸOÜõr†®óôíõÛ×GæóõñÏ»çß^v¼ýí‰5{ýë³@~}~x|Ù=Sãm+/\{±|=‚ª›m8R|³Ý:»òТÂç%¨¯ê'pÊ®Èä;)ÄûäMÕ½å¦9ò¦Ðç[XŰý0Îü±ôCG× phXXyÀ/XÇêBÖœ(…º» w°öBÒ›,Yˆƒe·noYØøÎ¡.O¼j͉`žÓ–,ºu]g×¥x#sÕã½²H{6yÎgoä[aÙ˜“ÉUÍ'¦àoS™Ú´cå9H~$ÆEUëF"áX.Ø0¾u-ãöG¼Ìì]/Ð5‘\øfºU&"KeixÃ÷‹b\¾åú$àRø¤e‘êºhÖsÕw⌻§`œ&É:°á{lÛê§»»óù¼~/ºuY¿ß¥eõ™ëC{'¤“ Ýu - \yQ²ŽBÓ <ªÞ=þÄ+ ÀÂ/ÔF!Óð÷Ý0¡)þd¦iMñÞA܇1G1ŠÏ¡ëN˜ o\jœÍÆužLÒ‹žåü܈ԑ½·Ñ˜I T‹«5C@¥êÖ¤…‚¯(AIG‹ €r*Á3¾7 ‚÷û²f°*lþ&¡“«V |Äñf~UU¹Ñ”¡¤Sè˜c5ôЖB·Î‘âõcis%SÁ¢¬lÒ†ìBøÊm¯†2c‚•¯\Œ28êc˜Jb‚ar˜MË"(LÅ‚[DIe E:n¦%èµ@¤.žÁ­x†¸*|3ØöžAØ[/ ¯íñÕ&µtî™M2÷Ì&ÙŠg\ëoÞÿ˜˜<+ S©–É ì£àŸ¼M•tÎ 3‘p>š¾æçC×võ•K\vH›u¶ôàjÔ#+,÷ÏÈé`> ê±éµ5ÿ,¬É-)6Ðòõ8.£^²JS]µ šØüªÏ#›°>©BxçŸ|¢ºöXÖæ²*LXC•ƒCªœG^Ø—èÔsÛ?€Ã̳ÒG£÷DÏ“iðë#xÏ/¿\yŒ¹ßQM#ÝÊ/]Þ¾çê®b—”µï¾3­¾áå^j¡‹ ¿<ŒÎ©4Áæ¤ u°ú lþIƒcg²Å ›¹‚4¨$0:ézHÈÄ·&„•MMôB@ý¯HPmÞ˜G­‚†1Ïä ú;azÒ2€DåM)¼0À æƒ>‚“)†¨¤ƒJM-Pf:³û\Ï^—‹—Ç ãÆ•Ð }J G w¤#&:„Á=ãöŽ(æ»±td²¸ðBç×Då!|û“êTå¢ÁµŠÛ Óps©sG.Áv±e]#÷2ºb]ˆ3®!æ¡3L8¦n¸”ºØÖùÁÎȧ[®s! 9‘$q9T|Ø4ZrªA ‘Î#'˜Få&î»F*Ĩ7@¾Ú÷œ$pàPjà ê4ŒÐ£l|xXýü¯Õîmo{c;ì¡Ö`¦Þ¦)O'®±°¹§ÊÐÖž`ÌÕîÈý#†'in¾È‚µË¬ó¾î°šÑ^ËO6}/ó!a¦ÊÄ*ƒ¨e]]{+ÑÆ§Ð9W&+È,ìI-CS¦‰†bƒÐ3 o¼âª6Ej*•Ï•­r…õÝÙ£>\ý­k \ð‘ƒ;Œüî”,¸C[0MZÞÊETn@»Â¨[Ü0Ï3Uj|ëáN Oé‚´¶•_6Œ5í…cÍ.'ÐPìm]a3 «`˜%&ý£Q'A‡w•*Ì2$Œ‚, {.&6Æ"á2·£W;n¸…0±ŒÀ[ª „· §Ü„ïùXrYFÛþ_3„ñ % ¹Ul~*ˆåƒ+¯ª+w¾'?Gœ€~SÝCÀ~¯són(½NUµfÀSã†QÍAHÛ) qUÆP˜Î´°à)Q†áÔOäB|¬8–âQq™]]ž ÐÓ9üè‡ØaâÔ y“Wœ‰.x"=X =Ø4åIŸÂÌsĪL€¹1%ëÝò ¯p¥5¼5ú÷n<Å.89 âØcßCÒÙ°…ÅèˆbÀB|ù½"öl%´ú êÞñ¨=ð¨DBQòYZ¯L‘Ðêí•–m.÷±„¦ª ¶Š˜:~€ÃGJ/Ê[ˆRê÷ŽO ;‘L:o׌ ^–½‘Ì œ—‘Ö'\rCׂ找ëÆW ÿv·'ªZUKÚF~SÛÐk•ö<¯`GAÃ/w°¥;n™,´dÛË~Œ #¬ùg;@nzÖ“3ÓÛ¾‡·ò¤qZOÃÂ7¯ï惭|‡VîÚ_ò,oHhÜwï]#4l>Í—Ü2h4ðeÂËJ—¶íaÊÏ4êú£ÚGõƒýóøºøûŸþ òþd endstream endobj 79 0 obj <> stream xÚWYsÛ6~ï¯àô%ÔŒ Ä#}rì8u¦Í¤S¥/ugB“…†"T–õﻋDJ–ÛŒ=Ã]`{ þ xÁRÿQPn‚wËàòVu_;r[<ª·.Q=cybk'Θàö@’tm¶˜]ˆEx^ßϼ^:ê¥K¸+ʽ*À3Q¸·e‚ŠM±QgüMõ˜ÝŸsÉ™ðÖ3l|VíFwm´…•‚ßǶhzUƒeŒ_Þþ‚ÈJw}«†^¼4ÏÆTzµwªko±26sý!±€!µ†¦R­wö §ˆ%s´g»‰[ÛáHÝ8ã®±qÉ–Ãû‡jÇCrOQP$<ú¢qÐë¢÷°ž¦ÚÛá¡ÖÝÚçaoDõ»Yõ»¢õëjþôÒûN÷k—Mì»æ©h5dÁÙR%ªvÇR·­iúùµyòP—ê¹÷B¶ª§ÒïŠò›~À*2W\WcÂ_I¡Q¦Uãú¿ò܉NGg ²…=ãd¿~Ŭ¾õ=~ó†‹s3‘‚­„qimÝÁdœMƉhÉa¢áÊ]C+‹$´ñwSBÆé42‘xÉÄ!Äß#+J’¥–äí4ưkÓ ¨óíºÊ/±m]”Šý\„Ff¹œÇû{ª $‚^Ÿ ÓGà‡ >še?‚)‰ƒ®qSŽipêîÜä’)KâéäòÕ*ÇܾR®®Gà—£'‹nFASõ£Ú¬‘î ¦ 4…ÓtånQÙð »é´NùJÃü̘³lŠò%ž±,>†sè¾±·Ñš4â¥vQ´Ø_ƒ%àB‘ßël—¤9K“Ó.‰³drïgÉ齟Q—¤/»·ÆÔ#‡‡7ƒÛÂzOÆz³ÅQ½ÇyfÇpœ¥ag6Ε¨µD–fƒtã_p&Ü|½9ú5Œ‘ ªñjý½6'Ñìq÷ ¨aø£—'<§Ø÷|»AŸ¾5:Ý…Ùc8Š«H8Æ5¡ž€^=óèB¡Ò •BcQ°1v,Áû¤‹šÖÔs±Ùbw'lPwÛ¸¼7´X’ý O/à}¹C#ŠÔ[Έ¶ªVEç+í\FK¦bâX¦±óøÝmQת&Î]êHŽGFe;úÖF—ÎâF©•õHupmÚWæÃ^Ÿ(W÷y”AJ´º¦½ÂA±Ù@bz™NðA5ªÅàaâ>ã-^ý¸˜&Y†[:|¹Ö-‘ƒ"j÷3bå~l¡O=ÕÃûeðÛÿ"WpB endstream endobj 84 0 obj <> stream xÚÕ•ÁNÂ@†ï>ÅÛC‡én·ëM D½{3Z¡¤ÄàÛ»¥”bX5‘(!%Ù0»ûOæû§SxáÍî'`òà ch„ì(ŠÑ(ÈŠÇàj±#ÖAi‹jFq,ƒáe³ÆÁõÜNÊŪýsk‹r>ew ™Ð ‰Íu›Ø`œidRM‚h{$’SîÓÄ´K£U0 #•ð^ë³ ÆHb,“FQ8-º•Úî»2R4I·ß”$7r; 9 fóeY8YÉA]æË6ÖÝ5ýÝD¢¡m9®rÒä[ø¸à‰T÷ÙQ¬Qu´~Ä‚Q²[ÓÍ™ÑO”o ëÒ†l‚Uë@QÖÕÔæ«ù²öX  õ7ü‹SñA}ÉäÎŒJR˜¶ÐoüÐYaҾȳªvtß[ܺsÀG\%¨å>qq‚^<‘ŠÇ é0¦ŸÜØ5=%èÀ^/r[WsëkgÆXýn¢œÅ´ñ·³Ð_Üöð>À‡v&k‡ÕNýÝ7ì˜=»AÌõ§9<Êàþâ詃 endstream endobj 87 0 obj <> stream xÚí›[“¢8Çß÷Sð¨žÎ…2o»]ë^¶öâÎ>LmYQ©Up{œùôÄ[k0 N^ª»Ê.HCòãŸÿ9'D룅-¤~°Å‰úE–?µ~èYO]ba «7´°ka ‚Y½àCëûÙ¬Ý!¼%£ \´;”Ú­çwù'muÛ.iÍ#? ã(?BZ^§Þç§¼$ôYœú% ä¢ýoïWË&ÔÐòò/=u s ˜å謚tl.ÙvƒâM78k=·;Ì!ª‚îô‚Û«^¨ïÛb·êÔ¶O]ÛÂ6PÛÉïˆÔ½ðâV«óª/.g}>Gâ.xAЇi'Ÿ×MŶ)#ààÕè(̱îƒT>øõÿáâWYAq·Ppþ$×T˜p‡ 6Q˜Øbs? §RÚ;àð]Ö¨y\Nº­† aÀYM‚³™š/G´êppr­ÞŠH54© l=rWcš¥ËfÏå¾P‡?‘^rŒ6Û¹ 34ûIè ç®8Õ$ìÏ“DFÙªœ¹ˆ†j:Žð>ÇRñÚËf]“x‡‰”»Uĵ¬]ŒTõÛ†ÊSÃS‘{Îjð‚ŸL8G2ÛÒ|QÎãL¦‡QM†Q ô–§ mpÕÁ°WcI¥—ø¯.ój^OÍ~ 'á4ÌdR>al²MFÞ8“sÐ6¿'o§w™éÔ@0¦rK kY%r.´ž‰€_CÁ~dq¯:QøœŠ¥ÛAé+J»jEy8zýÊßiÝdAyÄnàÊuåÇù -]‚=°#|ÑiÇŽD=ZYüŸŒÂ/g¯c\SMaXÇpë̼Ið9;£`¸ž—Í;CÍy™%óÈW¦Þ†y󡯦ˆ>ÅI°ÍkUS™ŽçUS{<Åa¹ÀªéL $LéOš¼Àͳæ×(ÊÞ{“bãoåk]‘\Û sÆZÐõÖq†µ ^ ýï&ô* ãyzl#ÒFO§â?MˆéuŸ¤nƒÇî’í'^4’w™(W¦5_ä[ìšmv9gXcUiÎ&žoÞZx[É «æ‰™<±xÝøÐ¢A‹CÐß&ÜóÈüÞ£¼aºÏÓ0¾þƾcØ_Ñ%þ1ÉöÓX&òýB_<(„\Ô£¦•˜™Õ=ëïþŠÀ endstream endobj 103 0 obj <> stream xÚ•X \Sg¶¿1{EÄõ*´5÷]\žˆÕº ¸bq_pIPdSVQaIN†}ßÄ ¢,:ˆZmÕÖ̴ֺjí³Z;ÕjG‹çÒÎÌwƒÓÅé›÷Þ¸ürï—³ŸÿùŸ+a¬¬‰Dbç¹aþÚ•ëǹyÌß0yŠxgú:’þ–UXg‚µð&#¼%†ôäRa Õ†‘ô£Wæï}Ä냾âu,½ØŸìÏXI$\d 8;Oèì<Å-dwt¨¿¯_¸ãèíc'»ººŒwœâììê8/È'Ô»*ØÑCîç¤ §W‡l÷÷ v=Ë/<|÷ÌI“¢¢¢&ª‚Â&†„ú¾3f¼c”¸Ÿã*Ÿ0ŸÐHŸŽî!ÁáŽ+TA>ŽÝVOìþç´;"Ü'ÔÑ#d‡Oh0µÖÖ–ÏLdœÙ™ÌãÆ,`2îÌ"f1³„YÊx0+˜wOf%³šYìeÖ1ë™ ÌFfãŸô`$ŒÇœfîHÜ$IÒ#»Ç}©Úª‡U¨Õk…u²Œ•m–5³6l%g˹sñ=íz–õì°Éì5¯—®×?l7Úþµ·ï›v³ìŽõy£ODß¹}kû>ë§èw¢¿}ÿ°þß xgÀ7Ç T¼Ëï$”2è¶j×i füéÌ ´-3I^¼À/¤øLXçáÏX´F›ìòh€ÃQêØ0ØÃí¬«7ÕT4žÛza$‘‘ñþ¤·|ä<åMò“»’­0|ÕÕŸA…íp³;þ„ Ù*£ÎOAn½þL˜ÈÚáGd]ÎÃá’{è,Åí%¼.$y†ëBM’V É\B®Ú˜÷ô¾q%èüšm»wíð­òm•×BqAz:G¿ –/—âÞë|Ó®º;vz{›7Õ5Éí„‹q&á©IÒ‚¶xm¥B>^ç&‘x¢¢;HÆc¼cžÊéÍ6>Âò¢ÊB«öÆÁ5¸’y&ÿéõŒr8—bò]²6ÀLX$>æ@PPTÔnupT ˜…4sK©„j±–âÓN–¯ÕB€|Þ2"…àö*KdG¡Ýx"ë*' %ÛløZ[; ™† aE hƒWСÍ,9艥‚x•,5Rã£NÔ̆àÈ$Yã‘oþ\ƒÒ/?iƒÇÚ8~Fì‰õØeã×™c*êÊÞ“Cs`Y`ú‰÷ÚÓË€{Ô2×M³×¹y+I‰²W'€¢¹} Qk܉ã(ÇþGïáÀæÉçØ=ÐIŠùxG+浜£ˆ„%i^õ欂:8Ì5×z«‚ƒU“ž­Å>èúÅ7Ïäp:ô;2©úëê/ÁÜ-·ËDA¬\=gn<¾ÿPíÑjQ…º~sFsÓ'`î¸) (eK€÷ÿ=Zmœ.J—¢MJ ¤pûŒP*·Defa) é_P"âdþ‰y¬0OV¥K•GS'âbÈ“®wí•xŒV DÉÖžBCýS¨¦1ˉ“Ït»ùöà ¦Ð:—JdÞô—âD¡¯O¬†¨„÷ájS]É™“PÁ„Ü8¹ŽjP'oÙ¿)~5¬¯œÍECª!¸8PïSv/ėʳÁ ÏÌÎÍohùІ&Ìrƒa¤b',Ï÷ŸkÏ;QÞ°§zgЮèÍÓ¾pÁ^8ñÉì‹v3î“!Šíà•¨ à,æ!1E›šI+ò苤8ÿÎÇi—jΖ7·ÿJ !µ2Ô'eìæ|«Ã2µ|°ýᤙ=›ä/R€j´ÿþstDDZ7I/y,ƒíÓ9”øez6%ó€ nC‡}ÚÏ\| o o³tIí 14«ÑF*˜„Ç|u Lñ•i€Œ9gM׿h³9•lëf™>;óZQN–ñK(—ÈGœb÷zz.a2lâ·A¦¼ òó22ò !Z'ä£Õå[¯ºé\û÷Ö%íVÿÞÎiU8[ªBØÚéÊkеà ´Éšh¢ïzi¯ÙÚÔÐԱ颕²C† ¶ú†mØðœ´,0ÒÛq=–É.gë JÙÃh<ò7¨¢ÇƳ侰ŸGŽ4Y“2»ÎTçŸLXa–àZðÿoIwÎç•]Oœ”Â]ï­Ã Šj‘dÌÎÙd>E4gl¾({œí=GÑŒ‡U²¹jÕ8¹'¢³ '€iiá¹fY0ª­»~¤æ‘?û›ËÈà´HЕWi ôdK #F®T]‚Z¹É>´lãñ±4gÃæL&,nØœàÌúš¤áÏ"rµå‘y±µ!°SFÎ"Vò©@‡q¤®Òh¢#!5œðšyèõÙY99YyUU¶Üý€N;ç;:ðW‡DREA®‚–Ì×g$ø¹Xú;è\úy”,ЍéÌBIæW8¸;]_“qJÙmÃs¨ÿðÏp[ìšqÂ×·Yú0Ó%‹ôñ§óÇ8³ t÷0ô=*Kèäÿ¸Zfÿaµôcɰ‘+‰ qKÁ7.È…ÿ†“YbßAzàô¸GGq¦&”uö2K:ý:Þ˜—ž}¸"³,Pë‰! ,jØr85ñÉ쉪Ë jëoͲí8ð  ¡ôÄCkî••¥+‡BȆ¬2Îî-+]·èŸê„ðÅã=àÌìFÊëWχ0Qrî×p@”k¥$Y]«ìÉ"!Ðú;QøDð k9tm" ÒÅwúð¯"ä߀ñÍ÷XLø™3îKÓ”ƒC9¤e q¾ ²G·.•q¿ån LÏ(¡<ËœdBïjœf’Ô£½EZ©Ä3ü£ù—ˆÓjb“ì¢:]}¸¶¬Q%šâ}9¦¬JJ»¸Oš|\ÛY eS·©3rQŸ*þ§›K[¸ üAÞ&+Ë„r VËõ” UpDržŸà°ÉÛD¹ï7ÈÔ}Ö‰u’IxÄkÛÄ+‡®#¸£s)Oæ%Z+ÙK°CÑõC3[TRTRXÚ¶î\ü ZiòŽ{”u ™ðòEOؼ×;€;èÅ=u¦¸™>í dÀl…Ua;½6«`ì„“øu'¾5µw ’vþ4q%![Žà”G·Ž`l½¤î.†uïJq.åOí9Ošús¹¦€¶à†¸ìÚÂÊô"Cj2åµ±\dþÞC‡òKÊ*£¨äJðŽŒŒö®ÜA÷RŽÈ×¼³PÙÞÍþûöFû/(+v–íKò‡UœçG‹q9μwö–¾^YšëU¹ ¦Rú¼ ’õÊŒ¸FZì™ú‚œ<{ùiðé{ïÁ§÷ïƒû–-à>Mqžxñ7®Å®÷ó[IN{ßóW.CÂòî@°±Ôí* nûª/òßyŸ&=ä#aÓ‚Aœ¿—ý¶Ò/XbrNÎ¯Þø³ÈÜn¿r¬,lŽœT¿þX|Q@³!´ý@ך )†uJ-kƒw ¿OS÷Ú°€,¡ÕwÑR}×,B>…êš+–¸{ãºÅOÚºe½Ö^CAéÉl‹{ݾmëþ“v~Eý{´ã #aó¢ýû¿ZT° ÆÁzH/êk™ý‹ÔWv¼æ«äΙËÇÊ#fÿ¯ÿËcö_!ÿÃx»‡ŸÿÜÿ› ÿ1ÞÂE !ot7Y®øî¤C(7˜ô”L&.Ó†‘Adð£ 8]î?¥s„ÈJž ìy×Òµ% å'N›éZݰ»(¤ÔÖƒ7(„ð"lufaêuÁ(báQ2ŽwÇ5²ªˆ–PqÈyù%ŽDùÄäM }¢¶pgØß&+ó÷6» Mü±Sí…Çûè¢'-Ñn–)” ,l¥¨±­;d/^<ûxF𦠜Š=åâ5û šó6í«ª25µ­¯ñ’Ï÷*D©ŒÌx=ˆ¿oäw):–4~‚û?‘ ½…9¼…ˆ$Q“’¯IN )Üi¤˜DƤ€¡Ø7¢.¹:Ù””'N„‚Š{Ç"å`yaÈ“¤R~ß¿8û/b€ÒÂC%ö'ýÎ¥ç°_.ÅQ8µÇUì]ïo\›½,çÝ8Å}ôÊä(ãBC¨>6S\;,üÈNXB³ÉšqN©äo4â½›¥è+bå!ÃqµJ¦í5zt*·ë©cî†_¿Ùrþ¦¼]µž]ø.\­xöÜoº;„¿@ývÎÖ³ç¦T“ãc–¸ÿ55;êjðKy%ÜóN?S†ó~…}º:“ËÞ,;>£ =ó²H|)MðÞM©‚HªË“5"MÐ%«IO’mOx¬·>'’¡…°;x%졇.³¸ «Ö^Cr…ÈA2 Y¥tæ¶w˦Tª7ŸQ”–qA”¬_ïXËBÃf†X‹ìõP’gOXl´~_ÜøCk{”’7­UJY¥á*Ôn·œY(&l6 ™%å"œ$ }xc~zæ1ZþÚ”_3¡o£•šš¤K¥™8hOâa1aÔ¢`OK&®°èÑ5"9î@prœCäÖ÷…qo4èçB#g + ‹ôßÜ¢ú@~ÎÞ¤LŠ2hzQ¸\¥Âra,ŸEg+¹5ì•“¿ËâÉ\J¨ß•·ÐòæÊH]›O»Lã•¥r¡—¬7Y«d‰N«Iàœevq¹‚gn+ÍΕ‘-¬Ù%½ê³lmQRaÛ[ncåRjÛSok'ôøO¯ì2 endstream endobj 104 0 obj <> stream xÚ]PMk„0½çWÌqK)Q =‰Ðu+µ›]ØkLF¨Iˆñà¿oe=d˜™¼÷xohÝžZ­<Ð/gCƒÒÒál'z•&yR ¿O©Š‰[BëŽÛ>!Ð÷ï[úǺ;çÙÓõÒä/ qØ—Õ"ûÜžØ:{œZ=(K@ÏApön…ë4=>Äݧ“è”áp­YÚ°ÅÚ_œP{ÈHU%¹|³$ŒÄÙrŽëI™e”MSÔòß_±1úAüpLj<Bèß¶þ9ñvDTˆQïIÅâ\ðî‘ÒE#JãýdÖØÈJï„o­ endstream endobj 106 0 obj <> stream xÚ­zt×Òÿ ÙÚ Å€Å&r +SB5´BKè½ãÞpo Ûr‘UF’{¯ÂrA6¶16ÅL‡@H€B „ö@îšë—÷ݵ ¼ÿy¼üßyßÇáì9¬îÞ™ùÍÌofîEDYYQ"‘¨Ç¢åëæ¬\ÊÅ?tT`ˆ×gÃFÚ‡oó¶_áê²ÅÃÝ~N`@˜ýûvGµ?gú)£fR³¨ÙÔçÔÔj.5šO- R‹¨ÅÔj)µŒZN­ VR«¨ÕÔj-µŽZOm 6R”–ZÙ…QVÔ ÑfÑ?º<+ÅßX ·J¶úÖêŽ5e=ÍzŸ„’„Óvt3ˆÙýNßwª»ÎêÑõûnëº]í¾¾ûá{”Ù̶¹Òs`Ï„^C{ÅôîÕ;£÷}Û¥Ò^ÒÓ}4}x6€½ùnê{KÞ» )[ û^öÂn¶ÝÝ÷Þ¿Ü×­ï7ý&|0äƒò^r›¸ßå#åíýíÏ÷wêsÀ¢]ÎX5è½A'?ŒüÎ`×Ááƒõ¼Æ†ÿ,¼µ¥šD/Î"ϳïˆùUü ÑÜ1’»_6ïåŒùIqêÈXa Â+ªòKÊê¼w¬ä–“G²: ~ej0#1³Sr,™êw _¡•0ó£kô‡ fó~m}÷AzžöÊÑäùæ÷}³¡rW3ì"¿o¡gj³ë丽`‘5ýèFÓ×Ü~¨ŒÐ£££´á±*}HE‚& ŽÁ4m÷´[à·ÑwëL¶ÄŠEœ•@7‰ûÒc]åxÛ¿×…ÓØ6!ZGþ€ô¦V§…`ˆéÖ’Ç·w}Åm‡ºø’0W­*¢ŸòØâmÛ ¶ŸXÕ4sî¶‹¸ÿÀØ×*"u‰²]A¯³ÒG¼”¨÷WòÒ^*kéu5èôjƒož+(€E+þ'ÓÈËÂbbÆÃï÷]â2¡*ÔÑñ ‘[ UŒMë¥×À=¨éÔ«»ƒJþ÷ÿâo³'C÷:{GÕq%—•–¦7èõ$ø £–ƒoÒìE‹ãâ@ &)Uš}ó{Ô•CkÞýï>´AÛ_ër»] ¹þ×jØð2l,}¹²Dôø¸ÝÂI,ÁUˆ{#[_´ÐG€fíD³POÔ;7 `dÒÕFcç.ÃÒu¸KÃ$˜–{ÁÖ'qÏÛ ²€IK1¦Ëßì¢ÉæMÈÈÂU%ê± Y/E='|ŒJ­VÉAÚâÈ_‡Ãã{žî‰?ǽ°ml‡²ªu—÷¾=¤Q—$†[ A¯nG¡” ðN; NzöLh£Ûk '-+Ã`éõº9, \âä R‘ŒU·sí¢ œK‹²Q‘U¡¥ìq\´œ&{à Ñíb´ê[ZPZUUVVEÓtZu”OÌ/hu`SsИì„L%êxM<þÛŸ³dɱ‚eŒ23!›Ëƒ”,c–H S«Ì$j¸‰2nŠygt‘…’ð¾´é—).°f»Žò“< >…)c§ïþäbø~8 ß—îù¹ú\êU¸Æ`/|‘u‡eæÈ_”'ᜀ3p6ãp1êv9Ó 5p6²xhÖJ˜‹`ÌU.Ü:r…¿#²IæÖ[ö]£æÖ>l¸Šǃ/0~t Ùª¥œi˧½4qc9_?I­ñìÚujI¶øÒc5Ùõra›+èùóß,¶ž#§û!f½ô û⃸“‡á‰’ŒýÛ`뙣ǭ<ÆÂÚœÆòÈro.Qð§nÛׇës÷'Säðéú©«ãUØG¦T’_Césž–T¢YÖ!’dÿ$§ø­I‰óAÑ®½¢òbРm¨ëo_™m›ÕħèÓÓŸI1…v£çìŠãç <7Æ1xúÒé>¦ˆ*K‰©ê€lå,ûÏæÖÓxD1VqÚåÁNþ7kBt‰ºPm$ê’tÏHÛ”Êt(äöHnÔφûÍ p’;ÃŒBïµÉìdê‚JB}cœÆ<œDÈæþý§7]XÚ/zß»€›¯€ÑöcÚK«œÉmñ“4[ ©é4¾)XwžX†ð ìiÑ\‰•Ä8|²m³ÌFfBH ÒðïX·ŽºüŠ™Ð{7m<ÞhAw¥ð«Ñ&u›òSÜFpŽöòfÐZºDU“T êyþ~nš&5I®#¨&kÂ6„Ï7Ø”îPšhÔ’wL<$FËñ~:ó¸t0SÒ² ê_‡0oʈ,ð4¸ÃzFú¼ai¨K¨»gð&˜+E0ꌺl`j ÍeeQfŸï¤MÎ GVréˆyú ’ÊÛuæl»yqÔ=äþ`Á=i’¡ëlÒP¯ºƒ„f›T¦ÍÌV7pô+Ûj*ØžÙpÒéËɸî‹Y,—¾Ä%ˆùü!ÿü7ò¥tÜ/XÌIÛæ‚çºð ê†/³‹Àÿ¤*?²~€"æjõ“{$å÷eq‘'¬ƒ °ÖGyù/Ý”Ö>¥ü×WDGÍ??óAü 6S ³R«%Ø´¹êb&Dâƒ]­ÍcAæéÜœô´«K t“(£§b‘Âg,îëƒåð!Îqß>؛ŤáˆñHÆá”my·÷|Õ£è›c¨X} l*ßv@úMâ7±›¶«w@!sêë¦ ϬÍÁ ÷K½ÓVö»úý-p–y0îØ˜!ŸÌÅA¤Á±É!;®>ÄÅHŸ-˜°†2ýŸÎ{ެ¾ùuʽM¥ÑY w1C\XÔsZeD³?,±›9cí” ³¿ºÉÁñê3?6wèS÷àÖ6~à†û=8btõ¥qìÀM˹(XmÚÁìɨ*´„æ+¢ýÜçvý±ÈõC¾Ä È„éoÇq«`C¤³£«c˜ Ì`p!+NúÇ)hlÚvœÁ½>c£aøŽ¬‡ ðUsi}ʵÄ!5› s|SÁ&fòæáã¹v~EËÛü+Çâ«VÿÊ»íŒf_ÚÞ~a’þöö¥#ÚÄ,iù¦-œ™”ø¦Þ}÷bª´—V¿®©Äÿz}º>Û‘Núš’½ë-üüQuëL1? u›œ«M†hШ’c°[ÛϲÈun[WëUnÓï6ÔYZ´ÕB±>Ä\.£>Ko؇ޓ!‘îKj;ÿ•DÚŽ:ãyع{Ÿ®‰¬¤—BLº²†Á&>‹4¬øª5VHlZ×ΚPƒÅÉo¢ãf=!ÌÂwa‘Ž®1¤7s¨—äQíÄ5 7LÂbùýöQñ¹3p‰¹3ú~—këâW&¹bPzÉÛÊhésB;Ÿq¡~|? ²»w÷or¸3å2ç0‹ñ5÷–8hÓkä¨-£7š÷ùÚ)ƒä6­ž KëGÛ£ÏxßZB뢟Yì†&â±h šô+’#& Òc9%€JŸˆÚOÁ"`–àu;ÐA9ñG Z»ã‡DpwL lˆM0`,•£xºÒ•œÔ„æÖÏ”yÖ­;0éC¼OÀã±3‘Ÿ–V‘E„¸Û¼ô‰¸¶u:ëWF¿2é•A]$h*âÐP´ ­À}ÑX<]ŽûüÝžm·ˆßÙÔÉWpNqðóÝË2'À4À∥^ƒV,L¨ u*ú¤Õì¡~wÑ3a6šÅ¨ßUö•K’&”MJP6 Ï Ý©]'d%÷èGÙ¾åfT"™ ôÎEI’÷°Ò.U¬*ÀrÆ, D ë¶“¯|bÓjO„6[о¡«Ìh YÌ_kʶí{í¸ÒWV’Â{ïC‰z$äÖÊ‘î6ýKÖ+Ñ“â}FpPZ§èî4Ì+ 0GDÛ´š–„bá?lwçĻ޵ҭü½Ól®b—áîLÈÈ—£YtCJêל…öÔ­Òú»M¯îƒüªé{F¥§|!-mÆVXš¸o¨E‰o×לäþ€ûcKð¿t­oõêÃC dKðD<»`ô1VÈ¥[/Âå;NtæÚW´ÃÒFË]1ßÊ?eë ÙW¸2‹Ä[3<4ëjP¶ú`ÜyÒÂ>¬HÚžTéYœå>ÌçëgOâ`zêšýËkÎèêtY‰döab!)RŽè(HÊ&óˆÞž z£±æe󯻤ç‡_Q¹ô"<™cR ÁÝ“Œ³SJÑÌzQeÜEfqë¨Ö)l’D`éãóЄü4Š ²´¥jPBC€Ý 187a${ ûö=kÉÜè·CÈr⤼¢”lC“0|Ÿ<<¡½¨&´Þë ³V‹@fÑ,0üÓ‘¸«­àøÞɬ=hÜ1˜|Î!î=,Dc dÂ.]¤k`¯Ý^ºÚÍÞ ^¯³[ZÚÚß"*nÝ(nñ7ؼúŠªoõŒ…öÓºé‚ý—‚…Å-ºÒ`B‚‰•V…¶m‘ᕼA•GЉÁ®ê˜…Í5sÀc£sÇæ_ãò<ÐÖ¶—²ôˆTM.‚!55±y™Ó!¯èe¨øe"¯èØî¬ òüµ~:ÿ€…ò¾Ñ•ø@¨4‰DÞð6Wþ˜Õ¥hÓ Õnûq(o—7—€àlpÖƒRÈñ2}!Ãò¶™x¯$3d:ߺö2¤$çx"‡¶V™1ÁŸ ÄŒô”\4…O•¡OÚÒ:^Úu¼e^óoYë 1?˜—E M¦êÕw…jè®sІ¸m·ŽjhR”âµÚ$%–ài2Ì¢ÕZcr¤Ø‘-Ü-àê­™~‹õžä‹bú'¢EØ"ÓqrL¸ÿ¦Á`Gz}“¡¦þH{RÒ›ôQ$Ê2)éÙhò”¡q8Ñ 6ªAcqŠ(gad¨5^„M#@½¶¤n±¼Ñݺ-æÿào±õ§N¤TC§ƒü:ýÛX.¥*V­ÂSp© ÏG_&e÷¦Ú•šSö¶C8 Ü]6é]Èò"ú[ÈP#Oü³ ¯}+“„ÑŸi²äh5mÃ#ØÁÿi3ó‹I•ÞÓÚ’Ò™©ïm«$Êö|JGÖÛ¯£É$ÇJÚìÚp’th• ¥ï")D%¤eNÄòˆðbB“%ÂÌfÜõrä.êºKŒ2°‘Ý5üåÈG»ðn¥…SUîEÔ^bKX_º_Ò?‘™_É–GUxqá¯Ré´Â9;£…¼9T§wú«œÎ£Èä”dåäé¸ëÒ2ÇݵEå±ê÷á?©Ú¨:¾5Ÿ=úsäp7ô`ÈkU¿kW’'Ãç«$1\iв _Sù½±ö™l›®l|€&»h–úB·¿gSÜ*\š)=•w]~4d%½yrš#Rξ]ÅÍLšÌ¡GÎÞì¸ÁµöGšn¢)iBePš”¥ü@òl²}qÜ”nE3ø,:OãAJk?ú|FÒyÛC3­×gäU43ÒýùaMë/‘Øèöû¯ˆEÒa±„´üÓÀÙ!:’1â¹Ò„uôÙ Gd”Á^¨ .ó(w5®WðÔ. pÜâçá³Á«,´>¦ŒPD4Y¦4£šõfÛ7ÑÚ1Âiã;(€E“n4â2á´®ÖËU£ò‡X&¸(¼²¼¤pû·Ó>ýG“ö¢'}Žû<JºÖ÷«Q÷¬¬xÐp  UkU£Äy’ù“_3~7š o·XÑÄÛµ[LDœ#S¯#ì| ɶ¶Ð_$¦ï—K÷ó¿ÿ³ýبs._-Ü^ †Y,ýu(¬>{w˜«Tj…]hˆ­2Ê££ÂY0®“ƒ“Éü%vk¤x3ÒV ür=,áK£|Á™ýx²A]?x•ƒÚ˜ƒë*×T.‡%Τ÷MÙbâÝAø;xÎÁCrØ·³~‘9!¹¬`ÂêÏדwÜÞµ‡“u9‡<ΉQ—ïÙN jõ å-Úon¡Ñ¿_8zætöêޡ߶n-¯ÛΠ•4Ü‹_]L¡OÉr˜NK£<ôìŸS8b#nmB=^Ø^~ñÅYéCô¿„ÅöН3U$tM¯dTëÊjk;dÌW§6È¥¿¥ð;ÙêÒ@?EPp)ØRi.­&y»˜ ~âCÛ÷u{Ðò|ÁYÒåz ;v¾’)‚=í˜0a!—L*mpn~JIT0å‘%‘áÁk»üÕ™û$1[G½å/ëÇà&Ñ‹³â¯«!‘Uµ}—n×kÀžÑgŽ\éß´"í"¢ÔdM¥þ„¡´ªJW%¬ñxÂR4W¦3$§2I¹p2+ãôÁ&C©På4±èµØ#T×b]–b!<&ŽLÉý±Œû4[EÄ‘â³bôEëöŸ9°ðß_-v^–6)L¶1@þJ÷“ ú‹KéÿM,ü_ÄLَ̙0 œ3ÒëÏIƒ*X%ÝßatÇõóÝ¥{ÿ/»B¯”¸òZ‰½Jh”f~ŒIDhpûM1ï‹|XÔgÈ Ü÷ŽE„òØßGzÐã·_‘”ÃÁØu§Ò }!{àÔA.ÛS±¯¹tìÝŠrçrgXà«N G§€õÂÕ@ ^c! o×bî¬vHµëΞ팂 é*'¹ôz›÷+“vè[ å;†÷Ó§Ò™tjtÓêïß”À᱕\úh¸8…+H ÌgQ(]upÕA`.ž­q/&Í”»GIP#)xz c _Ö©Íp3i6:*Ñu¾×)Ïý÷Òùc ÚcŒµôQl¥ëéO¦0¿‹{?Œ¢øyhÜmªbŒÈÅýið T„ÆÆø93kÉ]R)º¿y釦×Àû¾òú‹³/nK¯ OÑ,êBcù눗î}ocüQôã¦»ß wJ`ÐitáqÌ–n5™sª«ýªœ9é•Yà5/Æ™Ë)MüÄbÛsÈ—(Òö¥ô.rGkX“úF4ÌfÖy»Mã&×±ˆ5¹º”øWS¢¬cJL½¾¸Ø@ÄïqÙ«+%ÐÓû¾ùN‡ü·ÇåøT»g¸d Z™=/Ž3µå·9ÔRÇüô ™D½ŽYö·ŽQ6™ÔÞØ8:>A­ñ¨t…­Fy+åà]X¡`¤w«ƒ+UßÅ­e¤<)A4¹Dôû9ô¾YŒf ÿýe D‹B$º)þöÃÔŒâG\Eãžãê.T^8à YEÏô÷ðœ÷ ¹W‡uÓ«üŠàû^cÇÒhЛ~c/B4ò¦ß˜C¼qî¬IêæýØùËUÐŒ“ãáô4ƒFrÒˆ£°§²J¸Œ*#ÜûdräcÄüÇè6›¹­p÷Yû´º°ÐM†(ûêuÙad’KЪÕÊq† [¡jUnûàXÞEd²ð×­Ô†¹éý…å§!E•ëGJ’¥Å’s!R2S²„q¼C\‘pyòt—-:`É­Ä)ˆ8E€£!Bø¾NgŠ„P69v Δ EÕê0ÇT4@ ‘ [§ õèVÚ¬ØTU¶zÄœ,‰J’…®:åÕêvÝÔkôíCíÈÑäø"[ü‡,5Ƙ(èfHKÍû ÕÉžâú¥ðÊ.ŒíúvVQ¯£](ŽÝ¾sçþ²rK]c~³ u°ÖŸŒ×k ±ÂÎ¥ÚŒXˆ†èøØdÕâi²i¿%³Wšäçg–´¯ÖÍ×FoqÐ «Ïƒ^×¼ô1feán—/Ón&ÆrƒE_^Õ¤-²VaLÊ%•©ªæÔwß‘e(s£ & [ƒ„Qq»þ¨ÁTÑ ÛÞqži«j'SÑ-^A\zKÌ'—Ÿ>¨/€Wt0(ñ]AaÙx69n0Öɰ™ÔYÚ‚Zy=sÚF½òè—ÂQ€7Þ&’%ÇÆø¨b«ç,¡|GYR2LPÀ”G„…+bý›¼p§¡ñXÙ1¡K3ßÇ$j2£¯ÈØø>ÿ!›™-8‡ÉM„H_$cã26¦=-®'iÇ ‰W·õH.ú“íbÒ‰*è&™—’©1wÝâ„¡‘–ÒG¤^-æÕ(ƒ5µ©´ÍË­í/_F‹_F /ÿŒ&/&~v! ÈN3I°kméz®›)³{÷s%Ý{p]­&•tÝîó?›þ endstream endobj 108 0 obj <> stream xÚXXSWû¿aÜ\(ñ*T{/Õ:Zjµj­Š«ÅUÎ*Ê^V a¼aï™°§âD•ŠÁц:ZŸj‡£µã«v}'~‡~ÿÿ ä_ýÆó„ðÜ{OÞóŽßï÷¾ç ( J X­tÞ´eóª«6:;Ïu0ÜYŒåúÃÏ6Xê'Pú‰ýËfzÎ\?ÞâeŠdŽ!ßÔÿY¾Œ6|¿B¾øÊB `Âeàà0¶ƒÃ¼UA‡"Å>^Þ¡öÓ¼f?wñâ7gÚÏspXlïà!ö9àh¿Ñ-ÔÛ#À-”\øÛo :àãi?}©whè¡%sæDDDÌv ™$öZöÚLûŸPoû­!âpƒökƒCí7¹xØ8={àߪ €Ca¡bûA=ÄÄÛQ¯XN7Ÿe¹ÄÒ‘Zm¹Úd¶Õ|7õ¾…ã'¢(3Êœ² ,)šRèáÔj$eEYS£©1” %¢&P©—)Žâ){j5…šJM£¦S¯Q¯S³¨9”5—šO½A- RK¨¥ÔÛÔ2j9µ‚ZI­¢VSk¨µÔ;Ô»”µŽÚ@m¤6QïQ›©-ÔVjåLm§vP;©]Ônjõ>µ—ÚG¹P®”“% Ní¤ûÍx³“æIæŸXð—,­,çZn¶TZÞ¢§ÒÙô!' 6 1Â|;lñ°cÃ' o1kD舮‘óFæŒüiTžÕj«r«>kkµõÑ6£wŽ3|Lø˜+6oÛäÙèEŸŽÝ8¶ŽÁúS»>~åøfÛ1¶Gì†ÛIìn½äóÒ“ Q>›¸bâË—¬àÉ—ý+jò~bŽ®é{Ø îqqîÉ;8ðÉÄsÒ\Tîp0Í]\…pÒsÒÚÓ>P]S} :Ÿq.0}uaAAaaAAauuuœº‹:ÿGE_nùþÞ÷æ(P•Mïðɉ Ƥ»bW[•,=¼ª!³LUÊ ­hÿ^a4©MíE“Ô‚ýs½z“ý”.h–oPðNtšjyÆxÃ.BÂÌÖ<ØùCr R!ãl_}áÝe´Â¼½[ €ÿˆŽÄS-÷o¥¥Ø’AÉDEi¸FH¯O+(AV¶¿¼èƒÇ¡oØ_ú¼J[-Òtko}‰œ¿ìÑv«m.]]ÿð+íO·Ö_ý¡A§Q={=ú„ ì‚].{×Ç0›”Å2¡K–{…ì\VF^T2u!¥q^Éû8XtibbO¡Ä P]µ ‘Uù¹¯¡:ƒ~ÂSjÑ?/ ƒÂæä³ò’]±ñI ˆfBKÃk5U­|æ|ÏcZ…%Pàb)ç!ÄfÑë—ƒ#„da -õgz-¶æí8çàÌ™öž<ÆjQšÔƒRzÐäAKWO×ïäÏ\¿êÙ6#/-²™2Yi ’$®ùcmrlj$0’i9WÙeù úêWö–g÷îÝž›[7Ÿ=ÛÚ}‹{c5«ÔžÓ ©Á©ÁI|²«$Z žàq:®@Ó¢>WÍà èuVv^yr˜K55‡ÓÞã 0Òk÷6&[°ÙÒrߢЊƒ™q¥!ž;¼’äÀ¸Ä^©åáL~AÇyÆj±æYa £Î\ﴅℌÈ<úË}ÈQÛ|¬·Å×EÿD§P«õñT÷ºÕJÓ uaY1¥ŠÜT•¸ôæà"DuÛdfC9“õ81Š 1´1GwzØÖ€?±¿¿gCpS[uc#Gøþ,T-¸¤Ÿi®wyfÍf—¨€`¢Ÿ%a KŒÆ_ü±Ö6Aªˆg"‹£Ô\dg2Òú­à¬%(D—X´i ͰÅ4ü^‡7ýŒÇ#3dñ½„ÖqØç°o¯CÃÑt4U÷Ó­›½¯áixú:<ümâ£Vo¥ý™¤#‰€à*!•ñœI …;c$©Rex*1Ⲥb®Želcú–8¥!àP Å<Ê0É6LÑ ÎßFõ:ó.±qñ‰I gü«¡„CßÒÍÙ¹M|°*|¼AÄá8ºûÜ·O´_é:}>gÐÈ©·±¾tñBϺ˜RMeiI…qÙŧ;/sï³}óyX³g‹“3cH0r2&Yoñ×,ãn‹¿fó’þßÚ~»¹[ôôÅ?=ÞÜgÁFo÷ÈâSä edÅQ¥?|€,®4yxù•zwrV]½«z›õR6?»0‡ºRR åâ E)Ã÷ðÛ¸ÄèxÒ¶¢sbòÐ×ØÃ¶(.]™ LIyA%åä~6nGN¶Vhgï½^A›ÞÙ\¿=a š À ÌÏGýüySHbñ”·``Bt{C^Öa’æ<¼’ýëlÚ_µHwWP«÷5G:ý]6®M®ò‡@BœÕ§±•C($¦Æ$&Æ’P¥ÜÏtYcxñ•¿Z¢…tådK¯Ö*(ã¦Kk ‡Â¤9¦L®ÛLÖQÏÍt(‘XZK,uÑEµC kí“{¯ô#‡ð¤ )nD8ÁS¢pÐÜã.Þe޶êo°ŠfYú!`Þ1Ɉ!æçW¿›¥RÑhC_J¡w‰²ì ÒÛx}VµðùŠWL3¤¤ûT—Õ’*xúÔñð:"Ãáø¸æÚˆ6TÔ¢ãv'=j>ˆ5гŠsp.B|œº°»±à܆–¸b炽°6ÁFX³=f[pø<` •Þ E¤ßf¥’-A©,C#ææ£Ça!CMøÐ'7áb© õr‹ßéN¬Ý±cÿÚ$âûîAîØ9éÜtjHŠH nÐßžÜüþ—-ü*9û±×[˵pŒùzù=<œÃkþ7ùÒ¢³wèrh€¦ Šp72_”û•ÔIs¥êz[SÄð±Dá”L|ªgTœ¾ÀÁȉ«TÔ‡jäùƒ£€Íùk¨äšÇ5ÑcÔ‰jÙºÄ/"à fçþÍK¹ Ø“q Ö­6ù¸²LYª,óÆ /<¶5œ ÈH‘U”ÛÔ •^17<äáª×qE¡{û¡ì·ËÑÓ%en-Ðaw®óÌ'ų²üÓÃòÕCµàh$EŸ·l/p!5_±t!ïžvú"„=ÎPþZ” °F‡ìtÈvˆ¶/œ ´o|¼/¿RøüÉd×'ß)4Îñ_´Ç0wÜÖ¡ƒð³ tIõô°& ÀßÑöN;wîXwþïú®AH@ð¢U?ÑØúþœ'O9:“îÞÁjŒ[O KTñ“pŒüÜ´(VcWUAŒŠ‰ÑÉF.ih4w[âõbá‹U­'‡@í³Éd#1Ùè½g£X£,9Ѿ q~üë…þY±‡9äd"Y3ŸM¦MÆI4öÙ6)/¾4Œ ʲ¨Hâ3bÓÑ—¼c››UA†ðâÒ2r’óR²˜¡=够½Âö€ìgtræ“ñL“k§u±Òûi:{ÉùAÿ”Ud'B $Bª2. [9ÙÊâã“!ŠIÈó«â2 KUý{íâÒ ìªòš²É .C‘ÍXͤgþ›9:Që¬EsµO´6uû¢:Q¸Þ¬‰­ð?£l¦n(Õn›ŸÎ á'ۿįîŸ+4Ò*®êrU­£R©ÓŠT…@Æ­OÏû¯æExM ¶Þ 3˜µWÖý̉Â[¡'»£‘‰A›Ø7…„vá#½¢\ ˜î‡òÐùu+š’ÁÒ ¤E–ý-=K'’¡%z[­ïÊ!‘)âOõeÑN“ºšus;×Dx&øñ{$BÖóþö /’½.‘>þ ÞmqSØ}é•[—V¾1cͺ5o{?8ѽÐgZÁM yh®÷D¶.9)Ħ&D$FKö:³pUï7gêMÐ…8^å].'G¼*MiýÍÉà‚W¼‡'ÎÇ#¿›‚løo¥ƒ ý¸ßÿ#ƒþÿã,ëòvîæk伋>‹þKyøCïµÞ«ÛœûØxÕ .êP÷R´Õ”C+¢×ÿ Ã#fL#³’ÕÓ©ˆÈAÇ£jC|$ħ$HÂvm "Ò¿â¬ôkFu™-ºÙ}±ÎC8÷ÕþУEc|7è~¼o޲ÈÉY™pꃾó4pɹ[Ô•%u—ßé[Ëö½Áí˜&ìË ÌOqÏT“&\eì Si+y9~xñ2ÚwÙ¦þ’D‡œuG/m¹!ú{ ’£Õìv·Ž žc,Ì$ZôTŸjñ¢3ƒ#"ÌÈÓŽrXd„–-&ƒÕl“¹‰Æ ñLKôÛ@ëŒ*×Ù'ßc¢y&“îž»ôç·Hbç œ+ú[ûp£yÿ™þ> lžIÊÆ‘±5¹¾g‚ØqƒÙqÖÚ\èB# Ñ]$ÐOaS" ¿ ià{„^áƒ~0àB89ø w„¢Î‡Ç:ŽUE­ã°\(*Ãí?-ú¯K’ȉèy\¸G”*óFt×ä!aÌs?û¡#úŒ¨àX¶ ŠüY2zþXD§þ¸ ÝHÑgƒ˜TÅu¨š Ö ù“©oöOØ[ÌžŽÇ`Ñ÷3‘2ûþdÃa7¼€uÜxûñ7×®}rãê:‡ÙW8òVX¬Es ÈwÒð»dz,eÿ"ÀxªÅ T{P³E?Ö§yü™uÿ.ZzhÓ[ZA»UÏõöìÀñ+ʃ;Tï^³•¨ªÅ”~UýîudÆ §[5• öÛc23¼eEz-BìÖ=‹;®ë}ôm¯îóÛ§–9qÏ ƒféÐÚû¢SHLzÚwÝ? Qœ*¤4¢˜ uI­Zq|¿ ÖG:o`DŸ 63¢þ.îYbÂ"™ÓE°¹¡E ­¿Vô#\ ͈Hgf¼SG™š¦Æï¹/ ( =X•Õ880ê†æÅdyj‚«Æ$$ê·B{ñ0ç·¨oåd^ìŒÿ<v0žž¾Ü^Ø–/¾“T–œ<8¼¾>0»æB‰ª µÓëBj©Î¼¦/Îð¢§ð+f5~™ýùXû‹Z`HÁñs—(ü–Bs‡*ÿ*­8—ž¡ ¹É‰$ÇàX^kc•|ÝÖ ªô‡Ìõ+I &! 3§ŽÆ| Ðm˺?­x.u 4âÇ>äHvåP ùÍĸ9ê¹VP¢1×ï3Ø×B ’ÇB:2„X¯„r¾“ÞÏY*éäšèÓŠc‘WRò½!–Ô-&,%áæ’#%½³ìxù ’ç?×@?ÌM—µƒ];¤ç–i«¨ŠÒ+¹³ˈ/ˆ*ƒh…ô’ŒŠAUÔê} ò-f™›-ÛMŽ½Ã†FîZÞqêò§–5C îù1 í4ާãÑxåã]4l 7D3ù¯‘õClm6¤áÃŒ{ d•hõ‡µ‚÷ÿKÚWaŸhÏÄÈ;%T§I(Ÿl«_\ƒFMÂÏ2b!”v*^-töJ•)A•™…Lud™øPTd°ÛáÜ8…l3ò‡Ò©CÇú_ªPÎé­éŠ,PC1sÉø’ÉWÉøÎ>Cýª”…jhOÏ)k{ÖL–:«ªÑ€‡5€ÑQ󕉰‚˜¹Bð™—ÔK¶[Iˆ‘‘P¥Ìãk”H’¶ÁK„dzq9x<ôbÂ`.ëŪ8OL‡#ÐÈ B¨N9æÜp¼º¸YUÍ `ÞË?›À> ÿÇr¡ñµû¿:ÛÍBœÚYÿ~͆ o`¢‚Ë“I¡¹TâŸ/ƒÉ.ŠýN„nóKÝ É ^+„@ðÂSRû]ö¯†Rþ>|¯.¾«Ê‚³PÇ<)>£ªˆ¾!Dˇ¨°YZjc¥W ‘ë®ÙÜG¿ˆ¾Ò;é?eKd%R.“‚‚¥rBŒøÜè‚è‚ ihT„,0 "i±´„ˇ¬Ì쬆ºš’"È#GùBEa´:ü0ÔB]Ie©º¸¾Êȹ>_¿*-ϧqd¶P;\7B;r¤nä(n¸EdÐÈaúбÿŒl endstream endobj 109 0 obj <> stream xÚ]P=kÄ0 Ýý+4^)ÅN†N!PbB÷QÎwCGÇVRCcÇòïû $ÐÓ{’žhÓñΚô+8%0Â`¬8»%(„GcIQ‚6*îUÎj’žÐæ$ýYNô|¼/Ÿ¯ÍI|ìí~k‹wÐ8<(·Õ#”{Ýq±Î§ÎªŠÐë6qŽa…Çv=¾$ì4cG8Ü‘±xÿ‹ÚŒÔuW> stream xÚ%ÏMKQà¹6Ùh-J»«H jFaD_šh›@¢ávÑDZñ–-ÂE)D‹I¸ˆè'̲e¿¤]ËvgôH5ƒ‹óÞwu‘dY"„S‡™Ã£Ý…D2{²¤zÍzé÷¸óÓnõ;3’"NØçÌö9Srøk_þS|!I’~Ç> stream xÚcd`aa`ddäsvöuwvÕvöõõ44‰Øäüîû5ígëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–ᣠˆ|Ç"_ €Hu Á(!ÄÀÂÈÈQVÓm``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*@Ü®¡œós JKR‹|óSR‹ò€Îb´:Ÿ‰‘‘EéGß÷ÅÝo½aþî³[tEñüâ¼òââ¼Åå‹WÌ_¼XޝlÁç©Ó¦}/XÀö;a*»‹ù|ÎI<\=<Ü ¹Îp/œÄÃóý¡³8cƒ endstream endobj 115 0 obj <> stream xÚcd`aa`ddäó òuŽ ×vöõõ44‰Ødÿîûµægëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–ᣠˆ|Ç"_ €Hu Á(!ÄÀÂÈÈQVÓm``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*@Ü®¡œós JKR‹|óSR‹ò€Îb´:Ÿ‰‘‘EéGß÷•Ý_~eþr@tEñâ¼¼ââ¼¼ÅÅ+V,^¼BޝtáçiÓf|Ï]Èö;q»‹ù|ÎI<\=<Ü«¸.s/™ÈÃóý¡­d endstream endobj 117 0 obj <> stream xÚ]‘oLgÇïháN¨uLëŸ8{·„e2F$s¬Qg2]©Pg[8®íP(Ehåú»ƒ– :ºÊ² ¶30p¾Xⶸ̺lÑìÿ²eÉÞ˜%{<^ìê\föæûËóäÉ÷ù|¿?’Ðj ’$×;²gß¡ý9æbs™9ß”¼*Rzî]_9“Š·ø1oKÁF Þ¤ÝFdj¦ªÄ_ë’úë#I}RmÏ£„–$i¯O2™žÉ3™vš]-œ½¾g·[³Ùü]» sÙ&Ó.ö%‡³[-N¶ØÂ7Ø^=œdË\V»oa·?×ÀóE;vx½Þ<‹£9ÏÅÕ?ŸËzí|{ØÖlã<¶:vŸËɳ%‡}@÷`š]ŽF7oãØbWsª¼”…°õ„pÍ„[ÅÝCì%‰RâQAÐ)Ih ?q—ÉDÊAFãÆÝz¼2Ê’Ñ—1r ¨Aßâˆ!p!ñC O)XÍßìo´LqBE(àrŠ®ÿúi§ºàè~ÇçÐSF½;އq0O3¦k cº5}ºtQ—ñvz"CŽèt‰‹ºµx톿ñ¤ Ô endstream endobj 118 0 obj <> stream xÚ]PÁjÃ0 ½û+tìÃI;…Àš4X·27ììØJfXl£8‡üýb7ô°ƒzzOÒ¯Úºµ&¿’S ÆjÂÙ-¤zeù´Qa¯RV“ôŒWé?ä„À¿»kSŸŸ«‹xϳ—îÖ䯠q¸Sn«G8îu[‹u8µvpP €mç@+Þ´ëñ)bŸ¤‘ŒáÐU"!bñþ'´2V–i\~¿I9³— IÚY‘e%MS2´ú_oWôƒú‘´1O‘yÚ‘»£Qý=ì©…hÛ›žÅåÆâãOÞù¨Jñ¹mk endstream endobj 120 0 obj <> stream xÚµXyxSeº?!4 €‚“¢àÈÚ‚Œ( WYD©,"¥ tI÷tK—4û9çÍž6éÞ¦mº¤¥¥¬eÐd.ã.¸€èFgÔ¿“ù¸óÌwÚª£Ï•;÷¹÷þ‘“œ<ß÷½Ûï}ßßûI¨áÃ)‰D2fÓ†uË—=9céšø§çĉÿ,\ƒCc”p%üJ"Ü;LPJ…‰Ã•×[3£‡ÝKQ’-w‰ÏcÉ“º~§øœLÌéqÔp‰„Î/¸¸‡fÇÅÍ]š™U”“²;Yó`â´˜9>:fÌܸ¸GcžHWç¤$&dĬIÐ&«Ó´äEŸ™˜¢ÖÅ<¸(Y«ÍZP0;!=wvfÎîÅÓfƤh“cÖ«sÕ9ùꤘå™Ú˜µ éê˜AÕg~-ÍLÏÊÓªsbÖd&©s2ˆžcGI¦S3©9’'¨'©•’µ’õÞ§^ ^¤¨D™f4%I¥S£¨ÑÔ8j“ 9h‰,¬j”tE–Kd•œmà]ÅP6›©Ÿ¹uÉKHÎ^9d&Ýd?àØßø×NÑe|ÖuPEï¨ 5îk9VÛN#µáivÖnV‘ºr”¼‰-åtóÐw¨Ÿ?H\QA\ᣋeK«´ì¡ñjÁ#?ßÂyD¥ED¥³aÔ½GÒyDYüÄñ[6à9Ä d™…Ð4˜v5/¡æŠì|§~£ ØVG·Ê£ú¨YéŒÌüy@?$Û¬î.·ç(Ð]2¤ìHÀ”A¯'k+P^Ô­³b¤‚²ßÌù*`ãŒsou0Ö4N¿è¼ï³Jx{È]¯‡Ñž0Ñ­OÙ.Ü”»»\þ€ÊÜá¨döqP'-…ÝÑS†¬n’½Q)k挼I‹|‚hdt‡K$«ÿ…MÝ þ¨Ë¤Þ¾}oBï~Ì—=]6PˆH^ú£:—mÇõƒ›ÿÊ&’&ÿ áˆ$,iæKÑEá[b–#ð1Ð-¢†»ÙÇ )é1HþAÃfÙüÿ¤a3cMµ+ ëu¾ûö½ÿO ×Ê–š}$f^G…(Lt£(Lô!ú2+7Õðv-‰íÙÐùm²~¨³ùÙ¸[[ŽiûÔïá×c?æèþŽ Ô£ÜåprèÔ+B5ã6» N+:uëcÆ[jç*!v·³þšpŠq…|ý߀;Ì$ó[¸ÔܵMô‹&ªùäXc‹—ÝZÌŒ‰Ôç…"´J¾ûJÈþRi¦ÉÑ <Æq8?G>Zü8‰ïDóÐ6´mAEÊ[Ê[Så¿^pŪ`ͺ€¨?|}¹çu ?úê¼D rñÄu±«§/ܹˆñÚ¼ AÑÉ :–Ö?ÁWRA®É¿ Þ|nПM»€¥ÄçDGÞ½$Ÿöíû£R¢Ÿ„ó ò1¤¢(ˆ5‰ÖYËŸ¶¨9Ó¿y/í•֯«Ü6¯IiÞÌêË6¥¤¤½=ð® ZìÍÐû¡%§§°5¹1×G?X%Ç’S5®&{e£KQáè‚F ßþ°3 âñhihyáH\»©. ï©ðIä)¹Ïâ´ˆ…ˆ3–o[Ïäw½ØGÇ£cîãTçHèÝÞ²\Ê¿˜Ïü>Ûµ tô¢•q3˜÷2’)¡ÊUÚOJˆ²x+«KÁÛÎHÚK[œVŸÒ v»¯²ÿ ÔÞúÐhâ×èN4RÜquz_šï™u%SàN­0;R«5{à8ýÞ…÷® é±›¬ Î0€) t‚Ûît°ì"¥ï• i$N*¸Hb\áh‡z"`D¯î×*ÈârÙlR7ĺdëq^T«ìЭ܇æA 4ƒ‡oâÜ,©ž¦Á˜5‘˜±e“V“˜µ:C+(þd᫠qSË.Û\ÿ™¢#™ÒÈ&á#yÿ™Sž}v\ —Èg¥?ëÈŽž"&tmI¡ Jåf#Þ…ƒ ž€YªHW±+ÚBH9PWžµf}—¸á}ðÛjRh&¾VË•èbœžÍ+´æY5 V ó8e Š<‡ÞMPÛ‰º;Z©sÿßfî—¼‹^•¢ŽÈù2ïþ(|¯ /ü{IºW|›.ûq]¸noÄ('K̉Q_Èð¬¿Ï$+Èo²˜ô¾ò *jB%¯¾‡¸?H…r4UnË6'°FSzaY Aº9Ø ‚ÊŠcŽ*OW3šAúÝ/Ï`ÅSñºÊ¼pGsK»BEU¹öpÏ)'Яvn}^ó+Ò(-µàQ‹`6½ø‹â£Ê«p䂯š^~ÈÐDÂ+·œUvŸg/)=n¹5ݪQïÊÍMÖ%½#­ý€4 •!¬+oEÝ×z[%ç/¡¬ëRá1a‚|gÝ ZÔ¤µ½aÿ¹¥«ð½¤ÉNÄ*,ûðñ¿ IÇÑè ŸÙaUšH&Xô©+Ö§> ô–5=ˆB÷¼‰&þUU §¹Žd"àDyP˜D»JÎ ^')„Ç8(á #d9[þ«ÕÖ,‘§™Ù¢Ý81Ô¦Y"vDÌà‘ø<ê“'¯«.Á©W½^ÃjÉ+Pc·ÛN‡«•P–uzw›Š¯³ž~ª]ίË×ìÚšñ<ÐI«Z¥‚7Š:v¡ïÄÉæ@_j^bì‡åCö§7¡%AÉk‘÷œTxË[D.Ôà B-xh4rQïR|Ž"Ÿ‰xø‡ ¾Ec‡du.Îk$ös6«á…ØEåY@¿¸²C”ÖééqÖЮ&yzèFM ÐW`Z)¼Ù–EÐvú‡©@õ©qâT Û!«ùÌwÔÝÙÖ«h µÃP5¬Í4•k¡h`,hi­ë9¸³1I¹^§›mÚnM3¿H/ëæ;6ïÐÃ*Pü”×»ÃY"1p(täò ±'0Å;›ÑúÓ7£mHªO´íAÝ'»ÏJ… a‰ÜÊ•–A ]î+i¨j¬ UZº“”»a‡.%ÝP™Zôô¹‹çª@]“U«3™Ô‰ð¤Ôhkô+ w¾Ûè§>ÚŒ¢o ÷£a¤Ç(`š2^–a×µB;)K¡PWvŸµè?_¹xYíÆV]óáýýPE‚^ƒrMbý¾Üoµô÷ì©ë íº¿lµ Œ¶Ú¤ÂäÝ… Ó0’Ï^wø¨ š«º÷4·5øá- ?½KÖ΋ŸªF¸Ö— nôŠÜYOl¯¥ßÝZ®|6®-HåíÌiôåí9ïVÝO‡=dpµžâºþippzûœÞÃÞþÃîǎt¶õÕv½¯±`« J¸rã³)„ŸZÔŰö6Ç Í¨SÈA4ú¦-ÿNŠú"Ry³®9=3-wwF“.îè+ñ¼^^Äó™ X[pô©ªtþù°Óe?åhÙÛ7ÀmÃQÛ  eˆ§¿&PÌ€¼ˆ¤KÒª¤¨ÿ¿ÉÏŸ»ã6sTäíH"»ÎK#m?sÿ"ذ1{»íʲÊí06€8%”qe¤,+x§Òv³Ž(ÏÜN£G%h I1³ØQïÿáží~Y'zšLÎų6ΈeÙ<æcÙ6b‹ˆ*eŠé—LÊ#×ï©;ªª>¢sdú%¤ùe›J´Ij  û:Tà·»ìÞ!2£8(Aw¢ÐN°ƒåÿe½2[RØü|<ޱhL›vlOKÓHËZÂ÷Òç¶7Ø]§ÑŸ™_ØkÈÃlyµ! éµáßr÷Ò;žJ;Ï”ÎGãnC~ºË›„IaÉeÁ(4èŠ<l=ô†H²µ\¯Í~ÑQJ¦Ãô(g—¬‚2›ÙTŠïÇnfiÎEç!¨W9.ƒ–Ó¦%9rʼnò øl¾ÝŠñ×®»¹•àqUÔŠóÅ ÌO"OJ#óÑUyèxw Ç>tF—Éçi¶9ŠåeÕªlãyBœX OXkÓp³µðN¶žðü®CÐ(òü,~3—mÙdÏå·’ñ­B¯ðšÝW‡­Ìä'êˆÒßoÈáWrÅe[ìé↳à°xw)Îá/\…NkUàòyèAÔËœÂÝ®"°+àòz¢çH™$ üVŠi[-³¦MÙY;“óC™Þîh³·÷ᤜvší„Jµ( 6Pëó}v93Ík¨,› F†'5©ÓþŠ£9t€o ÃVȇ‚õdÖömøœ¹‰†¿1zº|÷?+ö— endstream endobj 122 0 obj <> stream xÚ•V PSW¾—ëAÛìBÕ{Ó:õ-¢V­ï÷c-ø®oT„Œá!$!$ÂË@"!ø@)¾êc;«‰Ž£¨´:«ÖnWëÚ­mí¬{îα3{ÃcawÜídæLrrß÷ßÿÝKSþþMÓC–l^¶aˆñ‹#×GlØ09Ü77;ƒ¨ù_þ!æ‡Qüpšádz"þ·þìóù ¿E Fê—Á¾ñÇ!¾q„0~0”ò§i”©)Ÿ>e±<õ€"1>A)3V:yæÌ¤SÂÃgJÊâ‰1Ñ)ÒÈheBœ,Z)üH–®—Ç$Æ)HÇÌIP*SgM𔑑-Û&WÄÏ;Aš‘¨L®‹Û§H‹•.“§(¥«¢eqÒ^ða½_Ëe©iÊ8…4R§H3“éh*Vœ,Rˆ2ü(j(õµˆZJ-£–S+¨ßQ+©HjµšZC­§6PS©ÍÔj+%ñ£hÊÚDÝ¢WÓ~a~µ¢ï¿Õß)Þ!þ+ÆX„p£)èAÀ¶€¯ƒÀËy_ÖÒüþ¾ÄTb²‚Uiíélhô:•"jábʘnÒ”d¹Ùh­>ìZözzÈF• {å¨ä°…q¸á˜G9ÜtÆwh‘—Æo=ŶÛ">ï”`ôøòWð5únþ]DÞ›CüW)j³\κ*t6½µîÔÅO®ºy3i£IÀô¬RM6†¨4…ù F)n¨bñ3æTCI½¹¢¤ÊP}¦UŪ! ÛÉe‚t^<Ãû£—þ²Cħà6‰[…iòa4ÁÜT§ÚYÖZ|‘uY›¡ Ðߊר8Ð2Œú¥E¤<È8ôÑ¥õÏÙÏ ÝvÒ]z¬ð Æú.RjN™fEëHt‰EÙñûrvç'Ú_‚ƒ8è8¶ ßý_x±ØKwªù6‰Å&(FMû@Í.ê+W+“J¦e×ìiZ ¡dð@Fÿ/=ã.ÀYgËc¡±´Ýœ;GõÀÅ2d‹N²vÇ…{˜þöÏ;k–§  eùÛÔ3—._]†·ã·½ô“|DÀ° ¯—¶Ãñð ÍKH(?„ˆ¿™ƒÅø7ן¸«´U . Š ó²öíÞ– (r^Ë\e»¤þöí¶N@/àÃýä‚ÁX€Yñ5/”½Å3<”±»{‘¦Øiª(®-9îi½–]ÍP È~ØvâÊBÈâæÀÎMnR²A“= ì«ÃwÌfrMü.£N…$Y7ô9ž "ÚñÂÏ/·ã¨vºªídÖ_a™W’9oFš4ªï¬¬1[šÃªÓ€~xòÍsêu.mµÇî²Tš¬ g¾ Óy¨ñPnó:N Ñ…Ûeûœ‰åI€Þÿ`Ê$âÉf}¦R½d ƒývå´¨ÜE†–>ü¿ƒƒ±Äû&㊣Ø<@²]vüìµ¶vï§G÷FE®]½ŠK!/$ãV· @ªí­§<Üôì,x?&ŒóíV—'ø°®ü_¦˜õZ-ÞʨöõcJéðÔ’[cý…Kg½€Î”e¦pP`Ì1êbˆ.dg¿]ûï:†w”ž4•@MèýíG—³›`gúy’Wki|饈Í_—ÔgºäÉJ¹bŸ3ÝÝÔÐÐÄ’‰¯Í2´ßÉûÄÍüwv í"BÞc²½ ©®P œ‡ý_2¥_h ébLÞéwÅCÆÞØ“#dӓ森ˆ°Ö+QìïYv¯ˆäœõˆP˜2wÝÓÍÇUTã9ЋŒÑÄò¦ ;+ïÚ:KOC 8Ð Øõ°;F«É=™tP HÌKUêÓ@(©Xx8ŸOÓû|úäÿ€º¥ïÒ÷÷J~F`6—‚õ &ñ!ùõ&銆û^úém|ä–ˆ·àr öŸww" Ògáz°â[<á@<’%¹$J²b§·óï¿zxó܆%çœÌõ¨!D¬dºQRJ£@UŸ+Þe¬G/,6×Ó_)¦I_È]ãt·Í…\n<¬ˆP«ÍUÅu½Äˆ_‘{LD!`pŽWįà§Kâ\}BÑs7s0óiö÷Ùg näÁ.d€Ùd[jîè»Lè^C¾v£!'w ,[n5[ –’Úcçb¯‚žßòýy>Éh”Õ&¹äÖ¹¶-åëÊá(ªóœÅ ûLÉ&•±P{Ž€ÙVr¢¸¡ì}ãÖÝÄÔ…I:ö'ð°Íp¦ät“%Å@ÿö Ò;ñ+LÈeïø7×õvk`_wœgF“ÏÄFj¡RÛ©½k,O€DÐç%¯ÜBÄ!Â|…©ñ0€ß -ð¹áºÒ¯÷»ÑNά4®5)Ͱ" í)Ö.ÀªrTT´aIùqdÊb 2*f—n4嵂\`kF½Ñ#€<Û÷rBP·sÝPÃ…Zó“øp]ß#ì_^<Áü…Œ!ãÉ4ñßdO\¡n|©Á½Âƒ;È`qBzoøŠäû/‡‹gFáiâ ’‰‡òÉ^ºú‰ˆ×ø*Õ]@w­|íãbH É—EÕƒYç ýƒ¸éÍ+ÝÌ#‚-A%c(èwÍЪwGì1d­¥Ö*(GvmmJV¢&jw“üû®ýÉsiò‹ËñüƒC”ðìdú à]oÿŠÖJn endstream endobj 124 0 obj <> stream xÚcd`aa`ddäsv p×vö 64‰˜úýîûUý³›õ‡4ÃÆ²L?䘈³È200¼‘ÏùAäc© $ë…X9Êjº Œõ Œœó *‹2Ó3J4’5 --ÍuŒ ,sS‹2“ó|K2RsK€œ…àüäÌÔ’J ›Œ’’+}ýòòr½ÄÜb½ü¢t;M…òÌ’ … ÔâÔ¢²Ô·ü¼¿ÄÜTˆ£õ ”s~nAiIj‘‚o~JjQÐYŒŒ œ \ ÌŒŒ,½?:ø~Hüî[ð+x>ã­›ÌßÿlÍÎõð‹ýÍŸ¬Ð¢ØíÔýûúw•ß’»ã9N°Eïþ-ü]´ûûõîÃ}ß9·|çÚòãÈñ5k8f|¯Âù»OtõÊs'v~çßümÒ×î+@-¿U¾KFoçðcÛý]ø·(ÐØîàŽßœI¿¹’~sùgeqð•.ü0ç{øÂÙ Ù~'Mg—ãb1ŸÏÃ9‰‡«‡‡û×Mî}<<7§ñð~(¥«ô endstream endobj 126 0 obj <> stream xÚ¥Yt×¶!{44Ç”’“@B-!„B0ºiƽ˶ä*7ÉM:rïUr“»1˜^& :ÒCI yy¬¼;ükþûW¶AJ{ëÿõ—e­5š«sOÙgß}4"ÊÆ†‰DCß_·|ù’S–¬Ù¸qžùƒ7’q¬°ÿÉZ[a,%¼(^ pba´ÍK%ÊFÞ©ÿzÁüþµ½ù}y7b8e#1òhõŒ³§Ï˜1kI°4*Ô×ÛGæ4Ñ}’ÓÌyóæNuš5cÆ<§Ež¡¾înANkÜd>žn2ràôA°»¯§,Êiâ;>2™ôí×_ˆˆ˜î6=8Ô{Á¤©N¾2§ žaž¡ážN˃ƒdNkÝ=z}žÞû¾$8P*—y†:­ öð "¾7âMêm›EÌjj-µŽÚ`³r°{ÿpŠ@‰)Ê–¢) ÅP©AÔ`j5”²£^ ì©aÔpj5’b©ÑÔXêEê%Š£xêeêj<5z•zšHM¢&SӨש™Ôljõõ&5—z›z‡z—Z@½G-¢SK¨¥Ô2j9µ‚ZI­¢œ©ÕÔ⇠ñd=µú€ÚHm¢6S[¨­Ô6j;åJí vR»¨µ(qo Õ r0|@ƒ8LÜi3Ðf—ÍÛ®°UÙlÏÚþ›v¦K%Œ¤Lòo&Œidž\=~:hý ƒ_9øŸCv¹;ÔshÓÐÿ²‹²»ùB¬ý${•ýÝa‹†µûqø„ỆÇï1DÙ4rïÈ£,ÇÞµeTó虣C†:Ä:œtœáXâˆÆdŽùiìú±M/ÎñÄKn/àæs{¸/íàÑ—zÁI'BÞÄè’ð1{zO¦Jé–º™ƒ­YxJú:mŒÖb´Ú¨èm™¶9ýŒöœöŒöTfœbz lêdUÁÁ2Ypp•¬®®ªªŽ³CŸëQ¶NôoJqíÇ?ÿQŒ¤Âu¶%¨(š‹oe†kÞáš_:(,ÔV3hòú ì@ø[hÜ-D|8a{˜.jƒö6OHà½éb4 khA48úAª¿&A:LùËO—Ð žàåÙEüy:³ÝMÇy§W;ð-t,jP3á¥Ñ•\#dÖf¶fµd2[™ÿý›tA;´µ{A¿†Æ¯£q콦§Ðvoé»Èër1vëDg¯üj||EŒŽ GØöäŽèâ½É)*„351ú¢æœC\pÿ.`Ú%%`ð÷i ç%Á”âý%°¶7ÌBãB,—xgï)WœÊÎÊ+„r¦6\ ÚÃÁ’#sÐðxÆKÒ¦F0”pí’_J®Ý†¯á¼Ç=ìPË8±¸6Ã1hmÌ;Ç–ÞâÎ@G«¡±Ùsàa`®®nu°ZšÌ«ýc#"Á|÷Ç•5Õueä0x=z‘ùŽ@sºº¾ªi8Рܶž‘ãl‘ôØ\]PDHP°70ž 6ñБ[yøc‡NëѺG"´Ï(F…$Öäs`·wLœƒät·ãiZ(Ðj5éH&R•óR·Ä”Ädˆb¢Ê¥Õÿº‚FrTOd¤cšÄªÍ,”&f+s°Ã7{¿Âm½±òpÇíãŽ6ädeçA“Ÿ¬“r2˜»þƒ9›ßŠžKaeñÔKS/ùÔ¥C¶.Ÿ7›\{V„Mbô:ËÂ娇«n¿ñnw0Á)r1ùIyÉÈaÎÌÁ+°0ÜY¾Ë}áö½;TÉ)‰ÊìpW_=óÍé/ËîÁuÆî¾^CüŒ¸&FGÑS6½Fk“ ->>à£â@ªuNÞ!.G®&BÉC|V|yâo8ŒÛ ‹‡hHqŒ,‰Ñqy•‘•¨‹êP3Hø´´@K.Q]S‘pDjˆ®V¤C0º’Ò t±¹Éò¢³~ûÈ¡ªJ!›©P”FpJHIKIcì>Ó£ù·Ð;ÄEù-1:ô,âžµr<9ÄÓÐîEø"žÃ<æ%ýÔQÈ#rE'€gY\ÈÙa^¡"äŠ&ŠQc:›"òÜ­L‹J9£(‰ªh||ÙœõêÜáèçe¶q9£M×<èo‰Î3ÄÂ\²¿eóËôóÍì Ïô1úôÛ`ð÷’ø{5HÛ ÏàpV˜*v=Âæ–‚öYŸ†22%òt±ƒ*4ÄÈ*å\5ä•“>%M%€QtÌ„š”¤¤îhí4Û`ÛWñìŒ×>£‘ ²ýAÎöÙì»kH¤ãÑ„+?Þ¸qe2'¬Áß%>Úøˆ¤2‰@è²p‡5 *er\À2w©{šB#WC Q_ÍuÀ~}•Žéy}–$&üü P£,ºÄ@š9bøY´Ù`‚Qtê”m_þ˜U%%%‚ñ3@)‡¾¥›òr›ùzITyyA¸”Ãrúôds¯¦ª­õÆeø™Aƒ'~‚íñÀùóßtoL,ÑÕ–íã@¯ÊIÉ*;t¨ö$0Ÿ™v¾ÁòM.î~æD T#ÚbÝü¡7€Bt‚}|hÙÖÕÖ½Á‡ÀÂLŸc@ªZÒPééùZ-¤C&S¡ “)|g?Ø€†¡Qß|÷ƒ/֜١¿y*çAú…—°-~aÕö•Q55z]-yi)9M#dsí°×^‚ãöz„†DGiv¤y¨#Ì)"A–p$C2z£[ÜŽ€UÆ‘ã'œ ÊŒmçv¼  þ~½™[i¡A—Ç&ËÅ"ôˆnVåùpAt($kâÂ<»‡f‘?z`‹HÌa×_BoE'¾B$ìáè[‚ï}yŸ´Q ”Æ$'¥%Þ–•Éê ºŠ}GüÏMÀcÉß Ø' ñ{¿"Ñ?¿DC‘í¬û؆Û[#÷z3…x y©älú裓w>;å¼dÞû–¼,G#µœÌh™ЂøÏˆÆÙüåý=öì»óÝÕ=bVé¨HJS$Ado÷UþÔ…lÏKÛݼ¥Á>9"g’¾Gn’;F‹Æ¡9hÎh2vä±MO'+È¿“ úaT1fÖã!Nfƒ(؈¶ELh¸©›´Þ;¨EÃiOˆl3ïÉ=ìç¶HO’ ´ )7Ñ‘ ë»wGÒ¤ÊóåzZ¶®ï‘Y®¾ è7"‹ä–á"‰y[óKôOej'Û.Fµ,õ×ÛŽB(å/¶µ§c¤u=rËšI×”êÙJ›Ùeªí7ŠÚL¨Œ0›Ð^V_ Mæûxˆ{´êŸÅ+Y¸ðWôštçñm¾ ޏ,HW¤G5õWñ½¢˜(™dE\°¬Â«z#)ðñ„ŽVá5¿b4˜?  eeLH~‚¡×e ¿2!âÃj¡“­¶`ÛÑÏÏŸj¼{ ­¿¿ûÜÇêy˜U·ØYV…Xz`i˜ÅÒïîÒýèAr’îSd{DY²„;éØ b³7{TSV×Vë¨gf~3¡8bh%1ô!]ÒGôÄÓyßZ{äÞ–+aH¾'…­&… ‹ä–ã8I¿µïºQh·m®±±íá fé߆LY%øjéâ]e®e;‹‡bO=T)Y®=À Új‰%ƒ”µ9_ {8úXôÑ^žXjDI½  ì…2KÒ†_ÿáûï—þ€óäDÿt#KàA´ ·yD?<°bË–½+¦ò̰ÛÔóá¤è‹MM#âЯè {ª‰ 2w|‰rxÅÿ®¶ôˆ“·èj¨ÖÔ‡T’V€½°üÊý+üëcZ€ùØp¡“Ì J>B@ãÇ$«½¡pô8![YÍŒˆ‹k ªJÍ`°} »y\¥¿ïX·k·‡ËôgüuêjºF8ßÂ_ʸ¤ÀMë2B ¼E ß!*eS½W~üÝû’nEç§]É€‹[Á—Ù²çƒEÜ^pÏ“–î¬K= ©Ð”jt>ÀŽà1+Q€´‘«„¼¢rtˆêAÌoïóШìØïqtGwnxÖⲸÌ]Þ­pˆ9~ôèI dzfhf`™¦ô÷ XkBÃ̯~ û rMû*U>üBÉó;]hX|«Ä‚ë¥` ³Î»aB Òž[‰Ùz+X;XÈ¥ߧǯ޲yóêS9t¿^ò7«Ðxؽ¿ürï;4Œ³Sê…£¨\Pˆ…Ävs5¡Ÿ r(¿Ü§*hæ—ᶸ-ò){5´º2©)¹vš0Ú¡¹ªŸ¨^îëÈj²ì)Ê÷ÐA8ÖIk+cÕÛÂZb_g m\ßµ çƒÖ¸`{•;£¦U.hXÐyæ9 ޳ô»ŽF¯àmñŠ0É_3 ZAÛ½e|2–ìdÞïÉ@–Ü4Û!"ÙöSª|ù§«$~¹Êf9Ó–{“ŸŒ¥­¦äød›R ,#r"Ò,'T™*múìér‡üðBe7fq“›š«É`žíIêƒÎ=qb{ëLö³ÈÏÉOÇâÉV×Î}”c7ùÙd3ùo~„Ö…ël4ÿö4…lõÁíHÐh´j-‘ÈÙ`È5^?˜Ÿ•ŸMÔdytIL˜Ó ÆÕe”›ÇÂOø­åñ|5vØ“˜…W×üÄÂmèÚ_íÛ䔩3ƒÃ („Cd³è*Kú=Ü=Â;z¤³noSÇiFödn#;_4¢½ ¦53˜p©/5 -™8ÔtD_踆ÀýQ‡HŠzH„öà7~Á6üp‹ö bð›s玟¿znÅœYÎ+/õøüToh—¢ë&ðƒXðB"V¯È“sq Jy’"Úm0o.¿úÍɆ¡‘|k2A§Öj´Ê _C"i\ƒNg¸5vàEkñØÙØîÑ è•†ŸKx‹ïͽ¾ ‹ÿÊw<•–W¸Wm&,$ž2Ã/ÜŸŒ(þ0t–µ¶2}»m5vÓ‹Ð(vÓ®·ß[¾îÊ7÷Œ—ovŸØ²©7 ö"J*ô Ê':ím´žÕUB;bœÄ,¶›:Æö¿ND#јÃ÷«Í1ò±Gb Ûð>QáëansÄCF{‘­øâÂþàØ™ó^ïÒeDC.Iòó„,hñ}$ê=ÚÂYöO?c<Ê"£‘-î"b˲i—¥/£;t¯‹ý%—’SD³D9,Œll[¬Û ‹Jh¢ñTüŠ-ú¹/ÀU–*ë‘»ZÕ|†e/×[ô›Ä™‰¶þa õd.CC,æþ åú›¿i%F7Êêú+ïFõgFt²Ñæ—XØ>d+ÙÌâÁönSgFÙDXÇO’ZQÀøõY«„wIžd÷-óZ*ùêÀ‘]QìGK”Aýi¼þZÒ‡•¿J¦lïïé¡ëÿ‹’>‚ûÐdþéAðE,²Ÿö3¶Å¶Ó&b{lÿp2²A6BövÇ3ØÅ.7ïß»øñÕkÖÌšé²x1o‡C{'ŒsÏ9؇²V~ì ÿç¶Æeýö:ë€ QìŸ9¹Ç‹FQ» •··Û71Epþû<ô[]Ò¦’ vè÷Í߀£‹‹ìáj•‡V#¼ù˜Ý¸ýÝùKÞ¿òÍw×·nw.pé»M&QÉÐjö—ËwÅexÕ%"Ñ—ÕUÄ~‹ß«Ã\71 }Ç6ô†»æ[)ær«QBü,ó7Œ(ß( ãØþÁ*%>-ɳb;D“ –(fó°¹#¬PÕ^—ò8¦6õÓ8ØÆùLáÖ‚»>â\’.µ ¸_mÎè›%Pœ“[wÂç,èHÚß®þ~?91ÂJÜkB³¦•¸e¯*€6¦¶±î;î;ÈðÕÊÓƒ –9;Å\ÌÇDL1õF.7Óúl+ZŸý9Ý?ÑFpóß²ÐøWXA¿rÃçúݫݦ–Hàb B­ñW»ºË}Y]ÕýÆŸÃ[pü‹Ï‹ž» ÞwÔ7p¨òÏĈ3éi—Cîp-Бչ/3PåÀÜþ=¦õè±QT-HÅÂ{Äyk-;ÈÂ9µôxlŒ¶µVud5ïÐhþ¦Ð« ôàX5PH¤fŸéR!A,ì ¦ûÕ ùâP‹áôN|ÐVC§bΨö)N§–z7¤*bÖ'xÅíH e4ô6tÐö„Õ¶Cûè¥êø³ønŽg%©œc'dä—uW}®Õi‹-\¶&[^æ’w€„\ 9íÌ3€D¡,¡ñ¶VD7ø™Í~åôå?ØV?÷u°õÔO˜v<9ýgÚº[Í΃ûìÈ ˆÿ1_`Æ6$ì÷Ì{¸“ã9Â(ÔE¦¾\—]ž•ž›^œ• ¾Ñ¦éè`ó3¡¸ìØ’Ô,5I-lÇ“‚ßHðM‰ ¹Hª8rmâJH’³Ó‹²r  „!®F™¿dþr¤ùŒÏRדÈÑKøW­:34 ‘½£’»%„ªs*Ô-¡ù„«ƒ£"¥î {Nñ× ëãú»Ï²tÜ„ˆ—;ÑS¶¸ÌÏdÚdÁá{}Ã’«eXªE lÄÇc‰‚G‚‡žôééó–_s9yâÈ>Pòt¾Äò`ä.îf¡!Çt&ß mh”j•Ä`„š^wkÕGVïÛU¹*Ý<™DÔir‰Kj‚ai¯K‘°ýLàþä¨ìs?<ñh5߇©r¾.§Ÿ¨=»Ž“Ø%KrÑ{4ŽÌ–™‡ 1 Ê ²‰ 2P¨ù?¹ÍZ endstream endobj 128 0 obj <> stream xÚVkTSWÚ>1À9*B%žŠéI:*õЍÓqh­ËKUÄ*ê$b@ @!Ü“¼ @H¸%@ @ä.*ŽUGœjù>´Ž­3ÕªÕ¶S[ö±ÇsbÛYó£_|k¯µ×:ëìýîç}ž÷}öæ`‡ÃñŽˆüpç®oØìþ~ë Sò£õyž'ý;Œþ=‡~} MqéÙ¯c'`&;c?øºç¿¿âžç³ÓŒÓ~˜‡C(TÅAA+ƒ‚Vl¥dÈ$ñ Á‚¸…‚åÁÁ«–V Ö%‰ä qÂdÁ6¡"^”$T°RA„,.A¤È,X¯P¤¼½l™R© &¥Êä’5 —” ŠxA¸(M$?,:(Ø$KV¶ “D7ä@÷´A–”’®ÉÛdEòdéôåØ[!X&Äâ¦H¦$O‘O9Œ©8懽ŠÍÆü±9ØkØBìØzì=l#¶ Á¶`¡X¶û€Ýõ!¶ÛEbQØœ)ó`>áäq>Ÿ"ãzp«=Â<y†xŽy-Ã1<Ÿ ¢ˆ¡©k§¶LÛ5­zúÔé—½wÓú88éN')'¸hô9´ë rjÛÖe BŠ×ÃGp®‰xaÆÅšœ@*QêÕQòtu݇ïyÎDUt¾b!¦<º>·T : r 7ó'ˆ4ß~÷ËÓv¿ž(éaèÞ ôúŒ„UŽ6Ÿµt ^ ô7Jq–*%µNépÔ×µ^ˆ bHæ †Ç¤ñy?26äòq¿yˆüoÙWŒ'Å{±ñ²0½ÂÜ"ÃáPN‹ªWwjˆ1'¾¢j`Ú¶Õ‹ ö²#J%–†ï/HÂÊJ_þ”3ê|ôKgÓ“dE%ÀJ0/Æ4&M=!ó:Ĉ<^ÇË/˜ªÊŒ·ÁÌæ-öZÌÌf^e6ç0« |ŽbúúጉĽـˆ‘›/£;žû²ùžK@ŽÔs¼ ´–Ž"“êÍÐIüõãS×&.ïÜHÁưè8aÏ"‡lŸ ÁâÑÒóËÿ¼v"³Ä–\«2_¼/V wl‡`âïC†ˆ§GOÖ ÈkÔåÉu9eÄüXù½Ûxd(¶ÏYýÎÞÕ\ù.7‡.}ÜñœÎ/?³Óo¸%}ˆ’ð&i_tLÇ à §°çXê â˜W¹öT9œ&š2,2™*#iËHì}D²ÃÉ(ÞÈÆx_[ÎàóYx_.F¬“ŸÀ鑺‚!ß#³X¦/«N²¼°cÈz²uø”©®Có¦c¹fñ±íK¬?4w)åó¼œè²¹ØÜGWîséN'™+è¨W§¡r‚jtzÅh" ::b¼çIñ ƒZÌÑ€‹µê5”BêÕ[rúú.@/Û |¶²“Ìè cþ­tþÑ}è±tçó gô*ºs•‹”ôŸÈw,©Wá 1vîêg"áìbs@‰J_T„ʬ|´·@yU:]ANvÆqÓ¡Ý™–ÝCK`¦® šÏ‡wû÷–õî¯+BÓewTÚ zK ;ˆÍQkƒ¨5ÀðÛòQ°®ŒÙ@…|%ŸÙ‰+!¿Š*½¾¬ÊT—›}âìå°Û¹ƒlýùÜùf’£‡Ï¤µÆž© ­vë«¶+Û‘ÄÞò¨UøÖÞ‡èñ›Þ^5z|“,¶Hz€°_©þ”Aö!®†H‰j(´‡QpÅt‰Oì­ŽbÕFáV©5³©¹ÞÒÔ³¿TÇon¨hbxT´’ç5a;µk‹B7ħï†8"øIÊÅžqNž7;ˆ¼¿‘‹Ö&íß·ß5DÁµÑÑR#‹lŸÚ:´88®{h?Ûiý:y¸Xy’‰T‹²©ÉZë¼¼ñäJfÖb3“!Ÿ-DÓ¿ ͨ¨Rƒ†Rh 3›"R÷±5ø,Z€‚>í¿Ä7Á9m§œ ?¦¶uÒ¯Ú‘¸Û=Á~ƒw‚žƒ¼IÈÍ‘ÃÒ˜hUëIq¶ÔîÔí_  ú#M§Úºœ#Ð §7‹ª²X«R%‘EƘ‘wYÑ| YÛ™ùMšÎÿz{ê¬oßV-®ôtâ›óÊùô3œY ö”â×+ ¢Øš‰f“Œ·¡5vNË=¤¹Î¥ç¡ ²¡¬ßEè$ À³y#Ìï6ÂÖÝà=DïÓÛIfžÁÕŠÂ(>cý%r¯Áª?SÓ ƒîȡť§ø¼oKè“dkš-Iª''7Ê­6[+õS^žÎ£v¿ŸÒâõ¢í¨Šüÿ¡ „ØMGe,ZÞÄœ™ÿjËÿMÛ ô¢—…ØqK«P‰fÏ}Æø2¼[‹3Ÿ-@¾ˆ÷í·È—b”Ì2„vÅ©ÔnÝôA'ŒÚ»Z‡‡ª;XcèJ´$4 õ{@bø@¾_­º¯Î1f—-±Ó¯:3~“ã¨áoÚ‚¾ ]Ï[º¸ui9ƒ1^›W¾ÍQSZ{¶…½Zë‰ÍM©®C×X›Ž¦|…f#¿…ß0Óø;!2]t€à¸òsWÝ0Æò_ÄÿV–¿ðmÓ]aQâë5•îçÕBµjฆQö0=¡ß&k¡"‡*bŸ<Ù9Zm^^a‘´AjL`mÃÿÐú=|H4§6¦»¤' †ó†sk5 ™Çóí*+à(5R?Ï9§9®3æ¼4ú >3 Ï„¼*ÊÈ}]ý1c¥©´´û@ŸÆî~`õÜãC¯²9½1ᄤl9µt½ F‰¶Æî ìϹ> M//¢zí\V{žýÙÂùa½æà¢[ô<ÒÉÌGïËpݪøy‹4„üL ÎxÜQŒŒµ_½AÊvâë¤Iü³ŽB­¸}Jm¥_sr,´–‹B"5F­ʈ¦¨§œx¬V¡ÛŸ öÊÄû¡ªÅ(€AþƬrMT@¹¡¬ýÝñ··Wµë 'ž¤‰­Lª—¹w´hk@*äê´Åê¹L©?{ÜK!9fº’‹.¢t² ôì0Üz\^ît¹l¹c$kR Y”qîÕZS>kDYyê¢Â­«ýßýº Bk€²9PUYÕè^-Ò¦êb´ápнúo`ÐöíøŽ!ýÓSwmI—G†…k»ß×-%ÍÐÒÖ¦ksW•¼DS Ç¡ÌÕu6gS«½õv€}:«r!¨s³Ótì†nƒMßc…Sî qé¶N1B{Íg´‚eìs. E?…f(Ñä+KX”V©j~Ó õÚª´âî/ß‘¾+ys(Ì‘C¦Ic(×;ÊÁE4©jòŒ¬”˜nñYê¯ÐsÑvm¡ßñ¯lªëºj`sKÔH!û6û´ bPçç0yþ>é ô†Z”\ilðbTáÎiãÓíFoïñïÔ4Uï©èñ¬} ”– endstream endobj 130 0 obj <> stream xÚcd`aa`ddäusñ ôòÔvöõõ´ Øäýîûuügëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–á ˆ|Í"Ÿ €Hu Á(.ÄÀÂÈÈQZÕi``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€®&ós JKR‹|óSR‹ò€Žb´:Ÿ‰‘‘EåGß÷Ýßg`þqPtEÉ’œœ’¢¼¼EE«V-Z²BޝtáçiÓ¦}Ï_Èö;q»‹ù|ÎI<\=<Ü«¸®r/™ÈÃóý¡ËIc endstream endobj 9 0 obj <> stream xÚåš[oÛÈÇß÷SÌÛ&(,Íý²Xˆåj×];µ-eãl6ª­:’Ȱä"ýöýŸR¼h¨P‰\ (‘ÃáœÛoÎ\DÊ3΄bGÏ„ULj&-¾Ž©`™âÌpΔb&h¦sÜ0Í™WžiˆÉ´e‚[Ët`B„ÀŒbBÉ ê•7dBã`%Æ f ìhÍ,ì9gÇ™Óp†œÃ¦=\ h’CØ{&„á¢tÐÉ™TðDÀWÍáŠÀnˆÀ¤¡ f¼cbÖp¤K‘J› í½–L¡i@PH’9 “ã¦FJP˜"…AÈ8;´S ¢,ð@÷Ì †^ƒvJq°¸oa@«ÃEå¼`ÁÃ$”äÀ%³g0p0Å 48 6À¯)nØÔR*Y-=ø¹‚uj¤50râä´A¯P× q×)âE18j> )ßXØ`i9ºZIÈ@åè`!, FP×2+$õ-ºP,]X 7P[ «BR~€úq b ‡úuNAQ˜˜’9’°ˆŠ”S·KvzL —HG'Á†BÁPw#pÇa è½§~F2t†€Û"ARœŠ:“£…D§‹…`ÑÿÐ|LK¤1'8išJ×í¹†?BSÉÀ¯(Ñ=µ¢’GÇüüóp¼ü¼¦0c(] ÇÈüTžTÐéÖ‹ˇåÍd¾~7¼8§ó/ëáé§ÙÝ|”NÇétúþÅ‹jš7 ñ9„"[úªË‚#Ò±D³Àa꣦¹ šÔ_©¸!ˆ,DŸ‡Jge±T^3þÝvžVû.’5€…‡ FoÛ­uR³¦uà˜w«¯]ÿ3]r@'¶åw+Ïe­>‡ñü`š6¬œaŸFMuß©òÿYüpÓ]5•–ù„¢;Ô ´½ÔbèË%"Цâ‰ÌÔ¢)ÍÔŒïkñj¾Z>>ÜÌWÌGMÓßχh€ÃÃüóšöÕT?‚g¸\½st¹%,T‡´hJ ™÷=ÅëÖ7­WhðˆÖ²åóo‹[ˆÄ2ýœÈ–º_ÔRåÅ]‡¸l‰Û¬¸â=ÅÃÞa˘@ô+i‡¤-%}¨$c¤yúÕ¯òݦºz]5ýWâ]ôtKq¼ï+ïöܧyÂïŸ96­K}z†–.ÅNtE¢+M§„ox>¿]ÌŽ—_ÞQ#‹ýŠ ²P8z˜ÏÖˇgl:¿fËÇõý#tr¡\„øIXãžÓîëöñfþðìö_‹ûÛ~úÂþ|†F‚+!þ|þ<)Y,?ŸÌÖóg'?‘<—B°âGÜüÈùÏ“½è{vŒf4[Ï>.ïpû+ü÷|”S;KçþǺŽêãu@ aàé™Ê­='hæ¸Ð#_ïÂûÛ¸Åjgô4Óº(nqz˜Õ{PK!;/¡Æ[ûÉÐÉLtFÛAˆ"ô ;ž…‚U¥Îl¼Œ¥¬Kƒ«1,7º·‡QS[éEÝ›äGßÑRi9à(© þ„Ÿ¾ÃáëuÍ$¬M¿;ø·~yköñðëƒ}÷pî7-ü×;Q‹IA!–»Ž;Ç”ã—Ï 'veN¡YK9‹¶4WÈÊGï–MmÃC5Õ=HÒËXŒ(Œl€\܆Ð~¥<Ç#Ía¤åýf“Jý†“Ǭé‚jÄðÍâvýaßîÆ|‹‡ÕzôaöÀ„žÍ6e9<ž­æQþâúøõ囿ŒÎ¯Ñ†ªNæ«›‡Å=¶¬ñMm|:ذY5ÀÎòþ×ùâîöÛÞ_®nhÇmƒR* \œbû¹¸yùùîãœñád=ÿô;\ ÃñÇÙÝŠI+…áQó1í ðKÿHÆ—Ì*ÐÜô>Þ/>ÎéEkñè5¯fŸæMÿ[޶àL—¯?/n–·sz—µlp™6.QÇ¥+\g—×ãÉ9Ì] ¾MKö§¥ö¢eKX¶ÆIsâ7N¶É©îønL(®E©:[A9ž¾º¼A÷tš£¢zSö’ Š* ÛŸ ÚÓT”Ã}Ûdâ›L~÷ÏÐÈÁÛ¹SǤ*J¯Î®Îþþ+¬MÞæ(éoȾaÄ€Žè×¥.(i^PrõA&; –þä!hŸm Ê×^%¨†ëý²G´g ã+,(o°ŒF翌þ Ýç§¹ ÈzH5ØX“cƒY¯XÒn ,Ñš€þ÷d£{²9»:ýñ&éΤŒ}R6NfÙÈ’öÛlLkÒ©ûß“m± ®6œ„«àü1=Ÿýå£É(GÇ}#tÇâm*µ9Gè’‰sÛL\“IÓíÞ³Nñ®kƒ)ì\±D…éÍë‹ñ åçä,GÉ<‡Â@ÛVÈ¥-Sˆþ3ÖÆU¾/q5Üï—Bå&6ltè`sr=ž¾Fåù¥+zéªÓ±Y:’§ÌŠí¬ü3Q §åO<ª‡WxtÎèbòò‚2u2ɰѼ7dÈ>›ç3˺-æäh¯šXtkJ®;ÞŠÙ¹Ù1•ß.ÆãÑ4nÂ6ñT{§sPнަ?Œú&“Öþ¯îvO$®ï0š¼¾þý’ö–"O¶'ÎÁˆ-¦bµ½tËÖþ¯æwO$¡çÂ=>9»üÛi\ø2HÔÓ®Ûºk¿W¬Qf ŒjMºu÷áç}©ôL endstream endobj 144 0 obj <<2faf58ea412953304462e007b33b84c3>]/Size 145/W[1 3 2]/Filter/FlateDecode/Length 395>> stream xÚ5Ò9OTa…ás†ÍdÑaQ„EA@Ee“ed`e ¥=4VVÐÚcbøbaBhHlh‰†ÿ ääLóääýnrs8; AtË.y]ËrŒ@.  rxÆû†œ øÍ…2"_Ê‘¾ïÓ€,‘ÓrFÎÁF_“&K‰pÂ%]–‘¨K†,'Jÿ¸dÊÛò5[uÏ’Dý‰Ë%%Zk\‚2FôÄ]²e1sÉ‘5rˆÿv¿,k‰©9—+²ŽH¦ÞIHÖK‹.¹²x÷Éåªl$Ö]òä}bcÇ%,›‰?]òe ±µîR [‰Ïa—BÙ&ßÊ%b;éÓk²Øiv)’ò–,–7åY)«å=yW6Éù@>”ˆ¯¡ÿö&}—ÇÄÞ=ÄñÑÅéßM—'Ä¿Ô3>%NSo©—D¹wÉ/cfê«õ“Y⦅‘‘_ÞÏÉŠïÞdt×{ì^ñ"¼G䨗q9)§dRÎÊWr^¾‘‹r™L´ç$´>‰ endstream endobj startxref 87609 %%EOF readline-6.3/doc/readline.pdf0000664000043600000240000063225012276516311015007 0ustar chetstaff%PDF-1.5 %äðíø 7 0 obj <> stream xÚUQËnÂ0¼÷+öhK`üJ_AP U•(¡=T=¸Q#A"œPÊß×€RÅŠ<ÖÎÎ윀õÅý¡ðu„y ³NIži(÷À ˜²¬ œAY½£Ççž %Ñ‹5Õ¡nl@zª?qWüQ®aY ÑE—DÏ#ý2£wt€-l’F‰¦QŽsI”ðU#*’˪îë¶ñBB œˆIºí[åf+1⫝̸pég Ä‘E_?¶ø_S âm&Î+.²® ’È™*¢•7ƉÎbéÚ4˜+tM})Gœ29´—À$2í§ÂOö ´"REîâÛöÃÍÑ^±æh’ðÂtÃNß°öVºÞºæ¶òκ,(²éa×Բ跗4]XrF´ŒJsW›¿ 2-öN'£g‡vÛv»\ÂÏ8{¯¨=7•‰)ÜfDk1$œ{½BßPJxóð^D–ï endstream endobj 12 0 obj <> stream xÚeTKoÔ0¾ó+,NŽÔ¤±§8ÑBB<–C6ñ6Ù¤8Þ–žC·ZíJçñÍÌ7f¿™`)ü+%üSÖíÙUÃ.o$iR§5kvLT,Îe‚5ýÞ f‰b•W|ßN‘,ù¡éÜ륳fŲâÚÛÔÜ š.ß}üFš/ºíG3i:}0[ÛÚ#6üj»˜y"·"Q 9/Hq‹I HJN%—©È6‘7*xKFcˆú³¹…êb¡‘{ðƒé0ÅÅ™¬ykzÀ™©”›‰¾/ Ý<-fqzꎤ˜wô=,Ú¢$ÐB9mwm§CÀÎÎKÙh‡v!Þ½ïl»w„£XqÀ%†z0ýçzá¡wóÞCJñÐ@žHþ»‰PÞíz¾Gƒ£5wCƒqÞ$ÏY²DI íu—7ùÉÔc•¤ŠÅ«É&y°zÆ,ÉsHˆ&¢®ª¿8 vUŠ[`~wq<"†Öz­DÉçÃÔ·&~AÊ÷SGuÀD“º¦b2ŸâÑcobˆ”Ѐ¿‡î†VôtáfºèB¤YŽ£qÀÔM ¯—³%y?{÷fw$…Ö=]u‡½¦T”ðk»ÚêsÒÁppî²,=‰dYÍPðk7¾¾]xzƒ™Ê5SÁoê X™NO‹ÆRªšG¿ucÐU$*ä²”‚Úr$åØ:ô§»vƶûÃv4Ë€½Ìê”oC”iE@x‚œšpq2aÔ>Ÿð«(΋Š?7PˆiƯ€™{þGy®#S)®îÐuzså=ÎLT›É+¾¦]–ªDÁ4ÐQ2å´Gpù•(ùUë×ñ—w®Îœ¥wNpw+þš\þÓÊá`QKï#M‰ný‹ J3u㡇¦ž•€ïî ùƒ°PÙt$0nÔ=-ÉfC*-š\MsN9Ú>… ÌyIëõ¶aŸ_ü\– endstream endobj 17 0 obj <> stream xÚí[ÙrÛ6}ïWð‘zŠ}é›í‰»$ñ´ÒN§ÓD¢mN)R¥¨&þûHm %§v¢ÅcϦiÐ:çâÞsFÿD(‚æ E›o§Ñå(úöGU4º(å@‰ X4šü§ƒ¿F?™›x„ÀˆÙ›†K{×* q}Ûh H¬?dÉ`H‹[{dñU‘ЫĿ~1! åv1h–AÒz4"„©ù»éTç·È›4OÜÙ«IZ¥ù_E¬¬‚±ÿ ¬Wùά¹;ˆÐO_÷¢ýiÄ$@ÈäoX¥fHˆáFEf@=\À!ŒÌXÄUY †æ8YŒ«Ô@oþ„ÄUa´Ñ\Y‡Q®<q 0 ÀxHø=óÅmä‘€ð5j Ž pdÈ 1OödüšèIÖ¢í©IJíH  Ž À¤ÛxÅ¡[ôW¼¸Í6ûƒÈ ¶0œo°e7Rj._ê²Ù&óyâ¸Ku6ñÆ0€üLwKh›`À÷Á‡p[X¨ÿ`'S‹»Œ+ǃA$êHÜþgø" þÓá>DIÑ×i–Y7¿DD§â¾È2ƒ"ÛYBö¢¼[L½o"J°]ã¬Ãè¾L( Xc|¤ æ˜x—èr<À<¾÷¶ãÛ¢Ü0òš¥´@÷Þ¡ÿΫ¢|†ÍÙaé`!\JDÒ­CH‡I+ÌujtzÀjB¾Xí³ˆ,€l$Ý6sÞP% wÄqWŸ½{Èí6¨ô§ 41‘?·A&á&„vÃÞî˜F“˜„Õ&GE®³MäͯæUi2« Ç7Ïáø÷N(xBÀZÝ(=¤ÞÕË’wz:Ë–òB&v>2:13þ?¡hák¹!Ô²²Fõ1â2Í'¾nc8Y÷:;4£8…r,4ÒÑÎ=@¾.M®’Äjñ™OGE†rÀè ‹óÇÅÑ:ÇäûàŽwã®ót¶ÈtÕ&I£=”"€ª/¯·¡F­¡} ;‘¸º×ùÝ…Äqò© æÛd ÿ YaËM†x–>\I­M6Xª pXàtþwÇN69ÛjÑN¤ñ”-¢‡& œ †¶T4NoZ˽1Yy™Ž÷LÒÍ#ñÞe#*QÛ%ðHÊ$¹CòMRU­-¯§Œ# Þìî)øK×ÖÆßÀÎà‹E¸’ž £ +€>p…wÉÇÚP ]Nš°3.‹ Ab£©ð‘cöe³;%m3ÕC‡ô^£˜6åæt>N²LçI±˜ïQg–âê=¶Ù¸nÇ -ài –’þMÛš}Ýnìª&1v¦ÂõÙ²;¼l±`è" UÀÜ;ÄõÁ•·mOÅ?—Å]©§Sçë‹?¦Õ½;ûþæ½;iiÞî°c^Ÿ–Ïí è²q° n‡ðj·mðK=wáŸÄ—ɽvy•‰VÛæ©òÅ×>uá$`²„,Ö ¸Üvϯ&÷š®¨E^7ÎçÅ"%^h|âZõJpÀ¤#ªâ®úšhœ$·a©ƒ%OOÏ@êp ÚmD{Hñ…ßíÖ)Óªí’iGÏMòq{o;¾sÓ˜ÜhL¶ üŠÿâùp×í·º&P¦¶Æö`Æ=ªC…ùøfLXoë64H–WtC(Æuåi’·wvÆ! ­9ÝÍê‘eý‘ÀN‡ÔVÀoô´-3èý\æ@žEñSt.p3D‘%ãj“Ž×ÉÃTÏ‚¥Kxüeß'õq¡ ¦\Ö{9ðõxÛyk0Ðý „'3ßvÑAÜ8‚z(òeþ‹ù¼¨«wãt¥K´æµêð`\[âû*ºixzç=¤¯!­‚=¤VÛÒˆ¯º_dYa‡N>¶ªò}>):ú&ÀâxFò º¬PMVDh¼I¼&é|–iKI¨Y)MŠFŽßmA]ÎìhØØ:a=Ìù¾À[çW&«Ý«¾¾«9eè%|þTŒ¼É²ïáÇ7 ®îµ}_#)›©¥Ù¢ê¨?ágàå\¦h0äËfe//ÊñâöHi2 7 ‡í‡¾so ð8ÈE@ªóÞ;ï4µé›èKß ƒþ}•fiåBÍ~I±üežø‘€5rŸÈ>R|R½ÕÆô“=}´0vN´„G÷–(«>”q#{M$ÈuÕΰú7únõ8Øú´ÝÕ—×?Ä®t6Ñít™/IðùòEhBåÕ'7[rûðìÇ­Bn_-ç¬<ì¯FÑ/ßüÞSø endstream endobj 20 0 obj <> stream xÚí—MsÓ0†ïü åƒUiõÍ­„†–a˜†r`8Ç-;äcÈÏgeË™„8C4í$ev7rü¼»«5ùIáøÄ¾9ɧäÕˆ\ Î<÷dtO”’Ì+"ðS“Ñø -Ëäëè-I¥7Œk’zD㦘PIê½§—“e1¯²e‘¤R*zS%`)šî³¼1½ZgÓÙ¤h6»º­K «™ücaÓ—I*ŒÙYìÎò(ŒíMnsÈU»x“ "S‰‘)Ò:2Õ¸çœ~,²ñ¤¬z’Þ–U6iá^gUð<ô¡T¶‡ã#xc ÎÔQyXe¬ËzÚŠ0¨CcV/úЃ`Gà?u)þQØU6ú˜¨ð þ‡‰¶ñ\× ú«í1Q P`Ÿ´žÿèÕKyæÎM¯¿…ô„ñLæm6¼¡åÝ!®«¶ 'éªÊƒ¥3?·æ~Š6dÝÖi`¤¹ìÇ~°gó2û6)z±KÃ<<·£‡0ØÐwGèwÓM ýö{=_îQytºqLI£ék8³]žiˆ8?*&• ©ÄF‹Á)4Kˆ»œÍš E5.×øÍê@XHôÍûO­a˜x ó"Œ?VÑ×uóƒ|5-ªDrºÌ"zô½+ó¢ZtèíÖ¥¥fZ¡¤:L´ÏCÑIûBKî˜ìRÁˆXU8ö:ƒ+0éÏ ®òb¶lµ»©ÆÅºG9Á5sz»hìSíbû A:ÆEÚ´9™[ÚøÜÐ×]pÅÓ㸀B€ÿ/Ÿ)öÁ£»Üò&âjD>¼ø $5 endstream endobj 27 0 obj <> stream xÚ¥ÛnÛÈõ½_¡·Ð€Åå^Ú§Äëiìvã¢(Ö d"QcŠTIj½þûžÛCв³(l€£™Ã3ç~ãê¿+µ àO­ÒþƒÕæ°zw·úá}¸RŸùên·RÙJE~®WwÛ_½›½9öE{µŽ¢ÈS½ZÇqìÝ4‡ƒ©·¸{˺àãÛmÙ—õÃÕow_Åaâk W!E[?¼OV*õC¥ñ–µ@¬ãÜÏB[ë$t°§Úb‡•‹}Jp°Z‡©%øn_vLÎæ*L½‘üÐÛݦ-¿^­ÃÌ+¨ßÌÆWÓ•ÞÛ¦?µ¢Ù1Bòݹswf~– Ÿõi¼0ö%›Qr‘W ’+„7º¨¬‘p zg6…/㕊ý(NHt¡ý,'®³˜Eç‹ð>ÔWQàõm¸o{ÚôeS³ûæO‰T徊D¤B殩ª‰{bCïhZóКã¾câG§^1 Ž^¯›Þ9ðëÔbADì´Å¤^0û¼õˆë⹆`‰jc€0òhL|¥s”Û½0¤‡£Ø±Ç›õã’ž”¯C lma¶¼2´“y_n&°mªõ?Þàfâ±Ját¾¼Ñ[ÒÄ [³a“„­#* øErÑÓ¾¨…•Áâ"‡Ì(Žü0:—ø Ï SNä+-`$FV™õö ƒ§}Y—ˆ<â4!NùÍ4¨qAô¢ftpY3Ú×Ö?>]ÐŒ«–8·j¤¤x~ùTô†õ»¤ì%Û€ÀÁàðÇ3ÿ0U‡± Ͻ!›á+›¦¾Tü–û†OFÎCɸkøÁœ#øàGÕ´|<¹Y\jù¾L0ƒè›ƒÀ4dRÈlà²yhˆðm‰Šöšãuwâ¸ÇQÜH76äŽt{Ó“ Ì릕”Mä‡2Àl6' N(á4¸^ÊÚvèÍÈ8úô $ÞÉN2,øãe2ÄKÜ1ü¡lÓ.EŸ. _35³,ò®Q+o«YÀtÓ¨>8±*'9hç8h6$z¡½ v6B㊢ܘŠMV¥jæýg…HY)ocÐwU8Ú þ`eUÐÛ¾@!· °,‹¤ÛÏ76[«©Ä´èhWm×/ÈUeÓ íNiI`Šê !Ú±¢sb2í§Ù Ž#9Æ¥Þ­ ­€Ú&ò d5Þ)åùXs +Ñ„âÇ“b t(|O8ŠüÈò}µîž—+g­üÌŠp96ƒlÒüÅL%³LMQ’ÈM3.8¦åUG—Ë«tÔé§õréE(ƒ±ÆÂxÌ5b6?¹ÆrªÂõã†%Ý"ȼþ%Â,…|o¬·ðEVSjë-„úÊ9Aë\ûùÄ+折0Žšˆ_¬ø¡Uù`C$_ ÍZÎòå¦ôã`¾[l–š¬9+êŠßI7 ñ<¶Þñ¯iÈÂBÙr·`íðÖæ€MÍ:‰”÷™co±¡ˆ½¡,Káh!/æ™X3ùñöãî²Áj„±Ý}ýO"°Áóãû_‘ï+>ÿ|óÿ±ðËíÝw!€î(óó©Ã׋åžò­Kܽ}·Ü/F–|P–é™×õ2ºÈ$Y¦TWº¢bƒéxOº |£°«²¶ð«Òœ|Ãg–{AE5¼Tö¼B›¡׈–—Ÿ‹a{@²H!¡„#„_—‰¢-¬ÞCcøÔ̓œÇ÷WR·} Ò5±-N;©¬Çbœ_« G©¸Í’Üuêg/Û–|Ñyˆ¼fB^LqZûɾ½‚û©$µÝn_8«Ô#ÙÄž –m±L¡8èùª* ¨ÀNs´+qzýkkÚg>z(ÇPw Å=þ0 Âm£–ÆÈ`TîÞ5K팩Ëã©22)EOç†U†~´Å §«Žð\ð(¾¬¯¥SŽ6Ç€&(~ïÛ©“7QºL.kÏok,vJ pHM ¾,nlˆš°9^ˆÖxÍyl¿§àýàÞ·¦-{±'8¸Œ”,µò¿:æ“Ñt‚hœCÙ ªßc—® [Kw„5¯ÚnI}vüÌ€iâ+h¤‰5dXÕEAF¢I´-ç.JvÊ '[f½¼ÊyÙmoÑI »@°ÝäÈÅŽÕ—NiQ_ŸÓÍ™:L!^Ц-x·ƒì¨ÃÞòÏ›pÅ-^“à©íÓS$]y8¢ƒ#0 àó!¤êï¯rP¿Yÿs•…Ã5ÔQ§‘tÔ°˜N ‰Tg@¶é'|D^!•üüéÌŽV»°ØÈä+ÑÌ!Â?C[°³ØÒ†ôÎ-ýŽ{yF™ÐlâÈÍ0ì¶Å$˜ŠÛÂDÏ ‡PÆÉÆ~ªH’sæ_cÚÖƒý—õl–ή']J„93È•ýxùYbó™ý3ÍhïÈÜè›M‡_H0½•¦ê.¤¶ÔO¢±{Ñ!~êŒaɉ$²‚³ÛÓy î)Ê|úà—äŠÐZ3f#kÀ„xžôˆýzW`'Ês°-ÃÍ'ñp›9Jò1m·è”­¤ž!…‰RhMÙÎPèJ”†­_x £šíÚ$56ÃÙñ«¶p¤ã‘’¤”ÄÚÍ œOÏ$”H<ám"Œk®ïFLXRšñ/œ„_[cæ‚¢ákÛWC‡‚êÈÏáãäcÝ/xs–kÜÅQßg¨öúòÀ_U3—¡Ô­^Ó%9EÏ'³Ùä–dÊ‚k¤Èæ¥[õ–§—™wb».+>™Ð2û8¥¶Ÿ âTjèµeoœÎOæJËL–éÙ(pÆž©†Á@kT.E*±3¾tæ` 0LJöæër‘Ø¡Y‚JÆdÎÒV6Ð!MÖ;”Ô"*µ‡ }& ‚ÕÐBã@¿NN‡íb®’r—L•n¸£ñy ôŠòö EýÀ¹„Ö ây1â†ÝþÁðkv¦ÿˆòö‚T£<{¤›õîÕÌm!tV©;Hú÷¾XjÌvË¡Tj§UâË¡Ün«Y“`ÆîázøÆ˜ h¥uˆå†á<ÜÛ#]ˆkŒžhQV¢°ÍEs„›_ާnϳhí9ªjßÈÛ ?†û@žKÃÝøpgÑw‰¼h‹]Èm5Ô¼ÈÁc®©—AüX²Å=•èx ?ö ‹•#0 ñ8‡Ä¿•£½À°Lpl©é´c„Èÿä Ç.ñ¥¼€‘×$e\€”+ÛâßÞ­þù—ÿ“|3B endstream endobj 30 0 obj <> stream xÚ­Y[sãÄ~çWø-rU,¤Ñž ìË­8T¨S§ÅŽ­q,,KF— ù÷§o#ɶ¼@%fFÝ=}ùº{²øcá/<øñ‰‚_o±9,¾¼_|úV-|Ïͼlq¿]øéÂÜ,ZÜç¿8w;}ìL³\AàøŸ-Wa:wõá «'C绢2¼ü&/º¢z\þzÿÍ"T±EÀ ‰(šZÉÜ*ÌÜTÑÂZo–*qö7Ë• S§«ñ™9ž–%‹JÖv†'Ö¥®öŸ}טC½T±óaÅŽ.yµÞòâ°«3v.œÒ/x¦,ÚŽG›×º‘‘i[S!×®ÐeKÇõ+P£ÏjÜÖ¢B#:¢"DàÊÚD8£+~Õ±—¥rPô¶.˹=µ.ñúô­ïM,ˆ¬S7d®Ö²ejã(qc1Î÷DéÃR¥‘Wl•ØÙó[m¹’©vºÑpˆY¾+";å½ýXÞ ¨'d®›üöÁ#»ºGS*°n]!¾?öºÅYÖÂL(¦±dWÄb¹^*ûö(¾yfnkŠÁiMÇ:4÷“½$ø-¦C©‚¹ÍF”¦nšNeüÄõ­n9`À v2î8ï…ÿ6~>,­Ø†­—ù,6‰³‚è„Êä»ÊUi±r~2:|I"ÌT™ ÐÇ Õ¾ƒ,“¡jgN뇘cäžDòªØ'mêKÈ;=@5½.iˆ~ÙnšB|·å9> 5áPZë¶Øð¤xBÛ55[!º#dô†(äéÊ`­„ÓX_á³nrÒ¯'ÑRÔÌf„#4| ‚5þP­€ú,Vhíí2  ØòŒÒ1À€ÁXT…©6Ý"NÐ) L˜å9µøÞX}ÓÛNŸT@R´f*Þ óœŽJÒ SBÏÌAêp>Mœ_ÿ¥[Ï€¨Ž ÛLášÐÊ"›KŒQ™ë¿Š0SJhÂ,t¾6Xé`GÍÓú S‹¤”º0r›=²Ö¡¶4},òòYJ8ã¤Áˆ±>´ á|þyµÞÕ[s2žL0§í´-JP&k/ qQÝ­Ì?–Äp—õ7å`.ÿB®™'•‚ÜO;ö ,¿† 1nொV0¸>ÙÆ­9;$(ª ¥ç‘Õ¼x,ºöÊÓýíöæ çfŽH'¸ÖÄåëÜïJ£›³”ÐètË hÌñ¢nž&¯Æ v¼r^ïNü¡«®m³Ýxª¢ê® 69ñœ·s‡ƒ*Ê^Å(¨ˆ}[y&jó©8¯IX¥8¡™çI¿EGðÁuŠr¶’ðAyá`»Å>R xŒ– )ç]ÇÒ¡“âSv•µõT)ôâÔU'(tš²ð/娛maNvA:.yiì‡-iÉCÃ@døS&–ž·O´›õFËÓiæ~K:eÒÉ鋜gƒzŒ·i‰äqu” ÕQ0W}[”%»/¼œDþLE9ûÕ¥‰ƒØUÖÄ|7¢2N¬+´VÆ@‰S¶ÄÅ1_ËàâðŶ©2·“](4Æžç9ë^¶Yj­æ "Æ •wtü¹æ°AÀÀ?ÏBSÕTœâ°o-ù¾í¡ã>jÅ'š¨}=6Yg:òC7 åðÏIJÚÏ« ›«¦€’UAí4l†z¤‰Dþh¸h“Ù¡›VYhUÛ’-„ÚöÁy×w7> stream xÚÛnÜÆõ½_±o¦“á ‡·¼¹®$Q4MŒvGZB»ä†äÚÑß÷܆R´eÀ¹žûmÎîþÜ©] jWjøOwûóîï·»ïÞëJ“:­w·÷;UíT–ÔùîöðŸèíÑ^F×ßÄY–Eêû›Ø½íÎgÛpÑD?7­ãíw‡flÚ‡›ÿÞþ´3ºHòP!Œ–¾{¯ÒM,GbS'•fdñ£œ éÉˤ@ÿlN'Æ5éèþ™û¾;¯6÷×¾wí.£qZ:áærë*ê ºkåbÇ &Ž¹Ì¢î~µs¶“M¾ˆÞXÕ‰a®>ćoáJW•° «šñàÀSL‹Ýb³bòpÉ[_›9Ç£ŸqÜõ‡×0­qDƒ*jîyÿޤáFÄ÷*Re¾À'¶UmÐQjVv&þñîço3â|²ØÜó•,£íG²X§½bmâ&T4]èeÐÈÍmE‡7¹ÁÞo+Zh2ZMø%šŒÖÑ¥wŸšî:ðr î2-QÝšÕmt*ÔêÆû¤î¢uÓÞà·HÝ8duãæ—Õ½ ýC|÷©»4IY…Ú~þ&]ƒ‹®+B`0é»Õæ,Cœ}>6£.v1'ÎÁolùï¡ù=U™ Œ¡B§°í¦õ›<)‹Éú·m6–SäØ;ÝÞ^· ˆ^Í_qcO"K4–)óŠ ÿàHñyALá÷ر™Â„ìQX ©,«D•ÂÉž¶íVÑU’y†Ù¬"Å$Dtg÷æq2mq‚:¡Sþ8Çü¸R:ú ­0a¾£½³³­Í÷À5» Ûc¥ˆÎÝ0Æ,¥UbÊPÀ½Û‹OOñ#XG2=å¹É’BÙ?NyñîŠxà @Ø¥ØîÓ×m÷7ŒË(ÌeäEòyÒ:ÓáËÄœ²EF¾Ò­ÀzÂyfLJì+/%\ƒ_àì—n´#.%câi{Ð'F¿ZE\àÀÆdTËó­û,+ݲ£è®¸\E{Ûò~×’xª4:t9-Œ((OPáÈ¥o $<‹¶û¹âÊÐ96ÄP¤Iáý`[·:ÅB‹O’ @˜ÍQáé[ƒd†ÓZ‘6TQ'E¶‹µÁüŠçT¢*tô‹³‡Œe½é®g0¡,ÆaŠ D`“9¢páâàbJ T€ë›=oYŽÖ6ðy&|g2ð¦wÀ¤|ìÎnlÎNàJªðpŒb/d‹® "”2”I#ËŸÞ]8h¢M£Ý•€¡™J+ÀÐóY†Í(_™û$ âV¡>ê*ѵ(dhÚ-½›$÷G(W 8¦rÉU† Ûn„‹¡Û Ø10¢¤Š,úQ€=Q…x嘦µNª*4^ÖQV”(ü´îÁŽÍ'¼…–2XRg(@ø+Uà°ÙpG®ëÏöDNVˆRèNÓ.°Þw=•²–r =4Á°øG/ fü+®‡µ°äsBƒÁR1øø`¨*AU¨@rAï¹æå+î/{¾œšCª¤(}L‡‘DR,Ò-ñýÈ@ùdåƒG9Õ‰0ìîŸs²x»¼æ!7 YÚ›‡ãTIBÊ¡ì%ÖËñø1¯,4AHbS\ùÇ kû-—ùØñJje [K‘C;·DeZG®u½=ñ„ª ‹2E5§ìʸ!Æ¥ÒeÀ#«Þ²ü™u ŠÉi=Y³Käæ¡yhF¹ 5Ø—óL%µÙüdÆøòÉkòŸ,«çmô±žÓkýA8^ñ΂˜¯Á3Ó3gV*aJÁ€¡nªMCœ6>aÄ[ 3)3¯­ßo^O¤¶+¢gDÝšŸ…[st(óD‡¢a2jz⤞C°Ký«ÝËæd´xíhqÆ'ye-+¼Òµr—Uˆ#/)/(49¿p”ã«ðÐÉÉ>¯$ô•>ô-Ã¥U<3#\"ù¨rÃÙ6íªX'ùÁ²ìbe(zx*±¡òõvu0°+ÿ]`kŽ.„ŒV/1OÐF9`À'Ï~»ÙƈåÌVÀ4 ‰–ïJŽ)g"øªE™¥VÉ3¯'¡ÖÄ;›ö¬Ë¤*§0¤8 ¥>moʹÜyõš³<ç–s ÒáÍŠ7wr£’ŽB75p4º6°ðl!ÊU¶‡”áúcëÔqò푦½\ÇÖRX[¥ëª*çªê£³ý«¨#=G²Ò`²ãKzuÏ(Y•¾}ƒšaìú§—Н¹`ÒØ9ëéYö©9`µ‚+û ι¦" ¹'Â41ÜwWH32q|p²œ…¦%,D?aã2|Ç÷¾g¥GÄ>·§ÚÅ¿K†‹|é=A²éݺÇ$ˆgrcâ‚uw¦ÄðýÖƒTëz~[7íœ\ ’ÙF˜­çF)Š` ¢š[Umׯ/-‹¤\Té lèE¢ýqxR¯$lX‘°üд‹9e;ißs¤>LÏKG;ðß6ÃÑä,û2[C¥æ»‚—üNÃ;hÖ\x#М5lgÙ…ŸMePX"ÕK]RÉÔ³ÏT’O«Uâ§@Ÿ.^.pôÐ —%ž§a¡ò}NêÎ’hû'žúPpöxß‚Ïv ý¦ðR.²‰b]˜g™Žö;þÞÛ>áþØ›–O7Ïp‚‡yïþ¼B±:0~»âe++gÛJSOóÍ9´ášžóÓ:w Tù”‚È6‹Œ˜£SvYå±IšÜ(Ñ•Ñ-=¸qß,ÁùF!®$ª|Μ 5aÛòü©¾Ù_O¶ßj€úfÎW9j#•æU’ͯóþÅ—5½ogoÙÊÎy’© ä°ýà÷8—~i-Ï¡RD£õ™3íó ¼|@Ð —<·~ëY^ãÖï°(ø”QI¾è!6T>‰P»å`_§+Ms) Ê ( Ó|cü’àJ\c@ů:·¤ Â®àíö½; vn6Ã@ÚȪ”r(¸þdËÛ[á7Öi•Ta`–8Ö¯¥’ײžÞ×Ùš#m'g¤ãŠNáµå6Š3>Ìp@€ÔQ¨¿ 9¢óöîãÛ-ƒÑIªžç¢tyÄLF÷Ó 0Ö‚FM§¤B%õâ™È»ÈYÞEþlS©½MH‡¥mM¿lÅ×(XœsÍ §ÁFÊŽ8ñºˆUM(v»Êû–^¸`UÒ\Æúý×u_.ó–â9ð";øŸoTa`+©ˆž  PËGÉÕ”"Ÿ@ÿ[@wöýý/ý’Ögíù½ïc80>¥3ÒÃá2âŠçG~Z¨9®û¾Vf6³«'˜ |Œ~9RC’Ã_y¾ª±‘Z¿ÔH5æ¥Ø<Á Ÿ0±wÊúñ`$K롟yØY²lUî|–Ÿ‹…ÆpîÛDsêÃUþ¹\~ÜàÊ®ðÅXà||µÍŽ³Â«ª¥Êç;k¿dT³z y»ªhðËM·ßPý?¬(=õOáÄ#µe}€JÆIÏÀ?4ò| –?AGX™ð k¦'`¶Ìfríw·»ÿí²·«ê endstream endobj 36 0 obj <> stream xÚYYÛÈ~ϯK£6Ù¼öÍ؈ƒ`“¬µ ‚¡ZRÃ<’šåaûVuUó(daÃê£X]]çWíÕWråùJøë¯Šjõq»zü¬¤/2?[m÷+™®d(²hµÝýì=óS¯Ûõ& CO~¿Þ(¥¼§¦ªòz‡‹Êû«©5mÚ™ÞÔ‡õ/Û¿¬T‹(‚£‰²K^Û¨L¤ÝètÞë ñŽëM¤že$™§ßuqî5MúcÞÓ¨ ƒˆ}^§×´ô©©»>¯ ýÓÌ÷r{äãçpr±@Á0a™~ü´e’éÝ_!S¼™²$Þ €ÊÔ¹•'õAì®øyQèSO·b)‚ÕT*I¥öó0^ š{À¡ÂµV¿ « í‘P›0 ÆoŠAõ°ºo›êjÿhº¾i/´ZÂu¥¤÷¶«ÏxÅt¥ëu—ÃÎØ^¥÷g‚j@sÓ™0Õð@ UþÍž€3'xJ™w=”ƒÏ웳s¤_qn[”-±²…Á ( b· ½´…§¦¦¹&çVl©D¦@ôH¨„¬­ó >ÓÂÝ+äL@ζ£u’,)ŒL]´¤)&/qQÎìnç}kÞDày_öÌ ÞPà ;šô'žúJD1»ÚÓ¦]pF™ˆE¢` óVO¸_N$ÿŽÖÞLlÎìva‹8š/¯eÜËÞH·¯(¡®­§)üÀÞ+oó¢'½ñN?ûR49þH¯Öo4ŸéèI`1%“ñX¤¼Ñ<Ê~Ÿí™îÖÏÞݱõM½¹1[$ƒÉº£•ÜGìÌ8àoL«¯?â9 †´|‰}ÓòÇ‚Ú~Øî^½bôd#'úp«*ï‰îÇc<«8µqЛ¥*ñ¶(0.N¹«85ã*wº14ÿ‰Ébë?ÈéeBÜ™ÝÒvÓÞðI½\˜–›=­à—7æ*ö7J9Å5~òÿ#_ph(4u¨b ó*Æ2—"ÅÆÁ4Ê“ÈûR›žFŸM©â %Ì„¤Rô¡Äà9 ]ŠÇÁÈg¥yiskÔfLô#bäÑ(§ŸN÷4°ZßOU^t›Ò|C½#7¨”$//¦ÞÅ:Z´u¬,­Mà;¶ÉBwzŸŸË«]zÆÖG‰‘¿Gy¡é:óRjZBgD°' rúÙˆíPjÇE+>P|ü½ÕàÐûàB›·4* äipç­ÌÿøÄSÛÚ¼Zˆfªð*I<•&3Å'£kÉéÜSŒá—­ŽfX à”;+î]ù75°¸¹õ pÁ´Wb鉠F[Ž=N˜ÖMSƒ­X.:ƒ—¥9‚ƒ0HDtcòÙ$˜ÂF6˜Õ)S é J¼:¯ì(&ýGŽÖ´°B"Ñ*­a†#û Ú£ˆa}Æ”¯kXÏËóŒm<î“õ_MÛÔ#,@ ú°5ùËBSH¦©H]úòÃßÚþø´¬S•p`0E06q[8CŸ! åüp»g:ú=×à¢DÅÙCº˜  ¹¸2U"uøî×Gqß "0X2H *dùä Ÿ?ØÂÞP1èhZ7,‡~7“7--A|ð¶?$Sr9U Ö§‡+´74ÕÂ&wVwî&"t@ãQ÷Åãý[Ç©H¹d&QšI}ý×- "L!^9®iííh†:{Ïm0D¦Y†”Š[¶~2ýùd±q<~h(¡ÃhP<®vÄÈé*H$ò™Ë•–U™1£J c:ÁÅî@Œ/i Ñ¢Î¦Æsý`8nnˆýpÀyïtâ2àSÐ)H&ðx…p· ^Ã=‹\2€óI#82É·;DEÓrEhsJÈffxþú ;ÖX Ý&iÔЉ›3]¥2P4ÑL4=æÜa¤žvÝÀÎu ýšÞÕtb¯égÒõ@D‰+êBþ޲nG_/õ3Gþ~§Ì'"-Û-6ZÏÙYE—µMáUoøÙ[` ƒ—¼o¶CÈþ€¬Îº§%-˯m¾­Ö*£9øÍàÌÈ\8"sAbIÀ@˼þFëáñíŽ2‡ÀæÎ~ØÖ»£“Çvˆa:¬1*á{Á–ÒCœˆÈåæ?.eB‘¼ýÝ•âÐG7tV$9ˆù"EPB&÷E üD(—±þô»DÂ.0)Rï“ÆBeWø“"{©+sBü@´k~… ”4A7 høóÓœ‰sEÜ{Øý‚mO I1?0?)Ÿ×ÚýÄûöù·Ve«S>‡ÒÀáåOMË6#ú¸Då:çÅd&†s‘döœ"ؘ1üê"-Ô¼x*Ö¿‘ëŸu8¨ëj;³¿Ð9; Ús½Ú¤é‘ˆÍù`„±Ýƒ"ÌēȰČï€"/¡ód'¸«Ât´Œn9 ¨¤˜ agÓ$Mʹ£§•I¿rQ0æb„à oEø®s•¬‘!ú8šríŠSW»@!ô#ðÛ­Ûï.Ü«¾súM ýÊ)b4lõÎT§R¿7€Å¦Uj{öò96s7{¼î«Eˆ·7…®U$rÊúÏEm±‰l7 %ßìr”Ì.Ç„M³@0eI˜$Ô„éXmˆˆk–1"µo lpÿº{B^4¾Ð„žy4‹ï‹xP¤뿚¥'˜h®ã£¿5qÏÊÈ’E6‘êÚ$VÕÌbS5;«ühùü͵M¯B&Ø,Ø×!÷8–*Î+h Q™¦—#X>^;‡Þš ”—»-hIšC ý³qJ¼yÈÛÝBïÆE½È;-(TªgœBuƒäƒAl|ÓkY¯Cus‡ ×þHèº)5õ–Ñu¨ æp—Ú[5<G®\F¢ ·¸ŠãÈk˜Š”•×`_ E-õž×´cåÄ-þ6âoÕð­Ù»ÃõTJ껵ø’eãþlŸšc>~uu¢'š5¨þa©›¬>t(M½ä»J(— ž­y6Ú¦ºÏ£àçõ=\Ó©1T;lìƒIc"Ù¢e÷§×Vw¢íaÊÃ_º{¼Ð:nÒ@ij²ÌáXbÅN‘¢5‚?| í âÞNû: LèUiZŽ&ïÅ OMÃÿ¥á²ê˜‘F%°2{ Ú7ö%°çâæˆb! ÌJð‹.ËM×_¤® 𿚵Méšø¡qöéDWªížÄ¯ioúv B¥WXzxCRT/þr™uOßv ù7 njAŸ:E–%øJ õ Ûb\§'/Xæþ2´Ë±­›zI Óòô‚)ˆ‚É…€q­É}Q¨jùñÌçr‹$ìX$dâ/ ‰GÚ®þñ‡ßÐ& endstream endobj 39 0 obj <> stream xÚ¥XYÜ6~ß_ÑH¬"Z$uî>%Fda Ød€<Ä ¯,±» ëh‹êÏþúT±H 5-{zÌ"‹E²Ž¯öîÓŽïøã»BÀ²kúÝ·»×?‰OX•T»ÛýŽ—;.Y•ínÛ?¢7Çú4«é&–RFüŸ7qš¦Ñ›±ïë¡Eb½Õƒ¢å[=ëápóßÛïR‘³,ƒ«ðÌ’bÉ9“Ù.N+V »ð?»ðú'\/Y"ݾ;mô‡N9¦PÆ4a0 ®WßÁõyýªê¶#ar28QM˜|¸‰E©®£©ÞÓwô»õ²WäÑÝM–GµîjØÎnâLTÑÏnƒQ3 æ‘tL%ãbƒyvŠõ¹½FE°;çÑ»h>*&Q«öõ¹›ßÝ€ò©äòÈXϳêO³¡Èf÷Lè¢#¸¶×Cݽ2_ U ¡Ø†qV°¸KVUÄ­‡6žç‡ØœT£ë.nŽõd6”s—kОi•“=Óª ™°e>ÀOî¡5§ÎÒ,@G&‹Ð@p|` ¸„.+¬øŽrtŒ \˜§±£•§ UÝ€íœÕrÎx¨Í<©zVe™a íÑ= ­«Â!´n¯ÂÁGÄšš…ÞJ±x‡6µ“¾Ã}6qãHt8@;Ò¢$Š•„"©OgØeQÝ)Ðv›¯y”ÜÙŒÝ8©66s=_ëEQqò"PDünzQ°J<çÅ<ð¢¨ÂÇc[mN]mmi’DdëѸPG¦fìOšõ8"œQ 8à]Â¥š9™¼™¥L–¡ZÖ | ™D€Ý€“iæ\€ p`Úy²íD!™£€tyk‘ŒöTâkî´IõäϨ?Z§—>ÝOcg'„!8Ÿq )qD‡ï—àIÂ2ï‚·¿½óËÛ_~ýmËÏ)K}*"SÝéiz‡¤ðêI»,™ AºâšËVd_že,YŋͶP@¶`ÂS‘ý~ $ƒzå@²‰è²dE@º±çøƒ:èá H[òRFf¦ô™—©~õ`Ô4Ó¸vß™6¤¾ÄÀ5òý±b",ãèþÖ\/õXyž.Ž2j”Kl²¨ìªµ\L­>«æ 9ŠQE·jb5÷ž²LàÒÔ¡IJ{/åIÉ|1ûæÛožqѦ‡dž³*,#!Sˆ?Ä÷º_õWþè¯êµ…é¹G€º6Ñú ÍŠÈ4“B“# bñÜÛЃ t-l°kg=M3ÈÛ×sƒ ü¨Ìe¤’s%/#— ¦ýˆ©ý€Ä*ÐÝ!+ç`â§Ö{ø= ˜˜Ýdï¾óš©SÆæc½‘>T¢ˆ0 á÷`‹–›Ø0råI¬Šμõpl}Ã(«}O»Â<ß³/Ž?Mj¯?/%.;ú Þ0j”íÆ jñ›X©SÛ…ÃtP‡ÚÜÊU¬SL{U[Ç2,òÅ‚ÌKŒ©ÇŸ °B™6mf¾“ëþ­Ó½}•@âÙ|<ò´d¹o>x’ü•×£’¥"H:þ{5×W7kÂ7kΔðýR³&^Ö¬%«îIø`€‘ûeÑÙÓÞÎ/ª+Ò(‰[َѢ}ÐócÏI}¹`E±=±;y'wvŽ%+½jÓh8 žû ûc 1ÒïRt¬4ª¡Q4[~ßÄ•yÒ§•,ñ=BµÒÁî±Hj{€âë£o¯~¼Ýýçú^‰Ï endstream endobj 42 0 obj <> stream xÚ¥YYoÜ8~ß_Ño«"ŽDQ×>&È;`0ó°Y`5ÛMDG$_ùõ[—.·lw&°aQEŠ,’_}ux÷×.ÜðîR ¿Á®¬wïov?ý¬wa ò ßÝwa¶ #•Ç»›Ã½§â<ØnïGQä…ÿÚûÆïC[×Es@¡ñ~uåî7¸ævÿ¿›_vF'*Ža)œ$!‘…¡Šâor•iê(êùéçh¹¾Q&’/?~ú #–ê@…2 ÜëÔ;]Q‚–ïö¾Î¯l”ÞïuæÙŽTòu’zÃÉÖÒjñ™y¿Öv(üsg?¡y´îûŠsØ'|I¼Þþug›Ò*Ù‰Qq´óá˜B>¦›“œÁÁ‹»jà—û}l¼¢º£>í¹žÅnm:•NeSm³±i8<“È€ª)ü0 T„j¥¨Ž;¸¾øRY¿lëse·9qœªd¹—á– {¸§…Ï-½Íâš{Sm¸ æÞlq¨68탫*n¹æä¾8YõÏ¿íøzóÔÞOâ1¸Ü’g*—ÛX!£GdIJ”Îï <àzùÅ5=à„.žÞö:aˆÀ'ÃI±ÂØ*d6wäwòÄ­Sq˜§ðÙ†_ëâ|fÉ´ –ŠÂJxˆð*ùØz[}Öq〓q˜bã(š5_Ã^­ zÇãÖ%¦ Xá5ìéH« cìg™ üº=Ø+P‡j_ΫµÒZ~cÂT«pÜ^ìCðþC3rÂеUÏ’‡“cˆðë|ZaÌÐÇF{äçD8ô‹k>£.7*Ê—Û©¡×iìÝõö€W£cïý‹d­w ŽÙ°¯Šn?=óÓ5<åǺ(¥Kƒ_jÂ*Lûî]'ÛÑä elÈnz8¯D’t$@‡4R0a?ðÐÞÕ®*:™ å'éAp àÞZ }~è¹W ¿¯š,1Ê ¸¤©áihÙqçVÓ|F¢¥ãØp™J̈Vž¶í^†¿ŽT02Ô½{Ââ×™7ÏU¾b^[žZ Ýç—3 ½mœ5¢(GËálp«0yËoÄ ƉÚFžÂJ]Á`¢U¶îeåS!:æ]Y –1塼¿jk…ü4Q‰0qÂ6HLîuÒ#“À‘ùµŒ‡ž…?Vä¢,¸ël/k2¤¯a¢^|Ù»Û¦¨¸}kÜÚé»¶ä®[¬‚ñÙY-,¼íÛ™P·A&¹Òá9se,!Õ/ÿjŸÎÅáj éXèLÇâÔ๠$­’ëä®4\rW<¹W\¨{Z¯ÈÊó0v© ¯X!¨Ð‰“@®`ÜŸŸFÏØ ‡æ¡‡a‚Î9¨ÂgYTmxŸÚÚ²xB3¾4–||ޏæïBV$“‚Ô+¢ëZTéÇŽ¼©.ñôý Ivòôº¡IU–®¼.ƒ„"Z@ÊÕ01Q"_Ä—f¢t&™Šóïá“èeÀÓKÀ Lp%^q† Ê òØ4 ¦Å5ÆÁa´ä@@&0Ë]MÛÄ)ß§‰ÁÙ®vDøVV…Ch˜8c@¶¢3êaÈaE¦ø”o&Èe:Äà—„õ¨öeœ'‹÷Ȇy&ăÑ!í [s˜áeÏB ¸ET—¡=7"±îöDqOq3v–½N£å ˜¢«•BWˆqp5¼á!Ã\A餳Ç3äþફâCÌJ¢1+‰‰^ÊJ zþ.ŸÀu"45©Ö+á t4 å±íjºÌRØ[CïŒq”ÐÎyè%91*W<6%7èCWÉÍßu9ÁÓ‰†¼vM'@“CÛ=ar éǽõÏ­k†k“H0=æ”ÉÀ²íëÊT”}§dùhÔÙ¨£Øä óët ̢ù*J0Í"Vï8MàñŸ©›o0WÙÊ•wŽŒƒÉîÂÌ,'ëÞéç=Û*ERY:Û}_ÔÒªXëÑâ(~‚…S–‚ æ¸×hÌH/¬º³Cçì=1É™æ‚ê-ªñÔá~ï]{×ûã—wÇ*ŸÖm×m‚q¾Æ>¯ÌN$]¤­‰ òy>AžŽ]#õ¬ò«×j(æñŸZÙü{÷íŽúD`×#ª4zƒGW#!ßÕ(H=B ¼À_ 4á~;ìÈ)ÓÄ/f4ƒP÷Ùóç}!•-¾\arˆc§5—ǾBFpÚ1„`Ħé˜b¤³)¾Ù®EBLsò¿ úß(Mác޹aô Cød¥$ör ƒV#¢”|ŒoÚKÕû€!{öl2“ÊdÐ3m«(È“`$´ ì£m˜L’Œ“lU€ƒ¹*Û÷2îT4Ü7‡b˜ käÆ`)ÉV»K•©4l<Ÿ„)–kG¢þÄÙ1lzàF õÀ€Œè½|7WðMR’x-ØÁ‹Ç/ßõúÅGQÄÌŠl‚{òÕ§¶sß ™-*¿/!£­®¯êкyô¼:’’®R,ã¾ÊÜðU拊@þr²•諽OÚ¾2¡6*z»–ÏLâ'Ú í‹}ÀôîÙ^¨d$×Òc=RiºÌ­k ‘ ž_*¹º$E4Ì­ö8’.tò¡œ?—“²”jK\ M§Š)P]<·1‚7ðGî ÍW &¯FC.;*Œ’EJ5` ³Ù6)6c= ‡µÍ-×–¦;Ùëƒ; 'Ùç¾ ¥xeL]án\™áX¯åã ¶ƒœT"ÆML•`Cÿ,!Q~3î…¸Å> stream xÚYYsã¸~ϯЛ©ÔCݧdj¦*[yIì·õV&!‹1 IyÖùõé( ò±eWád£þúC7´ú¾«þÄ*Oà?^UÝêïw«Ïß’•ˆ£2.Ww›•(V"Jµº« ¾lõn6ã:LÓ4?­C)eðeè:Ýר)ƒ6½áá¯u37ýãú·»_V2É"¥`)’S×çoéb•0Í \$”eT$4­éwû9ì̬íü¥V*²UŠ VìXT&Ádf®Ì—¿{“2R¥Ufè=Ò…ˆ¤Óöæ ’Á¿®[ÞˆýÑ´-×L¯ZÛkšÇí:Ƀ9|hHÁ»àÑû ™Ï¿îÛUµF¤J¨²(–ËÍÍ[/ápY~ܦU°ÒôX*7SNÛêQW`® ûÒ€'«`„L÷kØ—Ì´õX·fšxtذÈ[=…¢bñ‰Nfìš^·8¥íuÓM\çeÊ Ò=wLûÝn&E0Œs´sUw¬gÔf£÷íÌŸ×JºÝÓX4V Ï„I–E²p6Ül|FÌ#á¬|³X—Î8)Ò(Ë—êug| •Qì¤ ÃM«}€T‘pú â蚋饔=^:ìH‚Í`=hÞòT‰[WÄRäó!ET ÂE”v@Lµ ­%æìüš£dô¼Êò`šGôNª£Í±¬¼ Ô¨ ±†8 /¶Ã¾­±^8óÏVš˦¯FÓ™žœÀqÒ™VDäPáÑè©dTJ;ÙtºòHRD™›óÉ#Î^-E„Ó ;‚+Å#«ˆ$ùÉÀ¹ä'´Ì2¯GIþŠ<± eTÍíRnÞˆÞÒä¹ »áÙx¤ÈøxÙ¼­F¸ä·×ö !Ò…_ŸyRÈ(VË#ÉM?™qö Ç8.ò‚4*³W*‹D²¸'%zË÷}cé }¬`Ë0†»\!/£D|ô ~ö÷ çö£Ò·ue>ƒ¨-KN"$Ÿö0¬ÄŸq`Y¦|}§r8ac8¥²@]}–É£4{‡³§WV<[)2Uñ!:<‡NYqâÉœököóä¨ÞéJ¡T; ¶v‹.íÉ…P†#¨ã@ï‘ýÁ(Wž_z„sÓ GÞN8nw|iW è# ¥ NŠ Þšã ì>æ8Æw#öÿ@5uCáOÎWvkžwàÀ§[Ós ƒxÏmB—M °ÄˆŒÊ¥<4ûaGà … ¸*<Ĥ„Àh  qMqÖ*' ì¬T;2t»ÖÌö‹'ŠZ^|AßaLû‰•„*/“‡,)ãì„;ÉâPnôˆ9t7ÃÖhÞ ¶5Bl ¬§±ÔËÔ…äÆKí!Ò\´CÿH .Ô³Ý&(îS°SJ9aV?py؃à¾Mel0‡{‚ãݦ÷èD„°oÆù82wi#Öö“í²ß%œl< "’#`»E”í DÉxàÃ[Œ˜~¨-b\râºXc?%J ôÜ]úì—ZPsäÆ`KJ|ñ£+FâĤ£Î°N~Ò:>P˜¶C™9÷? Ðp†3ŒMÃ~¬ì¼ûÀÇ¥Œ2w­íàú›‡‡ ï<ÄWÈÿ/¼œ¥Dß™ˆÒ“ûàŽ¹!?=5Ns±œ8IvŒRÛQëïØ2¾j€hñN,È?pHÄʃXa±[ÄqlEÝ۵ȹ/Î|ap©MaíHSR2C`7kÃuæ.¨,}Ûd”Pä1ØgµS¢Géöî:ã4dœ±çB©¹Xd«€ß0hÞ–jÄP‚ó+,„üÏŒòŠH³ÎäCÚ¤ö›ŠWYäa¯`š—aíp€ižÄ0mZnjprœ¹àfK#PîFØ14HG(kJíVÚ6.©F‰NÈkDŒW§½QI •À&|áCÿɺ¼ý!/ó† „‡øUìü2Å+ñ#ûøÎQÚi| ë¸tÆÆLï| ”¢dà`·Š¥÷5Ty ”òxwÔ,שGi_|H¼`d«ÑÏÈÈ‚ܕtkõ´åª¶ïc¦¯MmùC‘Ê.èãÂ,îýÈ·±<=ZãêÆ²ã ™÷Õ)ÁõÏ­!\³iL"Øßc;~è*Ó§— Ôà ;zi¡Yú·%Ry|Ø{{_v‘Jó†ÒnºX«n¦]KÖB÷+¡`@O|SÂi(¼&N_A›é /{Œ|Ú¦y”;]þê;©(w÷Íýš%Qà•Çörƒ ä£í£°æÀ2Þ°“Í@Õ%dçðÞ†9ÌïèΆÍó¥cÑ'ÓH–¦©'6w#¿û³µB½ùLëá†=8#ÑX´ûÑ©$¦+çèœ^:8'€çÇY#Sö7¬ 22åß,}x÷xkäi²d ”oi—X˜-S‚žk¨öBñ;%C‹—~‰û›J’É 09 7–{sˆŽP x9Ïè™4Ç8›™«'LÄŸÝã³,¾îÿy< Ǡر¸‰±ØxNììÕëMR/Åñቂnü­éã,X¨cžÿú/%%.€6WÛpÛÔµéÃMÓ~€énÓ B°èR;iYc!ЧåL²ã£î»Xq,˜œü …‹ºµpcî}º‘Z÷Åí0ÙßOðšJÏ?¡ÇFé(æ‘~•‚6&=\ÓüéÝPœEéùÓÒ5¦di÷À¶XU$QZtË*°™úˆé+?ÆB'Ï>üèóõnõ¯¿ü¬Ä…• endstream endobj 48 0 obj <> stream xÚ¥YKo举çWômÔÈŠ+>DIs v± lKßÖBKl7±zôJj{œ_Ÿ*Õ’lõ¸ch²H‘¬âW_Ë»?w|—À?¾ËüOve³ûén÷ã¯bÇV$Åîî°ãùŽKV¤»»ê÷èç£9¶ßÇRʈÝÇJ©èç®iL[¡PEÿp­¥á_*7ºöqÿï”Ð,Ma+\$÷¢XrÎdº‹UÁráÊ®9Õvt]Ëöqž¨è·ìÊh°#6T4v$ø_âÇ_åò \0®ÃÝ᦬tɨC3¾üKå2–Ö¬­©ð¼W7È$ž—¾f«§ ̧Uš½È¢ó0RïaC×’&Ãùtª­¦!y!»ˆ$gŠïb°:'«û#ÊLÁRÞöY¹–~/C÷ WµmMcÃ@G¿—M± l+°oª‹èîèúüig2½3µŸ+#I7-!rÍ2>™ºÝ²4gJÏÆÀ-V:9ãÙRÇÊ̹ÙÆnqš1 s3–J?·±í9žt‰+7œjóŸz{pß¶î…>¿l…¨’:#TI“­àwKU•2%ßÓ4]`Jfèožö™aMÛн5šA·C0µ¡iYúà¥~£‘îÎ S½ SÍò|©Ví<иðsñ÷w_ƒó·Š¢ù, î£ç£+ñ0Gð¨“i¸'ß™!Ëed›ÓèO}¿ŸGóȺ~Zý¥¬'—OÖî»ó㑈´…ž˜!‡¤€Ä 8 ŽÇ ʦ»§)ÓüvwßD– “aKÑJçñtãÆŽæV(åy€R^”ò+PÒŒó@I%"ú°RMœ Ë?»º¦  "Ý¡éM vË3˜>ù¼}ašup pÁ4En x¬t#жêm9Ö‰$‰zkõ42MKR3ÄPÍOö$B;”ætûçÙ¶¥ h%=Þ gÛìœ&LgŸ„)ÞÀ‚jNæÑÆK§¹öËD bq^Rý!zÉù°,…Z¦¥g€Akê-Ï‘)ªGk6è¼o·‚VãÚý±Ÿ‚÷&é©9i¶#ñ;†”’q†LÓh({kÛù¦®g5ø}ÅT(Z1 š3ÕÓJ£k8)O¦0ÂWa :ÓÈ–ñe"˜7[J[$ËV¡ëaòB)>ÆN½kÇ%¸âc×»ÿvíhêúåF¤ -iBK(ØDgEñ¤ d3Òpybl­ØGh¾¾-š‹ ƒ­ÆŒÄMv ¹C×C XG2¥–:x{3Ä ÎéŽÊ²ÈÔ§£ Ait%ÀÛ‹»¾²ýyá'”~‚VÕáŠÏ--G9ˆ Žì-í|<Av˜Ÿå•±<[†£Þ>Ù~ŒÁ±ãÖ>ûÛ¸‘„„ $$(sÆßMh(–|(0I±„.´Îm¶2$J§ÐÔ>z¢òrðÛ±ë_h.6|™XLRL'úõv<÷­O×%‡í¶Ýº=+fÊÒžÆøŠý´žÓ<˰¨ýfË3%ËJæÑOxNžNˆ@3ð|¡|A*øs%^!»™üE¥ù¤!v à`èÊa¸¤'DÒ64@Uãñm×VîÉUg|蓱±…¹Ô¾,{`Rjƒ‹Ô¡ Fk¡dmÔp¥oíq*—·ö}ÜErh}6D‹„³4[Òèpìž½ƒ¸Clš÷xîηÄé5àLR&1%JИµ—ë:ú+|r]Ob¾æòuª‡s[zRô6“Á- ï–o“dôŠ„og»úÕKM€îð´À¨¤[‹D· Êì ‡8Áç~Œˆ[]D¯CtÂ×ÚB®ZÈEB1•-ã?Q.l¸  3ÑŽf—€ÂÙ{´]ÓØÊ™Ñúh€‚Mõø…`úHÏw‘Í»…Eëúfާ¢>[ èßK99`Q¼èâûœ$¥¯úÜ6]å.ÄË[­<õ¢±l¡f5U ØŒ­¢03YSÎ-ïûDS×±ykÞƒŽþ3‘à]ãjÓãm$3ñ¥6¹bÙdÀ>^Ï~0½îÛ2¹<]ð(å³£< ÙQFo3\y=ˆ=óE‘,ý ןý‹\@L¬^è¯>™>Þ`çƒ $j««Ö*º(€&=ÛæJ‚V¯* ¨ºöËH+ ð ÓÌevìºÚ}z#bIAJ(Ä{^(ˆ5cà$O”00×¶ 31†wÚ%cxÁÄø¹gm"cl„’ŠebA"ËȧþâÐËŸ#!s –‹dÑð…] ¯ïë57¦Š…˜Þûá½ZÈk5Œ÷ýD¯jðb«*ZÑЫRÅrÏéÒ 1Ù(=dyÕµp™Ë¤ £oƒÊ—B†.V%x(Œ¡²[L˜N"êÓ¾ãS°.ôë>Ö€ª1å@C÷ÛW˜åLª èßÞ©ßïÑ¢¥5Ë©d~}ƒ<›3®¯ÛëË7ë{%aŸ†3,’­Ð=Àƒ"ˆ¼²w*˜˜²¿¾»÷wòA_XNßxÅ•Š$9J|Ö+€uyºòŠ?ÜéR-®âÑ~»Ù+t2‰“P$N®Uq.iëm(_ôõÆ€%/ù'nC¥àdaEÂË¢„œlæ£iAÏ ?aöÍ´\—õú1¼›rï£sû裈ˆmµÏyækI”£aNÇ ÿÒñï¢"úmü2°k=ßr|‚ŒîiªÁ¢á`| j¶‡·]s•|!˜®4ΓðK!<ÖUý­¢ b™¡î3â2–‡r rEd[, Uh~p•~QXM°>àc %¿Üíþù—ÿÆr endstream endobj 51 0 obj <> stream xÚ­ÛnÛÈõ½_!øe) äò>dH¼66ɦ‰‚>Ô:–(›0E*2޶?ßs™!GÒØ1Š"9—3ç~›ÑâÛ"Z„ð/Zˆþ‡‹õnñvµøõ:^DaP†åbµ]DÅ"J‚2[¬6ÿô.ïå~¨ú¥Ÿ$‰½^úišz—Ýn'Û .¦Þûº­xûjSu{·ü×ꯋ4΃,Rˆ¤¤%?‰¢ É~ZELm7 ÆÌ«[Uõz¼^ÆÂ»—½\aÅkÛ¾Ûñh¸¯4X·Û7ÕPw­Ù„ ÷vr`Ìí >d%\ø bÄ"Ê- ˜†©·_úÛÕí2Î=Ä&Àï1a<"¾®ßðö-)¼ å¦]ÍVµyó8öTw„ºG†/uÛsÌ9a>ãqÛ5M‡t‰PRÒ©$-¼õØ«-” Oöz‘4‹+›qßÔk @¤Þõ²ˆ=†ÏQïƒl×0›d‘WoùÐp_+ÆÃ_áU­ïÐÜmÃrŠÈ“ÃPíöë!MO̲ÝWz¤-˜NŒã¸Vü5ưáþM”½N,'Ë4ˆ"í_•°½8 D¢·A4dHrøÿKm9\’ 4ç?ȇj[7.*i†®<“‰"°PÓà(öúJÍÀ«äE°æ"%räç¡ÕKPRϘÁÿŸ£Ù ‰'Èä…¥¹W&rÃ@©L*5îØ òEr

    ó‹¾ßqw¡‚‰^”‚èýe›ùšÕ´¬H­#¥6j™žjh2* [²WxgßHCƒ8Gð§á¦Fu{‚ŽœöL;Æ“¼Ô 0ÐLÁˆ˜š¶Dˆ†&I^XÈc­î5pÇ_´Ö æY‹óæJQó´Ùt­Y²Ž¶çl3Â,6¬fÚv™Qm6Y |:W^éRgÖXB÷ˆe­ÙlÖ©ÙL0¹ª\#»"Çad¦«ÝÉuß9Êv\¹Ð07ËÀ…Ç(ã¥Ý«ižÈñÝtD¦YxíÂ(‚´ Û±¥ä?KÄAjd€âï@ÊMÄ™”!Alkþ',ƒª Òq¤¯Ã8Ð9!Ê9AÁŠäélXSº©k² BoQÁÂ4ìb©DÖm1J!ò$¶¯]­r”B°ÓstÙµØùøãkHŒqêmýîß²ñe7îªö(ŒøÌ‡jþçñ˜Ò§nåúáQöÿò•ÿè¼J>sñ~3m?MBX…Í,Fh&‚õ #¨ :zP}ß—T¢µðÊØ9<ºqD0­Kt9s1ÝÄЈ„ÒTf£Ó\Ìü't*®wqfkò mŸ´Ã!ÜrKÍŒ[žb¾q|ð¿zïrKÙ(*9a #.@4 pô¬@y2 ÄF~žÈ/D>•ÈÉ’b~ŸºôYÂ-·yqd(œ£XøíÇV/ x8°¢<ÊÅq˜[, #ª>öÉx}}w¯‹X†Ø2oxCÕ r£³4ž¯±`d)Ü4¯iRh%ªzÉùÜwËИñ·ù½.6ãQ]%iäóÛ× ¡;©XÐL÷ù˜U)ß,ýŠ,wø5OÜ'âWvX y³kê5/¯qq¾*,¨¼Kc8è«uw×Ö¢r*ûæ)ä(¯ìûŽÜx ¶âû$Ý¿ Fç–#¸ÖíN桳²DöKóv厩8žSý+Žböó«/—. Ñl‘`xóéÊÚ`Ÿò…HÞ_ÿî$~Vð²„+Ǥ÷WÿxÿŸ,™ïïNlùÜ(|¾Z¹øBœ¼Ã×Ï]jóCÃSHŒî?£'|}ûÇW7i=ËË}ù„Ï7ˆîÒ¥èDþBɾ|ú¹Ëð]vNžGVs´"¶Þºm?A9Ÿ×qj?½\¸¨YO¹TˆªúæÌaAlÚ°‹çŸ„ÿ_òÓŽ/wv|"s´|³D'iµ4dÌý†äCþEÄ¥,«bÿ´œž¥.Øv³ƒT¨)LCs%€_4ÖcyR›ß @Ê2ˆ»-ê^ßЭ >>~+~Ï€ûº¾ö…º‹Ð«J_ÛÖ¨‡”~wÀ+Û-¿É|¯`nžxJ8¥T;®ü›nägÉ8ñ¾ÝPñ‹dä}é&5–G=äjc¤»vt')Õ‚/(F®øõ•iÅ›°W©µÔ­:A§Z)±ý˜“Q±" Û•J+=ÎÑ7í'r­N­‘èì×$ÐËÔÔÂO—ÍJœµ/Þ:}q ]kqÈ?Dþu¦ã¹·\ÓœsSpqs­ôÅ‹îÙ|âþéͱ¾òñ>íãó”?ýôqµZüý/ÿBïtØ endstream endobj 54 0 obj <> stream xÚ•XKoÛ8¾ï¯r‰ D¬HQ¯$h÷q(6‹=Ä ”¶h[[Yr%9=ô·ï ‡´åXq\4¨øÎ ?ÎÓÞw{!üã^*à/ôækïã½÷áNxjŒ‹F3¤š†\¶%µ M'Wð<ñ¿Ž¢•síÐz6$Ès–ˆá%n‚vLë”éÑáK´(aðDË‚ˆsÑ|WšO€ˆ/¸³ÄV­VEPÖe,ÊJè‘§,J,ý±WNð׌,ùíŸ7D÷`Æ}ˆ”³8ñcD|Œö;@!z…²îtÛ“7ZD`S?÷oëÌ£œÅÒŠÙ{’/Ûk}¨\ꀹdîNàu)|‹¸Ù¹7ˆÄ_4Ue|íÉ…wù€WFênº¬G] ÂSòv­æ1“®/•‘ûº›«Æ îô÷­®çÚƒ}·v]‘ãDZ¯ÊJÍÜù§•®íAËf^.^œÎA.˜H‡ö ÙHb/ëzÌÂ!0ÓéM0öÞ)s Îá €wß6qß´ðyŒw`ðÿãþkÝ+zÛŸd¬OóUÖt_æx•jÕsÈy²¦ÓÓÂfÊpýÖUª[ÉsÄnFÙB-òpåM¿¼¢ÛY,‹fK¶ãïÛ¦WΗ¤¿Ví·Q“mÿ@ÇË1%÷×¾ü•:°Þ¡JšÔil·Ôt`i›=î±J˜?£‚_yÝ\)´A'¤Ð{ìÓYÊdòžO'Ù+Ÿ!èÓ‰õi˜:KJ%¸ŸáE1—»eð™Â{4 ú[JÀ9g\’7'F‡¤ŽPráö(\\¼Ð+Wï8Jeui™Â¹®ªéd,÷[ñìLÇØ¨¹>cqšc¡+ÝŸÉjqšÕ¢i×tñ…ÖÅy,ëÓ,kýTaíy¯öȫڶTKë2­î·m}ãþ4ãUÓ–ÿÙ°®lTïÕì<Þ§y?šDÔöåü§9¥A4©ëQì’ê ¨u¹\™Û3¬*qé0êÔ«¦³À£$8ÂVÓŽñ¶4ß3lŒ[Ì ­z«óA4IB&'µ¦k»Z¸©­ˆcTÀd°ßûU«­!å²ì»sýs4›BÀ‘®øôiD?™ àª’ç¯QÅ¥W¨â’E‡T%Ï ªR„{†+¨ß (lÖ+îP`{ V(ÙÅI­K2ÀÍ ¸¹Dc 5Ód4d  Æ²GXþmJ2É¡í ×Ñ-ÖctnQ…‹# ø’sL 8…¬Ò6WxÍ|— YK_—°ñˆÉŽ=‡¢¨WÚ5nö趃 ERÉnÂa)ë|³¬ˆbÔ?F ¦ØªMeÈFøÕFrAt%æá “®ƒîÎm7´9s'VÌ®ó1³Z­µ•ð¹*ïíKü;å¤ë*ÌÿÅË$XKˆX8bI‰%qyÔœ?ÌšHTÀR[ZÐ Zk¸ñ´©È‘@?o µÒ£Çøx èHû§²Bã2WÓàjO,pV:ã#GÇÁœÁY‹‚Yƒ@“I ÿ×ój[½ÁÎXû„Æ¿óê‹w›8Ò³x›_1q^}Wƹ‡ÕPV ")?ø™`÷“ø©{I8`[²„Z2Xâþ —&Â",24jsˆèf?Û5¾®ÙSˆ¿ì„‡9çÕÅö÷6¸^uP´ä\Çcà¥é¾<[Љ* Ívð`9q=þSUÎ’|øãÒvsÏØ­ì~¬2súöÞûòËÿ¡ Ý— endstream endobj 57 0 obj <> stream xÚXÛnä¸}ÏW4& ¬ LkDŠºM—ì ò²‰ß2––Ønft顤±ý÷©b‘ºtÓëÅÂ(’ÕÅbÕá©"ßìÀ;þ“CÝ~º?|øÌ,‰«¤:ÜŸ¬<°4®²Ã}óŸèÓY^&eîŽišFìãÝQ}ºNö ŠèŸºW4ýs£'Ý?Þý÷þÁY ê«„1;öá3KQuR1\çèdŽ¢ŠKN‚qó»c–sX£GuC/[Ð^dÑß{=ÑL“™ëitj·Ö'‡#+â<µúþ¥dÓZûDÂ#Ý]ZÕ©þŽüÖŽIlÒè$kÝ‚~˜y¡‰Qwº•†¦uOíxÑ­@i ±é¬è£ÞZLÝtàýä¤ä45Òôp²æ£ÁiÌÈÝVYšæÑ'lŠèbÔÅÀB`W­Æq04ütÖ5Úz&aÙ¶vŸFìgÑW쨚|Ð`Vÿ8:Q [}¿Ë²H-Z·ä¨¦iÄí¡Ü,^FNäBsL§œ"é¦ßì6;·ÁökÛIÓ#’²èþ¬ŒCô§a6­‹4£Ç^£ª'ýÝnÍ.É£yTMì0^a Šaà} À$Œ8tÞ;Ã÷:83á$Â*8|¥N¢öÃDºô71€žu-£ÕµÐéd£œ°­oacqvRÊ1úÉ`4ê=ö×E‹b+e:M¸dKH­ì£A…H«&Xé@ sòriuí1 3ó¸üΟ.ˆe^•Öv|RÏ cÈíM•6ö·(yÕ7£ƒÇàZ: °g‚ì@~ÿ õîWt,¤‘5ìy¼B–Qßf€Q³]HDzà:=½ ¨nhÔD”ªøk@GÊcîeðŒ¡M‰Û7[â»W›åqÅÞjá©xwŒ@-¯`ÿ¤~&ØáB-l£eGžÎ V7ÔÁ¸ i ,NÅ6–Žn¦Q¯mû€Õ¢Œ+¿SÕÉ:DåiŠyd˜·J˜X·þ]4°<ÎWŸ[m®e‘@¼ô¼_l%ÎKÜ&l ýs_Ûó@#R¶õÀ“žÎxš˜ƒ=Õ¯a”Þx ^‚ßWõÒÉK]Y y™¤$¥5ea<¹YŽp¡a L$ûZ¹q›¦`Ø.F­\DÒn ¤üê:\~·#®ÖHÓŒ.A§?˜xg2~±SWOís@U¥Bæ]zGD|Cßb²E¤OÔ®‰ßŽŽn“e§|»I0Þ8BE‚™]‚-ø ÇW! ¸¸Ü­²#ËyœW[^A’þƒ¼’x ¡Ž ±°¸ÌwÄ« ðyµ>¯r|”Aü`«ûº7íóÉqtA­¿$LÔ$º”ØA¸9²Èà<ïÒÂaʸ­,àGæLA­ "¡Šêú"Þ‡©µ¾F uxIbx±a¬0ÑÑöPlù±·ýÇñ6üÑ>r(AÝ2¶Vaå7ºã°ŽAå,òÒ“Ÿ6úñlKLšuã&Çw’¿£YÅ™gëP(³¸HW"ÀǬ^ k6ø–‰€ÏÓkÜ?XwHT˜È9ðqšÛ–¾zÙ¹1›~¶Bk5=ª(—yHËÁ'[ÅMܺùR¦\í€+Jð±flj±Y‡ÆÓåñ 'Bx3 ʨ~S½X Y‰xœûPºe1ó´ •œ–‚ÝmÜX®@Ùï^ L«pòª˜ï™nîubi‘¬7µ÷¾7ž)™)¬*®l[,¾Bd‹V6cW»žÎÞP¨Îo p.:Â×4øey gƒÁþ•dMG^EûšÙ ©ÃÍWúèr¨,àÆöh$rlÁ|½ŒŸtî ¶ÉN(Þê#Í MÁ‚ã*rO.â¤xÅ?G7{}žÊb‘¯Aç¹;Èn…/¸—aÆÔ²§Q*y&8$©ÁZÏö¶ŒÃtµlgSõO' gêanúÑšn ã”ÙtC±öm‹Ò@žlØ?«vìstÞ’…ÈÝ0èfsSÛð!©¹‰;º"5p}¾+¹¯@“}[j­4÷ôì{,…äP ÚÚHº^ÞL{ÛÉ9‘nö„Ãí‰$¦³œHèÛ<@¶VäÛGˆÕlŒ{Þ  òà/ÒF}×ÃìîCO6¾¦YjÛþ$ÇóÇPB‚:Ë•í}ÚzpkÌŸiò´?]æÅ2o¢š†íjöžWHîÜüîË—OÇçoï>’n誇/_°9Aóîö?ÀÑ]…ŽLˆÝsÀ:õu–v/ k=é8*ÕÓˆví‚­§9\l%¾9½÷6éMþùB†ªÌ4qöÖun¹88û‚ôœ–¯GvïÜí½߸ºº§½qÉ9Ž­¼/OO|w'äᬌÓôÍÝðW.§è#ã_žU=OþŸüUŸòt;ÂSàðlÿ6ä²Á(ŠkEE©üŠÝ>êAW’ ’~k%¨ZiÕ58'2ÙÓ¼4s·[«¤oHÄ@¢Iªö¹;Ióí+“€Sr2CG_Ä (A¦«,_X f¶H¿נ’Á×Bôê’«rëòfúUÃ(‹ÁÔTÐ=”é¦]õʵ8ûv…o–’Ä>Œ–ê÷ïÎe DžÿêœÒ«ó¿­®œ?ëV½þÔL6üÍ>dò’ÞSx•Øøbë\K{ É@rgÍå>üº‡Òr-‘– ^ùL úuÛÎPÙàÀz)R0ñWÕÕS0ÎËqÔ½% ÜŠK©ydp6ŠrÑÝÓ·eȳ|¦“øóýá—?ý†gº endstream endobj 60 0 obj <> stream xÚ­TmoÚ0þ¾_a­• RmòFH*í¤eê´vëš}˜`LbˆÕĦN(åß/‰“ÀÀ¼t«@â¸ó=w÷Ü x:ÐòzFþÕ@€:Cèr5øS ;@7‘Û~8jyžgD´¡iš-ýª -Ëjyü³ùÄ$ endstream endobj 63 0 obj <> stream xÚV[›8~ï¯@t¤M¤šB.í¤R2ÑT«ª•¶RÞÊ>8p¼6±M2QÕÿ¾Æ FU¢`cûœïûÎÅñŽ^ä…êyêzIé=ì½÷_^›pãí3/º÷¢e°Y{ûôçl—ãJŸ£år9‹>ÍÑjµšíXYbš6/W³o„‚Y~L‰$ôiþïþ«·ZD2j#ÑR¿{ÿeÙsƒ–›E°Øxhµ îzß[?Ž¿£8Þ¡Ÿ[ÿ“>…÷ͪ±Sq8V ”!¿èÈnA t´Úy³CáEŽÛX|–†7:*²ëÅjv¬™„*€K½;ìí»š’ìæõ[svK›çzÆŠ y)ÀLD¢OÁ\ù]‡³½‚b”ØP;‘Ìî¶§dn)d¸.dà¼vÄ÷Û‹:aeU€„)dßq™s”ciF˜[ £' ¨]È7‘CQ˜!¡*1p" £·Hî”(ÚÑùí²E*cä*,GöûM0_*ß²óÿÙîÿþ|÷«yüŽchVõV“¬d~ßȇ¾S•EUKÔ‰,/•}ƒÍÄ݌όÛB“\l‚˜x«(ZkÔžL &\üX}p© ÝˆI£íñ’ˆÿ«…‹Z¦+ôJÆö0¥hû­¦j¬¿;tðÿˆ¥UꀓgQ4aÖÓx¦é>0¶ "ÁÕ+„‰E-àXM@ d,uÞÆóiBŠCÇHM&]ýÐÂ\Ë–Ôœ·IïrÞµ^2Lx?ö\ÃA«Ù¤£? b›¦×bšÖpj§`‹µP÷Å”“Ä.»VRÓ«é$RîrH9>#K5F'Á>¶åzœà6‰Q¯±Œº7­ùÔÓJî=ß5¿·Ú…Ëço[oÔ[‹ë‚>AZ残eŽ\ ˆO˜šãgÒøhÌô»ó1ÑtSFÿ²êÉIeUËqÓFúþG—Òe^îjšNÝM;ŽŒÐª–¨‰ÛM€ÂEÁÎŽ:CVµ½ŽÌÝH¦¸.ÉUçV}h*yÔ-C{—KwÎYUe–‘—æ®Ló´¶úL³Éë8%¢*ðeœÜ™Èa…yÊÝ˃K}ëZµqÂ!‘Åe’±ÄݱîF°þÄÈpvJô M3fµüÓкÜn`Àà†/Y{¶Ð¢uhCÁD¯Xì uÏ‹îßÀÔ튻.ùÎ~èªJ“_WŸ[9c*É&ÀAw%Ë:Zå«©á`#•Gü‚ˆ„RtL›“{ïÇ›ÿ1Ÿ endstream endobj 66 0 obj <> stream xÚ­WmoÛ6þ¾_!d&+‘´dõ˰ Öb¶ÀÀ>ÌÃÆX”-D–\‰Ž›¿;i[¶³xÁРæËñøð¹W_‚$ˆá_dþâ`¾ >Lƒw·âýìQ|Ùèf®{ëÞNøjÔ ¡7m+³lÑ8QûÂ5Ìx>£¯Á*ßß…"þ.w sƒMƒBТó>¸g¡–B—jSfQ¥r ÈR¥Ÿ,‡p¢iP¶uÝ"Ž­ÅÁ'©ãw„÷×ÎFÉ ´DβÔEÅš˜«,0sƤà"œ;áN—ºë„veÎ7]§ z "”r×ôº†Iž…žûcx¹dán\©îñ<(‘ A¡P$㔲["L ü(úñ˜Ðþk2a¢¥ÞzØÓ]³ Þ8¢ßzšC’4cbìÐôÚD/€ÇLzÐÎÅÁ3. R4]fôWCH\|¼}kñèfb‡ÿÀtvÓsñ$ÄvÀ„Ee½°rÎm™ëtA3d ½Q¹Ýýc‡æáã}Níô¹;c í@BÌ«˜Òã<±©'KÆ*XšûäÃJ?»cÎí(!ZMd2¼kG"Ÿ|Šš˜ÇlœX}®i@0j˨ÞˆYx©Ùèœ 2Wí¼¢Ósdm`ãܨÎe‡¶<Ú. v®¹‹'Œˆ€t} Yÿ_uS¼ø|ÄlÙv[ÕÑ|©º=ÂòQ¦0ÐH Êñ‡‚pƒšCí¿׃š?žöðF` q=¾Õ€¬mÛÓÝÉJY™'+qöåÞŠÜÛ—;ûì46»à!Ë7àÁJ(Eøûh‚fã v]¹â˜¥|âÖGJkmŒ­–šsU´¨•éÿ›Ý†½Énivh·” •H'ކ4ßÅ,¬Ù×î cNÛ´ëN?Uí¦'ykâo,sä{þÒÌñbCþN".Å!—"ܵ´ñGŤ֪‹ êÛá½¾¾ˆ½<‹õØù ¼&[88€:Ñ)ªF0OöÒž²ÔÖ}ØÁ4%^Ä1¼Œ *5'¯žrWš#<¦ôØé€¼}*¶¨/áË>e3ȳqv¯ËN÷Ë£û_H÷ö[åó³)uw×þ¨¯Äô+OúÃó¥“ð '½pª¦Zoje¨c…mÛvà৪7m÷üZA…¾W¯‡|ý¢·ûiërî½6›®¹ˆÊ­J8ý"1 §FÐ_@Z¨ußÓÜ~·KÝé£S¾µÃq…=~óðS饪þX¹_iÚ&Ò«µ¡F2!š'Ÿ„•9 ÙÝ'ˆߣÁd‡ª(lŽ„¡Í8,,¿vRÄöK –Ê æd;=WuMøõqÆ(<ål’¸î îýËéÁ}3Éäx׋Á—® Z)ÒbûE!2ƦÙÛÕ{©"']µÖ?‹j'R»lµ¢óüëAxœz>l{QØ5n»í 6ªÞu]æ²Nŧíhp=¦Çõ›‚¿}uùÞW×®Ý,–ÿþÚÞ‡|© 5î³ñ TÌ&þ1~œ¿}óVuy endstream endobj 69 0 obj <> stream xÚíXÛnã6}ïWèmi ÒJ%[Eч vÍC±úÐ-Ó‘›ruÙÔß©‹í¦Þd6í"F$ ‡Ã™s/’÷»y!üEÞœÃ/ôò÷né½ýÀ½( ²0ó–/ZxQd‰·\ÿÊ® ¹oU=óã8fÑ·3_Á®«ÝNê5û©ÔŠšß¯Ë¶Ô÷³ß–?z‚G„ M(1¶·âÑ0¾uñE,¸ñÓêÖ/ʦ­ê…¼e×¾¾Ùîã,“yz>$Q¢7ÕŒÏÙ§_0“gw›ª~œñ”Ézý†LmQWÝ}A±ÛBQ“·ðpE·Õæ´À¢Æ]b“)Ýå„Ep®B›ã<Èb“ãJÝ—ZC4¿Ú×yã÷Ì:ÛŠÊè“» #Q7­«GÛ2K}T„Ë`ÁÙEé+½>›ø÷_*qEšŠYµ9j)õ¾kO²¾¢8e ‚«£Û^•yW×J£Úí:¬f>fÑÓŠÍs2WÇ£0¥Ôꓪå7JÖyqªØú"@>bo£/è)B¶’æéáÿƒfÉÚ´²n)SÁ™DDd냫Ò'[8ú4ÁyGÈÛ »ëöo\7w1#DØ7ù‡ãt‡eã&A®šF:ÁÒ³%t¶r³^R; óZí,rKL4=)g4 ó—À7Ÿ<çŒÖ ‡9F˜sA˜s7ox|„9ø[ÌÑ×`>ÌÁånm ú æGÆ›à'UþsØëJû.ÄðŸž7þþ¿5 Òñ$È‘%#"Ìc×ÐèaF¸™ þÐÞŒK‡g!õ¶½­m¬„5Ý~¿-ÕšžVØËæqV2]£êg‘úô»¹p/~­ŒgÜðŠ×¯<‹¯Æƒ,gyåY4áý ¯£ŽŽW4 ¼âÓ ç碼ŒW[’ãÑÒêxülE³ÑiŠ =Â"Ia‘ŒSh5¥Oš]ñhÄ]m9†-d-sØ‚ n·èÖpjÎ €²ñ>†æ¥MsvÈÜQfËTMÐbÕ”95e‰sloÆ­Jò‡…5…ëÒµZjSš²ñdŠî°GgŽ]в“íØQ¶OÌV¬uÎÜÙ“9UWI—a"&©É2K¢Ä-ùàá®¶ÃùU:W}!Ø;u­6²Ûš³oŠäBÀ“Lóáà÷›Lg "ªî£ð‘@aÙx‘Bã…Ý;R³w,ìZÖa!X¸ån@‘]y‡æh Œ† ¸ÒPƒLÑÏR×⸃LiØ3L•ék•i·Ÿ·œ¦¯i9ê4J‰a¸’ôàfªS ×êšó±ó‰NE¼°:Òé "õ:…¶t‡h ™ö~Òd¼±&oÞsA)§šœŸÓdúRMÎ'šä¤Icw:F ¬ú 0r'2+ $„OHTiîéý4;#1Øb)Ûºi{uU¡n ¦hŒ<öKª>ƒc„©mFž|Ý'$1º›EGA“4ñeAM¾PN <-ئ®v¦ßû¥÷ó7dvÜ endstream endobj 72 0 obj <> stream xÚ•XmoܸþÞ_± T,)Qoýæ¤àЦ‡».Ðõ¡•w¹–`­´µqößw†3ÔûùØÀ’r8ïóP»Ï;¹ð'wiÿbw8ïÞïw?| wR¹ÈwûÓNf;y¼Ûÿã}(‹K¯»;?Š"OþõÎWJyÚó¹hޏ¨¼T&òǪ¯šç»ßöß©PÀNX&2±k~”DÊw¾Êƒ,´”¾Ä³Yè]:ý¥j¯g‘w.Ò£Ûy¯waêµÝÑ¥jèw ¿ÁåéÎ3O?Ó`Uõ%Q€i‚L­Œbçƒò’”wÁŸªÄ{ÅA×F?}õh\‰¼¢{¾žuƒrõ´R5Fw½¡(²ýᣜ›8 â­ÓðŽé†$ “QLdåt§[N]{¯°ÝXZìµ§e0‹õ‚Ìò Φz²¡@×8̽Ÿ›š3qv…ÁLË-}b„ùúÀHH¦WèžDâ­—k¯÷8Íç2»“N„žþÚwÅŽðFfTX±DÑT/b Öú‹MD‚Íœ Þ9¥ÄdC¤Ñ*Ùÿ ÝRV¦o»Mô×Kјªm(KÊâH뇺¡©¹ÐüP= ©4ø`-©Ÿ‹ Kw~(•Ù oEóâ×…é}01zô>ù ÛŽîüäÿ÷ñnKò4H¦fúÉF,&ƒò)n€•¾å_J75K·xšnjLÚ)Ë!Ólb˜NØÅó0%âhÙlE2u7›±Ê¼S.­ Ÿ/é»ê€ éLŒ·4qŽ( \„”Î(™xûM“ m‡ª³eÊ¢C…ô®Æ6’ÅГx±ä}\óD¸ª<"¥¾¤ê4;n·©0 \g}÷ç­Ö*O‘˜¤)Š2mDH+X±Ùœ £,ˆâ©Ò6ãÒuk’âC‘KÛ›¨™„ð)a½@„ ôg†‰¨m{ïrnM©BXÙ…ž !AŒ¶•1O0i ºÊùRk^~ÂuÛrw npÂôýmCê0 r94_:Ñ-}Y™¥>÷m¦,ie_…QîuƒG¯%Apbðã°pƒ¦¥ß™‘ ñjÇs4ÀÚ‰ZÇÐfOµ¼­†=¢è FäÞ¸3KN‹#ö hoDô+hT¾Ow€4¡chT=í´I9å¢ÝÇñ¯€«4?ÀŠ¿a'åSt í[‡¼¤ÛÓVæfA–Ì@Á÷E€Ôá6~G]CÅ÷`tû~/¶—(ïoö(¢¹’xæH+z"Í}„•?¢8C"ÅŽNׯõ˜¹Õ'[:Ú«µîoÝ9¾ØçMÖ¥wé—¾§»69<+ÓäM‹Cæ >™Ý{OÁP˜­”¨@8ŒÖÞâ Ýe$Âà¶©ùP™{úZs Q<Ï›/Ü}r°}Œ@(-´E³¡Tˆ)'Á ñåúž¿%¿^ŸÚkÿ} '‹Dk%Ó@ùX—%ƒœl¾v¦íúXð@ks0­°¬œ54*fÕÒïKU×#óUp, MèÆôÚ½¶(wå õŠ¥ó¦M¹™ Œä` ú–e¿Ë¦JraS¡X&Ò aì0dÓãYó­†àà’‘ÝAcÌ@üÅ4žm¢Ï0°Ÿ˜²²¨«ˆ,¼HüZV G€…bS$¿ÕªYâÒ<8f›YXÛrD2+~€PY⽿¹ÕSq­{Ç–œ5çòдýô}Í•}ÝrÚÑ”^s fߌʩÏ×ó+÷Dæ’ûyþÒþàù¦0x8 ñ5àÚ ì±£¥q—E XˆÏâNØfõI“‘·7œ±^ÃmOuˆî·´…ç•/`fƒz0vZ™ÚèÏWÝ´q]vö2žWÌ|ü¼…ÆÚè}i 3ÞÁ’ `ä Ò¦¤RÁ¬èõÅÓÂ;ŸüýÃûïûð-ÃË3ºtæŽo £ëÓB”‚U{b8òÀsÉ¿ïx=‚ïøfŸÇLpí7Éï”Æ\ZCåËŒÁüGm!¡ÖÏ.5 –!M|i÷ÈÉf—÷óG-Lº¡- îs`,×Å… âD9”ÈUÌò—*æªP–ÒÀ˜¤IXØe1¬Œº®ñq/C?Y>2áÏô°^£Z»…Yýâ,ÁË\ðg°·Ë1‚çž ¹’ä+Á.¥kv‹ô‘C ßZ¤×SÎ[ØaIkäžó§á¼´—ÛtäýsöÔÇ]Óö½õÅ®X⛆ ±C5³?îw¿üéÿ®pÜ endstream endobj 75 0 obj <> stream xÚÍXKoÜ6¾÷Wè¨,E"©Ç¶§Æq€´é¡…‹ ¨{ %î®`­´•´^'¿¾3Ro'vNE˜K‡ß|3œÊù× þ…NÂààdGçí­óæ=sÂÀß[çvç„©r9·ùßîõAž:Õl<ιþ¸ñ„îu}<Ê*ÇIá~,*EË7yÑÕ~óÏí/Ž`¡ê­$LôÜ›÷|tŒgD<±õS¦åºFVí©n•w©›¼%­wîo^w·1Æ@£Ä°†„õ]#÷°'nw@HQä^6,qAþâîýÆc©«vuc–O0ëEµa±Û‘ÐI¶­-µÄƒ¹#Bû¯p2u5þzD&H¡>U %tˆèA¨²Ó¶cSF¸ÃÀ•HEÒ¬*KÜÀc÷ÃŽ¦ ' ŠªUMWÔý\ ª £Jv³½Jûõ\k FÓBdÄî'WÑ­j‡- SJ2<Ù!°¶Ð„µR{š¹7·Þƒu<Ù_ ãù­Ÿ$úŒó)“&j† 9¿(hþ<‘Uƒ*Ð'Ötdç¦Q=}b z놖vuYÖÚ p4œ“Ao:h¹ŸŠî@Ò’Ö+µ—]ñˆñ¡H¡löç£ÅcˆWÕxK6 HdÓ²tjÔcQŸ["ÏB¸"Nïφü¼¦õª6GþQ‡ÉöÁì¶n¾Á|ªñäõ¥Zá¾|÷ë>",ýŒ›{‡K¿¾› Àý bA?Êé‡p$úQZÒŸž~m2îèéO4ý .d©¯ïÔ «Ôó)õ|N=·Ô‹úÔ;óEÔ'&NE'ËâËœüìEä_÷Û‘ nYçÓ g–u¾Æ:›²ô¬sbÏ‚w,Xg#cþtS¤×ª¹4E§¼c+Ëö‹¨¾Ý¤Ü­÷û·Åb<¤’¦'ÞûržqË$®HÌŒ1sÕÓ©,²¢£_6ýCL£°æømŠÌìžÒÍãÔm/E—áÄr÷’pÂw”!,N¼Fcœ"d½ÇSÿ8QMUWÞ V½4ÆŠ‹Ðˆ§X5À·ÀLµÝMBö½¥²;³¡s¬p„\e]K»êªü¼á6öEb:u”Y»âqÎ|nDôá þÓŠ2±|,V…‘²¹&‚›“UÊÂÕ]Æ8ˆPlˆ}™É m§½Ó`d*\Ÿ:¹IÌRÈdYš\¯1àbaÀ5JæXŸŸ¹1ŒB#Úv²éL/LÜÅÇîÒ&„`B„&ÄHjø»¢D¬]œî‰‚ˆ‰±nh›d#3èÔZ”±½_}FçGI´n! ¶~`-lU¹ó η>‹{.N¥Ì [ô@=ut–éðc a2rͼÿŒw ëæ°Âtšçö ;JšV4KGè©ÚÌÐ’p›bÐZÁÓ!Obìä{BPrLˆÑ°$drÅîeöp‘MîåªT3иÂaêÃbFÍ4íŽdÒ÷¤7ç+m3–ʈ?’„Ú(·aCçê°¡ ùö³©j'ÏeweQ¦WeN1ü=ëïÉ3ÀŽ-!ÇgQQ=T&0PõǾoCZþµ(KjþÁõ?kõ0øk³…ŠX=ØÒ‚gØ7×(ðÊþYuç^{/ª3xòŒiŠ4v×ÔÇç™íêYï­,/ú=ð]]y/+=Ñðó}}î^iÜ=%­Ý£IÛùtõÌtQû¢ªÈßi •ÿsU¬´˜öú+ |5Hˆ´I3ž¿&8³aÀØòš²¢€Ù§ èšÂ@»žñaeêzNúe&è! rÅŽþšxéJUýFýù£½2G¬XPJ±8 تOEãT¼O›”™œê’l e¼!©*Œ"»•G3’íZ%S ¢è$¤Ý²RÇS?±­Ûª96Tüù¼6u÷»›¯qxÛï,Éä›OlÝEßLLÃAJÇÔ™=É„º01ÔÁ ?ÈPÖ©ƒ†wk{ÐÞÖgèK ìE_£O°Ôß&‹LŠê¼Fgÿ!‘^^C°‰ ubN,O©»¢o1ç–Ò&n?Ð †º¡ÀaJ_Ý`J.ÏH&TF' CÒžFƆZ¹¶ ™¦•Ã3+ ëÄÒ`âøæÖùý‡ÿ·b¯D endstream endobj 78 0 obj <> stream xÚµXYoÛF~ï¯Ð#„ ï£oŽÛ=R ©^Šºkje-,‘*Øê¯ï\ËCbõ‚ hÙÙ™oÎåêU°òá/Xe!üû«ò¸z·Y½}®ß+übµÙ­‚|D^‘¬6Ûßœû½:uºY»Q9Á×k7Žcç¾>UµÅÅØùÑTš·¿ÝšÎTOëß7߯â0ð€OL‚œÖÞ¾&׸BâÆ…—‡D×WæÕÝ™ƒ®ÔQ»MÿX÷³~pÖÂc*j’yéÊi–ös8À"wº= UÎË:ÌœºÙòòãÚ sGï IÛ'X€}S­ÃÔéÞ€~Aìô-ªÁÇ÷¦Ó|¶=©R˜*{|¸¦=¨vÏt%²Ú«F• \‘9ªÉQ *ôDÂ( ë¾ÚªÆèÖcÄ7t ý ê-ƒÒéWÇ´¼Û*äõi: ¿ºâ-–h‘ƒÛ€‚Þ’QQ´LDÂmõAwÚÝ×ù³®:up- ·[åâÁGÄFÄ_Ôc+t BÀÛs"‘óîÌ„[½Sý-ÇZšv I>…§Õ”P½IkÆH?Fïïújbá¶FŠS]l•}Óè -&fäÅä¬`¿¨fë¾H2øˆCŸŒÃp’X ÕZvu#Ûó°’³5ï <Øt^Œî™>g¤å[²1}1‰²W.æ¿’½}»Vì{Y$…dÑ50YìʼnÐÎÂèóybÁˆñmF ²ÐËò+3ÀÿÖŠQd+KÌÊCáìêá&÷åûdÇœí(™¤à Šm0‘Œ&vŒÓT* ¬¿  ÷\”!&!;Z¶ÿÆŽ3Œ®‘Isú“3þÙ0H3ÏO¦f[’+š°æÊ=Z‹I±”b17ûMisOV¤çÕKéÜǺSTÀ3ë—0ú´EH‡!ÃÌ6b¹ïTúE8Ô'0j @ƒ¥gBÉæt,‡3ÙÖöN²(ŒÌn*œS7×¾xÕ×ा—fâcdðkÂÔKb!‘Kæ<à¾hʃ°½æ'^ îÌûA„§ý" C…>4ÜÐ ‡DI-³{  ”†Î/h¯ÀÑ¥ÙÙU²Äù©?êÆ”<¹kž`Z­#HàKºúäIÆy2«øÈÐ^[±üɱ¼õÿàúKd^`›ü7K, /JÁg8äÆó¼%V‘?R~pÝ/ðZôk7#Œ…‰£ÜmÁIÂÂV„°H b(Ò/ºR lR1ÃÚF«í™éTYöGtÿþ : ?Dç¡í¶SM'Œx…‚‚NZÆ“Xž©?sïQÿ™¿úøbýé*ÛKóO¥Ÿ@¨Ox…ÍÓ —ÎH–{q8Í ðBû¤›ž—tS–Ü0ÈÈø ñ«ªÀmxB¥Na_vf*Â6ZNvöœüÎT€&#q¾Ûñ–XFC6À‰]+©íñÆG)Á!%¢Y•Km"p#¸åH}ŽÈ_Z45ÐS-¼rμùbº=ÿÀ[8Š‘ gï ÂóͪgŠò¤Ì:k~ #lMa„)jMN°û”º¬ ;Óe4úÇ´æu!StZWR|‡¦‰ÛÐn^|øòHè¼5öÝBZÏÊÑ3KOÞÞ—M‘t¯³–(å–èGÝuC+ô2ê?BÂlƒ]Ð[&ß‘¥÷k¨Óä Y ='NúÏwI¹m OãW«gs÷î¦ wG`wúxÂBs7‚iøµ­ˆ”#¯Èäa8·¿Ülà€BG³·;r½lþÁ3$‡ Ñc¶º¸åÊîS™ôÅÛI 2K…Ý1¢ó——ß$Å#æn€”ü!wøX"r°µ¿Ý¬~þê/Áôâæ endstream endobj 81 0 obj <> stream xÚ•XK“ÛÆ¾ûWðfÐ%À`ðJ)icWÉ–œÄÚTQ³Ä„è°ÒþûtO÷àAb%ªv«8èyõóëîÙü¹›þÄ&‹à?ÜìN›7÷›Ž6" аØÜï7"߈8(’Í}ù_ïî¨Î½6[?ŽcOüeëK)½»ötRM‰D齫MÓ?•U_5‡íÿîÙÈHp\h…¥ýøs<»Æç%¾,‚<²ëÎm×Uµöwíé\ë¾j›ŽŽþè½÷ÿöqËÇ̹M² ÝøÀ° †ßU]{òÐëšç­åŸM¤å@h÷›zý™Ïy°Ûõ¾5Ëóªfe^lý$—ÞŽºÁiá•Uw®Î=£6ü8+ð>ß2Îyu,¼‚E©ð~ת¬I›IâuºGÞ’”y\˜zÃi ·#S™g –{X¹këádEâÐé’ÈÀ: f¬!Az}»¸"õž¶°SÕƒ¾¶ÜB†I“>þìªÊþ¸b*gLØ'@f)2ºX†áâ⢰!yœ×Vø§Ê´Í ǹ×ÓJÚh*…ƽfVqÇ|éÝ?ÞýûýoVx“á䮯ì<ØMq6—µå8 mÁ ÛmÍq`¥~Eôªq UO³­)µ Ö€T#í%UÓiÓ¯‡À7…À[{îBÖ4¸8}~Y˜Ôy<–„¥Ç“DN¶Äû„–i‡šáhì M¤‰Â瑦ï mTÞyä›+fLpIø2L¬¸›Aâö¬ª^äY“îézð¬ÁªÚoÒù‡êTÕ ü#JCŒªëÛæâ”¹¯XqÄÑpŒ‘(s =ž+<£!¾vºã[ÐpH&ýP”6¤‘ÊJ§waÉ;*P;RôÓRÕ¼ö¤úšBØ/@óù\Ô½iO¼ì:8¨-èâÈÆ­H.1I3kf¦E€GË´u»HÖ»×àgºŽ?QQ`z WLv­OŸWÏèz}î0“ À´ÃላTHV \Š#Å\IJ´àȵ˜{µb5ÂWÈZMÝ'"„½s0Mp¯9ÐdèØ c€@TR(ãi†žM]p‰i1;~VýšÁ2g|ôº¬þ¡w|.zÕâJHOc²_°¾j2œfƒ=ÀÍ~×?×z=¬¢ŒBÜÀ„ÙJ£pI (­©U£júbÜ‚( RŒîzÀ®Ý,Þë†2‡áDyÄn¯bÎD”È@º”Ѭ!KĹó¿vB»ní´DO¿p¤þ<ˆå¢.°É½íª±@˜Ãmœ+Œs¬B*.7¸bq^‹#*ff‘¬»¿’M4ú úê ÏãšfÔ á{Žëê„©¢Ý\XàÝíµýç Á .¼ „ÇOH³üË(œ…^äÒ< P0[¼Þ­kF¶Z£zýØ9APvòáÌÈìôÑ»¶ýZEsÿúÍšÍ3„Á—15X\¶é¾£<7X–¨4£í2§G—z¯†º_ÍF™ ²üÅläƒ?‘õoOKoK¶iµ³á’Çë HŠ *nDTàS¦3M@à‘&òä"€$W¬o¹pÖÇ]ìÂrtaÉ.|™GlBQY²^ƒvlÅESµFyÈ›…ͧºð¨¬ò£e=#½FRæÑgdc ®¾ˆ1œ˜ÅتDQD¹v,Kmm¿;*ã·ÆgýÜnÿ¿Ûý6bRd™G  ŒÚÙÖçÀ[ÝpZ6˜®ebµ'ZÓö4PýÅjV sC)Ð%4G™ £b?íºBê}‰¨®­N× ©ÑÿfúYÑF©0E„Yî½Ýã ‰eo²ì#Á²ˆƒv1ƒl[%ÅØua…›N^žHp´’ ZýLÄÕPó…ˆP€9ÞCA+ǂֶâ’è…»©)wˆ[DJ-ÛéˆHr†HÑ%"‰suXb5‡”è˜AS+JtiäýªŸá`ȯ-E5TªïÕÎ´Ý [ ¼Qý¥ Áy|(ý®w}çþ&ß~ƒ¾Æ}µÔnÇ‘ëiäÒÓ;žD•<Ÿ­N4k„“I{¹}0fJŠ0CNùÌ?¢±•ã¦îÜìK’ook6úÙ‡æw.xJœC»|)¸¼< g‚/·ÏÇ™5ÁÃÐc1ë{3ž(|ÇcgÑžrè~ …lls“ê0°üZu_r}“þ~×>õz‘RO§Ñš¼˜ßøVXÁüëò½CŒAe—=’/æ®j"•ÿ3_Ì%q/àáLDuv’¹JpÔÛÛ©pÔ앪_m¹x ôEšI1—ZA¦=4§I2ôÈýT¬ƒpF%,ø¤‡Öô“ö7)ý5û¸±°ÊÍ.7„ ¦Çtšu¹gx <3ÎDzœ°3þ¾£o.X°×ÇO×Ù§ÜÙãq„ýb‚\—oÅ\íìeDòÛ[{RñO÷›}÷r(kÊ endstream endobj 84 0 obj <> stream xÚ•YYã6~ß_a$‘‘¢ƒºò”lc‚ÅMw°ÓÁ†–è¶Ð¶äè˜î~Ùß¾uQ‡­A<˜L‹ÅºXüнùsl|ølÒþû›â´ùûÃæûŸÃMà{¹Ÿoö› Û‘—Ç›‡ò“swÐçÞ´[7Š"'øaë*¥œ»ætÒu‰Dåü«ª O¿/«¾ªŸ¶¿?üs£ÂÀq> }¢}ÿs4ÛÆWå^_Ù¸ÃùlÚBwÆýlÚ®jjýè|tõ;twãHäþBÿÌS±lýº²s쥑L‹ Ïó·Â9w…D‰gøëì{XâGN0<8™^?ú2%Û0uºÕúMô[ø7ô½0¹ÐoÎ@þàéªc¡Ç¥¾lÃÌa÷ â~æ´:ÈW“:ÅRR÷<²‚v[d4ÃÈÑLëQ°Ô÷ü…ÅEÓ¶¦;ÃÂÔiê#L‡PbÚÂxo-êqê% =õòˆ¤Ÿ[³¯^]ô¢ õûû»ÕhÈÒQ±°fÿ)l¿ B§6¯=–`.$½‰Ú¥·u“4wè\a÷M˃gä7o;¶]·eÇr^ªþÐ ²æ¶`¶j›)‡]àϵ~`Ä¡óÇŠ—”ï%¤xƒ÷+. !=•0~Çþ£Hïùs¨>ocå裩1qzC‡Põ“k‡(H¦SòÑ]Ûb¥‚9VCÆ™—,‚ iר(ß¹ÿåa#ÕåÎ}eÍîÜá¦ø¨‹ÖœÐ¸Ôéõ‘ÍÃ-äTwæ ÑïÍñå"ó ™w’·tdqoU0’&q,ê•í/rX‘"­bջDZb¹jo²á7öHA˜Ž<¼­Ÿ F2ÌÒ¥á)Š]‚§•¢ ÖÑÁ¼‡‘8Mr*ò—y5ÅÐsÞ%Ñxâ—¶E~à©T¢JáZMºÌ²ØrCµ# 3/RsóLÝ OvJ_Œä¦ÍÁ'Ó3a§Éêç‹=ˆ?¹j™§ª®Aÿ›êJ_Kãš×³\T”ÿÝ”_Èk-¤ÅIBa’"(Ñ^LʱÔ¨j1@µ¬1‹ä¼½ °¦-oÒº3½{ÒíótH~ü ZwOŽŒsÑ#ñ‘‚¤†)ã””òеÄì C¾×€[3ªádÚªzû4سÆÊ2øíà"8V¦ÄS—¤² ÐE6r‚–Wõ°o¬µ$Ùï¨ÐDSßä6óZÐqÏ`UïBÈ/¼ø:–˜›àž‚¦A‘HÉÝ©Ð*V^P|ðìȆ[ƒWUÀ™šM‹q:*;“\6˜Iä2øí(°JÎÄ|—N£´Ï Êk·JYæ;NÖñ(ŒÙÚÅê\úy©à¦É¸)å·î.+›CÔ {9»Ñmq˜ÂõûMQú M¼ºç‘„ê†i…Y—L!Ó‘tÉ×,¬ !€èv\FÖá€ñr7$©àÈ2Ýìy’³)+È¿°͓ͮîá–z Ž-¥ÍêùˆdÙ*:^[€¡>WÍ ä ½º›®°ËX¸P‘Ÿ_ñLµó+¢òkø•Œ¯`ŠÃ‚# .Ã2±G–)Ói ÂËöáúѸ‚‚6 ÷v^)Ca‚>'âШ/††Ï2ehBÅq×›Ž~~m€äfx®ÎnÑU.‹+F¤qSL~åƒçÓìûK›ñ ä™40×Ô|^¤™Fài8ö•ûLÁxãÙ™FÀÔ ,–ÅQuðñòi:Vl—êµ¢ÅÀÛÏ-„ÆpB—3áüúGs"¬ïKöûûšÁ|èÜ»#«Õ¬c¶ Fð7×nix×pœÚæÈî­iWª~€N¨Ð=+`Õºÿð¸}‡_B»àÜ€w?¡z±O·,ÒÀáÂÉyHgj¸hÓ«oVr$ÌS/¶@ì›ÇÇ5ŒL­°ù´"#õ2‹á¿YË£E«¬‚ #“ØÈ”h×b¿ÐK¢¹‡Ê¡`°Ï“‚¾¦°àçKEÐ7 §“Îsuÿ˜3‘)zæê£éd5²cUT=¡|˜[t¸0O tÍŸX{¨_W†²xWÆpãÕ]O‡5{þ"ýɪ¾%…qg•9Ü;LÇ i²þlJËS }ì2ŽªÔ)Áñ1ᦙ–‰`ò©ƒ# ‹P^J³×pHåÎß R¤Æœœµ]¯F&¹zC=bW¸è4S÷Ó-ñíMõè?¶ŽrŸ"5<5BÎl9Át°,Èfèlch™Ã"(@yð…¦& s/Íg hìî¨\«šf^jŸ_x—¶Ò»£lD¡Á»©¶yïg^ÌmC¿8R!{þÔ–^t2L#åçL`1±]žÊÆé(™–8X/p:PJ¦3œ~Á¥ùÓóVHd©RÚþÚrôôt4?@çKöB¤»—× ÊEG,˜.´æRÒúAå7„jå]ˆ³Ë ЉƎ< ò8ÕìWr#S/oÍ 5•Ów¼·l–,2öfÄË9áî¸ào_ªÎL«)B軡–  £Ü•š[¤žÜj@>==꽬|(GC« /ٷ͉ɵ*ÅNÙÞ’¢i)ZËS¢J¼pa“©Ð|i”åsjG”3½ Ø†C…9óqÂF¨˜r4kÚË´ò ËÅ£±:ÖzûKèíïP\§³»ê¡î«×/íÔa`)ÃÔäâ\ÌÄã'÷)5òUË4ûžHô]EO°ÂNíÉ\ܯözã݆þŒUgà²2ú´Ò€,*JvYQÒ«Š’JEÉ<öÉÙ¸-]€Â‹)º—ÂH÷¢¥ñÅ ‹Or÷=Þ¬É {ÕÛLª·mh)YuÖ­p66oêõ‡ùdú›EUƒ €ê¯CefB${¤Ò¬Æ¸hþ?¦²ºýææ½Øüûoÿ|×´ü endstream endobj 87 0 obj <> stream xÚ­WYÛ6~ï¯ÐÛÊ@Ĉ‡®>v‘- Çyè×âÆJlÉÑáÍþûgH¶§A`I‘4gæ›oŸÄð™€ÿq°=¿Ü/_‹€Ç¬ˆ‹àî1àyÀ%+’à®ü'¼ÝécoÚM$¥ ùÏ›H)Þ6‡ƒ®K»¨Âß«ÚÐö«²ê«úýæß»ß%8ƒëb¼Dp\{ùZÎÄDîH¤ – ‡öT­âú&º>ühd¿Ï˜ nV°T^ñ4¿ÔE\«®ÔVЖåþ˜³’P*I1±2q|c‡ëVTˆçz»«öX%_.Óù•ðµ¯ZݺÂW’šˆ ü¤nzZßau<Ù?ø3E¥3 Lç0ƒþ‚&K.‘IÁ¿‚œСˆzÛWMÝY7*—Ý@¹…®)Äebíˆ`*ë¬ÙLÝ ï­3éJ†´å¨±¿{¢Ï®:0˜OZdÊU+髉 -‚¶P¤ ä7·6"»@–3ž_ ñÜ©K÷ºü=÷–1¨MÓûHG¶•ͼXL@éŠB²ŒÏ¡°f Å¢f™ÏSǦ«>¯…ŸB ë!“é¶$RCSFé!e\Q«gc›C¥nKl¥yA¸ÃÒ"ÞxfU…z·gŸlY3ûgÚrÖ÷ä&;5õ2_ί' îÏØ,¼â(hοžÌ+.‰ &1ŽL<„$ãŒF‚ÀŸü]‘W–°|ÁWL£kFÀ Ÿñî…Sñ¶ãyÙsÊÙÍ$|¼kUëX*–§WØZ—lµ7êsMUbqt]8ä ©®82R±drQKÆ»ï7ØxøÀ”ržòàË5”ø«nU¨¢êžQ¶ žÅvs ®ÒAgól™Þ Ô¹þÃÃ6`4x]ã/ ͹¸–Mc5×-÷u0¶ò3'¶®Ô{x¯•Ï®3Üë-&Ò×ÞUugZ›‰ohãü^íú¹êq)‡Dy1w×Nc§¥;½#ˆB¾˜pïÝŠõ)a¡k¶',óñyƒDàð1]çŸèËÛ5õf¯þ¾]¹OÄÌ»yÊZ˜€!Æg`ŠÐ=t§»‹öú\À%0 {±¼dëm·1Chøl (ÆŒ/Hß›Ïýü=åŸÅ0™ÞR õîlÓ§î5v¥)K®–ª‰\`Õ$| åa?>à`í“aVàA,^ô_m<<¶æT5ƒ{˜A“Ö7Ø8:š¢ B.XœÏAXc‰d±/S×Iâ·oü#Ý5åÝð@ïMÿ²ƒþÍ+ à ×Är àùÈûpEð‹sÉ ‰€7a¿£Lòê.øó§ÿ£Çß endstream endobj 90 0 obj <> stream xÚXYsܸ~ϯ˜Ú'ŽK“xÙ•‡µËÎnÊñ^Ú§LÊ 1&R!9ÒªòçÓn€¤D­]V™8F_wÏæ¿›dÿd“Kø‹7‡óæÝõæõG¹IbQÆåæú¸IŠM¢D™n®«FïOæn´ýv§”Šä›íNkýÜw·½9Ÿëö7tôP'"ùÛçßið«5US·vû¯ë¿o´L0K)ÝÚëÙ&É…LR¼tÇ$;]ŠBÝv—fòÉeyê/ƒ]ƒÅeË×ě̅"–×§zØÂ\F‡­Ì#ÿ6\¨ìpè똑e¢ñdq ¢ºEr =šƒ¥=¤Ì#;ne=lñmq)q§HŽr&‡”ð°‚UpÛ^VD•J¨”)‹ÜeŸê›Þô41mERupSOÃ;RÒ ÛL•j³;&dÇ ©¤ˆQÞî‚“<2½ÅAú0—³í¯`AòU¸óˆï§c`8ÑòØÑJÝšKÅÌœÖpp´f¼ô¨L7ë.ž¨ó¹‚”–B©¯)¨Èž).dPz¾Ê2‘”óç›ôtèÎw뮽BK§‘×±ŠlUàc¼”Œ¦ÏÐôæ0Ö÷ÎÐdp¥±#›¨èlÚúîÒäι/+œ½¬C)Zšx£ñ•#:'ÊÏ%ì˜bP¡÷â÷ØqD2wÁÊÒ›D ¥³ÉñÓ‚bI$MïÌP(hÞٓ٪8º¯Ûjà$¥H”;ÿã"^«“,޳g¸w_£à¶¡uÐõÙ©Qƒ«‘žqбO×*ŸÌç(ÌÀ⨹íËXd ÿlêfÍ?¤(=ÉÕ \~û8Þ­03ûÌ70R9¦¦ŽæÒŒ8Q£˜ÑéßyuGÚŸÇ;|‡Ë>N²Cm Ô™€ ÑíƒÉSXĵy1ÝE ¢Ë`Ÿ;ïL€ÜYÞ}é10jŒÆa¤Ùú…Á{Äp3wk7 õMƒž¢Š‚×lÐ=0·Ž¾½½k:«|Ï4Ͱ¼•!¬'Þ‡Î1ªl`òÜȪP"÷YëÖŽÃ>ÚoWl­ ¡½×„Pš3‚ä&…Ìçš9þ ?OÉ2:Ü%©(KÎd(yšGÇKKæz~m–Š,g>=[â…+³D$žô®çt‡ L]8ãEà‘绑Ï&óÃè¼e8<£Z(©Ê¥•ÔyBK#”o aØí-¤Ö¯Ògˆn,+¤Ž‹¹VÙ×Ò‚B …ddÿitÉxíÄDà³=¸*Ì+/K4èå[^æ± ^ƒ.Àé >ÿþéÓreXõZŠiñ^ˆGVÁØSž‚4µѰtî  døVõ!A¸ASygJ ‘ÎÕæœIÇŒÒÏ µÈôGZyD ™2¶²­ù AIaw0£­hÍUs+:ƒ\ŸLp/EK:¡ú[ªOGÿ„,‘p<œºK³†å¥œ¥…ÞÚ—£<ñÙ¤°*S¡õ\«äܘ¶Gúž ço`ÝB…JXÖϵÃcr€+DàCcz3ÇUŒ‘J -¿n$¨¯Cbª™ã÷Ÿû‘FïC±‚b2M)Þ…¨¬8œLñ££WáJ˜¦Ñ¶E`lj§J£W>È⹩³X¨l-Ê` …G¨ýöíÊËv|&Us”ü­»¢u-kó\ßž¸ÑtàðXÑ'˜û…§NÏü+}ž¾ý»­ë+pfèƒÛohøÝKâ‡Ë`™Æ€•+óÓÄå:\ iÅЇËX¤>2©>ðáõ3°ÄÀ‡ÅÖõ‰z Ç®åœÓ.N;ï5 MZû0]ÞÛ3Õ‚øŸ­®VÊÙΤy¤Ñè¡Âؘºåf*ÚRÏ- z‰"‘ßQ™w5Û %áÆJ+È=kec"|zûðÓÇõº3öËén,ÁÊáºÖ “`€’am "UÇO7)þf ?•Þ(àèOŠ’]âe 8¿s­iÇYܵršRíó·¥Ð)yhß³“£1^í·/¤ª<I6¥;`>yŒÃ®$ú Sèít7”ÏÏÐYÒI F¨ÂðßW bÛÉ›õ‘ŽšWÃÉÉTü~È‹V—;s_¸ÜitâSà̧ÊÐË2›ú\Y¦Xb5‚¹s¤  Ã¢‘ IØâ™ÍMcçÛ–¼õ”GŽ +ºÎ;† ñRb”EJ’÷»µ&FÆB‡|ÖõtýÃ`­½ß:þzùÐ3NPû”ÉÀõ¡0®‰ûz®ª¾p;üBòÌ‹©¤»9öú–zlf…¦÷¿¯„Î@IN\ÖÖŠ6(–¥W€ïÒWòy.2/RSœ\Ýœ§ŽïCy±š•¤Ÿ<Í”AùbïŽ#èC“¨¨„kл§²#´¼ƒÇÎ…ºôô£Ûþ^œø ë¼"~ƒåAÑf¸"«©$s9’šý‹i^B`T€ b¿>Ù£íÉéqÝYX£y¼»º"R6:ý˜ó¼áÔ)š»WjÿJXJU(‡l:ÖàÀ$–|žnæzr^< a”±ƒ_6aÀɉºµMÅøí-¶¹nhˆæ¦1íhew(£lÏd„s> stream xÚXYÛF~ϯòSƈC6›Wœ]ÀžØÁ޳kOö% ±5⚇BRsÈOÝdsDÙ `ßU]çW½øsá/<øù‹XÀß[lªÅ›«Åù;±ð=7õÒÅÕvá' ?pÓpq•ÿî\ì²}¯Úå*G|¿\I)ÿ´Ím›UUQßâ„tî‹~ÇK~úð7>ª,/‹Z-ÿ¸úy!…ïÂá);XDWA»i°XÉÔM­ÃÝ×-³\…"tþÅŸµ³Ùe-·_®—~{ÿþ·ò}W†ð \Ÿyÿ{+¹ Ÿ¿äÝ?©žˆ[jmÛ¦âV¿ÓC‡Nµ®¦zNçz6©y^[#Íù·ß®—¯Ìæ#~.·OhŽ[wY§Y­õ"õ ¹/jýíÏèh?výÔæ­Ëîè KxiS?¡´+º¾i§\TlÍMžÜ÷»ïôÎa|½dfXöãYž_kjÌ“u–ΑÆZÕÚúˆödýŒæ§fÓ ò’¸AL«®€0V/q¶‡zÓ(–ÀKÛân)bGÑdÌRÂq´^? åj›ÊžGo–+‘8j—á9´|@³1x 7µK\½~3ñðÜPꛦڗ yD „5ÀÄÍwíù²d¯nb7 lÁÔY¥:P³ Ù[DÎ#²Û¸“7ü­›ž÷8›ÕK¸„£gÓ|¯7h~ô(q_憨žáHlS MVóèGwY}«x‚ ÜuŽaæÈãš-Ç\y,ÝÀw…ÿ5áBœáŸIÝx àXv|¢”nhÔÕ–×È×õgõ¸v´¥OO%Z$¯vçÂ/…+¶Æˆ«îÙ#¬ÓÉãâ{v¤†KˆØ\–BNôŠ3•ÊkPV• ´ûk^~•Âà%3Ò Ginqi_ñrK\iÈõÙçÁ #04ì56<µ·‡JeÂ\÷½á~’É<`À•œ8ƒŒ&¦`–P8ˆŒÇG‰1Ë6Ûp¤¹¬çÖ#R&KŽ,7‰ÉM"ípÞm?Žë|ŽÍ•€ôⳬû‰¨íÕ2pci1,ñþÈ06 ¼¶ªÓ£è"RÄãìæhSÃßMV–¼ð~§ê90&OœeNŽnô”³=²£r9±œ7–7O (MÝ(ù²ÃúË´i4s¦.Ç€ –Æ6(at*Ú¢†0ÞŸ°¿Ðý¶ìo&¾€Ò¯²k<‚I¢@0MwªÜÎÅ„(t½èù&çÇŽ ÔM½úKµ&·Sh*Ý4y†_¸Q0Ñ§ä¼ 4áçnJ'+‹\»| âfŸýéâòbì\2T|êR”Ê(qæŠ#úÚ$RãñÐT5ÏyüAGbD†ë% N¢ÍÕ÷8ñ¨¤“]vSª1{PÃ$ò³ ¶%ÏÎ%7tY‚€Ö7”¶MY6t3 Ÿ§;@žŒ6jˆbG©"9G ˆz±^÷/Ư\GâÓ@(²€HR[ØívÍ¡Q‹Ô3ãŽzP›C¯r^ÖÔ½c#ÎÓmé„>C˧U[žÓ ÅÑÕ¯½È1¦âTUÜît@Åî}[ôš|Æ'b<[i¨µ?¸¹FFaJñMå3’ ¡ÊB]ôØñ_ -ßœp<_H„żí~W°A#)¸ n»mÚŠr J‚² ðÁF C H§å±\uE«ôøÀC†Ìwg…'®?Áó‡$ØVhC ñ.:”d›€ìŠç 6k;ãaR¼ì“2À½É¸ñûŰ[:Ãî?ÎxzŸÝjc–‘q¿ów’"0w’‡Ùß’ >W€aFÂNCçÝ2 º1#ØK]ŸKÁrŠ”L†+Gl€#gÞGîm‡c¡ VҴêb(Aº($œb3Å•SØb+µ¦.ÞÛ0zЋ óí꺹'÷hº®¸Ñð{W)Ùz¾ŦØghÍÒÓ΂“µRyÇMÊݸžr34´Ÿ xd¢]':£Aì€D6m¡ã§^0ϱº…¤c– ˜·ü˜qØâ&Œ™$B ‚°¾fï0cŠmí÷‘­1è•ÅM›aʼní3xZf¡îò®µ°¥/Î{û†çpƒÍÜvÂz4QàR½61Œ/'Òdž£5”«M 2@³Áî`mGBô4>ÄÖÀw ¹ZÚs‰BúPœ·<èŽéé׃žu[ F?*"„“Èubã:M¸æ¯J¸ˆ’@ —Æ|"’§%Ù~_›Œ­ RDnyÒ¤ /êMyÀ"#á¨U™NãðÄÞ~0á÷Ü4ÜÝ¿O„a‘ Ñ›!ù(¨ÈÔžSÔž ai”o+û[•Œ¢ò8”‘ó© ¬†{º¦ÒçPÕiWì FÌ“]oÚ4é#—3•SâÆÁ€ãÌg.ù®g²\‚ƒxúõŠÝ3 °F ¤ÁE û“Jƒ ×°ýјWSŽZ2&‚ŒëÅD´½äÜÓSä}s…^ꆓ„øE±…ñXÀÎV‮‚I!þe-xèr|œ‰ƒçÉŒ_,.ø t6¼ »®iyØÄ`A¥1MØ9ÈÖòÁ×`‰À®â„:ütBïXÌ©[ÕžÍV*ÉÈñÇ÷'Ë¢o_ÿøþòÃÛëÿ½ýøéò×3wO­úìDd±c9¨®ÊLÖzdÀ›s‹B¸DÔµ ¬ò‘§§¥Þ1‰6¼aĦ;§\5–”+æÐJ„l©í&‘0¡k½eAï% 8HbH#H³Ã¦Áò@Ý€_ 8[áìN=d#Š*+y@Õ†[d0D¡Ãf¥ÂwçÈù?™ôgÓoUÔ4£éàm‰;€ZŒê› $-kx°”hÅæ-Gäá†{ bVny³6\þå—ªš *ÉøÚäΞˆ Ís•”.HƱ9´^€Vyq‹ çIŽ!É‘kP¹‘?Å0¶äüÈ!—%‡J5Ç.Ù¡‰r³Æ9´ùõMnÀR¡úu䈕úÉSÆâ9•âkm^Ýñ>]á)tP©Âg¨‹ç€="h7%„ç£^l `ªQÛ®¡;ûT¦nŽä‘Â÷¾àë‰ë=ŽlCxŸK… 7³É{ð¤'æLLŽy‹MìíÕâ¿ßüusÿ endstream endobj 96 0 obj <> stream xÚ­]Û6ì}¿ÂÀ^ì¢qmYvâõi+zà Ãa[3ìa ÅQ.Þ9Vêfù÷#EɱçšC‹; 2Eñ›)ç“:ü…ΜÁàd{ç§¥óæŽ9aà§Aê,·N¸pÂÈOcg¹ùÛ}·‡FVÞ,Š"—ýàÍ8çîo•z¬Ä~Ÿ—¸ÁÝcÞìåç‡?iñ‡›"/¥÷Ïò‡³Ðâ&ɸ†½¹ #d¤!rœOý#DŸù¡7‹v¦6‹æ±»ô¢À=à#påFnkC°¯Eà̹ŸDšÒ·ˆ\¥µ`n´Ä:/òÆc‰{òÜ}M2=6w%amdVˆJ’~‚öKÜo÷[¸ko†¸Æ0jKx¥<Àåvÿ•YC€¢Èxª6üDQÐ9‚«¼D‰ÀÜ5ÉÐ(ÂÛ¶eÖ䪬}­hÈý”ƒz‰Ÿ“–;”3 QµZ•¸fîVë›ZMÈW€Óìd-i‡Ä…ÅP:ÂËk³§èw/ž¬yÒÀÍ‚Ã\V}ÌÐ=Vyc8dkmŒ|YgU¾FYP‘™Õ$òCÒ¤gˆygˆ¨3Ä»‘=ÆÑ'‡Jª\4²8"O#ñÆø´zl÷’{‹ÒìU²i«’|öâ<ÕÊkÖ‡àb:¸x¹yY7¢Ì$x˜3æÖB[÷x^ÝZ”J DyŸÑÁHÐk]H›<ý`g÷Yhò ­3‘,ö£…Au<…ߢgu‚’@’5:ItÜåbïÈ‘lÎý8ê{²1áR#íÀÕ8¢ºÊÈõdãsŸ3#[^6SÒ>‹­ôCϱEHžÃyNCÑŸ¼BŒ¾È,1+H˜ÜpÉ Ýó ƒ¸¢=,š7æ6âX€9Ô¯eøɰéÜ:c!ó Ù1鼩c}åùT}ï!Āİòhê€à©kðÍ9_¸ )¡½7aq@£Qôñ•û Ù¯¼•»òÞNjvqV™ŠØÉóãÇû™ÉÛšìU JìW‰°×¤#¬n•±_æ÷6Auý×…ëQªâc¦ö{ˆº(ÉG#˜ëí•Ë'½j­Ë˜­ÿE^7}F½l›ºÌõ0®ÚXFå"/t\iÔ¼žP«³ ܸ)%íé€÷)‘êì}EÛ+ÖU O0Û ¯ˆäA–MuÍ Ö¢Ú;ðº“éE|,£B¢1_ÈéªnÉ—tûÔªF޹ ~Á"êï½ÔŒy3³/“¹ü?–ªz†ö Ò~Vùf@s“ׇg(^ØæÅ‚ï”z1@!^FäQ6ÙˆÈÝý¯ïovRŸûu»ýö.‚õEBNRøŽS÷l¢AúGGf{ÙáªZ/T&;¾Y õ»5†Dn¶ï34¾Ê>cR7h4VØSø0ÒÙŠÑ@õ——Ѽ¡±`N#ŒVz$€Å"ØKèêxÅ5Ý{¼¦x—ÿFßM<¤ŽŸgXÒ´‹~ûŽŸÊœ±¦àRÆ;¯%Ò¥Ô}{òS©¨§ÔûÔo8ƒÆ‹”ÂUÒ}}§¤fÛò 4ß óSÓzZë–N‰j3£KW“POš ¿:}3=°ÔÈ¥Øë{`ú^?弄–¾&ôf'Ú4s’nËåè`ÖV•i~é ¦khb;‰®+ÎÀ´Ü­í„)ªggK¼v:Ãâ9¸u$Œ9æ´íú„¹M©[˜ê¤æ4s;¨(5Ý|/ì,P(j|žjÛ'™tª™Yp÷Ç c̸f‹˜2˜–™jõƒëø$O+oª‡d 1h!w²šœÄ"vÄ x—#XÙDÚÖQ)·Ï ²Òm<ìtO¢}žbîÓt¹!É·ô ¥C´E#¡Öàì‡ÑÄûv41?å‹ÐgC1ùYL{̯c%9§œ"bƪA©ÓƒU¿Û½ˆAê´î4‹Í_q䚎NÏøøÝhK~Ó¨€s`QÑŽZf\Õ;ÕÚí²76ª4¤è‘a@];Äú‰Åá`0õ¯¼p|P{œí£´_ñ³­ ŸVðWéP§}V’Æt)Ì>…°Â·†$†\¶”…!iN®‚0+¡*…PzT†…õ‘¤éMÒYy„SUNÖó ¶ºDæúî’»­d½Óõ‚ϲ‡keP½@U WZjÀUóQc¥Å-ì ©Æ–jâBµ”²ÄlÍ}‚Ûò?q‚ƒ3Jþ~éüþÝÿØ?¡á endstream endobj 99 0 obj <> stream xÚµ]oã6òý~…ßN.Öª$Šú¸>íÚ¢÷ph»i‹bw06m ‘DU”6u}g8#‰J4½¦H`’Cr8ßÚü²‰7üÅ›<ÿh³o6ÿ¾Ù|þU²‰£°ŒÊÍÍq›X„¥ÜÜÞÿ9«nÐýv'„’mwišßöæÔ«¦©Ún¤ÁC5œéÈ×ÿû&ßku¨«Vo?Þüw“&qÈ#‡2‘¶cà.-Ã"q;ïL£áv–ûm’g³ÝÁ`,CcujMϰj·;)Šà›–'Ýê^Õo`•'Au$¨¢á8¶û¡2|t´ÚâLÙѵøîØè¾Ú#@ª?ÁÀY00Ä®Pöº*‹@«Á±mv ½˜¤·7£Ã8 9qÔÂe=›±>à<ê®ÖtÄ1 ãG ²Î$qXíDZ¦9KfwŽ3-[}RCõ ‰wXe ÚmÑÆVn?Ÿ÷'vf>eè­ÛA ',4P5=Ð_\ke¿°ãøû˜ùÑÈWâ{Ø@õ Îjðo‹`¯ZB³ºÚ)kõaBãög~‰ Æç‡Ø‰Ó°L¥l2º·È9Xœi–ŽôíV‹¶PÝÃØ3<¢ÁÙX„¦hYˆÞ]@ÛÕzp†gì¸ßkkAuõe[$Ê)*ƒùaECkÚÝoº7ä(ɳ>m%­G`2MJGŽÖ¹O*"PFoz'³ý~ìAŸ»„us®,s#œqšDÀÞ8Q}B…°Ô')Ú KÿâÄ{ ›w¸¸ÐUׄÅi$´xj¬ê¡j º +㺫Ú;j}V,&…°M~þUŠŠi† $EXÆ]B!K–w ÈàÇm‰Î\!~Ë8ü ‡„”a,Ž›³¶³m£¨§{dl½o¼t ª'Âò\f‘}q”éEÊÈaZ¸'ßÿ¸-f?21pC$–HáŽ/QÝŸ(X&ið2èë[äöön<!^?åDTøÒ&3iÐ894LXl°þtÖ½s3€[CãQõ`Ki?#Õf¤Ã$Øp&Rï)œÃÎÀŠè‡êxyô$[Þ€VWS†–ô„²7W,gÄPQ€ hÈ+,2_$ýVÆP¿ÂÏiI5d(×1W€4@/¯¤ºƒiõ T÷NƒK¢‰†]5áf†FEÃ\ʺ•W¹&ƒ¢,n©×|,S½MoðæJiˆg¹W5>T⨾fñÈ<Ì“×O;6·X~ÙÛÁÜBÚ=üY‰,bY‰ŒKÅ,¦^2ö3ÐÜ´ÁyOh¸ä:üÈ=p R¬kD~-(”¡œFÏþ©ã É™@&½às^Å3Ŭþˆ¾¹ôÙUGúfPkÐðtÌ;,¹»ƒ÷Èã…*«u¢xCÓ»ês¾ØÒ ù`|I0v¼mø9¯ÐÑ ÜWõãÕB¶Å”*ˆ‹ÝÜ·<XycRÄ¡(_­‚PìÞVm7Ê-s9¹eNߢhé;bŽñìÞÅNKKì¼éº¦ã-”³ºw†y±Coî·Ô'yꔂ‰6oøMLo+Zº¶@qLj—ˆ¦,°ÃˆuÛŠ@ <ÔWšÄÇš…"ŽC®y”rI`n ÔjÕ< ù_••íÔ°?/þw]7Ù¤,“$qž‘d2éÉl­›Œ¾/à¨hwi+ݦ%(E"Åg™‹ ˜ ÝÞ4+¤kTB–º®®}îQ }úÚg ®«+h$¸ÃŠ—þœÝ|œ¶Ï(èÍ®š@h÷®£Ï ìçgí;½¾Ðaj)]Ä+ã™;BÓC¯Wó9Ó_éÙäÐV¦höOn¬XH\ƒCf+k+û·Xî¡Y»ÕM7\nŸ‰)Ϻµ„º‚„éf†F…ƒoHô —STÇùÕ,Ë×*”&ÂÓ“šÏxÉ×58•¹»´p=i=R N%ÖIÓ§" µXd犪âÑÎP¹oXÒq„€V?s¬`Ü J—®ÞÃó–1œù°ië ÍÅ <Å…ÕÊNÈh‹Åòw¨¡ÉxÊ|® E9}(–ædá~æ ¯hD^%£/8:Á„³ø©j[Nfu þ!dþ²»«U{ÿ”\¢Á_Þl¾ûÇïlœPM endstream endobj 102 0 obj <> stream xÚµXÛrܸ}ÏWð‘“Ò` ¼mž—rJv²¶œË¥¢†˜$¼Œ R²üõéF¼HÔf\+—U&hÓ§/€÷Õã^ÿ¸—†ðx»ÚûÛ•÷Ë›Ðã˃ܻÚ{<óxÄòØ»*?û¯ŽÅ©—ÝfE‘þºÙ !üuí¡+êZ5þ½ê$ò÷÷Ÿ¨ñAe¥¹ùrõO„œÁâY2LLß6,N½­ÈYšÏÿÞd‘_tª¸­ä#ôË.<ÎA›UÛFYÂâÐ.´; X ÿÏø‰ý®º9um}êíÜù©ÂŒeÞÆé`WG¹Ù†YâÛÐN'¥ÍÈ ¥fpâ0i¥©“¾©¯¥³‡ù4ÔÓ’)á0Ô²Ù„©o„b¿o­JÑB¥Ìž¤³û^û×›Ýã”…©½€óØ/šÒêql‡ªtˆÆ(8;eÓ¢¹ðoQÚ—v²ÖêÐÈ’~nF¤TÜõÕÃ& }‰l:¾@¤´³ÁE<ø€¦a‚Oä>$V–YÂqúæ`‰À{°¥õˆÒz£ñ¹†Q*æ#Èë+ï«ÇDêÝ{Q±4†#ÀŒ8÷jèHY•÷Ñû"àrYKs³ÁéYÀ4<›œ3й;ôt(GJMmò|ÁpèH-ª 1¢ Rª×²Úí éì2GÚ-ëâ"wòyÂAɲ}жÂåãÜî 뀋N»^U¯Eè4cŽÔÍ¢SòÚ’‚³XµôtxëøÔ6L5Z‘õ¡wßv.÷6ÅaÌ•c2 ðŠ3G€ÑFÞ¡æ”V1Œô.Êô/Hv ® %.7ƳÜX©[ˆº7w²Óxäs“£9šY[¤Bß0g¨ÑímÄ·åB»w¨˜7äÒ#ÄÓ¸¤a«žô)ɍ޴?pê¿¢ª©€eL¾–s¶4òe³s•åá’>tÝX£ð²Ôž|>e<9ñÓ•ZÙÉÀ ß'Ë-ë§16ø¶V[b!·(½{W×k¹?[ä~Œ÷÷åj©÷œt\n Ú˜¦P,‚ÀÆ l B÷ø_»-ÕAÙ¤€áÿ½ ŬÛX AÀ <˜ˆÜÃA£hfn+j†\°À{õÐÀµçô䣞¶®ìá,Z\J¬þ"ýUCªçKÕEMªOnƒqØñi@ó ‚+êS%ñT iâŽàÁP¶‚…k—¯\°(›.1gpkçÌŽB¡Äžþ(Á¯<’ ¾"†ša:Ìé®Ì) ÔúAwy-âô…¼íÇ{¿­8g!ÌäÚ3_¼)@!íH®©5ã]·Èc1eö1©¯`mmÇ%¥øÊ$'‚”Ç!Ë’Ÿ˜ :îÕMSŒØÿφHšˆ¿2r—›—b>ÞIKfl¨Fõª¨Ôw{D¸œ'TË¢Ÿàd´=ݦýÀժИ%p»Ñ,çÒl=ÄÄÉ®Ž Ï1š’ÅÚ•7⊰½zýa5üŠPz¸S]Û˜Ò+óûq×xVhFá”§ÊÕTŽÊRÙ„Ê[âIÈ3Sxþ4žŒžx6OèB>>¨àöªY;ƒˆ1 | êõÕXºÌv¦5^¡-‹ñêë-K:\@Û[ýT!×Rînþá£Â}‘EÖÖDT3H™RáâDv,²;»ÐÍÐeÎOÕœ†n‹fMYÙûF„Íñe ­°ú?¿z¼×ÛFYg€¡íÊ%¶ï†]¯¿Ø°6½q~½y©°üæíåëÇ. 褨ÏBÀ}«/ÞZâÀ·“¡ÍíË#öÞ•3,ÊOŽƒHAMMƒ1˜4͆•¬˜FøàAê¿ÿty¹žÿs>+zÒÇ–r_ Uo÷\¸\š°4Z𠏵ý"–.^ÃÀ™Yðâ†i‡þÇ,¥©³L”f£e°ÝÛ¾™]PzpanM²ÃšTSè@ŠáÇ3J¦²å<EYöhçÉ@VÙuå,Ì\+ƒ4ÄÂDaŠ]/TÒœ:¹—ÝlînîÁÔwyîSçãÃIzñ <(ºzhúI1¢›ù@ð‡TCßõôÂAÁåÛ÷¯?®ÁâÛ#ÉLÕ÷b™`zXõÏËOïÞ¯­#"&²ßÍ“<Ó‡«ÂyÎíy¸; ‹ŠÌ?sé¹Å¼ÓÊ„2o'i*.™£ƒ#{Ù»ÍË vP@öµ »þK7»FVô®Gvµ][×éEǾ?Ò»NJ{.!¡7X™kæžyûÓÿOã à endstream endobj 105 0 obj <> stream xÚ½]sã¶ñ½¿‚o¡:'†Á¯ö©É4ëL;MâöžñÐd±¦HIÙçþúîHP’OwMÒ±gì‚‹Å~/ä}ô"/„¿ÈËü‡^µ÷¾»ñ¾ýAyQaáÝl½(÷¢8(ïfsë¿+£éWë8Ž}õ‡ÕZkíÿ£ïûr¿¯ÛGDhÿ¥w¼å/ÿ'O~2妩[³úpóWO«(â!‘TÁÖ±’Ì[ë"È!nÿµÊc¿ìëò¡1hÓ·?DÚ‹"à&AÖÖqž‰B}s_uû}Ùnî·Ç¶ºWëDiÿ÷8$ˆmÊa$”Ðro©ò ÷Öpш/z³3ÀxùåfÓ›aàE·ÅQù£Å"IžÉÑŒÇCƺk5Ýpæ“©Ž£ÙÀWžû+W*õ_ú«µÊ}¡}Œ;†ŒNCÞC—Õ—~D'Œm7ò¤d•8°x”ó&ÅYÞ;®Tº¬ŸXùuË›†cUD€Ø;Þ·µ‡šOåþИ€xŒ“,³Z«4ˆÿW}îºîé ecÙÇmù}¾GÍe)È¥]ÿÇô²Òw$ @ð˜‰j0+ ¤xKÆ9ÒÄO:†VeÓ0äßG2 ˜¡„3߀ˆŒp;\Æ!'±÷u]dypŠÂŠåЃ"€æ(Œ#Ãì@I¨Ì½ô]é~C8ôÝþ0þ_tsèÍ}ÝŽãWi'/\íèP[í‚Æ"´ŽW8Úh'Ÿ—¼t½¯`íT´ƒÛ¶Â\z³¨Ê¢bÄ®”CD“¦=÷ÀI%ì9Êç@BC¯ù¼!D@L™!èT¶‘ˆ#ã'âÅàÝ(zžV\ve_Vpå•:È£ßLùæÙ´_¥x­“…â3«x­Ù-q$EádR<.º­y˜OŸt<²âqvàp××)cS#ê•qEå»9\ ޾Sޏ¨ì²YâQ.P=™Ò`ÙðŠ ÐÿC|Tø³-͈ñGÅÖÂþR7òÕœ[-Yl)G†í»a´ÇµŒë½Vò0˜ª+<³Õz+ÁR†Yfƒ¶cS}Âë™W¶Ø®ì7ŽYýzñãÑŒÕ&4¡H™_>èsp‡{8y—Š0:G€Õí¦îM5¢àzÜõÝñqg%Ä‚Ñb7urÉvX`ny›¤Ú wYŸãx°…€r® ²i5;,N‡\y6Ed3œmF%°[¶"w ó±0t!²äyŠXˆýR` çŠLΙؓãy1 UÆ)¹ e$ŠR±{åÙC•†  ¼#¡$ô6\¡~û½CÖï‘úä0.åó8½[‘ÐRØÁ GÓš¾ldk)ÐòphÀíå¬3@y¡¦™ÖŠ–q< “vüùÆûè:ó^¼ 0:}îí½¬@¨,ïgïG.®ó0P7© dWšäŽÂ0ˆ‹™tÆAz•vê@Ç âŸq*­‚Ì^mØuÇFÜÂÈPo¬Ñƒ`(ì]MÇúMá¨4Çø9ÝAeQ õµ;¨L±L§+Ìöå/ò@;²Ã(H‹kÄãPa:u©C5žûÏ«$øÞ`0;=)ÖV¨r’†Pxõ ‹-Lí8]Î’ÙleT~€[½ §™¦á Žõ[ÖÖõ#ä°¯ÏäªXØS ‡;rX)²9“#´Û —Nœ(8“#’7[nÇò‡gÃë0šýÙö!Sï,Ö.õRíIúH‘N¥Ýdÿë§ÇϨ‡KëòY,ô«Šì([hH-ºS¨d$K ÚOžØ%Ÿ´òÍÀ”z3û–qà3›£a”f˜®pCkÌFèPæ„qcX„æB‰e›Z&ÔÔê4å¦'R¼à” D ð¨Y`"—>•ÔŠ;¨.Lm) “êØ÷†-âlóÐû :Ùu®? ÔfÂ3»™½†BJSa0y.d夢lVvÝrÞ¿ ÅÔ‚?:–GPBÃq‘вœmÇ •ö0fSC—ºsŠwVY6Õ°ïŒ ;. äT@ùCFwjS@JGTL¿ïÉòݰHœwCZð¯É¥wÃBË9½áÌ[H­ƒ¾ gÓó•~\Uv?5ºn#ƒp>²Å:gÚmx꛼aãâáÈ9 WÅoEê¾WC;O]ÓÌóÛ#·è~ÞŠé‰gRߤ¤K}N>??½“,†'íKÈ}’> stream xÚåXKSÛH¾ï¯ÐQÞŠÍC¯ÜHBRì–€³‡%”k[Y2z„_¿ÝÓ#YA€å¶UÍCÝýõ×=Ýv®æøðÇœˆÃ¿ï¤kçíÌyý;Ì÷?qf—‹&¼$pf‹3÷ÝJm]M¦B—¿™L¥”îqU.+µ^gŤ{5+Úòñè N´ZäY¡'ç³?É™÷Í'ylæ¦BzAäLeâÅÜ,œý=‰…«ªL]äúÜlzýI‡1Ð&@Õ¦"½€ÛUùü{V4—m‘ΛÉ4àÒý®l*½™ƒæë9®7YYØMå±;S°–‘µ—“)…[”Åô§®ÊWðÅ[[Ìâu–ç8’nªh$ܬXd•N›ü†VšUU¶Ë-6«¬¦é d=\¢Ãh})8æÀRë«G#' ^í"ñÅPšê«V©¦%‹lï3³ö·ƒã΃-báÄâx·7Ù‰ÅûÑ‹ÿ3™«ygæ<×ŲY=…RÆýízám‰Ûue]¼ì–ÀĬ«'ØÎ-Ëþ–7[ögΕãÉȹ†"ż˜É° \›ªEÄýDîœ:Ÿ©oÜýl£Ö˜ï<–P¥ÞK—Òóà .#¬<~%ƒK±#â"r Œ¶•®3x2x©ÑÝ”óºQ~„;÷°þnßP0c[hè6mOÛMy«kÚb£V€Bpï´9Ê4Ä{ 2dX6jb %¤Ê@uC±ÉÑwƒÔ“,0¢FêF@µcÔɧùéþìt¶7ÛA$Œ¼ «MâÆÛS@MQ,P@¥5Uë0줆÷Heøߊýrô€à(ö’d(pæ~©õC2¦‚‡žÜq"H:8½×>¶­‡éê4½7õ" ÜsuC£AœP‡ž@ Q5Y ޵ÓD+óã'œ£ž'A?¡sß nýîX‚ÇlK@Š ;‚"ÍÛ…~3b4ú>ÆŸg:¢±ó£¿ŽÆ,†,¹Óiì^H+eï~ÓáãàÓ2Üä2 ´¶å%v~zñª;QQjë¿‘ÙOØS˶°e„½1·?¡xc®´šÞµìàè`v°÷éàŸƒ£O¶°+nzá}a’™fPàO;¶1훞…j­ÕMÕ¦M Mê/tïÑyÿýó’–ëM®›®((lmQÛëð±`ÎöOOöŸªë< ifM•î"ƒ®Zõlî1Ûšm9Ø«íYÃØeZtx'«`P¢® ZÍŠMÛмÉ=8EuVO樂MN¿`M å~'û{ïß¾6©ð†éùdN[“ÊXðUåúV¹h++*JUÙF®ßÏ¿ý ìÜ€ endstream endobj 111 0 obj <> stream xÚµWoo£6¿Oöf . e︄¶ì’Òít9U>pTÀ™cšöÛÏØMZTY«DÂøÏãßïùò¯b*ö3°ÿ@IKås¢|ºŠ90¼§$+żTLËð.”$û¦7pKÑt˲Tð‡¦Û¶­Î^X–yµnluŸÓØr-Ä F0+ò iß“?˜>à"Çç>]YG—ê– à)ºí—€ï‹ÇwóÄO‚»IøQðO"c½p GÑ\SÀmoåòx6+±Zj‰ ¨ój[S1 W-ɣͶJ7RT‰(Ô·-¦ý(¦R 8꘲³F' Ór0NÃ¥.ÉSaHÖ57”£Òž!ìãiÿÎ…°{¦5!ÒIŠFwŽ­®!É÷Q¹QFu3\\Š–0r\ïŠ'=㩳B™X¹o$£§ìÍUqcÁèàW S‚Ïà= ®Î¶Ë Ö¯L%Ò­Ìù‡D,˜šÓê`È­ü3¬^øÛô6ˆÿŽÃ$8›V.“*n|éAãùaOrŠ„£•˜çŒ õÓöp:™ƒäÿ±ÎdŃ …ñÜ¿-ÍqÕ3…×7~4ñ›èœ~ÞpR­¬çþ€ °Õ]¾®Dje釮¢oƒ°ˆFÓw×ë¡vÕUÖ3®x*™ÑèLØza[ÿ%¾ê¹ÓÊjÔÑÂØj ‹¢]x˜¦aÙY’âNØÝUè‘.Õ¥ÖÖs Ë•':Õ`9Žay¡˜$_‡sÿ6¯…lêg‡LÄ_ëEÚ뀊íÄ^¸ëGQcOXüv&™æw;ÍP=Ú?ûÃ/½ÈÙ®(áÍóEÀØ®©Ö;nâf•³h°`Ø*Hù«¥.¹‘y­wÕ{f3~0r˜Ã‰©%ëä™9Jõ×%£ÉòSŰ™ñÄø›ÿ|_óŠ’*$ÿ]¨z ×rÙ,µ~z» 'Ó$œFïÓ´Ænë?Sƒt,W¤»äz›º»b8†cKOÿµ œáB§Ä\w¯…X–a½%Ã3,G.¿Õ¥3ô†Ó]Þ&‹q~ ¾¾k3Uòfª 9«ú=¯xO¬×ÃbØñU$Ê_¿üÒ›÷c endstream endobj 115 0 obj <> stream xÚ­YëoÜÆÿ޿⾕ tîãøH?¹®]¸©ÄVq PÇ•Ž<“<_®}fvfÉ削Ó" îsvö7ïÕêÓJ®bø‘«TÁo¼ÚîW¿Y}ýZ­d,ò8_Ýܯd¶’Zä›ÕMùsôrWÛ]­µÖ‘úæjmŒ‰¾ïÚ‡®Øï«æ'Ltª†-ù绩ñÞe]5öê—›­Œ’ˆÇޤŽÝØ×¯upèZçJ¨|µ6¹È”[÷þß·n^ܼºýéÍË·ÿøîÝËW¼/dv“Šdµ~%ñ;»6*vEO Û\©4‚‹Ø²èsEÛv¿/š’:£}‹ë>ã»ÇMY4|¼¢-0·†OÉ´‹¾µ-zn¶þÜ¡ÚÓÅã·òØ1b:v–Ûc×1w:5QuÏkúú3y+J︷]µ¥ÝÀÉq?ª-8]áîž:ýÁ¡l·ÕÇX²¹ ËÏÌÛÎÒà±÷ Íl廦>®À(œWW%u+IAŸ»ª)RÆhÍ8ul¶CÕ6,ÐÜôOIC`|Q"I ‘<%‰à×Ý>Ïüåœò$jïi¸høåPÝÓâÓ®ªyù±g½œàäÍov©x[ér!w†sèQޝ‡Îö¬AœÅ>œªÑα'ÇS‘ß— é~ÛU/^„{;ŽŒ&€p=„³¤@Ã…ä€8ÇÈ>“§üþ˃žxF<”´í´³œ:{o» Ù»ÌB·h>çâûëÐŒ´‹ÅN››ŠÕ½ym¯©Ó6¬íûêa7&Ê-o¹C‘ÿÚˆL:ÎßÚ¡X¿?ÞA2‰½ŒMÝÛÇSÑ•ëǪ®×§¶+4/Ÿ%DI±:"¸¹‘N¥¸én››*A…ºö3j»”ÖštJkÆŽ£UÞ) ²xŸ%'µa[”¡31"õÎf«­ÏKI$x"PÂKx® ¤y&•áá'c=UC )ÿŸ«LAV ¢5›œò(í³$h¸â²®Hâ¨ßµÇº¤IÄübýýè“\÷Œêѱ™ZW ¼Ìg¿ÌQX«<µ/å€ðžµçÊÏM×5›]à6a¸våTUÚ>°^33n°†–ë˲+JtñßPˆÏ Mg!þ5†x&ñ\ˆw›ž†ø¢,oK çûm›™`@£3Þõ1ZŠXF(¯¥[€××läa;ºäWˆÓ5Ý£«•W7«O+,0N+ñ@‚ßYºÚÃa›q ^}Xý@Uùìd¥c¡%.K„”Ì%F—'¤)BœžÊ/ŸÄéìÔ%y+a"¯¶Í—ÉëØ_|$Ïð}åõázÌñ;£ÊLg•™¯%—$˜ˆØû†Å’"­ˆgÔ^”å’ ¡ÌÞèÀ,Ш,pD:ãÌuå”ZWñKnÄ5Gó³Iâ$z[a_,Ü>Úó3¯+©f3{]YCb Éeè«~ìƒÔ†î-gî/†<ž#yùý‚x²­¦‡!•{7)!Ù%¿[X÷^•пÂlgL¨$ä$è.lS:%„çº ÈgŽFä&LÑ\]“C‚Zbñ•»—üÜÛMaÇi=—8ž¶8ÖïºXìôW%#Œ»7$lÜ«šWT.S×úæžæÆ€†³µ%µ<eû4OëÛ½8i$yÔ“5EãEÇ}YÁgæ0êYFµMó‰dѾà:oî”–H@BêåÆdÒÕg¯“3®Ð\„ta™+u¶îÕ.ÖžÄsUˆËš|¢¨ ù`k». ‘oíy_¾T‚|kÏôØ3UîaÇ»27w¨‹-7Û†ŸŽ­Ød¨t3'²ÌƒND’¹“Ì(×Ç#‚ô¨ÕÏ› d-=ŠÛª ¡â4誀“KPmC뇀²KaÙP2#2Љ©äâ \xÈ‹ò¢§1z¥’zZJÚÑñ,7º#™Aæ³E–Tøáü~„‡ÏÈr{ì¨GÊÑP‡o8¹’Cn “8Ò.<ü@ +™ a_¬ðs`eý»u˜bUTmñ<®ßB¹Ú‹k#€K<É÷6ÿW¾ÇúëS>€ÅÞÞE_>)ÕEÞMåÇ3?—·U¹DIÅ¿›~ÈÄ\¼§¼wïÌèózÿJУ®Q]òÈŸÐs•w̰¥?8Kæ Øüd:’©üquÍöP ·ÂZWj?zc„öán·ÏÄEãÊBZH¯>®P’éÜ`fÏæÔöE+ :ësïçØ­ò®åîN¦ ŽtXðÏð›o¦ÿ’L%<>`Ÿúþð—ßÕª endstream endobj 118 0 obj <> stream xÚíZÝsÛ¸ï_ÁG*áˆO‚÷Öë4¶sÞÅíKœñÐlqÂ…¤ìóýõÝ@”(Ùñùî©“L‚ÀbûõÛe¢¯øC£”Áß$ÚTÑWÑwXD’%YtuQQN2]m?ÅÙåûÞ´«5ç¤ß`Ã/¿óƒœ‡Ûµ†B“T…WÓ´Û¢+7ÇßùÈb£: *ß´-¸_«0ŽXÀ†ÔÎ :c³™ió'Tìó‰iëa&8î'ãÝ¢ó„î¼azrp] .t[Ÿl¦<¸×ø˜^ß7ï0$-Ϲ@H\À, ‚À#ƒ,^ññÔyÁop#Ðpoú‹˜!Á°öŒïÈ 3è×b`ˆŸ‚ .";´­Ï0åÓìŠàúÜÕMWù»¤ îò…QrüáÁ&W˜a®sG°[bs’NaCŸ @ë Ìy°ÀJ—UÀ ê·„º“ÕÞÜ>ÝÔye•¡)¡ÙK­wÞ{="sÒ¼;Góß²^Ü`¢±°. fÞ¯0ÊõŽD¼K_X“v'ÜÍ0Ä»sî,—)€ï'ƒ¥Úxœ5µg9,šGÀ«bÔÆýÒî°ß—…MfðTXá¬.d¬ãÄrÀÑ|ºÐŠ$l-Ïæ¹!Võþз§N—pt Tý𣱶çÒ %ÜÍ~šR>þ½.z·âCQšÏïÝìÞ§k‹ë•24ýAfcí íûþÈ#3?kãŠMYúY³€Ã@^MŸ5lËu`Òê¼ICLÊÔ·c™ÿöïkØp·ÛTIF­â•"Pæ0ÿ";Pwà R±ø@p®BO%Z· Ö)¶j¼1âb¬=˜zcP)T­­ñƒYyäæ|u»T†/ú]ÛîwÃ_f"àR_[ˆèXpùËBDžb¡µ>­xÄÈit‘ºï4Žèpm¨µ»éz@±—4D6(úýQE¤œÑ¬ œ?O/ ü‹Èmúò—7!÷PÜø2®ž™xÕ<˜ÊÔýùs´$ϱðñÿéfyñ§ßKGL«+-bJNøTiìÔC>O‰Œ*@WÔ:»{øs„™2ÛbÀU©ð%_U ©% Ïh†_JFú àŽäÏÑgŒ–Í裖Nˆ ö5)ÙÏšˆm_ïF¿XЂû°qÇKqAÆ-7 Øð9@_þÎ5~¬ãÛÒ'jˆoGÌÏ „ ÝBë¡!®ØIBÑyžçÈ'AC ÔM½þÕàç |:¥?~¸AÄpÔ«¼ói·4œä?ÀLͯYœf$åó†ËŽPØ+± KÝW£·õWJ7oòõäØq­I{ïÝÌ©ãâw @Jk¡  Œ‚›ŸÏ?Ü OÝ2yÑq]Ñ,¤¯lÝõìàVŒ‡,z®ÖÖÁ'êE<ô,õl’ZN¾Ë'ßÒƒ3g|“¯ãZà28rñÅÏH€àéK<\=ëá#¾äáW,×sI¿å³ºýO³ÆqàçÜ—è³vrîªXôj„IRõjFƒXwþ¾NÝlê§?ýóz²´ endstream endobj 121 0 obj <> stream xÚåZmã¶þÞ_¡r3â;Ù)rE[ h’ͧ4Xx½Ú[!¶|'Û¹^~}f8”Dyõâíù‚Á`‘=$‡3g†›½ÏxVÀ?žYÿ‹l»Ï¾ºË¾|#2^0_øìî)ã.ã’yÝ=þÿõyóîT6«µ”2Y­•Rù¿›ÃÛf³ßWõ[|¡òÕé™Dþö¯ïéáÛró¸«êrõãÝ?2%8ð"@JúÖÒ2.²µò̉ðâ‡7+'ós½=U‡úÇ ôå®2Îa6§¶–ff#PUŸVk-TÞìîªúñþ§òã}õt®çú±ÐéÚŒcFÅïÿ“·"éòª`%l~‰ü§•0yùqåTþ-±Ù…￾ËÞgLÙìC&`MJÁ4532ÛgBÌò¶½Ë¾Ë¾!}FŠãç(ålx{Øï7q)¼sL&èž3mѽ`R¦èO âKh [žL\rÃÌ"´äÝr#tÔÕŸŸâ.ŽíL‰v VQ"…]K!Ya²5̉“~Û{Û- `:‚Á9Ü¡—ˆB0a¢Ôé0†Ãó­ÄÅ䯡˜lŪ'ð'òê„¿2¯ŽÔ®±c³kÀ >Rãaµ[ vIÒ5ýžžKzØž›¦$ƒÛ…ox¾iüÌŽÚÑ÷›wŒ\ˆÃ´ ™*êÛòtnê#h}¨×¿”ÍZ8"þ†Ñk·›cI]‡'úÝÔô† ÿç•6°ˆêqLa¢{ÔiÞNh¾@"©C¤PÜ dÒ.ïd‚WÅevzÆêÙ=“Ž˜¨ËÖ€ç|’¹¯ê{Ø1;\0íþW® ú„™~A=#\ã8*l œ 8…ÔÛ“là4SibŠí‰HÔfM·ØÞ5‡3ÓÖtnn÷M“¸cù~•ÐB2¢äçOh¿~®¢µ•}}Rô ‹Lñmïps‡ë05)0«d€s³úÜ`ó×Ô¯*Ã\—„Ð…¡‚y¦J}iïV3桱‰=Äœ Û¶§Ì¤¼ )«æŒƒ*±ÀÒásY°‚/€bÖ F³v®9sx¬°ŠexÝ/;Â_šûTb2ŸªsÃ[\skÄ{°y6Ö½uL¤ëá8–ë5²¯¦ãÅ‘ttq$}A4ï|¼8òÉÅö.Žð«š„by½xQ^wnpí4™ ë„ìûÿ›ëìå£ðÕ·Fן®³GÚ‡kÿÏÈJs÷Úh§üÉIŒ‘“ÓÁwûèz’ Q_ÇN±½ÀN(¥¯!§¾%§ü–œú温GÜ´„®ûE뉓øêâ"þiÍÒuŒ`üjÆ*øU)‚Æ[€ÆÒ⪠³ç)ciNŒ¥#cA› z‚·ÆÂ¯&®ºÃß‹¼&R÷&¡©0|GS:ÖT4Õ(\rE(”ÍݦWÝfž¸ÐgÄï…·À¾ùÓ¯Œjû endstream endobj 124 0 obj <> stream xÚíZ[“Ó8~ß_‘G‡êh¬‹e{ö ¨í-–ŠæaŠ¡R&Qh/‰ÝØ]ì¯ßst$ßZé44û¶ElI>Ò¹}ç"_|þHü›ÃâÙÕâ—K±à1Ëã|qµ[ðlÁ%Ë“ÅÕö}ôüº¸éL³\I)#ñër¥”Š^7õ§¦8ÊêN¨è¶ì®iÉ?_½£‡7¦ØîËÊ,?\ýk¡g@<¶$¥´c+™2.+•³L؉÷—ËLFÇjÓ•uõÁ.úå’«çpš¶’œ,u„ʪ[®¡¢f¿þd*Ó”›õDzÚú/“1SB±”»ÿŠü’1ߊ ÕS^Š4ê?ðüíf¹‚sAÜmêªíˆ÷ N_ -~ò_Í·Ö|ñK§óÛ¢+.èË—æÛ¡¸!a¤9NW xN‚÷33>DÌtÏÆÒ­s±Rœi1¦ô E²¹ŽºkCpH ‡Ä—$‚£MµqS¹iLk*\Ñ™--ùhE0#Òv @@’Bä,—@§•Š)ívõlƒ¢ùXvMѸQYT;Ý€Mvæ\±ÄÛŠ:°'Ø¢ð"d!"+ÇŒ§c6r ÑT,Žf[ØÅ-(™óèöº@Cá"úlõ€OõŽ~ííSÙÒïŒÇ-Ñ@Éà¬SCˆï,8ÓGj9ÈÙïº)*¿5rzqGÛ9‡¤·ÞuäDê)K¼¾_¼½|÷êyX×R÷¦‹>ÀAÇ ²”Åbjÿ›Ù2¼§Ô¬çùÅÛߟ>ó -EÕ芀Qwö‰þvz·ì7{ùûÓ×'6KûÍBe]‘a»CA;ÙWUæ–Æ‡ýÝLá>¨ÌÆ´-š? ¢%ÇYߊò‰ÀʪìÊbO 3a `§¬P_—„GÚjÞÖô¢'øtKopò©å˽) (%N€y— ÓÉbf(üX°¿)šÖ¬‹j{î!¸ýP¸ŸAt¶fD•fê^èå  øX'¯‘06ˆ’9KZì0¦¢×Æø‰]ShmwmBî !˜ë^Î7Ǯ٣ä(ôÄ\í³×ÊíCàeš]Ýü” Rð!èàKoiÖšЖIN·–(á×e’€Ëâ£ÝFж-?UCÙ’ÒvõÑñD4CvýÖxè‚qÎ$=¼ïs»èEeE —åÞ|paû¦øäæ:3S&‰ ?LjQ?ktÚõ¶ý FìS’iÊ!£'¤¬ª8wÉÓ1l…ÌZÀs< ‡oȶTâf’ò”ž+ÖßU¬·òá`sf†™f½˜Hùj¬|8 )ð~’˜‚ÁÆøñˆ·ûÍA懕˜)Ç€†VLB¼DYB‚ArêÖ"zÚ¶6„G›²è(kN“èr™÷ƃ#*z ¶4I2„‡gcO™2ùS¿„†Ö1îC¶õ û}â¶'w?¬ôB€[“Å0×Ñ Ë]`ÈùnKQzòÿ©a&³Œ£~¶ôéä±wgNÉÝtòO#™#ŸyòøqÌû4TƱÞ1`NÑt忏·ÆïÎiÏl1x‚#ÿ¹Ì1s‡YòÄöV?1_|‚=QS†¶u[QÄŽù8#Âa4J;ØâÞ®FÙ,š‘'â …PâЈ²© ŠHzí€æ þ$8k•³îϪ-otöx¼9…4p\%ïGš\3`nÞ˜îØ8w¶#Ç €7_|ªh¼ñ$eIĺN€ˆH˜J¦9 $}œÿOuâY×»õçq4Õ‹,Í©*Mµ/M ü=Ä$‰|ÙçŒs;~%UƒŽÌ¤Æ-n1ðÞL ’eLCŠStâ*@™¤cEÃcŽ °þžº(Q,ãC%š®DTv_þÛ GYt€v"ÑVÏåÁ½I­žD/vá”[ ÷R6úæD,ÁP“´àÕ»ß~ ÑCÞŽŠÕrôæØ4.&»‚L –鱂Æ%…Š[²âï±5[àNC˜ s>{T9[G'Øxêù´TuªÿÀçÔw1¬Àõ,ÃH´³èïCÚVåøëÖÀdÔ¿üò am­ÏŽVÃwwÏ)bÛÙò¿€7ÈLϪßyÖëÒ}À8ò»Ú¹d;®ã0õ­}V[ïBV‚n§¾§P¿PÑL§)†õÈØàpu‹å÷•ñ„Î9äm® ü±îáÆ£ÅãËêký²-‡ÆmÞÒQ³ç,7{»àW‹/ ¦ÒÅ-°œ0!á4y‚-Œ d,éß÷‹·‹?¨+;M†Á €ešAâIPoƒË eãh¨K¥>¿ƒŽmOa´ðòg|B>³]¼³ä3ÏwOÞÅ©'÷e%»•8“5Ä, es1úmš>åSœzp0L]L[ˆÈQó€òtXB(©ÆÉ%~è’Ë–^ÝòšˆÍÒØQ°œÆ@n39LL ðXñ‰@:W6Cõ)}Š4t .ø|ÿ¬böAëS­lž¡Ú~ܨm±RPÿΣ™ L0ýÀI;„À÷J!0ßãGPXXî7±dçéËX±XO6¹‘„XÇå˜:êȼ>v`î¦8¸ÖKåP(°¡µAƤ31Ïz`}Nbob‰sµúijôþ8sÒ€ñ}i Dxò+±c[tï³”®µÑûËßqáÑ­íi:1u‰ð;÷»qýGlÛƒX†&‰W"[ãÛkË,PHå[(S C‚Á³‡4ª{ÙöjlûqcV(Jçh\Û¼êÇ3ɉ£¡pÑÛÀÏ×d“!WƒŠ^žíìúØH˜VnÃ÷Ágn$Rôé¾%Å€`Þ¨t yí÷õ¯DT4îžËi£O†CÀ)z<À1Ä íÈcꈠ‚|Î’Œs–³ÚÊR„â#µEL[™­Xí/ÈÑÿðÇ»ö©3Í¡¬ º¥Ç6äÒE}Fj™Ž>WÔý­hx€MüÆ2&ve/Þ3='„(kÛºél­ïzœÍ€ Pw­Ù£1Å©ƒMÍhÛ`Ń_¸{gÛq†UXëÛVé(a@"U[n©«Çí\8Ûu}ÜoiÕ®1fFeÈF€Ÿ ºUŸlz‡•Þ1æÿí ½ Ï9¶Ãÿ~˜`”`‹=I Úë¡s¬Šá=< †ÉŒqîöÚ¸vè7kG:dÑÃ[æSÐ?þö_µd endstream endobj 128 0 obj <> stream xÚ½YYsÜÆ~ϯÀ#VÅ…Áàrž,‹r)•¢c‰zH™.¸˜å"ÚV8D3©ü÷ô58H,)‡.•XÂ`0ÓÓÓýõ¹Îg'p|ø8‰‚?ßٜחÎwo•ø^ægÎåÖ R'½,r.‹_Ýwù±3Íj†¡«¾_­µÖî?šú¶É‡²ºÅÚ½+»/ùéâ#Þ›¼Ø—•Yývù7G«Àâ>‘ 5Í­ÃÄ ”³Ö™—*úðëÛUº}µéʺú}÷6ÐN7²¶Sà,BeÕ­Ö‘Òn³¿Î‹âzÛW‡üxmª®¹·»£éÅð¨@6_¹vÉôîÚSZlêªíø.›•JÜ].RxUåsÆãfOTÎ/ÏŽ§çÎQ‰ï©8¼8tðz:³ï{çƒó ‹|v®JàäˆV¥‰8äUñ|ˆ’LFò¡Ò^=G>T‘Sò «Í#Ú:ö@ù#m—~žv4\Xhw¬_•*O;kÀRÀXzµÝ.)Gkt,ºYÉŠé9ë8ò¢xJXÒ!HD…B Uµ@Ke^fáØÕ Ê(s»Aì»û’ô£zËÏ›²*ò›½|MÛ¬žè×"4âÄ&ù'ÄYä5óGH>Ï —¡ç+ËðΈ¥©çGS‰ œt3xÞ¬@®,çû½)Älw¦Zâ*}ïy fØ2å²Z©Øý²‚³êOø¿)ûÚÆí%áTøxÆÕ²Çe1ì=> !1ë×OÌô¼H}~ì’¬ýd~#PˆÙЧzA>­#<À3ß7àîífrC0Ú¢qÓ=‚Žtêk7ï»úw%ýý*U.ës2z Q¥ô¸]©xS*B 'n¿ïÊ#ú@\ÆBe¨ã;ž¾¼’¤‚ ázJDzX#oqÏQâFð³9ˆhn™&¤bõ‘]Y“ I¾ÀsÐé€kÄn»«û}ÁãÛ¦î8LêAFõ-Ø æ8ø†^,!íà’/NÏO[³È½Ü¡Vh—< ÙsJ´„ÎÓ47涬®QÓ¡¼`rbú¢ .$ÖSÛla~ ä *Ï3UÁ§=E5ðÓ‘I ™(e¾È\î$¤t(±{ö¾FÜ…NôW_È]Vè; Ý.·‰U^-„(äp tòÆ|oƒHì¤^ÇbziLšOXH¦êœ Òí6uað5rÿÃo~¾~sþ÷óËó³ÉÌ»‹çï/§3¯Ïzw18¿xÃoÿýëRVb9±p º¨ÁÞ ûTºécD îañN[ ÇßxåÁäYnÍO6C£ûù‚:ãÉeL€±pÆËák†Ô‚}žE.È`†\aÉWÄ8Ðè%k&KJ•|›zÁŒ„=!¢öï÷-ïd¿D@Ù%”ªZhï†8ç«ÙBÞj#ÛCãeFS¹–Äâ{Qò¤ÝЃ8â‘"ÂiÁŽ)ÓzÕc~+ÖÕ çlh)hl BR¥‹ŽåISWPPßă`Êö¼¸Ö{xµ—×zä¤ê²X¢¤ü'«’@GT¹¨ì‘â2·Í‘òIʲ!·Â”Bö!·Ù:NÀSû”‹Â«„*œ¡J´é7dAqhïij°§o{Šù’Mµ”^E‘»mj QLEAËC°•‡áÃ0~”S=•ê€ßxVj,ø¾.{ ¼Ø* sÁ4voúN. 1†C(¡Û µ+™Ui!Qa£²ÑJä éõ‚ù£™JÓup‚aÈ5u<³rT1ÛÁË{sK\´HaUü-¬ T+O¤ûã¾n)àT ©»é›Æp~Å_ÀðɆm—7¹;x9‘F)?ÃæÑIoÇ:üŸGQ)C›j„KI6!äø³zá†ÓÉrªIUýnâ+Ð…j„§÷ÐM¾Á¼ygk¶'Qê„i2÷Ý0/ñß_WÓf©~ ²~ä¥é×B–Ñ„©Šc 9iji€Ê^c RaW+H#/Ȇ‰Sm-\–E¼LÇâ:I÷…±Ý“¼;[ j¬Ã¿?€îªâLŠúICQ¹¯¨Î]’Eæ(_6¼Pe¨¬ @ß›ƒáj ¸]êÝ&z’%’9%C[$¡rŒffù:O]¹ùfS7…td&X›·²ÀX^ïÆ¼w¾[„ö:v|"‰f@6¿òƒÐlØô%®þñKÓS<…9 Y ‡¯US_t’|¢–˜ˆ½pÒû[lya8¬X2‘xD¶hš;DXñTby;v'‚Qlè„Oô>£žK¤É]ø’°13¿mc »ju.fO¡éo7 ¤K§j£‹ƒ¶€c3¿«CoklQá XFavüY9&甇Êê9ÙD£lÒÿS6 ód†ètkù,.˜Œn°]ͳ$ œ§ í±cßK§]K¼µÁ> stream xÚ½Y[ܶ~ï¯ÐKMáaDR¥>öâ"Z4Éö!ˆƒ©¬áìÖHcIãÍþûž ©¡v´vbØ êð<<×ïp£÷‘Œø'#£àÕ§è/wÑ·¯U$Q&etwˆdI-Ê,ºÛÿÿõX';l¶ZëXýy³MÓ4þÏÐßÕéÔt÷8‘ÆÍtd–üû¿<øÁVû¶éìæ—»F©’6OhKíÛ×RãAI)ñÔ­ãÙ¦¥(1*‘Š|³Ír»í›ñÜVÄny(³.@bmU&’”ÿüzSèøÒÕSÓw¿øÓHJ¸ZF'ºE,Õ‡¾ÙÃY*‡v7¸ãüQ2 õ#•/{{–PœT(Ïða£Š÷^ÙI%~—Íʶ21"‡Ç9ct÷l AåÇjúfÄq;Ý(ºÓìžYúާ§£åÁXÖv<9õLì›Df¶ž¼i\_†xUÓŒŽëž¿XÄÓèÎ88ÉuhÌ]¸»:ÑvÄ·uSÁ¥Þ^p°›¦BçnAóZ%¢`åT”ÅgY¹é¦Ùȇ~¨í~w9ï«Éî>fðB Y¾„ÁM.ò4T]åmkoPdÁ(g;åíf‹¦gâå _&Æ‹í™Runà];ð–W0“'àQö˜­xÛ®Ÿ˜0dz¤éÞN‚#y î] SAx TÜŒœ6ê|¬žœq³LHó¥ŒÛw»Î>ìæ tÃ…Hõ§Lš^Mj>פ ’„š¹ÃKÙ¶À®dQÉ 2îâ¨+ 8ˆwžx@iÓ‘ÔJ.G”<>õ¥|@’ Üž¿*^ ÚáßÄötžÈ:pbA­½Âa_ÆKÕ¶¼¦:L.R¶î/Óù2M®h:~àÜè+[w‡µgwz¼Äš¥K-Lö–.JÌ«–V¹fK«< ƒ“ ¥ñ“-#oi\¾´4RÐÒæji$¡¥ Y¿*Þ…,gVe ìUhiD©æÌM,¿‹ÞG"5ÑC¤î¨T&€‹$Ÿ môcô=#Šå¶ÀEØJÚ{a°e%>.«v€¤óè G*TïM˜L|w¤ü‚5¬¿´{¾%[þ¸Œv&»¬®:ŸÛ¦®|ÌIo ‘%*®|ÌMᄜßó»ÜíhFO¢9jðÌw"ˆc¬hzä_‹Œ‘pùŒ‘ˆÿ‚Ö%§âžì6Z€ìÒÇë¶ŸϼŽx+`4¤&æ²Çæ-vlx€ †©j:Âïj‘‹h[„ÌØÐú9w*¶n0f—L!Æ‹÷Hd¬õkÉ@ÒœPÿ¸À¹RÿÐóÍ+ô'åÞ+pëÎ…F ŽYí÷ Qµ|Þl,ÃRÖšýpxd§á­4Ùp›ñ€\™«Ti–úG®¥&€adÝ.5Xf¿ó‹ˆ]ZFøé]ǘ ðwí¥.£AÓþ)åiûT(¡<„´¬xw/7\ ¼µZQ²JDdö@ .ÕuKø’¼ÑIjø­ÚÑÍ1ÄG¿ªeZG²Xe€œåö[I:ø†«G[ ³#IߨŒÓ[–9¸ÛOôv4g×>$7q]µíŠïÑ¥¼V¾±ú`wÏvžtPbÍ!\—ï+¹{‚Ã#çþ ØšŽsù \ÌÕ2d¼™.[ì–ùSóùÇ€¯‚5KËÓRS!~—N•ãû[ø¶²aÇìßÄ`à%…‚b$˜-¯E2z-5­%#–óÚŽÓëgj-ó~,’ûS¬ªx¹V³õÓ·nò±çÞºŸõ(Eœ"‘ü&Îy—Ý'õm5NÜš³\4¹&—Ä¡ŽüŽ7õ9<äTÁéøœåÏÅ”*± ö…´7 Ï"àÞÎkMX/%J}éàXüÑç6;,cŽ1/ÒBCÚ“‹úÇEJtþ` ‰êI™5UD£Ãgz£fÇÇñ¢çÆ=\;sT`5€Þ3@cÎc8AHg‚4ÏE 6¨˜[ä| ]FÀaC¨ÃÙÔÕ¶ó«äA€É‚4îV¿Y×ß²…q/>ßÿáÿãvY endstream endobj 134 0 obj <> stream xÚµZK“Û¸¾çWèjk…%‚ä´ñÚ[“Š½Þ±’‹íš¢)Èb™µ$5“ù÷éH‚25rųå©È~~Ý xñÇB.Bø'‰‚¿pQìÿX/~z¥2Y˜-ÖÛ…LR‹Ì,Ö›÷Á‹]~ìl³\i­õ·å*Š¢àmSnòý¾<|FB<”ÝŽ§üúæß<¸µù¦*vùqýÏE¤¤€ÅCZRÇôn¥!Õbe"UDxÿj™êàt(º²>|¤I?½’ÑBJàÆ k+g‰[è¾.7Ë•QQÐTwm»º±wǦÞ»þcãËia"÷퇠Ÿâ‹ ÕO¸_ª$À fVRa¿ÊÒ‘ýEVR§"KñWHÖâ-3Ú‹Ó Û¹AU/W* мÂçlTQ DÙ”í±Ê‘£G|‘m—w–i-½vÓÀnøÓOÃLo·}ݺÕ[ØNéx1`ÀqÐÕNíÉú’€¦ÛüþL;ôi(ÀX=b¹JC”Û™U•a?ïú¢]…'? ¤y E¬“Ô0æáWOâ(;7t Ó>‘òí–íĜߓ6ÈAeš =±ã¬~d$ä(ÈÞ¶mþÙÎa¡z×ýöR+QP[çöøí®>U¦8>™0Èž D(EÝ@8‰^6¦ôž SçÑ IlFQ\˜¦±•¯…¢²yó„ I$"3¸Òx Î ` ÖÿW¬—‡nuûßc~Ø<é:ļé=‹zÊ.w÷ÃåecPÏÓŸÌi_U/‰U®üà…¥³Ž-Ê>ú ¤yAxK“ì'{(lË3ÊÜ$J¡{ÔºAQ8bßÀQk"œŽ.þwT.B¹„2F¤“ÀèKg àeWøê~i¢ oÊüSe[@…X©`M¾ÔÑ÷u¦~«WDZ´‰ˆ‡èsL~˜7ănË{`6ffeWmÝoË¡Çq Ô™Ð=‡JK¥U`ÁqLÚDâ±)÷yóÈo{Uá‘¿ÞÙ9áB)”ã±>ÜìÊx‡×EÀqe üö9wP1‹ž,%‹½næ€M‰$·Ï+Tð£ÛÕnæö„ðMã!ƒÓÄLR2­JÀÝZ»ˆ€1Y_5¶;5GgÅÁ€"æ´ÇE[$Fê-ÿÞ—mé–?‹ Öa¸Šr<«‘Ÿ%!o‚ƒ*ÇĨpòÅw¸¾7IЉºÅ ùåžØ«ºrEn·„·+¬Ϙ8øùx¬Ê"GÝ·¼ä~ x( Jå¼[α;I¹ÌChÆ ƒqb€úº¼¤u15L¥§Y´ ò/Hw+a¼ãï=ŒƒãŽxjK x¤´EcíÁyá>|ØñËxR’péñãCù€/dø Mî8%Á{Jºá€tü„Ú"À§}³ã©çâ .<ñ†.ühЬ5Þ°ðÎ)β^dD¦ÏÞþëîíío¯ß®ûäÇDO¨wëŸo×w7¿¾ùíöå\Fz8;Õ"ÉWÛ½|óËåE¥LEª‡|¶±E•7ŒjÌ þ&±ZŸÁ¢Ø}(öÀ¬=W…}¦`¨•ÐÒ× Æ4gP„Büµ.n{šm kÈ«Õh¥¡Œ n#l[äf–_x ¿.üËÐrm¡!Éä¹j H‰O‰Ò|sa1á@Ï~Ì5†zªÆÈ´·Á|‘µ”ñUÿzˆm•E^¡2ƒf™ã2S× èaâ¾`€“×nOŸØ$„=ünšîAñˆìÓØÌ“s‘'ãLD^‚™Ôu²`O8䮡(gs©—üŒ0spö¦ FžåÇ@ÔÄ#?uƒ×——ýînGÔG )AôZרL‡™$敦Z ~…Éès%"‘€÷Å*x+IÖí#7Ö‰ ÖË ›7¹0®¥²ïö{H#¶éîºq¯3ÇOE¤¿µw_ íŠëKë'‰¯ÕÖáßËs¬h96 ݼö@kRz fÕgÈ(é«Qâ‘Tœ Áê[h¤À‹ƒÇ®ïjK4Cj (]y3Yf¶¼A•¸¬ƒ£®‰„‰} ¹žÀÕ…Õ9*Fßí[ÙÎ>“w”ƒâ Û.oº9r&{˜=zI2²+Ž¢1Š=-ýB܃!¤ ÓHFì4r‰­ÃÍHíl£% {!ˆï9¿òòé˜ÿ§ ›ÏÂF)§-sÞ„ñÞ÷€‘B¹RwnFö_ nÆÙ8&7CB½uEr¦°Ñð[›ób,ÂN°y®¬[* ƒý€?ý¬¨—½ JùD~§—iŸ Ÿò²ôŠ—eg}ëž—ÍøÕǾ€‚' j?7± ¢ç»èïЪt¾uÉãD$ñ5Œ…ή¸ 4–òš †ÚsÁIŠ›Âè—]WA(HÒçÂ/eU]ö‡N!žÃâo@+þ‡br8ðb´}Ò«º³9ŒÎ`ç²Íñ0^_·y]µyœ\³ù %Ù<é³ar;(Rß,Μã\ ÙxÔ@%ƒz†˜]iÏ’î„U#ÒùÝ9fÀOI¬ëÜù%i±žhS ­»¶Ôt¦raRQï÷\ÂA}Þòœü|7Upi¶æµ†Mè˜ê«†w@HÈÔYp³3ƒñ„'¬9¼P/†—¶u#hêgZ¹øé¼"ã1ÌÐ*Iâ´„«²dq:ìÈ# Ø›^Ãüæ¡lmÔa£²ÜÐnßl{>]³(!WÄ“àp&ѾI´ox8ÔÝLÑ6®Ppoöa$¹âÛ]IA_õß“<@ãS§ç/ŽŽ§vw·Ï‹¦†*úxºp÷”‰ô›s—_4C·HkÏ­jRa®5‹ú –ò !ÔÌÊøNæ@'ù} Çë fC Ê$¯®Ý¡¾Fà@CJöƙ[÷}ÇÏ»|3Y†éj§þÒßxá‡ýQŽsžË=ñcO§šütpëºûUQåUÔì3¤Á·oê®?žpÎŽGKtÈ^µ=UçÏFÝž÷¹™wEäõZºÜÌŒU$Ìî ¥¿ÐPfš®§ eʨõb¼M@,¾ñœóÏk$ñ´éî‹}œ=ÜÈÆ ”?ñþ´n:Wš©>-(D<¥‡.«×•Â|@~fâ /+>ÀƙۦÞó¨?eùkëÖ˜¤G…Çr¨m¢µ(eOÞÔ‹àk€ñÕL©,›„ý <ìãJeÒ‹+¤ña¹?_ºùõ}™Ï—Pó‡4ååzñÇd %\mCCÉÅ›PDÃsµx·øÿëÀtÕDâ•M‹ÝÕŸÆÏvÐDXwÑ’®…¯mƒÓÒh²MyÁ»U:·~Zë”õκ+'|PB³ÞÞ£Y]³­À²ÉA“»›×2øÆGŸõ/s ŽxJdeð.GóGÀ22c ˆ‡ŽÝi»½Ã†è¤f·!TëøFϧgä:¤ó_æ†Ü×™à÷¿üS¾Â endstream endobj 137 0 obj <> stream xÚ½ZYoÉ~ϯä%ÃÀì>æJÞØ{‘UdäaµFd“hziµ¿>U]=Ù”´¶Øûš>êøú«jy_=îð{±€ÿ·)½¿]{?|X¤ÞõÎã‰Ç%KCïzû³ÿ÷Cvìt³ZK)}ñ—ÕZ)åÿ»©÷MV–yµÇå?æÝ†üãÇ/T¸ÒÙ¶È+½úåúŸžœÁä™RƦm-SÁDê­UÊazºƒ†cé߯Dìë§»Õ~ë¬Ù²Õ:Œ"ÿ¿‡¼0C`I’åí¾ÙÕ õäÕ±ïÞA9Q0cÞÚî¾Úty]Ù¯ó¢ Ò&JY…S>¹†gm›ï+½5¼5ȇ“|ºšŽ‹[ÇÎ>È™(¥`\Øc7Å­~ÐUw{¨ë{;v.ö8™Dô° C?kòì®ÐÌŒJ±4òÖ H™1?X%Ò·ÛüÅNÈ•Ç9è.ÄA ÇØÎ™WQ(ÜÈ^w›á‹p¾ÅB;üÆÌ7©˜PvÀ‡ŸÞÓÙÿÜvÎJׄQÄ¢a•ãÐkÎ#ª¹D¯t×7 w!„€%*ýkG¥ *é5ÙÆ˜%ŽÊ° D=(2jÞ5ué:»§]-¶.–ªÜc¡ð9­Nó£eáŽÀ8úlÃTаM7ñíîÇc8ìWæ2`qòVÊm»~·»Ý€Œ\á\ ¤_Pr8λ‚ct¤g§ÉÀžCþ¼Šƒ”q>WñǪÕMçZZòÑ^6޹R¦Ôlg1¹_˜Z䈂 v Æ ¨ƒ8"BÿcGý {Ð×¹‹ dr8á› Y<ú8¬îœ‚Eê™R §&ÓÐfÎe]§ËcׂŠD0ŸÂ‘H%mJjé/h±©õ ÓK– @'ÀyVP³Áóósð4Õ††‹ÜÞë§·âLÔ`G w%¹ÿåhW«i j€]F§»,3Âc:*Ì„ó£ZI¡iFþ±oè‚R†þ]fÎ|Ï'HÀ¾Òég®rÈœŠEPjiN?ùŽÖ&Ûƒ†hÂ&º¥Zº%Û~³Ñm»ë‹â‰>Í#èí_é<„«p~Æ€¯†%šÇ¼µw CÆc‚‹ø»áBÿª7}§o ĺC(ó×Þ Ö-qß⛆€CÌäð9#ätBFÀù,fÄñ̹ (Ë”[µAî,mê²Ì*4#0?-иøÈ kKµÇƒ®\îÎAb¿ÃO’ @ [Á+ÑÈz"žø×Hbˆ2IÉÄÂBZmÁàD* B)Ç-˜ﯽ¯S±÷èÅ`?bRx¥§Ø<Ô ï?ÞOD S&ªÙŒ é–:’ V[$a'Kpž°$™-Â…¹x^Z‡¥b± ¡ø¹àD8Ã’BÉÞŒ$m 5·G:Þí|Kÿˆ’ Ý_ô´ã:ß:=#xÞ-"€À…ò¿|¸¯QÁ¢ËÚOb†zfߥ—è!Cý’^RnxŽJâ—µ^É“Ù",W…/®Â%ÈJ,–yö ©$õõMÀ¥])kDY&ààûŒâ¬¿ÇÂ0šjõŽ~1 ˆ|óeìý×}K]*˜9j—ÛÇrbV`?Öe“ˆb®µ9à^€„$˜*‚@"ÖŠK¼S"¿nîM•ûueÎ x!á/ G‚.Ò´ˆaç!³óUµmÉ D*;™½^àLud6kÚÛì<È\Iød|9Dx£[W¿CÒM¾|Û奮Ý>-€$‡É7Ýy½s>Ábù¬s (Ç ~cc]¥‚e¬«dJ±.öœÔ<¨Ù]DÄ4q›ß¥t5ˆÄ'Zj6hx´Ý*†aÝ´OWÆSô š°w,¥d¸@Ë|=xRŒô&¢MS·zSW[C°›€uÞE{}[B-É‹mâ"¼]Êxóc×ó›šÛãIÕkãû3 ?½_Y=#“tâ%e}ÛY¹Àõp75Ê%>ª0NÊ*j®m‹þÚ#ë75uý¦›šZn ¶›Ö…®ö&σc­ó˜^ÃZh.€ÞP’è1pTÉ8qFÖꢸYa\ôÿÚfO©•­Þe}acÏeºüÌb[“צ°¥a¹¥Úu¥×&¿<Ðõކd–ŒÃa”кšè½ø<ÐîÂÎ:º)7SôzT¢Ä|Yrrä„™{ -ÁK1{¾‚£Žqæ•>gU¶×%lT¾ë’³x¶FR”|> ÙPî³ãíê¹ÈŒŒ™ˆ¾ øJÝe§4@ cܑ„b ’%jl¸DüE8 ”öð0Û»ù×tØ Ä \/^„ÉŸkã!Û|÷DpFW&Fý¨(Fv×R¡î üþd;úV#,¦©ß:a"Œ˜â³~{j#ˆè”Ø ¯âüÍc)£Ÿ6Uhëþ@´ãE´t‡«±h˜Y4ƒ¦¥pˆ5ûï”ÈÞ)Ñ|Uh¾íŽ4€– phœÉ &–À’ÄpIÛpÑ’/f˜rXÁI¸3XmÖìûr‚8Y{¨ûb»¸¨RÕÕÚ€¥€_/óTùî$—mjÓtCžaAçûƒñ†õ]n=ÂÜBç!{ôý~¼Õ/{²2·Âÿ!,Q!jq–lÍý1¤FT»É¢\ð¾0%„^òÜŠ„ÉôèÒÖcqº5p!N© ܧ£ „7:Ði¼¥ÆÀ°ÓÆ´=æc±îÆÅ4X,Ÿ¿,-iø©…Ç*! 7+RÅÚ¸›ß-ÛÜ¾Šš>ùõvŽ«œeƒFó† b¤v|ý#eÙ7ßÅs¶ö‚l/¯6l/¢Ì¡m¸ÈöùÒ(©ÌÚUVj§{†L=ÿ¨,T`ËQ‘u¦¼ÃËŠü7|ðŠø‚Ãc=ßo0% ñ—ÞÆ°0½AmŠ °Ö·Cöóì<é”ó¹$,Ƙ _GÀ¡A)¥'#˜Ò±á’°$ÈìÈ O…µäÐôf­ë\ƒÓ*iÞ& ¶D Y4ÞJÇ1§`òšíÙ;‡Cưÿ:îMES6̤ÿãÎ)E9½=]´8® æŽDŒaXsi¶á¢Å¡ð ‹ž—¢´ñ…ÆC`ÚÉ~üòéÓ ×32ÕPLØis&½%¢&S¡Ò SÑT<¸çõû«Ïn”¥F,ó!oêjŒŠ¬ÆOŸæub#›×þ©Èý§?ü87Ê endstream endobj 140 0 obj <> stream xÚ½YÝsܸ ï_¡·j3OüÐ×õéz;é\¯½Ä™{H2y—ëÕT{’ÖŽó× HI»¡íÄv;öŒ(øÄ<ˆá™€ÿ8X7Á_/‚ÎEÀcVÄEp± xpÉŠ$¸Ø|Þ•ûQ÷«HJŠW‘R*üwß]÷eÓTí5.¨ð¶wDò÷_ßÓà­.7uÕêÕ§‹JpÌcÃRæfî‡s.q£¸à¸kdi"U°\BÁãñ*JR¾«ºW2ÂóU!ÃC»«®,Ã¥2² Щܰûp¾Ê§O>9TÀ9(›ìG$gÕŽ°·Pa__徯rÔî»di1.LÐgCG²G1ᆱ?¬G´’û¥•^_LeÁm bÅ$HŸÆŒó ÷Œ¥Ê½×Á»à7:¸£MDœ3Å •Lì^(²9WÃÞ'»,QNô•ÇÊŸDpVœ¸¾+W" oV"‘9ça‰m¹vÝHoÝŸ³+üy ùªÅÏÁ«Ú²¦Ï˜°8v>ó › gÀ½GLIwr ÜTfáÅÎò\wvÇEÚÔ‰7î´oKK–Z†÷“‚‰4ˆ2‰Þ–H÷~ß1)‘2"Z’Çò2+Ø‘áÉu=ê%â°tƒM·Š@³õ¡ÑVÓ êV ©‰¯\j&óÙVN5¶óHdL,ªbkTØs]ÖµÁÃj ¹^ÃÙ $“ÕUm)·]oå­k+h9vÀ·Îü/ããu™¡IÂ8†´dyòìYÇ®(ª% ój\€‚ðP£ÜĽa-à‘¥/×༠ßÂÞoÉ$pDJE­PÒDm:E-RX!pqììsWŽ42œ6Ó§¾˜– NúXL;‚3`•òðvW­ÑÃw$BƒãÃ0ÒÛ®D.áÌ•q7 QA/6Ž8ÜѸ$GJ±X, ƒ¾Ž•Ïð´ (P$æ.ž<Éb©Sù(YâTápªðâTnq*§ þP‰"Ewˆ8d×̸^i–O÷¹žŒc–dDV<ŒVठžnºj3áîé l°T–=†J.òoÐʆ+âÒ«F7>– ”/òA¬àPYÈ#lþ›¶hž!šc¸IJ¥fuý÷†¨søq'9!¬Úøó9v– k’X³äÇÂb9³‡GÆ’G8$èß–£ŽÀD˜dd@M"/Á$_f3ÒêD›ãœ»8ç?]ûŠV5éX<#áyT¯÷u¹Ö—@<+áX 6ß­ñdweo½lÔŸÇ3 {è–¬Ö@sŠLYÊr…ÙHbl2妯u÷&E Ë3"+(Üí¦óé…ió‘Tx‘ñãThl…-È­q`:]´’¦ô8/˜,椀F¿¼:l·º÷H+æhÍ]Ê—.V8_G ûòe1ß²õ2Å õPt o¶ö¦¹²ÝР)ûÿàHTú^G.‚&GÆtOq±Á¬œC™¹Ågì6 †"ÞlýY+Æüc]Éç< ‰gc70÷éý>¿@*€_C&¾ò‹“„5á$æ‘aÛµÑÝw¨WÁ-žb†…¡¨+0WƒÿÊLÒMGô-|±>ô½¶q@….Ô±riO/6‹èÍ×uï $ðÝn<y i¾ˆšÇòÌäVçµn}]Rþp–³K‹¥e^·U2¦Úòë@Ã+qþÍq˜âˆwå@ŒuÛ®Mÿn¢{õf¿Žž»®Þx]XÌÄYåc_dÉ—ˆ€‘åJèáŒX/ã厀²¦v‡ÅQàÍ wªFªÑzΖž­^ëa(!ùæ"ü_Ü›ª¶«²®¾¼@+ÄTâè›>ÔŽ©H2°þÂ6of¹"«k7'`Ш:YZ^mä¸!¦ÈK“<|3:º;´ÜWëÌLO&7¯è7Hd. (y¼sÜUÃ_îa!Ã9‚­R¶]¯]m[n&w)[{ßÁ@­Úýa´ÅkZ`}Æ,}Äìç9Sˆïä;J×§úêrT¬¾µú˹x‡Ón*j@ÍF«ë32SweMßyª~=Ž;oê"žÕ¸¦Ñ0ÞÕúÑk ®gÞ‰_(TËz¿+¯ôX­Ÿª•<6=y…³ä|‹@{«áþÔS>™G’$Mꫜ‹Y—CKË—¬@Œ¦°`Á±»¿˜^ªÚÞT”w—M9®w—¦lxvšuRÛBûò6µ·¦Œ"¾JÄÖŸ¦›ò³W”DáïÁ:¹È±Qµ8ÀŸ°Ÿ¹Â˜:+m¥[“Daak­‡o¹½PÃ4?±s%ÑP…¦ñ3ˆ¶íõ@/•eµîêCÓSã¦iì6C”¾à©Â‡Çf]6ÌWÊÇ KóéîÇ©}¿8(,O.˜æ4ÒI©Ô*•NJ‘ªF«;%×74"ìòppM/dQZîå1ïÜ¡5ulg/µ—µf_k:‘&áÂqüs&,mââ|Y<§©­x»ñ…ƒ¹N[íi•GÊéDñåžNO²¸ºßoóx¾ñœQ¹—&§,I'vŸ¿I£Äi”¢®Macge€Óì_ævs]ò®½ÖtOȬ²4öêZdß«ª¹ZaãК/à ߃¶óV¢lÎZøâ¿°¦bJÎ{xŒf§lEŠíÀcßu}õ¥kG¨Cî|ÝNÉbgvSO(J­M§Æ»]å_¬ÿàìÂ;i…ˆÅn¸&.®¦†"ßi‡7@ÎJÃG?HF$ØIùHEùyEý?¾»£k[ùù“+ØËk»¦>®lcñ÷niÎI—9Tƒ/F<#ªqGŠ/Á¯z…ÝÄ ö¡ñ Ø"®’‚â*q 8Ð xÁ†– ìâÔB@š0]¸Ä’Þ¬’2æÁ¼Þã)î5BLm §_d3^t[mF_S–Ëlî}›huC6V´1y$£4[jÜmO*8j!ßT}׺v2å7Ò¡¯Ê«©è:nÅ©¹€þù_¿¼ÿç¯ï‡Síõ'" ë^Óáãoà õÜö²„&)aAÙo\ñ<§ÅThPo:pRØTUnÉn}Ö*4t£ç6ªYh±)×}g< Nm£?Æ\µD#ü # ¢šzék¨)6z;|K/=‰ãð§ý¾®ðŠ¿½›=†]w°×äHŠü¤þîõ¶/Q¶}×Ðè0,ër›{§îŸ¹„2ì°ßë~]úÒû3‡{WÆŸÔæxj $iúÿ.‚Á T[|_aüú"øíOÿšD·¸ endstream endobj 143 0 obj <> stream xÚÕZÝoÜ6¿¿bߢ-"Uü(õÞZÔ‡Þ¡E¯ñ¡qà“µ´WÈ®´•´v}ýÍpH‰²¹›/£h‘ ¢HŠœïùÍlV¿­Ø*…?l¥8üMWõ~õíåêë ¾biR¦åêòvÅŠI™­.7o£ï¶ÕaÔý:BDü›u,¥Œ~î»»¾Úï›ödôÐŒ[ÚòŸþCƒ_tµÙ5­^¿»üçJr–Àá©9R”f.*a|Ë2)¸Yx{±.Dtlë±éÚwfÓ×L®j2$-P¦ìAM;®ãŒËèºß]ïºÝ×Õ ¯îËÌgŠËD1ûáUä¶ø|Ë„Ëéä5Wшœð¨ eÓqk»Ã?-f°%Ïá)F²üEǾ%ñ0z4·!J²|&¥œ]≖Òªè±ëð‡5/"’†]ݶÕÍ:Æé±©i²Æ­Ûª¯jPpb®áE™¨h.^~¹N6Í]3†õQ–Iþ²ÚàgµQæIöG+Ã}Üëþã$.¾\àcw}<À]CfIQü¡ò¤¾ÐJFŒ‘p‘_Â÷*X9)×BÍÆ€Bq>,YîS¢M*ŸåYÕY–0õRÎKÑò¾ÚõŸ5ƒTvÉ>%BrŠÒEHÔ€Õ®Q$„ÊI‘°‹ “÷ë,‹Œ|(^nïô«‰ã!q$ „1)P†¼È")€Γ”TÅ Q¤ŸóèÇf¨õnWµº;"*‹.Öå¤È!À“Uc "R_¨{Pý¾ªûîú¦i7AÍ3>Kð¤æÝ†žôN–Lo_½GéÇAÿf…Þ ¥…‘eà6H|@€‚'¥ŠÍnGWÙ`áît?¢°¹Ñ®H™ 0¥ˆa^‚ˆbÝZouabDæËÓá¹ ˜º‚;þNÇÁ1$ü¤V`p!ZÁ©ït‹ÐϸõUØ X: <*& ^ Ü "Ççç•û®Ù< .›ãþ0)ÚÑG†”oM‘·ÚT7»`¾Üœ—çóK.L8 üç~Ê[¼Ì­–…J5‚ÖȺ£‰ðnž†í>©¦Å­nzNÉd0V*A©ä¥š/®f’”£<íµa)]ƒ.`°,=«èŽã0‚Üö‰äÅŒšÐX;•q!¬8=ÑÁBm2…勒GmׯÿÓÜefD¢ƒ˜T Å´CP5’cIãXfy8R®À7f9L>àT…–ñH»Çm5ÚïFë^2KÔBÛueë/[™ÒË¾ÚØÑ¡êGJAÝ­-¬Ú€Y6K£iDZ¡)fá^¥Lî\mŒ¶AÆ÷³ BÁÈó—€v óûªoPE§3ü'¹àé O6M—ÏñÂm>…6 ™Èì¬ûò2ÅêÃSè•Ë  ü=µ‚ –‡k¥£1hÛBÌ7û …tÊfßVSú žËå,⧬?Ù—e~º,]Æ`JÅ»r{—+_ìŽævÁ}aüsæ¾îö¶ªàp‘È—é›LQEÿ ˜9ˆeâuУc1]fú¡ gs9Ÿ`Vs_îݽ­,Ö+µqRü®ë#EXlìlØ#yž”ò£rT’r<=䨨“K䨄CŽøÝH3„abƉj‰0mq"Ì™ø¢d8+ÅÄ”_ß½Xè¯ò…À"äökàH·×7`‹ï¯Çf¯Á&‚U™ÙgyÔ1صá×a_c- þÆÊHÙJ‚+L{MSöFÝÛ4@³WÆ p´o°DÓÏ6ÜG_õãêœpžì¤Z|À† Û“Ïo¨|úà¦ÚUm³Ïê´Eמäñ0wD|›QùÜ¿1êˆÁ°ë-œcw1ÇÚm5,Jm+Ý¢ãMå>à¶Gw`GÀÞ¾wè$Hž!ä€*âÄñ À­ü@XVI*Ÿ@¾Ñ÷® W:›*ó)ÍâØÃ¸}Þkä‘cÚ¼À ºivJàÔÇp]À’ÂÅß:ØAcy"”v}à‚·Üê‘ÄBM‰ì91ù³‚ŠJ`97§ÙtÑcìËNPpÍŸ4 Ì Ø´èK¸Œ‰F™`pLºÉ±ÙÑ î'†fZìè¼}7—24SõÔL¡#ôs÷êÞ2ide¡ ü&Ít„‡pèÈíï1ºn0¾ÖtZç~a«LߥËÜ15fa,ÚF0í|¸îK—ÿï`Aö¦#ÂÊ_m7Òàh„T`¦ÞÑÀ¤‘ÂD“é,ͯ엾01‚šIú&+6v×Ô\4o¶wYÌ¿9âx ÓryNw×îÉÙœBÑ — õÿÃ…Áh]¾¿\ýûoÿÚ endstream endobj 146 0 obj <> stream xÚ½YYoÜF~ß_Á7s M›}ðJž’ÀÞx‘Ø›µŒ<ÄBqZ!9&9–…ýó[G7e+‹ì"F¦ÙGUw_•‚ "øO©‚QPîƒïσ¯T #‘Gyp~È,Zäqp¾û-üá¦8 ¶ÛlµÖ¡úf³5Æ„ÿìÚë®Øï«æLxW 7¼åïoÞóà_¶ØÕUc7¿Ÿÿ#0J IÑÜV§Bª`kr‘)ZøíÕ&Óá±)‡ªm~§M/^IH ·‰ñj[ÁÍRGèS[í6ÛX™°«/ÊÚÝÅMÕmwïÏÆóg?•¸£B¿eþr#”ñ´7* ‘þ %y*·<'²•Z‰„t2Ä«m¶*OÃáÆâ ýE飆]"Û{Þ»³µHĸRÔ5Ú+þIÙ ]eû3}dª9ÙÒ{7ÚMc;G²?ÙöãLzÑüuuÙÝý³Þ½WÏ…f„öR[(áú|r0íö_9e‹Í6‹Mx'ÁÂÒ(ÜU"©mç>¯ºv¿ÂZêMh…÷ ß4qæö^Â{Apeqì-s¨g”±ÑB{Wµ=Ûô¡«>mâ8,Ë»b(N̾úUB6Ägé—HØè3£à,Z€ð¶¦Ñÿ¢\’5©Ldð#bI×QÂÀ›Áì~Wƒk6|›4_7…0uU”vE¨ÒT$šè|‡6¢S°«‘†Ò^ÉÑ€©$Dà’{Sœ„EU—µeCË¿‡º€Ã+JÊS¡c'øÎ‰éÛˆÁE½wƒM©ÂwíÞ]­8êª,Ð^zfÙX»ã5‰ñú` N gV­Õ&j®Ú[RÐ=Z8{Ñ1GáëoyàÂŒÀMmÁ½Lƒc~ªJÿÑv~o³k‘Þ|gyØß÷ƒÝãšD‚g¼k ÿ>À3êúž§¼Ëã¡cÏ!¦ >º/Èp`¢nÉhÛƒ£Ô®Èzá´=ÄrxLÒRHï…-p0éÖ„EWµGt»,q¯æÅíË®:€Éö ™ã->Üð *|ÔÍXöX¶!^"©ƒqljóÛYÇÈ<Ùñü)¡‰âò¾`³{eY\lÑßo2rHpI \hùdJÌíÅMÑìjÛ]TM?`zYMu‰ÐOÍ™%ˆ`àØo ‡ž@Ô‡áŒU*“H¤N§ Gæýò<ø“wA‹ ðWy°Çà ÷òßuð.ø…‹< ñ¹â]±öi< Ëjè”…”—&RE¾ÂD–ÑÙ‚‹{ôóÚItM’±Â×~7¨D¤fnï,‚T†Çþ*—©q`;@_EÍËW„pzò-ü¢8†¸oÜU=„é x!b 0ç‘`ÕTCÅôÀ>àÅVøâ”W-Óü±b:1"÷Õ½òF ™ñ¬ÁD‘‹„ûn¹!!ç.g&Ñü*8¿~•,©tLN4²0\êãmä›1Æ_Lj‚IÂQ8‘¡§Bs³(’D|~Kh8º»±Íì4,4Ê9Ò#(…çè<³§#¶Ã¨_5‡#U®€uÏs.,m˜·>ÓÙ„¦DfšüÛ|ór4ÒV.u–-ìgÇ’o¡¦%l`Ê_¦h†¯¢»>îݵ\àŠcÒí_¸ÐÌ/J /k8?ÉDbþ8L>Êæø4ïrÙJÆ™ül†]p!‡tÊ.Lj G,^¹E÷dP’xP‚Õ™ì¨ÜŸhbŸhd¤)bYZïoÚc½ã3åà «"~?H-1ˆ³|€¯‚twwSqÜg,vWQÉè ‰9°xãÀ\CÖ†#Ÿ*Š’êLÜÅ™y±¿p ýŒ3 )cTã-•;?Ë׊Mœ;˜ã2w`kÁ,úà4öÊh¢öHìÚfj7ß‹4ñ¢®‚=c]µìãAÙOI”ÚÙÃÚöÅ"ÀŸÅxB #"¥‹l]…gŒ7>ÎNÔÎqƒÎeBìº&ªöbt]“ÏäR´¡å)—”×YBÀV­K¢ûª]÷•»®³Î/|½ü\ üZ÷õGî"A9Í`^’s¥j®B˜œ!jütP¹¹öUCMaáŽÂBW”Š`zo}Ñ2 CÕ1¯ãáÀ:ÊÐ~À¶ò…Ó#½ƒÄ3m;foEØ»Uê&™--‹)<bâa²®ÚŠc0–G™ Ïç„ýkT¹™š%?o%»NÄ?ë/†¸ª“ñÅÄþ ïã`¤Èòenò(‹^6ûµ÷ÿ(j­ÌüiÒ‰“ýߺ?¹Lû™Ý¿JaâEε×UOâÄóŽhŒX¨óD;¸Qõ­oåþò·ÿŽŠæ endstream endobj 149 0 obj <> stream xÚµUmo›0þ¾_á}ƒ¶ ä­]2iÓ2iÒ¦mbŸš*rÁ$–3Çi4Mûïl´Ò¦D²9Ÿïžó=w~œâÁÔ-þSð.£•  cÏ9bgzö| ‚èÞx¿C9ÇÌ´<Ï3Ü[Óò}ßøÊè–¡4%Ù¶<ð#á;¡òñ˱ùŽQ” ›Á'à»Ð.Œ;•IV²ÑÊÓœZÞ̱g>°&®=ŸVz{Ž7­±;6baÉ&§$ãw•XîÄö*] u­#¾—§›8‹ÖfuBÛŸ«Š æ–•š~aÁY›Â%Ïx éA¹x#§ÏøïZ<ÖÅa8ä„f-XÇvRÕœ)µJ¤¡l˜þÓ@’ãdÏcl€ñ•Ø}X©®„Šd‘Øñ¬$4n0”må–S±¦4"ñ/[|\º‘×Ö$"×gR!aÕѨDêL©±SJ8„7a=JyÉj’i螨Qc^>‡zRÛ7D½Ê ÀÜõw‰ˆmWÎE–븨óûïªH³¿¼h¾§ŽêRç8Í»di”Ó¤§¯Ô/>H¾ÒÁóJ®C¶'‰Ì¯j‹²8Dr”İ^U‡m”QyùF<ÅÔ†sÄžŠÇW|>åužpËÎ!‹$ÝIS–¢²`š·: v¶pÉ$ÞhéëÖ\a_i“s)0ÄòZω8¸¾~)'j†m ć<Ç,D{¼Éµ!Q¾ãæñǘݓ‡µÙËê¶j£†JûœnzÄlÀøKê¹4YÙû¿«W¹ Ù-Æ1.“Õ?SE5m «Îª¦§yÏ”HÐ^Þ wˆ¡+Ågѣܜü [{ЪáV¼^µyÛ\–<Ëm_/i÷¼±Þó>àÛ«¿˜Þr endstream endobj 152 0 obj <> stream xÚVmoÛ6þ¾_A¸*-Q’--뀵K¶E·®Î§yË‰Ž…Ê’CRIŒ¶ÿ}GòdÉõKƒ5EÞŸçÈ ˆÿ2eðç“|E^ÍÈø’‘À§©Ÿ’Ù‚ BšÆdVüí¼^fkÅ…ë…aè°\/Š"çOÑÜŠlµ*ë[}9¥ZZ“_ß]ÙÅ_<+ª²æî?³ßIÄ Á}2bfo|.õ”Q–/JiÂŒÝ4 BÇOcÇšÀÿSšFƊш‘ëÅæü\Ô:S LcçM톾[‹,7[‘sñ˜­ÖÇÈCÖ>ñ‚)„&èo\€CÄB§”ö7³?y£Ý®mìƒZf }ªª•Jtîrñ¼ Öã4öµË¦NêzÓ€9o0–WôÒ¤A®±†4˜¬ ѬtÊS@ YF†2Ô&«ìSVö¼(åºÊô]¹õXi«@sqÙĹ/ ¬jÒÇ“ bd¢°OËRªFllvgnxe=1MeSñZE-Ú:×'’Z1i¦Z0m]pan’VTöz8¹øãÒ.r}™‰,ßJ²ÄÄBX(·ÑbÇtâ1,Õ …$9!¥áUc¡˜HfµEŽ¡‡ϘúZÊ> ¦&ÐøȘE·mºcƒ:òª-¸}X”׉Ók©Š²¡K´’öWð»¶¼@›ãý<DŒœ!LUÞÐåOß´lk¨|1°dî ¿’Q/ 0%¯x®æ›»O‡´‘cµYÓ' ÒÆö’¯GØê¤§°›|ÑM±Ó¥x§.Ò¸[<…ÛÖ {îphUæÖá¾)x~s­—@¦âXй“Có â¹{¾ª¬•#Úº†1p¾0‡ÆE£A0Ðùj­ìÃKû30ä¤úŸÎ&üuVU7Yþ³ŠÓYÀÙž¢x–£èûÊ<,9ºdyÎ×Êëø#Ï[Å‹3û¨‡‰† /º3Éy6ÝMfðýÐéT•üæÞ²k=É®2D\e·¸Qoõ¤ZQËsÔ¦,oÚªØÏuVɦÏCǦ„f çî®ò¼ÉaYì—rO"Ñ®Dô)tížã'›À€FñpÛ4†‚b)Z‰%ø÷—N€R© iÝDèÒýŸ&÷Ü®UÓó=Ñd墋Üü%*ðÝÕÛ·võùs71E¾Z=°à#}ͨÃÓð‘¼f:yBN9k- ë]öGóy=êZÓ;a¬o1¨‡þ¡rôÝí­šóBî&û†ï·]w&8è·–h×g þ yf°\ÌȉhšäD“) Ažq˜PŸ‘U¿ÁÌFE>÷öKtøŽLF`%tj¿ö¶¤!š•aÙO¡ˆ}%vFáGÎ×H¾é|³Ùåpž™ ÇÅ~}EL¿Ö¿ÁhÐ$5Œnø–†ý>Û|ýòööF•¨®sœš×HëZðUsÏ;išî8Ôw¦´?PZ<_Ž(W’Ÿj HÒûïþ»nIà endstream endobj 155 0 obj <> stream xÚVÛnã6}ïWÚÊÁZÑͶ”m_Ú:mŠÅ¶Ý8/[-щôR´£Øß!‡”åXi‹"FD‘3gÏ ‡ò>y‘Â_äÍbø…^Ñx?,¼«›Ø‹Â so±ñ¢Ì‹’ Ÿx‹òOÿÇŠl•£q’$~|=§iêÿ.Ń$MÃøƒ^Hý'¦*4ùùý=>PRÖŒÓÑ_‹_½4Ž dš˜¹«›¤tœLfAžxã4²ØØ±Íh<‰'þÒ¿Ô@Ë‘q‹¢ zc`!CR–«ŠµJȃ¶OÁÍßûñ™ÃV2®:ì Æ·;…oÚï‡_·Ë%¿xsœwxaj#)u@gA'}ËÏ8ÇAÏh< Ü6Wç¸Û601 K¯¨ˆÄÑååÞÊtâýw§Ü §M¹j©ÅÚ”íÀþºPòíÏ«K\ºå­"u/ª¢GÉpT^ÖT–áU?ÊÔ ÉzUš+k½b}Ô%äL4[åö»^ixkÚKÌ·97µ«‡-k¶µeF÷Ôí¯b £pú ¨&œ}"LÙáŽ+fÙ´¢¡ª2µ¯_1ÙV“uÍ‚(ïK©æO¹@Á­¶ö¤|kzÙ*Xlœ%Ý]í! ¶ˆ,{ÎPH‰—ç9ÕR·È¥ËÖzÇjÅø±œHÑ w$ì’tÿ¸Î”“ðÖò/µl¹¨êŠì©ebÁQ²ÍáE-íZ*8@ Úq©  h?´§Å5>_î8ïö=>¢zªXÝhëôZßyåPÝü´ú8ÿð›ùÖ`ë»»ù™m .]äÚÔ¿Îýrd‹þPWêòdS-­i¡Ƹ»ý8ïØáûûwƒtÍØüá–Ïú–J)d×|e­h«®ûä/ãõI±ïÒ5è¶ ÿ¥'[êǼééw{÷?²ôš&ýMèc³r;íñíŽ8ãùâ;‘r~ÚÚ\'¶‡ˆ>3EK}Á kMÕNÚfþ³xW7©¥AÄô%gAWy¤™1Šƒ ÀLãã×À8™Mü;ö`ްÿ¢“©Ï&Âõ?D4©<ˆp·èÓâ÷‘ÔÚ/Fñ̯¤àb×â·Ýë)ÊGqæ+ëÒê×™¯ÐB÷ã¸^F@Þ/hkÍ×Úø`+íž³g=šø&€ä´~ƒ6æR` µîº·#Œ†…«ªÞœë, yIB›Bce‘¥23Tt[˦p!Ñ.â¾Á…áf(/i‰3fG`ÂxÉ ¢¬}.èV1rÃò©4š|Áeû±tÐRw]œØJàâRt²Tfš>SÝœån«p !øbô˜æ¾¹ZõÀõqÍ`6óuKÐÓ>KÀûIÿò1 Á9ô†X™Ó?BÁi-ÆäZ·I¤u3zÁ†Í~QH´ÞÎ|áýñÕÛÒöŸ endstream endobj 158 0 obj <> stream xÚµZIsÛF¾Ï¯à-`•‰ l¹e\N¢)GqbzrˆR*˜„$ŒI€€V”_?ok AA1#{ʪb¯¯»ßò½^üw¡üS‹TÃ_´Øìÿ\/¾þN/TæQ¾Xß,T¶P&ÌãÅzû[ðò®8ôe»\cýÍre­ Þ´Ím[ì÷U}‹6¸¯ú;^òýå;nüRÛ]U—Ëß×ÿZX­B Ikil%ƒ+›‡™¦™æöª8èªÛºØuØI‚þ®è¹µ)jn¼_®t”ÜéÊz©Ó ç­}ãvÉô¡…˜ß”ÜÛVöìxW —åÇÀ|UŽrâMÛìOè}ÀåÃ{"Úí6ž˜ Ð#2Hbã¥x?kËMY}$žmyqUóŠ¦Ý’^Á"-îú¦-e8 GÖøkÝ™E-˺¾èËØÎ€öü‹à«-n0@ápØU›¢¯ššUö¾­à¬îT¥oŽõuÜ¥ À‚mÃýN~÷  Ý#äa™Ù ¤+(殑†¹9Uk‚MÊXTHÞZàeÍ3O”-+…Ù‹³ CÛ²;l!¸„´‚67P1¸ Bçù‚ûDú¸_‚øY%4@üuHvêž0pò* ‰¯¿3jØP[1ð·ß_\®e,Ɔ&•E/fh¤a’Ž4~~w1GÄF#”Aíj ™$Ið+âé”ÉòP§¾R5h:פƒ:G­.»’›ƒ?ÀN%¿Y’€ðÏDCƸۃ©`ç¾ÚíÜö®ì‡“¤1 ö|Æ‹¡áóò¦›AzñS1@ÁáXlïâ8(¯"eʬvƒp÷˜ÅJƒ9a_+ˆqŒœát¢Bå,N.:>xp &‰ÜsñhVh x mâ},^_2¼©êyÆÀÈÅhÐNžx–Ñ¡Qg¾* mzú*+ïUèx@Aiº¶ˆSO´`žÈéÐ{q¥ç È«àB´p8á~ÐÝ\‡i6•<24Õ#M“ŸæW O=µÄN[öǶîðU™ö\αÊòªª®zp×ÕŸ2''O|dj»è§s5èX²àH^3wšÅfS(ê‰8">¤l²4ZÌéibŸ‚ý4L†r\?²^å'yï‡ÞUäÓ`ÂiD!u¤ÂXó«:¯köèjµ Ší¶Ba Õ¢ÉMû±Î¦ ßÊ…4¸š¹Ž­MqìJÞRxüP´(‹Ýêt®šü-L‰×lHø+v!dØø›¶ç 1xÔ®”k"Én[v›¶:Œ¡ €äci$bª˜×îú¦-Ëk¼Ê5…FOšRY¨œ•v)Ý#n³§ÀVåG1ë;Â7¤ŒÇIB ö}>c”&®lfDš/ðЈ‚”gc²0ñ‹_/._þ0çobL"ï¥ÓÜ—(žÌ–ÇrßÖåN®ÈÑñ¡¾EÔ)ÏCûTTÌéÂBÉzÜJâ2g“_ÉÒŽÍVQiî¹â W•ûÃŽY ¦xãÿ€&Ê2< ×1½¢žÛT£-0KþÀḚ̈Mwï¦1•Y‹ ®,˜¼|.™ ã‘Ô_*†ÀÀ©ÛhÎyÙž·9\Pï#æ…ÄÉC€U”„O°ZØ›c†@È‹ÆÅŒâ8Õ(‡©šà#Ø2át4Øùì#S}†6BJëBÃô•ú‘oå»è$+¡=7† ÄÇÉÄM(ÿúBðñÄSM}Ò ‚@Ø‘'Csú¼,ñžL J¤³„Þ Ù(?=K|¿•±ùáhÕwÜhÚêvœ&sY‰™È=¶‰[cõÈÇž/‰}YÀ&sˆ|Ïí9 %jTt€1ÒÏ”ô“ø–ØØ–¯¦F¬Ü"ÿ}ñ ¢q4ï¡9 @÷"€sð!™wÃQ6¢ß®©oÿ³?Ìi¥-ô}A ôO#Æ£ä÷­Ðz\€Á3«9\-åRòqJM¢ò]¼·?vý¥¡uðŽ*<÷º<ÌG¯¶Ù•E}<\K‘äý¾†_³”Ÿðw™Yu%ŽU¼ó–}ë©|áçýÆ+R³ë Ú˜‰¦‚WÎ2öö¤€Q•%*KšCžý{ Òø¸„¼h«âýnX#E1ßÉE™Ü>`~,j(y ºX°mv<n žÒr‡]‘ ꦢ@Ù@2Ħ FIýPJ .Ûž•(±^9: Ű· TFè¦ ñrÏ#Rgâ±ÙG,‡†_QB$æ_% .aWµ?¸«Šƒ‰J™Ç2,Ÿ@Z1–é°/b#'‰Ý±”…T/áZň0t",ZUc×I/S…¹$) £ä¼,)NLj]ÊHhtB%'.ã†\ÍøïÀÐ/óKZ |žÖ¤°†6Ò°¬ô¼±’Z]ç6MÛ=J oØNqºwJwùíßËÌ8¶ýîÀÄBtæqŒO]ÉI#êKž–TïîÚ/Y=Šq²GŽ‚Jº•Df¾Ì8 «$²ª›zõgÙ6Žù¦›8í‡eâš]œ'%Ë5(¡r¬¬«Òý_€•Žò0šÔ)f?'›ásòQÖ%&ÝEû ã““Ah>$wa8p seúÖ{à9ß’Œñ-ɲ%rd”ÔX _­?ÿãÖ:• endstream endobj 161 0 obj <> stream xÚÍY[Û¶~?¿ÂoG.bU¼èvÞÎ šv‹6M/úÐ E¦×BeÉ‘ä.Ò_ß)‘¶¼îI6A± ˜Éáp.ß\´x¿`‹þØ"åð-ÊýâëÅ×/ø‚Eaå‹õvÁ²a/Ö›_ƒç»â0¨n¹Bü?Ë•”2xÕµ÷]±ßWÍ=NÈà¡v´äÛ—·4x­ŠM]5jùÛúû…ä,â‘&)cýn%ÒñÅJæaÆõį/–™ŽM9Tmó›^ôõ &Œ71²¶p–B´Õf¹Š¹ ºú®¬UÑwÅؽë«û¦¨-‰Ø» ™eåm`—¸!íKžxÌ %Y*K3íY±4  ¿"d$Ëõ®êA8) ¶æ’øÄAzuM£Nõj á°S4è‡b0Ãv{2W%f÷Ðz»Â©ÌïÃ’§Aa·\Á¥Ô¶í”á[8| ‡¹07ëŒß^¸£YìÜq:‰GAYÔµÚ<Ç8(š Ý·Kžl½£Á`4x‚»“õxjÕõôÜÓ†¢®Ýµ½>Mu k6²RX¡åÍI|x™Èeüe <ÖG…-ësáHæÌÊl®ʱµ~F>yrk¬xýs‚à|ŽàCÕ”»9Ši(,ÅPÏçI(ÙbÅ£0y/ÚvJÝ¡üïÈìæ–]s 99Pú±ÆŽxæ@RDÆep„Ó¨hð¬ðÀóàPtCU˜5Æ…ô¢¾oµa”¼ÛXj_8ÒvˆƒòØuJˆ`ÕŽÍ‘}âè-ÈyÓÒ¸jÀ&W熵/P`–qäò˜$IÀÕ†¶33xr ð˜É¶Ê<×[ÚÛ­õ‡•Yª:}Øû;ž > —'A[t¢¿/Ê®Õ\0rE\kiž1íÓO-ý˜‹@?÷ª«J2›¢»‡GZöv.W,b‰ÑU ŽßïÚcmLÌ`=ƒ¼"½Î6 ™×kgéaûQú¼ÌÃQÌܨŸÅA­z=B`¸Ã‘îÁ¯zÔŠÈê”Áo„&µµ§ÑlÔ(nÞŽä:ÂQ)¼ßTPúöGp#1ºŠÓPzÆŽC¬¹·ùÎfÉiz,¨,§_7Pã '=ÆG〺n£Ý'1Ý~§ºéÍæùlãã9Öèž&Ø£ðRA±ÉW†-óõ«±{Ðën ±dJXÌÇ/+¶p4œ˜$lú>’²0¶mm”Ÿ¡cRNÙ<¢ÅØ‘À5磌¬~ œ=ÞV üê1üê ææ¢ ‹uqRÒk5;-ÓèDѨŠÈ¨"²ªˆF·±K­:°qv²” Þ®*ÞÕÚÒ±§í¾­L³kCoµ‘Æ1òá;KÛRsí8Ó#é?c?äšš>åxŸõÀPæ)ïyqìÕÉÊZ›8´ï†¢jþ–#Q„Š­¢.µÉa ¸dòÞK ·¶glÛº¦à1f.6I3! fX/ÒáÒ|O˜* ÷r#ƶŒ˜Ú2Æ’sßO0€ªüDÇëºøš‡rBŠ/‘f¢˜S¯ë9‘zâ‘"›*9á69Ez±É™M8õh%“>RÉdSmòw+˜kDÖß¼þñ“‰|wûê#ê2ŸÆø(F¼â.¾VŽ]!)ˆ#™õÍË¢áV¬ëõO·×«L©¿sÌöóéÓëÿшzgŸó05Ó9Wj@*Ký:‡r·Û•ïä§MÓ§ƒº3IüFÕ¥ª[ ?]5ñ:¨,çÚ‹Ÿ›ð«I÷(: f_".ñaÐK*N1œ›/»ð”K8Õªºä,¶{ñB™@aÒ„M%ñy;•ät¡•š³éƒéê›õâçý ¤ endstream endobj 164 0 obj <> stream xÚ¥YYÛÖ~ï¯Ð#X7¼—ô©5âÖE$͸E‘ Z¢F¬)rBRO~}Ïv¹h8ÀÅ À»ßsÏòE›ß7zßޤþãÍþ¼ùëÍæÛ7f£c•Çùææ¸ÑÙF[•ûÍÍá×èõ©¸Ên»³ÖFæ»íÎ9ýÔµw]q>WÍN¸è¡N¼äo?¾ãÆ?ËâPWM¹ýíæg´‚Ãc:Ò%4öí·ÑNY—à¥;Y²s¹Ê ­3*Ùî|b¢×—~hÏplê£×íù¾.¢^™Sov:Wš·ßlM=ÞWû¢®·™‹^Ái±Ž xC’F÷üìdÑp*nu@vÏÍ}{> ÷ÒèØµãâ’—ƒ“§BöüyÀ»‹­É¢G^ÐyâPõp'L~¨î.Å€ Äg áVifùt¯ÍàÄæ€<:C¡¶»Dëè푇ñ¤öÒñÊñE8UõümAÜ=@}_+\l±ÝÈòÏØ2‡mM}ª´?EªñU+ Žm7'=Yç[cˆdjÚ¨E"M}Øî€+ípR¨JqtƒÌĉc[×-¾çµJçQ_îñ>|‰ÑÑ¡ì÷]…ûÓHöœˆÆ^=c†ÎgÌ€uÌCh,”òŠétp{Oô•]1”¬ÇCË*N IC¬æa ÔàSµ/•h¤¶h?q®E%A±ó$h´Ò¬Óo·6&ÒS”šJþïmŽûøœŽ§*qtàÛÉ~vTEƒòmyHäUòhßžKÊÏÈÄä¢È8v¼Ô5¯««~#tE÷È»ff, '¹ÑK.£“»c±_yY€ŽgbG!éDÌ ðh f!ÜÉRœ Ë qnQ;°…AÂí S ¼4lñègÀöncíê²)ÎrÊx!ÒŽÃê)µo¶£ ÷3Ãršp‡ [§Ló#Kyƒc„Òz´g³€*|ܤçØ{è*4/Üøˆ„=8ÁºÓ,Ih>;¼¡àçmt»]áÔ)\x5\ž¥†EI··P/Œb ‚oÅ6LØÉ=ª9½Îh­’t®Eww9—üä[>¾:¨46?TÍ¡ XÄÞ ò…i‰—š¿ÆØ¾X\á…oZy¶U–Ê:Tœµ³´Êœ,a |"dø‚ïo6¿o”K7›‚£4ðb_¿9Ã@¢ìد7¿l~æuq…MS'¼Ìätãèã É:Áµ£¤0×·3¥êÛàÎz«¼Y ÉF›™«pˆj-ŽŽ;A_Ü%«¢qz¿¦nð†Ä<Ñ7Ñûs1ì!J{Fó´M” )we#1 ]ÎvæØ`ã'ÂÛ27â•?µnŽÊ½â¨•øåtˆ‰ÊJÔFñš~\À ¶áçŽEäq´¬ô…­kÑñìo{òÿÃ…b}è% éy‹3O–ž 8”âšû XDæ ß™Ëv ˆÐOØTáò5­ºòÀ°‰h•äsÐ2sвÀæÑ7¢XL:¾WÆ(ûuúãUlp²ç«ëØîïkÈ™ð ]ÁN¹jæÚf#\’öíDÅ2­L¶¯AR…%Æ©ÄÊ3ÀŒVêØÏ•:@ Q똃1¹Ò6BÔJTgÄÏá.Öb\Ô•Ã¥CG´8¿è:.*RìFÛaz—è€ášƒ¥|[‚·PS“ˆ'2£~Çí"ÌúÀíûš’ %4ŠÃ¡+ûžÏ¤ÇÁ`5ôÜv´rØŒg†t穎ØÜNP:"âÑU›z_6C÷øþJïrÌÕÙˆ§¢Úº…™nÛ¹n¯çÄcw"Þø˜£| Û]) p ·aþôÆ9Ìú¿Æ´JÃFÌŠÀX)‚³›ˆ‘Ms}CñR 'lÐ.‹1îò Ï #Ó‡¤•mVŒ|_Ào¦ ;“ã¥5-GÇ‹KFÇ»J“N3 ^xYªü²=”]ËešÒ‘Žâg­ÎåÕü\`F2¢Ô¯Db¯²Š‹²‡Ë„.3 ƒ‡.Á"|—ñ1ŽMÀ+ØÞ”{ÀÊq®j*dgõGüÎ 3ŽÆ#Û–~’„”ŽðÔ­ gL…û®”ªË1”yÈ 2,ä\>ôåï `y Ù²¬-@‚JB?¡Àzæ *õ!*½ö§Bê•ßÜn|÷Ãká;µb(’‹cµT͆X¼r!ñk#·°QJŽšà¿“<²àFœçï¹ S3WÕ 'ÎY³¨.å’Yô®çø‡195*ΞF³Æ/‰_8Oætètã§=ât8]ó¤öŽ…!x@W»†ZŽJX/Xe¦ìÜ*q¤{bJ6õ*_TíIóɯ›,Æ'œ¹EµPlƒ|y9›2¯àïµÂâ* äûæïG¼Ç™à ä6nÌ^š/#¹…9ÄZ—sVçcö1ñÅð,UŽ9ƒ‡Þ c†‘Å”ƒàJ2W¼eœª40öŒ÷Ï(¬óX‹ç…f§5Ë*áÖ#dùB¹ `,ÜwŒ da^øŽTsñÜBøÚTý‰è‡ ùU!%ˆ=£G?øËTâH©˜Ÿ9p¤f©f †Ñ®<–]'_£áòb]Q½SqàÕ<4)#MÏ*à½$û _³çŠÆ¢Î¸ô¥ðÊ•.½¬1¹òý´Á¿lüJ5.9ã·@¶Ûh I¼g?›Y•§c>`4âæe°ËÏîÎs•Œ(ºÆ §Ì2³—ZRu×N½âÇ.gB ]/ ÀÀzÈÒ5Œõcï¹ôß`“ð2»–þ/^…ùÿèÖ´œœr¼pʯÇâ¹µ’X›Î£ë#.º¥üÓ,{<¶,Ȇ txýg þ Šx„d‘¡ #cÊE'ÈÍóŠóݸ¶³² ¯ZTç¯×Q_á˸=¢ ‡h»e*¸ ¨ïÚŒðÌÝ[˜/×üZª¿6ü¶£l0uÊS $ôΔsËŒúX\ê­¨êçuCK¼@\TÕC¶'ëS Tgöô/´§¢«°xöœ=%S˜-OœR¥÷b_ßàÇ_±àÅŒ üÜÂIÑfQøüYê%•(ó–gÙUÛežhçiNÇ\|)Aƒ¿QýŸDù‹À_'A"GÇ¥ñ‰Ÿ¶ì§¾Pr˜‡û:yUñºR½œ£&ñè)tX©žÄ˜©ò‚gBD3+“pÉÀ$Á¿CcTE“è…Êáä$ö}6Szá&ñ¯VhƒØ(wÓß<ç@ØþœT²|Êi½˜ ¯°ØRÊAIÿ²êï ¦òùŠ»ë%énMª‰Fy»^H€å6þ’£Ë“))¥üßr> stream xÚ­Zߓ۶~ï_¡>UòXñ‹ Û‡ÖÎÔM:žL“\:qÆ¥%܉‰”I*Žû×w  ήçnF$‹Åî·ß.¸x¿à‹ þøÂøÏ›ÃâåÝâ«WbÁ3Vfåâî~Á‹—¬Ô‹»íÏ˯wÕq°Ýj-¥\Š?¯ÖJ©å¿ºö¡«‡ºyÀjù¡vÔåßýD?Øj»¯»úåîŸ %8ƒÁ37¤2®í«W\âDYÉqÖµï³V%+„ë(XÎÄj­s±üº=÷v¨ÛF7zùjUÊå©Ù`K×-Öܰ\ºq¾±%¡êž~‡oØÐ¸––±¯ûÚÛ{ÿ¼Úï«w{ÿ|KOïG Üí±³½mV"_ºQIJnæº`NRY€vÍb-$Æ øó«U1.ç— µà¶A;íø—Hƒuh¡–ÝþmXÁ[h´]SíÃë:ÞROú³ ]b)&Ô8üJ˜°†»jpýÿ~·x¿`Ê,>,/™Z¬MδZBÀN™p¿_ü¸øž¬j6€õ*ézZöÐ^ ,%+Êhdi¿=2ô*g#oÛ¤8Ó"(a•°šµÈ`%lG2îí4•q²•VPCm·¥fÐûm;zúnµÅÒÞ·ï~„è_“q°”þy)Qz’.©ô\9³)J–—¨›¼À-ó÷Wu“—,ã®W)®iÝ”x1\fn ©g#ZŸ­+g*V_¡Ú>ö¨”ŒéÔ"¹ß­ÿ%8™)Ì|íF_ í6'Ú#ï“ z¾|v«Äò·•ÖËj²të~ÿãE”‘ˆeÎò â_KÐÌHÿøO4ÊÁVÎéáÒc\¨(v»ïkB%#ä轘)Ax‘O^x÷âeJàE, Ÿ„‘N(J?TͶót“¬ Œ56‰ã¤É’Òä’Iî§zöµðX-uÓÛÎ+0t¾ ^SäE¬)q¡©´lBäŒ_þã§ 7x5mëþ¸'›¤>(©WYæ€hR™“Ý/;\œï²)bÙŸCKQ,ëé­Î¿çbüÚÐ2쪆®ÚÆú«ž†t@cMî[×›ía|ÆÆªjÿ‰ž'vâQr·+Ãnÿ-­P1)T”%-ü¸¯õ¾ê¨U‹¿É) &Í÷ ÕåËw§Æ;³lŠ´M‚TÒ´þ-tN»¥§¸NB·Ð0ß@·í\ ”!é)>È÷»*°‰jäb )À›Œ«ß}¤×Ú…¯/éS¡­¨þ¬ð^?4`‡ÏIúùwó› t¿¢‘]ÄjNº23Ük=Þ]Õ°É9uó óWgá“X‹¹°5Ëä•€­Cüг€­3 ØÐ궦€mÆ€­G`ò ·1e±ü÷ª€WN4Ä®ÂXê?¤¹úÓñ¸¯íölæ@Cs˜±_îc‡¥5‰æö v. 7ýìè®Õ°AÑväý9x¡Ý[?v¨ömaô@·oà¹Má(°mØRñdc0Ì[œbgû7iÍsØÈ<ì ›ÄØ`ÉÐGÄ ›Ï`›¡ûøvÔOŠ;dLŽv½‚mÈÁîœvJµÜÚûê´Gs-=µ‡F‡í¥…pMu°Ô>Ã\h®î½÷Ót±÷C@è“jcòBi¿¦3QNDcJ™*Ÿ%TÝÃé`'„5XÂ(ÛlÇTkTÔœ=Á—åÌÁi&=W–À—•8“ˆ–‡)×pÍw±Òlì¦S¾{Fû²°s,¨—eâKáÑãöÛ SbÒÓÏÆM{¢Ûç>yüt” ‹JÖŠi$Õ23LçcÃ5%ˬÀ=pÝ|| óÇÒÀ´EÌ^;Šiç øà¾Mº­È@ƒÐ,S@UÎR²¼Ì–ßz}Q›Vaiê¦õ +8SüJ%ÕÕ¸Ëeçõ‘J›8ú9ÍúÝO¯_'QÁÓ.Wô…x„ÉιÜLVBõ÷†š‡Ð™ÄpebSÆû1Uë£Þýé]?ÔÃi^4¨˜ánZÛ‡þIÊV¢¤5 §­CU7.ŽãmXU1Qõ§êwá¼8¯™ÅùéŠÌ¦ñ£…ãpuïG³xÄP…äcÎ>c S†œB|‰$ãñ}Ì'š;/»Ú.yRºF@(\=ɽ»ŠFàá#Â<ÁS;ð÷WÁ3wãc/eÎA`Î4À<»ï)nWôU}ýçø;`nìè²@ “ÝzƒÒõ@§n„ ²U’p@*¢gÍÁaŠ• ”SAEùò)Î3:‰ºHŸ}+‘R>؆Cí¨Zý$[645ÄÞÞBxÜÒµSœPNqøh æŒ-‘L&HŸëaþÒm×Ò•SµD\¨hypƒ,õ¬r¯ghk€YÍÞ'ovbGËC‡·ïO2åºIãIJS ƒ–ê$‰ð¤ üa­5§ïxÎÝ ­o¸ V^]7sË2³ì£=IÓö¤ÌÄÊ®;i™GN:}Ìྠ•8¾hxJNÄ¿£kH-šñ1{ ,l 1CpÀ–YJâÏHyõ¶ÿRgk™à}Mg1%<; ˜³ÈŒÊüÿä„"pÂÙ!œ·Æëú±9:ÿH‰"£O|’ŒD)Æã´ç¢m¶|°íªÏÂDÁ#ärw¡9>GÁûø[(¼¯ý¯>Ü»÷½«Þ²4)Ǽñ @ WÈ¢ÈN¼#ÇO°û@Á1âqî#žÌ—/«~‡WÀ¶ÚS·±tíæ€§ÝB¢tÚSSgïÁz›Ð“tºšêwî½óÄÍD‰v8KܲGR¶7Ó—j$lôÍZΜÏÞÙÐçî+7Jíažû®Íeøóôæƒà1›‡«ïÿð?âO=t endstream endobj 170 0 obj <> stream xÚ­ZK“Û6¾ï¯Pí%TÊbˆA07¯+ÎzËqmÖã\ìÔ,G‚,ÖJ䘤<ñö·o7 A œÉ«fjˆ7ºýøÐ˜Õ§[eðÃV‡ßlµ=­þv³úæ%_±,-³ru³_1½b"-óÕÍî}òâPݦ[o„ ÿv½‘R&ÿìÚ]u:ÕÍGìÉC=hÈ÷oÞQá_¦ÚëÆ¬¾ùÇJr–Ââ™]RjÛ¶EÊøj#ËTsÛñþåZ‹äÜl‡ºm~¶ƒ¾yÉäŠ1 &GÒ6Be…[h{¨€°œËäküäIw¼=÷¦kª“¹Ý¶§û£Á•n÷nI¿b0Ë%,¨Ü‚?$”‡L¹ô;¶M?Û5/K€<ùz0¿ ÏHuƒ]1ÉJо"e$Ñ~¨%EL2ú°v#BB@ö) —z2žL¬b]$Mcºjh;êÞS$ëdÓ§16™Ö“$œ§E ‹5×ÉPÕMOU´Í}Õ uu¤6¿§ëêÌÖìÌŽúîPN_HN¹yÃÅiÕìÚ•½È«­ÓH 'vîÏÕñø«*ù·£Y„|I–ÊÜý¿Sy Æ@Ý_}X§ ây–<ïiO¯Ùy»Ð&3qCÇ(îþY\®p®ÚmþL°E*¼ìk·õM×RÉ©îFäEªf0 ©ã‡ŒÉnÔMG«H@z$¨¦m6~AáT ýù®7ŸÎŽR%é2ΞTD 3ÈJfëTÃ_…ŠŠÛóT¥lOñäE(•"O~Z—°}WWwGÓG8Z¥9˜?ñÓbïBówS–ÌßN"9µãQ˜fè¾X¿.½Aà¦a+˜åmn\ªHî×к¶& Y½SPh©—ä¯ôÌæ }܇jÐQÌ’§ŒÍ™qÄžªa{0ý‡¸`‚M*›FVCöŽäͻׯc̪´ô+œLe-Ùi½¢•hèVÊ;ޱ2Ë'öõÑ,9ß%^´§ôiä¨Ñ;³¯ÎÇaRoZ›ÔÙm`:bŸa)¬fJýG”) úZ›ªa0'ˆ†»G‚ËS¥YL£tF½Uã¾Ç=çPÆa†jCü”mgЫØ2jN8 —ßäºHn®k>Ùzœ Ön²æäì".,›¹œxh`å½¢~0GH1zÁn!¼ŒêÀA#ÑEƒƒæ˜qÈŒ5…h¼+Ò\?EOžz’—èÈRÁ¥F02«Ž‚ç üfWoÁ-B…#^¸¶,%§ ª‡Hêöî¼ß›.²‡æi)ÜàA[i,4í¬=aá>:iÏÍnãŒlA䳘ÛÕ–(-“vcW€PÙãa®^:<ÔºiéÚn‘c„ÇêETǦ~è€~ŒÄ@ñ«= ~â¤ÈX3¿Ôýਸ਼á;3œ»¦–—ÏZòŽ|bÓñÐv´p½÷àµH 5Å–>Q&Ÿ×¹ô®‡ZlÌ’Þ TpŽvNP&#e¹Æn¢|¦J_97³à†›Ì[ËCè©$aéµZà ¡ÐÙ16ªÉŒ99÷«Nvˆty(»'ƒ3`¨ÑZ­Ûċ\C5r|:>Œ$ PÝ=Ô½@aj×U„<¡š! ¶™”®§Á¤?T™“AV4" …"*`‚äµ6·Z+G­•3­…hBïGD#«; Bk4ö´Ÿ£î€)¯÷9t`£2Âí å‡Wô‘!MÆÑ~¦ÆFc¼Ø p/(5í@Šo¦Ôs¢–yÅÂÓ‹‹k Ô E:[chh¶•ˆ¥ ~A-´ðY|jÆ ‚ü?¢ç‚ÿAðéÜfŒð.ýVl++;MØ pØ wh3/ì(ŸË!h5PÉ”,•³93õÚÍ®ü÷þþXo+\vÓf[㬭۴êЙ^ üÆžYBß S`ÏûBì˜àôí8·†³0¿°}T|ê¶ÛÛÆ-Ôº ¬}ەÀQh¼ÅKŽŠ Y:ïí|¹Ks“©Cü½Sÿª³˜Z’¤á[ÑÇ;âU'± \®AÏLy6 <´œqòÊä$ëL.â7ø’ß ßàæé!ÆhYvÜw7«O«T«‡+xZ ެ\ ®Šll8®Þ®~¤„ÓüŠ ÃŠ‚†IÊ ÖC£,Ubâ°* „’³EˆÐ0ÙÅÕ<—© ©æè(ž$bo*ÕŒè+d¹öŠ–nTN'ÃZ"•OdcÄ”ñê@Vɹ½eäõe–[û*|Co_á=ÏJƒ˜j‰2¥Q^¡.èˆ.È<àâD™¡u€.H*56,ê\å@œvX®/t¡ˆë‚šÀ•X©1úG ]JÄm4øí«7ß¿þîö‡ç7/þYø,D c¥"o¦¬˜ËcÑïØ6˜…¢’ë |%¹$OÕ,¸Ž¦„ÁUª$š(‰(o›?¼{}³H0è-”KEò¶µ_Nþ¤§ê¹wí.À"i©ežçzÆ ÒVlvÃB†ÁÍu3ê¦7k«œÃʦ^·Ç¶§k è‹‹PXœùk$;+—4ÁD> stream xÚÝYKܸ¾çWô-šÀ­•øÐ#99A6p°Xì&ã\lc@ws¦«¥¶¤öìä×§^”¨éö#{°Á ²X$‹UůŠÕ››|“Á_¾)üg›ÝqóçÛÍwß«Mž¥uVonï7yµÉuZÛÍíþMò—ƒ;M~¸Ùj­õÇ›­1&ùièw<6ݘ䱙Ìò·_sãÞíÛ¦ó7ïnÿ¾1*OañŒ–45Ѷڤ¶ÜlMVŠÞüë¦Ò‰÷¾õïˆé»ïs³ÉsÆ¢h[]©U²ÐÐÞíúã©yèúÁßÝŸ»ÝÝt³µÊ$ÀEû£'æÖOMßÄ-Ù%>¿ªÒj³䬂ÛC3¹s„I/  Gl÷o³Üt~èÄn’k[¿gž÷7ªLž°­’éà…Bõ"ÏãÁwܼk¹…+·¾sÇõ” y Šûêäé;¢èJ%îžWš„áaÚG7íP¬Û±T î#‹}ºQUâyðýÍ;(#2<øÎnòû”]˜äÕÄô ÅÉ#žÛNÔ¬#5k[§*˜òÇ×?üpÍEZWÂي〨øààˆ(:^ þ3€è*»ý=~«å°~-Á®ž‡PÇÃ8qÇ·þGΉx›\^åuZ". ˾ÉÞ]9‚-SU ãÛ^’T{MA‚£û¥9¢É±3žßÓ€6¡Óª²L3|àØ£r›L=Ùºyñüœ°û/2ÍNO½ëxÊà·¨´îÁËš$ ´ iH¤ÅõêH¯ÃÏÍ€WàÂ-ߟ'†ïx.öԬ肭àá]Ø3ïýÐ[DIZ [²aUrÄ©çQ&‹s†ÉÝ%Ñ Àº­Ò©Õ¿ešÝét^öpæÝÔO¸Üúþ÷ãJ]ĸbÁ`„+u¹Â¢L[÷xøGºœ{^=ibßÜ?1Ñ— ²r÷D|ýÀ”^ö]0g¼´æŒë„/ÁÐ×l­ˆ~nÑ’•Ž,3CpãÅÿrr°ŽOG40ÎiÚfǬ°Ý‡‘9úA8žšŸn¬ æyBsOn:Б@Ò²ÌIRc¬ZÀhΰÅʃa·ß~™JŠB"wå¶ém˜¢“Ýyf$1&_ÆQ@„ IÝÈaÂI0pÃÃ9@E’°rtQ\Y›ž›˜E„£ ±W·$EÈCðRp¡O­Û…ð%AiøÓùÇKÉy±ê”Cî¹Á–jÏDÏÁ†ì$84; väúnˬN^v‚åFeËÑC½Lµª8„]®?G³’7É$$­ÄŸ×´ ÑÅZ7È­„ŠÊ°e$£sáÄÇ&¸æU×׌™0ïä†IÜúž¿SØgA äu!æAa-6M2« ŽÝõG mcÊ0£š/ÅŠ\¢¨ƒHû¸R‘MLU&/Ct4ŲTë݈î©m–øO8`id×®)`Îpy ‚‘e­jŽ‘uN§£ ÷ýpä +؆£Vg³É±=x0VœÂÀ¢® :Ïýä™w‡òÜàveŒ<,FñŒ‘¸‰+[óe~ÁM±úΙÒL#Ç2€s+ÑPÜDëuìšÓ&`ç=ZÙóJ"RA|“HÕŸ|SÞ&‚*Ï‘<µF8SI¤4¤`NU¤•‘˜äQ»QÚIýßDˆsÔütº‘;Žx ¢0ú‰@gRU€#EðÍvB6F{Ï®ï¶ÿöCÏlè9*\ l µ·Wn;@iž!e¢VÔØf¥]+%±•\ôr•*Aoö+hwýÄÜ"a “—}.Á=Ú“3ºä$ÁGD—HÌþÇYÌà‡fò”Âüér %ª(f»½@•dr?q€¿‚-H˜)vú{uÜ]”NSz¦î(·E ?ˆ&þˆ`-{-J—2½´'^j…ªÿt·dE®£Ø¹VËh¼gâqôü]¼V—!Œ6µ²vÌ ù_wmóCÙµgUª›ÿ7ùi^d©oZkÈ)Î’¾CÂÖÅ C"Çz½Nq€.ÁZýtòÚ¦ECiÓ]9 kµ¶+2›l©+PlÈå~Vx‹£–¼·*z„(Ê!ÕGñ¸·B‰¿UˆãØÀõbRT=àUݘ‡u{á,öN^¬V§&_eJ~à—³Q5¥¢ªâüð|NE‘&±¢ŸgÂÐÒ’½Ý|ܤ¦Ü> stream xÚ½iÛÆõ{ eX ç 9t´ ’ E4í¦_¢@åJ£]Â)“”×ÛöÇ÷3Š Šƒ5ðM0ßmsèÃ?¹»ïzKixhÚcÑónßðšÞáË&ÏHuXÖ§s?=­Ö‰ŽÃ+â ®žë]Ï,C„ÅkÄa;>Ýãƒï𿆊öæ¼¾|öÑi}÷Šö>ûJL5Ce‘pB< óÌDš(ó‚&Ùä^jf"5þMDÈâNò‘¹2×î ‹ ‹z¿ô$‘éáE€{éE*Rjþ¢’%jB8qCš›Ábí_7ß÷¶CÃïoz^?âú¹ëYyeª")§¬³`(,™è°µý¹­yN—áÉoá<ý@þ{f»í°<ð¬nx\2\'Ùf$[™¨ðT;»Yñ^ã^@L—É…²Ú=šÈâB ˆqÖö®º_UÕ€vV"596íýÊȘ¤Uâ´vèºtv¢B•e€²ãñÜyd¤tôx*Z‡§¸)Ê™E„ÐÜ!î¦Ý_¾‘È<uIæ†0VÖéPœ ¹± Êž=±ÍÙŽ ½!Šýžx–w‡q¼…IU’8aÖ.ðgÄè *žZ»Àz¦Üç×a­ë[ð5RI_ƒcUýñŸ+çÚ²¸®ìOÞVt øò-t?él¡­¶ÈŸ}Ù¶è;¶@J"uø‡Äoû@ï¶U÷[¤hÛÞ6Íëeë7Sr¾A¶€“ª›zýoÛ6À[™’þ@;„»aºÕŒ$§}pI"õõÚ_eÏó«f±vö|ÿ`ðhÄ»(ªã”Þ ïH! “Óq6u- ŠZJ;S‡Ña€Ý„NÔÌ߯c¬ßAcå}ñb1¢ȬÉ5 z¥L*ì}øåY”¦n»¬û¥‹ÀNR¯ù5:§ó‘À¾¼ Þ‘΂»@Ç:Rˆ,‰Taðú…*øGð=§K3Ô:6‘– –ä€àw‰lî’—©Š#• |÷"c") Œ‰‚ri3ü~ŒLˆ‚àŠ¨]˜\°÷<ÊÜõ€@'ÀôZ»,j¼|*mó´D²8É ÇÞçB`h[Ög¾Žo<š[:ì°·ì^.f $¸£6d Ú!?é„yÊ÷Ô{¹§ ¼>Ÿ±ïim@jÓj9GÎ2Ô•©CrϕƧ±h`‚CÝüƒB¹ÀŒ2Mcþ¡3šò!)žÈ­¢T<®^à HŸd,ÐNްDY2,<Æ"©) ˜ÉŸÖ0¥ÐFî $ª!}ù@¾Û„àÜÔ7–3Ï”'œÂ)‰×Ï¢/q‰¼Ý„K.Ç#¹ŠMxjÊ«Ê=åØx†7fP]Úzgyß{ø%“—I:Z„ÞY¼ÝRp¹äó—f’Ú É$8ÕI£,‘7:we ßâd ’8âá¾a&éØhä4‚ð1J×`óãÓÎ!9÷\¡"`·-ŽG‰+æ*€LJƒÑp‚ÕçmÌG@Œ!®¨‚ç 8»å4©yý¡ò"_çR!Ž^˜ IÑuÑ•»íäÛk òõvçë´îÉ„(%ä”'kÐ)BƒÓÄ¥8C9à8+ÿ0åtw»ò¦.*ž<ÐKÜ”9|TÛ"Ÿótü‚– x‚ó¼Ö¥Ëí¥Z.Èš²…ÔQº¾·‡â\¹Üáí ëšêì² "&6NT# ‚axÇø”ÄÌëïŽînK_Ü#OkœÍ(Š©.^П!‰e})ÝøyÑݾZ°ÄaÐͦßlêÍæ“ üùô_þíŸþðÇßÿ÷wÿÙÀ’UæQê NVJj Ìÿ])ßœ›Þþ\}dîü…)dĹ 7wÊD)éd’RÃEašê¸º+ ®ãc¯pnÝî„÷‘,uPç_`­Éh­™ðüÁòLJ&šyßK»ÞDq^à ½ÚâÊuí'ÜñÌr½BÏ5˜‹ñwVÅ![ç÷y{ž<ÚÞ³Á$í’jƒÌ}¥ß•/CG‰ŽZâ¯+W5švâlßiÑå»Eùñ$Æ=Ï“Š ’13+¨%£\ÿÚøôö½ÕïäÏ(|•N¦…¯Ò¹[°Ácê8“¡ÜÅ]²BÍí@=kíi×+„U.wqÆå.îMr—ìí®Üsh˜1C¿è `—³³'Cï:­ÄÖç{ ÙÔ¬³dâd©i¦\Ó ÝRYMG|S × .ڭɘ©Á‰ªä„eÉ@ŒñDŒN÷yõÒý?à Ìó}qÀ}ÙxÒ¢L¥o]¥Âm WëÛÖµ¹R×@àݹm‡>¢šòŠí.|èwd6ësÀ¯!a’Yì&?;‚—Ü ÈÎöK¨!2å—Žã¼É³CÙw¶: ÇŠ;=™˜T.:‹ÔÌ&&Z .‚µ¡[x¦‰±œæ;¾ûáÛo—ÌMŽAz)N£4ûut¬ø'e¼ÅÎ">ÂîLj\¿0¤§¹wÖ )äLXcæq<5³8ždz©¾gC«²ˆ‡ì¦ïtçëÑrÇ;]ï?+ΓD…_ŒÙ…"ý w`4X CŸ~päúß`IE¶T¶ô;/ÆÞbžR-K€øMª|xz|æB –Rõú´ÚøÀÃ…îÄÏ<%¢TŒÅ+ºÀ>ní÷Å ÇÚ5dè PP+ &yžëŠçðt诺Æá:9·T8$ž#F‘ˆhI]Sh …Û‚%E;”ü âyzž>WχþÌ|†êT†ùg)WàäÌè{o®nM}»ñÅÁ¸Ì&p©è,œÌ Gé¡.qióðé‚wÇ7>™¡=ÈËTHêt¦<²ïûá=²íNuÕöÔÚCùÎþì|?¾8¡Æš…/!±Ú5ÚL&i ¸œ§ó|ý%·j®Ïîü¦À|;ü¨ì¡w߃êŦ&ä´™D½}×/«Ô¤$µp탽ÛišŽ@“¨ Šs*:r¼Òé¤ôþ”Âÿ¤¬Åß>¸ºpì¾Ð;LäÖ%{rÇßâ1ßÚêij=jñ‘?Y‘&»ŽÒ—WÁ÷¿ù#q˜° endstream endobj 179 0 obj <> stream xÚ½X[ë¶~﯂ÑkE¼èÖ§&EO‘>M³I²Á–kÑkõÈ’(ïží¯Ï ‡”IÛgwÛâØ€xɹ|3œäCÂ’~,©8üód½K¾»I¾yÇ–gMÞ$7›„Õ YS$7í/韶j?ëéj%„Hù®VRÊôïÓø0©Ý®pB¦Oݼ%’¿üí'jüC«¶ï}õëÍ_ÉYÌs˲`vl%žñ&YÉ&«¹yß -¬Îe:nð[¤ëq·ïõLÁø<Òx;fpQ¤ï®jžŽx¾\¤Ý`f5¬õ5tYž~§Ì–Èž µæmgˆÕãU!S5uê¾×´˜ãÁ¾y'iÆ2ÆÝÑ¿r¡¸Š¬nú÷¼Àe)_Xßdyá¦Íèn¹U3µºÙÉA Nh¤%“pe¤!'"Mb7[Ý÷Ô /ˆw¿.8h2{pr–çùÿ·dDƒ~Ps÷ˆbv¤ÑJôǶ[«™¬Ox³ÁÁ26Ûñзžç#ÞË#H˯u¯ñâ[+,¤šéK6Úúné°±ôö°ÁŽ<FQ¬hx'ÿ9Ó.mãï¶â¨'ƒ_ÐÜžì¶B—Á!4)ûÅͰ«§™¦et7K¦?Îh$Œ“ᘷ3»`ÙŠ>f¯ÖŽ,>×Ù±oÓ‘|}{;4¢NÔ3E þO`a[£ÑÔ°Øq@ è»(õãýqyŸ7Ï›¬ô¶r{›_°°,Y: 8qÛOÎ†í¾³¡Q‡`pL:qe d½ôcé[´ç7#KS‡y[éžÑÜAe]‚´íõ™´¡Â67JÒPs’ ‹…8»ö褠•CE½îns&×ne bìoÃÚA!v]ÐŒtµŸFÜî±k5a©B” ÆDlW€Rƒ…Wš±p6N--0zš1°#id_‰Z¯œ¤ë­Ö…•³í‡÷ OXR¤ÝS¸Xn*DèG`fž ¤>“"ÕG×¥d·ø¼ˆd{0*c4½¾ß4 pûÿèi¼ö{G™K5>)›zKñç›äC’É*y‚3Ь.à2E“±&ÙÁ@•1± ôÉÉ”=²Ø'ª¬nˆLŠ0EA:ݤʳª7©$æC¯nd5‹6!÷©R/ ` %váp·êÕM8“èÞÑMÎ@*Öƒ¬³Ê‚›€ÈÃ8Sã^-º4Eð_¾ÿ„ ¬´—9*›’eî r.–€×Mi¾Õf=u™¢jÄS<Ú¤Éæ "ý~¦E”ŠÌ¥Ýv#}swì6ãäNqÌÙ°s 3ó‡¨0bÂ<丬¥º½&ß]üv§ü®Ð‡Þµ0´+C0Ä|¿t޽9дK@â|îtyœõÿ’x@n¤TK|⽟ owpÙ0Æêk Ê‘·ºïvÝBqO4´ ¥cm­Ífçn ò ³dÚ'Rò9âàÓ>qꌓ<]÷S>ŠF4"Â'½jrÐVydÏ0¼¿ÊŸ!tDXž1UVˆ€¹ÌQQ¯ð–,+Êøô±,/Œ`ΊPy³oD ÆM\l¹\Zñ#Wrzè¦Þ‡¢(tN’C\°CKv¿bRdyj‘òŽÐ- Ä) X]\“¿œwX'@@¾_(üUÿ†è[ˆ ú„ç¡‹‚VÚ‘PÐP—¢D!Ã(á購ș=ÇNžè gŸ`Òñ›@¶dó"Þò\Ü~k›¤Í8dæ XØ¿±¡mR_Ô¤zlØW|súD–`{KÀÝ^´¤>I¢DîÕÐ |hahàKhAå@ÈÓÐÀƒÐ £ÐÀ)4È/¬¾Ù]XUhsÒ…yd í‚(rª>I,vrëYÐS)ŸIÊÀqFÑÇ?±+@ÛmέÐ=1Yðà"žI8ë¾õ]—wƒ¡ãD3ôÔdaPÃî½7=híÖ-@hÙF@|†‡uh/ºÐ½²+Þ›^™-–ÕVRŠ3t”ŸDG¢£øoÑ1N‘äEÇšÞß™çXÙû»¶›Ì[¬"È‚’-Ù¤V†Dàê{0xLà äúd¶³¾&4ì¢ÈzmKŽŽŠPÀ[MŽEï`; ã….ÔO,¶AfWÕkx¡¢õ`–[ TÀð¼ÀÞÿ 4K‹|?pWÓ‰æ±Ìµc™­]È¥xÍ3Ÿ  Vþ<¾¤ÞY•#]×vQr›{öôã½ÂbˆâöFOzÀ"öoɱùØ)jx†§ÙY‰×Y¸=Mûа™÷nsD`<\˜Ý^9á³Ƀë`kh ÊiÜõ¬m‡/u~¢ñ3tE&(×cîaˆ‹˜`0 ô#@²H’±O–SŠO”Sd«BQ²>†¢%TÀ-Cù–9ÞaCUºí[»¥^ˆõI¼q¡ìE«A¨<ŠÃ (ÌÛq™\@QöÃh÷€¬C4m$gýfqžIµrn†“jz\wÀ¤ÆßzÒ» Ð.ÍåIKQ7L»XæßE?üî7Á©3 endstream endobj 182 0 obj <> stream xÚµYK㸾çWøXkDŠz%§d°“l‹d·“Ëô Á–é¶0¶ä‘äîíüúÔKe«fÑ ˆ,’ŪbÕWEzõm¥Vü©U¦á?Z•ÇÕ_oV>镊Â"*V7»•ÊW*‹du³ý|ÜÛSïÚõ&Žã@ÿi½1Æÿl›‡ÖUý€&xªú=OùÛÏÿæÆ/ÎnUíÖ_nþ±2Z…À<"–‰&Ú&6a’­6¦sMŸÿ³ÎãÀ¶•½?¸/4éÃ'eVJ4 ж‰ó4L´0ªê~½I´ ÚÃÝ®:¸ÚÝ]ÙO×WM}·u]Õº­0òUÔy˜¯6 ¥b-nêÍ]Û€è&ŽÎÖ6‹ ßÛž‰ýÞ1©uÝùÐwLmvÃ<'km_®uḭ̀­¬ë…ûýz£ó@¦÷­³=ˆH3¬lz)ÃÚt!¼ˆ‚›}Õ‘‘/µÐÀFÊ?>*%²‡'ûÜ- NÃt0#+nâ%®Œ/䌃ݹ.±vËŒ~Ú1¹êåKjè sBèþZ¦×£ ñq0á™TP lÿ, ά÷ìõÙ ‚€tª‚-8bÙ7-,×@t¶ÜÜÛµNa+6•6$ tÛí¹ f`[Ö[4‘jiŒqÆd>áÚá÷Û¹éels--Ú¼07¾÷!! ª€?3¥sƒö½ÅÄ![‹m°#GÝÚ€ƒx€ákqÂØB£Ã܈ú1LòÞ•kÞÈbßYêíÒ&*Ôê…=¿^ •ä¡Î¬éÖÈsbñ„>ËÝÉsbßsBâ«2à²jÍïuo«ð ÎEÙˆsQ>àÉ€4á\$8çÎqFç•pŸpˆt¢[8wœ7€¼mΠ¿7eånƒ¦À¿é¨Ä0Ü9º{ªîx»fVèÓø%}p– ¡Ч †G_qrÿH_»?ÐÝ?7¡Î_õþ%ÇW± ³Á-0=€Rz€âR„JQ¼™T‡'yÞ ÒsZ@öl%.L¨fÈ8L ‹<~¾ˆ£‚a‹8YaÉù[žÃÓ1_’/°=¬½r„Üs„I^ëE„F*L±ˆq49vP Øï€i Nð ôÇÊrÃòxi&æâ—ù©q&³”MÅîDìt!‹Æsí+€4¡ÉœEJ)ö´°aÜýúÀ ¦ft$×iFù÷©ñìýš¬y„bòm ÂÄ­¢˜oœ5ÍðkZ;Yž9t]õP£É© 6_°3’%“'ÄÐ<îIêéöŠ­•‚è‚r¸U’kp’ŠZ3F2ØYÆüR9€Ÿ)$±7&ˆ«tVàèS…Þˆlë¦gÁE?ç3p¶»¦=B´hEB{hlÝÎösLJBìûfƾ{D§%„€s§bA °bÃ;·?v<ç’ÃÌn³m]nënH±üõROÈ÷‘Ÿ$'wûæ|Ør{BÈ1k Úи@6zF-ß Y/œ 9M¨ÂÆI†`ü¦kÚÞTtïºw†K ú"øa»¶Øå°5w¹ð–R7ŒDˆÖK“W!•½ [èUÌ$ØÊ¬CÕ ©¡&³ûÓ¾jiÂM&WT§Ãõ [XÁë,¼A»#­uÇfMŠHñœS*F^Û3›AÆT”üJb8kÀƒÛ¢ÑÞ@6íü=Øp±ɲ0àòŽQ/“ÿ¼^¾<´€Ú;'œ2 pªŸÓŒP÷û„™§\ÿ|rï¯_ >r¾PáÈŽ7t,õø¢µxÙV÷|@ù€ƒ¸ç>ã ¦¤6ŒQ€äˆšû`N×/¹†•ç¶u\6†å£.t°ÿŸqŽ‚ÈG>P²$Ð`O²_š¼äY˜{™p(ïÀ”®­íá6€bzÁ%t1›·Ãö ذvL¦¡fúçóm£Sç»OxÖ‚»Ý|yPEp²X›C5h2ªê¡µ£›B$á€F#l¡±qh^ž ¤‰¼¯Ð0‡‚ˆÓðŒ%`kÛœÀóz!L`qu ÷œcA.yï™n &}£|5ÙÜ1`õTÐà(9΂ړ ìD ¯'ˆÌ{ªÀ= ˆÖK~=ÁÍOÓ=Ó(1Ýç©~mw¶’í–¼(I¦‡?Ï‹^pž ÊØdV’*ˆE•ÿ¡_ÕÍW¬¿ºç÷B€1œ#‘„‡ ;jûÖç›~dÂDÍ.Ì-®,¥ÎÓY|`Cç„ÄG~ ‡½¤ãÏEÈC=Pݶ’W&è윅{î8k\jËÒu²=å’F°jÈ 9ߺØÁ¼Yýëÿ)$§$ endstream endobj 185 0 obj <> stream xÚ¥Vao›<þ¾_ái_H%H ¤+Û4)k›-Óšímé¤i™" ¦x›³¬{õþ÷÷Œ Òt™P"aœóÝóœïžúl4ž;ð 0Co|4^8ÈžXÞÄC~ŒìdO-o†üè«qš¹À|dN§SÃy12]×5>qv˃,#ôVþà["eòvu­—8ˆRBñè›ÿ¹ŽmóIår6­öÆ ûXÞñ± jN=ÇrWnMMÉ»V9~FâÇ*ÏïæŸÏ7§W‹åÛÍ»]Ï$?×aZFëјÜZÉë`‘¸ÞoǼ÷ொ»b,îrÀú “>À«/W›ÅòÃùáe™«@¶ãî€,D Z>$¡éïWË+ÿìp„%%…ˆ†$1©H÷$°KDD„bˆ9§¬G·©e¤¡ tå­õõø—ËÔÏztðõ:²‡|ZhÐE8”È’œÍûN©Ë[0 J%Ô,Ç;c ü»Š€Ô%NhÌxÖš'êgSÛ Ê;jZ¢žDr5°õÇ%|a Ý”4‚D€ƒ? òÿº<_ø·:àY®ÝNY+#²‚_ªu-²×æ5LHnp“¶š¾Ûó Ѻùi`žnH˜KÃw$_zÁÚQw A?º;;2òÝ<¼Å8bý˜g,,3 LïÃÅöï¬E±š+ëËè'÷?u §/.æ«3Umç>úçÉÿlk6Ú endstream endobj 188 0 obj <> stream xÚVmsÚ8þÞ_áòå ‡l ÍdnÚK¸é ¡mJ¯B&UmšÈ’+Ë!´Óÿ~’%¿‘ÒÌxW/û¬vŸ]ÉújyÖ@ü<ë…/þ+Œ­× ëdê[ÞÀ &Öbey§–7t'#kÝØo@Â!ë:ÃáÐö_v ìwŒ®ˆcDÖr"°·ˆoÔ’æ•p A„ÝÛÅ¿Và{®0>ÈMŽ‚|ìdê­Sw2KPg8ñ]b9ãëŸ*è·WW¯æ]gävHã(½¹•úÈ>WŸï¹©‰x–#NŒóßÕd'Œ:}%Šíwa¤•Ž8YC¥pª¾b0ä”í”zñ溣¤ýcÐA 9,ƒ¨t‘kJ™¾™]arqR6(õÂJ ´‡|ƒR-ÁG~„å¿™ý°#”ìb¥­(SÂg¹ä#ìb”ò²i©Ó3!k»Cí/"¿cœ2~Ào¹ä¿“m…B5†ß1D¸‰²N_˜1Íè–²ûœüæù5C•XIÝ ¾²³´0>aÄ?´ðÄ.ªcþ:×ö\¬Ò~ùiþêꂦTŽ õ–ÀÑL r^d…:û”üR=< ¸-ÃIÝÀý'äzš(á"Mkõ¬e¬¥n€fQoÙœÍúf†á;&«Œ„w¼}Ec¯ÆËáœz‹úqfÜðEãõ󱓞êuSʶ€Eš]0Ä€‰R’ºÚþI3\=°{)g(Ùniáß§ÁMÂùí×½[cú`%Ç´Æ¥,…:£fGD l”hã¸OœA—G[ªx?¬Ÿ±¹9Ê‘[5½´Óe7_âÝQpˆ Âi¬i¿7Kf-¡e•«÷1ÓÐEx†MÄ•s¹ø§úx­{ÂdW”˜NPÚº–Až±Â>3kš…Õô;êÆ‘Q4 û{ÆŠa‘'¹þ¬Ù1J1îI;¿gùDÒþ˜lU|7L¯„^×JËrDG£oPtý+Us.ª Ù¯‘)uš±¢Á&òÅ®ØÈžQš(I"ÕPôøÃŒãÒ]&á¬5y%>Õ銋~i«ïY½6Ïu˜zF'YdÁÿynö!;ߟ®Ç޼’¯y©/¡Z—TuŒVfùs¹÷€_„íû=ý¶0_Ø>hpÜhÎÂÅpÞøÓ„°Þa‹XKÜÕ \oXöHtuÒWÄFE7‡ VÛ ;ÑôŠÌ•y€Hûd^2æyQ`‹^¹dË—Z3Áú`fÁæUN\.¬÷Ïþµ> stream xÚ­VkOÛ0ý¾_á! ’–¤y Ú$Æm¢ÝCåAÈJœÆZãtŽ+†¦ý÷Ù±Ý&ih›Z©~ßǹ¾?€ þqÁ‘Ç¿ˆsð~ —p{äŒÀ4î1p}{‚irkœgpÁ5-ß÷ ïÄ´‚ 0¾ÐbFažc2ñ€Y&!W“9ø†`2Ç™wÓO ð\›“;eVkƒKwŽíÑp(.µüa`;!°‚‘}ìU¸Ò´B/4ÞÊŸ’Q¼xÈ0Cr‚=2O+2Xw@Ä©†ôÊȬöGvà‹û +È/½êÖWa’Üg¸d}Ô eí†5ýDñ’¡ûÊÁ6ÒjÓþ^-{u3SŠ:}Ù~¾nfú¼³ã°Š_- zâX`\H/$”?q‘ç$r"¬²å°7ØŒ&lwh‚•wÖóí0¨ãã R‰ë ˜òbÖ0Šf<]ˆJ…=rБ²óÏãñÙäƒòF¹ÙÓöpÐCA“yÉð…ÆÇ²˜C>–¡Ž †ml(Üé°† ~ÞÉ-¾“Óý}u…(‰rã6,2ŸÐ>î÷OÛŠ:’·qs&­õÝoGvÝ6¾þw#»ª{ÅÑÉ wûý;©.åÑA9O07R§ð)&É}c#ªÂ´ãáy­Ž<ëùI”KxÅQ²Qz(§{oÊ9šêA\ÆY‡äÒBÉ÷’ge ‰Edïp-ÇÖ{v¤êˆ-)Ñ[îsŸ2]WHU ¤³eŽt=²¢a¨²FG ’Ç-5ÒP×ÿÔÑËÄ®==‡óy«òÓ%‰.Ègšqæý)Ò1±Þ‰ã• •½ä]¿.Šï’e¹Pš9_¨`—-« ÌÕ¨H»:Á¡N’ VÝ…\\¶úÖ¹f”ÝÁ l·‘EÌÃä:¡Ãÿ(lNn®¯;¨µ`ÖÞà’°§û—ð­™ kÚZ_à-h3eí@ô3ÁûýLÀ¶÷³‹)øúê¾´w^ endstream endobj 194 0 obj <> stream xÚµV[oÛ6~߯ úøRɺºö‚ð²¤èФm¢¢êÂ`d*&¦‹KÑ0²aûí#EÝ•&– Å~çúôÙÈ¿6zåˆ? … ú5@³KÙ–¹´–(ˆ½@¶k.}l¿ŽÎwxÏ ®ëŽœŸÇ†çy£,»g8Ihz/ÿ᎔ï”È›ëOjsCð6¦) ~Gžc›Ü* ýyq6»´çha.çs©Ôp޹X Ã[š §cäžæ…nßñG4åzsV\·á“•h”i©õˆªÍkµXgj ³$Áé6ÿJ¿™)Nˆ>¦Óéz\À-MÏA†‚7/i$%<˜s&{€——_öc $¥tWÐvš~`)žÔ`Öcå›a/Ì…[w°yg=:uµºþMLÖãëOïÞ•·Û ÿîl6QîÝrFµoÇå$ßã¨ïˆe‰Úñ>Ê9f: Âbµ!°É"µÞ7o¯ß˜ca€o‰2¨ ÇjÙg"—"­Ò(Û3ífÜSžµp g:0mùp‡™re^VÿÌ¥w…_µdŠ¢Õ‰q\Ó÷”ü«6˜Ô­ *à¿[/XÆçºb&üñÚ͵ &ôfg-Pe•ä`WáÔuÒ¨B,Z§¿h‹0Ök­Ì›.¨eZ:“²ˆsà‹¡û¬›@áu\:¬¡i@Ÿœ Ƈ¯ÇÎpÃh˜_UÀd:mzpº^[§=Y«2>ï&ÿñ§ÁŠFÈfŠ®Ðië† äQg]Ù¥ •¯eßJjF:ŒÞÈXvóâëOSöTÃþ—0U‰¨Q]7àÍ=I Ãèøau³ºº•Í6ÌÒœwHý²|—dõoMÅ$u,”lÂ*rÏT2 Nzä6b8nõíâQî¦1¦w ³õ±ËŽúVV>oÒTü³¾uÄðƒ$ŒöÕþ¾ë¸«ù€jJCsâ; 'yË¡ˆ2Ö1c[MKJzªÃIÝ2Je'm >ÍøšRNqLÿ$V‹¬ìºóX?~5fºJWq )µ°¥²H°Îä³¼¶êméç?3“¦ûƒ˜S*çÌáÁâÒÚŒA£ß½¸—¯púâl¨yù}gpŽ!=ªÑS@ÈpøG-›Œ9'‰D·5m¢CVTz]9ßdÚSºs“B+¥m ¨…T‹€èœ)Ï›9 .¾@ Û`u´¦§ ˜áIÈ^âÈùô‚›"‘w‡(êF_…iÚ¦OÅ™!²K»Kîuò è!Ö†rÒ²FD²G£Ør²KYè(ÀƒÍj«×<ƒÊÏ©4¹A´¾éµ´3†š&˜‡;"ƼŽiÐxä€Þno„•ˆ$=-ë‡g̼êM½ÐÇŸþš¡”á endstream endobj 197 0 obj <> stream xÚµVÛnÔ0}ç+Ì[²ÝMsÛ¨€¶UQ[  ©[U!ñv-gq¼,ñïØ±ØI -—n¥$Îxf<çÌ™€ÏÀ.ûy`ê³$9xýCx®3wç Zo¼À™A”^Z/Öñ†Bb‚ °ü'ö( Cë5)nHœçßð¡µCt-LŽÎÞŠ›s§ÂоŠ^‚Ð÷æÜ­\ާÕÚþ¡73g>™ð £`î;þŒÂ¹3ó+»Ê`ãë¤È7¤¨Àöhì‡ÖÒ¢ð+ò‡±UÒ˜¨{ˆÓ¥]ùög‚;S8©|%.©Øž¬c"ìÜÏÓjƒ«#,M[Î…é¨ãü{µ>wBÏÙÄä1MÖ°¬cù¬Øâò0<—¥±wiŸ½=9éÙº?&Ç+q¥k$ýì ’Š;µSeµº‰ÛbÕzÇaÖkXz¢-âÂÀa¥Uv^èx^ZÈ’ ¡c³—c×zÅÜ’*a¿ë:çÐÌQFåÔ{pkO²%2;¨¦ˆÀ„äÖI öœ¬ÑJÁ é@bãJ†1´}}“†c¨p$™ÆÝkiƒÃ²†×7C³—¶¤šˆÂ!ª(Ò-ÁÊ…ô¨[ üqgBëH…’õÜâD5{RË \õ ¢`¼ˆžE IHåɶòú ;ÉÆ5äx×ñ»1ø¸"E.ÂøTúa"Sl¥QŒo몊 :â^ËMƒ®ÃêìEK¥Ó6´ØÜÙ4%•±ufù}’ÀÈ× ÛaA¿ÚQøÏ5ŽÂ‡)߂մ9ÿ5Â)ü:T”ÀFÜi[yw?HÖZÒƒá®-wŠMJp†*IDQœ¡oJWŠâpÔxÇI¶MYƒöJY©¦/Yƒ9Ä7|ð鄈¢VÁÕ %âäv¨È›¶“¾5>U¥ìâö%&(þ(Ô/¬Ïëö0ïM{¬s¨­býx7ÐcÊí¡U¦ë@–ÔK‚É¿Q+MòL:œkÒ× æ°=*vk”HL6¬‘Yy3)†7*ÓŒ]îºýl”EÉjÙi‚žÊ˦tW·êÔ}z¯ºïíõ4Š>§NòžŽRºF;,ú½†Y3f¸þ¤Û Ü.í?oæÌ‚¨ú b¥LÚQg}Üñ _àaNFã J|@ýÉ”üå__ºS¯,¦'?‹UïŠ5-AiëySg2“ƇŒ}§±<ï É61\Ÿp?Ÿ÷ÿ_ªÑ­÷%ª‡ËÒ\)oK ój»GÊË–×-~r|Iš½;^¼oÉñùâìÙé¢ÿCEµ´ÉÁEÞ<ú Ÿ·sF endstream endobj 200 0 obj <> stream xÚ½VkOÛ0ý¾_áRDÒ&qKS„& Æ´‰=é>”e›D$Ng» 6í¿ÏŽwé`Huœësî=÷á€ïÀ#þg‚C‹ÿÀ"/ç`xfsd8#Ì—ÀœÓ6œ1˜—ÚIä¯"ݶmÍš t¡ö‘d!ñÓ4Æ¡xµÛ˜EÒäõû/rñùAc4¸š¿Ð2 >Ê!ÇÓ|oxfNÀÔp&AªÛŽeXСcL­ÜŽ2ŸÅ‹>¶ ¶ˆ|"VcÞÑE–^š# ^å@# [Üyyh¸/œÇ”É,Br±ŒäjÔÈGì§(ËË_Ÿ„†\í h® œäМÖK,Ô\aͱ„™ecØ0UîBmŸ[I7õŽÕÏ|ß1 Yß—ÒW{^1p#«nÄßHüciÜë)iXéAW$Ƭ„”ê¨C • ýì$ å²O{¥îà¨+AlMp ¡´ z;¸_õŒÙ¥¬71ºý²ÞøIxa"ÌŠížp¢ü=ÚW@ÍTN˜Scj×uß‘|P Ð’wAP°xÞ»‹ÓžW7Ü”õ;ÖÒŒ ƒK#Ÿ‚ Q¼§\ Iv­z!ñi„h³ˆW>‹DmÓû+y{Q J·ÔB'¥;(¡hc,[iD€£Á×tÏ_Väa·"­²" >qM²,ó‡ˆdkZÖ¡¤î= ù̇õY•©Oed½P•ZЉً—ÙQ·ùÿÜ•ã±]ÙR¦1+ÆÊ»\ ű›»Z\Çj¾êæ=´›EX!B2RÿÉìDÒì®Þ…¸.)¿1U%- ¾öéÞÌuñæÁ^墅×W8‘_Œ5Äø­~ݧ.îЖշ;†ú­Ñ” ²È¾täÈs víCƒÔÞä)1(ó°àÞpÔm™4“gÙ|Q\–òw¦é&oJ@ÿ@Û)…ÅcËdw‚m¥á Î…~îß4ü«ŒO •6kÏÑ‹ST ì–~æÛÕ(|5Ÿžýßöœ® endstream endobj 203 0 obj <> stream xÚÅVmoÓ0þί0• 麸q^Údm“šÆT>-Ó‰ÓZjâb»Äøï8¶“¦mÖ­š&ÔH½Øç»çž{qÀ€€#L\ù8 -À‡)»90r"0Í ò`€ivc}œ'KÙÀö<ÏrO¶ïûÖ£3–)gÕ†oý$b®U..¿já'Ù‚”xp;ý|AiÜQ&ƒH­ÎÑ„0+§¶º0 íG0t•Þ’‘Rä;p+¶zêÐÄcdì|N¸Ð»IšbÎ,N´Ðç½c-¥‚¸¶ó&'eN!wIµâÁ©2mkÛ¶$Âw°]ä8-·ÍHNpv¨ãbÓ±ÓöɰX±²>ã4à"èo`û[ueÞ4_)-î2¼ÀB¹ôåñ„ÍâRt=øíóé+k9c]QÎÉw²׃˜á“KªØÿcEé9´ç1‰“_µ«Åª(ùf;Ýu¹Ù1óøp¾lºulå¥"õ‘ ºS]…Ü{°iªÔ'Väþ‚\ãówBÜ_ýϼ:½KF~íÈkÍÜtë–Èé ìws=ì)”jÖ§Ù Oú5»é\¢kÍÃíÁg£½•y6_^ýš endstream endobj 206 0 obj <> stream xÚµU[OÛ0~߯0•ÐÒªIí\zí1@BˆmU§=P„²Äm¬¥q±U0ößçÄvšPXÛiS+Å—ïÜ¿s îPþ¸òA´ï' wîÉ  !@ž3 À$¾±N“p)0kÛžçYîQÛö}ßúÄ蜅‹ɿŅo­ˆHäâú‹ZŒq§$ÃíÛÉ%ð]äHå°TÙ‡åYïõÁÐõû…QÛëû €íœ¡[â–˜1*-n`M­Í§íãR[zë÷KÃ"g™B!uoÕ1¿ªcØ® Tˆèân¹Š…Vk«© æ#°n ×)ÄŠ|‘L( 4× ‘`µˆrư¹^Qö½Ìj±‰ Ñ ìÁQûNoÓ»Z ¾tÌ3Êð´]]Ï ü8 ™BvP‡²üYž?Ј—žÝ èú·]í?®Gï•p®îÞ©Ï‹hk©@‹ròˆé¬<‘n—G¶®æ‹å 3£Ãè× ŽZUy[,Ë¢$•ªÖÙšjÒQQ•@¦öH­ùtšµºUüÿšŒÏ:­³¢"‚Úþ—.Áý©;14Í9Ö Zž`í‚ ê{ŸapUòDb<]ª!yŒ`­Ëœk4Çzñáãõ™Ze4³1£/’~P‘ÞXôÍlØJy‰Úï1ÍpƒÃèÿŒ‡ó<‹¡ZÉ*!Q¢ˆÓTgðæ&©¡xv…Ù[úNý¦† ô.³¹LsÎM£0M1Û!‘ ¸_.gM~sËéÞÕƒã êØÖ!?Òì£:ž†³53ͺÀMÆ„ F¾å®}eDhY'ŽqœÎÕ>›ôÒ‰ÐÈ w,可Cdm\Ç~2¾hvq¨>?”èñ(‰š/ªæ¯b==¹º:ëvÇ)Ǧ·ŠÇ¥ðùjŒ¾P{R{H˜óp®EÃL[¬“x³÷ì ÅÆbƒTewuç׬êV‘íÌ/ó´ìݶëâ@ʪõÓ“útÖ.ìöP¼BÜrkˆ*«Ú(Ãr:1;µùÜ$Uƒoû—£)޶ˆŸMÀç7¿ÝÒ›0 endstream endobj 209 0 obj <> stream xÚ…XÝsܸ ï_±“—Ê3YY¢¾¯OÎ%¹q'—¦{77Ý>È×ËžVÚ¥:þï‹/JZK™Ž=+A¸ûcîø w™‚ÿ`Wwïv·Õ. ü"(vÇ]˜ïÂÈ/’ÝCý/ïîr¹Ù«ÌÓmm¾Ýì£(öî~ÀoäýôùŸÜøx“+¯×{Ê{ßÁ„ܫƳno`æP¦k™ó“©tkõÍ¿þº‹UèÂ-“†D»ý˜îÂÌWa‚Šì…e~®fu¢pR'K¼»›}’*ÑúoŠH´ÉbÒ”bm`⤠Œ-µye‚8ñƒh·W±ó¿Üä‘§{;m%ô£·ÜŠøó¹ÃÝþôù,ðȆëyXAN+íÃ0õ¿ÈHøÝ§½ôæé„3bLb_e;?Šˆ§5“…šûˆ´t,‡ L67ã'‰Ø´ÞN …sSÍÍì-Ÿ3i¼qÀ_»ã€ê>£ªe¯'žÈëÆ¶&‹´û¶òE£h©wšøœ+¸YÈnv†Ë··G{ô»þévcœFêóF?°•ûÔ kE/cYoqØþl†A×L:V¨Ks¯lknÔÆ½yٌȄ½œ§‰F[Ò+X*Þy|8ñò‘׈W±à×—A K‰\¤žÊöÉ´OL12âäµÝÀ{(›¦›ì®k6ì^)?/–Îø7û4 ¼/ÿøp÷ó»Oˆ †Ó+®‡h™wû éØY¡à–â —-!Å]";"šûçòw²SKþœKÚîX6°áX%Þ ¿ ¼ÿþN©×õ²êpÒ=K<Žm…NT6"ŽieøÑêãØ e‚µ•ÅÂ¥塟(¹Gt浩‹iYöp¢£ =ëN5CILÝ!Æq$>z¥µc/“ô†§N2OÕ4lØR4a¤ 'U‚Ew<^nœ–‰ã¥+C]9Nàš^93 rº8÷žÍpb&4:!¥#Wâ™­X›ã ;#Ðd.lÁðù ±êÎgÝWRVïd¤íÚýú¨®ø!J€ƒ&ðùª«ÂEo˜Š ¡»HY1{]”Þ¥×V÷lM?Òª¹3'Pʶ#D6ÎcYy¤3ë3J*Ù€+…ÉÄEê=éZ•Ú™, DXÖôL#i]O>†ÞóÉ4š™øö ;¿fˢȮµ¦Ö=E(èÃþäý‘§/›<&®(ÆnD£sYKàyœÂœâ«eý‰}ÐÖ*™S!u±äÏïM‰-ô{üÎù}ÞÀ®UZà®9š!SäuÙŠ áTÜ‚ ƒ¯£lòùÜÓÌì h¹ë¢“UIÂ7X­u³KRXp™ÏÊëÔ…&ßÊ4Úš§VKBc¿É²M ÙWi{Ã~%ƒQ(‚œ$p&w”Å jJxjá;Ø!cÂp××tã”ä^ ÏÀ_VF([¤˜-H¤r#“úÊ©ŸNê¿e9ÓªÈ]Ù—§Ç_Ogj ‘ÖrÓ±nälºmä³@Q~ž™ûÒwO}y掅hÚÔ,üDX8îbkN‹—$‘ÉMÍA"LÄ­ !.¦.;XîñÍâ–0Ø5< ·) a`G…÷nœæÑ9Ë|Ž@6²Ç/h4ð>NêÖêo¬%Ëÿ)™à€eË ÁÉÜc¬¹%.œzì/,qÄH×*J—aÇzýTöu£­åaNÓ`‘ñkï?i™r.ŠxXfµ—瓞ӑüH&¯K(’pK!—2ÚöwêPšÒϯˆ¨%?÷š¤Kàr ñò@Dne..ç&dŸµâsÅò|ê\|¸ÆyÀ4-à…±š«4;z}„üÔV*ö+ Ô¼ûòåÓýwïî?Ý?üÆ2î>¿g!ï?|¼ÿ|ÿpÿ·Ï_¿‡D QFùfB§¼\DÜÔ!¬‰ÄVÒvf×Â~ÆHèIBs™—SN¯ÄT…Ô>ž‰#‘û„<Ÿùò›Ö2c¹67ÜІ!E]š²Â3“tʾH§‹‰êªÊC” äØ;u …Jœg‘ÐýÇ)f©xWX°¤0¤Î@O–…ê‹%M«ÂU…Bè;u BùÐëã‘f¹÷ut©( 4!Ë´]hCÐãLl¯XÄâM½tƒV˜Ë0pÙ øyÙK…™Í”c@Ìc;E”G¶Ò½{Wd&‘"EÊù%Ð$‡XÌBÄ<…DKäEjMÑ€…hOkøà50H~Ìp«@@+%%ªaÉz`„ åFQd 9-ÂwrÆlaÑì)!è-=ût1g#S0v·”pÆÇv””BÅ‘0t0$Ô6¢PÉ9J°6‹/BˆÐu ¸•B¶Êb …ø=^HÃñ jYú7~IU¥/s2ÀƒÆ„e°cŽü)£öi,Ÿôö!©ýÛÕ®/Løª)}¾áÝŽœë'ðÒ°[-”‹ø ?_"‰\Ö1#àíX˽Ã( ®ŽÕ’žiÆ‘¿ìÔy¼q>늖+0ªecS«šÑ¶8 $²‘Uä. ဆM|2"–,S‘-¢iWx›¨"·Ì´šõþÿWuv°áæ¶ÌÑÍõ Ô] ¯¡Î?È‹S1‰¦í‘‘­n7Ü¥Wl¼‚0 ]†5ÊBûn<|p5CyÁ*ÅøÖ€o@s#ÍM°8o•’ÆÕ^€È{Ih/W3¨+–¨r²„_rŠœ,Jscmb sÌÇa^Zy—²˜r…rR>y»Ë&‹Ey!U:Ù ªmp‘ Õ ÏË[Â]ñbš$ÁU%9WHÕßFa™2#²,ñét‚ròÊ诼µ(Ü1DÁâ é%Ó¦‹Vð–¨hèzSQæ…>죴>yJ $þ"éU•pܺfv®¶ñpCn‡§ÏEø6PØ426?¦ ár2Mg;øT ªѽ&i”€;<6Ó¬ô$®¢Ð³7¢ˆ>o>#Q .Þ·ì¹`‡²7x€”úpPNßR ¹BÄF¥û:Wq5œæpOªlfh´}%‰(ÐÀ膾Ä~—ÑÍU$ ZpŽÂï}Ë¡îÚÕ&ŠY¡·|ž¤6 !3‘bn¡¬·,c¦OÓ6n©‚“£DR öhtiÅo><ìþþ§ÿÌÙ{˜ endstream endobj 212 0 obj <> stream xÚ•YYsÜÈ ~ϯ˜ÒK¨*ÍûØ7íÚÞõÖN¬$ÞDy †-M—9ä,•µ¿>ø4‡ÒP®JIUÓF_àæ÷M¸ è/Üäý›Ýaóíõæõ»h~”›ë»MXlÂØ/ÓÍuýïêx¼ÜF¹gÚÚ~¹ÜÆqâ]}ƒßØûþ—HãÝey½1èEÞ›ŽÞn:˜ö’VŽÕh»V(²;Óæò¿×?n’(ôiÀ·É"ÛÆeé'åf›”~ñÌÔÖ¦§ÕAì{; •8>þå6!ÞßÉh%?ƒÙ鎴¦iŒ.l»QÆo‚0elÜ]Ë´¤þã«”‡ukO\;Ýñ£Ùum]õ3'%°Ê›ƹ‚Í–TŠJE†¤ôª¦á½x¯ZÇN~E#Ú ö¾­F&J¯dü=i8#YÓÌ«z[µ`4B+eä]ïuñÙ…Èð¡BçQ:t ¹+‹$…÷§é;Ùë}+ú8íg§ú(Z°{óDy ÊEcEŠ(+—÷*Ö ¶V2{÷(”ŸU;ëBñ”dÞ¿[½ÊR¹FÛµdDî,…|V]„ÞÍÍwh2ö2x}YÄžù2ÒgnIy;Ó‹Ñö]?JóX Cu#¢ÛÁïH,´µ¯´5³jì@—ýŠ:aÉ·ÁwظכÚB²b–ìì>f)qÒÄëzùý¶ÚaùçÓòœå1–D¼äî$õl+kôSÜ9ž¬Fi _Ì LNã󲵫'J;ÈtoS 0m¬?;Žø~TÄKß'¦W2(Ô‰œæÜÙ¤7Û>ÖΞ† O¿‡nàVâ¥2ð€Cv}ÍÊ!÷ªÚZWÙ‹Š}qó³3Þ Ò ÊB@¦‚V”ÊÌ–C’Ë%uÄEIvË[öU;ɦD-˜£kèŽêHè1’•ê§Xº†Dw0\ ¤•pàÌÛÛÖl{SÕÕmc;à„¤˜0áao޽”#]õÙÙwÊ™“vïºþÀ öþŒ4‡£ÜÕΑwîe¡~xý ˆ¶Q‘h˜QµŒô˜Ô¸7­é«FfÓmcw,j®|âI»Nv<±"ÑÎÅïÍv°í=À3×]Eë5èͽaì+{¿çbÇø_õuó(ÓvÜËz–Òî¤#€SÛ±ë†gã÷†%ã¦=Ü€v×¶Ky3–WõN¼. Ù ð{´_L3Ü\¢œ¶ç)@›ƒÙÀ;öÝ}_]ß˨ ¡ºg; ­Ì ‡î`dö¾y”Ñ•;Ãð‚Á¹ÂEteqŠ/Æ„”zwÔ⻣ßÅÝQO4„éö8)%›F8«W¨ÈøFÓ+·h^]McG|1à?kœ1 Ë3e‚c¦x²Ì訔p“²1TZ¦ ÉuJ†UrŒAr ‰ä'œC£á‘(fäíUm3YWµÒïðH>XÐÎß“§€‚×)âH R&a<»-Úê¶ 9Týçéÿ"ÃA0XÝìt!?Ša¼¤Œ¼=?|áŒÐxÉÑ­z’㦠>kÊ÷s\Uõ¬›@L”¼¹¶Ã®›zòôCÒ3 òûd8¼PÚƒømýf@|;«1ôzl#èðëDÜ%€)Co€ùNïJy±—žË>C_ž‹Ó¯„Œy¶ÆU&ìPNìÒh‰µRcœ@‡ÓŽ/YÆ?¬Ý4ãõ;eÃ"¡Sz¤¯ddñxº›úBœK7þâk+ÆÍŽ‚a–œ¸››_ÝÈÅÊ÷öKu86·´³ÁïÉWÒbáF˜b5 ±ª:LЙ¬chÛ]3ÕF:Ç^¿+ RœD~¨‰K5ì,]'ݦ.3©8ôãX êÝ4jš“Ç~/•u2üpŽl{ÇÏV6Ã5åp¯Ä~ª®™a˜‡~n¶‘ »·<œùA¶™Ç>=ã•ϼDò0ß”~™Å¼ý,WÉ?~ÿóOk‡‹ý Q}Ÿòl/ŸVYD9Þ#¡˜ôù$ +‘N^åæQUFû¥OuÎôÕ8!I‘ÇÊo®ß¬‰ùI¤PjZÊk’Ä„Àä(”ÜÕ[ÊŽ * ç`aƒkGÎ ¿p¦ñÃõºÞ?ˆŸîø#ºaü¸ëíq”=VUšg~áRæoÞ­'õ3Ç]²F¶¶qVúyü i$Á`´œU+Ýô#È)Œ;yè´£@Þ?õª\ž…RÑ›³?‚ØyØùáâ´ôÓùt¿|¿~[A>ënE?~á®û<ü»5!zeoYØR[¯p£ÝB'ÏÖä I¥Îz "rI.I‚_@K%ˆžŽ¸tpFª aXl¥1')èàå‘–Ø*5¹›NB¿ —Ñ^×"ÔJ‹r~¿R ÓŸÈ€I—XÌÓ¼ša `sMÝaŸ4ôL¤~øu˜Èp _…‰ÒL(œ^XN¸öÒEȽbé ‚^ðrX')󵊈GÍÏ’¥ˆ>rÖ#A–K^¥5ƒô9Ï\!#šhà0îP+u¨E§z‘Ìq¯’Pr~%LÜ?s’4NþÌ# hY¾<àsÂó¼zcYÕ|…?uû9½ÕÓNx³Æ´ƒ¤=™zÏÌO%¦A9òŠR§~Ngbƒ§\ˆmúa~VàAC¡‰í°µ.¤Ë)/2Œb¦äm¢r‰%ÚJ=W:d9>ë*ÉH692,rÈ6¦¹SÒc3i¬7LήÁ÷®sEÂÕ4訉as¥%N6A ´ÆÔ,^ ©Æö]ƒªR”^cîí-Ôy:¢…PDá”BHtÈUM«[¸ò-÷4ÛÞí.Ðî®^\õZm]ñv%ÖU½ ÆI4iá:—„롳ŠÏƒDæ’±DËT)T,È 3ÐpÖ½ŒÅ÷êuR]‰DÀÈ?“Bë;лëà²Oy2PŸ æìd®^Ba„¨5Î\†I­VÔƒ17éê<°­ŽBSÁ€XˆV hµâœ t¥ŸX¤®Dõù¯ê|.ÜmLöÕr? ±tÍKõ§{Û¶J˜è&±Û$^:Eêwº¡#’Äa½®i‘ƒ»²Í qú*w祧çîέ Iãð«ùšñÎ+±æ#4KIÞØÛÛi4ÊÔùÌâN~µæJÍ+wešl­¼Íö½ÔƒD§OYÎ%¸(]|…ˆ3o5å%Ë!‚O¿ýûBZîì‘À ý´ÕÁ‘QÂ6µü9!Ò+Ü•Sã\rNæ’™h¨Ñ¦±HïWjoаÊý¹ °€2Î*ÒåGõz%IÕˉ…D,áà°á)† ¦ˆ+®Ž ®Œ"Ëûkö´œÒr­B*ÉMÕÞOФ²ï-õ«„hp0¯Åp)¦äR»EûiYQ¸ .D†]%¦¤d=ÇfzÆWRfÜ$‹Îç+È(®¤dÜÊB²Œ{sÐÔt¸€ã†HžßßJ¾|ÛÖô*'Í<#wœú\ ë/|ß’Xk Ó9M@=¶ÿ2®3XVxŒvÒfëËÊå •ål²œí=Cpf´õȘ4 éœXà›fçmÖªÎÙ©ê̤l'´“ÕÉÞÔ©SŸá$QŸ{ …ê(¶ïvx(èÅ g· ¥ËO€/™úÚ9øAu,Øö¿ðÖqAKÈÌÀÊ»¦²)Cò{>ûL÷ìË¥û0²Åcã;Ôè> stream xÚ…YY“Û¸~ϯÐ[¨*K! ŠÇ¾ÙÞx3©¬½[‘SåÚɇ„FŒy$mÏ¿O_ ÁÇ[ž2qu£»ÑÇh÷eì|øì’þü]ÑìÞœw{îÿ˜ùÙî|Ùé.PÇì´;—x¯û~O·eõ}P*ò^ÿ„_åýòþ#7ÞíÓÐ3Zc/ô~î€ õŠ©Ñí(Ç|¬º–Wþ«*t;èýÏÿÜEap„ }Ú&V4vPYvŒ²Ý!ÊŽiH3Ÿö©òºiˆ‚ÄkräøÄ¢ë^Þ–ØH½²FS=L£æ‰ñªyâF0ž¯ZË`ÆÌ-ö]VSó :*ót< 3)º¦Ñ¦¨òº~â‘ÎèþîV Øjm×®‚ Àëäû^o:ÜûkUj”7ŽA¾%‰QÒjà–ØIhXƒxÑØT×=¨22‡¶aý@«1Dœ,dµcõgb"!Mz›¶j±ˆ08c:yßו–™±“ïUf7LŒ¼r#óF£þ¸¤œ 4âëºæ¨Y‘:‘Ïçz#8Û,ÖO¸ ºvò²äF‹›§Ž‡Š<=qà©oÀb`YôWd }R*$¥:Ti»‹ª›ÑA‚ÅGqjöQD䜶ì?ê×^ÛªÈQ÷SŽ—“!Ç8ö½î|z*F£QP ]v4ó9À £ó’O‰ ^&Ãæ`ÚÞ9o\uáï̃OáVèÅâq Ê~&Ûqw ß A4P¨¼ÓÛ‹±áó M>çfM¼(t?2C¦žª$„qFžƒ_ý혷šG.$ 4X‹ã­w¨ïI-¨S¸Ê8™ã'òêÜ<ʈn» ‚ÚäâSƒú žÛ4ŒÜËktD\téêZLE3|ÄiöÞM*I®ƒ.–L«•㣟¬Si:©;,¶jé#Ä ¶QF©7µ%Å&” CÞh&ZÅÎ@Î×¥°~ ƒã¬GG/,s»Ñâk±b¯Ÿ wAþ¼Ñª¯íR¬:î9‚Ó1ÎXó”–ƒ518÷Û¿}º{ÿ ›èî=׳ß?¾~¾;"Z‡4™ý$LbGÊäÄ‚ WžéMÅÉŽT†Y{ì8y/A¯FÉq.397%¥Ñ¦éZ,/Ø»æb9Ž2Üüv¿Å¸f¸ßó(8áFÞDŠ6já+v¸ —æ 4MGi<Â<“·Ü |_(é8yò¥=þ:ðD=èÌ5Hþ2Uf+é¼uU„Å ßQ‡þ>¢‹ªÔ9 …†%=(À`©n‹š’¹"CS#Y¢SD‘ík›©ùdh67æ ·•-‹Zç 'Ù †Ðcõ0}\‡•më,P¤(Ìí8…D å¬€­Xň±”g:6ä ÒÅÈ㌠€»˜"e± \,1wW>ƒ¥³! z“S>ýüÂ>á¼OŠû¼àeAæ=î­¶<2´zfCÿ™3…sŠÐ“4‰œf»!ÛÖî´ðÇêB#Nš!^ÓÌ¢JDë 0GÙœÇúÍ6‡Sy竌²‰cO¼®XŸ*¹n‰‰Î8‰R:FNyù¿¼˜ÝGúüQ¿t¾aæB¡,v :½áAGãø‡>ÿ2iž›qI(AB“H~ – -Ò£ǖ¼|sQþ !@oöC³PQO¥æ‰œÇ®dWH”¼\Áéɪ‡&o‡œµ•[¹r¢KøHF^’± ¥…+/#Ý$‹™Q‘‹Uzb ÍMÊðµS² ´œ]€ƒ= œqD„™Ü6 ÚZ=Ê­ 7üÌ‹jÉ\öQ ì5²çµ’­¶c)„|Ô­6èÛ!¾\à1_ a‹Ã4ð±Æ± n_1Šp=Þ iSJ€oɦ¶îò’—Ï\ì âvjËܔήɼ뭰PGѳ« è$hˆš¾Öô¶=]Ï? ÝÃǺ9.0–ÜæLç‚4­×$P )‘ÓÕˆ *TãRÿÝå޵a„—l 1GÆq°A'(û®è–ÈÀÞ8ßð±·ä.æÒ›©\^ÓBôHÝSq:ùàºåÑ'Â)Â_"ø±j7ïuœ8È»"fdøZ¿‚lN! ¸JÖ¤a9ªÑ–(â\—ŽÉh&“W· ³¯nA¶Êüè×Ïoƒ)DÖœ7ºÉ¿àÛ›{¾8mÅfé6A«dÀ^—1÷>/šD¯ZØ 9`àAšP’¸Avl,+/#ƒ1g¯z& äAþú9$ò#ÁÆ’C"_¹¶Š{ 1È?`%f#üŽWÃï&H"Þ`˜Š +8ð¬%1zÌ«Z.´4q±¼òb­q…ãÚ¦¬Ú‘ä­šFÐ;õè±3aÈ¢±¬¿â§KPž'è%Ï®@PC üùv˜¹Д 3>~²`r¸zLãµ3²#öl™ÝzAjJÂzËï$š.|9ÐnKQÉ èà$Ïj~Í‚ñí,˜ ¹‚hyÂY¼ÿ÷ö‹ÐòŒçµ¼W%™“õ±Ç\©¿FC8ÁÿÊKx…ØPËÚÿÐ5^Ô ÅCp‚ 趇à°}¡›—¦þ_ ‰/$ y5¸ò‡E‡$¡¤¿ùˆwzþsF¨l<`k‰ A/æ+m×HãÖŠL.&Õ@¸{Õ ·žå ðÓå×Ö™‚иÙWÛª !È^×Cµéjiq”dËÔæ³U›¹ ö÷dü'õO%‘}VŠç:BÏõ!‘XM"›C¢ õ`påX´¼ãï·+lj–ˆÂQåq¼uàñODჵùÌXøbEÞ„¯½Ð¿âÈ\2¥ ] +Ë%sÓc 5ÁTSÚ·n rµ¡«ZéúI’­"þ5F<\”>rc"¾ËÕ5õÎr“‡±ßPÀüQ&îåDNüÆFWO{ß½yRP1ˆ,·bÉÁtçë­lh÷á.áî1Ê™Q5ÉDæ$þæÜï‚ô®á·p¥²©H%åšÌ?oá ;×׊/Ôг œpäÞø0àË š9Ö3!¨a„1W-îùó¬ÌPü¿Ÿw¿ÿåÿ%w> stream xÚ}XÛ’ÛÆ}ÏW°ô°jIã~É›ì]Ù²-Ç)m’J…yÀÃåD @aÀ]ïß§o (¥-q0ÓséžîÓ§góul|øl²þüMuÞ|ÿ¸ùîC¸ ü}á›Çã&È7A´/’Ícýoïýå²Ý…™§ÚZÿ±ÝEQì½ÿ þFÞ¿ý¶yèõJáWèÝw0!÷ªëYµ[˜9”ƒîZ–üUWª5jûŸÇŸ7qìaCŸ¶IcêÛEY¶Ï‹Í..öyH#O¼=Ìc¯ÑfP5¶#O·Ü7œwüƒ]ÿƽFU²-ŒtÇ™hÌgÌìSo8l÷Û]œÅÞ¿¶9È_yÞ¹DhÅлu³Š)ϲõ ‡F:KCšø›1`#–¬ý¥W/º»þzÁµUoFãè#ÿòúÐèzý¬Û²a³_®O þIõ28J— Ü,zÏú•S†?/t/ª?kƒ2{¶xí‹~Ò}Ña¿K¤©weháÄãõ¬âÐñ(êBówÜ´|Vw,Rî.¯Ã©ëÍ]@¤»žÅÎ]/=öP¦kÍ\FnFZ‰ÅzeXdõ“=Á& &V°zÊVç3œ4MJÉbøKj`ãÌžZëƒÄ¹©áô­™è'W=;ÿ¾ÂEÃ"ñ†îY tE8þª‡·ðŠð·Q¥‘&.Ä׳ô:iÊöиôº­ô]!L#«±p4 /»^Ù4ó)z0ÿo}T*KÉ/Yš…O¥áŽ£ze—[j^)^-z‚Øa{ÇŽxmeÌèSoövÑ:âúoh C?öÝÙ:»–y½úzÕ½²*ZgÎ÷Aà:óâÌŸ…héL¼9³ÞœOÞœyðdî”ÑÌk9Èqâñfh‘¹Œ; b”™œ;çNƒ=3<Y”yÜgÒ2™…ì=j™Þï!ªgk³ÁèÊg Ru´í`Ëi n2°Ûnlãv·H´p)>ɾcÇtŒ9Æûº,ˆ./—¾ã;€:DfA.Š0ʇ`‘#á4ÞP »öÉ«1K›Ôÿ-«Ñã •»Àî(6,ÒÄuØù‰nÍ2ae”¸?¶Us­ ƒÐÓ糪QÙ]Û4<ä$¾ 6Ö6QÙV (q@g#i“&ŽF‚6 ¼nŸYh\™Ü¥²jF35%™Û€q\Â4ç ‡ ’|öRòàpÌ3ašA<×yîLPøl¸ÉhSHðbÐÄ—<`°uçÂÕŸ—bNìU’›ng>£×I¹ RUö‚*-d[’q¸Hññ ÛÍF¾d#wée6òç±¼¤­‚¬®#!›no`õqb¿–›N½ñîEBË¢m· êñí­ÁfÓ­ÉôvÊ£ï– XÇFS¡WõŠ3èÌ”Ðgºš\öŽ÷Pij{(\rD_d~˜êš ó»+.YÙº½‹tfïBèw‘‰w¸µ7ô9ô;(Z–ag-2vNè ç¤V­LÕë'Vº°|¥X!¹Ø9C{<ÎZƒF´a¾À™yÙcD}ÕN¨’ìóY°ÿü`·I‚·U!;‘ƒþ 6RÖ-À ¶JU‚n˵@$33Ãd:w’N[¬ðh”cb’Œy–W¯*¦´¸@Ç ZͪÀ8@”†j¹lÍ¥ì•M8`~ùR³ZŠÃeÍzÇýì1ÂöÒçUs¥j¡KkÁè7‘¨pê>Úd…ÚÓ¢Ùª}âԷ̽÷8w«SŸ1*¬I½'(jîÇuç™÷xRFöt*òÔæxÙ­öWó^ £žßE”0÷ “©þÇ¡q·0ƒÎ3@Y‚‰£ £¢Ǫ̂,Gqæ¹bK0l?ÕVÙTí×+010œÙüÍ#óchY°"¨¬‰Ž\oÖŠÕ*'Ȩæˆpâg\ŠCîdçe¢˜C_!™]¤‡_éèÍ"L††ßò"Oßm-oijóaÒ×kÙèãÛ7Š?AÛum]öoã§ÝÄOmQ˜Œ˜\’ÛÒûÿÂÜFcÅ.š]$µ¯­î‹Ò*õ§™^i}‡,Ñ‹×Jyã<äA¨v[¬'X‘èç–k3ø4ÝYZLµoì8Žu€šî˜7IØ<Ìæ—^þ”@ÑK ¼ãcÔ]P© ¤ÎOƒQ‡ÇÍßþô?hT endstream endobj 221 0 obj <> stream xÚYIs㸾çW¨úªÊV¸/É©÷Ä©n»R­™Tj<X„$Œ%RÃ¥m§òãó6 (ϤºËÄòð€·€¿-‚…ÿ‚E±9.>¬ù.UøÅb½]ù"ˆVE²X—?{ïO§åu˜yº*ÍËò:Šbïý_ñy?ÜýÈÏË<ô­±zŸjX{›þ¨«%¬ìTgêŠ)¿˜®Z½üeýE+ØÐ§mÒ„Æ®£¢XÅÅâ:.VyH3麅åyîuµ|÷¸W^xÓv±'å`¦:cr;3I8ÂüFÞ}u@‹`æ UUÄŽÞ q•"úcá :÷Ø.WËè-õ᜕y ¿¥äoŘVg"#R–ðÃ1)øàj£8Ú훺ßí¹£šFU»IôñQ•z`[>,y|LÓÐaI€FÖBB„½â‘A—1„ÓíÖî(”³²)lVåë\(‡¾¤º’…äÆðÙ8¹EÊÉ18É).‹dOiÕQ BÌÈëÅ Q’ÑqÑp´HJfÞÂQo6Óã\QižŽËòÄæÌž¦Ï´Icãö9fv¡TP˰ÌàzÊdÄœÜb¯[¨·()dÊWÊ-ÂcL]ÐzÅL8‡!çŠjðßÀŒAt¹„M42²Ë$jC:­Àï¢VpÒ}ÄgÎÐÁO€7LÇ+¤Ê4GÓJyƒAA £]£ÁrÒë!c0n *Õ½‘eÙsAÒ‡sÍóýš2IVHYyðZ  Ìagg’R|;»ü‚ã‡$¦š§ÉØx”ÇI-ZDI­kDtb{Úº˜Ë†õ­$7 Uàt‚Ù8n"Q$Ãâ±`œ³_Ëò¢nºéœ`ñÊÓg(‡‡R;"¾pK?Oˆ’UZ8–J0§¾÷ñþë‡Û»Û»x›O÷üzs·þF«ÆE3äºÈ:›š`ì£Á,‡dË Ñ[âü³éöÜüŠ´å9mË$>hÕ”ª¾*í6:’ˆÑ¯æÊ°ä85ÀZn ¼aæ>E¡/tbžSœ.lB%˜9[ Žç÷”Ô‹ÆhÇþ9<,Dr›)9R7»ã×îÌÖnhŒ°pÕáÀ Ž0‡ü¶b!úw¢0K;FŒ]ù6+€;ØõàÆ¨5!ÜÚ‹&9ÓÔ•-˜„oâÎPü¹Å'ÀFËß·d€rïÈ ¿ãM{ŽË–¼J€Û÷AˆvÂæàÜT'âðïÊFê3UǹrLþ¼ˆ! 06Á&¹&òþ…pˆª$K%Å CÔ´›ƒ2Gð¨ w»5'ꀥK­tQä[´üÄó•æq&69w3;¥íÌÉÉpœ”B‰>l ÑljŽUÊÕöи=ñRðx)Øð˜™&“ž]Õ×-±7–Є«8k3Él=-yŠÓ ¶O·€è004HÅ, BÆ` yw#TÊ6H¡£4àv—=p&ÕÔùHèå¼#38TI‹a QŒDpœ¡b*ˆ.Í{¶@xÇz²Õ®ˆ,ÿ˜/ín,Äžf½gvm¿Av¶'¹ïBÜšßz=À¹Ôa C+ÀJ å€<èÒBPfË_Ó ¢1‚hàÂ-Âák É’; *¤#‡& ¹‡¶&ÔagæÔA=aK&‹í-ZCÒÇŽ‘é§Š’õsu…Ù?áË{–xúÀ#¦›|¬v°Mâôœ``pj³â’õu4‘•¹‰ ·ò×¾íÞ†Æt+LmNsçÔб/KHa옥”´šJZO³·ÞÆpÊñÚ4?çå¼yá(g@—µC9I´3qlÒ½Ìn±ü&¢$lœ9¬¦à(Cz“P‚ÅÄÞ–$ሣ°Ó"ó³÷-˜xø;(¬n^ß1…9?üë¹X µ“ÐuQX1G8WœpC9†p åÝÄ}ГfãÉáî¥!å …Ðφðk2©< *ÜÙ‰GmDq~¾Œ<<¼ç«wE7ïg˜ØM_þ˜½Û} “MxyÒ%”"z‡‘RøÚœ_'/¦%€ÃnZJcwÃh¦9™?]®Þ]FÊ途¿|¹ù¸¾½¿ûÆ,î?óVoaæó'0s|’ ŽM¤.Vͦ>›S¿jéxÇ}Ê€± Ù(ñ^»xËj¿”ò: ÍKèitý&tN¤ ­±ÖÇ…l„ÃÃ=–©¥aªÒÌíÑÿùù÷d´0BY.²¶KÏx¹µóWÊîäErÏH3~Ó@œ Hùõ;±g+_†Ü%Só2{ Ì1(#ñg¸ÖXžéð 0;ù¸p…B?ö> ™ž29Ž‘ªü̪ Z£ªüL. þðÌótä•ãð »ÃjÓ „åÅ«˜/Jðù>0OzãO€rå²½éÚß{Ž›$vôK×(úÉ#Ž9*’´ÅîˆL)OÐ",C‚9&¦ÂŒ$’Ðo,´%ü0´ž{!·ƒì¯Œ`$@¢<¶`8]0<û)9ÏSXSäQ ç³æ‘ã•ôì³åïŒ?w +¡¶D2,Z¼Ô³H¹âÚÁ¡R4:$â^Ù9qœ.JäײDn†Ø°Ö'îXßíT#01!OMGOuѸ¤T±—ª •”ìf½øçŸþJšÃ endstream endobj 224 0 obj <> stream xÚÙrã¸ñ=_¡Ú—ÐUc‡÷‘7'ãqv׳ñ(5•Šó@K„ŠÔ”¿O_I“žJÍ”A4Fßh­þXE«þE«"†ÿájs\ým½úËÏñ* ¯ª°Z­w«¨\EÉU•­ÖÛÿ×§ÓÅe\ªÝê—‹Ë$Iƒë¿â˜ŸîþÅ?_”q`”ÂY|ì`ClÎGÕ^Àξîu×2æ¯z£Z«.þ»þÇ*£+80¤còœ`—i”]Áù—iuUÆ´R\]\æy\#­OŸîo>]_”I°¾ýrÇç}»]fÆnï>Þü~îÖ|Ü7Üóåþ—¯DHçÕê2*ðXº`…E°éŽ'Ý8.Ðíp,ƒþ 0»’àuoyÃVýt‘e{º€Ê2ƳƶêT›º—3êvË`Ýn•—9ž—Ãyȼ'WëeÛа(xRž2Oy<#Ÿùn?À¼ˆ*ÃÝz'óš‡'¤Ñ5@MÈì&˶ïL½WS[m{£Ï"8€ÕVŸtbhËÀMÝ4j;¿AM6õ~oÔ$ñCôŽG–\†NÈß«Ñûеg°QöÜôºÝ3úÎtÇñFø˜ªI[Û®ç³U[ÙÔñØè£î:3¾`µáWQÀü$|œ£Ôp¤óã*ŸÿgÁåÕGÖò+ÉÕWað|¨û7TÀ"ô“ޞݱϴtË;NdœÊÛà+)ðýíF1cœè×-™3‚Q6iŒÇmšóÅBЖ¡µ²@ÍišU·Ï97MÄ>•¬‘¼iûéÔ¼2e8‚„¯X|cÆ·7eöw-±D”œ1üù 7¸ãÀÓÚ\TNV5dòJˆ¾ñ\`œáoÎ&·€#åìd.Ê+Ïqû·hi%ê„¿wx2ǃ 2XcU/=#õÇY5hQȶ²¢Æ†Í1†¡pŠÂÕ›ú±Q G ËÑV@àJZ º#é9›ÝæÃ¢Ñá¹iœæn{¶dW„gyl”µnG-4ºV1èP7;½%+Nš§ ŒóÄ!æ|þ8&’ÏÁ”x°^ l ¤/þt¬)ØðD|”ïÔÔµe§$lãh£6…Bï}øÑÔ¤öÖ{·,ô–†!²…n'A šÜ: CŠÂav#Õ€•˜®O¸LÊ4@ƒbón† —&{†õÍX@–×´¬±­—‹ê%<ËËä—xÖ›³w9B\ʪ2ø‚þ¬­ò”_缑öÙöìqõIÂ[mØã8’§ÁÉhæ‚ãw<¿C‹"p+¢@E¤^ö1£kÞFöäË¡j`w.¥Yß_ß}ýõ—j‘i… †eêÖº”&‡Ù“Zk5Ä ´I‰©‡ïºÝ2*!G–ûV?„Qº!J{!KÛŽ1_)J™>šoæ‹{}ŽV<ïnì\ôtb)®—–‹…®Ÿ¡01ŒáQ{H@–?™L1„*œ¤ ·*Ì‚{…^DIÁ·-k mÓh œÞñ”¯¼]ˆR 5Fãû@ÕXºàI³*°b=É!C¶´–™ —ø÷ц?©ê(&U¦·Çº*KÁÁÏ=c:§ƒ¿’[1p½QA(öåÀvwrs€@Å€wçÅH`¸ƒ"l¨·[- ”r©mù½×-•°ìÜç}ûHÒÔå“‚³g'wìp`€ÊÀ±ƒEIQÿFg@!o¤8ñBA‚µ1v›DÒŸM Ro`<„üÈõ3¦”®/Wo¾HÉ", `Ц’q]#[t/eC°ÄˆOB¾í+Óú†‘ 6ÆiþÈÊGm7M­l4)  Ç*ÍUVI B¢ÎŽæõrãÜÝË 'Ì.† ¯HœÝ´ûFÛOFZ‡–Êoð5o0©]z‡8—Nb%W€àB¥Ð‘•é hœ°¦àc;DNÑVðÍàv’Úq“ßRC|V.ÃóSã‘}ºÇk>S¦U-¯p„ŠS{.–Kä¤ÌG÷ÅÙD~˜ë8oÎÅËwóXóÀ·/£»£ýVÕŽÎ'G?k°ïã'£8$èf¹M"–! >,ㄲv”ÉñXÊò‘dyX¾a îÊ»yx¸æÌÚv(úgXس~À ìOx½¨¬ð8äì%ÀŠ…A$>k{¹ ŽÎ¼"n\I¢‰ËrR“Ä Î‡Q]\VAúpÁÈî`ü2‚2,LÞAvÄ]ã]kB¥ "¦R±Ì™•†'ÚW&$ü̹çWHÝîå…:ª7êMO¯9zKàù³bCZ•«6nûqµ1Xàq°q.O,%¥!æùêb7†Úóc3„טó.Œ œË}¹G‚Ò~Ù¨“|×–QÕ ˜«µÍë’O"#< ]­OMßGá`>×>ã³ïÕñÔ3^7œD ãñRLHc1Ä:Cš’ûÎ[1c‘€rµ”œÜkH9ztzûA*Z Xt’UQÍyî»#¸†X=R±Biý£–{gÃ$Æ}\ñãVÛI¯m>wCœ”w ²–K㢈œ†x(Ƙá‰a@xÒ¥™„Ã,w‡g“ÜœGòfQ6LÚ'c\’öMÆa§Ú€HÎM½ ó…Ú,Ç×fø³ø+lLêÖö5¿`þÔè׈NÖ1Vcx%Ùë5bËïUÜÂ*«Ð9ú5¼ŸŸúgב¾%õjËQ&Áîe)V†$FÄŸœ\tÉ9ºÄe:ŠCTŠgƒ¡Äò"ŠLÆ—V´•s×Ï(ùÇ#BçŠ:÷û ÍÖG‰ÒP)£¹fN&¶0´öÓ`?iÞ„%·w\_@‰õaaÞI!e¥ ¨¥‘³^ýóOÿHGùr endstream endobj 227 0 obj <> stream xÚ…ÉnãÈõž¯| X2‰ËÜ<Ž=q0íAZîA”C™,Y…¦H«=_Ÿ·QH`¬zõ¶z{iñûÂ[¸ðç-"þÝEzZüüº¸{òž»NÜdñzXxñ ÖÉvñšýÛ¹¯ªåÊ]dæÇrçþ'üÎ//ßxñ´Œ}§Öw¾ó—b'íNºXe«ZSŒù«IuÑèå^ÿ¶ØøÞº$&Œ¶Úøî: à›¬cŸN@¯å* ]çéÛë·¯Ìçëã?žwÏ¿½ìxûÛköú×güúüðø²{$¦ ÇÛ,V^¸öbùzU7Ûp¤øf»uvå¡E…ÏKP_ÕNà”]‘É5vRˆ÷É›ª{ËMsäM¡Ï·°Š#`ûa1øc野®àа°ò€_°ŽÕ…¬9Q uwAï`í…¤7Y6²– ËnÝÞ²°ñC]žxÕšÁ<§-XtëºÎ®KñGæª3Æ{e‘ölòœÏÞȷ²1'“«šOLÁߦ2µiÇÊs ‘üH.Œ‹ªÖD±\°a6|ëZÆí Žx™Ù»^ k>"¹ðÍt«L.2D–Ê2Òð†ïÅ ¸|ËõIÀ¥ðIË"ÕuѬçªïÄwOÁ8M’u`Ã÷ضÕOwwçóyý^të²~¿KËê3ׇöNH'ºë Z¸ò¢d…¦:xT½{ü‰W€„_6¨ŒB6¦áï»aB!RüÉLӚ⽃¸…cŽbžC1Ö0Þ¸Ô8›ë<˜¤=Ëù¹©#)zo£1 ’8¨Wj†€JÕ­I; +_Q‚’ Ž&AåT‚!f„}oï÷eÍ`UØüMB'W­øˆãÍüªªr£)%BI§Ð1-Æjè7 -;„n#ÅëÇÒæJ(¦‚EYÙ¤ Ù…ð=”y^Réao‡”£P…Z¡ŠŒa«™im~‚×  ×SždÙÿç´¤^XÒÛRRàY¾ŠÜðɇÖ`°œÄ ÄŸ@rT /Ämºà­”K+zï¥PXÅŸ¬V‡v¿´LÈaóªÂfŠÇ=vóRÞãô¥‹ /±¼M,§äJ,qÆ`öÂZãb°èá“!Š?Ó|Ú^ eÆ+_¹epÔÇ0•ÄÃ,ä0›–EP˜Š·ˆ’Ê@4ŠtÜLKÐkH]<ƒ[ñ q!Uøf°í=ƒ°·^@_Ûã«=LjéÜ3›dî™M²ϸÖ3Þ¼ÿ11y W¦R-“)@ÙGÁ?>y›*éœf"á|4}Í·®íê+—¸ì6ëléÁÕ¨!GVX4ÓÁ|@ÕcÓk jþYX“[R>l åëq\F½d•¦ºj4± øÿTŸG61`}R…ðÎ?ùDuí±¬ÍdU˜°†*‡T8¼ °7 . Ш綇™g¥)ŽF7'Óà×Gñž_~¹òs¿ÿ¢šFº”;_º¼5|#$ÎÔ]Å.)k;ß|gZ}Ã˽ÔB~ySi‚ÍI+ê`9ôØü“Ç:Ïd‹A6s!iP!H`tÒõ‰oM+›šè…$€ú_‘ Ú¼1Z cžÉAõwÂô¤e‰Ê›Rxa€AÍ} 'S QH•šZ  Ìtf÷¹ž½.3.Æ+¡(ú”@ŽîHGLtƒ{ÆíQÌwcéÈ".dqá…8ί‰<ÊCøö'?Ô©ÊEƒk·¦á0æRçŽ\‚íb˺Fîet!Å$ºg]7BÌCg˜pLÝp)u±­óƒ œ‘1O·\çCr"I âr¨ø°i´ä Uƒ@"'œGN0ÊMÜwTˆQo€|µï9IàÀ¡ÔÀÔi¡GÙøð°úù_«Ý=Ú ÞöÇv4ØC­ÁL½MRžN\casO•¡­ < À˜«Ý‘ûG OÒÜ|‘k—Yç}(Üa57¢½–Ÿlú^æCÂL•!ˆUQʺ»öV¢O¡s® MVYØ“Z†¦L Å¡gÞx%ÄUmŠÔT*Ÿ+[å 뻳G}¸ú[×@¸à#w/øÝ)Yp'†¶`𴼕‹¨Ü€v…Q·"¸ažgªÔøÖÞÒim+¾lkÚ Çš]N ¡ØÛºÂfVÁ0KLúG£N‚ï*U˜?dHY Aö\LlŒE<Â!=dnF¯vÜp? ab·T:oN¹ ßó±ä²Œ¶ý¾f;âJ@s«ØüT9<ÊW^UWî|O~Ž8ý8¦º‡€ý^çæÝPz#œª6.jÍ.€§Æ £šƒ¶S⪌¡0iaÁS¢ éŸÈ…8øXq,Å£â2»º< §søÑ/°ÃÄ©:ò&¯8]ðD{°{°iÊ“>…™çˆU™scJ Ö»å^áJkxkôïÝx6Š]pr:.ıǾ‡¤³a ‹ÑÅ€…øò{EìÙJhõAÔ½ãQ{àQ‰„¢ä³´^™"¡Õ?Ú+-Û\,îc LUl1uü‡”^”·6¥ÔïŸv"™tÞ ®¼6,{#™8/#­O¸ä†®Í|ׯ4þínOT;´ª–&´ü¦¶¡×*íy^ÀŽ%‚†_î`3JwÜ2Yhɶ—ýAFXóÏv€Üô¬9&g¦·}oåIã´ž†…-n^ßÍ![ù­Üµ¿äXÞиïÞ»FhØ|>š/¹eÐhàË„—•.mÛÔŸi>ÔôG?´êûçñuñ÷?ýI,þh endstream endobj 230 0 obj <> stream xÚWYsÛ6~ï¯àô%ÔŒ Ä#}rì8u¦Í¤S¥/ugB“…†"T–õﻋDJ–ÛŒ=Ã]`{ þ xÁRÿQPn‚wËàòV2È@‰V×´W8(6HL/“à >¨Fµ> stream xÚÝ—]Ò@†ïýsÙ&t˜sæ«õN7K²š˜hÈ&F½¨¥kš-¡šÕ_ïL¿d€‚¤igætÎ3ïygJ¾ Ìü€h4F’)y=&Ã`4b? pI2ž|ònfE’ÎK?àœ{wÅ$}ò¿Œß@MoVõQQõl8R4E6JÐt DDCü+–+±†#A@P.”ÇÌFu5àUÓ i¤Úv;;UuˆçóÚ-àŠö zîåY‘ºô!•âù\Äj8¨2S¸áaTï¶S­+:+ Õ8Ï~ÇÏ5iË5O5ÜEO,`W}2aKfSÙçPáa 5Ůڙ‹ª½ƒg|W„ ßøW™.âÊ¢5@BN…ì+¸3iëhd¡ÍAò{»¯¨³> stream xÚí\ko¤Èýž_”/íh«–*êQiÇ;£ì&Ž´+_âÕCÙF¦¡h?æ×§xu5íKCÛm÷ÃÖŒd›Æà{8÷Ö¹ÂúfËÖÿˆ%©þo[ÁÔútnýø…ZÄÆžíYçWq-â`[çáÿ&_N\g2O‚"J“ä8tâ'aù ›ü·üÈÏ"ÿ2VågòKª‡“?ε%X_Í®®!íêØ_„E$¦„—wAÍ)ˆyإͽ¼å{IÖÜKr}/où^ú#s¯ÏçÖ7 ǵî-âaâXHRìkjQm‡lŒ­ÿX¿Õæa¹Ø¢1¹Yý _³øk]GÅ×YóGk”çr†YcÔ_O‘¤ó…B×}F_ï*Û»mñ–cf¤ÁÁñÚ3–0EÄ“Ø%ú«Ù*°w~l¹h/…Á äYàªXªÛïóËt^À„qD)õß»§v AµVŠqÁ~aåmÇO9Eµ—¬3–1ìz¯“n¡“(ÚÚ'7|Š•}÷i¶ö¡Ÿ?ÿ ¶Jç…‚V½iÐ|j¿X[;Öþ•çÛ5ýÃëûø¢®£$‰’k”^¡›(/ÒìÑÀö·Ãå É—eû»áÀ‡·]Ìø ÜJ¸vD—Nu'JÇ‹¼8¡ròCÅÇ…úA¬WüÀ…ƒe«ÝÔ©M1£æEIˆ ¸;yDù¬~AäÇ((éÕ7‡C“c]oOU2€X]þ¬ÍâlñÓPǸò´Ó!øå ï纽 ÑÔ²ôÉZ¯zÇ”m?á{~d£˜Odcþ,*ü8ú®VÖ´ÙóVÜÛÞO¯{ Žçn"êWŠ[?(T†rågÁ!Æ=QŸa›ïŒÏÃEG¡j?Ôê)CŸ^ˆ8Ül£øûs°3ÚšÆbmʃL©Ä<áÖ‚:Öx»Ö4¯XTA§™ õúïЪ£32º(ðnŠÜÆÔë,ZÀ2¤Ó©fŸ^Ñ Ô-­8ŒµhàîðE鋘.[Ñ_·åítV+Zç>ÿéèÜB`éísô~áU 4 ¶Žï>u|¹ `”&(ŒòYì×rô> ‹›M–ÁýÏŽµJpd¿³º«pD׉‰¨ì @j‰âƒõU¸r èˆHÖ‚3õg}ȸ“­©€½ëމ²‹f™º° {èxW¬’kؽtvãU¤À¼ƒ xñm®²Gj ©OÀëðÜE˜ÉT«þÝ õ&*+ÐT>$­¸‰Ó;‰¡{•³&ñh ÐÒoöˆÀ²ï1ç¹îÈ|®ç*ÍFbÃËîÚÁÈ|È3)æã1Z"P¦U¹`~^5NÖ¢tèµ2²­ÿóP hž¢ÄLzØóŽY¸tt#Ò]¥Š£¼8nÖ,[6¸Ü¤Yô=M ?FùÌÔzl¡!52bW›ÈÏ®çS•,(Ñþ®»tq‹69CPEL{7iiùt3uq†Èં9ƸeØ3—B—‚ǰ Ûš\‹‡l0Ö½œvFFÐB‘L˜IÜ ÉµßõhL˜†²W‘ S´˜¥Cw*ËëÉò¦vì7,:C—?ÔGÏ@'¢E1iŸ×pc†%Yæ%-y Ò fcÎë?Q¼ebuŒê\º¦Äá©,#²ìWÕ|¸O*.t{PñëÌcì¡yŒ¡Æ¯ÇÚÂùt†®š-ùÚU¯OSGìYÖTƒý. xU£w=rãÊÁ‡ÊÁ”lÀÅ»fÐWÀëËžD½~.TfOZUŸ«0*ʱ£iZ5…BÕS"[äé!-I=µ¡±r¤‰JGƒ¬Ã¥ù®žÙB±Ë÷+U»´à]FñP%•ž½-ëêqæ‡Ç–FÄÞ‚wØÙb,¹xo¸f´èâ®± “u¨¬!¦úm²zwíÊ\B•^¡«h1Z¸Œ-gÆå.&ó|îÇñcb_AI̽·í”lâžÄ4 BKl‚fpÿþòRíî}y¨TËÇ ¼£îœ®zçŠdpÔ»%ØCpã'× ÍÒ()Ÿ”‘+»}¸ô7=^–Û¢P¢a¦×Ø~ˆ³ò/¢VLÄÅŽckØ6fA¸%[YÛú¦kYûf¸ø_=¤ò„¶©´nÛPÏnª7o±‡†ŒÄ¢cY·¯qÕ75xè{{†ɆѥE­™]YÆNQÞ³{Œ® Úoí‚/æJÇ.CPCõìƒ!`FL=Ìœê¼ôgÄuHi8SÍä*»«²ToŒÐ+V5B ì™Zñ¡¦,0ÂÔÝ,iñëÝîo‰]nñ ÝrÅþÆK×›_¾‡ï‰Lòû‰FBïÂîè;¤‰˜3vEß^‚¤7ÉìÈšÒîùe^d›y[߉-åæK{$††¯±f”ïhY¹õQOÀ&¹È: hžI=.P­åÈ@¥q¼¶¶ê‘g÷öròIc!œ1Ÿºí‚üË@‰:JfóÞ¹E&ÌŽ½}ÛÕ¤^U»4帨%y9%Zo)Œªüó;(ÿŒíùŒÜàô—#©æ7U RGUl®ö£BeÓ(ñuäÎáÚ—‡ÚH;„M)–|ÅÇÞ?‡2¦S2õ¡·@9¤|µáûìÆ½èIIÛ¼1AŽKe€·³ÜÂe^‚‰÷Úo%Ø“2f—Îð<‰0@ÖÃÍ#ƒ;äÕrýV›4Vv¾×ÊÏ&$ìËÂo†¼y „v6´€• EÚ•[ÏTX1|—ˆm^Sr´ïÑ[ —Oöj5n]Á–?N5RµQe*Ðú*¡+gû$ßg‰LãS£ $DƒDÑHÌ›( U‚JÅ ’¯¥ÏQuÐJgí²èó¹õÛŸþnª‡ö endstream endobj 241 0 obj <> stream xÚí\]oë¸}ï¯ð£T\ñCµ}(Ћ½@ lÛmƒ¾ô.Y¢m!²¤Prÿû%%˲cJ•Ä߸Hà8ŠçpæÌ™á£ç™â9Hü7GÁbô·ÇÑOßÑšÀ5ÝÑãtébàZ£Çðÿãï—IPDiò``ŒÆ~ÊoÈøòG>üIÌä+xü÷$do¿?þcDâifù –¯ýôÚ# \Û–ÅX¿Å . ¨|ß‚%K#HYÌ ùD‚Æ?Æ?Ö¿,>íæ— XõÓ~0 w¾ Õ‹]?ûœ_øÈSÖ¹!€ÐÚHèª „®(_M@œ}‰<½ú<ìÄB K̯ljËÞEaÇnZÛý€èxËö0ʳØ@îxedœý0!ySYÄ3Nc}' ¸ÎúÓÑÊxd"@Юñ…o-¦°»Ù Oïó§ XEÄÙÀ*gý2‚`R\=6 Ë·ýS—¦Xœ &ì­0æQ^¤|UÇá7#Q†"ɽð¥RÀ*À "³úY’&F”œ‰È.üؘ¦\2™‘3Ÿó÷€þÚ(tÞ~jù)Í3sÄ3|Šb ,øÁEäì…ñœµ.bv`íû"~Á"î0\½ˆˆ³ReÿR¯5¿ÞÂê(Â2 wòú»`ÚÎòU0¥"v^y$¤Í" Èc¸î™(º>E•NY0¬Øétb·vârâÌŸ±Z<ŠR'W¡ µ£ÍëbÔBçP§¯›Vb4Kó<ᘆÿ«šáE)h[§>ûö;v£ûV`¢Ö˜Fo®Íþå¿ßnXŽ&cKÛã(aêÞ ´NíçÔIQIY ì:zêÇgœ…Ü5‚%çL›D¿›Înƒç» äÖ(Ĩ)뎡L÷µ-Q£ïÔ•jëd“Vð±áDZáFÂ^["b`ÑëÛ*mD%zå_黡òk‹?ÜuåžçÅž†^ȦËDÕ£Ëñx]DãIUæ¹²]€õ €.üÌ,.xjY6Éárrž"Ón”&=…EÑ2 S•Ó@.™O´`@`o`ß‹³¹?aE( µ1@׿㥠dÒ´1ÕSjà•—ñt‘‰ªéVÙý!* Vbã5}-I~Õ`„B“Y¸½Œ~$ÐZqÚŸTfÈβRVb€Ñu„BV ެ•Œ…z/ÖÄÏ£À+;^0÷¹BV·”ùðXe¾F ‹2ßÞØmjÚýšòЛˆˆ~:`Ô²€íÖŸi %ƒž\Èu`Ã6ÉV{`E¢¹ÀrûŠû‰}. í4uaò=2ÊÖí²|ò2™®ºd…\|±68ÁËŒ$©H.Ã:–Km9.°~¶ ̽šYz—”H(e±z-:†øSU!•8¿(Õ®÷ÅëÃÔëZÑ!¼MÈsB9s7Q´I-à 7éâeV\,½‹·azê|N3œIE×u`Ú‚Å}/ }—sX¸Ì†Õ–†Q²$ŸÇæŒh‡øå¶IaXý¥Ok˜À±ä*þ¡+}ݬƒ¶ô½Â®ðþ–¼ìp,ÀßvŠ—¾g0ðŽädÒ¡¡ƒ½v°¿Q+` )«¬šˆÊ®ÝIå+V€ß:˜95E÷sD­4á¤t9œÐç¡-BÍÙsËìYùA¾‹IrgÜ2ŒþJ¸*Z&-%ßÇYtÃrÌnÝý"æeF÷ØpŒ>V@,dWÀ5a$¡KAY08À¬%Æ0ºu|㻈" ³ ®BLñRjõˆ­À1&£ö’j@¥K†1?¥ÿŸBÕVEËH²[N©Ñyjä©ðm9¥öKí%àÛ ¨Ž ̙֕¢, X 0k‘t,÷‚ƒ2£ï7KEvokI×,JN{yÒ%΄YÇ'ô̬þ>²&Nz€ik;¶tô^ο´m¨W)ÛÐÍŽ¾ðxÃîžRCLF3ŠCq¨3%jåbÊâ<óñ¦a1J oßp½s®Ò» ZÜ ð”¥$9Ö¶tÄ},eX2ò#›¢æ×Q³‚;eiÆ#CË<„4ãm“„¦Ñ„¯ÝqÊ?Ÿ¢m1ZPUˆEJëqÿk߈t’ (¿†ˆ_ðŵ;ˆL`¡O+œ‹ìpî©KÌõ¹¤9aK⇄­³Ð˜›Àu>Öz½ïàÜÜÞægKÃPfÃ-¸—»A·ð‹ º×Ôûþ†'ÄiV&¤­*„`!]$8yñŸH’ŠÓ1—2’󲎱ÈW+aûø¾ƒ2d)ð­Rá¶vªg7ź š(j€MeVÁ‡îð2‰d=Ò)ÏV+šW`J>îµåÜÊt‡·Üâá¤e¸mœa¾®À±í4ú7xôïÆd;õ·.ÕßBýû³Üÿ¦x-ªêšNqKÔgøà«YQÁÄ®­>š½‹ºz¡l=å-í©`ÿ‰Î"v ÚšI÷2Û?ºdù®¼Á+õ³¨l;gèý1pu„Þ –ƒS(âd=yòמ¼@1Ÿ‘ç2Yž`| £5Fÿ™f?N¢]œÝ\ù¸¿þEy&ïÖL.RЦ‰¹©'>f¬¢0¹È3È Š®MÙ£Ÿæ½T {qD™2N^h ²Ë+87pö€ì-ŽÒ”#$]7:I"™@à¿Úº <ãDBê±É0M‡¥»%oÑ:kØÕ÷±Ž![‘Ä'ì‰L2Å^ŽÞ\u·¶uôÆìë39ãXârb½uNq$°¸*l©`¡ ‡—õ‹Wª{í~ÑPQ4IänMòN+l-ÑlšÎ*ê›§›ºñ# ᆴ,®²}Ò²°{ó±(ü”½å."÷ë+;³‚†U%d[òr™A›WìŽABE.–5Éí†÷æV,Ý:éfwòºêl“Ï:Ò9(±J¾k’¤ 7Î̽«Qe)°®†ô2 Gi“%‘u úMçÜ ÷:¦sT¬YJ2¯xVæ§t-ÎËF«Î;ÎyUÀÒêÇ™XŠÌiß¿@Ö¾™·ã>°2ZJ÷’9*|â$jŬ}„üºËöoÝ ã„[YqO´´$t/ÜRÉ+Èd¶üî no¶¥ø©…jg£pôÃ{*£ Keô+fòÇ<ÐÒ>”?€“ÕSï9oz»ùh×¼)êÏÙ æE„“ nŒftG"aApŒ ±`÷oè®zÄ‘vm†7é$TÒÉ'<Xð´iÛÆ”ŽY³oÌšyJô‘;Ɖ>}"´ú¼i/¼‘Gÿ'¬« 5齊ǒ¨t=—cìS‰úR%ꊕ>y"L:A5®‚B¡:Nv(òw8[nÄû±]³{´¢Ç˜,)®FÄè’ÞK µó@¡#Rd8ÉòX¦,wÚ½P?L³|µ’™ñ)ë•ظ¯¼Nc}ÞfÙK˜d…ó0+ï” l^êd°w¡ÉñÉ`*4á²æ¬¯´·WÈY!Oá«wÅM/ò·ÎŽ‚ŸÇòŽãŸPïÕ­¥?àѲᘠúì }Ñ Ï€<õZW-·¸ª8y’A$*ör“òg\™€ ÓR’¼Û‘¦ƒWúäHÓþ•ø§ú$[é‰,÷ÖXë_><@7ô0©›®x ê ‡ù=šï!3¹Q†y ò€Y>ý§Y¿ÐºS¾ %áJ«v~Ð Í¿Íñ/Å3c¾ø¥ºòúwX?þ\_|{Z)XÜHwñÂc+¡,ž3î-#ì¬ó¸U+÷ ªÿ—ö›P ÛŽw«Ûôõ臭øª"†Àè§›è¹óg ‡¡FWÞ¿.è:rQP܉éݸrŠ´Òîžï•»ÔŽ€‰NÈö «œí¢_ è7šÂ“£‹š˜9®}2WÔ+Ríñ!Ü>iò'¬\KæuIÿØlÍ(§Ô–ÆZ9’@“l Ì=¢síÁõ›stT=F¬2ôRªí·˜Þ»¡ð,€¬+9ßy`Š‚€eŸšôΨ¾,JkÛE •w@6ŽòG HÀ‚ºÓœ•rí¹›§7'ÄÀ*¬ú÷ãì??ý ©)ç endstream endobj 247 0 obj <> stream xÚå—]oÚ0†ï÷+|.ìú+q¼» i“z1)«4µSå·ÍËGKoöÛç|@hkJتB™@"8ÇNüä}Ï9¿Ø~Ô~1OÁqŽFŒ$– º$„!éƒ(>óFƒy¥Ij1ê)WÜ;­N©,Q—]0õ|ð=ú 8%È®†ë5«ÇŽFŽª«À6r‰BZÇEm @ˆdP‡a«›áu@¡.abrözœzçÞ Œ>ŸÚ‰vCˉ¡½ÒâÞ ¤ù¡þ‘Íçú¾ø*-ÙíŠXœ¶Û"$R Ø_ŒxØ`K&±†z>k] î÷ÿŠâžØ2eòYšk8¾QY¾ 7„…“œ”(ðWÉáÝÐÙ4á)"‹¢¯¦Ä#8wi笎p%²†mà|Ý”ÈJ§ž.ªCæ¥Y34„óf`K7L†ˆÃ¢{á͵ç¦Ä ²¥)K“Üê,W¨²ërªÍ²²îÂÞpæð*™h£¦fåeZ>‡àq£–v‘ËŸ %bý‰ˆŽÈ$1ÆI>VYܹ®<0"b T9û‘>†ðn ް¿¯éfwÏr¡¢2aqÙP™U[˺RæVˆHî{‡Ôs‚«QU7Þ«ÜD›¾ýtM¹³sš€Ûê8)s §i¬;ÂCøã¯\HwgÍç]HI°ê»@´ òľ(Á¼PEîØ2·;f{™w^{‡*}ÖyNºDI1­|Híœ&Ï}Û$Ê{e~vÉïÞ©Cnóÿ§öáÍ?7×Ó¨EݳW#-m8QyQõm]@[ßxáÎ#Lw펧(„@Bö}sZ%aŠ›‡ Ö)Púˆú¯«À®(Ö™þ²û[0š¥³Ž›Ntüß°ù¶I…¶ì.Кïc¾¼û„ì4M endstream endobj 284 0 obj <> stream xÚ•XXçÖžuagDÄ: –]ˆ ;–Ø¢1ŠbE±£X©‚H]úîÙ¥÷""," «ÁDQšh¬¹‰ý-1‰Fž!¹÷ÿf1=÷þ÷€áÙ™oO?ïyÏH33F"‘XÍ_°z¡ëÚÑŽÎs]'LïLYK2™…¶'˜ aDÜEK…¾fƒFÔ‹^¡‡x}ÐS¼Ž¢—†ÞŒ™DÂ…GƒƒÃ¤qƒ‚#C|½}Âlí·Ž´0}úÔ1¶¦ÛÎ ð ñÝêhëìæãàF?øÛ® Úêëik?Ó',,xÆøñãÜBÇ…x¿=rŒm„o˜íJ¯P¯p/O[§ À0Ûeî^¶Vëüç¼3Ì+ÄÖ9ÈÓ+$ZÛu 3Žq°˜Ã-±\ϸs~æ!,Ãtgz0½˜ÞL¦/Ã3ý˜þŒ5cà `2o0C˜¡Ì0f83‚±gF2£˜1ÌX*a<ãÀL`&2“˜ÉÌ›Ìf*3™ÁÌe™yÌ|ƉYÀ,d1‹™¥Œ3³ŒYθ0+˜UÌjf ³–YǸ2ë™ ÌÌ.Œ„1cæ0îÌG I|—]¼¥2iªÍ"Í^š3¯”u•idwØi¬ŽÎep纮îšn1Èâ@·Ý‚-ß´¼Ú]Õý¼Õl«‚#{ìéÙ³gtÏû½Öõ:Ù{PïG}–÷Éí;²ïú¾ßñ+ù†~¶ývõ·í¿µÿ1ëþÖ‡lÞ±9)¤YáÇdm9ÎÁ¡’;è Å­¥¼&(eÚôùIÉj5¤p yªÌü§wpÀ…€Ó«·o÷ô®ön•×BIaFG¿ ¦/•⮫|óö:OÏíþÿC‡ uÍr+áLœAxjAKŒAK©P€WùÇ€É$ž¨€$ $ã1^‹ÑOåôæqÞBó#ÊCª£Šãà2\È>QðôjVÔù肩zW˜Ë€ÄGÇDD«B£jÀ(¤”I¨s)>mgùZ5øÉç,!RØ Ü.e©ì´eÎç:*ˆBɶè~„ÖÖ—Ðb9ÔH³¢´À hsÜ(96è‚}¥‚ýxwYZx’K´*1iDGÆËšê¿ú¬0¥_^:9´°½B¬‰ù¨%cÖ£+ëËß•C‹¹ÆáwÛ2Ê{täGÌZëè¡$$ÂZ•jˆäv ÓD­q‡¡{¸ƒ}[%ŸctF;)àÍ`ˆÛf°#Œ"¥»5õ…u°Ÿk¬õp tÿl öÀé_|õLï…|KÆ×ܯùè|ÁÝpŽ,|ÎGäUR3o¾ÒUÞ=¶y‘<"•+·s¤ë›<ÊgvCÁÕæ­·BíWµ}!‡kGß=VÓiAZœ2à?Å÷A±ßúã~>¥ÄAîÞÙáEµ™ååPÏ5WúíØ¾{ËüS®ÏéÙq_bîEÀ|Eä#ß"ƒ‰âñ;h)o÷ ë¯pD¶–·‡[ß=†{(Q\€Ê•ñ9:gØÎÍ´Ÿ*ïÄ,tø·î¯ÀEÚÌþ fíiO8˜zBØÜ>O*Qï …P§$EmÇ+ë¤(P¥…¤¥Š©”íÕ…ÚškPI‚Ý ^”›®.£ ûYc¹ì/Ÿµ~¾§#éª #É—<¾n,v-&Ìæ¥¾3«°jo‹3âº2\\ŽFÉ9´´-ÒvUûd¾ÒwÊßq\ulaÕ°!‰dF¶IF¢E+´(NÖF+T M|Cøu`1L*YuÞ§Éï ¾+¼ÖzúÂg9Çà`w÷ýdž.AOË’«]5à9Eð'ÔÉ¡ØGDlúÍÉé,®F{êüv 'c°qQ—ŸûóÂÅރ˾×Õz”nÂé½Îg£Ï¦…Û'бÐNƒ×bÄ¢c¢\kœN}Z‹•ÓÃÉÈm³È\ŠçØrFö8Çc¶¢÷»ËÞQ¹–»`:Èp,žk‘¢Ê¼ãGjÎ#;e»9ÍÊ:*¸–þ¾<‰ ¶hŸÅw<è<#«Õ¡ ¶=€÷Äùbƒµ§ØÇÙ[ævꘛ¸e´|5ÖâN‚깤;ÕaõGsàfzw&`"Èvîæ?7ÊBÕ¶à·l,³ªD»a,„CÐÖˆX•;ÅFûçkžGC?´„çÅ—¶ýû8c ûŸª¸_6·5ø}š\ä)¬~’Ro±ÄØéíMѲÐöþüK£,Zæím Ô²—¤„ÜÄ’—FöwÅÒÙð _A-‡Å›äèŸïÒ91åu ‡Ã>ªÍŒ2oõpwÞ¢ófOˆ™’mÔ=ƒ––gÐ(†×ŒµúÉì×ò±– ¾Â ps~®>ûØÙå”Êl˜!T[Uš½*NÃvX«æxç¿°w;ûü>z‘z]ZF ¤ÚÄo€r%[¯ûšöcjï`v ¤îQТ›ú;SÚ9S¹%9E‘‰d!p¶´fmŒ² ꉰv‘ý¦Pø:qâõ7G´ /Ä1°ûð$I8Pž@3nC|éÙ‹2Ø©ÑìHTGh" SÊ*uŸÃ¾}_˜ÌcƒéØ MÌÐh¡‚NiY¬îxµ'>SU 6Å™³'÷·w±ÖŠJe5ºÐÐðÂ4±í„'/Ä— ‡HçLYïô£UHn•¢±} ¯ÊÕh#hÓìøb`…ÄŽ¯sã´š|°©‚ÌJ…p‹… ­voF‰®L[BëÓ( SÏ‚  ™F£RÉÖÐùW•V›ªÕÀN®c kÕ~7®©½g£©;S–Ô^‰_óèCä8œ„P:Foâ¶Äƒé-Ú¡·œt‹übXZçõÛµ”oàêwš/¹|µú Ü‚³ÊÚÍWä9ðŸ¶Þ)Äwµr–ˆzZô…MØÖ‰IØ*Ò²ZüÇ·eøÖ×wŸ#3æ.™®èÓ™@ÙkOxÓ,‚©d¼‚(°âÆ]²íšŸ„=¢ƒ7à!Šv•Bß<׊Ã( åþOr=4CkÎ^b^:ó+àžïÇçôP­ˆ¥¸«ILöXDGx\âHJ-Oœ\gàþ³–OO}Üx>„ëa­3[æ§O€åàB™Åp'K^•[€sÝâ³Q»Ó“u)ÎKã5à¹{½o(¬­-kPƒòíEidnÆÂxЀÆÞ¦Ø4¡]Ÿha¯˜†«p’{öÆâ,ï0ÿ56/hl~|ÝMÙ>ïa7Ùa¨«Ø±ß—Z¼þx÷=ás[SÜy ŠÓc»@“¤‰MYïD™TÒÅÄG\Ÿè䶤넡ÄÈ®Œ']±‘J©éÓ]Vk&“·è 13¶³‡%çⵇRÌ–òöiW¡€;n8óDþîm,'ýÓÃAS \9¤W*Ð…-…¬hy¤iTÊ Ö!åë¢U>dö"QÀÂÆ1'ÖíK~ölgžº"¿ºúÃM·cÏR¢æðÉË— øÆù!‘TÓXVÒ&»B‚Ÿ‹`áIIÅÏ#dDEù%Ùwq(p·:î“ÑJÙMÝshøè3¸)BÞháþM–>Ìžª']ÄáÑþcœQ:QGxã]*Khçÿ¾¿fýmõbÉá+ˆqLÅÊ…iÅ ,±~Iºà&t¾C§~o‘%”·w3JÚ}Ú>3?#ç:pÅF™¿Úƒæ™ÔP´=ûâSb¬‰{‡ñTæ_e~êÑàågoÂã‡,ÖþÜM¡×M䀾œ³d¦éýSð/>«D—y8#»žâøÊÀ¹*Jλ1  kBj™Ù±Òš,üÍ¿…/ÿQ¦CwØfÂÁ q¢¿çÕHðöcÒ|‡Å„Ÿ¹ÌÝéI`SéY™E8Wp·FÇ÷Ì(ÓÝRØ“‘UÊ™¨Ÿ ¦«A»w»„×çgê?®Ô( R¯†€ ÇNw«a/TÇ'ÅY“Õ¤‰xâGæwD‹†—ïp¦'³¨ë07'Q¦!ó#46=ƒzšR[Œ¢Иl@œl4 =ÄÅK‰'øGsÏ»UÄ"eª{}dÍþÚò&9”&•ìÎ5è«èbÂ]jöš®ØÊÒ3i ‘: ñ©âð^KÙn(¿——•gC"1Š¥Zº/TrDrš;5Òoƒ‡n‡_!S÷Ýê¦y²A`À5Ç%/^`.]ØÑ³}1Oæ$š+ÙsYà©èø¾…-.-.-*;¾öTüaZÐò—w(3<ö!ݨ\`ã.?nàØ‰’ú´'>‹°V†nówÛ¨òƒ°íXL]Ò’…þ’&´Äâ´óÁ®|^<¨äQ Ñ¤Ä%í ^8žv¡à˜£g´ØûgQ§ÐŒk4jMZZl4„pî »«Ë›ò[o6s qšO— – úv<ŽÀ uÈeÉï’¨)“†Ÿ‰Ü²Ó²™ÝYº¥Ö‰*zcø$bK†<‚6ŠSÐZzÈÀ­cÑ)ÓÜÈ:'Á!… жã!ï¾Ì5Ö›žï Øç´ÂûMu§ÏdVRp>iØB]ËInÄUµø¶ARGu&<’ ®¸ƒ¯Ì„jìOº±©Õ½eUþ ‘}NFzÛç8G}Y\ É êZrìŽÅ‹ÂÝè‘axZQk¦kÖ*o,­?Pa„W '–Úõœ>¦Sê'#†$hþârR †ñts'ÝžË^|Rdç‚N“©ŽV%ì†pnk}äÞŠÆÂ#ÍÞ-óˆÔ‹pòas”×ÉONJ¶RwöÕÞ‚*Z“Å¥lªÇ‰nÔclƒ¤î6†¾Ì¼-Å~¸˜?¶ã4]ÙiêOý㲎6ÆåÔUeëÒRèîË…ìÚ»· ´¼*²Þ]®ððH*O½+õF¾úíù ðÏñhñݽ+Ò¼AY¹­<*4Ù9 Vr./Ä¥8ãÎÉr¸¿¢6$Ï­j L¢+ÖHÑ*³âšh±gk só9ì–ÉO†Oß}>½wœ6m§ÉŠÓÄ¿v9vÏ bM¬½O7]8…âL ÝkaªÚUÜ,öÕ><Ãëñé"æÅpüNöûJÿГ«”ÒtnpNèË"s³íÂÁòÐÙrRóçǬ¸YQ8þ=]-i6¤Ú.5­–þ¾^^u¾Í«å<²ˆVßSõ]6 ùjö]0ÅÝYM#ÿ°3©nbJñ.xìýC^N®þS‘ÌîPGÀ¶«:ñ&¯*-Q©É©j5YL†[ Jö¯>Pù5Ÿ¾öa[”W˜_Q‚݉ƒuV"%iN1”ÏVé>šã¦wblD@¼6&=5=¾ÀôžâßñN·þ J®P%W~‰ÄO³Lï ÷–Î?iû]òGž'èÔDùEÝ]P¸FÃ:çp7þ.22ëW©¯Có§ðKn8°b笿 ÿÿñ˜ý¥ þ¶ÁÙÇ÷ÿΆÿXŠj:û>O|áYƒA”J&©“‡~¤ÿ£±8§Þ{J'(Ñ‘<éØõ¶ HJ+-1ÂÐ\Tæ ëÀ›ÕxÉÈZ#3ˆ ù‚º)Âó2šwÂÕ²êGBDz1øÕ—8åã]#¶úq'þPÙ´ÙIhæk+:ÜÇg\h× st]¢P‚²Â¿•ٖνxñ\„OÜɲpv•ÇÄ'í†HÎð»ºÚPÜ||Ý>7ùLðuŠq§A”ÊÈ´?ñزœ‚²í~IÓ%Œº$¾€šÍ›(X2-Çè„Ô´ø¤”´ ¢m™fÈ( ýðöÜY—R“bH΀à ‡CÀ{ÛÂå®°´(èIr™F»ûöÅþ¾tPV´·Ôú¨ÏI èöÊ£ÐÇv"J<|3×ä,É]ž Ǹ@¹¥9_¢Í·e3´Ñl²Fœ]&ùF¼{‹½Ex¥ l(®r—iìÝìíÓ¸í·Hkw;ìêõ#§¯ËÛÜ×±‹ý—ÃÅÊ×ó‡ûðàKaÙ¯ÓÇ•½yÙ¬wR«OÉñ1Kœ~‹šŠq1𕼠®ƒñ§!Ã9¿M"3$RÊÞ(+>«0#û¼H¼)Aò¦$IĆšŠ”$‘ iRT¤+ɱ&<6˜Ÿià|\;è¡ó,Îëè­ß¥K©ÙW¶N_Fi@[§lJ"»óYÅéYвÕ±àíkÚÃYý{k’ªzƒä[›Ì?_T¸@°«ÖÓ3gØôÄ=± éÉ9¡ê´$MÚl²Âš0X*ž S/€`?70ű½²"3DÒ•K]öK(Ý,Òï?Šô,3«„û%øGmróõÙ_а¸Šºî¨„ ѼÒrÑuuJ’Z=y¤µ=v7oy­0`éÄÈJÚŽ#âb’’¦’=«ÓA]m ìáoWøž,hA›•ý Í­QJš»+eUº‹°o›éÌ|1 d£AøØ(©á$QèÁgdd_£å«Ný-ÚV1ZiiÉš4š‰=Ö¤/î3J- t1eâ‹ÎÃRâbSâlÂ7û9͇TˆƒøLv4q†ÐòÿÐpßGÜÏÊoÃÉë”ÜYÅå .zÜR–“'#›²X£Jº5è--QRiÙ]na6µÌ²«ÖÒJèÖ÷ÙQ¸ endstream endobj 285 0 obj <> stream xÚ]PËnƒ0¼û+ö˜ªªxTê !%¤HÒ¢@>ÀØ µTlk1þ¾¶A9ôàÕîzf4³IÕ\­$-Ñ¡ƒQiI¸˜•€“Ò,ËA*áŽ)V1sË’êÆíŸ’û¹í›öµºÝ³ôíÑ×ÙHwD¿Y„ü˜›k·-çFŠ‚çzÁÅѧ³4¾„Ý7I$¥'8=ª.nºÕÚ_œQ;HYYF¹l·$ŒÄÅrÄõ„¬HÓŠº.jùï/ßÃ(~8yä% /žàûϽ¼BÔgR±yñ1]0¢4>Of ¬øþ¡o¢ endstream endobj 287 0 obj <> stream xÚ­zTT×ÖÿæÞX02¹ $æ–ØcQ-± vÞ¤·‘C¦ì™¡÷:0´,¨`7ÑøbŒMì±½Äh4šsñ¼ï\°¼ÿz¾üßzßÇb]wÎ={ïßÞû·÷¾gD”…%‰¬ž»rÍâ•cç/_=i¢pcª;6ž®áä;û ÷-žáQv£fú„‡4aBDDÄx×€°ñA¡ÞŸŒg±%ÜÇnµg˜gèVO»AávŸ»xÚõè<¾ç:?( Xîj·<ÈÃ34èJ÷¥†S#ûŒ8ç]—Á”¨/@ŠúQ”%ÅP¯Q}©”5zDYSRê Š¥Þ¤Þ¢l([êmêj05„J #{¼G FR£¨ÑÔj,5ŽzŸOM &R“¨ÉÔêj*õ!5šNÍ >¢>¦fR[¨O¨¹Ôõ)õµ€ZH-¢SK¨¥Ô2j9õ9µ‚ZI­¢VSöÔj-µŽZOm 6R›(*ˆÒPkûP"Ê‚:&Ú"úGŸÇb…ŧ™÷-—XfYV[‘ˆ$q’#ôÇôeææîkѯ]íÔOÒof¿¢þ!ý 𛕃Õé³^~=ôõýƒ:dý–µYú¾T!ýûfÖãÍ¡of¾Å¼i3Ææ®­¿í1Û›o‡¼ööåwâ3ƒƒÿñ®Ï»_se³eÙ2d§·;6$i(=Ôoh×°Èa·‡¿ñÞ¼÷¶pi=²rd÷¨A£Fðj+þ0ó–f”n=9…¼Nݽ!æ×ðÃYD›q_ÄHnîmßÍ  STQñÊ„ET×–U6ùl³çV‚³gª*°Ù>=˜q˜Y)–Ìôÿ_ °ˆó§tô&Ó>Msÿáfz‘vËÐäõòó]»¾fG;ì Ÿo¥çjr›d¸=a‘%}ïrÛWÜ>¨‰Ô£¥£5ñJ]hu’:’ Á4mÅwöXà¿Ñ7›ŒÖÄŠew–œ’îGWˆ{2ãÝd¸âßë‹il£%?`+½¢Ñj bº¥äþõ_ruДXî¦QA ã[_ZQQTwlMÛÜñ¸ß,âþc_¨ˆTeнOIïñR¢Þ_=ÈÿI{+-¥—T Õ©ô~n f(ÙûO¦‘·™Å¾ÄŒ»ßí9ÇeC5Ô$%©b!¢²b‹•ŒU×¹ÀÝix¦W/v þ·ÿ<õ&U28¨l¥W©ÿ X Ó`V.p[ǯ/É&#Í){¹7Š!›·! hÀd¹ œúAB©R)e MiÔ/£Žà)€=ÏöŸâ×±u|¯²Ê4U—·¾>F¼„úä!1\PÀk{P('(¼Öƒ‚³Ž=Öêþ„"ÈËÈÉÒëmt:mœ –}îì¨TÖQõ÷ý÷ˆæ¬ÐŠ£¢\T"Fµh{—¬¢ÉÞðDtý‰­9ÀÖ†U†…V†ÕÖVVÖ 1ô̪Ãü[b~I—#›ž/€Æä&e+¸8P%ªñßÿœg“/XÆ(²“r¹HË1äÉ 7vÙE-WPÖ1ï‚βðCê>ç6ÿ<£ÈVÀ¼·ñ~ RgÁÇ0'mRëìØá»ò]?ÕŸN¿ß3ØŸe=`¥)êgÅq¸Çà$œÊ:XŠúÏ6AœŠ*•c³aÌ…Š¥±ãV8 ›°O³yñGð91jïzƒ­}8·|éðÆŸ.#[uV1Ý…´·:açç/i4Ü€;n@#Éx?z’:·Y&ls=~ü«Ùzÿcä|;ÔD —^`ŸæiI šg*I HqNŒMI^ òíå5gƒ†W ¾¿~i²nC>Dß™ýHŠ)´=f/Wý†ÀsyÊá±#f¯˜íkŒ¬5—k÷;B,gÞw*¿ ˜ÖCòI2HЬ qpØ¢Õ&kÃ4)¬MÑB"#íV(2¡˜Û%¹Ü¼p4¼ ÐYæsŠ}Ž5¦š°i . ó‹sžxw1!«Û·rD8\^vqXy/¾èm3ïJn¿@F3Øhob.·Õ_Òjè„¶¶Ðú²èÞx`É;Ø3b¸$+É øx÷™©ª%HÍ¿fÙc8êó ZfDo]±ÞßÁŒ"oJç×¢Í,ê7ã¦8p‰ñöaÐzºLÙR øÍíü uzŠLKPMUG$mŠXî°9Ó±<Ù !÷˜DHŽ‘á}t$p™ 7¤eä5¼`ÚœUä¥÷€Œô)øÀŠ0×0¯Í0Vˆ>fд¹À4›*+£M¾q>)›§žƒ,dÒßóðg$•õèÌ­¸r{qÔ-äqgÉ-i7²A—ØJe ×›:H©hS·0±îàä_k,ªËn9î¼w:~¿ƒY"“>Åeˆùô.ÿôwò¤tòÏXÌI»‚׆õÃçÙep\YÕ?@ s±þÁ-’ò{À¼¼Ä 6À&p€ÑÞ+6§†÷†O9ÿÕÑaÓOwÄ|0ÿ„Í謜Á* ¶M¾ª” •øb7K“ÄP”}"?/3ã"ä(Ý%Š˜™X$÷„ßñÅ2x@ç´gìÎá:h8d8”u0­¢àú®/{cýí*&Vïß…ªv…ï—ÞCÓøÍìæ:Õ6(f¾øªíÌÙ“ëçs°ÚÃa…cŒe¿mÞ× §˜;“LùÑÜñDéÚsšCMÑŒôѪÀ©ö0ŠòpÑcdùÓ•ß9hRìöl‹,ÉYºƒéÊ¢³j"ÛàsÛ¹sÖϘ:ÿË+­?y­½WŸ¦;W+øá‚–ÜA·HàˆÑÖÆñÃ6¯â¢a­>x³+«¶ØV( HòXtÐíb‘ŒüˆÓ_OæÖÀ¦('7§pW˜ÃàA?ŽFœô÷/ µ­â(ƒ_ÿ„Íà"ªöƒÀWíåÍÕû·ç7‡4l)vÊóK[›™é[ÆLázø=£XÞê_9_´øWÞía|4GxÒúú“H£ô×W?,½Ù-fIÛ:kéÜ”ä—õîÛS«9·öE}H'þ×é2u¹ú¬LÒ›•(Œè5#:YvBøKQ§QÁiD™Äü5âÁ ­.œ‹–ÄæP™¹ùÄú`†­±õOãÉÂÞÚº¶œõ‘Ûù±àÑï(ÏF¶x*^ŠÇà)دDþ9Ê:ádæÉª Ô¿Š˜œ ÙO¶òôC÷ñaï“~n ~MB ‘=†ÞCÓÑ»h6R&-öŽBÙ‚=,D*n«ó² Ê`毸ŽÄH|ìúYY=ìi²Ï$|E¬J"œ´ÑÌ/.ÕwÍóC»–±©ùšÌˆµ25»wÿdµÁ=v­–€ ÝN}“¹SS/4xCMU20èrtú=è-’ø}Ò+Ae`Á¤!l2|ÛwîѶ‘õQô ˆËT40ØÈçQ_´Är‰U×¢À)#j1[#ÙtôÞ¼¤^„ò}X¤¥ô™íz]r¯ñÃuK7MÃbÙí$ö^éé“p޹1á2~“ëîã_)¹ Wx˺+iécB¦Ÿpaþü` ²½uóï2¸1ã<ç1Ëñ÷,$qÔd6ÈPZIßo¿èÓõ3†Ë¬º¼äæ®÷ÍÖ‡ñ~¤XÝ=Œ~b±;úOBŸ£i¿ br 3žS(µ‰Éx˜Ý ,æs¼aê‘(ëDë·}Á!ÜœX†Gèã@]LÊe(‘.†L§!ïsm¼š6ì Œô.^A?»ùi`î™Eˆ»ÎKˆ»f³þ•ôs“žÔG‚f"B+Ñjüš„gËðر=ñÛ{‘z ùNË;>ݹ2{*Ì,Ž\á½)"xõª„àºf ›QÃ6|m2¡±&ƒIŒ_dŸ 9'iC¹¤°†âñáóðg¶Ï +»EßËõûPfB%¡’© ÿ1Ü$”"éu+!M`õš",cL’ $·ì>þÜ'V]vDh»íéºÆ„†‘lù¾k&Û½ç…ãÊŸ[IÚ‰‹ÐÒzšH¼øÒã ¿Q†´×éŸsž‹ž–è;–›Š2ž‰î/AcÀd_„9"ÚªË$7'•¡P3ÿ^;?¼éÓ(åo`óå;ÜIEʆ¬BšG·¤¥Å™i/íM€û‡àݸ=}Ë ð’-¥¥íØK“‚–àM¨ƒøvcÃqîw¸=© üK×úÕ¯=8Š@ö9þOÆ®Ø}€§ Õ2iìYø¡jÛ±g¹ö¥m3÷€ÑySÌwñÙ&}î®Ò,ñQÏOÏ9àCÔy8w¢xú/V¼ Þ9ؾý|O/F"4¨uâ¿Za…þx~ƒoŠ‘\PÇû=W%› ž3{„UÑßž S+fr!ÂVßÃö–ï{¶ ¡gª…­ø¹ñ(²à·šE­È¾.F‡Ð(vÂFûuœ‚÷Q¦3¯®ª)¨,H¾%Îyî™7eáì7¹çuY„j·1üJºµN×8k<µŽ®SÀ“o¢xK%/5å‡óÓX´ÍÍÊ:ÐqIgk¦CÔ~ì½¶'èÚŒpH‚˜ÄÄä| wÚ 3ÿ çÓ¤­ìƒãòŒ¤ìxH° ð€Ân»5nïa7z-lM ØEœlIœì^Æs½N¾&„;ÊeC%Š÷âð ü)03zsН£·AÁO\ƒYâ­žn³^­_"±z:ê™év5|å%1Rvf“Œj žõ"Ôt08ÓíÓ74ìÓFÐá½ZÆ7éh¤ü£Oz|zRØæ‚!+-i»ØèºÏHžßløZZþÍ/ç+Ÿ‡gIB´)Q8¨û¸MO0÷z£†ŸQ#F±]“Ù¤<­.’¨ô‰­¤Ê´…Ú µN ‘Lwé_¨VL§§ê´iJ~\÷=›ì6˜È,•ñûèjhDÂÁG»Iãë»I/D?Ç`Y÷lš„¼ªkZ•ˆ¤ºó#q—'ºÃ"<–0÷¼¿?Àn$ Çã‰hZ‚Æ¢)ȉÃ×ðìXüö¨å¡__¹†}гq ~wÚY/In¯B'>¾‰Ú‰Q:Í¢YÔQ—ü2êGü® ?ù§¢ó‘£FÅ,™í{¸ê¦M!›SxŠÌxÝ£Ó&4ÐÈך¬?@ãŒhd룡fé?(t¾ˆ][†-ΊfP>²»tç<gq0+2K~ØoÿJ`6ø»¸É 8?R§aЄvK¤ŸŠŒB’÷Ö–7´–Ãèš»ŠidQß×ЀÆ2ÿ‚Kxj g†ÆŒÚlFú§¢p\Á„»À<,E¶9«%™ƒ•k]\ÀB·…$q.7¬Q'©ÜÜu¤E–³ý\EÂpáUa g4äèk¡ ˜[ÈB…ß[ö%{ÏÞ«¼ø\d~Æ’«x$‡ÿö <› gH0žé©Ï31Ñ´ô"hƒÆ-Û½ÁÁpoõlõ>¤¬æbñåš È—‘R¤MQ~êJúü䎸»ñ?ØDÜÔ°¦”4½¤àO¬±>\r}}r]•ô,zÈÛ°ø óòBƒpÔö›ƒ_\äÐÇ`ÄÓ3œtJP’Ú‘é¥2´¹—ôS@«MIðYmPëÖ:™D¼xÚ”!2˜~`ÞÅà\UGÂ7¤1¿[R—RãU’㠾̧çOãavúº}«ªOj›´9ɤcâ!%J†éhHÉ%S–NŸ™ :ƒ¡á€yËIï›dºxí‡_P™ô,šÁ§Û º3zoÚöÞe^ðoe×j1?‚“%3Àfcý¶ú›B5ôÐ:jBÝÀ½·å¥D&E%x– fÑZ!5 ÒlIŠïpõQÏOÿå:/òD)}JSJƒÐ2l¶ÁÓqj\DÀæ`Kz]›¾¡ùPORÒ›uÑÕ$ʲ i™¹h(ò²A“q²^ePÚäÑ.ÂÈÐh8 ÛÛzG€Hz=lMßj~©=ºz]ÌÿÎ_e›¿8–VÏüìÿÌ¿­E‘2P(ãUJ<—ÛàÅhoJqoºm¹)mw„óÀÃu³Î•,/¡¿†,EQòÂ?Ùàõ¯d’púuN‹ ­¥­xÛø?Í¢Ó&~9©Ò»º³BòA&S¤$õ½{DÑ“O™È²îšNrq’¤Û¶§(@ ɶÑéPÎñ®’bTFZæd,‹|/'T0]"L¢†OÇí¡¾;Ä( ØcžŽ»·¿ûg,-¼ïæž AeÖ„õå¨ÿ9á"ý™x{¶*ºÚ›‹€¸D¥R«N@ ¤É >óÛ_æ={Ášš–ª˜>÷]Qé´³±¤ºJxáýß=øOªö#ªNéJbñ»î÷þ7ƽ+òBÕo{”äÉHýß*I W£ÍÈÏXukÒ=Fë¶ wдÓgMÒ€èúwlš{µk;0å_\’µ§W…*¾ªÝér¤ å·x7{´l,r ÔÇÅeÑU5%edÍKmج«nÜ—KâgßÉ2/ZºóÀõgêes¶„®gæ£{¡'8"åìÙQÚΤ éìHzÜü-N›Ü÷sp¨í š‘!T…QQÎ3"¯6ë'§QÑi,šÃ`Ñ74®°ô§¿ÉJÙ$ë¾k¢uº¬‚êvFº¯0¼mã9ý~û±H:ú>––¸8ÆD1\Ä"7š°Ž.·¨åð¡¬JØ M!•žUn†Õà^šN[ý=}ׂxW†5Ç•ƒJˆ&+&Ôp§Ùd½í Z'Nx‡ú dÑ´Ëm¸l8¡môvS+ ž )‰¨©*+®ûzvË'xÐÒ^¼ÎIã7î"]ëÛõ¨NN"¨¹$Ш4ÊÀñK¼Èüɯ›²M•õX,oãm{,&¢ŠN“éõCìb̵4ÓŸ%gî“I÷ñ¿ý³ýØŸlr©Z+œ+ Y,ýe¬> »·™êTn]iˆ":ÀÁIî"W¶=¤U}Z¡Y¼vw¹y{ÃAh„¶X³Sn4h„w=F”£yFëš+(éTÏ›c ”Îf ÑWMÛ€y”ƒßñ᤭,ª— P~í=ÒS3†ãA2bóÛÇ YíFâÒœd}ª`³R“ì3|$ÂFp¯ oØ § ‰±BG{ÿ>¸še!‹SwnˆÑ|~>‹úǽ{w½úxµÙ«aÝg®Âaúÿ9{Åq):$f!Õ±[Z}ôj‚ ëšÎˆóhÞùÆNç£Òß(Ía?€2¨ÖÕš²ò*jvsF†“žNëšœäN@fŒ´‹ÿ|OsÄŠh?pgæß_ƒ¬Pßß:.rÐ×±¡f]Í*øBÁRt~i[Í@¼;ŸfG,è8 ƒ=Û›w˜c’ëȦ®ýtãhYï¹jO8‰PŸÓÈó´õùŽ}T£®C_]Õ©Ùöò|pýÛ™Ã'Oä®]Íá8úUëÖñÚ:ÙÓpÌþMqže«`8¯ˆödУLáÅ!qkðÄúü“ÏNIï¢ÏøÏYl'¬ø*[IB×ø\F½î ¾²±±WÆbUz‹Lúk¿­-ò—‡CÌ5¦òzB‘G±«±èG>¬g_÷;—œ"]®—°ó8aç Ù)ØÑNIS—r©¤Ò†ä¦•@5SU²þpБó_ž¼M³kü+^]ò•½áÒ&zrJüä` $²jëvhw¼ì}òÐ…!möe­Š$kjtÇôåµµÚZaÈÁó–¢…6Z}j!“´3Çs²Nt´éË…*¨Ž‡ ïåú8¡º–jsq dJ‚­løðA³KD)>%FŸu-aÿ™‹ÿý¡ï³cì6¹Ñº7ȯt™ ï±¸œþßÄÂÿEÌÄݘ›ëóÀÑ%h9#½ô˜4¨‚UÒ}½F÷~1à¥îÒÝÿŠ¿Z¡çJ\x¡ÄîgJ¨&~¢QDh°îŠ˜÷C¾,zcä<ƒE„òØßÆ’z0à×_”Ã!Ø‘uçòà=¡»à h‚8X¹«zO{ùØ;åU.U.° <ÁÖÊåNÎ…N¼ÎLÞ¶-Ôô¬ÚÝ#Õ®?{êYœÉT:ˤ—º}ž›´Mש¯ªîèÞ{MŸIgÓé1mk¿{YÇÜÇ2é½Yàê!'%°EatmǾÚ`Î~1[âŸM›+sϲàVRðt@ƾò™6cL¤Ùè­D—ø×¿`ñÂ/?"§='ZJïÅ׸øX`Ê¡cð›xнˆ!Š­;µŒù³x ~QAò°ø8¿`G`æ}~“TŠ~ß\9÷CÛëàï<÷ú“SO®K/ Ñ5õ¡±ìEÄKw¿ŒW1þxú~ÛÍï„“2ÐkÕÚˆa‚Êc%¦¼úzÿZNzax/Šs!Ær #ÿa©uƒ)t/Š2…ï•ÞDhkT]ŽùÌ÷YÜ4ð>yM¯MK|>%ÚôN‰é Ó•–ꉘ’Ò]®»µåzzÏß¾•Á€º„<ßz,×,Tö¹‹òá(ÓXÕzC} }’Þ_—”MÔëeíeSIíOP«“TjÏ7ˆ%0Zy.²—OQPµœ‘Þ¬©Q~G´¶!åyd 2£ée¢ßN£·Mb4WøbÒ03†–…J´3ìF«ù5\KãwšÎÔœ9É ]CÏ ðôZ·‹¹ç‡eÛóüŠäßùžD£á/ûÝÑxäË~cýÃÂyÓTíºöì“‹ ž,ÃcèY0㤑‡aWM­pÄVI:¸·ÉäÈljùÐu6»¢xç)ûÂ5Úð°Íúhûšµ¹ád’KÒ¨TŠ÷p– ¶@õÊüžÁ±ªJÈd µ×„»ë„å' M™ïOJ²ÉˆÓ§æC>¤e§åãx¯¸áðäè&[²ßœß(ˆ“qò@'}¤ð|“Ö MjüDœm3 Õ«ò´ÂSÝeDZ vƒ&, °WZ3irâÓ•¹™‘SqªÍ8T–*tÕiÏW÷è¦Z§ëj÷Cž:ÏYãßmÒã É‚núŒô‚_Q“ÍCÜœ¦nÙæƒ¡Gßg•F”ÇëÄhJ`ë¶oßWYenj-l´Ññz>^ع\“1“Ÿª\>ËfÖ¯IÂì•a ……Ùe=«µ‹51[uÁÂêo@§m_q³6ïã~«Vj¶ c•Þ¬«ªmÓT Y+7¤ä“ÎÊXÛðÅ·ß´ÉRäÇL’’bƒ…Q±NwXo¬nÑÖõ¾OÒ‡×öƒ«±ä*/'.½*槈«NtèŠà¹G£õrA¼Y[MX6Q«IMµ6XŒŒªMA­ªJ¹^m£Ÿ{t¯ð*ÀéÙ¤ÆÇù*ãåk‚,¡|G–˜Ó²ŒPÄTE…GÈãœÚ¼÷s' õHå¡Kÿ†QÔfB_’±ñmþ=6;Wp“Ÿ Q>KÆÆ©dlÌxXÚLÒŽA ®ï$|}!Õ6.“¨‚®©q™“p߭Θi !}DšQàUb^…²Xc·JN[=í¹ù4Fü4F¸ùg ¹)7òó‹Q`n†Q‚ÝòhsßÓýŒÙýûŸ.ë?€ëk1­¬ÿkèúÿï9ßg endstream endobj 289 0 obj <> stream xÚYxUמ%ÉìЂdH”o&tEDŠ(D¤ƒRB‡é}³É¦ì¦lúžMÙô¾›^ A:„ÊP7RQ ‚ŠŠÞÁ¿ÿ¿›ÂÆOþòµ€ZH-¢SK¨¥Ô2ê}êÊ‘ZN­ VRNÔ*êCj5µ†ZK­£œ©õÔj#µ‰ÚLm¡¶RÛ¨í” åJm@‰ˆê©ÑŽü€ÃI[ÚYzX ±Zo•guÔê Ú†ÞN7‹_73#™<æÇ;üyÐÜAQƒ. ^4øü9Cö å‡}h½ÅúÛaîÚ^šþRìpûáÃÛ¬°ùE’;bɈ²]ì6öß#U#õþ¨¸QÇG=µu°Ýj[a7ÓNg÷ÛË/Ÿ|eÌhjtØhã¿üëgÉ5ñxþ+û¥ö c>S9vøØ€qÆ¥Œ—Œÿl7A?‘¶†GwôÂy=²@W„vö´[†Jå–¼ïLüfš‹Æ v§¹i‚«¡öBzvÚþ´3š+š3šSgá4Ó•oYZXZ[[^^ËY£[è˜è¿¨è‹Í?ÞþÑ—ÙôcÞÙÑ±é®ØÕV£H«…*È,Õ”0h-Úñ¿¯°=Û&v ±:Q³°ÅB€Þa?§ó›¡¹Ù bxGºM´:n~àN"qfKH®ìü 9@£ÀCmÇ¿ðé<:Æ ¼¼š!Ÿÿ„ŽÀ­¶˜|DGáa j&¢0RÏ5@z]Z~1²¶ýõE/<}ÏþÚ-d?1±Œ‡8 ¤ õPUÌí#벓ßB´þ‚'Ô0’ŸF»ÅMÉ'”Å›ââ“b š‘•„Õè+ó[8øÂù*”Ë´ˆ‹¡ÊߤQœ»ˆ^1BˆSh®Óa¹6wÃ^8 ÇïoÏe¬g·£±í(¥k5·µ·ýNþY‹Ÿ g3rÓ2!‹)U”ȹHOŠÁÕ-µMŽKM‚&¼8ªŒ«„¬ÒŒ<}ó{ÝãÂæÍ«.lY}âDË…ëÜ[KؘðšÃ‡ËjòóË‚\]Ãbx¼^¸ÉÞÜݶu‹ûšï}´îxë¾ó7zVÖ>PZ_PPêïæÃ[ÇÐ5iÕµmwÚ-Ñêfè¢*¨o(þMZ!¿J(ზøÌ Ú­w»$?óø)\ n5„}¾dóz—IìÈZ§_¿fEª:<$Ê ¶3ó-þœ;ö‡Út˜ë>=Þ ©Á©ÁI|²kxtx€ûQU¾¾Yw4·ŠÁ+ÑdVqJ}²™óÕÕå{Ò>Pqá¹y#Ç–lVT™O¡¬|w¦ª$Äcƒg’—¸K5<ÏË?vбFgõa¨}Ò#ä…ØU‰€~Ù/Ä£—¿/ÎËÊ€"&;I€w`[œÃ|tzóæÓ‹n¬«¦:S—Í÷ÉÚk´@OÑÐàí÷¼Nl¸¶ -i¢<žE^Bf šEEx,‡I˜Ç¯LSį•WÕ¡ÈåpÖ÷ôaÂbüàvé3ͧ‚-–,ù7:‚´¬ÁÛC×±³&* ²Ñ”ñP““ª‘–¼ß\ˆ¨ ¶ùYYPF,¯ÛÅá—§Uk>†:»hòñ“›5ŽiÁ˜ºd«ÌI…`äÑ ⢼Ă$Zm‹©Õ1 щ ·K†€ýzéjj°ÚìTàÓÔMÄü:õǩՌõ-=z¯Í#VË;,Ð TÉ¢±f8ÁcÑ8:š½.Äpx+~h,GÇ€W3YœÏYcž„³×Û mh")v5§³ §mQ1Éq)I gE‘%OΠ†Ý¹î’ùûº×I›8-di²ÒH>TvˆÚ„i¢„YƒÏÌ d h¸ˆHnn¶³-þÕ¾îR??úàÆ}U Ág2è¼0ÅBpy6ŒÍ*ÖÉÍîj …Eb4þú¯e¶ Qj€x&¢(RÇ•CV‘¶€!¥%dD'Œè#’Fè<‹VM@£ðl9 ¿Œ—ãUOð(4Y>B/£åöÂÙì{ËÑ ô*šhüåúµŽ×ð$üêr<è=¢£A°69Ϫâ“@ÉøUA1‡îÓMY9|µ¸ ʽ½ <Ã*úÂÉŸnÚ©íèeøŠAC&ÞÀÖxÐÜ9o{ÔÆ–è+Jj9ÈO*Pe=Öp˜Û_lŸÉÃÒ-kM~@i‘‹Áæpç‡(ȸË(y(X »lÛÞÚsp†¹¾è,ÆC–n]æS¥Ôõ+LÌMIohø r€ùô„§ þ ¯ Pß`iªgêÚd@#ù•`R1w”þåäkV­[9ßóò‚effiAÇT†ë¤²P…kÐ04ê›û8ÉCølÛÇzÒ ˆ2u¢º$m³Ø‡RXU4¤’|òÉIhàP&¦œh³ó>0;Ï Q7Íwï¡§tSB¶7H‡@’:ZÎàw»IÑ+üDLlo»ƒ8še°9Õ¹ÁˆÔFɨ^°c½À5Á-ÔÔ®ÄÏ¥árÚ'AåËã2qȹRÈÈÌέi/. ‹Ü œ§hTÀD…ÇÈœ“ç h?v´Åä›`RÑNVSÌå@º¦0‡éžcÑo›öΣ¦õ»)c÷£DŽŸ{p²®¸¥N1-Ò»Ø Ùâ¸Î·R¡ï€Ü$mUí±¬€yò‘¯Á¡1áqx»0v1»!z}®vqs.^ÄþsÔM4œ4 zrnû¾ -%“Èx!‚MI ,õæÝå³°Üáp½õ§ƒhá@Qx _£ðø}díý½;çêj!Ž„ˆ‹óòuõS“…Æ¢×?ù•¯…#q«˜ø3vÛ΋7ï={ðÈá5.kw˜pö72ÞÕ>È(ÜbUû”?€(P¹ã¡]z[%È 15611ŽŒ„þÕPÂ=¡K+IýÊÁ“¯øÍ ½MWŒ³ò”䨄Rþ ]R õ<$åÆd&¦‡‚‚¨³Xe5ôl´Â¶&(Fa<~oD ãV#éqo‘JEÃéoÊ|Ü|'óãi´>½\~ø´3×VÝÆ£•Ád*#ˆÍ×t)iÉÓ :JJv­&Ô4²ºØy“ãÖ+eŒ#Îg±…!Žþ¦~‘Ë–Ý«ßâ{ÛÓ~#úô¢…Þ×S"€ C ©É-õ©Ý®ÛDôe±ewÃZÈÿh$b¾í¼×±¼Š8#5 á5‡7`¦ÍúMF¯Ýý½“¿g·:¤G¦EÕÓ z]wSD·¨ÔhqQ@l¯®E|y—2”~~‡Üh4ê;df¡·f¡ÉØŽÇâ®c¬ üIŒ¬Ú°fðÀ5x¶0ID¡äj°yhD£ŒGŒÛŒ’?X³0ïéd½,LÎ-Ã:±¤ …¢Qb7ˆjÞåe܃Þ×QniÈ®(uÝvzwMܘëÍu ¤&o›¤Öw‡ÌÇô'zbD£ÉÖh>ªeÑhú…2G#”þ™ÃÍš6u)}ú9aª¹Ál¤Mx;Ó€DûŒ¨šàøzäÎVV@C}0(x<¸o:/æÒ1Ør˶ À8Ì' ? ½ñÕ¯7ùf¸$+ÁTZ¤6¦º7ˆï¦.\$Å*¼½êwí$a2¿‚ñÊßH% æÏÁÁz] ò‹žç©è®y™c’¤UfEû+R…]°rùûÛçÝ´ªK)í×[›WIIŠzá0©YÒßÞÒ½Y„‰ÇO˜j„¢‹Hy5t;bŸ9DˆêRbªßý¾~ë¨>1m¨ýÉ¢)ÈÙj¯ž84ˆ`îLÓg~þ5¤Œ°'.³Beåâî¥D…I=2ME×·ÏïÑÏׄ";úˆìqºÕó½Ñó^|jF²VÆôÙ"2¢DbÎ2bN]XÓ§åÛfµt)=Ìw¾¤Öžd˜<Œ$u¢ØžqFŸ¢Ž6TE,;$X±1žª€ÄFMÇ›‰òSµq•R Œi]õÐÈw)ža½’o÷¸: |y!X#ÎÛ~;gDgË Ü3´ñù ùP…ÙÙ…éÚo6ÿ4£é ¦_ø±RÜhò¦”Ø±Ž”D²RÜgîƒ6F”[+\ecšéAÀ¼ß/mL‰ñüî÷~‘54ZÙ•RàU¬®»úüô}¼ ­2ONcú§W šîE·6#ª!©êe¾†Õ’–å„áƒú ä„V–× ƒv#ƒ÷LêcNÄœ„»pÚáÓ¼£òoà hV9çoƒ° œ`IìúØuÁa3 {‚\i@dˆ&ð“Jè€RM˜˜k÷úÓ‚Òòwú§CË6lرìub‰ibù£¿úïbž-*2´ò½±åñ{ —–6çÜÒžOà(óOã¸h„<6úô¤´äì˜<(&>­a}éé ¯;£: ŸÂhƒ/rœ-×݇N¨Ì[ž³ Þ‡õ€ÝåÊPÅÖ»¶ª"µFL,­Œ€p’4)éI¦™~s/Ú8p4î4ꌒ(4dñUúþáÕ[·¸¬™Æ/¦‘³/ûqK™0ßοM&R¼ôÿ>´äÄMº ê¡1°< Ba'!Æþe¾%þµQ{€¹Tùñ¾FS Š#-HíÏħzDÂÑÓ\‚lUELL¯Ìë¥`6§® â+îW$P+ªak¿–Ã[ÌÆ«çr°%cWÍΚäƒêRu‰ºÔS›à±­él¨žP9maNã~CÔe`sõ»N.{Œ)pÛ”õ^)#yìPº3ß½ŽÙl=þ‡AÑZ¿ôмD]ÖÚö`-¡‘ñþnÍëó]H$,Ì}›‡Ž:~ÂHd¨Ê Súj¤ÚˆìŒÈ¶ãl_Ð:^¡}âã}øEâçoN#».åF±8þG1ñ½Fkj Dl=]\Õ×BØ~yŠ í7nܰüÔú¡Þ}/Zõ ‡Ý}óÑ£»÷Ñ0Î:^/ì1ˆJEìn,5}3¡ç=4óóð…è áóvØ©é¤æäUËdÁζù+÷‡u•äºCØÕ16§…!òé}+ ¢xUò.‚–þ‡=x-iõ©s+ÞAšèõ)X‚_º7ùwbF¬©­c¯åñ:—Ùó–|øYçOW:.·®sî6côE4 :kD•¤Fæ¢u¬¾ Z½âg<~}!GÖ'"Ò7ŽÝ«2ÉG@|JBxè¦õª@2Æ,8õ-£¹È^»p¶¡”æŒïžfÚ h8©‚•Ƈw-V YdݯĬÑ7?z.9gw³®¢¸öâ»õî¼íoq&‰»Í2áÑcÜ>±ßÔ]i†§‰dª‰¸ˆž;{m¿hSw>܈œ_sUòG,R¢%ìúÇNŸ;|øÔ™ƒÛ6¬uuÝÈO÷bÓS÷ÉZ¹í*é»õªºÈZ}~eFFT‘ LIE~]ExÃz>¶¨·{Gåy•mæ% HkÝQâSÎH0¥ ð*”æÄ,t!³M,3ëé*4xÚþ -'6ÕDgí,ŸÌR:¢!>ÍS1…±…j¤AFZaF.ƒãK줇óPšÓب«*ÎkÀt"+˜åº`Ǥn:Ú ¦yЙDf>:Ê>Þth.÷¸x‡‡3hÕ ²ZéڴϤ û8„+ZJ?º¾ïäéÂÀ9,ßÝãb'Aoô[E÷ÄíÖ#äþh™‘ 8íÂ˽ø5¶_ ¬p;Úoü>ƒ~s4²ë "Á=Ø+ÈÝT{Ĥ)Ò4éÄwYL­¬$L0ÿg8€&ìEC.s’¯/د'“ @Â~”Í¢aHlÕܹMíljhü6žb…žö8u¹œ[»”[úAu?*½åýÕuÈ7{Žgº•dï÷ôò“¿ÛÚ¢‘„W²ýîo÷«‘½Ñp6ØœnCƒM’[H$L`Së匯yÆÁíbϰވ~×£Bxòè}±¤µóÀ±…‘Ë9¬‡÷…ýÆßýŸK’9Dô ÎÜ¢w+ötŸ Inù‚¿2$”y®gwªJ¾ ¨;‚m„¢]‡¨öÿ%9%Gþé‰twH¾è­^>gDU¤B<‘aLSÁ–Ørê«x8–ü8 @~ü Ùpx'žÅ.tºñàû+W>»zyù´©N òÖXj@oš*͹¯gÜ"Ì«„ýà㉖/è½=Bò°.µÐýï¥Xû?YK÷mz½û´¬‚hî,س=cK¤;TçV½– ¸å„nÿa2À G[ô öÝÒoŒz·_*ÒËb×n™3gáòŽ{÷;Œ_Ý82Ï‘{ô†-»+9‚¤¤‡þpá'4”Ó„”È«€)××èbÎæ7ÁŠ界ä‹==%€˜³þnwèW…ýjÈ‚î ‚ÍUŠ1ø$ÑIRk² yº43 ãý|øˆ©nlø‘û ýÓƒ5‘i‘ ½LÆØGd’•© ®zW'V¿+›ãÉÛO#ï+ ‘iÿ*60>Ó¸m°.Oz3©49/¸—UMî!U9P¬Éoiõi¥¦“«£Æˆ¸”’çE¸P8Ä.´ sÉrÂ…6¢“V­=gØ2Âðû>×C=wfÈÒûÁn?¤ç”ª¾Ó¦—”¹±̈Ï,% ¨Ò‹3Ê{QET#x›à[Ê"B%¬ö÷;ÒØÇBjø…ç?¶ªî›8ñ@ó™Û~ ¯â—ð,«]æ§h`ßñ’ÿ-Ö‰‡Yö‘ òîù»èÞ¾%:t÷ÿpûbìí‘‘àg"¤e*}BÙT”ПöAÆâgq j;H•Ή–8{¦*Ô É̆¦*¢T¼sÏ®VîA¶y}i5¢ݧ¶ÏX½Ž´Å’^žô ‡'m7ó¤j”&ÆWpk˜\‘=g‹ÅQ\,$&%$úG)IaÄçDçGÈõÞQ²H¹" "˜¨¢¨b.´™YÚúÚêâBÈ…lUALA´.lÔ@mqE‰®¨®JëØ> stream xÚ]P±Žƒ0 Ýó{: 7!¤mÕÐáÆéH¢þ¾$En°%?¿gû9«[Ö »z+9µQ»z‰0à¤ É PZ†£JYΑ¬î„;‹!ëúîv=ÖÿÍé×½oòoP8¾(ý抣nß–€skF eI²Û>q ~ƒÓ²~Dìâzm&8Ýkž¾:÷‡3š”TU—¿n’Váâ„D/Ì„¤¤´‚²i*‚FýëŠa”áw&Û™e,q4ª¢¿·=¹z¿ïMOHŽârmðý'g]T¥xÚkm endstream endobj 292 0 obj <> stream xÚ%ÏMKQà¹6Ùh-J»«Pk†abn‚ˆ†ëEÇÆ[´V-Z$Ñ"¢Ÿ0Ë–ý’v-ÛÑÕ .ÎsxßÕ9D’e‰ÖJZ±°¿œÓÓªßdë¿¥þwïyØ]Üq£wqÈ“£Ÿ»òŸˆH’ô;勾0é»äAØ´4LHh¦}Óe†ÍjœY [¨êjRUWr~0*UAc,NÓ™ÌZ‚®¨j†n™Ü6˜^§š.ªÜÔ…jôÀb4–­ ÑXO¥Z­VR7›IË®lÄ´eˆ*-ò&·Ïy™îXuA÷u“ÓÁ#ÉÁÊYfãLp›jV™ÛuïFò¸–„È'îM¸‰5§÷å§÷î õ·á~žðtìà-!Ã.>Á1êÐ[8ÝèOágcæ¡WІ=(À)Èc¯°{XÀÓÅpó­·ù:‚ó£Ñ ¼ö¢Œ=(Á;eÜ :ãγ¢x‚Ï™†•[ endstream endobj 294 0 obj <> stream xÚcd`aa`ddäóstò ×vöõõ44‰Øäüîû5ígëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–ᣠˆ|Ç"_ €Hu Á(!ÄÀÂÈÈQVÓm``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*@Ü®¡œós JKR‹|óSR‹ò€Îb´:Ÿ‰‘‘EéGß÷ÅÝo½aþî³[tEñüâ¼òââ¼Åå‹WÌ_¼XޝlÁç©Ó¦}/XÀö;a*»‹ù|ÎI<\=<Ü ¹Îp/œÄÃóý¡Ýc¦ endstream endobj 296 0 obj <> stream xÚcd`aa`ddäóó r÷×vöõõ44‰Ødÿîûµægëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–ᣠˆ|Ç"_ €Hu Á(!ÄÀÂÈÈQVÓm``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*@Ü®¡œós JKR‹|óSR‹ò€Îb´:Ÿ‰‘‘EéGß÷•Ý_~eþr@tEñâ¼¼ââ¼¼ÅÅ+V,^¼BޝtáçiÓf|Ï]Èö;q»‹ù|ÎI<\=<Ü«¸.s/™ÈÃóý¡> stream xÚ]T{lÕŸÙÝî e[(²Z¢ì¬ *½í…ƒ‚"¶B1¶*…^C¥ì.ì"ûèt»Ë£Ý.´»tö›iwYú¢µ{—N_ÔVo[¹T@/Þ5¬£ñ{£¹É ñ3õ4Æ3­¨13ùNfròýßïšÒé(š¦ï)ßRœ›_”_š¿Æ¢þZ׉›º>s2MyR¢•åŤUÐ-§(:+‹TJY¤Öÿ,Vëc¤è¿[Béhš %‹åñUËÚ|÷(ï<èð™WZsÌk6lXŸg^k±l0oqÙy§µÒm.ªô9ì®Jù8l.õXvßQóÊMŸÏ»qõê@ °ªÒU½ÊÃ|*'Ïpúæöj;ï·ÛÌ[=nŸ¹¸Òe7ÿÊzÕ¯k¾Çå­ñÙys‘ÇfçÝ„/[IY)»ÆI¹5ÕT u„~†* ¶RÛ¨Bê9ª„zÚA½H•QåT††¢)¢îÒô5ÍËš~ír­W;­u?§]Pš2•Ñ ÝLÒ#Ê›Zô¹7†»"ñÔŽñºÙ5Ù!ﱊç–gRÒ ˜ê¾$$ +d¦Rj3iä[Yõ©ÒD Ã áežƒpÌÄ3ýâ¿¥äȘЫn.…“±à(‹³ÑˆKôߣpZ¦òM¬„dúòeQ¯Vñ*v£?õ·‰§Å¹Øˆâ<œ‡ÈŠrÑýŸþøõ8äBáè‰Æ‡×•¬¶çö#âÑêÞ‹ÜÇðÕî|ŸÔ(†[í€X‡ždº q†¨Ðp‚ÍTÞ&bÈÈ6@#fYd­R«$Œ³;xýT,¼Ÿ›Õ2û#áB¯ìeQY¯?†3ª_ÂK #Jïˆ4s¨è&s«=PÈÉè%^_XØbzmÐÇšGMwõˆ…>G¦YYŸ© 07yçÁòX• ¶õÏ`ÌkâUI¾. ªF=] oqhÓs«Í¿}e{È¿ÅTˆòçQ~Ð# ¾ÒŠu*ÊŒ±NF›e4©Úˆ¾˜Ö*¯+¢ñªm{²L”¥^$rðý8ÿç ,œ‰,Ü(ÜŠ½s¦nèp°dg9”ÆŒµÄ¯˜dæ`VÜà >ÉÜn Y9>¨¶új‚ÎF7°ÅxÅkÈIìÏíŸ$æùgó3Ñ; +6YU¯E%J‘ñB,öiíŒîªªvKNÒšù(ÙÇÍê˜}‘H±bD¼"õõ]FT+ "± Ü\BçÛ  Ï´h—"Ovp„(2ðú^€d#;›Åø ,Ÿ´ø»xQJž½•Õùpõ‡~bZëÑÔla"Ô qXÖ §{8åæ\&|üÑ !P»WäU>ÓPæãð[LæÌ¢º>%اºúó­ò9JQÉâb¼’™Ž“š‹2p:z”<(åšpŸ2`Í5TŽ^@úÉ©QZ9.ÁåX³³€›Ÿýª%bÜ@õw´è6 ÿÿå{·§7ßÀ ‡{ïeC/ƒâ5)•ú—0¤ª)ŒÄ'8ôÓ„ƹ,ÜУ%°Ùjƒ§ðÓ$t{É‘jHÑ—/£Ó—µÊÒ?d!Z[‰œ¨=¶¿±·}?°–íÛžä tøP{ý+yê¿þ·ƒ­Â9ìT¿^fËm»¶šª`W˾ъѦÉh4Ñ 6„Æ£~9 ­¦8ˆâÙT,Öz¶%>XuÅ÷°ÿ»þɧ¼gñÀ?Ž7?‘ôlj°Tž<>Cì¥ñÉ)º^Å Z^‘!Üv/,Ê !ÎÏ…Éj^бø™;ºS¨©)•\ê|>l ïã0‰"¤à™ŸmDZ Çîý»âÇ,êaÄñ¾ÔE`e†Ê¢a[ôü>Õz³ëöls=ÒŽþbú-WJîMcK¤9 Ð9êQ¯¹ñ])Õ;=¯šî&©?ÒU××"o¨ë.Zž=úϱî‹âÆá(ï­*F—ÐÙ@Xk¨olØôp6¹¹N¶C Z–AwgkÏÜöh±à÷ÚÄ9!ïB"<`C&¼33xµÛ~ȹ]XÆ3²4$ö _:Uì€ê€$t'ÚºRç'†Þg3kRJ['2µÅSzSºn}Ò°à´!]4,<Ÿ>½PŽ Ó݆ %cé/#.Ê endstream endobj 300 0 obj <> stream xÚ•W TSg¶>1äxEqzZmÖ[muÔZßâ[Ðú¨oD$(ˆáa !!;  „·(ÈÅ×T½½£V®Þ+*­vjÇGkí§Õ{íº~g­ûœEïšYYë¬ääÿ÷ÿí½¿ýíý‹(J$Ù¸bë†e릆GnŽØ²eF˜ðn~&Vóû9B£øñ"þía¼TÌ¿å#}Ú$9ìmŠm ž’ÑäIý0Fx¾Mc­c)‘ˆÉÒ”†…Í ›.O=¬HL)ƒß‹}?xƼysC‚g†…Í ^š¯HŒI ŽŒQÊâ“c”äGRðfylb¼òpð{ dJeê‡Ó§gff†Æ$ •+½œ™¨”oŠ?¯Èˆ ^)OQ¯IŽ:ð%\žœš®ŒWGÊãâ)ëˆÉÔ4*L>l5µ–Ší¦¢©˜@Šb(*€Kýõ.5‰zŸšJV…R ©%Ô2*œZN­ VR«¨ÕÔ²kAERë© ÔGÔFjµ™ÚB}Lm¥¶QÛ©ÔNjò0JD £æS{¨ ‹ÒD—‡íö?â•b‡ÏŸlŸÉx‰Sò3­¢ï _ÃŒb|}|sGøØâ7Ö¯ÞïáHÙÈG£–úÖ—ÿw£þnŒlÌ3tɉœõ"tó_Áj7È>^¯ÕçA6“[•UÛ†ÞzˆÆý~g¹jÿá$¥’Z2YÔxKô&æ“P#kë„ÎNäqø6'™¬lœ¿ÆÍ—»EOo£ÿ¼)æÛø7XÄ®C¢wñxòÙ„cpàMø½Æ¡-(ZŠíø!»&îÁ ñ?¼Ó5{žŠ#'qþàæýÝÏëE|5Z01Õö © Š4:mŽ"ji¸6ÇQɌƪj–vAwíQ×ÊWsCèœT8 o…*™iG3o•C.7‡î÷Ç1ÿ•`µÔXF¬Úó«3‰ÕâÂ"M±V£Ò%Û[³Š'àõx–ÞÃ4Þùí¶i)\dV™ŠÅSUIÀÌÙþè9Z€üPÆuÃtÓD&Ϙ~\ê„#ÖÒfFpEíñI·ÄhØ¿ƒ«¡?|¥–¤Ò9ip0¥ª9´‡FSÐX‰6ý´±8€ÃëÙïiô«2½(tÌ¡ºb»ô(˜ªJl=f˜É޶4PK_ùÒÙŠ~`M}He^¤ÅÙȪÓÔ上Z LÕ?–U7ÿî³îËÀ\?µ-S3fÎé‹Á=·èe²üYÌg![]P­¦ƒN[­Œß›¾˜w]ë¹u )gƒ£P©7Œ%F`T ;åh?ròf(ìÂk~ƒCÞyïö %èâS§Ôë\‰n­Ç7#”á[*ž]·¿má‘ä3OÄ>_.{‡³Î®vC±AŒÀi/íhêç_whÙ{ÎßE¢oÿü ·nUÉOqrá.õ¼«VC_tÇ_Co¸EzP;Á°mfÚá÷h|HÇrˆG`ò”<\€$èÍšǹtÐç«ÒöíÊŠ&rQ×_¹ªklã­[Wzyâ J EBE¢ën@Šò&O³h¬·2°/]ê4V–Ö[;[»ï‚yo”c?j;qy)¨¸«É;˜T¢ÉžÎLôÆá{z;¾.™à•"Ôäµ9•öLJ¯¡¥Ÿ]º†¢®‰ª¯œìAº«b”ìf ! MŒ&µœUu&³Cs4ç40}ôð)ZWAm«Ýe®2ZÎB0NgMKM^Ç&N 1Å»“Óœ‰y÷73§sàH2é²”ê Z8dWÎŽÊ[éÌŠûëЯ X÷s4O)’¦ áìîäγׯ\sÿöبÈÖs)ø;eC7Rkï>ÝÔê°Ám`ž<ïÆ† mÝô>ÔKø¡I!(ÆÎAÍjæàÔ7¡YÖ.[Kãù‹gÝÀœ)ÏJá ÈkÐÆbm`ô ]Óï"²_vÒh…º {»­’nƒèŒýòþLÞw^%*sñ¹˜ŸÌß`³\ò$¥\‘æÌhnkjj“âi¯L,;Èòor&Ó¿C½G‚úÁïx¥Q$uYn¾Ãs„ë2ÿ(æ÷ yÈ¢W/Øbyîô´„ØD]™üx°r`6T2m‡ª«’rcW>“RgWvê6¿4p°fà™ƒ¦‘1t?KýKÿ€ÊY"Ã%§¼½ ‡zûÇ1oÀS?Cßvd­×á³}Ùê‘ta õ46¡í¥M6³«üÜ“/Ÿâé’ŒA«Fxã”ú÷–3î2ÿ°…“ð¯ûþ f=à•ˆº,FnVq¨Ù]ÏQJs–vB‘òæ†ÏOwtSYmHà À 7Å`[àPŽôVݱõ–+8"K¤›a_l&ïäÁ# P@b~ªR×’9Àôk€VN¨Ø oÅ>ú'0ž"è«ÞÇÍþkl“© ,C”‹€ä_/¦_þßBíd€6£ ù,º3 ƒ9Ì|½ú[2Œú“ys¢çá(vu´»÷§¸ÿߟlY>mÑÄœ?V¸ÑtOBžýÿúRTǽ}Ö«VÝ[0¯AGQÒ?ÕÇúQ|áõ’ÀVòo ¬1Ë’#=( ¤ÑyŽÄÓádÔ~ƒ(¿/ñN|oñ3î\8Uk—á„ÀÁäž?˜Üx!¹ó½—ß=úönÝ’}¬ÖªS×}´Eè4>’Y‚3ÈDµ—ùhK»ã™Ùæzüõƒ—`ŒmÓUÓ\çl¾²Ì$Sau„Zmª.mH-æMå]º?I¤Ù \·˜_ÍÏaã][*â¹1 ·s0ïqö_²Ï}ž{™˜'I£`ÇÍm³ÄžL”¼¤°`kInÞJ(bT¶¼Zi-˜­õÇ?‰»J¦-îúË9þ=³%¹þ KnYhÛQ±©Ž1 ­g-}Æ$cŽ¡¸ î ´ƒÉf=QÚT~ŽèMeQ­Rªm޾¨F7Ý/ˆ‚.! èâ‚A q]ýçzÔw= ˆ²õ9ÙÓü<ø†ŽÃ½ŠŒ8yAÞßxqû‹ž¾9?òµ:…zÉr].0pÜΑ5™kú!šä;øåV’ÙœmvNÂÀ¬-qÖpPVþIi³¥µ´ÕÒj»H\úí[÷ac&MÐû?B«´ÎXO·™S\àæµaÄ_çD/IhˆïµJÆM_!‘k 4ž‹¿Ü‚¾”óîô,ðdº™¾‚ŸXeuÐAõP2þzÌ¢ÀKbÞ!˜nâÎrŽžŒ?•h²¥ª ·àŽ¡B‰ ËOZ»KÉûJc0 qÿ1r"tÁg%'˜Ë¯Ý€úP4“3) JS¬‚†Pæ6Pí¨¬¼‚ØŠNƨ¢!2+ç—m5æwƒ\`ë¨>–€<ë½cfàPÇ…MúèGÉц!?A‡ßÃSñlÉo¸3pIÈä^¢Ñ=x´D–1 ¾B…ÿr¹zš-!=å“Ü¢ÚGâÁIèáëms.ûáÂäH}#˜´­A#xí&8he3ý Ff I¾!t{ç¨÷Eì/Q,e–j¨`ìõ)ªDMÔ¾6ù)é}¸þ§ÖKŒ¿æ^Ñ8h|¸l¸{DŸt„ÏaùH_ÞõÆÿUZÓ{ endstream endobj 302 0 obj <> stream xÚ­V P[e½iþm‘­¥™ £ÞÐÇV°-‚:­Øú¨,Uq)ÐB)ˆ@xÒ@Ò!~äÜdï(X`´²1õ›xÿc‘¦ûä|0«ª¦ÚDsPWV£&µ Òiuþjv‰N©)Rš¡a¼Z£"A«U€.šR°‹]¢îOª^¬ùWÛhhCQm,uö®m1€þŸ¼¬kšefHA««øž%‘o£iò<Ëû™Xe¬nx½fÜvéœ#Ûô…µÔº TXðø–ë¿@Q¸òÍ£è7;ÁÁÆ}Uc4𲈷† ú*Úõ?s¸½´~¦®ˆæ|nàO§Xù[KâËò…<ß´Ä4(dƒÈb7Õ·B3²–Úr ³åéi}…WÈp᯶ ˜ág×6Òê©]TO HÔäs]Þ%êL¡yô –RþÔš-Çž¥Õsã8 Ö×£s¸•D…«ù»ž Õ[yÁÂñn¼¬õ˜óäÈèQ@g붪9Þxf±£¾ï­Â«O;Å}ßǯàu¬Þ•Åjhc4 µ¼ªƒíÖkßkø)¶¹‹nº ÊpîßÌ£ÊUfГV¨ª®m¨ëi¿6 Èb)—pà R ‘æ<ÆV(¡_òŒ % ô¶ÔŸõàkIŸ¿•»%,gIž/*Šíê{§­‹ôÆ´ÔæYCŒÏÎ2ñé_§1êžoµl]Ey£…Ìé{‡ÕÙÜÛðÔ, ªÊ@[®³‹Â¤\á5å=?½À gÎâ]³xï,áP–ÞahÕ;¬P]ßÚ59<}Ðì+æ€H#¨, §¬ìÊ2]9h‘ÒTl'ë¡Ùh´ àGÙ¿ø¿ˆdj…JîÌ¿vèo'^$  ‰Ï×5ÒàœævS›}j{À4ºmO$à >9'Y}>Ζ‘p€÷’f‚×™P ‘åHÓQ´õ¿kK•ÞÑò†m¨JÈ´Ò ÙÓÔÔÏ€¦m2ó?.ÿ8T5w5´¾{ ê¤üßTÆû1Ž2^ŒTH7è¦[Ð鬃é6`ëzÔùG¿‹½õ¯F|€Wb^‹ )eg¥ïw½E'G;f:Ù7;ÞM{c¢39Š)yëù‘‚˜}I pó¹Ô^Þ´ðlwäëÌO¨Õtô¨µé:TZR¾ÜÈéèªé_ ™&Fm­s—ÉèSYÒùj¨ÒPÔÖÜ^?<–zôyjYêÆ8Òçxòœ¼“Ž~|U¹°¤„ÚiúéP±ÒëÉUÏf Ý©Rq¶yöaÿÅ!í»³bPåW§S°·ü°E\¾m‰ïI;ñãßI½@§.,|1íéÝ€Dàlº5ûéò{n)ò¡YLOL³û^Vµ¡JOg‘EÝX@æêg¨Qvy!T–*¤BAN2 ¤Ò‘Ìö|âœ3µêè¨<àJ Ì¢üËn‹Z“«ãúBÔjsé¨U‰äé¹a¹; =:-8INÁáî¶î–Øá2Û¯XWÇää Ù†Ó8x‚éV¹½X½%.D,‘ 0j š¶Ü>íxa"UK-UNö0}裎·ôM†Æ;F›½¥ QÐk‚¼} ÿ§ôžßtëòàY8‹ùôí+ñv–F¨Ë9Rf?¶7 Þ±’p²ý×ûF›þÎ/‹§îƒ\ÏÄk?xH8ªm†CÐkí>Þ¸@4gah°ûÍî¹£8¦ÐÏV iüµE©yqüÔ—Åˇ8PWÕfÂÛÙ‡y€žÑ =€FT©¦‰,¤¸S—Çîõv¥cÕ—W³§}¾Æóí¬ *dGr< åýzí¨*c•K_ßM¨Uf),I/Û7È;Eþ >ýÊùånrqþ‰fޱ}>×Ò"£~½ø|=®6«yç9Ü¡|°ºÉáIq-K]ËçV8ê¼¼Èå[í^Ëðüêÿl+sT endstream endobj 9 0 obj <> stream xÚí\M·½ûWðféY~¿ CË0`ŒÄ‡²‚µ1Ä^CZοÏ{${¦·‡\sW=±£‹æ²Y¯ŠUõŠdÏÌ&¥•q*ã5)œ²FÙ Ê&å|PÎ(ÉY9QA;墊&Z%Þ€˜%Aå0L³òV¬ò^‚ò€uQ«`”àÛxçUˆP§ÍQg®Ùª”É:(@™œ’JVYŒJ¦EQè²6$•a§C†­¶å»!g´F#ÓL&˜ƒ^› ì§5 B¯3ÚÐR4¨Úà–ã-‹[bÑc=<`Ùƒ[“5·"í…ù.Á ãè (4wª8Ä:öD84^+‘h8k%ž8è•xã³’H›á/IRÁÑÄÁ 1+Ì’Þx8 s÷˜QÁLZyB“Üà˜a,ˆHxÔGF7{„"°Èc,æ4ÆXÍèföD„)Ðш—å¤F€;Јœå­ŒF ‚UÁà ‹Þ Âg…ë,’#D$„uJ°Ðb&!³XQsŒxæ%©h3’KEaH4®ÈFo1'¤†g°¡*B!Ô¨qa‰7•˜<ƒ…œa—á '0X¤db H‰NƒAÉ2Py¬éh\#ÉhÉ3àw@×A¥ààåŒ+2 ñJ _¥Äù#O|n= ³§r°B#Í›h .ˆc6H~„1ÓSðA¶ˆìÉÌ ì,–¦à @&û‚§r+168 ÌŹП„´Gö#²9 )@7jÃWa ºÀMö3ý˜gÚj"8¶"|H‡¹Ã>!m %$’”ðÌ4C"Xê `«eRéÈ$!·u"ïÈz¹BÙ\ª@ÑŠaŠfœa†²&•ê¶d0rö_HZqdY+ˆA!Dé€\jgÄqÈžx±V´µs¾ FZ‰LY«lÉQ¸ CŽ[C›áU…Ô2‘õÌѳÅ#ŽÈ‰BäDß°RÚXJITdƒåÜ   Ù¢m´I˜à”Èô{æ¸\*_¦ç„(èsð‘bœÐЬ‡–ň9 Ùç ‰‹‡lw'L|C_{¦mv(hEú¿p›­ˆWËøºHÎ0¾.™ñu,EÖÒ–LdÆS ¥h£ Â`6#VˆÌ$¤)+ƒE–“ÈŽÈÌK+ 'Jx"Óâ™C`V‡ëˆDƃQGÙá˜ ÂØD¬ŒhÚIJÊlµ(Dˆ8²Œ"XKØ‚¦Ìø2z–ùhMÉ+”4Ô Æ2@-J$ø÷óϯ¾ºùé–t,½ú u¡6P kCê­gÏ®¾y{óýß®o_\}óåWWß^ÿr{õõ¯~¸~^/_ÔË×/Ÿ=ûd…|dvï[eiµÅU}% PGË~àš±Q‚bceÒ¡‰²Æ.½n§ÀtUº£A‹Æ=õt¦qgšÍŽVyšÏI·(¹œ/O OàK”÷¿€W.0rƽ½Úß5ý‰~9gýþRì¿Ì¶ÒÉÌ^bœ‚xüÛß-îlY¹ -÷·¼³V\Ät9_‹÷óÕ} ý½åí²ŽÜoO×Ù&ìWCN¥CT˜Ø}øl:z.°Œß§æ÷ ¾ÿDî£dwkÈÇuå›Ï:òþ®|%ǹ¼Ÿ•—É Ê)5*êŽë'ƒ(Å\~r«\b b߉~Èİ™DŸ‰ÁLʇ>ƒÌÊ÷“0 ™7ò}&F=+?ËÄpŠD¨L `b…á‡è ÂÂÄx’ÉG¨ÆJêš¿K‘Xòl1õÜ%C^çÍ×çu ³òý”ŒyV¾Ïëd'å“™\äÒÉ™±ú2VÆJ®ÔÏí4*• +C¤/ŸfåûÜÌfR>÷íÏ#n†Ín!÷¹™ã¬|˜ãVX$×dÎ~’[«¦ºSI•b©R¬u¾åÒ£ 6{…œnÀèÁ®O‡i?@q*¸-BŸTÆØYc&£¹Ú³ð#·e¿hôÃã™SÛyšvmõm°d3t§l§2p§ÉÓwZ;‹`yi‡ÕÅod€§ÒdHW;cÛÀ†‡‡Ô˜&lZ^ÔÉbÚƒWÀ…ã J[ ÃÀ3nÍ®À¸AtœŸFÙ¦‡M1³2yÜ «Íqí¤çZ¨êY§|N½oÎp9I[sÄ•8ÐßÚ¯§³ðÃj¾Ù]?¨æ>L#øIÚ­™Óv{æþS‡ïÇ´ÕÊ· ê55¢Œ¼1*!Qoç2(„ÁÎ"Œèà§T #ªÅíc•0 Z4³QÏÅ4®ö:&4jÝÄÔ·ÚŠŸ©ËâbZg.#žÆín#xã4€§IO# 23x·û•4zÖ¦&y×;žÔxšÃÓØxOcãitYC{F”¶LÆ‘g†¬ßnÒ€õÙÎ"äA–f?0`}²>lOSµ™D°z–õ~äÜXŸ'Y×»¯ÔXŸëóÂú0˜Ëõq;7@ˆÓŒžF`›õÝž°Ûááàa–õqE5ÓžÅyxL­nÛÖzÊ+ßc«1Mƒ¹ yš·s )gƒcŠSÎd€0âiÒ[„O‡oœ!¸Yž®Ëg=à”/ÿ=<¦í€c—N;5ÙÁ3%ëFù™¶oá8?@ÈÓƒ¬;‹ ƒ¬QV¤í@2È IÓq.¦Íøiaðˆ˜.oœ¸[i±½³Ó8·D÷Wç¶Æ·:²äÞbï-ÆåìÛ”ûe+ß²µZüòê/ׯ߼úâæ—Pc¶ ôùÛëW·7oŸ¨o¯ÿ®nÞßþüžV9h{0æ3ì¼ãS¾‘úúý÷×oŸ¼þ×›Ÿ_ÿãÇ_ÔwO0ÈhgÌwOŸV77?}ùêöúÉ—ŸQ^£ RØæ?iÿ©ÖŸ>­úŠýÇÙ—)=uûêŸ7?àþ gì®X®>ðú¸×ãô“$ø­ø|H*•» #Š.„ßÃ?X•’ 'Å|àäieJãCô‡\¾â}0ívAW ‰@¥\Æ]þ/ƒ˜, S2ŽjM=Õ?ô/Âã·ìËÕ8XáÄAs {^Éì¯eÛÝÓ8­ÄS‹y9(ruæµ]^_~òÂ'êóÞÃÜúš{ôÔ×§WÍ$¦u)r{]õÔÚæøÙß*Q_­±ü‘ûQ'FÑÚÿ_†£/³ ‚·ˆÆ2Îs0Å·¹IÓ+Ù„v¿õÙ†î%ŠG>Çùò/Žê=IEèÓÄN¦®&[`™"wÚN·G4WÕ^{šx I Òqtá²Á$\.xÅéë»ÕôÚ®¯Í þ¯­53€ù±ó¯î´>ë#ù…Ï›ëq+¯±P1˜J<Ÿ™QŒr‰šc4ƒÔ>§Ï…U"¸JÞ%蘆¼Öj¡^‘·ýurô¯ÒýNXô*Ê[VÑ¥»rßQ–8!°`L=´*þ¶[÷Ký©ßÿóëÅ\¯ ¹þÕ"®üX¾ûSxX¡Ö—*Ò/?ùv_ endstream endobj 304 0 obj <> stream xÚµYwtåÚŸeÉ8BŠ.Ì‚î) EAAT@z“DZ „ôdÓ6e“­3óÌ–ì¦÷MϦ@¨R¤ˆ€Q,W¥¨ ø *¶‹ï¬oî9ß»Ià¢G¹z¾ûý‘ÍÉžyçyÞ§ý~¿'2ªwoJ&“, ™¹bæªÇf.Z¾p|°ï›©‹°íWäÕûIC(é!™ôp/I%—õV]«‹óïõ0EÉ"î÷}Êú“OêÚ}¾Ï¡äC5€ê-“1)™®û×̸˜ødMxbࢸ°ðÄXâg_Ùêñ^Á²çýæÊø-“‡P¡LTEÅP±T_ª@õ§î§PPèáÔêQj$5š"g¨±Ô8*ˆ ¦ÆS©IÔÔ“Ôj5“šE½@ͦæPs©yÔ|j!µˆZL-¡–R/R˨åÔ j%µŠ ¡VS/Qk¨I½(Õ›z[–Ýkx¯Ð^i½ å´Çúï»ÓßÔo^¿w"úOé徸ûÞ»?îþK¶=0÷Á^&*Æ*Lmƒžäb•l›r¼òÆàՃѨ‡Æ?ô¯‡‹$.@:ÉσøŸV·LZûµ\ª’–(ð½VàA”<ù• fèJäWöݵÝo‚Ò ;Ìî8æeý–̰‚­h·óÈѵísÔ¾/$}hfØi4Ÿ+äð¹Ì§ôJ|În6Ï¥@›£ýZÅ£ÖºÚWùíþÃó<~/i N v1Ot¼†.²(˜î(0&©A—¾W³¦p‹ùy`î~”¹} ‡[Ö(µÉ¥7½óY|6ŸÅEWl„,¸Ï íðÿ‹k[þòã ^'Å(J¿úüà?  ÜBÑÄ'dA4¤å:¹x<…ÅÛè‰CTKƒ«dH%£ï¥BÅ/ã‹sìàeIEi…Šõöœ<üÀi=v¦ÈQê„Jeqna¶ÊñÅÅdÐ3/0µ1x”§8?õÃÉt€w5qé7Úé‘InÈÑï³ st 4A™ tse<$ƒ‘× †‰nÖ’ÄébÌi\$¤‚9š•†Ðh$’ݼ¡†+ÓŽMÊÿ¡òë÷à sñÙ38@…µø¬b²:šD׫ Dþô·eÓ·>5+߫ƣ𗊸4¨VƒD¦t?ªcÑ"úÇò ›ƒfáÞêï–dw¬G†¨r¯›ô°Ëd3©,Àñ<Ç œ™çW.b 2˜È„D£sýñeUKÈxÚ„CqNÇ û£'ÔÃYÏk‡®^(º"S`Í* Àë1ÏÏZ²dõ2m0ã±ÿq4O %€¦~…î;xúË×Aþ'0…åj0Ћ¹.ð5‰ ì6’I;x¼2ÌûÄu9ýwbFÑh9š X4q$êƒÕxÑEw”˜oéo¿YƒÔ µà¹Ï ÝDöQ`ÆÐwÄŠØžFRvʃZÛd­Þ)rïT¨H¤Wáç׬ÄãIÞùø+¨’½LŸiÖ­RC*—Éi™:zªðK¤³‹K™ÌDz2;ZyH’î§‘ª)ËÔ é‚Ž<›’ý:OùªÛM¿]dLQ<¯ŸÐÙÄš£xÝÓÀ$ߣÒG¤œ‰oU|NŸnÖ…¨!Óré·Íg§&3™Þƒ\·Ì34z¸nÃPŸõ´[ßwë]÷)ìÜû%tøwxü¢èiºß7Ý›Ôæ!.uȽ¤› G‹½ð0nš<Á=áa3a«ÿðžÞ©¦ß)ðÙêÊa8Ngñ$½Ãc-º@@ï/ò%þ·þ:v~Ûowc ½0;8i#8áÚ‡ÊYt˜Þ€+º)ÿÊ!2UÿÕ]„Òd9:/ý“\ËZô90µ>·rÏ@XØ3qÛÃúÝÂ;<¬aÍÛL¹SIòÛî áÎOï˜]z¦ÑEÊÈiÍ÷óVtkõî•KÛ¤) Žžýàäq±FTsñ\4Äo]é3gŠñw ±$áY:ƒ©“ÂGØcè£ÿ¿è5£X¤D½Ð\æÐçeN¹ÒTæè ëv¨åY±öñ{ežg-$ˆ‰•^¿žÛHWä^¿®ŠÆÔ6ÜÏfÚ tUje‰ïÅßÓÒ× Øöì_òýVc¨ûuT·Á¿.•£Ÿ½#æAŒ'Ý:•þ£×LîäÈä0¬q ÚÅCÖV÷[¼§‹c$͆£=™¹*µ°"é›Él:kn!( /ßáBÿôïÇt~xgIm·½G²|vüq$¯HÍì­§ÑI`œTüvçI¶«“ºK C޾ó) ¥‚¨!wxúÖèýPn)ä‚;÷°–DÆÿìþe©„u¹63:Öù9ëÌù(Ña«øZ:ÆÚë]û‡‡ÖðÛ’[£I}EûÕœ2ÏÌÀs³:§Ï*’ë½Sêd¿ü %|'÷ÖJ£hî‡úá`¼¯ ?üêƒïC“Ðz´­AéªNUçÅȧ¯ 2nÛœhìYD½ûã¥ö7ùì‡%x†žNƒ–-3uÓl虺õè-”7¿—£VôžM¥Ñ`ôàuÔëâóçñ5þ™þ/Ô3sYÚ~ .ÑçOÅ?£†,.27,eÊ܈`î‡ÈœÕ$»‰?GÝèñÇü ü —tèkÅwî›ïÀuæêè³ø!>í³vWW¶š°sçû>WH¾ã™Ë,º‡F~dðÅÚœ³ÐÎ ƒyⓨ³—ë~,vXœU.FN— Ìn÷Çj¨k vAmb{Z]DU’‹U¬À22øKíÕbA•]™om*`>ú°³O/ÇýÔ„¹Èn”!õYä<+—¾¸…ú&x}ÎúelJ˺â8îødkèö ž-õ¦ )çSØ·ìó@ËL›üø£“^E´ ŠíPÄf¤ÊÁÌi#ñz–×ÎÌ1&›Ù¥r‚(º öŸdÝš}k!€?èGt꣆*þpøþ˜Ž(×’Òð6Õ±-ßhÝV݇™OÎ~rÉ=;TZ¡ˆ# E*8D›•ÉB!ñ’{ƒå’ M÷…ó­PA Ü»];R ñ|—@Э҇nˆ^†“ýêè½(¨`'š¥PyB5ïà)4t笚äŒË L8ÉYuÔòq?ü»9ßð §ŸÌð!žvk¡ñH$òôì%¹wô‰âv…ók…HÍkÌï»èEü›„Áò©³9¨±jÒ…%¶Š3Òhöo å¢N?–K'øÃàoLAŒ D£>ÕHÁüZ”\íJ{à×4ù¯é‚¢¨¶zï§¢µ@,´0áÜ*¶,´¦û·$€E$qP–ÇzÎhÖã´ÎÍìtIË’Ñ,*ÛÞ‚UXEp/@xäFqƒÿpsôI(ä\J»¡h.è ?4›rphçDr4 +Izô4ƒs½ò›ÎŸ¬™VC1(‹ÁQà(@6ÉÁžï[šhºý¥O1ä¸Qz5zÊ-{ýÄ¿+—rÐ…%ÁÊé 1iÙ™¤ËŒîJ5ä²çµÔ`¸™ç¼:ùÑ9ó—k ’=M5µ*¨O/N=íÇ ›y½yíKjÈ5®´p>É­ðS&ÜwŒc¦›qPuœu•0³÷æViv¼ªèC[±èÊÛA†°CaŽ1G‡oIJŠÐF³1ªq·¯$Ðh”éóõHŽ[ëF[öȤäsr´›´ËC¦@Ô=Ç[I[¼^bŽ÷in#—>ªó+¶†4ˆÝ&ZÎŽW«Â:"ÈlD,ˆüÑptïäWÏ€©©Œq©ÂVֲЦ¶ƒ‡ÙóVü#„ÚCçnYº<~0SRÏ;|¢8_´W–æÔ¡Ö¯·×ÉÎ\@ñ×äÒ3Ò@EoÞ¹Œ/(u•»NÏlž‡ÆþxVcúâsߣÁ‡Q¿|—ÑjVÚÏ›tÛæ,Ûö"0kµ# ù úY]'ø¦ˆßÜõ̹îÀÝ®ºG±¹e‘føÈ3fqü(îûÅ ×ÔàØëNgî) ¬P*Š¢Òfµ×E¸TçhP“RrÚ*˜ù . mJô–µ±/6¯Qj¨t ¿Cg;Ž­Ù Ì…š¦nòšÓsÿ˜j4Ã-{ãº6'Æ:˜Jòç.q¿µ)ïK¡Å‡&ñ> aUj­Z‘Œ4—*ñu ÞTƒ–ø¼­?'+9ÒІZ¶ž’KùÒ …™ÏʆL&Ç•YY\UP_`j Sm…ÚȘ܂ÈúeDM˜>A á¥ñeZƒ!|3¬€ÈRM©nNÚ¦—a=3ÿ³ÕÈÿ:µ‹PÁ~X £UËéXQ[d:7××·$t˜ë€¹qùü%54êë´5ûví'ýÎàR\¤ˆÞ\q’hkLJµî¶¶ò&B£÷g/PƒÞ2G–±5-˜(Œã–î;¨†šâÖ¶š†ÊBø˜/¯ÃŒÅ“–Pw/Ÿ”Ý=¶ôŒ\r ã¾Æ°AóñšúÙª'aÕâÔm‚Èž@ßÝ­ 'u–ÿfßÕ&µÖ×ã[îX0Ùœ¶*ç>ç>×>GkþÁCš:ÊZÙY•ºV ™|ŽþÅH¼–¼&ßå5=k3Ôì+=¨ßMšý‹uxåŠmML\TÒÖØjm½§©É£Âãñ2Eº ð‚8K*ð̱âÛ>ÿ~G×"³ÖîèèÚ\xüÖ§Bm"{C¢Ø©–Ø£›QB Q/rô*QVs™W¶«ïºÎØ'–‰±b¸pàãY“»tEI‘>›èØ´¬X ~$=/%ý0úötµîS|ý÷ËoÚÊ>|-MlŸ_»®@ëÈ“šeH òÁ¯Atþ¬½œÈÊ ™¸·4LEÌ‹^¶":Ä·Œ<‚WyÐãniLLJ¼(G)x²ba®°¼‚d¯-LoÝp–àñ@‚È}ÐHDOûh´úiX¾*GWxšÅv¬Ô’ÔC̦uF±ÆÍÙ° û¦G¬õ ‡y"ö ¥ÅÞ7NVŒ:µwÉxüÈLOR/‡ÈÙ¯/jÿíÅ™ ¾ ,VhÁ÷ÿÞWdºõÓØäS›Z cÁ©¾xö¿4ûkõpì´ÝaÚœˆã zM ¬†¶Øeºþ(ßÚ•÷î uo‘UÁ‘—g¥¼<{E&³#?ý©¯#æÊ•ÂÚn¢šI|Ò]èÚe9Ò ¯å?ã}÷XRöÌ¥»´ÁÕC;ÓèÅ:Ÿê)iA/8ªÊï¾öyöž cN:¤21uÆâºÚªæ–øš0ÕX³*)„ø "ãÉJÙ¥£hùQ¹4FšzkUœÇ9 * Qf¶NO0mkÜ@€ÁöŒY ‘eš*mƒ¦Ùt@¿OJ‹™ÈÄYCUk`i¹ õÊÀ¡¢¨8.]ƒw‹ c´[œ*ábÕUyŽ’b‡£>²#w'Éý£7¨¡#£.½<¶9Á±²`}þòBx•áz ò« ›Ï&cAŸ/ØT… æÙʉó,©Û4¥J†H‹}d`Ý <ŒŒå…~‰tÆØUq\2û9½×RÏC¶rÌC³êx<mkqñgL"­›Ap;Á© &4wg“ E»èìáaÊ=2ô á8¤v°âç•ÑÉ¥¤à¬)Ú²qCTTt.AÛB¡Î±R´Ÿ@7Ø?9››ŒZ’Má¹Ë!YìÙø¡È¯ü#¯@جÉhÀ]x©îœji°GvIÒË¥htYQä®ÛûŽu4|¬ IXgÍêB[¡†l‹Ñ…‡a;@€•ˆ«²y/T¨z+¼Èk¢Â¬I>mu\×VåEü£=S4–tmeìù¾mä–n›_x_{'£+ŠúíEí·P2'$G¯·ftÛ=È…«»ºMçãL!œÆùìjT+ظ "ƒZöB•Ê·Vó ¦1Ög¿Žð|ÒitDÛSñlf× Br œ8}ë@¢0—ÏÈ^#v‰ÁS`59·(Oãoíi6s‘OãØ]yEhÚÎíöt0“[Ý™WÄt÷ŸGV$½&G„ï(̦±£õ†„øMaÓ…žNo´6ˆÛðEdœ6EÂk•PVTær]ýš=9Ú™[%äêµÑ™IÍâqkMýî[X›iõJ./~Ÿ¦cåWìMÔëè¡ÃŽFPö*Žâ¶®µêˆh‹q å$)!%##.ž³„n4–~Çê‹} ……¥MÖ©— Ìã3ºSdŽ~Jy÷V¥oÆ…º¥ówÉWWµ»›ªYIDsY{» œm–(R†l"D‡b ©‚jÐq°+›÷@å-5#,ç51›Å_P߇Ù­¼„°êE2Èx JOÒDEnÛ:H³e•¶Û‹ ’©Oue$Çi·lj}EuN|ŸG$[²[šYŽb óÜ4ÞTt§Ï¹¾î|UŸÞ“«üïE—ü_Ùû4â endstream endobj 307 0 obj <> stream xÚcd`aa`ddäópõŠ wÕvö 64‰˜úýîûUý³›õ‡4ÃÆ²L?䘈³È200¼‘ÏùAäc© $ë…X9Êjº Œõ Œœó *‹2Ó3J4’5 --ÍuŒ ,sS‹2“ó|K2RsK€œ…àüäÌÔ’J ›Œ’’+}ýòòr½ÄÜb½ü¢t;M…òÌ’ … ÔâÔ¢²Ô·ü¼¿ÄÜTˆ£õ ”s~nAiIj‘‚o~JjQÐYŒŒ œ \ ÌŒŒ,½?:ø~Hüî[ð+x>ã­›ÌßÿlÍÎõð‹ýÍŸ¬Ð¢ØíÔýûúw•ß’»ã9N°Eïþ-ü]´ûûõîÃ}ß9·|çÚòãÈñ5k8f|¯Âù»OtõÊs'v~çßümÒ×î+@-¿U¾KFoçðcÛý]ø·(ÐØîàŽßœI¿¹’~sùgeqð•.ü0ç{øÂÙ Ù~'Mg—ãb1ŸÏÃ9‰‡«‡‡û×Mî}<<7§ñð~(½Úž endstream endobj 309 0 obj <> stream xÚ¥yTTW÷ïî\b¹ šÜ‹Fó[ŒÆ$–Ø+[DQ¬ô"0À uhCÙCïu†ÞQÄ.1ŠÆ±;jŠÉ£Æh¾DÍKÎõ²Þÿ  CÚ·Þ[oÍp׺Üsw;¿ýÛ{ŸQ”H$ºvë¶•­žºÌa󿹦ÌIÄQÂë,…q”ðšHx}€À‰…1¯S”¨t8¹RO‡™®ÿ¶6]Ç“Ë$û”…HÄÈ#T3gΞ1sæ¬eÒð oO/™Ýd×·ìÞ™;÷ýiv³fΜk·ÄÏ=ÈÛu¯¿Ã^™—»ß^¹Ùg÷q€«·»,Ünò/™L:ïí·CCCgìõ žä¹ð­iv¡Þ2/»MîÁîA!înv+üevëöú¹ÛõØ<£çº,ÀO*—¹Ù9¸¹ù[%ãLö5ÏzíPç»yŠ@‰) Ц$C ¤Qƒ©!ÔPÊŠFYSéÔHjÅRc¨qÔkÔëGñ”5žš@½AM¤&QoRÿ¢&SoQS¨©Ôtjõ65“z‡šEͦޥæPïQïSPs©yÔêCj!µ˜ZB-¥–QË©ÔJjµšZCÙSQk)jµžÚ@m¤6QS›)Gj µ•r¢¶QÛ)gjµ“ÚEí¦¶ DÄà­T½h¯èÅ€OÄ–b'q“…ƒEžÅu‹_-GY®³,´|Lo¥ŸHÖI>‘üof-SÌ|1𭥃¸A¹ƒEƒ}2{HùÐICë†>µZl•6lư&k+kïá’á-#vŒh9j¤l”õ¨ –bç±2¶‰½<Úz´zô“1+Ç´Ú ´ñ³i[mÛ=ÖwìÏãÞwñµù¯)^ûéu§×q\=?Œ÷á_ØEŽçÇGŽ1›P2[Á³¯u‚V„<Ÿ‰Ñ%á{zOz¼roòœ2ðÔÔ šHDjü4ámКMSêÍ9ÍÍ©ôN8ÅtçYÔÈ*d²€€ YMMEE g…¾Ò¡L­èÿPŠkOž|õDŒ¤Âu¶Ù¿ ‚‹OešsÞa“”SZÈÏ×è´ yü×V Cü-4þ"¶ œ0„í  Z µÅbyOº È8”¶>쫎Uà6Sÿö¿ËèXwðpoþ<Ç[=ÀÝ£òøf: ¨˜âˆr®Ò«Ò÷g4§U§ïgžü—g7é¼Vhiõ€hÞÆo£ñì“ÑSi«.¡±—PÊ%4î’¨¹«³ëWò'V¼°bÓsR3!‹©+ ç!>49Wÿ¾ÌF•˜’J&¤$BÇUB–6#AwŸ±7=»œ¶z­_ºtÿú“§š»nrï®fãÃ*.«ÈÎ.“íÞ&‹ç±£`doyž#+–/Þ¿¬¼pÝ´R®oï +sJƒ÷ì2­´Š5 ƒ0ˆžvÝíBÖĦ÷„l]X RPðïÓ )øò\˜P¢ ^ã÷^À¶¨ ®Ð£7oׄóÌ¥À›«6nÛ2ƒÍk‹öDEzxFGJ}âÜÀ‹Yplù-î ´í¯nhr?à×Ì•êëM  PIy•oThx÷è’Æ³Úδ,oD¯±‘ŸÀÈaNëk+ša‰šÿH¿m9ÈH½¯õ ôðÆ=ö“FÚ²Ë;3Vè´mx&Bu1z,$°F¯ƒ»=#ýå$¦î=ž¢ì & IÏCdnBN"²y÷ æà Xb/ßåºh»ËŽ}ñ‰IqÊÌj®¾9{æÞé¯KîÃuÆêNKì ½&FGÑïlj¥ÆÕL64{yW<R}jÐÄó6ÑYªT%0¡ŠÈ0b2bJã~ýØfü&Y D@’mXQ¤–ËŒ´Œ4D]´Q©íAÊăWs34gsP­6¨*ËbH«#ôŠTÈF[T\ƃ6*;1M^°ð`\ƯŸÚTäC1d2eŠâPN I)I)ŒÕ—:4ÿZ@L”ߣÓHÇ"îefÄð˜C<­$ýb8Ìc^Ò—‰ù<"wt,¸·Åùœæuh)BÎh²5¤²Iòpw§eJx"ÈEQxYÃóÓÈâ¬Gû· ?ji —YšT Áƒî–èŒ0S,¼Oô›•_¦_)³‚^Ñ#Åè‹ÏØ–}Õ¾Ò}¾õÒ†–êú†—p8+L »^ a³‹Aó2OƒA–‡?ÿ}©M|$¨!‘•)J9=ä”’<%I%€Aẗ ”¤dßѺIh ¶À–oâ±Ø¯{†Ç dùEööÁéì‡ÄÓ‰hÒ•'7n\™‚'âIxà‡ÄFƒ@ž‘P&]î°EPíËE@¼21zß W©kŠB-Wš£çÚà€®BËt¿=K>¾ÕPÄ£ º¨š$s Dò³h“ÀXƒèÔ#”i_¾ÀÆ'$$€‚ñ©†b}G7æd7ñµ’2¨ðð€)‡åôé#Èâ~eEËþ—á' žü9¶ÆçÏϵ!®H[URÇ.>+)£äð᪓À|iÜ9‡‡Žë]}L@É´Õ ºù¨Ç|t‚}~x…ÓÚMæð°(ÝëÝ I¨ÔÔ\R!© ÕË޳؄†£Ñ÷>æà®Ã™º›§².¤ßYt [âak¶¯ò+¯¬Ôi«8ÈIÉKÊj¬6@&0×:<\xˆvq ŒWïHqS…šBDœ,âHž†DôF—¸«Œ&lÂø§GµrH3q=¾>=‘[m¦ÁõÏæ›%èÝŸãÅùÓA¨ŽaðìnšE¾èKüƒÄäví%4Ç :ñ *#n@?°EÈöþ×HUBqdbBJ,ÉmY‰¬¶Z[VwÄ÷Ü$<Ž|†ag‹Ä‹A¢Ÿ¿FC‘嬨‚Û Na.žL>~‹…œä4(e>ýôä/OÙ/›ûѦeäh”†3­0ZÿÑøS‹¿¢¼/Ç^¾kóï®í³Jïà?EBŠ"Âz²¯üÇNdy^Úº×SàÅ‘á~BÅXÒ ÚÞÜÛ „³¹Y…Ù c*å N±‹oc7›˜øØ…ÐBevº}m²R²Õ`JµE„d¢sâ²p3Zec…6ߺsKÔ"l kÑlÞ~’ÊnÅãé(7R°÷“‚žãiláÒx’6 t¬'IòPÈ÷·f#Ò³ùÙyY¤—ÐFåÄgàûÈ×&!-^£&<¨»Ô&¼§Qð©‚b‰z)G^¼îK4ƒÖM·ô’¿$$‘™Âilf³x8]…$hFúFC§Êr5 $Ö$5 'ƒè¾ÉŒâÏÄ*zs³˜¯ê–Ò¯îšFô¹‡wx8çqõÊÛUuçà8c\w‹9<²È YIîj×í󔮚Âÿ ·²HŠÆIîÖ,ßíì±é}¾²ÛŒèèm±ö’gåé-+ÛU½<šÄù5¼¯FðëÈYÞÿ÷ã&) jø*0 Š湿&ëßÏ¿åËáe¶Nª„l`Z ¢¬‡ÑåÑ—F”kŸëï’®[ÒÏ%WùGï¢wç )Ø–ÇÝí¬ (Aô)RFĘو‡Ø™¢Úfý`D#Œ]” P ‹FÐîÖbÒÉ=î#ô0w ´ )é0õ>»#iŒÏñ溚U×vËýÍwß[õ ‘…q+pĤÖÍôýlD£­DíRTŢѯv4rCI£ÖšŽ”\Ô\4tË}Íw躰– $€ð­m¢ÔitÀ j1¢RU‘ ««‚ÆÓs<ÄŒ½6:~×ÒÕÀ,Zô úzëÎóÛ|'qÎ[˜ªH oìÛÄKz6X‰ŠèY™‡~3Ùà! ¯Á¿`4˜? mõ%%L`nluÉf<~cDnƵB;«7c[Ñ¯Š®;a7äôǧ¯lÔw˃ûe‹•yU0¥–›%ýá)݇$'á>EÔ#Ê%ÜNGù™=Ñ£ºå˜êwßÞoe §© ¸ü-!~L%‚jé¢ÞêF,u0k¿Û=•^ðab(»5ºôÌ´ (bôáåa¡k.ïzúí·'s}fýjDÑİÕDÞ'ýäÍ5ûº¿[îi¾†ôBë{=Jp·GKú¤]éBº.1:&¼ÎF»F»$îcÔtbm\}l£=r¶‰«Uæ`c/PõPÇwË%~Á}è¹Û«>üxÁS#ÉÎñÏñ¿BÊNzLv`ÔAvUzþgÈÑ472ôŒ¦Û“þÛ—å’:}Ê6Ò^„íâü˜>ûv¡ bßVáÕr`–ÿãSý6QðÖÐ…»JœKv  6…î:Гy¡Ts4z‰1TqÞj:ª#âXÄÑ—íå™ÞDð2µ—‡Bj°v‘âv|H'Ehmy5:ÄaÒZÎYy쑘Sð%tÁgp#¿£àdmþçpêc óv’Áe=¬‚•1[✃ås ‡x—PB£({ø$‘%8Dƒ¯?úþûåð`žô…ÿ@ÈÆ¼óþ´ ·xF?>¸jëV—UÓøI´©Ýø­¿ùs1Ï•‚އLUšô”Ïy›mIköíÌN¸ G˜¿zÆ•€ 4YÑ'&§'fÇ@!IÜÈ‘ ÑMÊOŽšÞƒOázαüOõe÷à>T„ämÊq†%àøÍDŸ ]÷lòÔL!<$ƒêÈ;¦È:ö±Ú’ãK‡Œ#£Ñ/è {ª‘ »Ÿ0ß.üäðªÿ»Tv£Gž¼EëA¯® ,'Ì.°|J}Ë|k#›¹PýY;™…•|‚Ú‡ITy*‚àèq.B¦RÏŒŒŽnô¯HNc°u3»¹]¥¿oÛ°k·Ûú/ËÕ©k¨ñékÌåJàçØ¶!ôX´héÄk=rcî®K¸‘›r52 .†–97³uÏÇK8pÍ‘ï¬I>¨.S«µ^À‚å1+Q€´+‡œ‚,ÒžbIg˜ß=à¡AÙ¶ï€ÛÑyžÙ!KK¢Ówåyî‡ÃÌñ£G¯pHE3ÒƒÒýJÔÅ,xUF4Üôíã­áS ÆÐÞÊx/~‘äÕ“N4¼[î$1ÓØò?‹Ý0"A’ÓŸXÌÆ\KjñzâÚ­[¶¬=õœCj%ÿ°ê¿?óéÓûÑpÎJ©ê ¢RA!6ÙM&ð'ç„^°W@¿·Do•ÏLr±UÓªò„ÆÄªé›¦Š>ƘÐKÀz²ê.ÈuÓB ØV ë~¦O~¾"ü‰üÜš>àÌ7'“žÞ‹¯'lNÜ“²Ý¤áÂn´%!?®4âȇ\ÃcwaGÕG);ìAßÙT˜#0¿—Æk ‡×Ð׺óÒBÓBZÀ6‡¨ÏÕ§eD²´ƒL*ærËÒãse¤Gi…´òÔÒ— ‡Ž¢/H‰ARËróðc× ÷J’³á±+ÐXË’ê>Ç›-/§ƒ¥x.´”›óã·^1A çÿÖ>Äk-ÃMѯ%ú¯fÃåýËœ°ŽÄFkÞö>UD½¿ÃzlïÊ¨èø¶õh¸ÿyæUG0Þ\ú´4zb‰WKþ¾¨¢U´Õ†ãˆ>“¾Ù¢^ÈaOû(ã½ùß×H|²•M²§ÍϦ¼G÷;%@¶/¦³IyÊÒ`2N„™Æ‰øôxM úò÷•6¹!ùÊ2Ü”™†›ìäluóR'Á.:÷ÂŽíÉ¢Ï<~Nù}žÒïÞ¾·ZZMyy²1å6úÚH&\{ƒé(w.K¸õÐö45ĪÕ•†ŒÈ™Pm¸~(7#7“L“¥E‘Áv«ð¨%Í.‡÷×–›FôŽá{ƒè´±g¢ýìçë?Çv;ß„ÅþåáúâúÌc\MZ©éXè‹#>ëx<_…mvÀ[Ì¢«?rùp:è½;4\5¦Ä1í«‚0nX³ä*K¸0Ä5Ô3b!^fƒKcÇŸ6!k cÒ|Ñ€ôÔ©ö—zC³È‰ÃÝ@‡ör„–«÷;~˜°“øÇÇdÐ<ç)¶àwÀÞ/´8wîøù«çV½;Ë~õÒån_êqí²At݈ö= HÄê9r.¢@)OPDì]Ì{+¯Þ;YÿÅ—@¡:´*Z£Ló®Ž#¤V­ÕVßš;ð’uxÜllõŸÉhz£þ§"Þl{SíÂÒ¿³O£åe®[C‹§NÅÃñ°SÅw@{ÉþýÌ>ˆ8ÄÝ6gÛnz Í:îš·xå†+÷î.ßì:±Õ±Ç ö"Jvès”KF–yh#«-‡VÄØ?Á,¶š6 ÆÖ¿LF£ÐØŽz“|Dƒ7}D¦ðð~SècFs‘-»ûÙOáÜ™µ¸§ôwЂK{üa‹š­ÁÐ7Ïkê¸4©.’̲eU… æ‚bá¼=oóÛ¦Jz¸Ôäå¸óÍ~Ýg­9ß$=@ØE4ïüÉ‹hËE‘Áˆ6.ˆ‘çgl<±/>-’`"6_™“Rù9ÕŠze=0?o~g*?5UåùE©…šÌ@]<©þe¥újyý^»=üJ½óH›¾dél< |Kƒ•‘q¤ÄîÕ¤ªVíM±3û×õh$ñ[×w„Ö‚?·IX§=ííí'O¶ïqtܳlj×àåì$‚\Wìyó­¥Ûyhi8x2½'Lç^¢tƒi§QûÓö޹ÜØáîà$­|w¿d~¯ß£%ôn7?^¼ÃÁ¾ýêÝ”þHèÝœ/ž‰zš2ƒpö¯gx=mž(‘%î$s‡Yi§y& ;t‰V8Ô TšÄ{„f_$+xIð«>gt÷d"Á=Ð3ÐÛŸds$‚B™ªÖ@¶ú€ON 0ò Hß…?CšÔŠ]á…¥½éC˜„ Œ"Ýó!”Å¢ÁȲ¹ß¨4Ó\Gi< ¿a‰~ê}{TǺåÎý 6Óìšó-úÎMâûdKßà¾ê‚†˜ÅïûÓÕ—£ø=º¿r<ºßý½~ÖîÛÑÉ.D›¾ba7ú„-d1‹ÌIÎà²M•vÄ‘„Å'Þ?0¹6Âñé•VÍ<: y`>)AË%ß<Ò¦-ˆràp„Déß·k×ÿŸ–ôBóŸpY£.qù#uþÿ‚²—O?1šN:o´EÖÓ–Ørúdl­OAÈâñȚîx&»týÍ÷/^¸zí3‡Yï¬_º”·ÂA=³ý¹W”ï…ƒØ~vì ÿ ÅïÎðÿc–iû;4HgÿZú4^4ˆZ¨”˜½UàØÞ³ŠÐ}œo›n+agzÒ4<ý~2¢ùpôPa!ƒÝœûÅaa?Èš~ÎnÞþáüe]¹÷ðºáÖíö…ëûÀ.BSˆW2´–}zù[Dqi5 „·t%5e1ð›`m°³#Sß qlaFÿ—¸³_7ˆJû ñâ—‘¿a@¹±°DÏöi$Ť$¸—m‡âÄ2Å̶´çÇ7…Ô$=¬Jþ"¶1ûü½¦rëÀUz.A›œÐ×øÏìíû‹ 0+»æ„×YÐ’°ÏÓ€è}õÁE®•AÓ‹öf®Éƒ¦ª¡æ!÷Ò¼5òÔ€jó W’i3Ÿ“þcª±Çs¹©ŠÌîWEfE÷%…ró?0Wo°‚~ã†×õo¯v›!–‹„P•ÚWåì*÷f têû„¿‚·`û7Öƒ~aŒ÷B¨­çPù_y§ÓÓ/Þáš¡-£½.ÝO ¥ÀÜþ#¦uè¹A¤¤ba11¾ÿX1ÈÌ9UôDl˜ˆ –UýöeP¿Á˜Fð½| 2±Ú–A%ä“®¿Wt±+vÑ}Íyq¨Yð z'>d©¦“«#ÏÄ×)N'{€'$+"7ÆzDïHbÔô6tÈòD?µC{éE5üYüm–{9Ù9ÛvHË-éªøJ£Õ2:- Ä!S^²>-ú q¹²Z™—=„‚X$B-ÛúÝà—2+ùÕ3V>²Ô¿²upÿó6´I³ñŽ¥k¿S«Á½rdàϘ»˜± þÓ3“Wº¯üˆÚ½±.!#RFjvja”3¤ÏŽà0MG˜~‚ŽÎŒ*JÎP‘ÐÂv<Å&`N¬wR(‰EBmè©ÀkŽˆ·)"AÎL-ÈÈʃ"†˜nz9Òßôr˜©¥ÈPÕÏÑëø*=Ô –-PøË]ýcƒTYe6ªæ \ÂÕáaR×ú=§økÐy¡öÛ—Q:nDõÄÊèw¶°L?·È ”Ã÷{çVgóÜZ…b%Ø€G‘† bm ´zÑÛ¾Ÿ7Ÿ£ºã ÐaÓ·¯!WÊàøÇugà”1è] qªIeò{£ÎÁjÕ¶À~°ÂLÃnl«bâ¤ê}¾ÕêM½Ôó,0uçg~òK*=™?È|T ‰çñØTØÕÌËß¼{~¨}a˾ú]ö÷ùóï°6q7 z8ŒlS™ÜjM}ƒT£$ÓàTö˜[¥:²¶nWùšTÓ D±¯FMLR K{L ƒígü>ö%¥²×ü pÇcTLL/¦JùJ¸œz¢êl'°"‘µHX#Ù’È’Ò©'$(•Š(ÿà02'gDÇä‡ê¼I ¤1!;> stream xÚW TS׺>1sT„B<únZ‡:"Õ×ëlUŇ 1Œ@@ ÌIþ0Ïs€„@Q ‚ˆ¨´N­V-­Ck«U‹­¶R[÷ñï]wµí]«í»ëÖY++{Ÿý}ÿðýßæ‡Ã±rÛ¾nçª ³\Ü=™¿¿³ŸÍú‡îi²%ó?ó7óúFÀe&Y¼Nœ…¶øIÜ·1?¿|ÅüœŠÛ%Wd8;Ïwrvžç" ‘ʧûÍp|{Ñ¢³ç9;/r\*–ù‰ÂÝEò@q¨HŽ¿H·Iý‚ÄòÇéKåòðÅsçFGG;‰B#¤²€å3f;FÉ=Ä‘bÙñ~GWi˜Üq“(Tìh†ìd~¸HCãäb™£»t¿X†‘ZZqfsœÇЍ‚%ˆ „5aKØ|b"A¯“{ÂxXE¸«‰5„+±–XG¬'܈„;±‰ØLl!¶Ä6b;±ƒØI¼Gx^„7±‹˜>†àD%ljȉã0c–iåºsk,V[\·\hyš·›÷„”“W(/ªw¬pì£qãÎŒß9>Ûj½Õù NÚ­§ZgÚ,±I´¹ýÊV[Òö´Ý»FeÍ\ciB¶÷õœ'—Qðe.ºÅ¸Òqüjâb­ÑÞãû-ƒ‚ZhOÓGîÏH“@"Z[[¯«2n?²ä-Öj‡£€µ\*¹Î~Nú(a½@BöfVi{z+4}VSLäz%ôÑçè²77aŸ­ùóUÌòW`™/a1ËŸ®¦U Ñ¦dIŠÅÚ8 ‹Ç›§ ÿ›CƒÿêwæŸ$ÛÉΡÞì¼$ÐN]“ŸšqŸWžL± ØPÒµ³;th"8ÈMÏEnå4âw]2Ò!4Tznj^ÑWѸO"Úö*ÂÃëÂ[ôeeZ5r?Ë)Bõ\ÔŽÜé³l½;fW¥j§ç¾…Joq™Pô) T·?Ûsÿݺ­°ÞÜ3+Ä5}1¼ n™3»—öþýZ\|CÆ®o/ä~7(VÂ^¢CÁ¥T,“>„[0ázñÉê;ç+›¡ÎEW9m‡e°ÜaAÒ–,oe’ (|8m›‰ƒ¢¯rÑàS>­×dÊîæ‚( Ygà„zVJú«!^kÖèì¼ ­8d!¤“ª¸Mh~É 4òxÄÄéŒB¾å2ûÐZÊS'¤lIˆKKv…hœ WÞ÷ÑBôæ™q@äì¬ K.svöêN/¨i,om¾zvǬÙìã'§ôqô±ºOÁÔý9'ß~sÑŠ¹—Ô…U(r3>ð§øwæ‹¶l‚EÔ?¯ÃåM=üx°ò¨¬\™V™˜GMÝK#»eµ…À&‡¥Kv-ýßUgo àʱӗZŸÃiûö+=ó†9nÃ(ôÿ cƒ.ÒQ$«b¹{=rðÌŽ8DeóòÕùp˜2ÄTK¥Š˜Ðõ{ï"ì‘TÀÿªc­>~›%§:áð¿…pž| ‡*»)–^MÇáH‡œU´ã¸ÅŸcºöÆþŽ’V,;õ®ÙI¥þÙ›`/µ*xò¥ÔG· }Ãý ëÚ®a´d芑¿K‰¾»B爺ҟ+»!<%ÝN*Á+ Ž– ‰e¬Ù·ÓÿЮ2/ ¬mèb õUÕ†î=9a½áhAPýƒâùÂ`’o v¨W¤¯ q Œzü¨EÂ/ð7¡ýd©‘Jþ„ž¹"tÏî=ÍÇðñà%4'‡ë‚R¯cõÈ¿Ëý-þ!´]¡¡ ´EåÍ=}åíÐ ‡# "ÃÞÌ-»ÓvFøE…ì“ì_×E¶Åë@ UTòvڴ瘫Æ|&!ÛéX+áZØNñw£ $;]i)!/¤z Ÿ qKïVQë½#§ùÚƒ‹“`^§dDÇCQm0è*Lg×´Ïg'ÎrdmYúñ 4 ›Ð„‚b%¨JuZ¬Üu[„'PGÓ‘óÞÓÂ8¡n“½ gb^%‡OÐ_æb 1 :x@âë£ðÃmìWÑÑ­þš 7wÀp¸¦©Ó4]pø@½¸8w·‚Ê:C§çú,Ã*nã8wªíÓÐxá§p¤»R‡¹m Ѭ"K¹69¯OÈ<þ=QkÆ“ ¬CËõœ†[Hu‘ËLA1tMè~Úö;‘µš3™}…ôó[ÈY÷=©ÍKÏM&*U“4užú næ}õòæà>Íi袴utrº[n„“pZ¤e'RÖè7s€,/ßá¢f mbÇ#Kò^ß‘nA!ª 3’2âAFETÅèë+« íâCÛ—-Úò–€%ÿÃ1 d–hû×iÌÒM®2K32«/»¯m ü+–/ L5Cfa}Bï¾îQˆuzË1›þÈt4VØýeÝ')võŸ¿9%#}ØAólÈ8.Û+ Ù ÔÊß KD]¾yõZÏÂíøÌi/sûäò“opf]±”w¡·O !Õ¬°‘T¸.¶VW[ÖØÚè+Ø "‘Ü}4x,¼ù üÁµff(õŒs §¹%ôsÑf1]‰øv †„Dµ:99-]R#É ÂDíƒWy !¤4¢6ªYÒžÚŸÜŸT¡ª‰-LÑ+@LÍŸñ‚©ñuâ U¡&7¨xH‰²ÉXH.ä‚V[Y•[T’“Óµ¯G¥7»Ýî+„p$º>ª6èP@ÞÊÒˆœU%0H5ÕvÝ òfÊ´‰VT)äUa´“q½ñMha5ç—!ôš‘‹® ©h£”Ô,œ2SEÉn³ $kñ…|àBËùË‚Aér¥$ `|S)@äËYmÙõk×0Žh =ÏkƒËÂôîôÉÎ2Gï*¨æ Ù™$¸¨'°!º3õ0‡¾Ú†Ó_¡]ÈCÓĽØóbw(uÌk&N5£æ¢uѪ\u.äQ†V¨˜È½j¹fO`˜U¬ûŸ24Eö¹qùª(€ü̼ ô7ô…½®¿¥¸E‹u/Tå j©D+5ïhPW„HÒ¨3”“Ù{ë§±/Ž{º•ûÔݦkÎtfëÌûü°^‹ãÁϼ¯[SއZ’:M•:—ͲŸ†êÓK ² ¦LÆå£Úq’01¯n‚jMQ|²ÄßÕéJÐ,b£ìg£’´2Ü^Ùõ£\|0¿à02ï9 %êâ D³¿Øç$f%•AdeŽ Cö?±‡²“²•eàPY…Ù…Ôóñaiâ”2E\|“Œ¢S °½ÓBæµïòóMÍÍugÌ ÂTá&ŽyΠL]’‚Ä%+ÓÓ6,µ_öCj:ò ¸¨¸Ö¼Z¬ŽÐøª=`¿yõ'©îÙòKÛGEì\%óÚì¡>`¾i7dÕCCS“¦ÉÜ’²,Uâ0”–UÖ™ úÆëÓì«¢pù§2)!Rƒ7tá¹Ô9æ ~ QF3~V¤/ÿŠ‘ãÀÍEnè:­r “24ƒ‡Æ[­©^€9Uêâp4ïi/Ûµ3l­8È ¶D•™¯5æã[®AQ.—ÅÄ…ûvù|ÝÔDë™%öE†ÊÎó™˜[ˆJ /k G JìµR¦±ÉöØà‚‘±ÖsºM茉ËLe&?¿{eSeI+`¿ä)Ù…øÚ•;RÙ†,qïYðØ–gT²ùžŸîW¸9†yÈÃRÊKb¹ ž¬-îø±<ë¨Æ¥…åÖðØ}ŤiÜÐx}®•ÕP¹ÕÁ8‹ÕVcÑwÿ Òä͉ endstream endobj 313 0 obj <> stream xÚcd`aa`ddä qòòôõÑvöõõ´ Øäýîûuügëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–á ˆ|Í"Ÿ €Hu Á(.ÄÀÂÈÈQZÕi``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€®&ós JKR‹|óSR‹ò€Žb´:Ÿ‰‘‘EåGß÷Ýßg`þqPtEÉ’œœ’¢¼¼EE«V-Z²BޝtáçiÓ¦}Ï_Èö;q»‹ù|ÎI<\=<Ü«¸®r/™ÈÃóý¡Ôôc˜ endstream endobj 306 0 obj <> stream xÚµ—mo9Çß÷Søý Ö?KU% ¡’ƒ-$ò‚KW R¢ÀI½oãeµq*'E»ñãøïߎǧ’P©!Lΰ¨þ¢¹"‚háZ1ŠI‹U,0DÆÁucAŠ„)ʰA¦¹ n ± Ê8v`°Á« pBá‚@ Hãj´àØÀ…/‰â8Ê7M í$pœËÇ5piQ˜£±Æ@nÜ>ÜlkÑ çD0‰Úpº%±E!œ1,$Ê¿áÆ4ÑŠ{ß~º‘8wóPR¯½ç¡Õ›ÀÖÇQrØ}ðq¤5#î¡ø#›ø­4Õš1ãø-ß÷¦ý«,ãþ„TMS•t³tçZïz8÷ ªšÁ²ìÝ[÷ øH,¡7u­Gã›Wåj¬[9—6o?}þœåÿ=Ywñ´ÊÆÿþ³rײéüçêa‰‹s2ʺó—åªó0{Á“’Ϫ2–µgË¢œú5ï]Mþê ÚW J“'Åòîeþ¼Z¼”D;_¾xkîdÙs¯˜ß?¬ˆ2*k-ïŠ',Z‘¹1®Ü`Xé¯fó»ÖÓýcAh6^¿&‰lÖ}œÝ£XLÒÒr»½ø}Óœ4@º¸À-Ñ’Þ–}Ýùcáňõΰe8ûUøú¡œ|ñýi~·øY¸SZÙâR.Æê¸Äרu™÷/q¹£û´d:-þ&ZjKÕ8aÈCN¶)pÒ>§ºð?cÚB1ÎëPÔJëd|29CÛy£¢’© ö ,n©À¨àx¼,$ר¯|&ÖgâéNöK=ß±,ô:&¾£4È£Ë!®6¾ŽQÒïðºeD=@ &šTT”­(éú!Ã< a•»óñûh-=P|Pžô4ï±a’f‡Ë[,ÃV»ŸOÑö  @æÐGÊc£dŒ æ$ÕÁÂô"ã3ñe'B±a(¶¯\çŸN.ÚßÜI=c`‡Æ Û* È~¨¡ë¬Ø^Hæ”útýIx8Ý Áð žÞè2ÿþÃEüØ8n°1Ñ%+çÁ<#tNƒ@ìéO„ÃSá\L;ygR²Áá‡Sóõ[6|ŸMˆ=ù‰lÂ@Œwå–¨ûÍéÙ驳=Ž¡IÏ’Á[ò>m"Žª®'k]Úg}(AÚç O„’œ÷O¯»ßzeþd÷¡Èc¥}ZÄ TiŸ$k|&AÚW—†„Ñ?ž!Ø!9Ë{“2~"DÔ±~D‰à§êVâ{Y gÌgRÓˆs˜¼}Öœ—9@‰>n #^K}«ëZîƒá>˜º|Ôù?¿ZrÜ endstream endobj 328 0 obj <<5e58d15fe3cbd5505f148ca2a1932c36>]/Size 329/W[1 3 2]/Filter/FlateDecode/Length 857>> stream xÚ5Õ{L–eÇñëw¿ˆ rAФÄRL£(ÃL;`©•†Z!v0Ò224H S#˲æ4ÔÌJ­Ì"ÅL )3[k²üÃr«t­¶[›[êª5’ï®çŸÏ®}ïç=<Ï}¿{ÍÌ::‚Y¢}‚ûñæ`*´8ŒÇ™¥š±j ß•ø| «Ýdjö"œHïŽ)²¸£¾p’,©ÕK K¹2 {`Oì-K©ð+ãp²,»ÔKœ"Ë;é%§Ê†þí¥+Þ&Qè%ËdcÖzIÄi²q^ºa¹¬ô¸—$œ.+oòÒï”Í\ì%ï‘Užð’‚3d5˽¤â½²Ú¯½¤a…lá~/éxŸ¬~»—ø€lY›— œ-k˜â¥'>(kŒv§VÊ6|ã¥7ΑmÉð’‰ËvœõÒ«d-Ñ;gá\Yk´ËÙ8Oöåd/}±FÖžã%•};ÛK.ΗŒ¾a?¬•ý^ï¥?.šçå<\Èyè#;}Ðû|\Ö±ÀK.’þñr>.–Ò¿÷r.áݲ¥œñÞâR)¿ÑK>>% [çe>-òr!.“J¢Óu>+M\áe0.—Êb^†àsRE´›ø¼4k›—¡ø‚T9ÃËÅØ UE§}®êxŽ/KK£û½WJ Ǽâ*©)ºæRl”¶F¿¬Ëð©yš—"\+í‹^u9®“¥y¹_•ŽD;>7JGó½\‰¯IÇæz)ÆMÒñè‰Ä×¥N{¹ 7K?åz…oI¿”{¹·H¿Öz[¥?Ú½ŒÁmÒ™è¼]ƒo+„]^®Åí ɧ¼\‡ï)d~ååzÜ¡0à7/%ø¾BÁF/cñ…¢"/7àNÎ^öS(^ä«7â.…Q£½ŒÃ…±?z»&Mõ2?R(;ìå&܇÷ã­xÞŽwã]8 gâ“øVã#X‡a=>ð| _Ä5¸×cîÅ7ñ |ßÁ±?Æ=ت0½½ó§ºÊïñ€BÍfŸÛÖTw®îüË˧ -y>¦°ûOŸ*ì©óùs…½ñ>Rh‹ÎÞ G¢çXáç9ó¹2ņœèü”7y‘Â+}ŠeMð9¦ØàRŸ»`WLÄ$LÆTLÇ ì…™˜…}1û+6üÜÙþFJÄ® endstream endobj startxref 209015 %%EOF readline-6.3/doc/rluserman.pdf0000664000043600000240000031652112276516311015234 0ustar chetstaff%PDF-1.5 %äðíø 7 0 obj <> stream xÚMQ[kÂ0~߯8 ØØ\Ú4¯ŠŽÉ¸Õíaì!³)+h‹ióß/—*¥¡œÎwÉwàR÷QÌöGX”0_S`)É3e ´€„faÊê=¾ìpÂ¥@¯FW‡¦5¾ËÐsómµ½Æf׫§ó ÆÖzoðW¹U 'àD\"w¸ ²ôÞà ¶Ñ š•/Œ "¹›*(‘y𳪚¡éZ'Ç9Ê ŸÅªîl›¯ù/s„{°Nü»ù›ÿˆ™j*NœÍˆyÇGÆöSA0‰$J:cŒ¨,Œnt‹™Dç gˆ¥TŒô¨ \äž>áîÅ>®$2`—?fCÖGsÅŠ¡Yì—ºÿÀÊYé]´ím.õ_·‰»¶q- ~_Ä×ù3¢DPZØFøµ—é°sú7›ÜX3Ò½uu`¹øŸ¶æ>ÃQwn+¶pß0%JñqùÓ+ÔmÃc7¼}øü‰Ÿ endstream endobj 12 0 obj <> stream xÚeTKÓ0¾ó+"NŽ´ÉÆvžâÄ.,b…À…rHwc‘&‹ãîRñç™ñ¸»-U+Åžùæý£ß2øñ¨ðÏ"µ®ÚèòFD> stream xÚí™ËrÛ6†÷} .ÉQààÞF½¥™i­.:.‰¶9¥H•¢2ÖÛ AêIt;Jl)cÏP¢!Ðúþƒƒÿÿ$Àæ‡Ì/&³àv|;‚€`¤±Æ÷ciŠ4ÆÓ¿Â,ú{ü³$"nÅ ”34ÃÆ‘¦aò!O£˜J–÷öÊÃ7eQÖi{Y¸ÉX@¢LØÉ°™† ÌšiHÌ|n6KŠi;É»¬HÛWo§Yn¹1 ÑÔþ+¸™å;3‹íEúÞ}Ù›öÝ>Â"Ä}âlJSj´Ñ™1‡ Y`ãð§"ÖUÅæ:]NêÌ 7¡a]Ú+ë0š;ÛÕÆ3ˆ܃ñ%ñ;óÍ}òDJDÅ–4†£F‚1("܉NŒßÓdš÷´4i•´¢x¨E@¯|éýoî«f}Pµ£0$ÄŽZvñh­·äbámRuËd±H[í²$_øt〰¸ÒÕâ[&€ÄîàãþkiQŒ@…éÌrWaÝêà6¯Š#ýJÒþÈ;T!ÉÜ·ƒcD©è/YžÛ4¢Ä“Ë€8”,7ù²ÌGö¦zXÎ\nð¥`ç¸êmt¨ï‚S‚·JÜ¥I5‰@„.¶!¼/« oTÊ:ôèúÙ¢.«•G00Oä[‚½È‹ñÚ"ÒÃ>„ð!YÝ‚eƧ{¢–$Õר=‹)‰TgñØ~˜‹N:¿)é´£­vÍ«»Ua—A:2L Î.Øœ?omjL1„;œæžÙ|™'u_$8E*ÓŸß)î£PÆ­‘!$èIo“âaM!R¦Oµ·Þ¦küU”¯GXºrp£´6Õ`Ó¨6àþ´à’âŸ+Ù<äj»E'P&Sö È# teà<Šm«h’ݯúÈ}oªò*› ,ÒÍ#apÛã5˜=%p$Õ’¢%ù.­ë>–·KƱ…·š7g îÖÈÆx›7  øry®b˜(ØÆIÀ1¸Ò%Štõ¡ Ô2©¦Ý¶3©Jo@‚ñTðÊ™}ÞêN+ÄúJD‘C¹¬Qκvs¶˜¤yži¹\ è3+„áeõ‡ž{ظÇ‘=pž2{[I³¾gß7ê&q~¥ÆõlÕ¬X€xN‘cÊ42cch.vÜÍÜ$pJ´˜fOí9úyeþðþöÆ(ÒV©;½ÿ¾l>0i¶OŠÃ:q§ÉÒž"OÒb‘zŽà[Ž4ûšÂαm M±B´ËHÐa¼¿}ó Hœ" endstream endobj 24 0 obj <> stream xÚ¥ÛnÛÈõ½_¡·Ð€Åå^Ú§Äëiìvã¢(Ö d"QcŠTIj½þûžÛCв³(l€£™Ã3ç~ãê¿+µ àO­ÒþƒÕæ°zw·úá}¸RŸùên·RÙJE~®WwÛ_½›½9öE{µŽ¢ÈS½ZÇqìÝ4‡ƒ©·¸{˺àãÛmÙ—õÃÕow_Åaâk W!E[?¼OV*õC¥ñ–µ@¬ãÜÏB[ë$t°§Úb‡•‹}Jp°Z‡©%øn_vLÎæ*L½‘üÐÛݦ-¿^­ÃÌ+¨ßÌÆWÓ•ÞÛ¦?µ¢Ù1Bòݹswf~– Ÿõi¼0ö%›Qr‘W ’+„7º¨¬‘p zg6…/㕊ý(NHt¡ý,'®³˜Eç‹ð>ÔWQàõm¸o{ÚôeS³ûæO‰T徊D¤B殩ª‰{bCïhZóКã¾câG§^1 Ž^¯›Þ9ðëÔbADì´Å¤^0û¼õˆë⹆`‰jc€0òhL|¥s”Û½0¤‡£Ø±Ç›õã’ž”¯C lma¶¼2´“y_n&°mªõ?Þàfâ±Ját¾¼Ñ[ÒÄ [³a“„­#* øErÑÓ¾¨…•Áâ"‡Ì(Žü0:—ø Ï SNä+-`$FV™õö ƒ§}Y—ˆ<â4!NùÍ4¨qAô¢ftpY3Ú×Ö?>]ÐŒ«–8·j¤¤x~ùTô†õ»¤ì%Û€ÀÁàðÇ3ÿ0U‡± Ͻ!›á+›¦¾Tü–û†OFÎCɸkøÁœ#øàGÕ´|<¹Y\jù¾L0ƒè›ƒÀ4dRÈlà²yhˆðm‰Šöšãuwâ¸ÇQÜH76äŽt{Ó“ Ì릕”Mä‡2Àl6' N(á4¸^ÊÚvèÍÈ8úô $ÞÉN2,øãe2ÄKÜ1ü¡lÓ.EŸ. _35³,ò®Q+o«YÀtÓ¨>8±*'9hç8h6$z¡½ v6B㊢ܘŠMV¥jæýg…HY)ocÐwU8Ú þ`eUÐÛ¾@!· °,‹¤ÛÏ76[«©Ä´èhWm×/ÈUeÓ íNiI`Šê !Ú±¢sb2í§Ù Ž#9Æ¥Þ­ ­€Ú&ò d5Þ)åùXs +Ñ„âÇ“b t(|O8ŠüÈò}µîž—+g­üÌŠp96ƒlÒüÅL%³LMQ’ÈM3.8¦åUG—Ë«tÔé§õréE(ƒ±ÆÂxÌ5b6?¹ÆrªÂõã†%Ý"ȼþ%Â,…|o¬·ðEVSjë-„úÊ9Aë\ûùÄ+折0Žšˆ_¬ø¡Uù`C$_ ÍZÎòå¦ôã`¾[l–š¬9+êŠßI7 ñ<¶Þñ¯iÈÂBÙr·`íðÖæ€MÍ:‰”÷™co±¡ˆ½¡,Káh!/æ™X3ùñöãî²Áj„±Ý}ýO"°Áóãû_‘ï+>ÿ|óÿ±ðËíÝw!€î(óó©Ã׋åžò­Kܽ}·Ü/F–|P–é™×õ2ºÈ$Y¦TWº¢bƒéxOº |£°«²¶ð«Òœ|Ãg–{AE5¼Tö¼B›¡׈–—Ÿ‹a{@²H!¡„#„_—‰¢-¬ÞCcøÔ̓œÇ÷WR·} Ò5±-N;©¬Çbœ_« G©¸Í’Üuêg/Û–|Ñyˆ¼fB^LqZûɾ½‚û©$µÝn_8«Ô#ÙÄž –m±L¡8èùª* ¨ÀNs´+qzýkkÚg>z(ÇPw Å=þ0 Âm£–ÆÈ`TîÞ5K팩Ëã©22)EOç†U†~´Å §«Žð\ð(¾¬¯¥SŽ6Ç€&(~ïÛ©“7QºL.kÏok,vJ pHM ¾,nlˆš°9^ˆÖxÍyl¿§àýàÞ·¦-{±'8¸Œ”,µò¿:æ“Ñt‚hœCÙ ªßc—® [Kw„5¯ÚnI}vüÌ€iâ+h¤‰5dXÕEAF¢I´-ç.JvÊ '[f½¼ÊyÙmoÑI »@°ÝäÈÅŽÕ—NiQ_ŸÓÍ™:L!^Ц-x·ƒì¨ÃÞòÏ›pÅ-^“à©íÓS$]y8¢ƒ#0 àó!¤êï¯rP¿Yÿs•…Ã5ÔQ§‘tÔ°˜N ‰Tg@¶é'|D^!•üüéÌŽV»°ØÈä+ÑÌ!Â?C[°³ØÒ†ôÎ-ýŽ{yF™ÐlâÈÍ0ì¶Å$˜ŠÛÂDÏ ‡PÆÉÆ~ªH’sæ_cÚÖƒý—õl–ή']J„93È•ýxùYbó™ý3ÍhïÈÜè›M‡_H0½•¦ê.¤¶ÔO¢±{Ñ!~êŒaɉ$²‚³ÛÓy î)Ê|úà—äŠÐZ3f#kÀ„xžôˆýzW`'Ês°-ÃÍ'ñp›9Jò1m·è”­¤ž!…‰RhMÙÎPèJ”†­_x £šíÚ$56ÃÙñ«¶p¤ã‘’¤”ÄÚÍ œOÏ$”H<ám"Œk®ïFLXRšñ/œ„_[cæ‚¢ákÛWC‡‚êÈÏáãäcÝ/xs–kÜÅQßg¨öúòÀ_U3—¡Ô­^Ó%9EÏ'³Ùä–dÊ‚k¤Èæ¥[õ–§—™wb».+>™Ð2û8¥¶Ÿ âTjèµeoœÎOæJËL–éÙ(pÆž©†Á@kT.E*±3¾tæ` 0LJöæër‘Ø¡Y‚JÆdÎÒV6Ð!MÖ;”Ô"*µ‡ }& ‚ÕÐBã@¿NN‡íb®’r—L•n¸£ñy ôŠòö EýÀ¹„Ö ây1â†ÝþÁðkv¦ÿˆòö‚T£<{¤›õîÕÌm!tV©;Hú÷¾XjÌvË¡Tj§UâË¡Ün«Y“`ÆîázøÆ˜ h¥uˆå†á<ÜÛ#]ˆkŒžhQV¢°ÍEs„›_ާnϳhí9ªjßÈÛ ?†û@žKÃÝøpgÑw‰¼h‹]Èm5Ô¼ÈÁc®©—AüX²Å=•èx ?ö ‹•#0 ñ8‡Ä¿•£½À°Lpl©é´c„Èÿä Ç.ñ¥¼€‘×$e\€”+ÛâßÞ­þù—ÿ“|3B endstream endobj 27 0 obj <> stream xÚ­Y[sãÄ~çWø-rU,¤Ñž ìË­8T¨S§ÅŽ­q,,KF— ù÷§o#ɶ¼@%fFÝ=}ùº{²øcá/<øñ‰‚_o±9,¾¼_|úV-|Ïͼlq¿]øéÂÜ,ZÜç¿8w;}ìL³\AàøŸ-Wa:wõá «'C绢2¼ü&/º¢z\þzÿÍ"T±EÀ ‰(šZÉÜ*ÌÜTÑÂZo–*qö7Ë• S§«ñ™9ž–%‹JÖv†'Ö¥®öŸ}טC½T±óaÅŽ.yµÞòâ°«3v.œÒ/x¦,ÚŽG›×º‘‘i[S!×®ÐeKÇõ+P£ÏjÜÖ¢B#:¢"DàÊÚD8£+~Õ±—¥rPô¶.˹=µ.ñúô­ïM,ˆ¬S7d®Ö²ejã(qc1Î÷DéÃR¥‘Wl•ØÙó[m¹’©vºÑpˆY¾+";å½ýXÞ ¨'d®›üöÁ#»ºGS*°n]!¾?öºÅYÖÂL(¦±dWÄb¹^*ûö(¾yfnkŠÁiMÇ:4÷“½$ø-¦C©‚¹ÍF”¦nšNeüÄõ­n9`À v2î8ï…ÿ6~>,­Ø†­—ù,6‰³‚è„Êä»ÊUi±r~2:|I"ÌT™ ÐÇ Õ¾ƒ,“¡jgN뇘cäžDòªØ'mêKÈ;=@5½.iˆ~ÙnšB|·å9> 5áPZë¶Øð¤xBÛ55[!º#dô†(äéÊ`­„ÓX_á³nrÒ¯'ÑRÔÌf„#4| ‚5þP­€ú,Vhíí2  ØòŒÒ1À€ÁXT…©6Ý"NÐ) L˜å9µøÞX}ÓÛNŸT@R´f*Þ óœŽJÒ SBÏÌAêp>Mœ_ÿ¥[Ï€¨Ž ÛLášÐÊ"›KŒQ™ë¿Š0SJhÂ,t¾6Xé`GÍÓú S‹¤”º0r›=²Ö¡¶4},òòYJ8ã¤Áˆ±>´ á|þyµÞÕ[s2žL0§í´-JP&k/ qQÝ­Ì?–Äp—õ7å`.ÿB®™'•‚ÜO;ö ,¿† 1nொV0¸>ÙÆ­9;$(ª ¥ç‘Õ¼x,ºöÊÓýíöæ çfŽH'¸ÖÄåëÜïJ£›³”ÐètË hÌñ¢nž&¯Æ v¼r^ïNü¡«®m³Ýxª¢ê® 69ñœ·s‡ƒ*Ê^Å(¨ˆ}[y&jó©8¯IX¥8¡™çI¿EGðÁuŠr¶’ðAyá`»Å>R xŒ– )ç]ÇÒ¡“âSv•µõT)ôâÔU'(tš²ð/娛maNvA:.yiì‡-iÉCÃ@døS&–ž·O´›õFËÓiæ~K:eÒÉ鋜gƒzŒ·i‰äqu” ÕQ0W}[”%»/¼œDþLE9ûÕ¥‰ƒØUÖÄ|7¢2N¬+´VÆ@‰S¶ÄÅ1_ËàâðŶ©2·“](4Æžç9ë^¶Yj­æ "Æ •wtü¹æ°AÀÀ?ÏBSÕTœâ°o-ù¾í¡ã>jÅ'š¨}=6Yg:òC7 åðÏIJÚÏ« ›«¦€’UAí4l†z¤‰Dþh¸h“Ù¡›VYhUÛ’-„ÚöÁy×w7> stream xÚÛnÜÆõ½_±o¦“á ‡·¼¹®$Q4MŒvGZB»ä†äÚÑß÷܆R´eÀ¹žûmÎîþÜ©] jWjøOwûóîï·»ïÞëJ“:­w·÷;UíT–ÔùîöðŸèíÑ^F×ßÄY–Eêû›Ø½íÎgÛpÑD?7­ãíw‡flÚ‡›ÿÞþ´3ºHòP!Œ–¾{¯ÒM,GbS'•fdñ£œ éÉˤ@ÿlN'Æ5éèþ™û¾;¯6÷×¾wí.£qZ:áærë*ê ºkåbÇ &Ž¹Ì¢î~µs¶“M¾ˆÞXÕ‰a®>ćoáJW•° «šñàÀSL‹Ýb³bòpÉ[_›9Ç£ŸqÜõ‡×0­qDƒ*jîyÿޤáFÄ÷*Re¾À'¶UmÐQjVv&þñîço3â|²ØÜó•,£íG²X§½bmâ&T4]èeÐÈÍmE‡7¹ÁÞo+Zh2ZMø%šŒÖÑ¥wŸšî:ðr î2-QÝšÕmt*ÔêÆû¤î¢uÓÞà·HÝ8duãæ—Õ½ ýC|÷©»4IY…Ú~þ&]ƒ‹®+B`0é»Õæ,Cœ}>6£.v1'ÎÁolùï¡ù=U™ Œ¡B§°í¦õ›<)‹Éú·m6–SäØ;ÝÞ^· ˆ^Í_qcO"K4–)óŠ ÿàHñyALá÷ر™Â„ìQX ©,«D•ÂÉž¶íVÑU’y†Ù¬"Å$Dtg÷æq2mq‚:¡Sþ8Çü¸R:ú ­0a¾£½³³­Í÷À5» Ûc¥ˆÎÝ0Æ,¥UbÊPÀ½Û‹OOñ#XG2=å¹É’BÙ?NyñîŠxà @Ø¥ØîÓ×m÷7ŒË(ÌeäEòyÒ:ÓáËÄœ²EF¾Ò­ÀzÂyfLJì+/%\ƒ_àì—n´#.%câi{Ð'F¿ZE\àÀÆdTËó­û,+ݲ£è®¸\E{Ûò~×’xª4:t9-Œ((OPáÈ¥o $<‹¶û¹âÊÐ96ÄP¤Iáý`[·:ÅB‹O’ @˜ÍQáé[ƒd†ÓZ‘6TQ'E¶‹µÁüŠçT¢*tô‹³‡Œe½é®g0¡,ÆaŠ D`“9¢páâàbJ T€ë›=oYŽÖ6ðy&|g2ð¦wÀ¤|ìÎnlÎNàJªðpŒb/d‹® "”2”I#ËŸÞ]8h¢M£Ý•€¡™J+ÀÐóY†Í(_™û$ âV¡>ê*ѵ(dhÚ-½›$÷G(W 8¦rÉU† Ûn„‹¡Û Ø10¢¤Š,úQ€=Q…x嘦µNª*4^ÖQV”(ü´îÁŽÍ'¼…–2XRg(@ø+Uà°ÙpG®ëÏöDNVˆRèNÓ.°Þw=•²–r =4Á°øG/ fü+®‡µ°äsBƒÁR1øø`¨*AU¨@rAï¹æå+î/{¾œšCª¤(}L‡‘DR,Ò-ñýÈ@ùdåƒG9Õ‰0ìîŸs²x»¼æ!7 YÚ›‡ãTIBÊ¡ì%ÖËñø1¯,4AHbS\ùÇ kû-—ùØñJje [K‘C;·DeZG®u½=ñ„ª ‹2E5§ìʸ!Æ¥ÒeÀ#«Þ²ü™u ŠÉi=Y³Käæ¡yhF¹ 5Ø—óL%µÙüdÆøòÉkòŸ,«çmô±žÓkýA8^ñ΂˜¯Á3Ó3gV*aJÁ€¡nªMCœ6>aÄ[ 3)3¯­ßo^O¤¶+¢gDÝšŸ…[st(óD‡¢a2jz⤞C°Ký«ÝËæd´xíhqÆ'ye-+¼Òµr—Uˆ#/)/(49¿p”ã«ðÐÉÉ>¯$ô•>ô-Ã¥U<3#\"ù¨rÃÙ6íªX'ùÁ²ìbe(zx*±¡òõvu0°+ÿ]`kŽ.„ŒV/1OÐF9`À'Ï~»ÙƈåÌVÀ4 ‰–ïJŽ)g"øªE™¥VÉ3¯'¡ÖÄ;›ö¬Ë¤*§0¤8 ¥>moʹÜyõš³<ç–s ÒáÍŠ7wr£’ŽB75p4º6°ðl!ÊU¶‡”áúcëÔqò푦½\ÇÖRX[¥ëª*çªê£³ý«¨#=G²Ò`²ãKzuÏ(Y•¾}ƒšaìú§—Н¹`ÒØ9ëéYö©9`µ‚+û ι¦" ¹'Â41ÜwWH32q|p²œ…¦%,D?aã2|Ç÷¾g¥GÄ>·§ÚÅ¿K†‹|é=A²éݺÇ$ˆgrcâ‚uw¦ÄðýÖƒTëz~[7íœ\ ’ÙF˜­çF)Š` ¢š[Umׯ/-‹¤\Té lèE¢ýqxR¯$lX‘°üд‹9e;ißs¤>LÏKG;ðß6ÃÑä,û2[C¥æ»‚—üNÃ;hÖ\x#М5lgÙ…ŸMePX"ÕK]RÉÔ³ÏT’O«Uâ§@Ÿ.^.pôÐ —%ž§a¡ò}NêÎ’hû'žúPpöxß‚Ïv ý¦ðR.²‰b]˜g™Žö;þÞÛ>áþØ›–O7Ïp‚‡yïþ¼B±:0~»âe++gÛJSOóÍ9´ášžóÓ:w Tù”‚È6‹Œ˜£SvYå±IšÜ(Ñ•Ñ-=¸qß,ÁùF!®$ª|Μ 5aÛòü©¾Ù_O¶ßj€úfÎW9j#•æU’ͯóþÅ—5½ogoÙÊÎy’© ä°ýà÷8—~i-Ï¡RD£õ™3íó ¼|@Ð —<·~ëY^ãÖï°(ø”QI¾è!6T>‰P»å`_§+Ms) Ê ( Ó|cü’àJ\c@ů:·¤ Â®àíö½; vn6Ã@ÚȪ”r(¸þdËÛ[á7Öi•Ta`–8Ö¯¥’ײžÞ×Ùš#m'g¤ãŠNáµå6Š3>Ìp@€ÔQ¨¿ 9¢óöîãÛ-ƒÑIªžç¢tyÄLF÷Ó 0Ö‚FM§¤B%õâ™È»ÈYÞEþlS©½MH‡¥mM¿lÅ×(XœsÍ §ÁFÊŽ8ñºˆUM(v»Êû–^¸`UÒ\Æúý×u_.ó–â9ð";øŸoTa`+©ˆž  PËGÉÕ”"Ÿ@ÿ[@wöýý/ý’Ögíù½ïc80>¥3ÒÃá2âŠçG~Z¨9®û¾Vf6³«'˜ |Œ~9RC’Ã_y¾ª±‘Z¿ÔH5æ¥Ø<Á Ÿ0±wÊúñ`$K롟yØY²lUî|–Ÿ‹…ÆpîÛDsêÃUþ¹\~ÜàÊ®ðÅXà||µÍŽ³Â«ª¥Êç;k¿dT³z y»ªhðËM·ßPý?¬(=õOáÄ#µe}€JÆIÏÀ?4ò| –?AGX™ð k¦'`¶Ìfríw·»ÿí²·«ê endstream endobj 33 0 obj <> stream xÚYYÛÈ~ϯK£6Ù¼öÍ؈ƒ`“¬µ ‚¡ZRÃ<’šåaûVuUó(daÃê£X]]çWíÕWråùJøë¯Šjõq»zü¬¤/2?[m÷+™®d(²hµÝýì=óS¯Ûõ& CO~¿Þ(¥¼§¦ªòz‡‹Êû«©5mÚ™ÞÔ‡õ/Û¿¬T‹(‚£‰²K^Û¨L¤ÝètÞë ñŽëM¤že$™§ßuqî5MúcÞÓ¨ ƒˆ}^§×´ô©©»>¯ ýÓÌ÷r{äãçpr±@Á0a™~ü´e’éÝ_!S¼™²$Þ €ÊÔ¹•'õAì®øyQèSO·b)‚ÕT*I¥öó0^ š{À¡ÂµV¿ « í‘P›0 ÆoŠAõ°ºo›êjÿhº¾i/´ZÂu¥¤÷¶«ÏxÅt¥ëu—ÃÎØ^¥÷g‚j@sÓ™0Õð@ UþÍž€3'xJ™w=”ƒÏ웳s¤_qn[”-±²…Á ( b· ½´…§¦¦¹&çVl©D¦@ôH¨„¬­ó >ÓÂÝ+äL@ζ£u’,)ŒL]´¤)&/qQÎìnç}kÞDày_öÌ ÞPà ;šô'žúJD1»ÚÓ¦]pF™ˆE¢` óVO¸_N$ÿŽÖÞLlÎìva‹8š/¯eÜËÞH·¯(¡®­§)üÀÞ+oó¢'½ñN?ûR49þH¯Öo4ŸéèI`1%“ñX¤¼Ñ<Ê~Ÿí™îÖÏÞݱõM½¹1[$ƒÉº£•ÜGìÌ8àoL«¯?â9 †´|‰}ÓòÇ‚Ú~Øî^½bôd#'úp«*ï‰îÇc<«8µqЛ¥*ñ¶(0.N¹«85ã*wº14ÿ‰Ébë?ÈéeBÜ™ÝÒvÓÞðI½\˜–›=­à—7æ*ö7J9Å5~òÿ#_ph(4u¨b ó*Æ2—"ÅÆÁ4Ê“ÈûR›žFŸM©â %Ì„¤Rô¡Äà9 ]ŠÇÁÈg¥yiskÔfLô#bäÑ(§ŸN÷4°ZßOU^t›Ò|C½#7¨”$//¦ÞÅ:Z´u¬,­Mà;¶ÉBwzŸŸË«]zÆÖG‰‘¿Gy¡é:óRjZBgD°' rúÙˆíPjÇE+>P|ü½ÕàÐûàB›·4* äipç­ÌÿøÄSÛÚ¼Zˆfªð*I<•&3Å'£kÉéÜSŒá—­ŽfX à”;+î]ù75°¸¹õ pÁ´Wb鉠F[Ž=N˜ÖMSƒ­X.:ƒ—¥9‚ƒ0HDtcòÙ$˜ÂF6˜Õ)S é J¼:¯ì(&ýGŽÖ´°B"Ñ*­a†#û Ú£ˆa}Æ”¯kXÏËóŒm<î“õ_MÛÔ#,@ ú°5ùËBSH¦©H]úòÃßÚþø´¬S•p`0E06q[8CŸ! åüp»g:ú=×à¢DÅÙCº˜  ¹¸2U"uøî×Gqß "0X2H *dùä Ÿ?ØÂÞP1èhZ7,‡~7“7--A|ð¶?$Sr9U Ö§‡+´74ÕÂ&wVwî&"t@ãQ÷Åãý[Ç©H¹d&QšI}ý×- "L!^9®iííh†:{Ïm0D¦Y†”Š[¶~2ýùd±q<~h(¡ÃhP<®vÄÈé*H$ò™Ë•–U™1£J c:ÁÅî@Œ/i Ñ¢Î¦Æsý`8nnˆýpÀyïtâ2àSÐ)H&ðx…p· ^Ã=‹\2€óI#82É·;DEÓrEhsJÈffxþú ;ÖX Ý&iÔЉ›3]¥2P4ÑL4=æÜa¤žvÝÀÎu ýšÞÕtb¯égÒõ@D‰+êBþ޲nG_/õ3Gþ~§Ì'"-Û-6ZÏÙYE—µMáUoøÙ[` ƒ—¼o¶CÈþ€¬Îº§%-˯m¾­Ö*£9øÍàÌÈ\8"sAbIÀ@˼þFëáñíŽ2‡ÀæÎ~ØÖ»£“Çvˆa:¬1*á{Á–ÒCœˆÈåæ?.eB‘¼ýÝ•âÐG7tV$9ˆù"EPB&÷E üD(—±þô»DÂ.0)Rï“ÆBeWø“"{©+sBü@´k~… ”4A7 høóÓœ‰sEÜ{Øý‚mO I1?0?)Ÿ×ÚýÄûöù·Ve«S>‡ÒÀáåOMË6#ú¸Då:çÅd&†s‘döœ"ؘ1üê"-Ô¼x*Ö¿‘ëŸu8¨ëj;³¿Ð9; Ús½Ú¤é‘ˆÍù`„±Ýƒ"ÌēȰČï€"/¡ód'¸«Ât´Œn9 ¨¤˜ agÓ$Mʹ£§•I¿rQ0æb„à oEø®s•¬‘!ú8šríŠSW»@!ô#ðÛ­Ûï.Ü«¾súM ýÊ)b4lõÎT§R¿7€Å¦Uj{öò96s7{¼î«Eˆ·7…®U$rÊúÏEm±‰l7 %ßìr”Ì.Ç„M³@0eI˜$Ô„éXmˆˆk–1"µo lpÿº{B^4¾Ð„žy4‹ï‹xP¤뿚¥'˜h®ã£¿5qÏÊÈ’E6‘êÚ$VÕÌbS5;«ühùü͵M¯B&Ø,Ø×!÷8–*Î+h Q™¦—#X>^;‡Þš ”—»-hIšC ý³qJ¼yÈÛÝBïÆE½È;-(TªgœBuƒäƒAl|ÓkY¯Cus‡ ×þHèº)5õ–Ñu¨ æp—Ú[5<G®\F¢ ·¸ŠãÈk˜Š”•×`_ E-õž×´cåÄ-þ6âoÕð­Ù»ÃõTJ껵ø’eãþlŸšc>~uu¢'š5¨þa©›¬>t(M½ä»J(— ž­y6Ú¦ºÏ£àçõ=\Ó©1T;lìƒIc"Ù¢e÷§×Vw¢íaÊÃ_º{¼Ð:nÒ@ij²ÌáXbÅN‘¢5‚?| í âÞNû: LèUiZŽ&ïÅ OMÃÿ¥á²ê˜‘F%°2{ Ú7ö%°çâæˆb! ÌJð‹.ËM×_¤® 𿚵Méšø¡qöéDWªížÄ¯ioúv B¥WXzxCRT/þr™uOßv ù7 njAŸ:E–%øJ õ Ûb\§'/Xæþ2´Ë±­›zI Óòô‚)ˆ‚É…€q­É}Q¨jùñÌçr‹$ìX$dâ/ ‰GÚ®þñ‡ßÐ& endstream endobj 36 0 obj <> stream xÚ¥XYÜ6~ß_ÑH¬"Z$uî>%Fda Ød€<Ä ¯,±» ëh‹êÏþúT±H 5-{zÌ"‹E²Ž¯öîÓŽïøã»BÀ²kúÝ·»×?‰OX•T»ÛýŽ—;.Y•ínÛ?¢7Çú4«é&–RFüŸ7qš¦Ñ›±ïë¡Eb½Õƒ¢å[=ëápóßÛïR‘³,ƒ«ðÌ’bÉ9“Ù.N+V »ð?»ðú'\/Y"ݾ;mô‡N9¦PÆ4a0 ®WßÁõyýªê¶#ar28QM˜|¸‰E©®£©ÞÓwô»õ²WäÑÝM–GµîjØÎnâLTÑÏnƒQ3 æ‘tL%ãbƒyvŠõ¹½FE°;çÑ»h>*&Q«öõ¹›ßÝ€ò©äòÈXϳêO³¡Èf÷Lè¢#¸¶×Cݽ2_ U ¡Ø†qV°¸KVUÄ­‡6žç‡ØœT£ë.nŽõd6”s—kОi•“=Óª ™°e>ÀOî¡5§ÎÒ,@G&‹Ð@p|` ¸„.+¬øŽrtŒ \˜§±£•§ UÝ€íœÕrÎx¨Í<©zVe™a íÑ= ­«Â!´n¯ÂÁGÄšš…ÞJ±x‡6µ“¾Ã}6qãHt8@;Ò¢$Š•„"©OgØeQÝ)Ðv›¯y”ÜÙŒÝ8©66s=_ëEQqò"PDünzQ°J<çÅ<ð¢¨ÂÇc[mN]mmi’DdëѸPG¦fìOšõ8"œQ 8à]Â¥š9™¼™¥L–¡ZÖ | ™D€Ý€“iæ\€ p`Úy²íD!™£€tyk‘ŒöTâkî´IõäϨ?Z§—>ÝOcg'„!8Ÿq )qD‡ï—àIÂ2ï‚·¿½óËÛ_~ýmËÏ)K}*"SÝéiz‡¤ðêI»,™ AºâšËVd_že,YŋͶP@¶`ÂS‘ý~ $ƒzå@²‰è²dE@º±çøƒ:èá H[òRFf¦ô™—©~õ`Ô4Ó¸vß™6¤¾ÄÀ5òý±b",ãèþÖ\/õXyž.Ž2j”Kl²¨ìªµ\L­>«æ 9ŠQE·jb5÷ž²LàÒÔ¡IJ{/åIÉ|1ûæÛožqѦ‡dž³*,#!Sˆ?Ä÷º_õWþè¯êµ…é¹G€º6Ñú ÍŠÈ4“B“# bñÜÛЃ t-l°kg=M3ÈÛ×sƒ ü¨Ìe¤’s%/#— ¦ýˆ©ý€Ä*ÐÝ!+ç`â§Ö{ø= ˜˜Ýdï¾óš©SÆæc½‘>T¢ˆ0 á÷`‹–›Ø0råI¬Šμõpl}Ã(«}O»Â<ß³/Ž?Mj¯?/%.;ú Þ0j”íÆ jñ›X©SÛ…ÃtP‡ÚÜÊU¬SL{U[Ç2,òÅ‚ÌKŒ©ÇŸ °B™6mf¾“ëþ­Ó½}•@âÙ|<ò´d¹o>x’ü•×£’¥"H:þ{5×W7kÂ7kΔðýR³&^Ö¬%«îIø`€‘ûeÑÙÓÞÎ/ª+Ò(‰[َѢ}ÐócÏI}¹`E±=±;y'wvŽ%+½jÓh8 žû ûc 1ÒïRt¬4ª¡Q4[~ßÄ•yÒ§•,ñ=BµÒÁî±Hj{€âë£o¯~¼Ýýçú^‰Ï endstream endobj 39 0 obj <> stream xÚ¥YYoÜ8~ß_Ño«"ŽDQ×>&È;`0ó°Y`5ÛMDG$_ùõ[—.·lw&°aQEŠ,’_}ux÷×.ÜðîR ¿Á®¬wïov?ý¬wa ò ßÝwa¶ #•Ç»›Ã½§â<ØnïGQä…ÿÚûÆïC[×Es@¡ñ~uåî7¸ævÿ¿›_vF'*Ža)œ$!‘…¡Šâor•iê(êùéçh¹¾Q&’/?~ú #–ê@…2 ÜëÔ;]Q‚–ïö¾Î¯l”ÞïuæÙŽTòu’zÃÉÖÒjñ™y¿Öv(üsg?¡y´îûŠsØ'|I¼Þþug›Ò*Ù‰Qq´óá˜B>¦›“œÁÁ‹»jà—û}l¼¢º£>í¹žÅnm:•NeSm³±i8<“È€ª)ü0 T„j¥¨Ž;¸¾øRY¿lëse·9qœªd¹—á– {¸§…Ï-½Íâš{Sm¸ æÞlq¨68탫*n¹æä¾8YõÏ¿íøzóÔÞOâ1¸Ü’g*—ÛX!£GdIJ”Îï <àzùÅ5=à„.žÞö:aˆÀ'ÃI±ÂØ*d6wäwòÄ­Sq˜§ðÙ†_ëâ|fÉ´ –ŠÂJxˆð*ùØz[}Öq〓q˜bã(š5_Ã^­ zÇãÖ%¦ Xá5ìéH« cìg™ üº=Ø+P‡j_ΫµÒZ~cÂT«pÜ^ìCðþC3rÂеUÏ’‡“cˆðë|ZaÌÐÇF{äçD8ô‹k>£.7*Ê—Û©¡×iìÝõö€W£cïý‹d­w ŽÙ°¯Šn?=óÓ5<åǺ(¥Kƒ_jÂ*Lûî]'ÛÑä elÈnz8¯D’t$@‡4R0a?ðÐÞÕ®*:™ å'éAp àÞZ }~è¹W ¿¯š,1Ê ¸¤©áihÙqçVÓ|F¢¥ãØp™J̈Vž¶í^†¿ŽT02Ô½{Ââ×™7ÏU¾b^[žZ Ýç—3 ½mœ5¢(GËálp«0yËoÄ ƉÚFžÂJ]Á`¢U¶îeåS!:æ]Y –1塼¿jk…ü4Q‰0qÂ6HLîuÒ#“À‘ùµŒ‡ž…?Vä¢,¸ël/k2¤¯a¢^|Ù»Û¦¨¸}kÜÚé»¶ä®[¬‚ñÙY-,¼íÛ™P·A&¹Òá9se,!Õ/ÿjŸÎÅáj éXèLÇâÔ๠$­’ëä®4\rW<¹W\¨{Z¯ÈÊó0v© ¯X!¨Ð‰“@®`ÜŸŸFÏØ ‡æ¡‡a‚Î9¨ÂgYTmxŸÚÚ²xB3¾4–||ޏæïBV$“‚Ô+¢ëZTéÇŽ¼©.ñôý Ivòôº¡IU–®¼.ƒ„"Z@ÊÕ01Q"_Ä—f¢t&™Šóïá“èeÀÓKÀ Lp%^q† Ê òØ4 ¦Å5ÆÁa´ä@@&0Ë]MÛÄ)ß§‰ÁÙ®vDøVV…Ch˜8c@¶¢3êaÈaE¦ø”o&Èe:Äà—„õ¨öeœ'‹÷Ȇy&ăÑ!í [s˜áeÏB ¸ET—¡=7"±îöDqOq3v–½N£å ˜¢«•BWˆqp5¼á!Ã\A餳Ç3äþફâCÌJ¢1+‰‰^ÊJ zþ.ŸÀu"45©Ö+á t4 å±íjºÌRØ[CïŒq”ÐÎyè%91*W<6%7èCWÉÍßu9ÁÓ‰†¼vM'@“CÛ=ar éǽõÏ­k†k“H0=æ”ÉÀ²íëÊT”}§dùhÔÙ¨£Øä óët ̢ù*J0Í"Vï8MàñŸ©›o0WÙÊ•wŽŒƒÉîÂÌ,'ëÞéç=Û*ERY:Û}_ÔÒªXëÑâ(~‚…S–‚ æ¸×hÌH/¬º³Cçì=1É™æ‚ê-ªñÔá~ï]{×ûã—wÇ*ŸÖm×m‚q¾Æ>¯ÌN$]¤­‰ òy>AžŽ]#õ¬ò«×j(æñŸZÙü{÷íŽúD`×#ª4zƒGW#!ßÕ(H=B ¼À_ 4á~;ìÈ)ÓÄ/f4ƒP÷Ùóç}!•-¾\arˆc§5—ǾBFpÚ1„`Ħé˜b¤³)¾Ù®EBLsò¿ úß(Mác޹aô Cød¥$ör ƒV#¢”|ŒoÚKÕû€!{öl2“ÊdÐ3m«(È“`$´ ì£m˜L’Œ“lU€ƒ¹*Û÷2îT4Ü7‡b˜ käÆ`)ÉV»K•©4l<Ÿ„)–kG¢þÄÙ1lzàF õÀ€Œè½|7WðMR’x-ØÁ‹Ç/ßõúÅGQÄÌŠl‚{òÕ§¶sß ™-*¿/!£­®¯êкyô¼:’’®R,ã¾ÊÜðU拊@þr²•諽OÚ¾2¡6*z»–ÏLâ'Ú í‹}ÀôîÙ^¨d$×Òc=RiºÌ­k ‘ ž_*¹º$E4Ì­ö8’.tò¡œ?—“²”jK\ M§Š)P]<·1‚7ðGî ÍW &¯FC.;*Œ’EJ5` ³Ù6)6c= ‡µÍ-×–¦;Ùëƒ; 'Ùç¾ ¥xeL]án\™áX¯åã ¶ƒœT"ÆML•`Cÿ,!Q~3î…¸Å> stream xÚYYsã¸~ϯЛ©ÔCݧdj¦*[yIì·õV&!‹1 IyÖùõé( ò±eWád£þúC7´ú¾«þÄ*Oà?^UÝêïw«Ïß’•ˆ£2.Ww›•(V"Jµº« ¾lõn6ã:LÓ4?­C)eðeè:Ýר)ƒ6½áá¯u37ýãú·»_V2É"¥`)’S×çoéb•0Í \$”eT$4­éwû9ì̬íü¥V*²UŠ VìXT&Ádf®Ì—¿{“2R¥Ufè=Ò…ˆ¤Óöæ ’Á¿®[ÞˆýÑ´-×L¯ZÛkšÇí:Ƀ9|hHÁ»àÑû ™Ï¿îÛUµF¤J¨²(–ËÍÍ[/ápY~ܦU°ÒôX*7SNÛêQW`® ûÒ€'«`„L÷kØ—Ì´õX·fšxtذÈ[=…¢bñ‰Nfìš^·8¥íuÓM\çeÊ Ò=wLûÝn&E0Œs´sUw¬gÔf£÷íÌŸ×JºÝÓX4V Ï„I–E²p6Ül|FÌ#á¬|³X—Î8)Ò(Ë—êug| •Qì¤ ÃM«}€T‘pú â蚋饔=^:ìH‚Í`=hÞòT‰[WÄRäó!ET ÂE”v@Lµ ­%æìüš£dô¼Êò`šGôNª£Í±¬¼ Ô¨ ±†8 /¶Ã¾­±^8óÏVš˦¯FÓ™žœÀqÒ™VDäPáÑè©dTJ;ÙtºòHRD™›óÉ#Î^-E„Ó ;‚+Å#«ˆ$ùÉÀ¹ä'´Ì2¯GIþŠ<± eTÍíRnÞˆÞÒä¹ »áÙx¤ÈøxÙ¼­F¸ä·×ö !Ò…_ŸyRÈ(VË#ÉM?™qö Ç8.ò‚4*³W*‹D²¸'%zË÷}cé }¬`Ë0†»\!/£D|ô ~ö÷ çö£Ò·ue>ƒ¨-KN"$Ÿö0¬ÄŸq`Y¦|}§r8ac8¥²@]}–É£4{‡³§WV<[)2Uñ!:<‡NYqâÉœököóä¨ÞéJ¡T; ¶v‹.íÉ…P†#¨ã@ï‘ýÁ(Wž_z„sÓ GÞN8nw|iW è# ¥ NŠ Þšã ì>æ8Æw#öÿ@5uCáOÎWvkžwàÀ§[Ós ƒxÏmB—M °ÄˆŒÊ¥<4ûaGà … ¸*<Ĥ„Àh  qMqÖ*' ì¬T;2t»ÖÌö‹'ŠZ^|AßaLû‰•„*/“‡,)ãì„;ÉâPnôˆ9t7ÃÖhÞ ¶5Bl ¬§±ÔËÔ…äÆKí!Ò\´CÿH .Ô³Ý&(îS°SJ9aV?py؃à¾Mel0‡{‚ãݦ÷èD„°oÆù82wi#Öö“í²ß%œl< "’#`»E”í DÉxàÃ[Œ˜~¨-b\râºXc?%J ôÜ]úì—ZPsäÆ`KJ|ñ£+FâĤ£Î°N~Ò:>P˜¶C™9÷? Ðp†3ŒMÃ~¬ì¼ûÀÇ¥Œ2w­íàú›‡‡ ï<ÄWÈÿ/¼œ¥Dß™ˆÒ“ûàŽ¹!?=5Ns±œ8IvŒRÛQëïØ2¾j€hñN,È?pHÄʃXa±[ÄqlEÝ۵ȹ/Î|ap©MaíHSR2C`7kÃuæ.¨,}Ûd”Pä1ØgµS¢Géöî:ã4dœ±çB©¹Xd«€ß0hÞ–jÄP‚ó+,„üÏŒòŠH³ÎäCÚ¤ö›ŠWYäa¯`š—aíp€ižÄ0mZnjprœ¹àfK#PîFØ14HG(kJíVÚ6.©F‰NÈkDŒW§½QI •À&|áCÿɺ¼ý!/ó† „‡øUìü2Å+ñ#ûøÎQÚi| ë¸tÆÆLï| ”¢dà`·Š¥÷5Ty ”òxwÔ,שGi_|H¼`d«ÑÏÈÈ‚ܕtkõ´åª¶ïc¦¯MmùC‘Ê.èãÂ,îýÈ·±<=ZãêÆ²ã ™÷Õ)ÁõÏ­!\³iL"Øßc;~è*Ó§— Ôà ;zi¡Yú·%Ry|Ø{{_v‘Jó†ÒnºX«n¦]KÖB÷+¡`@O|SÂi(¼&N_A›é /{Œ|Ú¦y”;]þê;©(w÷Íýš%Qà•Çörƒ ä£í£°æÀ2Þ°“Í@Õ%dçðÞ†9ÌïèΆÍó¥cÑ'ÓH–¦©'6w#¿û³µB½ùLëá†=8#ÑX´ûÑ©$¦+çèœ^:8'€çÇY#Sö7¬ 22åß,}x÷xkäi²d ”oi—X˜-S‚žk¨öBñ;%C‹—~‰û›J’É 09 7–{sˆŽP x9Ïè™4Ç8›™«'LÄŸÝã³,¾îÿy< Ǡر¸‰±ØxNììÕëMR/Åñቂnü­éã,X¨cžÿú/%%.€6WÛpÛÔµéÃMÓ~€énÓ B°èR;iYc!ЧåL²ã£î»Xq,˜œü …‹ºµpcî}º‘Z÷Åí0ÙßOðšJÏ?¡ÇFé(æ‘~•‚6&=\ÓüéÝPœEéùÓÒ5¦di÷À¶XU$QZtË*°™úˆé+?ÆB'Ï>üèóõnõ¯¿ü¬Ä…• endstream endobj 45 0 obj <> stream xÚ¥YKo举çWômÔÈŠ+>DIs v± lKßÖBKl7±zôJj{œ_Ÿ*Õ’lõ¸ch²H‘¬âW_Ë»?w|—À?¾ËüOve³ûén÷ã¯bÇV$Åîî°ãùŽKV¤»»ê÷èç£9¶ßÇRʈÝÇJ©èç®iL[¡PEÿp­¥á_*7ºöqÿï”Ð,Ma+\$÷¢XrÎdº‹UÁráÊ®9Õvt]Ëöqž¨è·ìÊh°#6T4v$ø_âÇ_åò \0®ÃÝ᦬tɨC3¾üKå2–Ö¬­©ð¼W7È$ž—¾f«§ ̧Uš½È¢ó0RïaC×’&Ãùtª­¦!y!»ˆ$gŠïb°:'«û#ÊLÁRÞöY¹–~/C÷ WµmMcÃ@G¿—M± l+°oª‹èîèúüig2½3µŸ+#I7-!rÍ2>™ºÝ²4gJÏÆÀ-V:9ãÙRÇÊ̹ÙÆnqš1 s3–J?·±í9žt‰+7œjóŸz{pß¶î…>¿l…¨’:#TI“­àwKU•2%ßÓ4]`Jfèožö™aMÛн5šA·C0µ¡iYúà¥~£‘îÎ S½ SÍò|©Ví<иðsñ÷w_ƒó·Š¢ù, î£ç£+ñ0Gð¨“i¸'ß™!Ëed›ÓèO}¿ŸGóȺ~Zý¥¬'—OÖî»ó㑈´…ž˜!‡¤€Ä 8 ŽÇ ʦ»§)ÓüvwßD– “aKÑJçñtãÆŽæV(åy€R^”ò+PÒŒó@I%"ú°RMœ Ë?»º¦  "Ý¡éM vË3˜>ù¼}ašup pÁ4En x¬t#жêm9Ö‰$‰zkõ42MKR3ÄPÍOö$B;”ætûçÙ¶¥ h%=Þ gÛìœ&LgŸ„)ÞÀ‚jNæÑÆK§¹öËD bq^Rý!zÉù°,…Z¦¥g€Akê-Ï‘)ªGk6è¼o·‚VãÚý±Ÿ‚÷&é©9i¶#ñ;†”’q†LÓh({kÛù¦®g5ø}ÅT(Z1 š3ÕÓJ£k8)O¦0ÂWa :ÓÈ–ñe"˜7[J[$ËV¡ëaòB)>ÆN½kÇ%¸âc×»ÿvíhêúåF¤ -iBK(ØDgEñ¤ d3Òpybl­ØGh¾¾-š‹ ƒ­ÆŒÄMv ¹C×C XG2¥–:x{3Ä ÎéŽÊ²ÈÔ§£ Ait%ÀÛ‹»¾²ýyá'”~‚VÕáŠÏ--G9ˆ Žì-í|<Av˜Ÿå•±<[†£Þ>Ù~ŒÁ±ãÖ>ûÛ¸‘„„ $$(sÆßMh(–|(0I±„.´Îm¶2$J§ÐÔ>z¢òrðÛ±ë_h.6|™XLRL'úõv<÷­O×%‡í¶Ýº=+fÊÒžÆøŠý´žÓ<˰¨ýfË3%ËJæÑOxNžNˆ@3ð|¡|A*øs%^!»™üE¥ù¤!v à`èÊa¸¤'DÒ64@Uãñm×VîÉUg|蓱±…¹Ô¾,{`Rjƒ‹Ô¡ Fk¡dmÔp¥oíq*—·ö}ÜErh}6D‹„³4[Òèpìž½ƒ¸Clš÷xîηÄé5àLR&1%JИµ—ë:ú+|r]Ob¾æòuª‡s[zRô6“Á- ï–o“dôŠ„og»úÕKM€îð´À¨¤[‹D· Êì ‡8Áç~Œˆ[]D¯CtÂ×ÚB®ZÈEB1•-ã?Q.l¸  3ÑŽf—€ÂÙ{´]ÓØÊ™Ñúh€‚Mõø…`úHÏw‘Í»…Eëúfާ¢>[ èßK99`Q¼èâûœ$¥¯úÜ6]å.ÄË[­<õ¢±l¡f5U ØŒ­¢03YSÎ-ïûDS×±ykÞƒŽþ3‘à]ãjÓãm$3ñ¥6¹bÙdÀ>^Ï~0½îÛ2¹<]ð(å³£< ÙQFo3\y=ˆ=óE‘,ý ןý‹\@L¬^è¯>™>Þ`çƒ $j««Ö*º(€&=ÛæJ‚V¯* ¨ºöËH+ ð ÓÌevìºÚ}z#bIAJ(Ä{^(ˆ5cà$O”00×¶ 31†wÚ%cxÁÄø¹gm"cl„’ŠebA"ËȧþâÐËŸ#!s –‹dÑð…] ¯ïë57¦Š…˜Þûá½ZÈk5Œ÷ýD¯jðb«*ZÑЫRÅrÏéÒ 1Ù(=dyÕµp™Ë¤ £oƒÊ—B†.V%x(Œ¡²[L˜N"êÓ¾ãS°.ôë>Ö€ª1å@C÷ÛW˜åLª èßÞ©ßïÑ¢¥5Ë©d~}ƒ<›3®¯ÛëË7ë{%aŸ†3,’­Ð=Àƒ"ˆ¼²w*˜˜²¿¾»÷wòA_XNßxÅ•Š$9J|Ö+€uyºòŠ?ÜéR-®âÑ~»Ù+t2‰“P$N®Uq.iëm(_ôõÆ€%/ù'nC¥àdaEÂË¢„œlæ£iAÏ ?aöÍ´\—õú1¼›rï£sû裈ˆmµÏyækI”£aNÇ ÿÒñï¢"úmü2°k=ßr|‚ŒîiªÁ¢á`| j¶‡·]s•|!˜®4ΓðK!<ÖUý­¢ b™¡î3â2–‡r rEd[, Uh~p•~QXM°>àc %¿Üíþù—ÿÆr endstream endobj 48 0 obj <> stream xÚ­ÛnÛÈõ½_!øe) äò>dH¼66ɦ‰‚>Ô:–(›0E*2޶?ßs™!GÒØ1Š"9—3ç~›ÑâÛ"Z„ð/Zˆþ‡‹õnñvµøõ:^DaP†åbµ]DÅ"J‚2[¬6ÿô.ïå~¨ú¥Ÿ$‰½^úišz—Ýn'Û .¦Þûº­xûjSu{·ü×ꯋ4΃,Rˆ¤¤%?‰¢ É~ZELm7 ÆÌ«[Uõz¼^ÆÂ»—½\aÅkÛ¾Ûñh¸¯4X·Û7ÕPw­Ù„ ÷vr`Ìí >d%\ø bÄ"Ê- ˜†©·_úÛÕí2Î=Ä&Àï1a<"¾®ßðö-)¼ å¦]ÍVµyó8öTw„ºG†/uÛsÌ9a>ãqÛ5M‡t‰PRÒ©$-¼õØ«-” Oöz‘4‹+›qßÔk @¤Þõ²ˆ=†ÏQïƒl×0›d‘WoùÐp_+ÆÃ_áU­ïÐÜmÃrŠÈ“ÃPíöë!MO̲ÝWz¤-˜NŒã¸Vü5ưáþM”½N,'Ë4ˆ"í_•°½8 D¢·A4dHrøÿKm9\’ 4ç?ȇj[7.*i†®<“‰"°PÓà(öúJÍÀ«äE°æ"%räç¡ÕKPRϘÁÿŸ£Ù ‰'Èä…¥¹W&rÃ@©L*5îØ òEr

    ó‹¾ßqw¡‚‰^”‚èýe›ùšÕ´¬H­#¥6j™žjh2* [²WxgßHCƒ8Gð§á¦Fu{‚ŽœöL;Æ“¼Ô 0ÐLÁˆ˜š¶Dˆ†&I^XÈc­î5pÇ_´Ö æY‹óæJQó´Ùt­Y²Ž¶çl3Â,6¬fÚv™Qm6Y |:W^éRgÖXB÷ˆe­ÙlÖ©ÙL0¹ª\#»"Çad¦«ÝÉuß9Êv\¹Ð07ËÀ…Ç(ã¥Ý«ižÈñÝtD¦YxíÂ(‚´ Û±¥ä?KÄAjd€âï@ÊMÄ™”!Alkþ',ƒª Òq¤¯Ã8Ð9!Ê9AÁŠäélXSº©k² BoQÁÂ4ìb©DÖm1J!ò$¶¯]­r”B°ÓstÙµØùøãkHŒqêmýîß²ñe7îªö(ŒøÌ‡jþçñ˜Ò§nåúáQöÿò•ÿè¼J>sñ~3m?MBX…Í,Fh&‚õ #¨ :zP}ß—T¢µðÊØ9<ºqD0­Kt9s1ÝÄЈ„ÒTf£Ó\Ìü't*®wqfkò mŸ´Ã!ÜrKÍŒ[žb¾q|ð¿zïrKÙ(*9a #.@4 pô¬@y2 ÄF~žÈ/D>•ÈÉ’b~ŸºôYÂ-·yqd(œ£XøíÇV/ x8°¢<ÊÅq˜[, #ª>öÉx}}w¯‹X†Ø2oxCÕ r£³4ž¯±`d)Ü4¯iRh%ªzÉùÜwËИñ·ù½.6ãQ]%iäóÛ× ¡;©XÐL÷ù˜U)ß,ýŠ,wø5OÜ'âWvX y³kê5/¯qq¾*,¨¼Kc8è«uw×Ö¢r*ûæ)ä(¯ìûŽÜx ¶âû$Ý¿ Fç–#¸ÖíN桳²DöKóv厩8žSý+Žböó«/—. Ñl‘`xóéÊÚ`Ÿò…HÞ_ÿî$~Vð²„+Ǥ÷WÿxÿŸ,™ïïNlùÜ(|¾Z¹øBœ¼Ã×Ï]jóCÃSHŒî?£'|}ûÇW7i=ËË}ù„Ï7ˆîÒ¥èDþBɾ|ú¹Ëð]vNžGVs´"¶Þºm?A9Ÿ×qj?½\¸¨YO¹TˆªúæÌaAlÚ°‹çŸ„ÿ_òÓŽ/wv|"s´|³D'iµ4dÌý†äCþEÄ¥,«bÿ´œž¥.Øv³ƒT¨)LCs%€_4ÖcyR›ß @Ê2ˆ»-ê^ßЭ >>~+~Ï€ûº¾ö…º‹Ð«J_ÛÖ¨‡”~wÀ+Û-¿É|¯`nžxJ8¥T;®ü›nägÉ8ñ¾ÝPñ‹dä}é&5–G=äjc¤»vt')Õ‚/(F®øõ•iÅ›°W©µÔ­:A§Z)±ý˜“Q±" Û•J+=ÎÑ7í'r­N­‘èì×$ÐËÔÔÂO—ÍJœµ/Þ:}q ]kqÈ?Dþu¦ã¹·\ÓœsSpqs­ôÅ‹îÙ|âþéͱ¾òñ>íãó”?ýôqµZüý/ÿBïtØ endstream endobj 51 0 obj <> stream xÚ•XKoÛ8¾ï¯r‰ D¬HQ¯$h÷q(6‹=Ä ”¶h[[Yr%9=ô·ï ‡´åXq\4¨øÎ ?ÎÓÞw{!üã^*à/ôækïã½÷áNxjŒ‹F3¤š†\¶%µ M'Wð<ñ¿Ž¢•síÐz6$Ès–ˆá%n‚vLë”éÑáK´(aðDË‚ˆsÑ|WšO€ˆ/¸³ÄV­VEPÖe,ÊJè‘§,J,ý±WNð׌,ùíŸ7D÷`Æ}ˆ”³8ñcD|Œö;@!z…²îtÛ“7ZD`S?÷oëÌ£œÅÒŠÙ{’/Ûk}¨\ꀹdîNàu)|‹¸Ù¹7ˆÄ_4Ue|íÉ…wù€WFênº¬G] ÂSòv­æ1“®/•‘ûº›«Æ îô÷­®çÚƒ}·v]‘ãDZ¯ÊJÍÜù§•®íAËf^.^œÎA.˜H‡ö ÙHb/ëzÌÂ!0ÓéM0öÞ)s Îá €wß6qß´ðyŒw`ðÿãþkÝ+zÛŸd¬OóUÖt_æx•jÕsÈy²¦ÓÓÂfÊpýÖUª[ÉsÄnFÙB-òpåM¿¼¢ÛY,‹fK¶ãïÛ¦WΗ¤¿Ví·Q“mÿ@ÇË1%÷×¾ü•:°Þ¡JšÔil·Ôt`i›=î±J˜?£‚_yÝ\)´A'¤Ð{ìÓYÊdòžO'Ù+Ÿ!èÓ‰õi˜:KJ%¸ŸáE1—»eð™Â{4 ú[JÀ9g\’7'F‡¤ŽPráö(\\¼Ð+Wï8Jeui™Â¹®ªéd,÷[ñìLÇØ¨¹>cqšc¡+ÝŸÉjqšÕ¢i×tñ…ÖÅy,ëÓ,kýTaíy¯öȫڶTKë2­î·m}ãþ4ãUÓ–ÿÙ°®lTïÕì<Þ§y?šDÔöåü§9¥A4©ëQì’ê ¨u¹\™Û3¬*qé0êÔ«¦³À£$8ÂVÓŽñ¶4ß3lŒ[Ì ­z«óA4IB&'µ¦k»Z¸©­ˆcTÀd°ßûU«­!å²ì»sýs4›BÀ‘®øôiD?™ àª’ç¯QÅ¥W¨â’E‡T%Ï ªR„{†+¨ß (lÖ+îP`{ V(ÙÅI­K2ÀÍ ¸¹Dc 5Ód4d  Æ²GXþmJ2É¡í ×Ñ-ÖctnQ…‹# ø’sL 8…¬Ò6WxÍ|— YK_—°ñˆÉŽ=‡¢¨WÚ5nö趃 ERÉnÂa)ë|³¬ˆbÔ?F ¦ØªMeÈFøÕFrAt%æá “®ƒîÎm7´9s'VÌ®ó1³Z­µ•ð¹*ïíKü;å¤ë*ÌÿÅË$XKˆX8bI‰%qyÔœ?ÌšHTÀR[ZÐ Zk¸ñ´©È‘@?o µÒ£Çøx èHû§²Bã2WÓàjO,pV:ã#GÇÁœÁY‹‚Yƒ@“I ÿ×ój[½ÁÎXû„Æ¿óê‹w›8Ò³x›_1q^}Wƹ‡ÕPV ")?ø™`÷“ø©{I8`[²„Z2Xâþ —&Â",24jsˆèf?Û5¾®ÙSˆ¿ì„‡9çÕÅö÷6¸^uP´ä\Çcà¥é¾<[Љ* Ívð`9q=þSUÎ’|øãÒvsÏØ­ì~¬2súöÞûòËÿ¡ Ý— endstream endobj 54 0 obj <> stream xÚXÛnä¸}ÏW4& ¬ LkDŠºM—ì ò²‰ß2––Ønft顤±ý÷©b‘ºtÓëÅÂ(’ÕÅbÕá©"ßìÀ;þ“CÝ~º?|øÌ,‰«¤:ÜŸ¬<°4®²Ã}óŸèÓY^&eîŽišFìãÝQ}ºNö ŠèŸºW4ýs£'Ý?Þý÷þÁY ê«„1;öá3KQuR1\çèdŽ¢ŠKN‚qó»c–sX£GuC/[Ð^dÑß{=ÑL“™ëitj·Ö'‡#+â<µúþ¥dÓZûDÂ#Ý]ZÕ©þŽüÖŽIlÒè$kÝ‚~˜y¡‰Qwº•†¦uOíxÑ­@i ±é¬è£ÞZLÝtàýä¤ä45Òôp²æ£ÁiÌÈÝVYšæÑ'lŠèbÔÅÀB`W­Æq04ütÖ5Úz&aÙ¶vŸFìgÑW쨚|Ð`Vÿ8:Q [}¿Ë²H-Z·ä¨¦iÄí¡Ü,^FNäBsL§œ"é¦ßì6;·ÁökÛIÓ#’²èþ¬ŒCô§a6­‹4£Ç^£ª'ýÝnÍ.É£yTMì0^a Šaà} À$Œ8tÞ;Ã÷:83á$Â*8|¥N¢öÃDºô71€žu-£ÕµÐéd£œ°­oacqvRÊ1úÉ`4ê=ö×E‹b+e:M¸dKH­ì£A…H«&Xé@ sòriuí1 3ó¸üΟ.ˆe^•Öv|RÏ cÈíM•6ö·(yÕ7£ƒÇàZ: °g‚ì@~ÿ õîWt,¤‘5ìy¼B–Qßf€Q³]HDzà:=½ ¨nhÔD”ªøk@GÊcîeðŒ¡M‰Û7[â»W›åqÅÞjá©xwŒ@-¯`ÿ¤~&ØáB-l£eGžÎ V7ÔÁ¸ i ,NÅ6–Žn¦Q¯mû€Õ¢Œ+¿SÕÉ:DåiŠyd˜·J˜X·þ]4°<ÎWŸ[m®e‘@¼ô¼_l%ÎKÜ&l ýs_Ûó@#R¶õÀ“žÎxš˜ƒ=Õ¯a”Þx ^‚ßWõÒÉK]Y y™¤$¥5ea<¹YŽp¡a L$ûZ¹q›¦`Ø.F­\DÒn ¤üê:\~·#®ÖHÓŒ.A§?˜xg2~±SWOís@U¥Bæ]zGD|Cßb²E¤OÔ®‰ßŽŽn“e§|»I0Þ8BE‚™]‚-ø ÇW! ¸¸Ü­²#ËyœW[^A’þƒ¼’x ¡Ž ±°¸ÌwÄ« ðyµ>¯r|”Aü`«ûº7íóÉqtA­¿$LÔ$º”ØA¸9²Èà<ïÒÂaʸ­,àGæLA­ "¡Šêú"Þ‡©µ¾F uxIbx±a¬0ÑÑöPlù±·ýÇñ6üÑ>r(AÝ2¶Vaå7ºã°ŽAå,òÒ“Ÿ6úñlKLšuã&Çw’¿£YÅ™gëP(³¸HW"ÀǬ^ k6ø–‰€ÏÓkÜ?XwHT˜È9ðqšÛ–¾zÙ¹1›~¶Bk5=ª(—yHËÁ'[ÅMܺùR¦\í€+Jð±flj±Y‡ÆÓåñ 'Bx3 ʨ~S½X Y‰xœûPºe1ó´ •œ–‚ÝmÜX®@Ùï^ L«pòª˜ï™nîubi‘¬7µ÷¾7ž)™)¬*®l[,¾Bd‹V6cW»žÎÞP¨Îo p.:Â×4øey gƒÁþ•dMG^EûšÙ ©ÃÍWúèr¨,àÆöh$rlÁ|½ŒŸtî ¶ÉN(Þê#Í MÁ‚ã*rO.â¤xÅ?G7{}žÊb‘¯Aç¹;Èn…/¸—aÆÔ²§Q*y&8$©ÁZÏö¶ŒÃtµlgSõO' gêanúÑšn ã”ÙtC±öm‹Ò@žlØ?«vìstÞ’…ÈÝ0èfsSÛð!©¹‰;º"5p}¾+¹¯@“}[j­4÷ôì{,…äP ÚÚHº^ÞL{ÛÉ9‘nö„Ãí‰$¦³œHèÛ<@¶VäÛGˆÕlŒ{Þ  òà/ÒF}×ÃìîCO6¾¦YjÛþ$ÇóÇPB‚:Ë•í}ÚzpkÌŸiò´?]æÅ2o¢š†íjöžWHîÜüîË—OÇçoï>’n誇/_°9Aóîö?ÀÑ]…ŽLˆÝsÀ:õu–v/ k=é8*ÕÓˆví‚­§9\l%¾9½÷6éMþùB†ªÌ4qöÖun¹88û‚ôœ–¯GvïÜí½߸ºº§½qÉ9Ž­¼/OO|w'äᬌÓôÍÝðW.§è#ã_žU=OþŸüUŸòt;ÂSàðlÿ6ä²Á(ŠkEE©üŠÝ>êAW’ ’~k%¨ZiÕ58'2ÙÓ¼4s·[«¤oHÄ@¢Iªö¹;Ióí+“€Sr2CG_Ä (A¦«,_X f¶H¿נ’Á×Bôê’«rëòfúUÃ(‹ÁÔTÐ=”é¦]õʵ8ûv…o–’Ä>Œ–ê÷ïÎe DžÿêœÒ«ó¿­®œ?ëV½þÔL6üÍ>dò’ÞSx•Øøbë\K{ É@rgÍå>üº‡Òr-‘– ^ùL úuÛÎPÙàÀz)R0ñWÕÕS0ÎËqÔ½% ÜŠK©ydp6ŠrÑÝÓ·eȳ|¦“øóýá—?ý†gº endstream endobj 57 0 obj <> stream xÚ­TmoÚ0þ¾_a­• RmòFH*í¤eê´vëš}˜`LbˆÕĦN(åß/‰“ÀÀ¼t«@â¸ó=w÷Ü x:ÐòzFþÕ@€:Cèr5øS ;@7‘Û~8jyžgD´¡iš-ýª -Ëjyü³ùÄ$ endstream endobj 60 0 obj <> stream xÚV[›8~ï¯@t¤M¤šB.í¤R2ÑT«ª•¶RÞÊ>8p¼6±M2QÕÿ¾Æ FU¢`cûœïûÎÅñŽ^ä…êyêzIé=ì½÷_^›pãí3/º÷¢e°Y{ûôçl—ãJŸ£år9‹>ÍÑjµšíXYbš6/W³o„‚Y~L‰$ôiþïþ«·ZD2j#ÑR¿{ÿeÙsƒ–›E°Øxhµ îzß[?Ž¿£8Þ¡Ÿ[ÿ“>…÷ͪ±Sq8V ”!¿èÈnA t´Úy³CáEŽÛX|–†7:*²ëÅjv¬™„*€K½;ìí»š’ìæõ[svK›çzÆŠ y)ÀLD¢OÁ\ù]‡³½‚b”ØP;‘Ìî¶§dn)d¸.dà¼vÄ÷Û‹:aeU€„)dßq™s”ciF˜[ £' ¨]È7‘CQ˜!¡*1p" £·Hî”(ÚÑùí²E*cä*,GöûM0_*ß²óÿÙîÿþ|÷«yüŽchVõV“¬d~ßȇ¾S•EUKÔ‰,/•}ƒÍÄ݌όÛB“\l‚˜x«(ZkÔžL &\üX}p© ÝˆI£íñ’ˆÿ«…‹Z¦+ôJÆö0¥hû­¦j¬¿;tðÿˆ¥UꀓgQ4aÖÓx¦é>0¶ "ÁÕ+„‰E-àXM@ d,uÞÆóiBŠCÇHM&]ýÐÂ\Ë–Ôœ·IïrÞµ^2Lx?ö\ÃA«Ù¤£? b›¦×bšÖpj§`‹µP÷Å”“Ä.»VRÓ«é$RîrH9>#K5F'Á>¶åzœà6‰Q¯±Œº7­ùÔÓJî=ß5¿·Ú…Ëço[oÔ[‹ë‚>AZ残eŽ\ ˆO˜šãgÒøhÌô»ó1ÑtSFÿ²êÉIeUËqÓFúþG—Òe^îjšNÝM;ŽŒÐª–¨‰ÛM€ÂEÁÎŽ:CVµ½ŽÌÝH¦¸.ÉUçV}h*yÔ-C{—KwÎYUe–‘—æ®Ló´¶úL³Éë8%¢*ðeœÜ™Èa…yÊÝ˃K}ëZµqÂ!‘Åe’±ÄݱîF°þÄÈpvJô M3fµüÓкÜn`Àà†/Y{¶Ð¢uhCÁD¯Xì uÏ‹îßÀÔ튻.ùÎ~èªJ“_WŸ[9c*É&ÀAw%Ë:Zå«©á`#•Gü‚ˆ„RtL›“{ïÇ›ÿ1Ÿ endstream endobj 63 0 obj <> stream xÚ­WmoÛ6þ¾_!d&+‘´dõ˰ Öb¶ÀÀ>ÌÃÆX”-D–\‰Ž›¿;i[¶³xÁРæËñøð¹W_‚$ˆá_dþâ`¾ >Lƒw·âýìQ|Ùèf®{ëÞNøjÔ ¡7m+³lÑ8QûÂ5Ìx>£¯Á*ßß…"þ.w sƒMƒBТó>¸g¡–B—jSfQ¥r ÈR¥Ÿ,‡p¢iP¶uÝ"Ž­ÅÁ'©ãw„÷×ÎFÉ ´DβÔEÅš˜«,0sƤà"œ;áN—ºë„veÎ7]§ z "”r×ôº†Iž…žûcx¹dán\©îñ<(‘ A¡P$㔲["L ü(úñ˜Ðþk2a¢¥ÞzØÓ]³ Þ8¢ßzšC’4cbìÐôÚD/€ÇLzÐÎÅÁ3. R4]fôWCH\|¼}kñèfb‡ÿÀtvÓsñ$ÄvÀ„Ee½°rÎm™ëtA3d ½Q¹Ýýc‡æáã}Níô¹;c í@BÌ«˜Òã<±©'KÆ*XšûäÃJ?»cÎí(!ZMd2¼kG"Ÿ|Šš˜ÇlœX}®i@0j˨ÞˆYx©Ùèœ 2Wí¼¢Ósdm`ãܨÎe‡¶<Ú. v®¹‹'Œˆ€t} Yÿ_uS¼ø|ÄlÙv[ÕÑ|©º=ÂòQ¦0ÐH Êñ‡‚pƒšCí¿׃š?žöðF` q=¾Õ€¬mÛÓÝÉJY™'+qöåÞŠÜÛ—;ûì46»à!Ë7àÁJ(Eøûh‚fã v]¹â˜¥|âÖGJkmŒ­–šsU´¨•éÿ›Ý†½Énivh·” •H'ކ4ßÅ,¬Ù×î cNÛ´ëN?Uí¦'ykâo,sä{þÒÌñbCþN".Å!—"ܵ´ñGŤ֪‹ êÛá½¾¾ˆ½<‹õØù ¼&[88€:Ñ)ªF0OöÒž²ÔÖ}ØÁ4%^Ä1¼Œ *5'¯žrWš#<¦ôØé€¼}*¶¨/áË>e3ȳqv¯ËN÷Ë£û_H÷ö[åó³)uw×þ¨¯Äô+OúÃó¥“ð '½pª¦Zoje¨c…mÛvà৪7m÷üZA…¾W¯‡|ý¢·ûiërî½6›®¹ˆÊ­J8ý"1 §FÐ_@Z¨ußÓÜ~·KÝé£S¾µÃq…=~óðS饪þX¹_iÚ&Ò«µ¡F2!š'Ÿ„•9 ÙÝ'ˆߣÁd‡ª(lŽ„¡Í8,,¿vRÄöK –Ê æd;=WuMøõqÆ(<ål’¸î îýËéÁ}3Éäx׋Á—® Z)ÒbûE!2ƦÙÛÕ{©"']µÖ?‹j'R»lµ¢óüëAxœz>l{QØ5n»í 6ªÞu]æ²Nŧíhp=¦Çõ›‚¿}uùÞW×®Ý,–ÿþÚÞ‡|© 5î³ñ TÌ&þ1~œ¿}óVuy endstream endobj 66 0 obj <> stream xÚíXÛnã6}ïWèmi ÒJ%[Eч vÍC±úÐ-Ó‘›ruÙÔß©‹í¦Þd6í"F$ ‡Ã™s/’÷»y!üEÞœÃ/ôò÷né½ýÀ½( ²0ó–/ZxQd‰·\ÿÊ® ¹oU=óã8fÑ·3_Á®«ÝNê5û©ÔŠšß¯Ë¶Ô÷³ß–?z‚G„ M(1¶·âÑ0¾uñE,¸ñÓêÖ/ʦ­ê…¼e×¾¾Ùîã,“yz>$Q¢7ÕŒÏÙ§_0“gw›ª~œñ”Ézý†LmQWÝ}A±ÛBQ“·ðpE·Õæ´À¢Æ]b“)Ýå„Ep®B›ã<Èb“ãJÝ—ZC4¿Ú×yã÷Ì:ÛŠÊè“» #Q7­«GÛ2K}T„Ë`ÁÙEé+½>›ø÷_*qEšŠYµ9j)õ¾kO²¾¢8e ‚«£Û^•yW×J£Úí:¬f>fÑÓŠÍs2WÇ£0¥Ôꓪå7JÖyqªØú"@>bo£/è)B¶’æéáÿƒfÉÚ´²n)SÁ™DDd냫Ò'[8ú4ÁyGÈÛ »ëöo\7w1#DØ7ù‡ãt‡eã&A®šF:ÁÒ³%t¶r³^R; óZí,rKL4=)g4 ó—À7Ÿ<çŒÖ ‡9F˜sA˜s7ox|„9ø[ÌÑ×`>ÌÁånm ú æGÆ›à'UþsØëJû.ÄðŸž7þþ¿5 Òñ$È‘%#"Ìc×ÐèaF¸™ þÐÞŒK‡g!õ¶½­m¬„5Ý~¿-ÕšžVØËæqV2]£êg‘úô»¹p/~­ŒgÜðŠ×¯<‹¯Æƒ,gyåY4áý ¯£ŽŽW4 ¼âÓ ç碼ŒW[’ãÑÒêxülE³ÑiŠ =Â"Ia‘ŒSh5¥Oš]ñhÄ]m9†-d-sØ‚ n·èÖpjÎ €²ñ>†æ¥MsvÈÜQfËTMÐbÕ”95e‰sloÆ­Jò‡…5…ëÒµZjSš²ñdŠî°GgŽ]в“íØQ¶OÌV¬uÎÜÙ“9UWI—a"&©É2K¢Ä-ùàá®¶ÃùU:W}!Ø;u­6²Ûš³oŠäBÀ“Lóáà÷›Lg "ªî£ð‘@aÙx‘Bã…Ý;R³w,ìZÖa!X¸ån@‘]y‡æh Œ† ¸ÒPƒLÑÏR×⸃LiØ3L•ék•i·Ÿ·œ¦¯i9ê4J‰a¸’ôàfªS ×êšó±ó‰NE¼°:Òé "õ:…¶t‡h ™ö~Òd¼±&oÞsA)§šœŸÓdúRMÎ'šä¤Icw:F ¬ú 0r'2+ $„OHTiîéý4;#1Øb)Ûºi{uU¡n ¦hŒ<öKª>ƒc„©mFž|Ý'$1º›EGA“4ñeAM¾PN <-ئ®v¦ßû¥÷ó7dvÜ endstream endobj 69 0 obj <> stream xÚ•XmoܸþÞ_± T,)Qoýæ¤àЦ‡».Ðõ¡•w¹–`­´µqößw†3ÔûùØÀ’r8ïóP»Ï;¹ð'wiÿbw8ïÞïw?| wR¹ÈwûÓNf;y¼Ûÿã}(‹K¯»;?Š"OþõÎWJyÚó¹hޏ¨¼T&òǪ¯šç»ßöß©PÀNX&2±k~”DÊw¾Êƒ,´”¾Ä³Yè]:ý¥j¯g‘w.Ò£Ûy¯waêµÝÑ¥jèw ¿ÁåéÎ3O?Ó`Uõ%Q€i‚L­Œbçƒò’”wÁŸªÄ{ÅA×F?}õh\‰¼¢{¾žuƒrõ´R5Fw½¡(²ýᣜ›8 â­ÓðŽé†$ “QLdåt§[N]{¯°ÝXZìµ§e0‹õ‚Ìò Φz²¡@×8̽Ÿ›š3qv…ÁLË-}b„ùúÀHH¦WèžDâ­—k¯÷8Íç2»“N„žþÚwÅŽðFfTX±DÑT/b Öú‹MD‚Íœ Þ9¥ÄdC¤Ñ*Ùÿ ÝRV¦o»Mô×Kјªm(KÊâH뇺¡©¹ÐüP= ©4ø`-©Ÿ‹ Kw~(•Ù oEóâ×…é}01zô>ù ÛŽîüäÿ÷ñnKò4H¦fúÉF,&ƒò)n€•¾å_J75K·xšnjLÚ)Ë!Ólb˜NØÅó0%âhÙlE2u7›±Ê¼S.­ Ÿ/é»ê€ éLŒ·4qŽ( \„”Î(™xûM“ m‡ª³eÊ¢C…ô®Æ6’ÅГx±ä}\óD¸ª<"¥¾¤ê4;n·©0 \g}÷ç­Ö*O‘˜¤)Š2mDH+X±Ùœ £,ˆâ©Ò6ãÒuk’âC‘KÛ›¨™„ð)a½@„ ôg†‰¨m{ïrnM©BXÙ…ž !AŒ¶•1O0i ºÊùRk^~ÂuÛrw npÂôýmCê0 r94_:Ñ-}Y™¥>÷m¦,ie_…QîuƒG¯%Apbðã°pƒ¦¥ß™‘ ñjÇs4ÀÚ‰ZÇÐfOµ¼­†=¢è FäÞ¸3KN‹#ö hoDô+hT¾Ow€4¡chT=í´I9å¢ÝÇñ¯€«4?ÀŠ¿a'åSt í[‡¼¤ÛÓVæfA–Ì@Á÷E€Ôá6~G]CÅ÷`tû~/¶—(ïoö(¢¹’xæH+z"Í}„•?¢8C"ÅŽNׯõ˜¹Õ'[:Ú«µîoÝ9¾ØçMÖ¥wé—¾§»69<+ÓäM‹Cæ >™Ý{OÁP˜­”¨@8ŒÖÞâ Ýe$Âà¶©ùP™{úZs Q<Ï›/Ü}r°}Œ@(-´E³¡Tˆ)'Á ñåúž¿%¿^ŸÚkÿ} '‹Dk%Ó@ùX—%ƒœl¾v¦íúXð@ks0­°¬œ54*fÕÒïKU×#óUp, MèÆôÚ½¶(wå õŠ¥ó¦M¹™ Œä` ú–e¿Ë¦JraS¡X&Ò aì0dÓãYó­†àà’‘ÝAcÌ@üÅ4žm¢Ï0°Ÿ˜²²¨«ˆ,¼HüZV G€…bS$¿ÕªYâÒ<8f›YXÛrD2+~€PY⽿¹ÕSq­{Ç–œ5çòдýô}Í•}ÝrÚÑ”^s fߌʩÏ×ó+÷Dæ’ûyþÒþàù¦0x8 ñ5àÚ ì±£¥q—E XˆÏâNØfõI“‘·7œ±^ÃmOuˆî·´…ç•/`fƒz0vZ™ÚèÏWÝ´q]vö2žWÌ|ü¼…ÆÚè}i 3ÞÁ’ `ä Ò¦¤RÁ¬èõÅÓÂ;ŸüýÃûïûð-ÃË3ºtæŽo £ëÓB”‚U{b8òÀsÉ¿ïx=‚ïøfŸÇLpí7Éï”Æ\ZCåËŒÁüGm!¡ÖÏ.5 –!M|i÷ÈÉf—÷óG-Lº¡- îs`,×Å… âD9”ÈUÌò—*æªP–ÒÀ˜¤IXØe1¬Œº®ñq/C?Y>2áÏô°^£Z»…Yýâ,ÁË\ðg°·Ë1‚çž ¹’ä+Á.¥kv‹ô‘C ßZ¤×SÎ[ØaIkäžó§á¼´—ÛtäýsöÔÇ]Óö½õÅ®X⛆ ±C5³?îw¿üéÿ®pÜ endstream endobj 72 0 obj <> stream xÚÍXKoÜ6¾÷Wè¨,E"©Ç¶§Æq€´é¡…‹ ¨{ %î®`­´•´^'¿¾3Ro'vNE˜K‡ß|3œÊù× þ…NÂààdGçí­óæ=sÂÀß[çvç„©r9·ùßîõAž:Õl<ιþ¸ñ„îu}<Ê*ÇIá~,*EË7yÑÕ~óÏí/Ž`¡ê­$LôÜ›÷|tŒgD<±õS¦åºFVí©n•w©›¼%­wîo^w·1Æ@£Ä°†„õ]#÷°'nw@HQä^6,qAþâîýÆc©«vuc–O0ëEµa±Û‘ÐI¶­-µÄƒ¹#Bû¯p2u5þzD&H¡>U %tˆèA¨²Ó¶cSF¸ÃÀ•HEÒ¬*KÜÀc÷ÃŽ¦ ' ŠªUMWÔý\ ª £Jv³½Jûõ\k FÓBdÄî'WÑ­j‡- SJ2<Ù!°¶Ð„µR{š¹7·Þƒu<Ù_ ãù­Ÿ$úŒó)“&j† 9¿(hþ<‘Uƒ*Ð'Ötdç¦Q=}b z놖vuYÖÚ p4œ“Ao:h¹ŸŠî@Ò’Ö+µ—]ñˆñ¡H¡löç£ÅcˆWÕxK6 HdÓ²tjÔcQŸ["ÏB¸"Nïφü¼¦õª6GþQ‡ÉöÁì¶n¾Á|ªñäõ¥Zá¾|÷ë>",ýŒ›{‡K¿¾› Àý bA?Êé‡p$úQZÒŸž~m2îèéO4ý .d©¯ïÔ «Ôó)õ|N=·Ô‹úÔ;óEÔ'&NE'ËâËœüìEä_÷Û‘ nYçÓ g–u¾Æ:›²ô¬sbÏ‚w,Xg#cþtS¤×ª¹4E§¼c+Ëö‹¨¾Ý¤Ü­÷û·Åb<¤’¦'ÞûržqË$®HÌŒ1sÕÓ©,²¢£_6ýCL£°æømŠÌìžÒÍãÔm/E—áÄr÷’pÂw”!,N¼Fcœ"d½ÇSÿ8QMUWÞ V½4ÆŠ‹Ðˆ§X5À·ÀLµÝMBö½¥²;³¡s¬p„\e]K»êªü¼á6öEb:u”Y»âqÎ|nDôá þÓŠ2±|,V…‘²¹&‚›“UÊÂÕ]Æ8ˆPlˆ}™É m§½Ó`d*\Ÿ:¹IÌRÈdYš\¯1àbaÀ5JæXŸŸ¹1ŒB#Úv²éL/LÜÅÇîÒ&„`B„&ÄHjø»¢D¬]œî‰‚ˆ‰±nh›d#3èÔZ”±½_}FçGI´n! ¶~`-lU¹ó η>‹{.N¥Ì [ô@=ut–éðc a2rͼÿŒw ëæ°Âtšçö ;JšV4KGè©ÚÌÐ’p›bÐZÁÓ!Obìä{BPrLˆÑ°$drÅîeöp‘MîåªT3иÂaêÃbFÍ4íŽdÒ÷¤7ç+m3–ʈ?’„Ú(·aCçê°¡ ùö³©j'ÏeweQ¦WeN1ü=ëïÉ3ÀŽ-!ÇgQQ=T&0PõǾoCZþµ(KjþÁõ?kõ0øk³…ŠX=ØÒ‚gØ7×(ðÊþYuç^{/ª3xòŒiŠ4v×ÔÇç™íêYï­,/ú=ð]]y/+=Ñðó}}î^iÜ=%­Ý£IÛùtõÌtQû¢ªÈßi •ÿsU¬´˜öú+ |5Hˆ´I3ž¿&8³aÀØòš²¢€Ù§ èšÂ@»žñaeêzNúe&è! rÅŽþšxéJUýFýù£½2G¬XPJ±8 تOEãT¼O›”™œê’l e¼!©*Œ"»•G3’íZ%S ¢è$¤Ý²RÇS?±­Ûª96Tüù¼6u÷»›¯qxÛï,Éä›OlÝEßLLÃAJÇÔ™=É„º01ÔÁ ?ÈPÖ©ƒ†wk{ÐÞÖgèK ìE_£O°Ôß&‹LŠê¼Fgÿ!‘^^C°‰ ubN,O©»¢o1ç–Ò&n?Ð †º¡ÀaJ_Ý`J.ÏH&TF' CÒžFƆZ¹¶ ™¦•Ã3+ ëÄÒ`âøæÖùý‡ÿ·b¯D endstream endobj 75 0 obj <> stream xÚµXYoÛF~ï¯Ð#„ ï£oŽÛ=R ©^Šºkje-,‘*Øê¯ï\ËCbõ‚ hÙÙ™oÎåêU°òá/Xe!üû«ò¸z·Y½}®ß+übµÙ­‚|D^‘¬6Ûßœû½:uºY»Q9Á×k7Žcç¾>UµÅÅØùÑTš·¿ÝšÎTOëß7߯â0ð€OL‚œÖÞ¾&׸BâÆ…—‡D×WæÕÝ™ƒ®ÔQ»MÿX÷³~pÖÂc*j’yéÊi–ös8À"wº= UÎË:ÌœºÙòòãÚ sGï IÛ'X€}S­ÃÔéÞ€~Aìô-ªÁÇ÷¦Ó|¶=©R˜*{|¸¦=¨vÏt%²Ú«F• \‘9ªÉQ *ôDÂ( ë¾ÚªÆèÖcÄ7t ý ê-ƒÒéWÇ´¼Û*äõi: ¿ºâ-–h‘ƒÛ€‚Þ’QQ´LDÂmõAwÚÝ×ù³®:up- ·[åâÁGÄFÄ_Ôc+t BÀÛs"‘óîÌ„[½Sý-ÇZšv I>…§Õ”P½IkÆH?Fïïújbá¶FŠS]l•}Óè -&fäÅä¬`¿¨fë¾H2øˆCŸŒÃp’X ÕZvu#Ûó°’³5ï <Øt^Œî™>g¤å[²1}1‰²W.æ¿’½}»Vì{Y$…dÑ50YìʼnÐÎÂèóybÁˆñmF ²ÐËò+3ÀÿÖŠQd+KÌÊCáìêá&÷åûdÇœí(™¤à Šm0‘Œ&vŒÓT* ¬¿  ÷\”!&!;Z¶ÿÆŽ3Œ®‘Isú“3þÙ0H3ÏO¦f[’+š°æÊ=Z‹I±”b17ûMisOV¤çÕKéÜǺSTÀ3ë—0ú´EH‡!ÃÌ6b¹ïTúE8Ô'0j @ƒ¥gBÉæt,‡3ÙÖöN²(ŒÌn*œS7×¾xÕ×ा—fâcdðkÂÔKb!‘Kæ<à¾hʃ°½æ'^ îÌûA„§ý" C…>4ÜÐ ‡DI-³{  ”†Î/h¯ÀÑ¥ÙÙU²Äù©?êÆ”<¹kž`Z­#HàKºúäIÆy2«øÈÐ^[±üɱ¼õÿàúKd^`›ü7K, /JÁg8äÆó¼%V‘?R~pÝ/ðZôk7#Œ…‰£ÜmÁIÂÂV„°H b(Ò/ºR lR1ÃÚF«í™éTYöGtÿþ : ?Dç¡í¶SM'Œx…‚‚NZÆ“Xž©?sïQÿ™¿úøbýé*ÛKóO¥Ÿ@¨Ox…ÍÓ —ÎH–{q8Í ðBû¤›ž—tS–Ü0ÈÈø ñ«ªÀmxB¥Na_vf*Â6ZNvöœüÎT€&#q¾Ûñ–XFC6À‰]+©íñÆG)Á!%¢Y•Km"p#¸åH}ŽÈ_Z45ÐS-¼rμùbº=ÿÀ[8Š‘ gï ÂóͪgŠò¤Ì:k~ #lMa„)jMN°û”º¬ ;Óe4úÇ´æu!StZWR|‡¦‰ÛÐn^|øòHè¼5öÝBZÏÊÑ3KOÞÞ—M‘t¯³–(å–èGÝuC+ô2ê?BÂlƒ]Ð[&ß‘¥÷k¨Óä Y ='NúÏwI¹m OãW«gs÷î¦ wG`wúxÂBs7‚iøµ­ˆ”#¯Èäa8·¿Ülà€BG³·;r½lþÁ3$‡ Ñc¶º¸åÊîS™ôÅÛI 2K…Ý1¢ó——ß$Å#æn€”ü!wøX"r°µ¿Ý¬~þê/Áôâæ endstream endobj 78 0 obj <> stream xÚ•XK“ÛÆ¾ûWðfÐ%À`ðJ)icWÉ–œÄÚTQ³Ä„è°ÒþûtO÷àAb%ªv«8èyõóëîÙü¹›þÄ&‹à?ÜìN›7÷›Ž6" аØÜï7"߈8(’Í}ù_ïî¨Î½6[?ŽcOüeëK)½»ötRM‰D齫MÓ?•U_5‡íÿîÙÈHp\h…¥ýøs<»Æç%¾,‚<²ëÎm×Uµöwíé\ë¾j›ŽŽþè½÷ÿöqËÇ̹M² ÝøÀ° †ßU]{òÐëšç­åŸM¤å@h÷›zý™Ïy°Ûõ¾5Ëóªfe^lý$—ÞŽºÁiá•Uw®Î=£6ü8+ð>ß2Îyu,¼‚E©ð~ת¬I›IâuºGÞ’”y\˜zÃi ·#S™g –{X¹këádEâÐé’ÈÀ: f¬!Az}»¸"õž¶°SÕƒ¾¶ÜB†I“>þìªÊþ¸b*gLØ'@f)2ºX†áâ⢰!yœ×Vø§Ê´Í ǹ×ÓJÚh*…ƽfVqÇ|éÝ?ÞýûýoVx“á䮯ì<ØMq6—µå8 mÁ ÛmÍq`¥~Eôªq UO³­)µ Ö€T#í%UÓiÓ¯‡À7…À[{îBÖ4¸8}~Y˜Ôy<–„¥Ç“DN¶Äû„–i‡šáhì M¤‰Â瑦ï mTÞyä›+fLpIø2L¬¸›Aâö¬ª^äY“îézð¬ÁªÚoÒù‡êTÕ ü#JCŒªëÛæâ”¹¯XqÄÑpŒ‘(s =ž+<£!¾vºã[ÐpH&ýP”6¤‘ÊJ§waÉ;*P;RôÓRÕ¼ö¤úšBØ/@óù\Ô½iO¼ì:8¨-èâÈÆ­H.1I3kf¦E€GË´u»HÖ»×àgºŽ?QQ`z WLv­OŸWÏèz}î0“ À´ÃላTHV \Š#Å\IJ´àȵ˜{µb5ÂWÈZMÝ'"„½s0Mp¯9ÐdèØ c€@TR(ãi†žM]p‰i1;~VýšÁ2g|ôº¬þ¡w|.zÕâJHOc²_°¾j2œfƒ=ÀÍ~×?×z=¬¢ŒBÜÀ„ÙJ£pI (­©U£júbÜ‚( RŒîzÀ®Ý,Þë†2‡áDyÄn¯bÎD”È@º”Ѭ!KĹó¿vB»ní´DO¿p¤þ<ˆå¢.°É½íª±@˜Ãmœ+Œs¬B*.7¸bq^‹#*ff‘¬»¿’M4ú úê ÏãšfÔ á{Žëê„©¢Ý\XàÝíµýç Á .¼ „ÇOH³üË(œ…^äÒ< P0[¼Þ­kF¶Z£zýØ9APvòáÌÈìôÑ»¶ýZEsÿúÍšÍ3„Á—15X\¶é¾£<7X–¨4£í2§G—z¯†º_ÍF™ ²üÅläƒ?‘õoOKoK¶iµ³á’Çë HŠ *nDTàS¦3M@à‘&òä"€$W¬o¹pÖÇ]ìÂrtaÉ.|™GlBQY²^ƒvlÅESµFyÈ›…ͧºð¨¬ò£e=#½FRæÑgdc ®¾ˆ1œ˜ÅتDQD¹v,Kmm¿;*ã·ÆgýÜnÿ¿Ûý6bRd™G  ŒÚÙÖçÀ[ÝpZ6˜®ebµ'ZÓö4PýÅjV sC)Ð%4G™ £b?íºBê}‰¨®­N× ©ÑÿfúYÑF©0E„Yî½Ýã ‰eo²ì#Á²ˆƒv1ƒl[%ÅØua…›N^žHp´’ ZýLÄÕPó…ˆP€9ÞCA+ǂֶâ’è…»©)wˆ[DJ-ÛéˆHr†HÑ%"‰suXb5‡”è˜AS+JtiäýªŸá`ȯ-E5TªïÕÎ´Ý [ ¼Qý¥ Áy|(ý®w}çþ&ß~ƒ¾Æ}µÔnÇ‘ëiäÒÓ;žD•<Ÿ­N4k„“I{¹}0fJŠ0CNùÌ?¢±•ã¦îÜìK’ook6úÙ‡æw.xJœC»|)¸¼< g‚/·ÏÇ™5ÁÃÐc1ë{3ž(|ÇcgÑžrè~ …lls“ê0°üZu_r}“þ~×>õz‘RO§Ñš¼˜ßøVXÁüëò½CŒAe—=’/æ®j"•ÿ3_Ì%q/àáLDuv’¹JpÔÛÛ©pÔ앪_m¹x ôEšI1—ZA¦=4§I2ôÈýT¬ƒpF%,ø¤‡Öô“ö7)ý5û¸±°ÊÍ.7„ ¦Çtšu¹gx <3ÎDzœ°3þ¾£o.X°×ÇO×Ù§ÜÙãq„ýb‚\—oÅ\íìeDòÛ[{RñO÷›}÷r(kÊ endstream endobj 81 0 obj <> stream xÚ•YYã6~ß_a$‘‘¢ƒºò”lc‚ÅMw°ÓÁ†–è¶Ð¶äè˜î~Ùß¾uQ‡­A<˜L‹ÅºXüнùsl|ølÒþû›â´ùûÃæûŸÃMà{¹Ÿoö› Û‘—Ç›‡ò“swÐçÞ´[7Š"'øaë*¥œ»ætÒu‰Dåü«ª O¿/«¾ªŸ¶¿?üs£ÂÀq> }¢}ÿs4ÛÆWå^_Ù¸ÃùlÚBwÆýlÚ®jjýè|tõ;twãHäþBÿÌS±lýº²s쥑L‹ Ïó·Â9w…D‰gøëì{XâGN0<8™^?ú2%Û0uºÕúMô[ø7ô½0¹ÐoÎ@þàéªc¡Ç¥¾lÃÌa÷ â~æ´:ÈW“:ÅRR÷<²‚v[d4ÃÈÑLëQ°Ô÷ü…ÅEÓ¶¦;ÃÂÔiê#L‡PbÚÂxo-êqê% =õòˆ¤Ÿ[³¯^]ô¢ õûû»ÕhÈÒQ±°fÿ)l¿ B§6¯=–`.$½‰Ú¥·u“4wè\a÷M˃gä7o;¶]·eÇr^ªþÐ ²æ¶`¶j›)‡]àϵ~`Ä¡óÇŠ—”ï%¤xƒ÷+. !=•0~Çþ£Hïùs¨>ocå裩1qzC‡Põ“k‡(H¦SòÑ]Ûb¥‚9VCÆ™—,‚ iר(ß¹ÿåa#ÕåÎ}eÍîÜá¦ø¨‹ÖœÐ¸Ôéõ‘ÍÃ-äTwæ ÑïÍñå"ó ™w’·tdqoU0’&q,ê•í/rX‘"­bջDZb¹jo²á7öHA˜Ž<¼­Ÿ F2ÌÒ¥á)Š]‚§•¢ ÖÑÁ¼‡‘8Mr*ò—y5ÅÐsÞ%Ñxâ—¶E~à©T¢JáZMºÌ²ØrCµ# 3/RsóLÝ OvJ_Œä¦ÍÁ'Ó3a§Éêç‹=ˆ?¹j™§ª®Aÿ›êJ_Kãš×³\T”ÿÝ”_Èk-¤ÅIBa’"(Ñ^LʱÔ¨j1@µ¬1‹ä¼½ °¦-oÒº3½{ÒíótH~ü ZwOŽŒsÑ#ñ‘‚¤†)ã””òеÄì C¾×€[3ªádÚªzû4سÆÊ2øíà"8V¦ÄS—¤² ÐE6r‚–Wõ°o¬µ$Ùï¨ÐDSßä6óZÐqÏ`UïBÈ/¼ø:–˜›àž‚¦A‘HÉÝ©Ð*V^P|ðìȆ[ƒWUÀ™šM‹q:*;“\6˜Iä2øí(°JÎÄ|—N£´Ï Êk·JYæ;NÖñ(ŒÙÚÅê\úy©à¦É¸)å·î.+›CÔ {9»Ñmq˜ÂõûMQú M¼ºç‘„ê†i…Y—L!Ó‘tÉ×,¬ !€èv\FÖá€ñr7$©àÈ2Ýìy’³)+È¿°͓ͮîá–z Ž-¥ÍêùˆdÙ*:^[€¡>WÍ ä ½º›®°ËX¸P‘Ÿ_ñLµó+¢òkø•Œ¯`ŠÃ‚# .Ã2±G–)Ói ÂËöáúѸ‚‚6 ÷v^)Ca‚>'âШ/††Ï2ehBÅq×›Ž~~m€äfx®ÎnÑU.‹+F¤qSL~åƒçÓìûK›ñ ä™40×Ô|^¤™Fài8ö•ûLÁxãÙ™FÀÔ ,–ÅQuðñòi:Vl—êµ¢ÅÀÛÏ-„ÆpB—3áüúGs"¬ïKöûûšÁ|èÜ»#«Õ¬c¶ Fð7×nix×pœÚæÈî­iWª~€N¨Ð=+`Õºÿð¸}‡_B»àÜ€w?¡z±O·,ÒÀáÂÉyHgj¸hÓ«oVr$ÌS/¶@ì›ÇÇ5ŒL­°ù´"#õ2‹á¿YË£E«¬‚ #“ØÈ”h×b¿ÐK¢¹‡Ê¡`°Ï“‚¾¦°àçKEÐ7 §“Îsuÿ˜3‘)zæê£éd5²cUT=¡|˜[t¸0O tÍŸX{¨_W†²xWÆpãÕ]O‡5{þ"ýɪ¾%…qg•9Ü;LÇ i²þlJËS }ì2ŽªÔ)Áñ1ᦙ–‰`ò©ƒ# ‹P^J³×pHåÎß R¤Æœœµ]¯F&¹zC=bW¸è4S÷Ó-ñíMõè?¶ŽrŸ"5<5BÎl9Át°,Èfèlch™Ã"(@yð…¦& s/Íg hìî¨\«šf^jŸ_x—¶Ò»£lD¡Á»©¶yïg^ÌmC¿8R!{þÔ–^t2L#åçL`1±]žÊÆé(™–8X/p:PJ¦3œ~Á¥ùÓóVHd©RÚþÚrôôt4?@çKöB¤»—× ÊEG,˜.´æRÒúAå7„jå]ˆ³Ë ЉƎ< ò8ÕìWr#S/oÍ 5•Ów¼·l–,2öfÄË9áî¸ào_ªÎL«)B軡–  £Ü•š[¤žÜj@>==꽬|(GC« /ٷ͉ɵ*ÅNÙÞ’¢i)ZËS¢J¼pa“©Ð|i”åsjG”3½ Ø†C…9óqÂF¨˜r4kÚË´ò ËÅ£±:ÖzûKèíïP\§³»ê¡î«×/íÔa`)ÃÔäâ\ÌÄã'÷)5òUË4ûžHô]EO°ÂNíÉ\ܯözã݆þŒUgà²2ú´Ò€,*JvYQÒ«Š’JEÉ<öÉÙ¸-]€Â‹)º—ÂH÷¢¥ñÅ ‹Or÷=Þ¬É {ÕÛLª·mh)YuÖ­p66oêõ‡ùdú›EUƒ €ê¯CefB${¤Ò¬Æ¸hþ?¦²ºýææ½Øüûoÿ|×´ü endstream endobj 84 0 obj <> stream xÚ­WYÛ6~ï¯ÐÛÊ@Ĉ‡®>v‘- Çyè×âÆJlÉÑáÍþûgH¶§A`I‘4gæ›oŸÄð™€ÿq°=¿Ü/_‹€Ç¬ˆ‹àî1àyÀ%+’à®ü'¼ÝécoÚM$¥ ùÏ›H)Þ6‡ƒ®K»¨Âß«ÚÐö«²ê«úýæß»ß%8ƒëb¼Dp\{ùZÎÄDîH¤ – ‡öT­âú&º>ühd¿Ï˜ nV°T^ñ4¿ÔE\«®ÔVЖåþ˜³’P*I1±2q|c‡ëVTˆçz»«öX%_.Óù•ðµ¯ZݺÂW’šˆ ü¤nzZßau<Ù?ø3E¥3 Lç0ƒþ‚&K.‘IÁ¿‚œСˆzÛWMÝY7*—Ý@¹…®)Äebíˆ`*ë¬ÙLÝ ï­3éJ†´å¨±¿{¢Ï®:0˜OZdÊU+髉 -‚¶P¤ ä7·6"»@–3ž_ ñÜ©K÷ºü=÷–1¨MÓûHG¶•ͼXL@éŠB²ŒÏ¡°f Å¢f™ÏSǦ«>¯…ŸB ë!“é¶$RCSFé!e\Q«gc›C¥nKl¥yA¸ÃÒ"ÞxfU…z·gŸlY3ûgÚrÖ÷ä&;5õ2_ί' îÏØ,¼â(hοžÌ+.‰ &1ŽL<„$ãŒF‚ÀŸü]‘W–°|ÁWL£kFÀ Ÿñî…Sñ¶ãyÙsÊÙÍ$|¼kUëX*–§WØZ—lµ7êsMUbqt]8ä ©®82R±drQKÆ»ï7ØxøÀ”ržòàË5”ø«nU¨¢êžQ¶ žÅvs ®ÒAgól™Þ Ô¹þÃÃ6`4x]ã/ ͹¸–Mc5×-÷u0¶ò3'¶®Ô{x¯•Ï®3Üë-&Ò×ÞUugZ›‰ohãü^íú¹êq)‡Dy1w×Nc§¥;½#ˆB¾˜pïÝŠõ)a¡k¶',óñyƒDàð1]çŸèËÛ5õf¯þ¾]¹OÄÌ»yÊZ˜€!Æg`ŠÐ=t§»‹öú\À%0 {±¼dëm·1Chøl (ÆŒ/Hß›Ïýü=åŸÅ0™ÞR õîlÓ§î5v¥)K®–ª‰\`Õ$| åa?>à`í“aVàA,^ô_m<<¶æT5ƒ{˜A“Ö7Ø8:š¢ B.XœÏAXc‰d±/S×Iâ·oü#Ý5åÝð@ïMÿ²ƒþÍ+ à ×Är àùÈûpEð‹sÉ ‰€7a¿£Lòê.øó§ÿ£Çß endstream endobj 87 0 obj <> stream xÚ…XÝsܸ ï_±“—Ê3YY¢¾¯OÎ%¹q'—¦{77Ý>È×ËžVÚ¥:þï‹/JZK™Ž=+A¸ûcîø w™‚ÿ`Wwïv·Õ. ü"(vÇ]˜ïÂÈ/’ÝCý/ïîr¹Ù«ÌÓmm¾Ýì£(öî~ÀoäýôùŸÜøx“+¯×{Ê{ßÁ„ܫƳno`æP¦k™ó“©tkõÍ¿þº‹UèÂ-£Ñn?¦»0óU˜ "{aÙÇ…Ÿ«Y(œÔÉïîfŸ¤J´þÇ›"m²˜´¥X˜8icKm^™ Nü ÚíUìǼð/7yäéÞN[ ýè-·"þ|îp·ÿÅ}¾ <²ázVAÓJû0L}ÂÃÄ/2þcwÁi/½y:áÌ“ØWÙÎ"â©DÍd¡æ>"-Ë!“ÍÍøIâìÁÛI¡pnª¹™½ås&7økwPÝgTµìõÄyÝØÖd`‘vßV¾h-õN?ƒs7 ÙÍNÃpùáööh~×?Ýnì"€ÓH}Þè¶rÿ‚t­èe,ë-ÛŸÍ0èšiCÇ Ubiî•mÍÚØ¡7ã ›ù°—ó4ÑhKzKÅ»#'^>òñ*üú2ˆa`)‘‹ÔSÙ>™ö‰)FFœ¼¶xeÓt“Ýu͆Ý+åçÅÒ™ÿfŸ¦÷åî~~÷é±ÁpzÅõp ã ó.c!;+ÜRä²%¤¸‹BdGD“bÿ\þNÖbjÉŸsIÛË6«Äô·á‘×áßßi õº^VNºg‰Ç±­Ð‰ÊFdÂ1­ ?Z}´L°¶²øO¸t <ô%×àˆÎ¼ö1µ`1-ËNt”¡gÝ©rè!‰©»3ÄÃ8ŽÄÇB¯´vìe’ÞðÔIfài¸²‘†Í[Š&ŒTá¤J°àŽÇËÓ2q¼teè±+Ç \Ó+g†!CNçÞ³NÌ„FÇ!¤täŠ@<³ks|agšÌ…->$VÝù¬ûÊ€CÊꌴ]»_Õ?D pÐ>_uÕA¸è Sq¡"t)+f¯‹òÀ»ôÚêž­)ãGZ5wæJ9Âv„ÈÁ™ãcc,+tf}FI%p¥0™¸H½'=p£B«R;“eËšži$­ëɧÃÐ{>™F3ß^`aç×lYÙµÖÔº§}ØŸÜC ?òôÅbÓá€ÇÄÅØht.k Ÿ{š™-wÝBt²*Iø†grï÷NÇ¢¹3ò‰³Õ ß+Ë49ì(Ô¢›ž…Δg˳k¡QÐ]“»˜Þ|i´‹4öÕ\!¡÷“nu ©_ЫµÎbvI .óYyºÐä[™F[óÔjIhì70Y¶ $û*moøÃ¯r0 E“Î䎲XAM O-|;dLîúšnœ’Ü ¤qâøËJÂe‹³‰TndR_9õÓIý·Ì gZ•£¹+ûòôàáëéLm!ÒZn:ÖœM· ‚|(ÊoÀ3s_úî©/ÏܱM›š‚Ÿ Ç]lÍiqãò‚$2¹©9H„‰¸4Ä%ÃÔeË=¾YÜ»†gaâ6¥! ìã¨ðÞÓ<:G`™ÏÈFàøÆž¢ÃÇIÝZýu£d¹ã¿ %|°l¹!8™;pŒ5·Ä…Sã…å!ŽéZEé2ìâX¯ŸÊ¾n´µ<Ìi,2>bàý2-SÎ%@Cˬöò|Òsº3’É$ðu En)äRF{Ã^ÃãÎCêAóCúùµäç^S‚t \$^ˆÈ­ÌÅåÜ„ì³V|Ž£BžO‹×8Cƒ˜¦¼0Vs•æbG¯ŸÚJBÅ~"Cšw_¾|ºÿñîÝý§û‡ßXÆÝç÷,äý‡÷Ÿïîÿöùë÷(!Ê(_ÀLè”—Kƒˆ›:„5‘ØJZÃÎìZØÏIÝ!Ih.órÊÁé•€ªÚÇ3q$rŸò3_~ÓZf,׿†Û:Ã0¤¨KSVxæq’NÙét1±Q]UyˆR{§®¡P‰ó,#ºÿ8Å 2ï –†ÔèɲP}±¤iU¸ªP}§nA¨" Zb}<Ò,÷¾Ž.Å!&d™¶ mzœ‰í‹X¼©÷Ï€nЪs9°.›?/{‰ 0³™’` ˆyl§HƒòàÈVº×cïŠÌ$’B¤H9¿Äšä‹9@ƒ˜§h‰¼A £)°íim7¼)À¹`ŽÃaõÂh¥¤D5,Ù@ŒP¡Ü(Ь!§EøNÎ-,š=%½¥‡cŸ.æld &Áî–ÎøøÀŽ’òãC¨8†¦@〄ÚF*ù#ÇA ²ÂfñE1ƒº®·RÈVYL¡¿‡Ã i8¾A !KÿÆ2©ªôe`NxИ° vÌ‘¿"…§MõNc­ ò«Š…' ð»,pî´Ìäë-I𴵬(”öúÑôS•αìü&$†a¯Z=é0d#‘ÏØëD?/‘>% ÿBù‚žŸÞ %ç#Í\ñ,+¯d²ÀplΉ4ÍW‡ÑŽ·˜æÓÛ’óÍÄ)Q@2MÏ9%Ä/”xÏ]A‰Dz\©¹½|z‘ðÑ ›à(hmVC4îzëøQ¶)—±Dmc—²•¤ÁgÔ>å“Þ>$•£»Úõ… _5¥Ï7Ü£Û‘sý^Úv«…r¿áçK$‘Ë:f¼k¹wEÁÕ±ZÒ3Í8ò—:7Îg]ÑrFu¡llêoU3ZÃGXD6²ŠÜ¥!а‰OæÂC¤Â’e*²E4í oUä–™V³ÞÿÿªÎ½2qÀ6ÜüÏ–9º¹^º«aâ5ôÃùyq*&Ñ´=ò ²ÕíᆻôŠ€Wp¦¡Ëp¢FYh߇®b(/X¥ßð hn¤£¹ –àç- RÒ¸Ú y/ íâjuåÒUN–ðKN‘“Ein¬M dŽù8ÌK+ïRöS®PNÊg owÙ„b±(/¤J'›Aµ .R¡ây`yK¸+^L“$¸ª$ç*©úÀ(#,SfD–Å">NXPN^ý•·…;†(X< ½dÚtÑ ÞÒ ]o*ʼЇ}´“öÀ'OiÄ_$½ª2Ž[×ÌÎÕ6nÈíðà¹hß ›FÆæÇ4!\N¦élŸj¢Aõ"ºÁ$M‚rp‡Çfš5‚þÄUzöFÑçÍg$ DÄÅû–=ìPöRÊé[ ’!WˆØ¨t?ð‘Cç*®†ÓîI5ƒÍÁ ¶¯$ñݰÀ—Øïâ2º¹ª€$!B ÎQø½o9”À]»ÚD1+ô–Ï“Ô&!"Â!d&RÌ-”ƒõ–eÌôiÚÆ-Upr”H Ä.­øÍ‡‡Ýßÿô?{H{• endstream endobj 90 0 obj <> stream xÚ•YYsÜÈ ~ϯ˜ÒK¨*ÍûØ7íÚÞõÖN¬$ÞDy †-M—9ä,•µ¿>ø4‡ÒP®JIUÓF_àæ÷M¸ è/Üäý›Ýaóíõæõ»h~”›ë»MXlÂØ/ÓÍuýïêx¼ÜF¹gÚÚ~¹ÜÆqâ]}ƒßØûþ—HãÝey½1èEÞ›ŽÞn:˜ö’VŽÕh»V(²;Óæò¿×?n’(ôiÀ·‰bÛÆeé'åf›”~ñÌÔÖ¦§ÕAì{; •8>þå6!ÞßÉh%?ƒÙ鎴¦iŒ.l»QÆo‚0elÜ]Ë´¤þã«”‡ukO\;Ýñ£Ùum]õ3'%°Ê›ƹ‚Í–TŠJE†¤ôª¦á½x¯ZÇN~E#Ú ö¾­F&J¯dü=i8#YÓÌ«z[µ`4B+eä]ïuñÙ…Èð¡BçQ:t ¹+‹$…÷§é;Ùë}+ú8íg§ú(Z°{óDy ÊEcEŠ(+—÷*Ö ¶V2{÷(”ŸU;ëBñ”dÞ¿[½ÊR¹FÛµdDî,…|V]„ÞÍÍwh2ö2x}YÄžù2ÒgnIy;Ó‹Ñö]?JóX Cu#¢ÛÁïH,´µ¯´5³jì@—ýŠ:aÉ·ÁwظכÚB²b–ìì>f)qÒÄëzùý¶ÚaùçÓòœå1–D¼äî$õl+kôSÜ9ž¬Fi _Ì LNã󲵫'J;ÈtoS 0m¬?;Žø~TÄKß'¦W2(Ô‰œæÜÙ¤7Û>ÖΞ† O¿‡nàVâ¥2ð€Cv}ÍÊ!÷ªÚZWÙ‹Š}qó³3Þ Ò ÊB@¦‚V”ÊÌ–C’Ë%uÄEIvË[öU;ɦD-˜£kèŽêHè1’•ê§Xº†Dw0\ ¤•pàÌÛÛÖl{SÕÕmc;à„¤˜0áao޽”#]õÙÙwÊ™“vïºþÀ öþŒ4‡£ÜÕΑwîe¡~xý ˆ¶Q‘h˜QµŒô˜Ô¸7­é«FfÓmcw,j®|âI»Nv<±"ÑÎÅïÍv°í=À3×]Eë5èͽaì+{¿çbÇø_õuó(ÓvÜËz–Òî¤#€SÛ±ë†gã÷†%ã¦=Ü€v×¶Ky3–WõN¼. Ù ð{´_L3Ü\¢œ¶ç)@›ƒÙÀ;öÝ}_]ß˨ ¡ºg; ­Ì ‡î`dö¾y”Ñ•;Ãð‚Á¹ÂEteqŠ/Æ„”zwÔ⻣ßÅÝQO4„éö8)%›F8«W¨ÈøFÓ+·h^]McG|1à?kœ1 Ë3e‚c¦x²Ì訔p“²1TZ¦ ÉuJ†UrŒAr ‰ä'œC£á‘(fäíUm3YWµÒïðH>XÐÎß“§€‚×)âH R&a<»-Úê¶ 9Týçéÿ"ÃA0XÝìt!?Ša¼¤Œ¼=?|áŒÐxÉÑ­z’㦠>kÊ÷s\Uõ¬›@L”¼¹¶Ã®›zòôCÒ3 òûd8¼PÚƒømýf@|;«1ôzl#èðëDÜ%€)Co€ùNïJy±—žË>C_ž‹Ó¯„Œy¶ÆU&ìPNìÒh‰µRcœ@‡ÓŽ/YÆ?¬Ý4ãõ;eÃ"¡Sz¤¯ddñxº›úBœK7þâk+ÆÍŽ‚a–œ¸››_ÝÈÅÊ÷öKu86·´³ÁïÉWÒbáF˜b5 ±ª:LЙ¬chÛ]3ÕF:Ç^¿+ RœD~¨‰K5ì,]'ݦ.3©8ôãX êÝ4jš“Ç~/•u2üpŽl{ÇÏV6Ã5åp¯Ä~ª®™a˜‡~n¶‘ »·<œùA¶™Ç>=ã•ϼDò0Ù”~™Å¼ý,WÉ?~ÿóOk‡‹ý Q}Ÿòl/ŸVYD9Þ#¡˜ôù$ +‘N^åæQUFû¥OuÎôÕ8!I‘ÇÊo®ß¬‰ùI¤PjZÊk’Ä„Àä(”ÜÕ[ÊŽ * ç`aƒkGÎ ¿p¦ñÃõºÞ?ˆŸîø#ºaü¸ëíq”=VUšg~áRæoÞ­'õ3Ç]²F¶¶qVúyü i$Á`´œU+Ýô#È)Œ;yè´£@Þ?õª\ž…RÑ›³?‚ØyØùáâ´ôÓùt¿|¿~[A>ënE?~á®û<ü»5!zeoYØR[¯p£ÝB'ÏÖä I¥Îz "rI.I‚_@K%ˆžŽ¸tpFª aXl¥1')èàå‘–Ø*5¹›NB¿ —Ñ^×"ÔJ‹r~¿R ÓŸÈ€I—XÌÓ¼ša `sMÝaŸ4ôL¤~øu˜Èp _…‰ÒL(œ^XN¸öÒEȽbé ‚^ðrX')󵊈GÍÏ’¥ˆ>rÖ#A–K^¥5ƒô9Ï\!#šhà0îP+u¨E§z‘Ìq¯’Pr~%LÜ?s’4NþÌ# hY¾<àsÂó¼zcYÕ|…?uû9½ÕÓNx³Æ´ƒ¤=™zÏÌO%¦A9òŠR§~Ngbƒ§\ˆmúa~VàAC¡‰í°µ.¤Ë)/2Œb¦äm¢r‰%ÚJ=W:d9>ë*ÉH692,rÈ6¦¹SÒc3i¬7LήÁ÷®sEÂÕ4訉as¥%N6A ´ÆÔ,^ ©Æö]ƒªR”^cîí-Ôy:¢…PDá”BHtÈUM«[¸ò-÷4ÛÞí.Ðî®^\õZm]ñv%ÖU½ ÆI4iá:—„롳ŠÏƒDæ’±DËT)T,È 3ÐpÖ½ŒÅ÷êuR]‰DÀÈ?“Bë;лëà²Oy2PŸ æìd®^Ba„¨5Î\†I­VÔƒ17éê<°­ŽBSÁ€XˆV hµâœ t¥ŸX¤®Dõù¯ê|.ÜmLöÕr? ±tÍKõ§{Û¶J˜è&±Û$^:Eêwº¡#’Äa½®i‘ƒ»²Í qú*w祧çîέ Iãð«ùšñÎ+±æ#4KIÞØÛÛi4ÊÔùÌâN~µæJÍ+wešl­¼Íö½ÔƒD§OYÎ%¸(]|…ˆ3o5å%Ë!‚O¿ýûBZîì‘À ý´ÕÁ‘QÂ6µü9!Ò+Ü•Sã\rNæ’™h¨Ñ¦±HïWjoаÊý¹ °€2Î*ÒåGõz%IÕˉ…D,áà°á)† ¦ˆ+®Ž ®Œ"Ëûkö´œÒr­B*ÉMÕÞOФ²ï-õ«„hp0¯Åp)¦äR»EûiYQ¸ .D†]%¦¤d=ÇfzÆWRfÜ$‹Îç+È(®¤dÜÊB²Œ{sÐÔt¸€ã†HžßßJ¾|ÛÖô*'Í<#wœú\ ë/|ß’Xk Ó9M@=¶ÿ2®3XVxŒvÒfëËÊå •ål²œí=Cpf´õȘ4 éœXà›fçmÖªÎÙ©ê̤l'´“ÕÉÞÔ©SŸá$QŸ{ …ê(¶ïvx(èÅ g· ¥ËO€/™úÚ9øAu,Øö¿ðÖqAKÈÌÀÊ»¦²)Cò{>ûL÷ìË¥û0²Åcã;Ôè> stream xÚ…YY“Û¸~ϯÐ[¨*K! ŠÇ¾ÙÞx3©¬½[‘SåÚɇ„FŒy$mÏ¿O_ ÁÇ[ž2qu£»ÑÇh÷eì|øì’þü]ÑìÞœw{îÿ˜ùÙî|Ùé.PÇì´;—x¯û~O·eõ}P*ò^ÿ„_åýòþ#7ÞíÓÐ3Zc/ô~î€ õŠ©Ñí(Ç|¬º–Wþ«*t;èýÏÿÜEap„ }Ú&Œhì ²ìe»C”Óf>íSåuÓþ‰×äÈñ‰;E×;½¼-±‘ze5Œ¦z˜FÍãUóÄ`<_µ–Á>Œ™[ì5º¬¦ætTæé xfRtM£MQåuýÄ#!Ñýݬ°ÕÚ®]-€×É÷½Þt¸÷תÔ(oƒ|9J£¤ÕÀ-±“аñ¢±©¯{Pedm7ÂúVbˆ8YÈjÇêÏÄDB8š,ô6mÕ>b?apÆuò¾¯+-3c'ß«Ìn˜yåFæFýqI9hÄ ÖuÍ P³"u"ŸÏõFp¶Y¬ŸptìäeÉ7Nx0zâÀS߀ÅÀ²è¯È„ú¤THJu¨4Òv;T <"69¢ƒ‹âÔì£,ˆÈ9mÙÔ®½¶U‘£î§ /&CŽ6pì{ÝøôTŒ< G£ ºìh:!æs€Fç%Ÿ$¼L†ÍÁ´½sÞ¸êÂß™ŸÂ­Ð‹Åã”ýL¶ãî&¾‚h Pyÿ §ÿ¶cÃÿæš>|ÎÍš:yQè~d†L=U;H: ãŒ<¿ú;Û1o5\Hh°Ç[5îPß“ZP§p•;p2ÇOäÕ¹y”ÝvµÉŧõyà$ix‚l tbÂÛ}<·i¹—×舸èÒÕµ˜Šfø0ˆÓì½7šT’\],™V-*ÇG?Y§Ò0tR)vXlÕÓGˆAl£0ŒRojKŠL:(6†¼ÑL´Š-œœ¯Kaý@ÇYŽ^Xæv£ÅÖbÅ^?=@î‚üy£3T_Û¥XuÜs>§cœ±æ)-kbpî·~ût÷þ6ÑÝ{®g¿|ýþ|wþD´i2ûI˜Äޔɉ®<ӛГ© ³öØqò^‚"^’ã&\frnJJ£…MÓµX^°wÍÅre¸ùí~‹qÍp¿çQp¼‰þmÔÂWìp.ÍhšŽÒx„y&o¹ø¾PÒqòäK{üuà‰z.(ЙkýeªÌVÒy몋A¿3¢ý}DU©s@ KzP€ÁRÝ5%sE†¦F²D§ˆ"Û/Ö6SóÉÐlnÌn+[µÎ N² ¡Çêa.ú¸+ÛÖY HQ˜-Úq ‰@ËY;[±Šc)ÏtlȤ‹9Ç w1DÊb¸Xbî®|K-f;B@ô&§|úù…}ÂyŸ÷yÁË‚Ì{>Ü[mydhõ*4̆þ3'f ç¡'i9ÍvB¶;4¬Ýi à+.ŽÕ…Fœ4C¼¦™E•ˆÖ`޲9;Žõ!›m§$òÎWeÇžx]±>UrÝ0œqyš¸æe",„›Vc-ì¿Ud«$¤„C¸]gJñTGR^ÈÔ7A˜1~U*EDÚTí"‡,s_«LJUü”býÙ‚ÊIÔDP .l6PLE¸F‘ŸÐ—ESéíy«D*YŠì¨œ·‹[²Ù*Ä󌞪«¦e&‚U­¸|%†@²_ÀdÝ1ÿDFˆî‰GèØŒÍȸÑÌÓž4é,2FáŽ1iA©1±©‘<&ò%… èE3 ãbÇ& ß-´(o>†‰g¸Êʲð)NzàïWÜH›`Ýðv+ ˆ•0ãS¼±=è-—Áb6ðC*[Ns>/e˜³6 žaÃ^­°]<Ëñàq|q@ÚNPõÈö]=ßvÓÀKG™»÷ƒhd(û,Ç'„J¹vS-²õÓøRFÈÓ Âµk@‹¤ å{vmòÖFôì¨#Îе9H†¥š}»ÂÞ@UŒEáðu¦V±­5Π4½ÀÖé |¤tŒœòòy1»!Žôù£~é|ÃÌ…BYì@!tzÃ.ŽÆñ}þeÒ<7ã ’P‚„&7.8ü,AZ†%!…!FŽ,yùæ¢üB€Þì‡>f¡¢žJÍ95\É®(x¹‚Ó“TMÞ=8k+·råD—𑌼$cAK W^"FºI3£4"?;«ôÄ@››”;ák§dh9»{8ãˆ3¹l ´9´z”[nø™Õ’¹ì£@ÙkdÏk%[mÇR!ø¨[mзC|¹À-b¾Â‡iàcbܾbáz¼Ò¦”ß’/LmÝå%/Ÿ¹ØÄìÔ–¹)]“y×[a¡$Ž¢gWÐIÐ: 4}­ém zºž~º‡=ts\.`,¹Íÿ˜Î#iZ¯I R"§«T¨Æ ¤þ»Ë<kÃ4/Ù b>ŽŒã`ƒOPö]Ñ-‘½q¾ácoÉ]Ì¥7S¹¼¦…葺§âtòÁtË£O„S„¿DðcÕnÞë8qwEÌÈðµ~ÙœB"@p•¬HÃrT£-QÄ/:¸.“ÑL&¯nAf_Ý‚l;”ùѯŸßSˆ¬-8ot“3~Á·36!ö|qÚŠ3ÌÒm‚VÉ€½.cî}_04‰^µ°rÀÀƒ4¡$qƒì ØXV^FcÎ^õL0@ÿȃüõsHäGƒ%‡D¾rm÷@cÀJÌFø¯†ßMD¼Á0 VpàYKbô˜Wµ\hiâbyåÅZ30â ǵMYµ#É[5 wêÑcgÂEcYÅO— Ã€qçé›'¬Ánt’Ú¥y~'~þ+m ( g‡9LHd÷Ìo’ìK¯C‘¼ýúáç»wwo_c8ß}xÿïí¡å Îky¯J2'ëc¸R†p‚‡•—𠱡–µÿ¡k¼¨ЇàÐmÁaûB7/Mý¾_Hòj8p/ä‹IBIóïôüçŒPÙxÀÖ‚^ÌWÚ®‘Æ­ ™ \L.ª> stream xÚ}XÛ’ÛÆ}ÏW°ô°jIã~É›ì]Ù²-Ç)m’J…yÀÃåD @à®÷ïÓ·f(¥-q0ÓséžîÓ§góul|øl²þüMuÞ|ÿ¸ùîC¸ ü}á›Çã&È7A´/’Ícýoïýå²Ý…™§ÚZÿ±ÝEQì½ÿ þFÞ¿ý¶yèõJáWèÝw0!÷ªëYµ[˜9–£îZ–üUWªÔö??oâ0ØÃ†>m&Ô·‹²lŸ›]\ìóFžx{˜Ç^£‡QÕØŽ<ÝrßxRÜñ vý÷ª’ma¤;:¢1Ÿ13gL½ñ°Ýowq{ÿÚæ åyç Cï:¨›U†ò,[zl¤³H³#lÄ’µ¿ôêEw׿^pmÕ“qô‘y}ht½~ÖmÙ°Ù/×'Pÿ¤zœ¤Ë‘n ½gý‚Ê©?/t/ª?ëeölñ Û)ü¤û8¢Ã~–HSîj …×3ŠCÇ£¨ ÍßqÓòYݱH9pwyO]?Ü™DºëYìÜõÒc5tíàÊÈÍèQ+±X¯YýdNp„ ¨‰Q¬ž²Õù 'M“R²þ’Ø8³§ÖúàqEn:ðú–#úÉEÄΠ¯°ÁAѰH¼±{V#]Ž¿êñÄ-¼"ümT9HâëYú 4 e{h\zÝVú‚®¦‘ÑŒÇX8š…ÈݯlwЇÿ·>*•¥ä—,ͧràŽ£ze—[j^)^-z‚Øa{ÇŽxm5 “O½™ÛEëˆë¿¡e( AþØwgãìZæõêëU÷ʨhœ9ßíÌ?ˆ3¢¥3ñæÌxs>{sæ]À“¹SF3¯å ljǛ!'"s·þÄ(3; vºNƒ=3<Y”˜yÚgÖ2qBöµL ïwˆÕ³µÙ`tå¨TÝmûØrÚ‚›Œl㶛ŸÝ--\ŠO²/ÄØ1ãAŽñ¾® ¢ËË¥ïÀÇø ƒ‘™C‹"Œò!XäH87讽@òjÌÒ&õËjòxBåî°;ŠM‹4±Ö=Ñ­Yf¬Œ[ã¢ñǶj®5`zú|V5*Û kû€†Ç‘œÄDÁÆÚ† *ÒJ%èl$mÒÄÉHЄ×í3 M+“»TFÍÈQS’¹ÉÇÙ)LsÎpØ(ÉW`/%§<¦ÄsMgÏ…Ï7m ^ì€ø’ ¶ö\¸úóR†S‡{•ä¦[ÇGcô: )WAŠ'Î+ Ï™'+ìûûñ6pŽwa\ð¡âBÒk˜øó%à‡¹ló¹¡q¼À’ì@Ð MÒ>FÁÕ_¶ dˆ„Vî‡>3W‘ e[sC N¾~ M^¶”- N6“… Zþ%]RúGæö ƒ-‚úÏBfw‹LLÎŒÿÉ !²Ó¸ ø#ߌ<¼ÉŒ1ÒÅ+x«xÆöFÈo . DŸ$´(|<°Jí5ËBßapÁ5¸—)âlJ $–ñ}`gYKƒp~1!Ò@k¾ûmïƒÌñ]$Á¨‘ÈÏ À¦ÄnΦàøTÙ ª´mIÆâV Åǃn;ù’쥗ÙÈwcyI[YmGB6ÝÞÀêãÌ~ $6zgâÝ‹„–EÛnAÔãÛ[ƒÍæ[“éí•G/Þ-0ަ*B¯êg Й)) Ï|5¹.ì{(lrD_d~˜j› óÛ+.YÙº½‹Ô±w!ô»ÈÄ;aÜØú,ú -˰³;'tsR«VCÕë'Vº0|¥X!¹Øé =g­ÀA#š0_àŒ[ö ¢¾jgTIö¹ì?#ØM’ƒàmÕHÈNä ÿ£”uD ð‚€­RU… Ûr-I#cf˜LçNÒy‹rLL’)ÏòêUÅ”èD+§ ŒDi¨–Ëv¸”½2i #À/_jVã@q¸¬Y︟=0FØþBú¼j®T 4Bci-Ø¡ýfº¡î£MV¨=-š­Ú'N qËì{s»:Xà3¦S¥‚5©÷%@ÍýX¢îâ<óOj=­Š<59^vk€ýÕ¼ƒĄ̈óÛˆfá^a2×ÿ84ífÐy¦(Kð"qtaT”rŒÊrdkž=!6ÃôSm•ÍÕ~½#ÙÉÐ<2?†–+‚ŠÀ˜èÈõvaÜ©X­q€ŒjŽ'~Æ¥x!1dO¶^& ú Éì"½8üâ‘‚¼€Ê¿£êMQع F ã†¼Z¤.´ÑãAz–"ÛA1áOSÎ ÜœƒÃ‡Ãû û¾@޽ÂÀóTiïXˆ†]‡{ ûDïîø¦]àBq!·€·áoá¢ì/ ¡„Ësb û†ÂøÅe«…Ïlue&pÝ_Öðõ »­äsZy¤´ˆ]|–\‰LqâqÓ»zµUÇ‚ÜrùÐi¶df[POØ&lþ]'ZõlJö„K–È54 XK€²@Λ9é éEx>ç÷ _×jÑ M²èq^tI¦ƒEÑtdº¦Ð߇‘}MŸäšîU£øU†Ó³Ô‰½VvË Aöpxhk `VL"zƒrŸ¯.s’GH^ÀYmN Q*:CïœIàCs-Ãdï^ý6²dMÐi±¦o•N¿Ié„>½2ÏÉø`p+ |¨í s1oƒ¯Y/d~²Ê¬ H<˜'T6_ܘ.e8ÃrkðÐ'Ñ•J˜€Ñbfæñ,’çNzuš S M…of^W>›Ô»ä]gwƒÐû'Úºì{ÃðŸl}¯‡ª)õ.Âøâ>Ïa‹bŸñË(©á•éNo9pšx˜+3h{ÀݹùÉ'¼Y„ÉÐð[^äé»­åá-MÍc>Lúz-}|ûF‘à'h»®­Ëþmú4›ø©) “ “Kr[z_â_8 ‚ÛhŒØE³‹¤æµÕ~QZ¥žà4ó+­o‘%zñZ)o¬‡<ÕîbŠõ+ýÜrmŸCw–SíDà;ŽS0M·Ì›$lfóK¯J è%Þñ1êÎ,¨© ¤ÎOƒQ‡ÇÍßþô?Sý endstream endobj 99 0 obj <> stream xÚYIs㸾çW¨úªÊV¸/É©÷Ä©n»R­™Tj<X„$Œ%RÃ¥m§òãó6 (ϤºËÄòð€·€¿-‚…ÿ‚E±9.>¬ù.UøÅb½]ù"ˆVE²X—?{ïO§åu˜yº*ÍËò:Šbïý_ñy?ÜýÈÏË<ô­±zŸjX{›þ¨«%¬ìTgêŠ)¿˜®Z½üeýE+ØÐ§m”Ʈ£¢XÅÅâ:.VyH3麅åyîuµ|÷¸W^xÓv±'å`¦:cr;3I8ÂüFÞ}u@‹`æ UUÄŽÞ q•"úcá :÷Ø.WËè-õ᜕y ¿¥äoŘVg"#R–ðÃ1)øàj£8Ú훺ßí¹£šFU»IôñQ•z`[>,y|LÓÐaI€FÖBB„½â‘A—1„ÓíÖî(”³²)lVåë\(‡¾¤º’…äÆðÙ8¹EÊÉ18É).‹dOiÕQ BÌÈëÅ Q’ÑqÑp´HJfÞÂQo6Óã\QižŽËòÄæÌž¦Ï´Icãö9fv¡TP˰ÌàzÊdÄœÜb¯[¨·()dÊWÊ-ÂcL]ÐzÅL8‡!çŠjðßÀŒAt¹„M42²Ë$jC:­Àï¢VpÒ}ÄgÎÐÁO€7LÇ+¤Ê4GÓJyƒAA £]£ÁrÒë!c0n *Õ½‘eÙsAÒ‡sÍóýš2IVHYyðZ  Ìagg’R|;»ü‚ã‡$¦š§ÉØx”ÇI-ZDI­kDtb{Úº˜Ë†õ­$7 Uàt‚Ù8n"Q$Ãâ±`œ³_Ëò¢nºéœ`ñÊÓg(‡‡R;"¾pK?Oˆ’UZ8–J0§¾÷ñþë‡Û»Û»x›O÷üzs·þF«ÆE3äºÈ:›š`ì£Á,‡dË Ñ[âü³éöÜüŠ´å9mË$>hÕ”ª¾*í6:’ˆÑ¯æÊ°ä85ÀZn ¼aæ>E¡/tbžSœ.lB%˜9[ Žç÷”Ô‹ÆhÇþ9<,Dr›)9R7»ã×îÌÖnhŒ°pÕáÀ Ž0‡ü¶b!úw¢0K;FŒ]ù6+€;ØõàÆ¨5!ÜÚ‹&9ÓÔ•-˜„oâÎPü¹Å'ÀFËß·d€rïÈ ¿ãM{ŽË–¼J€Û÷AˆvÂæàÜT'âðïÊFê3UǹrLþ¼ˆ! 06Á&¹&òþ…pˆª$K%Å CÔ´›ƒ2Gð¨ w»5'ꀥK­tQä[´üÄó•æq&69w3;¥íÌÉÉpœ”B‰>l ÑljŽUÊÕöи=ñRðx)Øð˜™&“ž]Õ×-±7–Є«8k3Él=-yŠÓ ¶O·€è004HÅ, BÆ` yw#TÊ6H¡£4àv—=p&ÕÔùHèå¼#38TI‹a QŒDpœ¡b*ˆ.Í{¶@xÇz²Õ®ˆ,ÿ˜/ín,Äžf½gvm¿Av¶'¹ïBÜšßz=À¹Ôa C+ÀJ å€<èÒBPfË_Ó ¢1‚hàÂ-Âák É’; *¤#‡& ¹‡¶&ÔagæÔA=aK&‹í-ZCÒÇŽ‘é§Š’õsu…Ù?áË{–xúÀ#¦›|¬v°Mâôœ``pj³â’õu4‘•¹‰ ·ò×¾íÞ†Æt+LmNsçÔб/KHa옥”´šJZO³·ÞÆpÊñÚ4?çå¼yá(g@—µC9I´3qlÒ½Ìn±ü&¢$lœ9¬¦à(Cz“P‚ÅÄÞ–$ሣ°Ó"ó³÷-˜xø;(¬n^ß1…9?üë¹X µ“ÐuQX1G8WœpC9†p åÝÄ}ГfãÉáî¥!å …Ðφðk2©< *ÜÙ‰GmDq~¾Œ<<¼ç«wE7ïg˜ØM_þ˜½Û} “MxyÒ%”"z‡‘RøÚœ_'/¦%€ÃnZJcwÃh¦9™?]®Þ]FÊ途¿|¹ù¸¾½¿ûÆ,î?óVoaæó'0s|’ ŽM¤.Vͦ>›S¿jéxÇ}Ê€± Ù(ñ^»xËj¿”ò: ÍKèitý&tN¤ ­±ÖÇ…l„ÃÃ=–©¥aªÒÌíÑÿùù÷d´0BY.²¶KÏx¹µóWÊîäErÏH3~Ó@œ Hùõ;±g+_†Ü%Só2{ Ì1(#ñg¸ÖXžéð 0;ù¸p…B?ö> ™ž29Ž‘ªü̪ Z£ªüL. þðÌótä•ãð »ÃjÓ „åÅ«˜/Jðù>0OzãO€rå²½éÚß{Ž›$vôK×(úÉ#Ž9*’´ÅîˆL)OÐ",C‚9&¦ÂŒ$’Ðo,´%ü0´ž{!·ƒì¯Œ`$@¢<¶`8]0<û)9ÏSXSäQ ç³æ‘ã•ôì³åïŒ?w +¡¶D2,Z¼Ô³H¹âÚÁ¡R4:$â^Ù9qœ.JäײDn†Ø°Ö'îXßíT#01!OMGOuѸ¤T±—ª •”ìf½øçŸþõÙà endstream endobj 102 0 obj <> stream xÚÙrã¸ñ=_¡Ú—ÐUc‡÷‘7'ãqv׳ñ(5•Šó@K„ŠÔ”¿O_I“žJÍ”A4Fßh­þXE«þE«"†ÿájs\ým½úËÏñ* ¯ª°Z­w«¨\EÉU•­ÖÛÿ×§ÓÅe\ªÝê—‹Ë$Iƒë¿â˜ŸîþÅ?_”q`”ÂY|ì`ClÎGÕ^Àξîu×2æ¯z£Z«.þ»þÇ*£+80¤câ‚`—i”]Áù—iuUÆ´R\]\æy\#­OŸîo>]_”I°¾ýrÇç}»]fÆnï>Þü~îÖ|Ü7Üóåþ—¯DHçÕê2*ðXº`…E°éŽ'Ý8.Ðíp,ƒþ 0»’àuoyÃVýt‘e{º€Ê2ƳƶêT›º—3êvË`Ýn•—9ž—Ãyȼ'WëeÛа(xRž2Oy<#Ÿùn?À¼ˆ*ÃÝz'óš‡'¤Ñ5@MÈì&˶ïL½WS[m{£Ï"8€ÕVŸtbhËÀMÝ4j;¿AM6õ~oÔ$ñCôŽG–\†NÈß«Ñûеg°QöÜôºÝ3úÎtÇñFø˜ªI[Û®ç³U[ÙÔñØè£î:3¾`µáWQÀü$|œ£Ôp¤óã*ŸÿgÁåÕGÖò+ÉÕWað|¨û7TÀ"ô“ޞݱϴtË;NdœÊÛà+)ðýíF1cœè×-™3‚Q6iŒÇmšóÅBЖ¡µ²@ÍišU·Ï97MÄ>•¬‘¼iûéÔ¼2e8‚„¯X|cÆ·7eöw-±D”œ1üù 7¸ãÀÓÚ\TNV5dòJˆ¾ñ\`œáoÎ&·€#åìd.Ê+Ïqû·hi%ê„¿wx2ǃ 2XcU/=#õÇY5hQȶ²¢Æ†Í1†¡pŠÂÕ›ú±Q G ËÑV@àJZ º#é9›ÝæÃ¢Ñá¹iœæn{¶dW„gyl”µnG-4ºV1èP7;½%+Nš§ ŒóÄ!æ|þ8&’ÏÁ”x°^ l ¤/þt¬)ØðD|”ïÔÔµe§$lãh£6…Bï}øÑÔ¤öÖ{·,ô–†!²…n'A šÜ: CŠÂav#Õ€•˜®O¸LÊ4@ƒbón† —&{†õÍX@–×´¬±­—‹ê%<ËËä—xÖ›³w9B\ʪ2ø‚þ¬­ò”_缑öÙöìqõIÂ[mØã8’§ÁÉhæ‚ãw<¿C‹"p+¢@E¤^ö1£kÞFöäË¡j`w.¥Yß_ß}ýõ—j‘i… †eêÖº”&‡Ù“Zk5Ä ´I‰©‡ïºÝ2*!G–ûV?„Qº!J{!KÛŽ1_)J™>šoæ‹{}ŽV<ïnì\ôtb)®—–‹…®Ÿ¡01ŒáQ{H@–?™L1„*œ¤ ·*Ì‚{…^DIÁ·-k mÓh œÞñ”¯¼]ˆR 5Fãû@ÕXºàI³*°b=É!C¶´–™ —ø÷ц?©ê(&U¦·Çº*KÁÁÏ=c:§ƒ¿’[1p½QA(öåÀvwrs€@Å€wçÅH`¸ƒ"l¨·[- ”r©mù½×-•°ìÜç}ûHÒÔå“‚³g'wìp`€ÊÀ±ƒEIQÿFg@!o¤8ñBA‚µ1v›DÒŸM Ro`<„üÈõ3¦”®/Wo¾HÉ", `Ц’q]#[t/eC°ÄˆOB¾í+Óú†‘ 6ÆiþÈÊGm7M­l4)  Ç*ÍUVI B¢ÎŽæõrãÜÝË 'Ì.† ¯HœÝ´ûFÛOFZ‡–Êoð5o0©]z‡8—Nb%W€àB¥Ð‘•é hœ°¦àc;DNÑVðÍàv’Úq“ßRC|V.ÃóSã‘}ºÇk>S¦U-¯p„ŠS{.–Kä¤ÌG÷ÅÙD~˜ë8oÎÅËwóXóÀ·/£»£ýVÕŽÎ'G?k°ïã'£8$èf¹M"–! >,ㄲv”ÉñXÊò‘dyX¾a îÊ»yx¸æÌÚv(úgXس~À ìOx½¨¬ð8äì%ÀŠ…A$>k{¹ ŽÎ¼"n\I¢‰ËrR“Ä Î‡Q]\VAúpÁÈî`ü2‚2,LÞAvÄ]ã]kB¥ "¦R±Ì™•†'ÚW&$ü̹çWHÝîå…:ª7êMO¯9zKàù³bCZ•«6nûqµ1Xàq°q.O,%¥!æùêb7†Úóc3„טó.Œ œË}¹G‚Ò~Ù¨“|×–QÕ ˜«µÍë’O"#< ]­OMßGá`>×>ã³ïÕñÔ3^7œD ãñRLHc1Ä:Cš’ûÎ[1c‘€rµ”œÜkH9ztzûA*Z Xt’UQÍyî»#¸†X=R±Biý£–{gÃ$Æ}\ñãVÛI¯m>wCœ”w ²–K㢈œ†x(Ƙá‰a@xÒ¥™„Ã,w‡g“ÜœGòfQ6LÚ'c\’öMÆa§Ú€HÎM½ ó…Ú,Ç×fø³ø+lLêÖö5¿`þÔè׈NÖ1Vcx%Ùë5bËïUÜÂ*«Ð9ú5¼ŸŸúgב¾%õjËQ&Áîe)V†$FÄŸœ\tÉ9ºÄe:ŠCTŠgƒ¡Äò"ŠLÆ—V´•s×Ï(ùÇ#BçŠ:÷û ÍÖG‰ÒP)£¹fN&¶0´öÓ`?iÞ„%·w\_@‰õaaÞI!e¥ ¨¥‘³^ýóOÿò`ùo endstream endobj 105 0 obj <> stream xÚ…ÉnãÈõž¯| X2‰ËÜ<Ž=q0íAZîA”C™,Y…¦H«=_Ÿ·QH`¬zõ¶z{iñûÂ[¸ðç-"þÝEzZüüº¸{òž»NÜdñzXxñ ÖÉvñšýÛ¹¯ªåÊ]dæÇrçþ'üÎ//ßxñ´Œ}§Öw¾ó—b'íNºXe«ZSŒù«IuÑèå^ÿ¶ØøÞº$Æ ¶Úøî: à›¬cŸN@¯å* ]çéÛë·¯Ìçëã?žwÏ¿½ìxûÛköú×güúüðø²{$¦ ÇÛ,V^¸öbùzU7Ûp¤øf»uvå¡E…ÏKP_ÕNà”]‘É5vRˆ÷É›ª{ËMsäM¡Ï·°Š#`ûa1øc野®àа°ò€_°ŽÕ…¬9Q uwAï`í…¤7Y6²– ËnÝÞ²°ñC]žxÕšÁ<§-XtëºÎ®KñGæª3Æ{e‘ölòœÏÞȷ²1'“«šOLÁߦ2µiÇÊs ‘üH.Œ‹ªÖD±\°a6|ëZÆí Žx™Ù»^ k>"¹ðÍt«L.2D–Ê2Òð†ïÅ ¸|ËõIÀ¥ðIË"ÕuѬçªïÄwOÁ8M’u`Ã÷ضÕOwwçóyý^të²~¿KËê3ׇöNH'ºë Z¸ò¢d…¦:xT½{ü‰W€„_6¨ŒB6¦áï»aB!RüÉLӚ⽃¸…cŽbžC1Ö0Þ¸Ô8›ë<˜¤=Ëù¹©#)zo£1 ’8¨Wj†€JÕ­I; +_Q‚’ Ž&AåT‚!f„}oï÷eÍ`UØüMB'W­øˆãÍüªªr£)%BI§Ð1-Æjè7 -;„n#ÅëÇÒæJ(¦‚EYÙ¤ Ù…ð=”y^Réao‡”£P…Z¡ŠŒa«™im~‚×  ×SždÙÿç´¤^XÒÛRRàY¾ŠÜðɇÖ`°œÄ ÄŸ@rT /Ämºà­”K+zï¥PXÅŸ¬V‡v¿´LÈaóªÂfŠÇ=vóRÞãô¥‹ /±¼M,§äJ,qÆ`öÂZãb°èá“!Š?Ó|Ú^ eÆ+_¹epÔÇ0•ÄÃ,ä0›–EP˜Š·ˆ’Ê@4ŠtÜLKÐkH]<ƒ[ñ q!Uøf°í=ƒ°·^@_Ûã«=LjéÜ3›dî™M²ϸÖ3Þ¼ÿ11y W¦R-“)@ÙGÁ?>y›*éœf"á|4}Í·®íê+—¸ì6ëléÁÕ¨!GVX4ÓÁ|@ÕcÓk jþYX“[R>l åëq\F½d•¦ºj4± øÿTŸG61`}R…ðÎ?ùDuí±¬ÍdU˜°†*‡T8¼ °7 . Ш綇™g¥)ŽF7'Óà×Gñž_~¹òs¿ÿ¢šFº”;_º¼5|#$ÎÔ]Å.)k;ß|gZ}Ã˽ÔB~ySi‚ÍI+ê`9ôØü“Ç:Ïd‹A6s!iP!H`tÒõ‰oM+›šè…$€ú_‘ Ú¼1Z cžÉAõwÂô¤e‰Ê›Rxa€AÍ} 'S QH•šZ  Ìtf÷¹ž½.3.Æ+¡(ú”@ŽîHGLtƒ{ÆíQÌwcéÈ".dqá…8ί‰<ÊCøö'?Ô©ÊEƒk·¦á0æRçŽ\‚íb˺Fîet!Å$ºg]7BÌCg˜pLÝp)u±­óƒ œ‘1O·\çCr"I âr¨ø°i´ä Uƒ@"'œGN0ÊMÜwTˆQo€|µï9IàÀ¡ÔÀÔi¡GÙøð°úù_«Ý=Ú ÞöÇv4ØC­ÁL½MRžN\casO•¡­ < À˜«Ý‘ûG OÒÜ|‘k—Yç}(Üa57¢½–Ÿlú^æCÂL•!ˆUQʺ»öV¢O¡s® MVYØ“Z†¦L Å¡gÞx%ÄUmŠÔT*Ÿ+[å 뻳G}¸ú[×@¸à#w/øÝ)Yp'†¶`𴼕‹¨Ü€v…Q·"¸ažgªÔøÖÞÒim+¾lkÚ Çš]N ¡ØÛºÂfVÁ0KLúG£N‚ï*U˜?dHY Aö\LlŒE<Â!=dnF¯vÜp? ab·T:oN¹ ßó±ä²Œ¶ý¾f;âJ@s«ØüT9<ÊW^UWî|O~Ž8ý8¦º‡€ý^çæÝPz#œª6.jÍ.€§Æ £šƒ¶S⪌¡0iaÁS¢ éŸÈ…8øXq,Å£â2»º< §søÑ/°ÃÄ©:ò&¯8]ðD{°{°iÊ“>…™çˆU™scJ Ö»å^áJkxkôïÝx6Š]pr:.ıǾ‡¤³a ‹ÑÅ€…øò{EìÙJhõAÔ½ãQ{àQ‰„¢ä³´^™"¡Õ?Ú+-Û\,îc LUl1uü‡”^”·6¥ÔïŸv"™tÞ ®¼6,{#™8/#­O¸ä†®Í|ׯ4þínOT;´ª–&´ü¦¶¡×*íy^ÀŽ%‚†_î`3JwÜ2Yhɶ—ýAFXóÏv€Üô¬9&g¦·}oåIã´ž†…-n^ßÍ![ù­Üµ¿äXÞиïÞ»FhØ|>š/¹eÐhàË„—•.mÛÔŸi>ÔôG?´êûçñuñ÷?ýèþe endstream endobj 109 0 obj <> stream xÚWYsÛ6~ï¯àô%ÔŒ Ä#}rì8u¦Í¤S¥/ugB“…†"T–õﻋDJ–ÛŒ=Ã]`{ þ xÁRÿQPn‚wËàòVu_;r[<ª·.Q=cybk'Θàö@’tm¶˜]ˆEx^ßϼ^2ê¥K¸+ʽ*À3Q¸·e‚ŠM±QgüMõ˜ÝŸsÉ™ðÖ3l|VíFwm´…•‚ßǶhzUƒeŒ_Þþ‚ÈJw}«†^¼4ÏÆTzµwªko±26sý!±€!µ†¦R­wö §ˆ%s´g»‰[ÛáHÝ8ã®±qÉ–Ãû‡jÇCrOQP$<ú¢qÐë¢÷°ž¦ÚÛá¡ÖÝÚçaoDõ»Yõ»¢õëjþôÒûN÷k—Mì»æ©h5dÁÙR%ªvÇR·­iúùµyòP—ê¹÷B¶ª§ÒïŠò›~À*2W\WcÂ_I¡Q¦Uãú¿ò܉NGg ²…=ãd¿~Ŭ¾õ=~ó†‹s3‘‚­„qimÝÁdœMƉhÉa¢áÊ]C+‹$´ñwSBÆé42‘xÉÄ!Äß#+J’¥–äí4ưkÓ ¨óíºÊ/±m]”Šý\„Ff¹œÇû{ª $‚^Ÿ ÓGà‡ >še?‚)‰ƒ®qSŽipêîÜä’)KâéäòÕ*ÇܾR®®Gà—£'‹nFASõ£Ú¬‘î ¦ 4…ÓtånQÙð »é´NùJÃü̘³lŠò%ž±,>†sè¾±·Ñš4â¥vQ´Ø_ƒ%àB‘ßël—¤9K“Ó.‰³drïgÉ齟Q—¤/»·ÆÔ#‡‡7ƒÛÂzOÆz³ÅQ½ÇyfÇpœ¥ag6Ε¨µD–fƒtã_p&Ü|½9ú5Œ‘ ªñjý½6'Ñìq÷ ¨aø£—'<§Ø÷|»AŸ¾5:Ý…Ùc8Š«H8Æ5¡ž€^=óèB¡Ò •BcQ°1v,Áû¤‹šÖÔs±Ùbw'lPwÛ¸¼7´X’ý O/à}¹C#ŠÔ[Έ¶ªVEç+í\FK¦bâX¦±óøÝmQת&Î]êHŽGFe;úÖF—ÎâF©•õHupmÚWæÃ^Ÿ(W÷y”AJ´º¦½ÂA±Ù@bz™NðA5ªÅàaâ>ã-^ý¸˜&Y†[:|¹Ö-‘ƒ"j÷3bå~l¡O=ÕÃûeðÛÿÌp? endstream endobj 133 0 obj <> stream xÚ•X Xײîq˜é×VHâ ¸ïârÝ¢1ŠâŠ¢¨ ¸Ì È* ˆ  ËLÍ€ìûެƒˆÂ¨˜ j¢‰cLôÞDy.ñ&M4Z‡Ü÷NfÏ»ï¾h¾é>]§ê¯ª¿þ3ÆÂ‚‘H$VÎn ׯqïà´ÐmÊTñÎŒ $í ‹ÐÎx™ð:#¼!†öRaÅP†‘øö§Wæ_}Åë½~âu½X_ÀXH$\x4ØÛO›do?Õ!(82Ä×Û'ÌvÌö±¶SfÏž9Ávª½ýlÛ^!¾ÛÕ¶Nê0¯uýàoë´Ý×+,ÒvÌ\Ÿ°°à9“'GDDLR„N ñ~kìÛß0Ûµ^¡^!á^ž¶ŽAa¶«Ô^¶Ý^Oêþç¼;Ì+ÄÖ)ÈÓ+$zÛ{3‰™ÂÎap+¤k¥®ÌFFÍùÉBX†éÃôe0™A Ï f†0ÖŒ ó:3ŒÎŒ`F2£˜ÑÌf,3Ž™ÀL¤6&3Ó˜éÌߘÌ,f³q`1‹Gf ³”YÆ,gV2NÌ*f5ã̬a\˜uÌzfãʸÑý613z0Æ‚YÀ¨™J‰äh¦G©ÔVzÀb€Å ‹S²Q²Y—|½¼žu`ì×Ü.®¡çìž-}{ é¥êu­·WïK}Vö9n¥´Ê´ú©¯[¿áý ßÕþ^ý³Œ:à››¶ Ú<¨tò.üãÁуR¬ðÙP† p„ä6ÚKq{ ¯ Jš5{±&Q«…$.>7.=ïñm|íbÀÙuÛ‚wzzWy·)j¡¸ -£/ƒùÅRÜó)ß²³ÞÓs§¿‡‡ÑÿÈc}‹ÂJ8&!Õt¬T‚ûP&ÅÇ,_«?Å‚D »Û£*‘‚Žô£y\W9QªØVÃÐÖöZ{0‘¡¬h-ñ"Ú´›$gÑqT0 ¯–§„kœ£ã4ó 82YÞÜðõß rPúåÇíðCKÛ«ÄšÈÆ­˜°Á]QßTvB­þeþiGOt¤•÷àØÛJ˜·ÁÁCEH„u\ZŠÐ¸ ¥T0 ù,9â-×{ Ö’¦ÍÑfsjùN²V¹>;󓢜¬ô/¡8\&'±‹‰òwv&\üØÄ-m‡LEäçedäB.œ˜®w,Ü£±ÞÀó7¤BÁ‚÷àÙÃð9÷tò1"!6‹æSÀúêÕ×<‰lãGpåûÄ­qÌÈ)%ks«áÈÒ§|DNPuóÆ CÅW'·.S€G¤jíNŽôüйÆ=¦Pp³yó͇1._(à³ã'NV¿jh´ÿ¥©îÏ]M:,þÜé÷i]Ú›ëRØÚ9›×k„Bh“4‘DßõÂZÚ ””d±í#Uòƒ†óP[ýTТdwƒå¤fÁÖƒ­±L~ØË&ªä †GÐÜðTÑeXrGˆâ‘#-2²OnÕy”îù®+LI[î¿ð é‘Î…¼êy×#;•àÆâì›÷*áÛYWHŸ,Q]s Ú¸3oé ²ž|Äc.cŸ–ÍÛ¸ØÓôT’±äKßEw{fëJß9„UZuvĚе——¡‡Iò!Ú úVig\çt¾Rw+Þvp9¹´rØ2‰Œ$;ˆŽ%cQ‹ŽÈ¢Z%꣕qºýñdá]§Àr˜VìrÁ§Ùï  ¾+ø¬íìÅëO²OÂuÀ>ê:²ÈŸEKƒ«C%uà)eÑG4È8PxƒÙük³Y\‡chð;1œLÀ¾ÄYIœ p{>ñ=ìZëQ² ¤g´«ÏfŸ-KwNΪ3œ‚×j“¢]kœMcÚ€”WÃÉØóÈBÊ©öØzNþ0Ûc¾²ëÔò·ãÔãÎXˆörœÆå„çZå'ëú‘ºóÀNÕ)£Yq¥†kéï+ÃÓ¨aËÎy|×½î5òZÊápÇ=xGäx¬=Ã>Ìܶ°{… ÛÆ+Öa-—ã4¨Z˜OúÐ=¬^r4î&a@w¦R’êŒÃ½üç&y¨ÖüV-ƒU½G¨Ðn$ á´=$"Æ?NMùiL¾ÓgžÇC?ì O‹>9Þñ¿ãŒì¿O¨ò2|QÐÒÑè÷^h*p¹]¨´z)¥Ñ7a±©;Ú¢g¡Cøç&y õÌÛÛ©gÏI1¹ÅÏMìïîŠ9¤üüšš^@-ÅÃã rüw)WÏxUÃE‚®¡; …Iî­ jõhðƒ·èzD,Tl“á ´¶>&^ Öê¥Å/åc-|…9<ÆãÖ¼œ¬Ì{`cbWÓ9¿5`„Pl9TêÆq:¶Ë’|*ÃÛÿ¿;Ù§wÑ‹4RÒ’ Ùfÿ&Ø­P± †BsÝ7æöf×Cò¸|Zt3ãJ'g.7c™J–gKkÖÆ$ߤ vù¯ ïÓ N½zst›ðL¤â:Èp(¾,žf܆øÒµ—å°[§Û•©ÐE¦’W>‡šš/Ìn„±Átt…¦¦éôPÎ gô,Vu½8°?=®lŠ =û@Öuö°Ö‹›Ê« Ï ±ñ™yjÚ ž›ˆ/ñΙ³ÞG›Ø&ESç >.G§ M³ëÿ툑ºþ™«×åM%¤W(…›,”ëõÓŠ ¥úbZŸ&y˜vÍ…0ŠJ[MgPeJm²^»¹®¬UçXc¸ ±É4@$ lF»ÑÂAü'¯7?…ÓÜ“a·‰“¢KÖ*íÃg4?¾Jãavà;ØK~bËwÕùR–^J<Ú}OùÜÒ•÷Cîýü¢„ÔåÐit1IýÃèÕ\NxÀ ŒNìÐ\# Šv¥<é‰MÔÎLí¼N7¼ILkêdJ>¼ŸÝ—b†°’Sžò)äsíÆsàÎæ22$5t%À•Aj…ÙȈVh E§ÚdR¶ñÈ8 ïðùSˆD K›6çï;åZ“ø,ìÉî\myx^Lm¸qªð¹ÄB1 ˆ².GéŠ!•æ$RÂ(-Re¢)Pd€^Ÿ•““•WUõþ–[1çé”¶ÿèùs%|ãtŸHªh•VÐìÞ=%ÁÏÅ*õ¤Óì§ÑòG‡{J2¿ÂÀÝìºKÆ«ä7 O¡ñƒ¿Ã ±×Æ wo°ôaæÌ,ÒCd­ÎcM‚Ð]î°Ô–ÐÉÿubçýebû³dø¨5Ä’8$ãkï+„YêÇ),±~NzàtºMÇÍ…Õºø²Î^&ÉËzá¿ùŒbCúmàLìFÚækB¨Øæ¹waŸ¨’KŽ's»ÖZ“%‚¿ì[“ÜO; ¼üÇ™Ýf[C†v1Ä‘>üF¤³±àí7ÁL·YŒÿ‰Kß›ª)›rHÍH/Ä…‚ÚºÔéQæ»%p -£„3+s¯üDÕ[§w§„ÏÊKÏú;p%&yv9˜cg«à Tí×ÄZ“u¤™xâ²Û¢G#ÁËwÓY4tÉd$ÊÌA?BSóh ÀÛbåGS¢=ªqºQÒˆRôµ± Oñ~Hì\ˆeÒLuCdu]mY³J4Å{sŒY•T;r·xÍVng)MÛF¤öÈE\QþÞi-=ÆíÕ÷ŠvyY&”S’Ù§\©§’®‚#’³üÄ™‘~›<ŒTÀLýwh˜²D£ðš×·Kž=Ãì-EÏÎå¯^åãM×÷ø‘ÚàÝòæú³çÒ+ ŽE·Ñв›Ð¥ß2Jêéžñ¤‚îâ+Ò¡J ušë[ÚÔ­.ykDq2c$@lŸÚãxüyQA4$*iü)‰1»–/ w§KFêðõ³ÊZ C‹þHYSIár¼€,Ò[¿‘J݇tr¿4a¨Q‚²g÷“b€0’§‡+Òë©üÙG…FEtéÚè¸ø½ÎmoˆÄÞ:#Îpû¨Ü©4|Õíùæ¯-Ø(ˆ€ýú}©É©ûóÍG*ÊíÝaüº7¹J7¹ú3/ç™ï†{[÷Ÿ´ó+ ùÏSt¶‚ÍK¢ü¢¾ZR°ƃ«S¸;…¿‡œÌûÅê+hþ¿äæ© ‡ËwÏû øÿÇìÏUð—%àN>¾oÿg>üÛÎQV{­»ïs) ÕDµËäÇd ™9}8L†<˜ˆSpæÇtÎYÓÁ€=o™‰¤¤©üèñb¼MÁEA¥Þà îÜ, ¬Æ‹LF6˜p¤Q$Íg4„t‘ž‘ñ¼#®“Wí>"Š€¡/¾ÄQ¨˜t¼NÙØ-b»wêw‘ù{Ÿ…þðÉŽÂ#À]:çL»f¤ƒÛ ¥ Tåþm”ȶuCöìÙS‘Z¿#˜Ï›…R"-Çèøä”ý𤔠Âé”fÈ8 ƒ•0 ûí®OªN2&¦ÁÑø£! æÞ²‡p…¬, z”XªÓïýY#±?k$”,±>îs¨L9ƒýs)µÃÉ]ƈbFßôõÙ+rVçÀIîÒ=(S ÒBô1™âaʬ߬„e4›¬ ç—J~ ˆ÷i•¢·H¯T'@µ\7Æ}̘nçMRÏÚÝ ûôÚ±³×jWvY@ ÿj¸\ñjþp¿!|.¬úeú¸±ó·®š÷vrÕ>d‰ã¯¨Å±£/¾PTÂ50Ýäôsä¸à×Id!’DR™À›$B‚`Åg¤e^’7HÁT$‰ÜP]ž¤’.)Žô$ÙÖ„ÇFÙQ¬-†àÀ5°‹.ºÀ⢮Y{ I`S™†¬R*:ºmS©×‡Ï(JÍx_´¨oó1Ízb̶“㆑=?-󢈖¯6ù×LèÛD´RRu)4¬É ¬3J= t6gâ"‹N]#“b÷&ÅÚ„oõs\ É ûÓ úº\h挡eþ¡á¾›©Ï+nÁékTÜYÅæ ÎY¸­4;WN¶d°&K”ôjÌêÝ%½û(,-f–öî©ïm%ôô?NÒ5n endstream endobj 134 0 obj <> stream xÚ]PÁjÃ0 ½û+tìÃI;…Àš4ÝV·°«c+©a±âò÷‹ÝÐÃèé=IO¼jŽ5ø9%0@o¬&œÜL ¡ÃÁX–ïA¶*e5JÏxÕJ–#?}ÿÔ¢}­ÚKž½Ý®uþûãºx„ýV7G±LÇÆöŠ‚ðË:p ´ÀîC»_"öIÉØv·J$DÌÞÿâˆ6@ÆÊ2Ë')§qòR!I; +²¬„¢®K†VÿëmŠ®WwI+ó™‡U¹UÑÞÓš‰Ö½éÉQ\n,>ßäª`Âm. endstream endobj 136 0 obj <> stream xÚ­zt×Òÿ ÙÚ Å€Å&r +Ók¨!@CBï¦cÜîM¸a[.²ÊHrïU¶\mÀ¦8€©@x%ÚK¹k®_Þÿ®Myÿóx9ßyßÇáì9¬îÞ™ùÍÌofîEDYYQ"‘¨×âëæ:.=gÉÊ ã…“=°ñ…ª=ÉšïOñDüÝxNÌ¿gõE‰2ú’'õ¨·ðü±ðJÃÏÚRV"£ˆÑŽ?iìøñç‡D‡möñ°á1Ò~´iSÆØO?~š½C WØf· û%n¾^näöŽÁ›½"¢íGL÷ˆùdܸÈÈȱnácƒÃ|>9Æ>rs„¯ýJ¯p¯°-^žösƒƒ"ì—ºzÙwê<¶ó9'80Dáf¿$ØÓ+,ˆè*éÑm5¼Û˜Þ\P¢îT DER õÕêEÙP½©>T_Ê–’Rý(–z—z’QvÔûTj5ˆL ¡†RèáÔj$5ŠM¡>¤ÆRã¨ñÔj"5‰úˆšL}LM¡¦RÓ¨O¨O©éÔfê3ÊšMÍ¡>§¾ æRó¨ùÔj!µˆZL-¡–R˨åÔ j%åH­¢VSk¨µÔ:j=µÚHSZje7JDYQ_‰6‹þÙ º]Ogˆ¯Šµêa5ßê˜uë$ÉI,=Ž>Ì cv¿³ääwnw÷è~§‡goz:ôlèµ´×O6cm ½'õÖôéß§´Ï“¾lûÛ^”fõ÷‹î÷w¶èÝõï^oÊ{«ß»-£dKeí¢ín½ôþ•þ³LÐôõ¾üÉMá~—GɯÙûÙÿ}àÚA½9Ú5xÐàóC’‡ö84ih¯±á omAé&Ñó3Èû̃Ûb~?„E´wGŒäΗ­{9#BaJ‚::˜ˆ¢ÈêÚ²ÊFßíŽÜrpñJU59¦‡33k1%Ç’éWñeÚY ó¹º^È`6ï×6õb¡ç+a¯]FÞo~ß©o5Ôìj…]ä÷-´ƒ6·QŽëÐsYÓ¯·|Ã퇚(=0::FÁ Ò‡U'iâ! LÓ6|[§»}§ÑdK¬X|áétƒ˜±/3Þ]Ž+þ³.¼˜Æ¶I±:òì¤7´:-ÄCL·–<ºµëkn4&–E¸kUÁËøUÅ—VTmûjU‹ÃXÜcqÿc_«ˆÔeÊN}ÎHòR¢Þ_}ÈÿIû¨¬¥×Ô Ó« þî f9þŸ L# ‹ýˆ¾ßw‘ˆj¨IJRÇ&B(Dgm-V16¼†——oAmŸÛÖ£ž ÓEá!ý}ÈßbO„ïuõ -iäÊ  '#CoÐë‰ §–ƒÊœÅK@ &%]ž{ã{ÔCkÞýï>´AÛ^ër«S ¹ÿ×jØð2l,áX&zt\ŒnâŒ`ˆ)Æ}‘­?ZèC@³w Ù¨7ꛟ02™j£ŠK„ ó–cé:Ü-‹a ÌÈŽŽ`ë¸÷­…9Àd¤3åoöF±dóddáŠõZ…¬—¡Þ“¿IF¥V«ä miô¯#ŽáI€½ÏôÆŸã>Ø6¾KYUš:ƒË»ß~…¤Q·<$†› A¯îD¡œ ðN' .zötx³ÇkŠ /#'Ë`éõº89, ^êâ¤R‘àUwwõ*¢ œËŽ‹rQ‰Õ¢eìq\²‚&{ÃsÑ­çb´ê[^T^[[YYKÓ¼´ê(ÿž˜_ØîÄ¦ç  1¹IÙJ.Ô‰šDü÷?gËRãËevR.Wi9Æ!¦v™I´óʺ!æ]Ñ~HýÁ÷â¦_¦¹Á2˜ê>Önê øf¥Mhž¹û“ ‘ûá0|_¾ç纳éWà*ƒ}ðÖ–›£Qž€ûðœ†3Y‡KQKÙf¨‡3Ñ¥#ra&,†Y0O¹h똕ΠÈ&©ÕdÙCürQŒZÛû±•`ˆà–,šþÀÐed«¶*¦£öÑ$Làü$ ÆÛ°k×mh éâOOÐä6É…m.£gÏ~³Øx†\î…™ ôÒËìó§h<âN†ÇvH2álƒ­ÆMt<Æâ†¼æªè*_.Yð§®â›ÃMǹ·û“irøtýôUKð*ì'S*ɯáŒôOKjÐlë0Ij`ŠKâÖ”ä èÔ^Qs1hHêþÛ×fÛdõñôéý™O¥˜B»Ñ3özõñsžë“ŽŽ6sÙL?ST­¥ÌT{À ¶r–ýgòi>¢˜ ‡íŠP—À›5aºd]¸6’u):Hd¤Je&s{$×›æÄæ¹È]aV±ïW ©ì`CÊ‚Âýã\Æ?X€DÈæÞ½'×_\Þ…/zß»€[/€Ñ4ö#ÚG«tà¶HšmÐÒršßp÷íÇ–áüF{F,—Db%9ŸèØ,  ‘™’F‚4ü;Ö†£n¿¢Å&ôÞ Û6ZPÔéüj´‰E=¦=Æ·\c}|´–.SÕ§ÔƒzŸ»—Ÿ¡IO‘목šÈ¤ ‘óÁ6e:•'µä“ɱr¼ŸŽ†ä. Æ´ŒÜ¢¦Ã×  Ì›²¢‹¼ ž°ž‘¾_Xîîéº fÃÊC1_uF].0õÅæÊʳ_œoʦÉgG!+¹ôÄ<ùIå:óƒ*nÜÛEuyÞ_xWÚdè[I£ Ô§ñ W -*Óff«8Tn5mËÞyÂåË©¸îY*—¾Àeˆùüÿüwò¥tâ/XÌI;æ÷ºÈ ê/±‹!ð„ª0º~€æJÝã»$å÷eI‰7¬ƒ °ÖÇø.Û”Ñ>åü7—EGÍ?ßó!üs6[ ³r«%Ø´ùêR&Lâ‡Ý­ÍcQö©ü¼ÌŒ+O ô(c§c‘Âoîï‡å0”@ç¼oìÍáÒpÄx$ëpZEÁ­=_wÅ(úÛ1TL¬>±Uí‰8 }ˆ¦ð›ØMÛÔÛ¡˜9ùMËù §×Îá`¥çÆe¾Œi+û]Óþ68ÃÜŸxlüðOÆrmpnqÊMh 3Ç0Ò§+‚&;Âfà“ùÏõÏ7þà Q¹×«%ª<6gÑ.f¸‹zϨ‰j „¥v³ÖN›<çë¯;ýck—>÷oVðC7,¼<ï’À£ó¬?ãoZÁÅÀjCÈvfOVm±%¼P˜ä9ÿ°ûˆE6hò'^@&L;‘[¢]Ý#Ü`ƒûþ4YqÒ?NBsKÅq÷ùŒ…Mp*º €ÀW­åMÕvä7‡Ôo.vÎóO[ ›˜©›GMâ:ù¿¤XÞæß9_±úwÞíd|4KøÒöÖó(“ô··,}Õ!fI÷3c‘CJò›z÷݈©Õ^\ýº>¤ÿëõ™ú\CV&cÓžD²w½…_P&ªkwóƒÚ³©ùÚÌXˆ*5{tü,‹^ç±uµŽPe…~·¡ÑÒ¦­úˆõaæ*9õ9zÃ>ôž äþ4"*PÛ:Bé;ç`Çî}º²>š^q™Êz›øÒ»á+ÖX!±i_G8cB;-¶H~8û1aÖ0¾‹tt½!³•C}$>^³hÃ,–ßKb–ž= ™Ûã®ãw¹Žn•’Ë¥¼£’–>#´óÀ »»wþ.‡ÛÓ.aq³_eq_‰“6³^ŽªÐrúQËØùŸ¯6DnÓî­°´h±=ú”÷o ´þà(ú™Åèc<-ES~ErÄä@f<§Pé“ñ`ûiXÌR¼n;:('þhCk·ŸäîŒ/Ãà q )¦Œår”HC¦’SƒšÐÜz™w㺣‘>ÀËðd< »ùi`iYDˆ»ÅK‹Úg²•ô+“^ÔM‚¦#@ËÑJÜMÀ3å¸ß?ìÙN‹ø]H=–| g?ß½<{2Ì,ŽZæ³!2dåŠa„ Ú§ OXPývpm0£Ñf£YŒ\a_ ¹(iA¹¤…á±³ñ,ÒåÚ½„¬ì.ý0×ÿc¹•„I&+FqPФË=¬„´Kիаœ1K‚‘ºãÄ+ŸØ´Û¡­´¯Kè*3lóWÛ§³û^;®ü••¤ð^Í÷ ‘Ä‹=òäHw‹þ%ç•è)‰~£¹É(ã¥èž4 ÌŽE˜#¢mÚÍ KR ³ðC;ÝùñßéVþî)6_±Ëƒpw6dÊÑlzgZú7œ…öÖ­Òz| >=‡ÔÑwJoù"ZÚŠ­°4)x!ÞЀß®¯?Áý÷&”ááéZÿºÕ‡GÈ–âñDì†ÝÐGxZ)—n½?Tmÿêe®}mAÛ-`´Ýóíü¶Ñ{™«´H|5àå5 |‰:/Çã6OÿÅŠ7!BÀ»;v\êìZÂéÏ„R‹ Q.ü«6è/ÃoÀ1Rês¯rU‚°éàå9½SX}ÕøR˜F9 ¶º ;v^íÜ*”ž®¶âs¦ãÈŠßb5#+4ò–A#Øqë×p*˜>Ç™¶¼mUÁeÁŠÍq.ç—Ý‘? çr/é³)mgøåtsœ"®qÑzéœÜ&ÞHÿ ñ¾$–JÞhÊá§°h>rÈÊ:tðšÞÎB‡jü!Äg%l&_лtdü‹MLLNÁgp› ÿ_€8‡& X7´—g$eÇC‚] 'DvkØ­aG'»Ñ«aKZàâdkâd2žëròB¸£\6L¢‡ûâϙ֕Sü6z;üÌÕ[$>šñàî9ãí*ñ%›#^šn_ÃW^#UûH6ɤRâñŒ×y¤¡CÀiˆ ˜~¿¡¾~¿V0‚­Õr¾QO#Õ?º¥Ç§'å€].³Òr‘®½—Lßq^òÊø&ã·°sçß éñ|å+àð I(€.%wœus—7jøi5b´µ}"›”§ÓG•> ¨•B™®PW¡Ñë Šé(ý ÕŠéôT½.MÅéx(ËNÐë2)€ÌR9¿Ÿ®†Ö§$|u´~~ @ôSp ‘w̤I@(ªÚ§T‰Hª»<·{¡û,rÅ£ s/Äóð‡ø#ìN²p,梅h4š„œ9ü#þ‰ßÿ  <4ìÛ·ÑàÏq6.ÁL'ï"ÉUè”ÀÇwPëS1ŠDgY4C‚z"êÚã_Gü„?ãçÿRtþ"r4¨˜E]Ü|G‚&ÁÀ N€)¬¼r®0¿`ÉM<œÃ{ žÆó$ÏwÖ‚W™˜hZú"h†Í;| æÃBðhöjö9¢ÚÌ•âë5/'¥:I—¢úÜ7:ŒtÄÉãÄÿ ‹>½¡~U)iÛHÁ_c{´*ô4úöôš*éô„—±¸ŸeI¡ça8nwîðÉ+úLxj†³^*R;ò!½TŽ6u‘~ èt) ¾+eµîÍIÄ‹§L(‡©‡f_ ÉUL8GZØÕ)ÛRj¼ËCsüÀù|ýœ)\ÌL_³ÅaÍi]£.'™Ì>L<¤D˱)¹dÑ2sAo4Ö²l>ís‡ôáïüð+ê&—^€Ç ®O)#¸{“qvZ9rh5šQÖ”e·mŸÆv IV>¾M.¬G£¡ª G[®%D0ØÍ7ˆóF²'°oßÓΑ̃Û…,'N*(IË5TC) (ô+À“;‹jAë½.2k·dËâA£>ã„»›ÑJŽïû—ÌڋƃÉç¢áîƒb$1–A6ìbкö Ùí£Û¨Ýì»Ñàó:»©åí-¢Òöâv-hª®ýVÏXè­‡.4p…!TXܦ+%$˜¬QiUxQÇvä ªRL vµÇÀ,l®™ ^]»6ÿ†Wà…¶v¼eF¥kò¡ ééŒÍ‹¼.y%/ÂÅ/y%Çvçì"/P  ZÔ%ïoº2?ˆ•&™ÈÕá.Ãññº4m¤Ûm;Uòæ\ îÂúcPy>¦/dXÞá€'óJ2Cf‚ñ­k/AZjž7rêh—“Œ‰ù@ÌÈLËGÓøtú¤#£ë¥]×[æ5ÿV¶¯óÃøwYôÚdªÛ^wG¨†ž:'m˜ÇFð誆&A)Q«MQb ž!Ã,Z­5¦fAšIÑâÝ®¾šÙà°DïM¾(¥@iJi0ZŒ-2<§ÆEnv¤¡×·ꛎt&%½ISM¢,Û˜–™‹!ošˆ“ j£4v ˆqF†ãØÑÒ5DÑkaKúËíÑÍ[bþþ&Ûtò«´:xé߀—þm.ŠŠ”ƒR¯Vái¸\† /Srˆ{ÓíÊÍi{;!œ žn›ôndy ý-d)‹B‘7þY†×¾•I"èÏ49;åh5mÃ#ØÎÿi5óKH•ÞÓ>€’2™"©ï«$ÊÎ|ÊDÖÛ®¡©$'H:ì:pŠtl“åï&)Fe¤eNÆò¨ñBS%ÂÌfÜõbÌ.ê¾KŒ²°‘Ý5ê؇»ðn¥…SUîù@ÔYfKX_z^Ò?‘™wd«bª}¸HˆKT©tZáÈ™ÑBAšê2¿;õuÞË£ÈÔ´TåÔ™¸û²JçÝ %ÕU±ê÷Ῠڃ¨:©=‰Åx<üsÌ(ô`ÈkU¿ëT’'Ãç«$1\iб SÕÝ ÷÷™l[.o¼¦œ½`–B·¾gÓ<ªÝZ)?YpM~4Ì‘^¦Rú©÷¦sȉ&”¿Ó§Ésçú¢¤ƒšë´ °,¦ª¦¤ŒL y©õ›ôÕ ûsIüì?æ9QîMKwZ§ùB³8pÖæ°µàÂ|ò0ìG¤œ}»J[™4•N™³Ùyƒ{ÃŽ´Ü@Ó2„Ê 4)ËùÁ&äÝbûü,*º!ÝŠfñ½XtŽÆC”Öô¹¬” òŽfZ¯Ï*¨ne¤û #ZÖ_$±Ñã÷_‹¤#a iùg€«Sl4cÄE,r§ ëès‹v=’U {¡1´Ò«ÊݸÜÁ[»,ÈyK€—ßjpŸÊð¦¸r0B Ñd¹ÒŒêï7™m·ß@kïÇ §ï  M¹ÞrˆË†Sºw*â™Ð’Èšª²âmßÎÜùî;Ž´}8é3ÜïÑÒµ¾_‡zæä$‚†K­Z« »0Á›ÌŸüšI»Ñdy§ÅŠÞ®Ób"ªè,˜úaÐhx®µ…þ"9s¿\ºŸÿý_íÇtP£kÕjádÐHÌbé¯#`õiØ»Ý\Ç r+ìFC4h•1®‚qUá;B›5Ç š 'j÷–[vÔ†hÙjqÎ-D¿4:°Í6ÙÖÜ@Ig:ÏX­P:›FÞ4oæiîï)ÇI[XT'1¡üÑꇤ§fÆ Á}åÄæ÷ŸB4²Ù‹Ä¥9ɆTÁf•6ÙwÈH„õà±-¢)ðK8Œ :ÞußòÑÍ,“Y¹[ŒæðsXÄÐ?}ùåž·ßg5yׯùâã59Lÿ·+o¹ŸB—Ä"¤:v¯@+߬@Pa[Óy ;ÔÐær\ú‡…¡YìGð¸BÕúºBsV^EÍ.`nÃðÒÓéü·†%'D{OÒ ¢¸lgp³¦˜gÏ^–CSlSXEãöÆôÁ¨SªS•ÀÄä'å”fV'Ôy’$uQ¹¹»Õ»I_8vîÜÏäàbò2o‰ßí¾Œ´‚€|/Kä²Wð`æË›{ðöíhÚcd¾’ÜBV0yõçëGÊ».²:ÃI„ºE^gŨÛ÷ìK ô ÕUmÚío®¡Ó¿Ÿ?zúTîê•ޣ߶n-¯ÛÆ Gn% 1®Ø¯lL—e1^ zú¯)±·¶ ^Ïm/=ÿâŒôú‚_Êb{aÅ7Ù*º¦W2êô‡ • ]2¨ÓwÊ¥¿¥ñ;غ°òàEHhˆ)ÔRc.¯#y»™Š~âÃ;÷õ¸ßöláÒåz ;v¾œ-‚=íœ4y—J*mh~aZYT3UÑeÁÁÑ‘¡k»ôõé{$1ÛǾå¯ì ÇÐÑó3â篫'‘U»m—n×kÀžÒ§\ØâÑvQ1ê(²¦Fÿ•¡¼¶VW+¬ñxÂR4O¦3¤f2I;"'ëÔÁC¹Påƒ4ñì³Ä'T×R]Žâ!2.LɱŒø74ÛEÄ‘â3bôEûBö_9°ø?ß-Ú´_ìtƒÂdÛä¯t?™ ²¸œþßÄÂÿEÌÄÝvÈu†Ùà伄‘^{FTÁ*éþ.£»nbßè.Ýû¡øÛz¥Äå×Jì}©„FiæÇ›D„·ÝóþÈEý†?ǽpßQXD(ý}4©½~ûI9ŠXWp)Ù¶NB#ì„Õ{ª÷µ–ï‚=°[QåZå +À |`µÂEáì´^¸hÃk,¤áíZÂÌ/«ÝCRíz²g^FÁùL•‹\z­Ã÷•IÛõm†ªêƒ]Ã{—éÓél:=¶eõ÷oJà¨GØJ.}8Ü\"¤²(œ®=¸¿ö 0NNÂÖ¸×SäàUÒL žÈXÃW¾Ôf”™4]•èßç$‹çýgéü1í5ÞZú0¾ÆýÔ§S…ßÅ}C Qü4ï6Õ2FÀâ4øG+ÂããüCœ€™½ô©=ÎݸøCËGkàý_yýù™ç·¤—ѧèGu£±üuÄK÷¾‰·1þXúQËï…;%0è4ºÈe‚Ë·šJÌyuuµ®œôòlð™çJŒå”&þãRÛzsØ—(Úñ¥ôòDkX“úz,ÌaÖùzÌঀϱ¨5ùº´ÄWS¢¬kJL½¾´Ô@Ä””îqÛ«+'ÐÓûþönKÈó«óÌrË"Aå˜;?Ž3 UÍ·8Ô Ò'ôIÙD½®Yö·®Q6•ÔÞø:1I­ñªq‡­F¯ùŽrð- ®V0Ò;u¡5ªïâˆÖ2Rž‡—¡` šZ&úý,zß,FÂÿlÁƒÑâ0‰nZ ýH5£ø×Ò¸÷ƒ„Æó5çOsÇÂVÑ^Þóá^1÷ªã°ny•_Q|ÿ«ì yÓoìEˆÆÃßôsé6Λ=EÝÚÆ¡_þr4åx=Æ£1œ4ê(ì©©.£*I÷>™ù81ÿºÅfWï>#p_„6H¾É#p_“.7‚LrIZµZ9gɰªSåwŽU;¡„L:GmDˆ‡>PX~ ÒTù¤ô!YFœ!5ò!-;-Gǻĕ—'ÿDwØ’–üAœ‚ˆS9¢„ïu¦hhSãÇãlÙT§ÎÓ sLõN(#Ò‚të´áA]Òš H›Ÿ®Ê ÌŒšŒSecPYªÐU§½ZÝ©›z¾s¨=yš<d‹ÿ¥Ç“Ý é¿¡FÙÜ”¦^Ù僱Sß—•F”ÇëÅhJ`·íر¿²ÊÒØ\Ø*hª $ãõC¼°s¹6+b!61>Uµd†lÆoIÂì•a……Ùe«u ´±[œô!Âês ×µ.{„YÙ‡¸ÇÆ˵[„‰±Ê`ÑWÕ¶h+…¬USòIgeª­?ùÝ÷ÃeYÊüX‚IRÒÖaTܦ?j0UïÔmë:O6DÔvƒ›©ä&¯ .½)æ'ˆ«NÔÁ+F;‚x‹®(†°l¢N›š0 ëdXŒLêmA­ª J¹.mc^yôKá(ÀêÉRããüTñŠUÁsP¾£J,iY&(bª¢Š""ñÎ->¸SÐ|¬ò˜Ð¥‚™ïgµ˜Ñ×dl|ŸÊfç Îaò“!šÃÈØ8™ŒOJ›HÚ1H"Áu½’„‹þT»¸L¢ ºA¦ÆedjLÂÝ·¸`Fh¤%„ôiFW‹y5ÊbMjmóbkç˱â±ÂË?cÉK…‰ŸSŒ‚r3LìžG[ºŸíaÊîÙólYÏ^\w«)e=ßA·úý?ÛˆC endstream endobj 138 0 obj <> stream xÚXXg·ž¥ÌŽ •u¢™A%ÆXc¢Ä»?(Æ(vEA‘Þ–»ô~–Þë.½)¢ØÅ±,jþ,±üñÆD11USÏšÜ{¿¥¹zËóì3ûLû¾SÞ÷=猄11a$‰ÙRûµ®[öÆ2;{ûÙ³ Wæ%¥þÀ³5¦ú±Œ~œDÿª‘^0Ö1y•a$E#é‘ùk¸áøp„á8ž&€9c"‘pA ˜5kîŒY³æ,óñ •»¹¸XMÝóºÕì Þ™n5gÖ¬VK¼œån{½­ì\½艧ÕŸ=nΡVSºøZÏœ<ÃшÜeÑëÓ­‚Ý\­Ö;û;˃œ÷Z­ôñ°ZëèålÕcôŒž¿e>^¾Îr+;Ÿ½ÎrojíÐñÆSÏcÞ‘X3 ‡­¼•Ùn´‹q|E)a#Ƙ1aLŽÄ f†0C™aŒ3œÁŒd̙ьcÉŒe^eFd¬˜ñÌf"ó3‰™ÌLa¦2¯3Ó˜éÌ›Ì f&3‹™ÍÌaæ2o1ó˜·ºó³ˆYÌ,e–1Ë™ÌJfóƆ±eV3k;f-ó³ŽùYÏl`ì™Ì&f3³…ÙÊlc¶3;fó#¡nf$»D£}F‡þÓ¸Úø'“™&ëMüLMþ0]ez…Ëf±W¥–Ò-ÒZNä*”6¨kðÚÁíCÞrvèÒ¡ÉÃ̆íö—™§ÙÇç¿6B>rüÈð‘wÌ—š+Ì™?‘•6ÊqÔM~:Ÿ>Ú{tç˜Ecš,æXÈ-_±Ì¶¼ùŠÍ+-c-Æ7r\主¯ú¾ú‡-Ü]Äo­>0ƒ'÷5úñj º>1Æëúvþ¼SzLŒSâ&Ü2ÈÌT•ìMuRùUC„´ìÔ–ÔT×U©Î¥_€ó\W¾Im`¹O` Oy`mmyy­`†wñ”ä?™ˆ+MßÝûνõ×ø´SnÙÞQi» È. •"-¨ª £TUÂázÜý¿?aœÐ“;p‚ZÒ¤ßf¬7Âwø±ùMÐÔä ‘¢ [Š“MO÷_pf QšÑ쟫KOHôN‰Ta¯½ôê"6Ò\]› _ü'J&›në¿p˜ 'Ã!R¸ÐÂ0Ðiu©ùÅhfñËËnpd4~ÍÿÒ½Èk¬Ù|Íeí­ûh¿]{Ym~éÚêÎ/µ?ÝZ}Mö—ObÿqÄ1Ø[v¬ŽâÖb8OR‡L§rÅÙÌôÜl¨àjýK‚c\w 0ÿÒ"䢸}Òp7ÔCU±pHŠfeg¿‚hõù‰Lªádÿq÷J÷'žQo‰ŽMˆ„. $¨FS™ß,Àgö7Èà\®YZ U^ž œ¥Ä(bõû°ü3 ƒ =¹“õ¹›ÂY8}º¥=—3à š lŸòÄ]‘_«•éñ[}<ÿÙ¾f'÷P?_u@½ªTàÒ!&^„¤e wÆ&D'@8Z¢,¬ü]‡æ‚ÙÍ3а%:c½ÍFŠâÒCóɈû;ÑОB_ùº8/+ЏìµŸ7ÙM,HŽdÈÉÙM[Ï/½½¡¸ê u¶Ø·ÖA1þ†—yÀ!;¹žÙtsq›?pòøàXyqI8ŸHŠÈ<°…)ûˆHÆÎRЈ€‚‹Í ®ªÃÝh9‚Ù#M~y|‡_ýTmþ‰Þ‚,û<™¼ÖmŸºÃ±&<²S”‰P™“¬’—¬ÚïWˆÌe‹ü¬‚,(£ž×íȈe©Õª¡Î2ö»»ƒ{ŒÞ*›T?Â\µPæ$CpÁ¡ ¢¼ø‚8”¬³ ̺ȸˆx¶LïGÜHöK±oËpß¿öS÷ëR>N®æÌîjð½\D½î0Æ3XÉã„~œ“ 8‘͇&W ØHL$¤Ï±‹ÈD6\›èÃù‚i:KÈH9îÀÉ…zlJãv;Â#£“B ˜S…•4þüi÷Þµ'ÀËùN¾_È„,UV*ÅCe‡¤M?ËX¿€ÑoÁ§ýl1)¡«4Æ;í|³Wµ‡³ÜÓs_½_㡪†âY€ZrI?ÝXïðl8ŸU¬ÈæJ%ÁB Ä)â#È­´ˆ OˆåB‹ÂÔB9depfQZ}¶VrF‡‡)Œ¼ñk'ábDL¦Wˆ-Yû3ƒFhò_A[¸’lþ=[ŒSq²î§[7;^'SÈT[2ø=j£Vo¦ý™Æ3¢èšþo „ñ‘ ‘ÎooŽ IO JN^šP$”Á‘Ìㇸ.ëYÒpðôª‚"ÓÙ¢*¨oð‡pqKmk»‚çiÍÏunÒaŠNöÖë-yWØçhз8éóH9ëã!’2i(4 ¥ž‘[Óx¤ôp²?ïXjûîòÞ}`u¶Ï…ŒŒì,PsuÅA ¯˜½óï¯@ùÓ#4d<]ô#,˜EiôÍZÉqÝEšaúS)Õ§Ô¸wmçS2¤ÃúVë÷GqÉuÀp²œŒ##Èò² ͈%Z=º±®Ö¢Å0H‚èhWç(7à3 œ€¯?ýù±NDW¬åV“OùŽWîÜ?yáè‰ãZ[;¬ßmàê¯ZÔÝ•ÔèÝQ§¿ËÇRª<ÁÂ!Æ™ ëÒX(!â“£âã£i½óª†ág¶´’r-\ÄŠ_Mñm¶b¢©K0¥n%”Š?³%ÕP/BABndF|Z (¨9Ëô¼Š½Nt¦Ä‚¥{b´æ_ëP¡Û®£:ùeŽd¿,·swò°™&¾ÆâFþZùñsÐÎÝ\{ $ˆUú—g‹5]JVö›/.§»VSD` ‹¦W:Û~ݺŒ³!ù<‘a ì—õK¶í]÷–Ø+q-:ü䊱>¤O—BÔ¸äDHŽ»×îTo¡öòĤ[ôV#ýÇÑÈ}Õùh¿?D‰14ÉÞq¯[û;7kÞï8 _ð{§x.ì,´N K ¯® 4ênTj%÷tXª3¾¢G¾×Ö"±¼KÈ>?C'Çw·a5n½þ¹_‘æ ܪ°1ãùÙï2¯÷Q±¸¦+©Àµ8¥,ëóÓ‰ú̪þ.gü@xù¤°½ê֦à UWCw4¨––,» _rŒÕø¢®)¯Á£q¢ÍÛ\k"ÏDž…pÚᓼ“—òïÁmhŠ)²Ïß‹a-ØÁò¨Qü‚æ€Á\£Å$­„ÊO2M 5&4¹›?^òˆHE0@4º”„ ù~åAŽt¸ò*ó(ñª ?ÜÕÊ5JP4-A)^\lò¾08y^€«SY Qæõ¶ñæç®cñuçë²ÇØŠ5|müÁð·y÷º…‚lKßSãX“x4¥4¥$¥Ô8C™‰…að­§ã@faNc‹—6üpÈÝxØ)Â5—£‘N-¾Yï•r²§Ö¥ŽùÎMpÊòlëéO Eofz¦æÅ«û´Ö¢Gký!!,ÖË©ic¾Í„ñâ…o‹ð“6_øs²Çé)?&õq¤Z‡–:´èÓ8‹—”ޱ¬{l¬»¸TúüÎy´ìRn–ö ç’ÿVCôª·ue( tÙz¶¸ª¯„ðpJ¾e­l6oÞd{î¿­7HßËžú‰%ÃÌ|òäÁ78\ Ë´>Åkú·žØÃçr¨'(åYkœ­±¬,‰ýt×°8•\6%«åÒ—«?®fÍækŸM¤ÉéF<Æ÷—›ž!ç¯ÕRÏÌèÚ (=ÓŸMdŒ‚8êÙL>!7¶$NÉŠ°PbÓ£Óâñþ_«,2¢³ÃÊé^TR*BvbnR&×·§’æã³ñ|wè~ýFNÿk"™>àܦG Í¦÷¯Óÿ‡é5^k¯ÅÙÚ'Zó ºÝh§“éùrÏÓ)‡€«í ’#DgĦqè)ýtã}òÚîI°ÔK^)AmŽª²U*uj¡ªèdñ¯sžËEÙ)²"‰ ß op+¯Úþ,È‚š¡=ëT…kùw¤”0A{C] ƒ˜ÓÃ"´~ÕŒ“Ò9ƒAD-šv7U™:™­õ<ÚöÀni‡y¢+“ † Ú¨«YëÇc1”!’¾CŸóãxQ¦Ø¡nžÙjrSzùÒù«·.-}ë¶+Þs}xÚÐíãgZÉMúwë÷¡„¯õ†x!¢“ã‚ã#Bv,îíe_Ÿ®E)ŽÕ†QåZ¦¬®RSRws"8ÅqsÉÐo'¡9Š~,é è'ÝöìµÿÏ3¼ ([„›}xWŠúLöÈVÖê^çT¼›²SòÆt"##MûºÑGkjë8ô0Y.Ýà0Ñò>íü¾ãzÇµÖ öÝnŒ»‚£´’ :¬¤°\ˆxM4#»úG2š yc íVÍžNFJäSª NŠtNРܲ1Ƈ֕Åg¿âTWøÂ›—/tíðå9¯u——v-ޤÀ[£ûá1fêYÍ Úì{çŸP/$æìmRW×^yÂß]´ó-aÓi·[M}JÚ'hƒ*ûËÎdZfB¯à’‹®àÎ+æu—Bth¯;|éò?¢P‰ËùާÎ_<~üÜGGwlZ¿k×fq¶+Ÿ–|( ¸onÞ BXSV«É¯L/PeúVÄåWR‘_WÒ°QŒ‚m);ÝÂó\Ëv÷æòÅTëv—¸…p2ÂD…Ç‚¸Ês"—8ÐbÅÍûm-ŽÂQ¿µ)@sè™-5YŽå³[ÁÆBĦ* " £ SÔ é©…é¹!Wù)‹¡4§±Q]Uœ7ëDS˜·kñî)ÝóA7 Úžfæ}<É?Ýrl¡ðpp ápíKP­Ü5`ŠšËö5u»pûäÖ¡³ç }>HðÞžšD|sÀSlOÞî>1Gç'+u´â´ë_镌 aJÚɰýÀéþÄL`eOõÉ/ùÌMB´ú†¥OwâÃâ¿éMž/>‡}žsÝõ& aàìçêëìIÙî ‘©ŠTU]WPæýþp'Ä¡×è<®ÿå%ûõ pE íØZ0›Çá(5mÐJÏФ²äm2Ýë ªm¿¶v)· PdzͶ»ìç·h"göÌËÝÆî_Þó¿õûÿü»¯Ý)M}~Àù½ Ý› {­ùù6bøÉî¢D?‰O®†Pà ԿǶ·nIŽ=ø?¾Œ¸Eì‹ó´LaÊb4qe30΢êå9h`qy– Éb Éòro{—dE ¨2²¡€« -•û†…ú9ØÓ*<h‘ž×VéþŒöŒ×¨iY,áBˆ@÷ U;û‡ªjL•’ë¤5(8% Â,ÝÊ¡LÐgË3A EÜ¥þϊΤ\Jê¿Wúß endstream endobj 139 0 obj <> stream xÚ]P=kÄ0 Ýý+4^)ÅN†N!PbB÷QÎwCGÇVRCcÇòïû $ÐÓ{’žhÓñΚô+8%0Â`¬8»%(„GcIQ‚6*îUÎj’žÐæ$ýYNô|¼/Ÿ¯ÍI|ìí~k‹wÐ8<(·Õ#”{Ýq±Î§ÎªŠÐë6qŽa…Çv=¾$ì4cG8Ü‘±xÿ‹ÚŒÔuW> stream xÚ%ÏMKQà¹6Ùh-J»«H jFaD_šh›@¢ávÑDZñ–-ÂE)D‹I¸ˆè'̲e¿¤]ËvgôH5ƒ‹óÞwu‘dY"„S‡™Ã£Ý…D2{²¤zÍzé÷¸óÓnõ;3’"NØçÌö9Srøk_þS|!I’~Ç> stream xÚcd`aa`ddäsvöuwvÕvöõõ44‰Øäüîû5ígëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–ᣠˆ|Ç"_ €Hu Á(!ÄÀÂÈÈQVÓm``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*@Ü®¡œós JKR‹|óSR‹ò€Îb´:Ÿ‰‘‘EéGß÷ÅÝo½aþî³[tEñüâ¼òââ¼Åå‹WÌ_¼XޝlÁç©Ó¦}/XÀö;a*»‹ù|ÎI<\=<Ü ¹Îp/œÄÃóý¡³8cƒ endstream endobj 145 0 obj <> stream xÚcd`aa`ddäó òuŽ ×vöõõ44‰Ødÿîûµægëi†2Œ?d™~È1ÿg‘{èÅòŸ‡I–ᣠˆ|Ç"_ €Hu Á(!ÄÀÂÈÈQVÓm``¬g``äœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*@Ü®¡œós JKR‹|óSR‹ò€Îb´:Ÿ‰‘‘EéGß÷•Ý_~eþr@tEñâ¼¼ââ¼¼ÅÅ+V,^¼BޝtáçiÓf|Ï]Èö;q»‹ù|ÎI<\=<Ü«¸.s/™ÈÃóý¡­d endstream endobj 147 0 obj <> stream xÚ]T{lÕŸÙÝî e[(²Z¢ì¬ z©­°pƒ‚"¶·”K…B±*ewaÙG§Û]ív¡Ý¥³ßL»ËÒííºtú¢¶÷ÚV„¤*š 7¬£ñÏhLnÈýãL=ñL+÷3“ïd&'ßïñýΡ)Ž¢izÑ »ž)|vkn~q~iþ‹úk]'nþåúÌÉ4åAJyˆV–k“Vy@·œ¢è¬,R)e‘Z¿_¬Ö¿¢ÿn ¥£i6”,–¿®²XÖæ{¼GyçA‡Ï¼Òšc^³aÃú<óZ‹eƒy‹ËÎ;­•nsq¥ÏawUúÈÇas©Çê´ûŽšWnrø|Þ«WU•®êUþàS9yæ€Óç0ï´WÛy¿Ýf.ô¸}æí•.»ùwÖ«~_ó=.oÏΛ‹=6;ï&|ÙJÊJÙ5NÊ­©¦j¨#„ð3TUHm¥Š¨¿S%ÔsÔjUF•SЦtTˆºKWÐ×4/iúµËµ^í´NÔýšvAiÊTf@F+dt3I(¯kÑçJÜîŠÄCPB8Äëf×d‡¼Ç*žXžIIƒbªû’4¬™J©iÎ@¤‘oYdÕ§J'„—yÂ1Ïô‹ïIÉ‘1¡WÝ\ 'cÁQg!£—èDá´Lå›:Y Éôå;Ê¢^­âUìFê…‰§Å¹Øˆâ<œ‡ÈŠrÑýŸþ÷ë3p:È…Âѯ+Yl9ÎíGÄ£Õ½¹á«==ø>©Q ·Û±=ÉtAâ„) Q¡á›©¼EÄ‘‘m€FÌ4²ÈZ¥VIgwðú©Xx?7«eöGÂE&^ÙË ¢²4^ gT¿ˆ—F”ÞiçPñMæV{ ˆ“Ñ‹¼¾¨>°Åô7´A?k5ÝÕ#úm˜fe}¦2LÀÜäË#`U*XáŸÁ˜WÅ«’<|]TzºÞäЦ)æV›Û<ʶ‹©åÏ£ü¤G|¹ëT”cŒ6ËhRµ}1­Uþ©ˆÆ?¨¶=Ÿ}`¢,µ‹HÈÁ÷ãtü8ÎAY8Y¸Q¸{ûLÝÐá6`É Ïr(k‰_1ÉÌ!Á­:¸†|’¹Ý²r.|PmõÕn`·ã¯"'±?·’˜ÿåŸÍÏDoƒ¬ØdU½•(ÅÆ ±ØG¤µ3ºG¨ªÚ#9Ikæ£Xd7«cöE"ÄŠñŠÔ×wEQ­(ˆÄ.ps o3€>Т݊`<Ù!À¢ÈÀë{a’ìlヲ|Òâñ¢”<{)*«-òáê9ý´֣©Ù¢D¨â°¬N÷pÊÌ9¸:Møø£B v¯È«|¦¡ÌÇá7™Ì™Eu}J°Ouõ×;Zås”0¢’ÅÅx%12/&5eàtô(y2P:Ê5á$>e,Àšk¨=‡ô“S¢´r\‚˱fg7?û9TKÄ,¸êïhÑm4þçË÷oOo¾÷Þˆþ^6ÅkR*õŽ0¤ª)ŠÄ'8ôÓ„ƹ,ÜУ%°Ùjƒ§ðÓ$t{É‘jHÑ—/£Ó—µÊÒ?d!Z[‰œ¨=¶ÿkoû~`-Û¶>ÉAéð¡öú!WòÔþ·‚­Â9ìT¿^bËm» MU°»eßhÅhÓd´?šh›€ BãQ?ȇ†VSDñl*k=Û¬ºâû7°?_ÿäSÞ·ƒxàµãÍO$ý1G",•'Á{i|rÊ„îƒà-/Kn»e†çç‚Æd5/Û±ø™;ºS¨©)•\ê|>l ïã0‰"¤à™ŸmDZ ÇâÇ,êaÄñ¾ÔE`e†Ê¢a[ôüªõ f×=¿ÕõH;zÌô¿\)¹7-‘æ4@cä¨G½æÄw¥Tïxô¼jº›¤þHW]^‹¼¡®»hyöècÝÅ9ŒÃQÞ[!TŒ.¡³°:ÖPߨ°éálrsl‡´,ƒîÎÖž¹íÑí‚ßk焼 ‰ð€ ™ðÎlÌàÕnû!ç6aÏÈÒØ7|IèT±R¨’ÐhëJŸz}xœÍ¬I)mÈÔOéMéºõIÂӆtѰð|úôB9n0Lw2”Œ¥¿È&.½ endstream endobj 149 0 obj <> stream xÚ•W TSgÚ¾!äz‹âô¶0Ú\¬¿¶UD´¿ZëR-­‚Z´nÙeİ'–åÍÊbBÂ’° ‚ n£u:S-5z:¿¨´Ú©g­cÏ8Uço¿Ûó9çü÷˜Ð9ôœNÎùNró}ï÷¼Ëó¼ï¾¾„@ ˜±ûýí‘ïlX½#jçÎ%áü³UXÁþóÇ(;‹`g Ø—|X±}ÑWü°]2Íç%‚Äò«ßtn%¾›Á¯/qK`ÿLÂW   •¦ðð×ÃÂ×FHrФé©i²W“^ Y²råŠÐ¥áá+CÖg¥HÓ“²C¢di)Y 2îGfÈIRzЬ(äÕÕi2YΛ‹„%d“HS×¾R.K ‰I9œ"ÍOI‰”dËB¶&d¥„Œƒÿ!ÉÊÉ“¥HC¢%É)Òlë´WˆED¸ Âg±™ˆì'âˆA².E@3‰ÿ"æó‰×ˆ…ÜÎ0b ±Žx›ˆ 6‘ÄFbñ.wn ED[‰mÄv"†ØAì$Þ'v»‰=Ä^b1χ>Ä*âÑI`A®à¢ÏAŸ#…ßu¾%¾¢Ù"'9‡,#O9I½KõúÍó;凧žõô×NMKynÊsò¿€øé~Óµ3Ð'r¶ÐzNÈl­Ú–ö~dŠJSZ%T©­°©½xÍúþÚâƒE™21dvôZ¨ÔvMð.d3Qmí‡þþ4(cðu², ÒÒúÁÊ(Ýl­[ðð:úíU!ÛÍ>O#z Ìó¹O NÀA¿Ÿóz ÍB;QœÛñ]úÝä;OQÔSr÷ÆÀ²%xAŽžÏ€› p?i°¡ì-ZoÑ›Á@5TØóÅÅP¥T«äÒØõ*¹._ Y”ÒRÜ!€Á¦£®Èg˃BIydHºÀÆ #éè€c](e–“càþ4,d¿ä­šô5œU{yCgµº²JY­R««Ò{ã÷…Ãð¼ïÆâ[˜DÓÑËFÓÝV•#›©€BPÉr°paq&PË÷Ü{‚V#Š|˜A¸’g˜K•éóމpÄbê xWn›yMˆ–°ˆþ¸FòÍg Q)Ï…CÙÐÀ $Z€f¢hóÃ>Dã@n¥¿%Ñ/jðR ~ùu¼ ÿ‚ %9‹(ÏâÜ”iô©«ÖA5%uªmâ.0ÛŒÍO‚ õ çü«Ó4g‚VQOáÈ>'BR“W• jêpsµ]| 6S«u8Èè#w¢;âg~d‰t Xû(Ò4/R–!ƒÞ\wÞ`³^ ŇEœZyµT¹!7BÌw£œßì9º›´wŽ¥û“Šœ13-d> ©ä1t@ô³{ø»³É’Üñœú“öñœ’(_„RɃ8ÿç÷ðy׸wï Y5¦Ÿlè„^ÞIoö:y‹Üø,L¹%:w?W@H]&Sm ¸¨öB‡¬@R÷îÕ´?‰Á——m7Ç“ŠZ9{—xà½Ý9¼½åàœ½žQà‰¤B2ö€õÿiк²AÅMQË­Š¯”¶Œ®k²ØÌ6JO®y–-*ö¢¼í‰Rä3·Y…¨‘÷Óã˲ƒB²¯’íÏ~O‘FéHÍ…xT«®©h.† ¶ñÌàí¸Ûäf¿d%"=i̬ªýÀú–%Ý”kÉ0æwq•Ñö*à ç2N¼Ôå“»#0±dérÆ‹a˜ B“‚L“@ÈÁËJšvoƒ`<ûLÁs±ïo?`>„3Î]µNŸ^ñéh+“dïUÑïøð&|ó—;#Íó¹0VgU~ X¹aã& ÂìKèy·àÞ0êá0Ä£ôQ;üÍí{á©8€[EwW#záÊ½Ž†Š)“šêòâÜÄ €Š^;ðwÆv‰n»vmh¨GðÆaÊ@««â‰ƒ.»Q Ç«,I£™ÞÆ~¤É©¯7µXú»o‚1¾L@ÙZ_\ÅÌjˆKR–ÊÔ*KSs½qø–܃/‹æxµ{m.$pÑ%´þ“ —Pì%AÃЉa¤þTˆ²Üt%”B¥RæWN[³ÁèP•Ÿêï÷î>d Måªhê²»Œ6½Yꬴåt6v6–õÅ02H¨ÞŸ•ëL¯;Ô¼ÿ^º˜TG¦A](Sd@¨à°]¶,¶ìmÈ£6ÜÞ‚~‰í~‚¦ã¦Xq6šBïÏê?syè’û×½±ÑïmÛÊdãGô‚mƒ&ûà©ö.‡®õàlˆš—ÆwCtÕS—aÞºœ¼(xbï›ÐS–NL};zÝ2`ílûðã3n N×f3P¥+Õ©’°*(n©EOqê\sBoæà[û{7ŠwC\þAÉX&o;?åÄàã'Böö ÝVè’dÊ$Ò\g~Gw{{·/zf ñÌ –Ï{“ó ù;4âq$xÔü²W‘Á¥®ÐÍöy®pÝCÆÇB6qÒKÖ>{JWKJ3òrS“28¤ÊSÀ€QPOu¶g–&E>€bgSsò:»>h"µñÒ Cà r¬Jý¹*ý#ª¥9&Oô¶æ•ù^oà ?AßNtd³×á3£ÙåQ^þ óô¾_Ä“«ÑU{îÁçAñbQþ„]S½qÊùWg˜õo™ÿ7ØüMø—‚}{BO÷JÀÆ^¢ 7-=<¶í¦ç*HsW"µ­Ÿê몾A—Ê@…N£«JÀ֠ɱݰŽÔœ 8(N$Ö‰w@bR…²ìÄ¡#RBzyŽLÝ™r y€µBÃ36ßËØ{ÿ”‡£ `}ÝôV­`0Ô€yºðHþsºŒŠä-·àþ5ÔÃ͹FTG#ßµ7á@N‡g`S_mú†›¸±p®—áXzSœ{ä‡;¼ý?gw¾³híÜ%L–ºÑb^ì#œKõì‹ã©m+4ËŇø‰-®Ì‘~*‚›EŸç4׳+¼õÖ#æœ?ÙdOéAËjÕIJÂkP&½ïü­ïÿzï››Í먮ؤRälÙ¾“×xO%pÍ–^>ÁDƒ·æææÇ#£Õuÿ«;߃>©[]TG³³ch ×´¦(…ÂÐ`j*öññ&9NæQ©[Ènb—Ó)®]|à kö0°ò~ÉßJNW}Vñ”VáùâXØ{Dy]íÔÚ³8 ÕVVìÒ––EBUl-k7ÑÒrìlò§\›¥Ð[;ÇÀ¯ :³Z¹$æ5Ö½u1uÐKµvA¤øè3õr]uEòièƒÕrÜÔ^{Žcz}U“L,•\S5šÀ«î§œv­ãu€oE«'´¢×Ɇ¯=ósðèüÌ!*ÑÈK…{‹çk2+5ÅÜ PüæÉ•§×?„ó¡\¥–*Ö½£.* ŽÙŽcãØ¥Drù.c^Äó1-U•ÈS÷'oj³ÖÙÈ@MíYS‡¹ËÔeî²Þâ\úõ¤G±~“2øµÇÐ%îƒÓ–SÝÆl8€úÉ v¢ï9>)9ßû<:‘ÍÏc~|"=ÖZI¼±}!êõžôlðdºƒÂ,iÍÐ Á-Ðn>ô˜EA„¬ƒ7Ý:ÉPŽ|$Ò‘Ü[ÅHÅ ]]¤ƒº$73áó·?mÄñãä_ñ«x!^&:à ¢Æ§èæ{4}O¥å ‹Aþ¿R&•œ–‰¸î†f²™nAÓ=áÄ$Œ‚ðó6‰ýqeV´¦ ª®à÷üäUiÂÎòkŒŒJ.ùº`Pǯ¨P$FÔëÌ5樣ì-ÙÅéÊØÄnÉIñm¸üç® T€òQ‡Þ:¢t¸¨fŠ{ê°¿xªo‘dšëzþÿ°aO endstream endobj 151 0 obj <> stream xÚ¥TkL“Wþ>¨xTÒmÔfm6¿Öéð‚Uó26ÉЩè°´µTìÅRz¡´´(ð‚”[/\Z¾ÛÐ9AtÈTÔm.l‹‘eÌ Û\ÐýÙ·óé÷cûÀ™ù9ÉsrNÎçyŸç9$Áã$Iòßþ0=+;kmZfÖ®²ù›m…ì‰ÇÌ£ŠEÌKó2ɬˆa¨XæEu7ƒ÷w|Ì ‚ ½À!ñ×sóøàùy\ÉÁ"KÁ#Id.™ls²L¶)Mo°5êB“4Q‘$ݘšš²NºI&K•¾¥U5 ¹Nš)7ª´rw8&ݯWhT&›4q[¡ÉdxcËŒ,×'ëêI뤩PºOU¬2šUJiº^g’î–kUÒ'Ü“Ÿliz­¡Ä¤2J3õJ•Q7Ï6žPBGcBK¼Kd{ˆýDq€@1Iðˆ_ÈÚ˜WbnÇæÇÞãå15|æ*+§Ã37iF<ˆWÍôÓ¤qÏ]›˜ÅýÌj!ÎKc?­ózíàüäÈyjº{Û»N&¡µy ’*‡ººªÇ~ë{@ÇádHÍÐÑÆWDõM >î¿J)Ö×5ù=øæƒ8 c5½Æü PBr¶Zûèhש[ìR0R,‚·”v¥m½(#®ÔÖòVè|—Î>rç¸rÊsÄ•ÇÕP Åàìð…z ‚h[›Ýh´æŽX?¦îÁ~-Š_E|æ0'/ðÃ}šáÓµtÂĬaJðÿ6!4§”gW™õ±"Weà„c`ðGZÝЉ‚áã¶c¥bØ6K=„éoÂÓ˜d2DíШ»ÔçæD›<^ºë»ð…A@} sIÀ^cõÚw²¢Úªºj¨A®–²€Îææ0ç|ª«ûc;M2I\˜ýøŒ°þÄ(ÞD!â(tÕAõBôºC§/føRé Î¶—¸&”á£ÿƒÁ4s®p Ö¹è+38yês:aúNåeœp%÷¦à1œ-qºá*2l]M•À^Ÿ}|ÜŸqM ;ƒf“¾4o÷¤ú{¼æ柣àçí]­Hð§¾IÝgQO÷Ô u†Ý~e‘×c7r5•ötöΞ+8½‹]R°öJðvÜpD«ßq-t;-Bâe×bqkõ¸N?„`—lƉ!.Ø>ñB°à6{Ë”ìfÑ–ÿÊ7óÌ/=¤¸øÇøSgËê<6Û!ÅÎ}€ ÐÛñoù¿„fÒü¸¸¡ƒŽcåþŃK§–Ñ­ññÔR^J$~ ~´ü·’÷ endstream endobj 153 0 obj <> stream xÚµX tUÚ­¦IY@ˆÚP-cwP‚B‚  Ê"‹¬&@1HCB²u¶ÎÞkU}ÕKÒÙ÷N:[g3a3€,"à8ÈLFEpaó(*£3ƒ¯Ú—9çÆYôÏ™99)N’~õÝ÷-÷Þ5r$%“É–n[¼aÅcK׆­™âûÍ‚µØöòêý¤‰”ôk™ôÐI%—&ŒT}éNðñEÉ6þÊ÷”ÝKžÔ—÷ùž“ÈãAõ8j¤LƤeCHÈì™!!O,MHÌLŽÙ­ œ¶+(pÖÓOÏ}<ð‰§Çk’cvEî \©ÖÄGjÉqa »b4ÚÌÀi £µÚÄùÁÁééé3#ãSf&$ïYôx`zŒ6:0T“¢INÓD.Oا \¯ ‚>s蟥 ñ‰©ZMràÚ„(Mò>‚sÌ j±ßJÙjÙº¡òp*r„fdìèô@=L=BM¦¦PRS© j:õ85ƒ ¦B¨YÔljõ$õ5ZB-¥–QË©ÔJjõµ†ZK­£ÖS¨©P*ŒÚHm¢6S[¨—¨­Ôô”ŒIM¤ºdÏËnŒˆñ7¹cäÞ‘ø5ÑãéWï¹ÿ£5oÔñÑác¦Žy×?ÂÿÄØYc”ßzï÷åÜ÷þ¯>gwíþ˜ûÿö@b‘¢uüŠ c'\dS$.­?#;ˆZä¨ñ \C¼è‡jè¯<è%´ªNÖî].—J½«\­`Ï‚l°X YøìÀ—ljdtÒJà „|¾€©X÷׽÷øO.lóÓ¿h?¨'XË›êzUµ0èf$r¢8åÞÕ¬ \Ž gºl€žC}ÂAÿÉb±­Bt2YôRàKL ^-*Îà‹~8•@ÚB ½ãB½™tù–M÷>«0ÇU@+T JWÅC*y½`˜=àb-)\^¼9ƒ‹t0DZÒDME²Û·Ôp}á©9ÅßÖ~ñ{¸Î|üì Â:ܯ8ˆ¬ŽVÑù:(‘?ýuÕ¢=O/ Á£Ôx¾¦HÈ€z5ØÀj«ìCn­¥¿«~bWð’`lÓå¨]T|JŸoË WC&§ã2ï†ÏIO f.}9ï„ghô{û$_ôŒ¿Gïûùèä]¶‹Ð{èôøOvxübé…yN—äþUÌÐÐýƃ:=RÜ»]º­p´ÛK?ÆE“GsÏ&j)ìñŸ<<;õô;%¾Xƒ5ÔàLŸ IÒ;<ֲˠüOù ÿÿ=½ïB÷ÝiL£×ä6±PtFÕ,:NoÇ5C‡”ÿÉ!&ým¨ [¤¹rtIú+¹–µìS`}÷pÏ@TÔ3}aý»Ò!l`Í{M €Iñëö¥°÷"t‘`N¬˜ÑÒKNÒFEÖb_0oÍP°ï!¹´Wš§@ôì»gO‹ ¢’„Käâ qÏ&_8S¼ŸØ+ì#ÏÉ3˜(|‚=…Þÿße¯ =Ï"%&â*‡¾0ò”1¡2ÇÕX»¡”ýb æ ÊBÏ6H“*¼~÷‘®Ë½~ƒ‡©½x ^ÌÂÐ ©ƒ%ØË¿¦}(¯Á°3êÙÿûÁ¦þ¡ôõÈÑ7Þ`…¡RµdZçÓïi¦û ÚRÊ… d-ɆíSîh@—xÌÚáz›÷ ðø¥,‡“ÃE¹*U°££ÀfF§>e‹rD¾Ê@tØj¾N±ö&gߟÁáa£…­üÞ”uÖ8R›8¿†~ \`žËZ6°ˆ%…MmòÎs˾ÿVJúFîm”‚h‹Æâ¼ o$ßZüïCsPÚ‚¶¢LÕ€j`ŠbêüëˆPUgšÑ¨ß}w¥ë7À|òíz¼D óSð„ Á«§/ع†«§ ½MDæöŸä¨ý^ÐèAôÀM4âãÅ—ðD5þ ý_èæªÔ}‡L¯Ð—Î%>£†.¦ *mÞÊè’î_“RhS]ÏI:A𘿂oåRúBñëö;p“¹Ô­Âç}Ñ~J7‘ØÞÞ?ø ¾ø„ÓXtü Øà˵9Ià ‹yòÃØþ«îïÊ–"ƒª#——ÌvîÀjh öCcrW†;º.ÅÉL+W`!ÍJ{½XRgW[Û¡˜÷¿,Çìü0»£˜&x}~D(›ÖþJŽÇ>ŒÇ¨!Õٽݳ»Ét9íRûÛ$û*Ð1 W†<þèœ×­‚r{ ”1¥ÄU¨òA0sºÁòzàcL6³SU¢è,é;˺´‡·}OÄrÂwè>4Z uüqM_|O¬s}¥¦„Mwì-6Z÷VÄuÂqæÃþ¯"ù±g'©@'”‘d€¡Le‡h³’&Ù  ¿*Croˆ\²–ºp±µjH€Qݺ©jHäS¸$¢ µ>e@t(NõsÓ‡PpI/š•Ð…B=ïàˆ¡2 Õ¬žÔŒËŒ†ÔÌm= nP~%öÁwp€ó—†~*˧"Ø­¥>µ ™œ@ŒÇ³WäÞ­Ò‡Š»S¤á· 1ÚÕÖøž¢ñ7l ~Ë<Ì®àZĪÉVØj.HAì/Pšµ~,—I´/ŸÁÜš‡ˆF£ë‘‚ ø¡,µÞ;‰»ÿ‡ ùé²¢¬±þÐEÑZ"–ZK ·„Ýk¬™þ“-I`I”Âi#Dž3šõ8c`»HÒñ¥„ÖDeçÛЬ&úhîyÐÄì·ûO6Ç…RΙ¥´ÊV‚žx+³)GÌ&G3¹XÁñÓGÏC9E(¿ø³5Ûj(e98J%È&9ØK`ËMwÉH\¾ eÖ£§]²7?DüïäR>š¢°$#9½!>#7›L™ÑU«†’âcÖòÂö’ óÁŠ×ç>ºâ…0]Iª§µ¡±EM™å)¢§ëTi0o¶m{I ÆMbyÐ øi³f2‹¾Î:ªºGúÌòCõªV8]Wöž­\t¾JHØ¡0Ç›ã4»SR¢uÑÀìˆm9àk „²}XO令.´û LJýHŽñÂã xÈAÉñ–d2oV˜Õ$cF.sÚÀçl»M´:Šz^¯‹ê‰&܈X4ù£ÉhÔÜwW/ðééŒqƒÂVÖªšÖΣ-Ç9øvâÃÄÿ™#WîÞ–ø 0óÒ/9Ô`‹E;²!ß:¾èvË.\F‰_Ê¥g¤ñŠpÞ¼ _RÜ-µûÏ/m[…ÂþxVcúãçþ„<ŽÆ;V³ŠXfÞ”·wEèÞÙº¶ Qhâ»hÂ_Ôp†o_–¸do]BEçåÒs(KÑHJo«µ¹  4za÷R<û‘ï xäÇóÿŠî}ÑÕv¾HOðsÁËÁ óyee+¢ÔÐVØEŒ«½^Ñ…f߬læ*¥Œ–DbcÎÁ÷ó ‡K&¹&G¼4YhßÀàQtå çQG[s·²¾©Ååb¨äœ\‚!_ ™LVqZ[£»ºëàκ(Õ"xjƒn¦a»9Öø QpÂÏéMø#ãŽhO^Ò‚›ˆ`Q­®èpÑaçaGGñÑcGÚš{ª:€é­Kߦ†l>_ÿb ÞF^“ë~æ5v¢¥Ò m¾9ˆÆÞ–¡åßËQW®hÐ5Ä'ĦìÙW¯kò´¶zTxUd /˜³¤Ïœ*¿‹9×ÿævñ”µñÕžÁµÚã‘ÃëÂ[ÅH$݆’Ú‰µ&Küg¨B!XÍ%„l7Þ)u^8rX¬‰$Äsà×ZSMoE™>—,Y9û´øá@ö’”òKÒØAîßè:Ç7ýèþbõm[Õ{o°•É]/4¾R¢s@“žcH"ÞÖ¯Y’OÎ ]N¿Ç™ã¹LSŒÀ´îÛù_×t‚ï4Š¿ÕÚŸz‡£ê¦­ªò:1ú…ÝP=T‹¡üÊ«[ qÉÎ]B}Ê¥"T¤@òg>Á1*D”|0$k“‚(Ò.ÅFEÂÜ䯆WËÑÏñc—úíÕd繜GªAkÀTôª¸ÐqáàKÞìA»¤én™”ü±¥á¹Š56b£JšQ°½±4³c{?¼ñDòF£©ˆ^ø~z>„mÎÏ+=ÏâGViIv> bYã®\X=tÓÖ¦æã<ÙDK¥fÅ¡·Îֿܡõ³ðÃÓ1=G1½¹¯Gqá²\ª“Ö)tÄ¡ð5Y^ÄB6õÜÎv¢sXAtj ž‚ý¯,ÿBýœ:ow˜v%ãÇxƒ^›[`ØŽ †n:Éw Ö}èBCëo2²*8òòœ´——oÌ&n}yÌÅ÷ú&b®_/¢r‚ÙÓÄ¡ö@_^•#-ú\Qý ¢%å0/ýÌüH£†}]½.Ï·VT´£çuÕ§|ù9ùì=YÆüLHgâÝÆrwc][{bC”j5lÝœN0¨ˆ[yªVvå$ ;)—¦K ÖbŸ~3…œÃ ²eçæé ÓÞ–íDüÈîY/«!¦J[§kÖ¶™ŽèëÏåÁ:&&yÙ$ÕVØPmBc…*päYY8.S‹Ú,ŒÑn)R9ˆÙ©¯+tT”;M1=½¤ööÜ>¡†ž,wfõ¾¶$Ǧ’ˆâ°Rxá º¿ö#QA.ŸKhA_,ØT¥ Úª x–ôíxšW'CdÄŒ>3ð=œ ü¡å5~ÉtÖŒÍs\*û)›ˆkæ!W9ý²¡Mu<žšÎ²±—Â$ÓyKˆn'²µQ`" z[ÕP*ÚÅ¢aS§<(CÓBz+þ-_M1\ZÇšâ á;¶ÇÆÆµ]"ôoêkEût‹ý‰³©x¼%Õ¤)ƒ fgÇŸ‰}í…%¢ÀæÌEãJ¬P)Š¢Òfµ»Iy6ä9šÕ¤PE¶ß:”_/=è‘}æ}^î‹®+šŽw”uݱû©|‚aÍTÛQN£ì|A þ‹3 yZðƒ¸˜Ý‚WC<û!¨Sùþ«FØÂ'™ÂÅ}¾EÆM¶Íâ> stream xÚ¥X PW·îv §ÁØŠ’nMâ‚·MžÄ5.¸ (Dd`d™fd™3¬Ê:È" ¢ .q ÉS“85N4&&ѨQ^’—˜Jn§.¯êÝaÐÿäÿ«^½¢««.Ý}î9ßùÎwΚrp hšñ®ÿ¢E ÖMY°bݺ¹–ÌÎÅiâ‘?W:ŠÏSâ ´øâ0‘—ˆc^¤(:ÄÍr§F’;õ«åþ¹þfå@Ó¬&¥ÀËkæ4/¯ ”ªäxED¤ÚcbØ$ésçÎñô˜áå5×Ã'&<^ë±"D¢&‹hµÊ0E¸:ÙcâÛ‘jµjÞë¯'&&N ‰I˜¦Œ˜?ÉÓ#Q¡ŽôXž¿#|›Ç"e¬ÚceHL¸Ç ÏÓï ”1*:<Þc…r[x|,ñräkÃ<%Ó©™Ô[”d½”ZN­¤ü©µ’­Ã£ã¥ÅRÃ)'j%£FR®Ô(j4õõ25žš@½B½FM¤&SS©×©éÔ,j6õ5‡ò¡|©”µZD-¦–PK©eÄæ bu±»šZK­£¨õÔ*ÚHm¢¦#P #¯ï¥~¢'ÑËé(º™þc˜nØ×’µ’³“R:F;v34“Á|%Í—Þa½Y{gxÐðSNc²œn9Ïw¡]].X=¢T6UV'ûf¤ÿÈ® ]ݤn¡n¿ŽJxn¬ }`Dþ¿Òh¿I‚úÅÎÙ³%"5VÃCnaÈ©]z¨Ôëu…:È%ªìe~!™y™¹Ì&×jkšþø æeoÿThäm–ˆK×sP“YšU†Ýï†"~ƒFSÃñî§zN¶—•”–C%[‘kPñj˜³zí¬õo¦Ì?XRåyÉóÔ‚[«öÛRj¨,&Wž£Q‡Y‚~Gç8¸œÖ¿´Óçÿq!Xež&[€ÔŠœò\ä>«ó0¼w,ÓlóÞ›— YlV鎾¾=÷Ñݾ©½×XŒÈ =G£ 4Q‚: ¹|(„•«jÞkÍïÑÕëjt†H`å N0'Õ‚ªƒo€ò½eûOD™2΋ØÏ¿¿/@GVwô‘m'ƒ+#vï(ñ­M/Þ\qޱ§NžüŒGR¨žV_S««y¶ºšÍÈÍr ñÃíoø>–QdeG ÞÒ§OúÛ€&Pj£‹ß?_Ì0ÑŸ›‘–°>˜m³c‹»­^Úð}fÂò ë×/?û˜G÷Û¤ÿâ­G v»çõË/÷ 7^–eÛMt¨•ˆëˆíM¤¢b!MxÙš¥F8 ,Ä]é4^y¡ãtLACNgnóTq¬ûÆ¡Ú{ÙJô&ò&=°·b›Za\3X±2‘ù­&oN.‰s9(-8º©H:¾@OšJ)´ì6];ZQRQ ul]Juj‚Çb<Úç`è±C5m ¼,Ï„¦›~0ј-…'ÎG‡¸/W}‰=Þ{Þ‰mHnªi/}Ÿo-ªƒr`oؾRÀo`÷`˜Äz_Yñ#¿n@ß‘&EÒoµ„gD ; ©Œõ¹Âv„%F¤l†|`ýC;»8õËäJ&²óE6Hm½…Úâ%n0‰ÞLš•ÂÕ±`­™4ðí1G’I~ìG£óì_°ƒ !)‘±,~ÎáüùS_9¿xÖŒeK|ý¶}}v0´Ë&úšE?”ˆrDsFm¹†O‡4ÈÒähSBûÆ¢+wÏ´ÿF µP¥+C^§Ï*R´dêµ -_¼ÁØg%~~&–ý4DãÛ®l¾ô]ôý;ß±'£©k\OêH2e vÃ#ïOF”pzkb£!å(ƒ©²ÒH+la|Ð.`ó¼wùv÷žéòõ §7 FÁ]D#H†¾D¤‹ÍC«9CFì²ÿ–y¾‚±ëoÑhôã÷›,1 iNbLXó.dÀj˜s ±ŸÕ_äêozä?á*ô¼WöΠ²ô™ Üeürq‡†Û¼ÁÃO0×?Öïç‹TÆT#°õÍUŸÌíüy[_6N‘2Þå¸ïU;-n³׫Œ ']Dó>>s­¿H›ÌÈßÜñ‰E|Êeÿ²‹R '2öd•ïÚ {¡ö””·hÛ³Ú}d¾þ½E$ZSšöTVéKãŒÙUÀ6Ö×5µhÚ× jØ’+UÖ)*‰ÚLõñ)€|oT]BVjfÄAˆQYX°8d×2в3_E†¦Q\øÇË!–ß„¤\àÖÞ¾¾ÞÞ3gz·lÝ(è±wÑðfØÂ­¯Nòíé «£çLñ L矰Ôß’itœûyÓñ¹|0¼—¾EïJÿJZÍÛ ½a—cäÃütãà©SU þi»ÃÊ2*Å»Ñ;• N*•šœÌÎ&³ËÞÉ!Yé2\lý¿™ö î endstream endobj 9 0 obj <> stream xÚåZÛnÉ}߯践ˆìê{/,*ô+9²%ÇÞÕú‘[€m "µpþ>§º‡œ {ä¡D ‰3=}©Ë©SÕ3!iq ‚œÊ åŒPAé…&a‰„6Â)'´^G ˆ •0¼ÌãD ^˜(Hz)¬DÞk)„…XíI8d°²É’ÎCA 4{)!ÞáðCA %q°‹0‚P ý‘„Ò8DØj /z˜ ²”Ã$œqðˆ¤ÊÃ|" ùBä¡"Û ´$(48{ȈpÜÀ`îP’Á™QÁ€4´Ž ½ÀÆ \³WD˜iÙvˆÓÐ…ˆÓ> p€0%`ÊѱuŒ¬‚gxh1‡p …ø.¬ÃXLÔ)‚„€£WÄYŒ8ès<  ù ðo¼ÚXá).Àw g"ÃÎD¸ñ·ÒoB’iœŠ ¥Ð@:4FØT“m\‹µàA„(@ƒÖA  ·L –kÛÇî¦.lÔÜ€Ÿñ'PÏI8loºÏ9ïËĽ9ßÙ1BÙõ`‡®7Û›2Ùƒ¾Gâ¨jÇQÕŽ£ªG•wœÐ[@:;F(ãiàú8°€¨F ¹€„2ñcoÎwvŒXÎù臮wÛ›sÎÇ2ñùLY·îl1öÐT÷°¾ª¾’z´÷%¾¦®öH–··Ÿßdü}R¨ò^U{®öMw Ójµu©jëò•˜êººíÍ/.gûWßÎX¬ÃlU%tr3Ÿ-¯nžˆÓù{qu»¼¾…‡’ÌHªÑOä¬ÊOd·çó›'^^_üóË7ñÇL%ˆþxú4 ¹¼úz0[ΟüÄë¥"~õáµÜ“öG)|šõ%û×Þ'—&³åìóÕGŒŸiR#ßê,…uÜ~l®]ýÑãcÒhÀ\},Œ vC?R¨J=ÁÇ‘Ãý&‡!‰ùÎÛ¿+s~DÕp%TÇ¿ ƒà  &8“ÆˆÒæ›uÊÖŸ5²\z¹'ó™4´j£¡)ÛϽ+läþ|µ¯FëyRËZLZoêi]ö4·ÓñÃg6°>k-LÍG9ðÏʺ­¼g»B€7ùØèÕ¬!·yÍÐO^‘µ&~%èeàX)5J¯ADÆáæFa®GÜ|š§(!±³Æ"’«Æ«¾´6·½v¼"áPÉ·Y'JXšP]:bѵSµ™ G“cÌÈ´ÚZ&°×3*˜r¯ªºšõìVV¤÷ïRrÜ™OŠh§ï®\¯¾öõ¶Ÿ‡[° +d9­V^¥£OiæRZs3o8–)6šcæLîÓ’£¶"z^átNÌ»LÕZÉ«ZU@ÉÙ é€t.a3Àw¯ï£ÄÎIÀþº&ZÿK&=ÇjÉeh^ã8·LÅT£Þæ":Lþ÷K¤l”GÙ(r£,Êž’¸.ˆå}¡YîäeO>¸äÉÍrשo¥ÚÖ&x‰ÈòŽuíµ%yåj%ï¼}BÈï§Éê&‘¿sŸÜþcÉÜCãw—ËO‹ô;ô…ûåÍb9ù4»A¸Æ‡³ªMŠÆû³Å<­?~¿ÿöõ»¿LŽöß“J"æ‹ó›ËkÜ.¦_á¤oë[:ë ¸©»þe~ùñÓÔrãç‹s¾éuÑŒy·÷/qçwyþüëÇÏs!Ç'Ëù—¿ó/lÆÓϳ ¡œ"+“ä}¾{ݳZì)þéÈÄüƦ—ŸçžUo®ÐójöeÞ¶¿chœÓ«·_/ϯ.æ’ñÖpÙ\DM¸L ×áë÷Ó“#¨{Cr-?-½Zn–kàd$ã”vÿN®SÓð»aZƒâ; hÝÅՠ쟾z}<ìÓÓ*a0*€}… škT”R[ ‚ù ÿ>ÑEׯ$´1iÙ=œ;±Åê«õwš0é¥W‡oÿö ´üVB)Þƒ;r‘l´ÇOv¦BÉÈ %ßL2<ƒîEþ‰¿2ðÞ¶€2Ôªeú0ö˜n²¡†í5,“ÉÑ‹É_!ûèe¡9¹ë”jaãl ]/Size 168/W[1 3 2]/Filter/FlateDecode/Length 443>> stream xÚ5ÒKPÍaÆñçIÅq •KTÈ­\sÜr9îNr"I‘ë‰"1X°dá¶ÂX0c,lØ›1̘±oËÊ¢¥6ÆêÐw~m>óÌ÷}ç?ÿÅ+I¹\ž”P Á¹xÏâyKE[ö£ŽØó°Ëò§(Æ*¼ˆ=VþÏ8ÍÃx¯`?^µ÷âæ\d•Þˆ’‹­ŠÂ(XmUWF)Ä+Ùe,.·ê?F‡+¬T&JWYé\”ñXkµ|Ž2“Vçë(q•-ˆ2 ×Y½ï¢LÆõVÿï(E¸Ñüe Ö[·‡¢LÅÍÖÝá(Óp‹uÿf”bÜj=îŽR‚Û¬§¢”âëU]”防ޖG™»­÷£_ž‰{¬5Qfá>ëk{”2Üo =‹2ÓÖ÷¾(s°Ñ~¥›¬_©(x­¿ß¢Wâa\†óq!.Á¥X‡+q5®Å ¸ 7anÇØŒ{ñÄ µrU#¯½x þªÕ.yû˜|1rš~¥Ín}-Çí¦±ÛíLYì»ùMìv[mì“v¶+v§Ýó%ö)ûέØgðfñvã%ìÅ>ÀkxÝ~þÿýÿÛ¦OÏ endstream endobj startxref 105150 %%EOF readline-6.3/examples/0000775000043600000240000000000012302645512013566 5ustar chetstaffreadline-6.3/examples/autoconf/0000775000043600000240000000000012302645511015403 5ustar chetstaffreadline-6.3/examples/autoconf/BASH_CHECK_LIB_TERMCAP0000664000043600000000000000244110614432310020570 0ustar chetwheelAC_DEFUN([BASH_CHECK_LIB_TERMCAP], [ if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else AC_MSG_CHECKING(which library has the termcap functions) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_termcap_lib, [AC_CHECK_FUNC(tgetent, bash_cv_termcap_lib=libc, [AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap, [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo, [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses, [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses, bash_cv_termcap_lib=gnutermcap)])])])])]) if test "X$_bash_needmsg" = "Xyes"; then AC_MSG_CHECKING(which library has the termcap functions) fi AC_MSG_RESULT(using $bash_cv_termcap_lib) if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" TERMCAP_DEP="./lib/termcap/libtermcap.a" elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then TERMCAP_LIB=-ltermcap TERMCAP_DEP= elif test $bash_cv_termcap_lib = libtinfo; then TERMCAP_LIB=-ltinfo TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= else TERMCAP_LIB=-lcurses TERMCAP_DEP= fi ]) readline-6.3/examples/autoconf/RL_LIB_READLINE_VERSION0000664000043600000000000000556710614432033021006 0ustar chetwheeldnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB dnl require: dnl AC_PROG_CC dnl BASH_CHECK_LIB_TERMCAP AC_DEFUN([RL_LIB_READLINE_VERSION], [ AC_REQUIRE([BASH_CHECK_LIB_TERMCAP]) AC_MSG_CHECKING([version of installed readline library]) # What a pain in the ass this is. # save cpp and ld options _save_CFLAGS="$CFLAGS" _save_LDFLAGS="$LDFLAGS" _save_LIBS="$LIBS" # Don't set ac_cv_rl_prefix if the caller has already assigned a value. This # allows the caller to do something like $_rl_prefix=$withval if the user # specifies --with-installed-readline=PREFIX as an argument to configure if test -z "$ac_cv_rl_prefix"; then test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix} fi eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib LIBS="$LIBS -lreadline ${TERMCAP_LIB}" CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" AC_CACHE_VAL(ac_cv_rl_version, [AC_TRY_RUN([ #include #include extern int rl_gnu_readline_p; main() { FILE *fp; fp = fopen("conftest.rlv", "w"); if (fp == 0) exit(1); if (rl_gnu_readline_p != 1) fprintf(fp, "0.0\n"); else fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0"); fclose(fp); exit(0); } ], ac_cv_rl_version=`cat conftest.rlv`, ac_cv_rl_version='0.0', ac_cv_rl_version='4.2')]) CFLAGS="$_save_CFLAGS" LDFLAGS="$_save_LDFLAGS" LIBS="$_save_LIBS" RL_MAJOR=0 RL_MINOR=0 # ( case "$ac_cv_rl_version" in 2*|3*|4*|5*|6*|7*|8*|9*) RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'` RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[[a-zA-Z]]*$::'` ;; esac # ((( case $RL_MAJOR in [[0-9][0-9]]) _RL_MAJOR=$RL_MAJOR ;; [[0-9]]) _RL_MAJOR=0$RL_MAJOR ;; *) _RL_MAJOR=00 ;; esac # ((( case $RL_MINOR in [[0-9][0-9]]) _RL_MINOR=$RL_MINOR ;; [[0-9]]) _RL_MINOR=0$RL_MINOR ;; *) _RL_MINOR=00 ;; esac RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}" # Readline versions greater than 4.2 have these defines in readline.h if test $ac_cv_rl_version = '0.0' ; then AC_MSG_WARN([Could not test version of installed readline library.]) elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) else AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library]) AC_SUBST(RL_VERSION) AC_SUBST(RL_MAJOR) AC_SUBST(RL_MINOR) # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) fi ]) readline-6.3/examples/autoconf/wi_LIB_READLINE0000644000043600000240000000432610557745030017710 0ustar chetstaffdnl Borut Razem dnl dnl This macro checks for the presence of the readline library. dnl It works also in cross-compilation environment. dnl dnl To get it into the aclocal.m4 dnl file, do this: dnl aclocal -I . --verbose dnl dnl The --verbose will show all of the files that are searched dnl for .m4 macros. AC_DEFUN([wi_LIB_READLINE], [ dnl check for the readline.h header file AC_CHECK_HEADER(readline/readline.h) if test "$ac_cv_header_readline_readline_h" = yes; then dnl check the readline version cat > conftest.$ac_ext < #include wi_LIB_READLINE_VERSION RL_VERSION_MAJOR RL_VERSION_MINOR EOF wi_READLINE_VERSION=$($CPP $CPPFLAGS conftest.$ac_ext | sed -n -e "s/^wi_LIB_READLINE_VERSION *\([[0-9\]][[0-9\]]*\) *\([[0-9\]][[0-9\]]*\)$/\1.\2/p") rm -rf conftest* if test -n "$wi_READLINE_VERSION"; then wi_MAJOR=$(expr $wi_READLINE_VERSION : '\([[0-9]][[0-9]]*\)\.') wi_MINOR=$(expr $wi_READLINE_VERSION : '[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*$\)') if test $wi_MINOR -lt 10; then wi_MINOR=$(expr $wi_MINOR \* 10) fi wi_READLINE_VERSION=$(expr $wi_MAJOR \* 100 + $wi_MINOR) else wi_READLINE_VERSION=-1 fi dnl check for the readline library ac_save_LIBS="$LIBS" # Note: $LIBCURSES is permitted to be empty. for LIBREADLINE in "-lreadline.dll" "-lreadline" "-lreadline $LIBCURSES" "-lreadline -ltermcap" "-lreadline -lncurses" "-lreadline -lcurses" do AC_MSG_CHECKING([for GNU Readline library $LIBREADLINE]) LIBS="$ac_save_LIBS $LIBREADLINE" AC_TRY_LINK([ /* includes */ #include #include ],[ /* function-body */ int dummy = rl_completion_append_character; /* rl_completion_append_character appeared in version 2.1 */ readline(NULL); ],[ wi_cv_lib_readline=yes AC_MSG_RESULT(yes) ],[ wi_cv_lib_readline=no AC_MSG_RESULT(no) ]) if test "$wi_cv_lib_readline" = yes; then AC_SUBST(LIBREADLINE) AC_DEFINE_UNQUOTED(HAVE_LIBREADLINE, $wi_READLINE_VERSION, [Readline]) break fi done LIBS="$ac_save_LIBS" fi ]) readline-6.3/examples/rlfe/0000775000043600000240000000000012302645512014516 5ustar chetstaffreadline-6.3/examples/rlfe/ChangeLog0000660000043600000240000000247310142531027016265 0ustar chetstaff2004-11-04 Per Bothner * pty.c: Import from screen-4.0.2. * configure.in, Makefile.in, config.h.in: Set up autoconf handling, copying a bunk of stuff over from screen. * rlfe.c: Use OpenPTY from pty.c instead of get_master_pty. 2004-11-03 Per Bothner * rlfe.c: Get input emphasis (boldening) more robust. * rlfe.c: Various cleanups on comments and names. 2003-11-07 Wolfgang Taeuber * Specify a history file and the size of the history file with command * line options; use EDITOR/VISUAL to set vi/emacs preference. 1999-09-03 Chet Ramey * fep.c: Memmove is not universally available. This patch assumes that an autoconf test has been performed, and that memcpy is available without checking. * fep.c: VDISCARD is not universally available, even when termios is. * fep.c: If a system doesn't have TIOCSCTTY, the first `open' performed after setsid allocates a controlling terminal. The original code would leave the child process running on the slave pty without a controlling tty if TIOCSCTTY was not available. * fep.c: Most versions of SVR4, including solaris, don't allow terminal ioctl calls on the master side of the pty. 1999-08-28 Per Bothner * fep.c: Initial release. readline-6.3/examples/rlfe/Makefile.in0000664000043600000000000001222111150350506016550 0ustar chetwheel# # Makefile template for rlfe # # See machine dependant config.h for more configuration options. # srcdir = @srcdir@ VPATH = @srcdir@ DESTDIR = # Where to install screen. prefix = @prefix@ exec_prefix = @exec_prefix@ # don't forget to change mandir and infodir in doc/Makefile. bindir = $(exec_prefix)/bin VERSION = @VERSION@ SCREEN = screen-$(VERSION) CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ #LDFLAGS = -L$(READLINE_DIR) LDFLAGS = @LDFLAGS@ LIBS = -lreadline -lhistory @LIBS@ CPP=@CPP@ CPP_DEPEND=$(CC) -MM INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AWK = @AWK@ OPTIONS= #OPTIONS= -DDEBUG SHELL=/bin/sh CFILES= rlfe.c pty.c HFILES= extern.h os.h screen.h EXTRA_DIST=configure.in configure Makefile.in config.h.in ChangeLog README OFILES= rlfe.o pty.o all: rlfe rlfe: $(OFILES) $(CC) $(LDFLAGS) -o $@ $(OFILES) $(LIBS) rlfe-$(VERSION).tar.gz: tar czf $@ $(CFILES) $(HFILES) $(EXTRA_DIST) .c.o: $(CC) -c -I. -I$(srcdir) $(CPPFLAGS) $(M_CFLAGS) $(DEFS) $(OPTIONS) $(CFLAGS) $< install_bin: .version screen -if [ -f $(DESTDIR)$(bindir)/$(SCREEN) ] && [ ! -f $(DESTDIR)$(bindir)/$(SCREEN).old ]; \ then mv $(DESTDIR)$(bindir)/$(SCREEN) $(DESTDIR)$(bindir)/$(SCREEN).old; fi $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN) -chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) # This doesn't work if $(bindir)/screen is a symlink -if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi rm -f $(DESTDIR)$(bindir)/screen (cd $(DESTDIR)$(bindir) && ln -sf $(SCREEN) screen) cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS) uninstall: .version rm -f $(DESTDIR)$(bindir)/$(SCREEN) rm -f $(DESTDIR)$(bindir)/screen -mv $(DESTDIR)$(bindir)/screen.old $(DESTDIR)$(bindir)/screen rm -f $(DESTDIR)$(ETCSCREENRC) cd doc; $(MAKE) uninstall shadow: mkdir shadow; cd shadow; ln -s ../*.[ch] ../*.in ../*.sh ../configure ../doc ../terminfo ../etc . rm -f shadow/term.h shadow/tty.c shadow/comm.h shadow/osdef.h echo "install all Makefiles and config:" > shadow/Makefile echo " rm -f config.cache" >> shadow/Makefile echo " sh ./configure" >> shadow/Makefile term.h: term.c term.sh AWK=$(AWK) srcdir=$(srcdir) sh $(srcdir)/term.sh kmapdef.c: term.h tty.c: tty.sh sh $(srcdir)/tty.sh tty.c mostlyclean: rm -f $(OFILES) rlfe *.o clean celan: mostlyclean rm -f tty.c term.h comm.h osdef.h kmapdef.c core # Delete all files from the current directory that are created by # configuring or building the program. # building of term.h/comm.h requires awk. Keep it in the distribution # we keep config.h, as this file knows where 'make dist' finds the ETCSCREENRC. #distclean: mostlyclean # rm -f $(SCREEN).tar $(SCREEN).tar.gz # rm -f config.status Makefile # rm -f osdef.h doc/Makefile maintainer-clean: @echo "This command is not even intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # Delete everything from the current directory that can be # reconstructed with this Makefile. realclean: .version mostlyclean rm -f $(SCREEN).tar $(SCREEN).tar.gz rm -f config.status Makefile doc/Makefile rm -f tty.c term.h comm.h osdef.h kmapdef.c rm -f config.h echo "install all Makefiles and config:" > Makefile echo " sh ./configure" >> Makefile tags TAGS: $(CFILES) -ctags *.sh $(CFILES) *.h -ctags -e *.sh $(CFILES) *.h dist: .version $(SCREEN).tar.gz # Perform self-tests (if any). check: config: rm -f config.cache sh ./configure ############################################################################### .version: @rev=`sed < $(srcdir)/patchlevel.h -n -e '/#define REV/s/#define REV *//p'`; \ vers=`sed < $(srcdir)/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'`; \ pat=`sed < $(srcdir)/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'`; \ if [ "$${rev}.$${vers}.$${pat}" != "$(VERSION)" ]; then \ echo "This distribution is screen-$${rev}.$${vers}.$${pat}, but"; \ echo "the Makefile is from $(VERSION). Please update!"; exit 1; fi ############################################################################### mdepend: $(CFILES) term.h @rm -f DEPEND ; \ for i in ${CFILES} ; do \ echo "$$i" ; \ echo `echo "$$i" | sed -e 's/.c$$/.o/'`": $$i" `\ cc -E $$i |\ grep '^# .*"\./.*\.h"' |\ (sort -t'"' -u -k 2,2 2>/dev/null || sort -t'"' -u +1 -2) |\ sed -e 's/.*"\.\/\(.*\)".*/\1/'\ ` >> DEPEND ; \ done depend: depend.in ./config.status || ./configure depend.in: $(CFILES) term.h cp Makefile.in Makefile.in~ sed -e '/\#\#\# Dependencies/q' < Makefile.in > tmp_make for i in $(CFILES); do echo $$i; $(CPP_DEPEND) $$i >> tmp_make; done mv tmp_make Makefile.in Makefile makefile: config.status $(srcdir)/Makefile.in CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status config.status: $(srcdir)/configure $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in cd $(srcdir) && autoconf ############################################################################### ### Dependencies: pty.o: pty.c config.h readline-6.3/examples/rlfe/README0000664000043600000240000000551410142553403015400 0ustar chetstaffrlfe (ReadLine Front-End) is a "universal wrapper" around readline. You specify an interactive program to run (typically a shell), and readline is used to edit input lines. There are other such front-ends; what distinguishes this one is that it monitors the state of the inferior pty, and if the inferior program switches its terminal to raw mode, then rlfe passes your characters through directly. This basically means you can run your entire session (including bash and terminal-mode emacs) under rlfe. FEATURES * Can use all readline commands (and history) in commands that read input lines in "canonical mode" - even 'cat'! * Automatically switches between "readline-editing mode" and "raw mode" depending on the terminal mode. If the inferior program invokes readline itself, it will do its own line editing. (The inferior readline will not know about rlfe, and it will have its own history.) You can even run programs like 'emavs -nw' and 'vi' under rlfe. The goal is you could leave rlfe always on without even knowing about it. (We're not quite there, but it works tolerably well.) * The input line (after any prompt) is changed to bold-face. INSTALL The usual: ./configure && make && make install Note so far rlfe has only been tested on GNU Linux (Fedora Core 2) and Mac OS X (10.3). This assumes readline header files and libraries are in the default places. If not, you can create a link named readline pointing to the readline sources. To link with libreadline.a and libhistory.a you can copy or link them, or add LDFLAGS='-/path/to/readline' to the make command-line. USAGE Just run it. That by default runs bash. You can run some other command by giving it as command-line arguments. There are a few tweaks: -h allows you to name the history file, and -s allows you to specify its size. It default to "emacs" mode, but if the the environment variable EDITOR is set to "vi" that mode is chosen. ISSUES * The mode switching depends on the terminal mode set by the inferior program. Thus ssh/telnet/screen-type programs will typically be in raw mode, so rlfe won't be much use, even if remote programs run in canonical mode. The work-around is to run rlfe on the remote end. * Echo supression and prompt recognition are somewhat fragile. (A protocol so that the o/s tty code can reliably communicate its state to rlfe could solve this problem, and the previous one.) * See the intro to rlfe.c for more notes. * Assumes a VT100-compatible terminal, though that could be generalized if anybody cares. * Requires ncurses. * It would be useful to integrate rlfe's logic in a terminal emulator. That would make it easier to reposition the edit position with a mouse, integrate cut-and-paste with the system clipboard, and more robustly handle escape sequence and multi-byte characters more robustly. AUTHOR Per Bothner LICENSE GPL. readline-6.3/examples/rlfe/config.h.in0000644000043600000000000002223211567744015016545 0ustar chetwheel/* Copyright 2004 Per Bothner * Based on config.h from screen-4.0.2. * Copyright (c) 1993-2000 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** * $Id: config.h.in,v 1.12 1994/05/31 12:31:36 mlschroe Exp $ FAU */ /********************************************************************** * * User Configuration Section */ /* * define PTYMODE if you do not like the default of 0622, which allows * public write to your pty. * define PTYGROUP to some numerical group-id if you do not want the * tty to be in "your" group. * Note, screen is unable to change mode or group of the pty if it * is not installed with sufficient privilege. (e.g. set-uid-root) * define PTYROFS if the /dev/pty devices are mounted on a read-only * filesystem so screen should not even attempt to set mode or group * even if running as root (e.g. on TiVo). */ #undef PTYMODE #undef PTYGROUP #undef PTYROFS /* * If screen is NOT installed set-uid root, screen can provide tty * security by exclusively locking the ptys. While this keeps other * users from opening your ptys, it also keeps your own subprocesses * from being able to open /dev/tty. Define LOCKPTY to add this * exclusive locking. */ #undef LOCKPTY /********************************************************************** * * End of User Configuration Section * * Rest of this file is modified by 'configure' * Change at your own risk! * */ /* * Some defines to identify special unix variants */ #ifndef SVR4 #undef SVR4 #endif #ifndef _POSIX_SOURCE #undef _POSIX_SOURCE #endif /* * Define POSIX if your system supports IEEE Std 1003.1-1988 (POSIX). */ #undef POSIX /* * Define TERMIO if you have struct termio instead of struct sgttyb. * This is usually the case for SVID systems, where BSD uses sgttyb. * POSIX systems should define this anyway, even though they use * struct termios. */ #undef TERMIO /* * Define CYTERMIO if you have cyrillic termio modes. */ #undef CYTERMIO /* * Define TERMINFO if your machine emulates the termcap routines * with the terminfo database. * Thus the .screenrc file is parsed for * the command 'terminfo' and not 'termcap'. */ #undef TERMINFO /* * If your library does not define ospeed, define this. */ #undef NEED_OSPEED /* * Define SYSV if your machine is SYSV complient (Sys V, HPUX, A/UX) */ #ifndef SYSV #undef SYSV #endif /* * Define SIGVOID if your signal handlers return void. On older * systems, signal returns int, but on newer ones, it returns void. */ #undef SIGVOID /* * Define USESIGSET if you have sigset for BSD 4.1 reliable signals. */ #undef USESIGSET /* * Define SYSVSIGS if signal handlers must be reinstalled after * they have been called. */ #undef SYSVSIGS /* * Define BSDWAIT if your system defines a 'union wait' in * * Only allow BSDWAIT i.e. wait3 on nonposix systems, since * posix implies wait(3) and waitpid(3). vdlinden@fwi.uva.nl * */ #ifndef POSIX #undef BSDWAIT #endif /* * On RISCOS we prefer wait2() over wait3(). rouilj@sni-usa.com */ #ifdef BSDWAIT #undef USE_WAIT2 #endif /* * Define if you have the utempter utmp helper program */ #undef HAVE_UTEMPTER /* * If ttyslot() breaks getlogin() by returning indexes to utmp entries * of type DEAD_PROCESS, then our getlogin() replacement should be * selected by defining BUGGYGETLOGIN. */ #undef BUGGYGETLOGIN /* * If your system has the calls setreuid() and setregid(), * define HAVE_SETREUID. Otherwise screen will use a forked process to * safely create output files without retaining any special privileges. */ #undef HAVE_SETREUID /* * If your system supports BSD4.4's seteuid() and setegid(), define * HAVE_SETEUID. */ #undef HAVE_SETEUID /* * If you want the "time" command to display the current load average * define LOADAV. Maybe you must install screen with the needed * privileges to read /dev/kmem. * Note that NLIST_ stuff is only checked, when getloadavg() is not available. */ #undef LOADAV #undef LOADAV_NUM #undef LOADAV_TYPE #undef LOADAV_SCALE #undef LOADAV_GETLOADAVG #undef LOADAV_UNIX #undef LOADAV_AVENRUN #undef LOADAV_USE_NLIST64 #undef NLIST_DECLARED #undef NLIST_STRUCT #undef NLIST_NAME_UNION /* * If your system has the new format /etc/ttys (like 4.3 BSD) and the * getttyent(3) library functions, define GETTTYENT. */ #undef GETTTYENT /* * Define USEBCOPY if the bcopy/memcpy from your system's C library * supports the overlapping of source and destination blocks. When * undefined, screen uses its own (probably slower) version of bcopy(). * * SYSV machines may have a working memcpy() -- Oh, this is * quite unlikely. Tell me if you see one. * "But then, memmove() should work, if at all available" he thought... * Boing, never say "works everywhere" unless you checked SCO UNIX. * Their memove fails the test in the configure script. Sigh. (Juergen) */ #undef USEBCOPY #undef USEMEMCPY #undef USEMEMMOVE /* * If your system has vsprintf() and requires the use of the macros in * "varargs.h" to use functions with variable arguments, * define USEVARARGS. */ #undef USEVARARGS /* * If your system has strerror() define this. */ #undef HAVE_STRERROR /* * If the select return value doesn't treat a descriptor that is * usable for reading and writing as two hits, define SELECT_BROKEN. */ #undef SELECT_BROKEN /* * Define this if your system supports named pipes. */ #undef NAMEDPIPE /* * Define this if your system exits select() immediatly if a pipe is * opened read-only and no writer has opened it. */ #undef BROKEN_PIPE /* * Define this if the unix-domain socket implementation doesn't * create a socket in the filesystem. */ #undef SOCK_NOT_IN_FS /* * If your system has setenv() and unsetenv() define USESETENV */ #undef USESETENV /* * If your system does not come with a setenv()/putenv()/getenv() * functions, you may bring in our own code by defining NEEDPUTENV. */ #undef NEEDPUTENV /* * If the passwords are stored in a shadow file and you want the * builtin lock to work properly, define SHADOWPW. */ #undef SHADOWPW /* * If you are on a SYS V machine that restricts filename length to 14 * characters, you may need to enforce that by setting NAME_MAX to 14 */ #undef NAME_MAX /* KEEP_UNDEF_HERE override system value */ #undef NAME_MAX /* * define HAVE_RENAME if your system has a rename() function */ #undef HAVE_RENAME /* * define HAVE__EXIT if your system has the _exit() call. */ #undef HAVE__EXIT /* * define HAVE_LSTAT if your system has symlinks and the lstat() call. */ #undef HAVE_LSTAT /* * define HAVE_UTIMES if your system has the utimes() call. */ #undef HAVE_UTIMES /* * define HAVE_FCHOWN if your system has the fchown() call. */ #undef HAVE_FCHOWN /* * define HAVE_FCHMOD if your system has the fchmod() call. */ #undef HAVE_FCHMOD /* * define HAVE_VSNPRINTF if your system has vsnprintf() (GNU lib). */ #undef HAVE_VSNPRINTF /* * define HAVE_GETCWD if your system has the getcwd() call. */ #undef HAVE_GETCWD /* * define HAVE_SETLOCALE if your system has the setlocale() call. */ #undef HAVE_SETLOCALE /* * define HAVE_STRFTIME if your system has the strftime() call. */ #undef HAVE_STRFTIME /* * define HAVE_NL_LANGINFO if your system has the nl_langinfo() call * and defines CODESET. */ #undef HAVE_NL_LANGINFO /* * Newer versions of Solaris include fdwalk, which can greatly improve * the startup time of screen; otherwise screen spends a lot of time * closing file descriptors. */ #undef HAVE_FDWALK /* * define HAVE_DEV_PTC if you have a /dev/ptc character special * device. */ #undef HAVE_DEV_PTC /* * define HAVE_SVR4_PTYS if you have a /dev/ptmx character special * device and support the ptsname(), grantpt(), unlockpt() functions. */ #undef HAVE_SVR4_PTYS /* * define HAVE_GETPT if you have the getpt() function. */ #undef HAVE_GETPT /* * define HAVE_OPENPTY if your system has the openpty() call. */ #undef HAVE_OPENPTY /* * define PTYRANGE0 and or PTYRANGE1 if you want to adapt screen * to unusual environments. E.g. For SunOs the defaults are "qpr" and * "0123456789abcdef". For SunOs 4.1.2 * #define PTYRANGE0 "pqrstuvwxyzPQRST" * is recommended by Dan Jacobson. */ #undef PTYRANGE0 #undef PTYRANGE1 #define USEVARARGS #undef HAVE_SYS_STROPTS_H #undef HAVE_SYS_WAIT_H #undef HAVE_SGTTY_H #undef HAVE_SYS_SELECT_H readline-6.3/examples/rlfe/configure0000775000043600000240000046343011641651551016444 0ustar chetstaff#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="rlfe.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS XTERMPATH WRITEPATH AWK EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_pty_mode with_pty_group ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pty-mode=mode default mode for ptys --with-pty-group=group default group for ptys Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" VERSION=0.4 old_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main(){exit(0);} _ACEOF if ac_fn_c_try_run "$LINENO"; then : else if test $CC != cc ; then echo "Your $CC failed - restarting with CC=cc" 1>&6 echo "" 1>&6 CC=cc export CC exec $0 $configure_args fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main(){exit(0);} _ACEOF if ac_fn_c_try_run "$LINENO"; then : else exec 5>&2 eval $ac_link echo "CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;" 1>&6 echo "$ac_compile" 1>&6 as_fn_error $? "Can't run the compiler - sorry" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main() { int __something_strange_(); __something_strange_(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : as_fn_error $? "Your compiler does not set the exit status - sorry" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done if test -f etc/toolcheck; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5 $as_echo "$as_me: checking for buggy tools..." >&6;} sh etc/toolcheck 1>&6 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for System V..." >&5 $as_echo "$as_me: checking for System V..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int x = SIGCHLD | FNDELAY; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else $as_echo "#define SYSV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris 2.x..." >&5 $as_echo "$as_me: checking for Solaris 2.x..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(SVR4) && defined(sun) yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : LIBS="$LIBS -lsocket -lnsl -lkstat" fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking select..." >&5 $as_echo "$as_me: checking select..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="$LIBS -lnet -lnsl" { $as_echo "$as_me:${as_lineno-$LINENO}: checking select with $LIBS..." >&5 $as_echo "$as_me: checking select with $LIBS..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else as_fn_error $? "!!! no select - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking select return value..." >&5 $as_echo "$as_me: checking select return value..." >&6;} if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif main() { #ifdef FD_SET fd_set f; #else int f; #endif #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ exit(0); #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif exit(1); close(0); if (open(nam, O_RDWR | O_NONBLOCK)) exit(1); if (write(0, "TEST", 4) == -1) exit(1); #else #include #include #include main() { int s1, s2, l; struct sockaddr_un a; #ifdef FD_SET fd_set f; #else int f; #endif (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) exit(1); a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) exit(1); if (listen(s1, 2)) exit(1); if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); exit(0); } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) exit(1); #endif #ifdef FD_SET FD_SET(0, &f); #else f = 1; #endif if (select(1, &f, 0, 0, 0) == -1) exit(1); if (select(1, &f, &f, 0, 0) != 2) exit(1); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo "- select is ok" 1>&6 else echo "- select can't count" 1>&6 $as_echo "#define SELECT_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent..." >&5 $as_echo "$as_me: checking for tgetent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else olibs="$LIBS" LIBS="-lcurses $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libcurses..." >&5 $as_echo "$as_me: checking libcurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="-ltermcap $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libtermcap..." >&5 $as_echo "$as_me: checking libtermcap..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="-ltermlib $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libtermlib..." >&5 $as_echo "$as_me: checking libtermlib..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="-lncurses $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libncurses..." >&5 $as_echo "$as_me: checking libncurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else as_fn_error $? "!!! no tgetent - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *tgoto(); main() { exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo "- you use the termcap database" 1>&6 else echo "- you use the terminfo database" 1>&6 $as_echo "#define TERMINFO 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking ospeed..." >&5 $as_echo "$as_me: checking ospeed..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern short ospeed; int main () { ospeed=5; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else $as_echo "#define NEED_OSPEED 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc..." >&5 $as_echo "$as_me: checking for /dev/ptc..." >&6;} if test -r /dev/ptc; then $as_echo "#define HAVE_DEV_PTC 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SVR4 ptys..." >&5 $as_echo "$as_me: checking for SVR4 ptys..." >&6;} sysvr4ptys= if test -c /dev/ptmx ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_SVR4_PTYS 1" >>confdefs.h sysvr4ptys=1 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi for ac_func in getpt do : ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt" if test "x$ac_cv_func_getpt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPT 1 _ACEOF fi done if test -z "$sysvr4ptys"; then for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENPTY 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 $as_echo_n "checking for openpty in -lutil... " >&6; } if ${ac_cv_lib_util_openpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char openpty (); int main () { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_openpty=yes else ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 $as_echo "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes; then : $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ptyranges..." >&5 $as_echo "$as_me: checking for ptyranges..." >&6;} if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX yes; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ptys=`echo /dev/ptyp??` else ptys=`echo $pdir/pty??` fi rm -f conftest* if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` cat >>confdefs.h <<_ACEOF #define PTYRANGE0 "$p0" _ACEOF cat >>confdefs.h <<_ACEOF #define PTYRANGE1 "$p1" _ACEOF fi # Check whether --with-pty-mode was given. if test "${with_pty_mode+set}" = set; then : withval=$with_pty_mode; ptymode="${withval}" fi # Check whether --with-pty-group was given. if test "${with_pty_group+set}" = set; then : withval=$with_pty_group; ptygrp="${withval}" fi test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then cat >>confdefs.h <<_ACEOF #define PTYMODE $ptymode _ACEOF cat >>confdefs.h <<_ACEOF #define PTYGROUP $ptygrp _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group..." >&5 $as_echo "$as_me: checking default tty permissions/group..." >&6;} rm -f conftest_grp if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) exit(1); if (stat(x, &sb)) exit(1); om = sb.st_mode; if (om & 002) exit(0); m = system("mesg y"); if (m == -1 || m == 127) exit(1); if (stat(x, &sb)) exit(1); m = sb.st_mode; if (chmod(x, om)) exit(1); if (m & 002) exit(0); if (sb.st_gid == getgid()) exit(1); if (!(fp=fopen("conftest_grp", "w"))) exit(1); fprintf(fp, "%d\n", sb.st_gid); fclose(fp); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : if test -f conftest_grp; then ptygrp=`cat conftest_grp` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 cat >>confdefs.h <<_ACEOF #define PTYMODE $ptymode _ACEOF cat >>confdefs.h <<_ACEOF #define PTYGROUP $ptygrp _ACEOF else echo "- ptys are world accessable" 1>&6 fi else WRITEPATH='' XTERMPATH='' # Extract the first word of "write", so it can be a program name with args. set dummy write; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_WRITEPATH+:} false; then : $as_echo_n "(cached) " >&6 else case $WRITEPATH in [\\/]* | ?:[\\/]*) ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_WRITEPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi WRITEPATH=$ac_cv_path_WRITEPATH if test -n "$WRITEPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WRITEPATH" >&5 $as_echo "$WRITEPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xterm", so it can be a program name with args. set dummy xterm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XTERMPATH+:} false; then : $as_echo_n "(cached) " >&6 else case $XTERMPATH in [\\/]* | ?:[\\/]*) ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XTERMPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XTERMPATH=$ac_cv_path_XTERMPATH if test -n "$XTERMPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XTERMPATH" >&5 $as_echo "$XTERMPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 cat >>confdefs.h <<_ACEOF #define PTYMODE $ptymode _ACEOF cat >>confdefs.h <<_ACEOF #define PTYGROUP $ptygrp _ACEOF else echo "- ptys are world accessable" 1>&6 fi else echo "- can't determine - assume ptys are world accessable" 1>&6 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest_grp fi if test -n "$posix" ; then echo "assuming posix signal definition" 1>&6 $as_echo "#define SIGVOID 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers..." >&5 $as_echo "$as_me: checking return type of signal handlers..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif extern void (*signal ()) (); int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define SIGVOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking sigset..." >&5 $as_echo "$as_me: checking sigset..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define USESIGSET 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking signal implementation..." >&5 $as_echo "$as_me: checking signal implementation..." >&6;} if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) exit(1); #endif exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else $as_echo "#define SYSVSIGS 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/stropts.h sys/wait.h sgtty.h sys/select.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in term.h do : ac_fn_c_check_header_mongrel "$LINENO" "term.h" "ac_cv_header_term_h" "$ac_includes_default" if test "x$ac_cv_header_term_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TERM_H 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi readline-6.3/examples/rlfe/configure.in0000644000043600000000000002157111641651544017035 0ustar chetwheeldnl Process this file with autoconf to produce a configure script. AC_INIT(rlfe.c) AC_CONFIG_HEADER(config.h) VERSION=0.4 AC_SUBST(VERSION) dnl dnl Define some useful macros dnl AC_DEFUN([AC_PROGRAM_SOURCE], [AC_REQUIRE([AC_PROG_CPP])AC_PROVIDE([$0])cat > conftest.c <&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* ])dnl dnl define(AC_NOTE, [echo "$1" 1>&AC_FD_MSG ])dnl old_CFLAGS="$CFLAGS" AC_PROG_CC AC_PROG_CPP AC_PROG_GCC_TRADITIONAL AC_ISC_POSIX AC_TRY_RUN(main(){exit(0);},,[ if test $CC != cc ; then AC_NOTE(Your $CC failed - restarting with CC=cc) AC_NOTE() CC=cc export CC exec $0 $configure_args fi ]) AC_TRY_RUN(main(){exit(0);},, exec 5>&2 eval $ac_link AC_NOTE(CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;) AC_NOTE($ac_compile) AC_MSG_ERROR(Can't run the compiler - sorry)) AC_TRY_RUN([ main() { int __something_strange_(); __something_strange_(0); } ],AC_MSG_ERROR(Your compiler does not set the exit status - sorry)) AC_PROG_AWK if test -f etc/toolcheck; then AC_CHECKING(for buggy tools) sh etc/toolcheck 1>&AC_FD_MSG fi dnl dnl **** special unix variants **** dnl AC_CHECKING(for System V) AC_TRY_COMPILE( [#include #include #include ], [int x = SIGCHLD | FNDELAY;], , AC_DEFINE(SYSV)) AC_CHECKING(for Solaris 2.x) AC_EGREP_CPP(yes, [#if defined(SVR4) && defined(sun) yes #endif ], LIBS="$LIBS -lsocket -lnsl -lkstat") dnl dnl **** select() **** dnl AC_CHECKING(select) AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, LIBS="$LIBS -lnet -lnsl" AC_CHECKING(select with $LIBS) AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, AC_MSG_ERROR(!!! no select - no screen)) ) dnl dnl **** check the select implementation **** dnl AC_CHECKING(select return value) AC_TRY_RUN([ #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif main() { #ifdef FD_SET fd_set f; #else int f; #endif #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ exit(0); #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif exit(1); close(0); if (open(nam, O_RDWR | O_NONBLOCK)) exit(1); if (write(0, "TEST", 4) == -1) exit(1); #else #include #include #include main() { int s1, s2, l; struct sockaddr_un a; #ifdef FD_SET fd_set f; #else int f; #endif (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) exit(1); a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) exit(1); if (listen(s1, 2)) exit(1); if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); exit(0); } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) exit(1); #endif #ifdef FD_SET FD_SET(0, &f); #else f = 1; #endif if (select(1, &f, 0, 0, 0) == -1) exit(1); if (select(1, &f, &f, 0, 0) != 2) exit(1); exit(0); } ],AC_NOTE(- select is ok), AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN)) dnl dnl **** termcap or terminfo **** dnl AC_CHECKING(for tgetent) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, olibs="$LIBS" LIBS="-lcurses $olibs" AC_CHECKING(libcurses) AC_TRY_LINK(,[ #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ],, LIBS="-ltermcap $olibs" AC_CHECKING(libtermcap) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, LIBS="-ltermlib $olibs" AC_CHECKING(libtermlib) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, LIBS="-lncurses $olibs" AC_CHECKING(libncurses) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, AC_MSG_ERROR(!!! no tgetent - no screen)))))) AC_TRY_RUN([ extern char *tgoto(); main() { exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); }], AC_NOTE(- you use the termcap database), AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO)) AC_CHECKING(ospeed) AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED)) dnl dnl **** PTY specific things **** dnl AC_CHECKING(for /dev/ptc) if test -r /dev/ptc; then AC_DEFINE(HAVE_DEV_PTC) fi AC_CHECKING(for SVR4 ptys) sysvr4ptys= if test -c /dev/ptmx ; then AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS) sysvr4ptys=1]) fi AC_CHECK_FUNCS(getpt) dnl check for openpty() if test -z "$sysvr4ptys"; then AC_CHECK_FUNCS(openpty,, [AC_CHECK_LIB(util,openpty, [AC_DEFINE(HAVE_OPENPTY)] [LIBS="$LIBS -lutil"])]) fi AC_CHECKING(for ptyranges) if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi dnl SCO uses ptyp%d AC_EGREP_CPP(yes, [#ifdef M_UNIX yes; #endif ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`) dnl if test -c /dev/ptyp19; then dnl ptys=`echo /dev/ptyp??` dnl else dnl ptys=`echo $pdir/pty??` dnl fi if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0") AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1") fi dnl **** pty mode/group handling **** dnl dnl support provided by Luke Mewburn , 931222 AC_ARG_WITH(pty-mode, [ --with-pty-mode=mode default mode for ptys], [ ptymode="${withval}" ]) AC_ARG_WITH(pty-group, [ --with-pty-group=group default group for ptys], [ ptygrp="${withval}" ]) test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then AC_DEFINE_UNQUOTED(PTYMODE, $ptymode) AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp) else AC_CHECKING(default tty permissions/group) rm -f conftest_grp AC_TRY_RUN([ #include #include #include main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) exit(1); if (stat(x, &sb)) exit(1); om = sb.st_mode; if (om & 002) exit(0); m = system("mesg y"); if (m == -1 || m == 127) exit(1); if (stat(x, &sb)) exit(1); m = sb.st_mode; if (chmod(x, om)) exit(1); if (m & 002) exit(0); if (sb.st_gid == getgid()) exit(1); if (!(fp=fopen("conftest_grp", "w"))) exit(1); fprintf(fp, "%d\n", sb.st_gid); fclose(fp); exit(0); } ],[ if test -f conftest_grp; then ptygrp=`cat conftest_grp` AC_NOTE([- pty mode: $ptymode, group: $ptygrp]) AC_DEFINE_UNQUOTED(PTYMODE, $ptymode) AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp) else AC_NOTE(- ptys are world accessable) fi ],[ WRITEPATH='' XTERMPATH='' AC_PATH_PROG(WRITEPATH, write) AC_PATH_PROG(XTERMPATH, xterm) found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` AC_NOTE([- pty mode: $ptymode, group: $ptygrp]) AC_DEFINE_UNQUOTED(PTYMODE, $ptymode) AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp) else AC_NOTE(- ptys are world accessable) fi else AC_NOTE(- can't determine - assume ptys are world accessable) fi ] ) rm -f conftest_grp fi dnl dnl **** signal handling **** dnl if test -n "$posix" ; then dnl POSIX has reliable signals with void return type. AC_NOTE(assuming posix signal definition) AC_DEFINE(SIGVOID) else AC_CHECKING(return type of signal handlers) AC_TRY_COMPILE( [#include #include #ifdef signal #undef signal #endif extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID)) AC_CHECKING(sigset) AC_TRY_LINK([ #include #include ],[ #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ], AC_DEFINE(USESIGSET)) AC_CHECKING(signal implementation) AC_TRY_RUN([ #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) exit(1); #endif exit(0); } ],,AC_DEFINE(SYSVSIGS)) fi AC_CHECK_HEADERS(sys/stropts.h sys/wait.h sgtty.h sys/select.h) AC_CHECK_HEADERS(term.h) AC_OUTPUT(Makefile) readline-6.3/examples/rlfe/extern.h0000644000043600000000000000261010530140726016162 0ustar chetwheel/* Copyright (c) 1993-2002 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** * $Id: extern.h,v 1.18 1994/05/31 12:31:57 mlschroe Exp $ FAU */ #if !defined(__GNUC__) || __GNUC__ < 2 #undef __attribute__ #define __attribute__(x) #endif #if !defined (__P) # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define __P(protos) protos # else # define __P(protos) () # endif #endif /* pty.c */ extern int OpenPTY __P((char **)); extern void InitPTY __P((int)); readline-6.3/examples/rlfe/os.h0000644000043600000000000003011211567744242015312 0ustar chetwheel/* Copyright (c) 1993-2002 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** * $Id: os.h,v 1.10 1994/05/31 12:32:22 mlschroe Exp $ FAU */ #include #include #include /* In strict ANSI mode, HP-UX machines define __hpux but not hpux */ #if defined(__hpux) && !defined(hpux) # define hpux #endif #if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux) # include #endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */ #ifdef ISC # ifdef ENAMETOOLONG # undef ENAMETOOLONG # endif # ifdef ENOTEMPTY # undef ENOTEMPTY # endif # include # include #endif #ifdef sun # define getpgrp __getpgrp # define exit __exit #endif #ifdef POSIX # include # if defined(__STDC__) # include # endif /* __STDC__ */ #endif /* POSIX */ #ifdef sun # undef getpgrp # undef exit #endif /* sun */ #ifndef linux /* all done in */ extern int errno; #endif /* linux */ #ifndef HAVE_STRERROR /* No macros, please */ #undef strerror #endif #if !defined(SYSV) && !defined(linux) # ifdef NEWSOS # define strlen ___strlen___ # include # undef strlen # else /* NEWSOS */ # include # endif /* NEWSOS */ #else /* SYSV */ # if defined(SVR4) || defined(NEWSOS) # define strlen ___strlen___ # include # undef strlen # if !defined(NEWSOS) && !defined(__hpux) extern size_t strlen(const char *); # endif # else /* SVR4 */ # include # endif /* SVR4 */ #endif /* SYSV */ #ifdef USEVARARGS # if defined(__STDC__) # include # define VA_LIST(var) va_list var; # define VA_DOTS ... # define VA_DECL # define VA_START(ap, fmt) va_start(ap, fmt) # define VA_ARGS(ap) ap # define VA_END(ap) va_end(ap) # else # include # define VA_LIST(var) va_list var; # define VA_DOTS va_alist # define VA_DECL va_dcl # define VA_START(ap, fmt) va_start(ap) # define VA_ARGS(ap) ap # define VA_END(ap) va_end(ap) # endif #else # define VA_LIST(var) # define VA_DOTS p1, p2, p3, p4, p5, p6 # define VA_DECL unsigned long VA_DOTS; # define VA_START(ap, fmt) # define VA_ARGS(ap) VA_DOTS # define VA_END(ap) # undef vsnprintf # define vsnprintf xsnprintf #endif #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX) # include #endif #include #ifdef M_UNIX /* SCO */ # include # include # define ftruncate(fd, s) chsize(fd, s) #endif #ifdef SYSV # define index strchr # define rindex strrchr # define bzero(poi,len) memset(poi,0,len) # define bcmp memcmp # define killpg(pgrp,sig) kill( -(pgrp), sig) #endif #ifndef HAVE_GETCWD # define getcwd(b,l) getwd(b) #endif #ifndef USEBCOPY # ifdef USEMEMMOVE # define bcopy(s,d,len) memmove(d,s,len) # else # ifdef USEMEMCPY # define bcopy(s,d,len) memcpy(d,s,len) # else # define NEED_OWN_BCOPY # define bcopy xbcopy # endif # endif #endif #ifdef hpux # define setreuid(ruid, euid) setresuid(ruid, euid, -1) # define setregid(rgid, egid) setresgid(rgid, egid, -1) #endif #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) # define USE_SETEUID #endif #if !defined(HAVE__EXIT) && !defined(_exit) #define _exit(x) exit(x) #endif #ifndef HAVE_UTIMES # define utimes utime #endif #ifdef BUILTIN_TELNET # include # include #endif #if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME)) # undef USE_LOCALE #endif /***************************************************************** * terminal handling */ #if defined (POSIX) || defined (__FreeBSD__) # include # ifdef hpux # include # endif /* hpux */ # ifdef NCCS # define MAXCC NCCS # else # define MAXCC 256 # endif #else /* POSIX */ # ifdef TERMIO # include # ifdef NCC # define MAXCC NCC # else # define MAXCC 256 # endif # ifdef CYTERMIO # include # endif # else /* TERMIO */ # if defined (HAVE_SGTTY_H) # include # endif # endif /* TERMIO */ #endif /* POSIX */ #ifndef VDISABLE # ifdef _POSIX_VDISABLE # define VDISABLE _POSIX_VDISABLE # else # define VDISABLE 0377 # endif /* _POSIX_VDISABLE */ #endif /* !VDISABLE */ /* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD) * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE) * to hold the whole packet at first read(). * (Marc Boucher) * * matthew green: * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100 * * Joe Traister: On AIX4, programs like irc won't work if screen * uses TIOCPKT (select fails to return on pty read). */ #if defined(sgi) || defined(DGUX) || defined(_IBMR2) # undef TIOCPKT #endif /* linux ncurses is broken, we have to use our own tputs */ #if defined(linux) && defined(TERMINFO) # define tputs xtputs #endif /* Alexandre Oliva: SVR4 style ptys don't work with osf */ #ifdef __osf__ # undef HAVE_SVR4_PTYS #endif /***************************************************************** * utmp handling */ #ifdef GETUTENT typedef char *slot_t; #else typedef int slot_t; #endif #if defined(UTMPOK) || defined(BUGGYGETLOGIN) # if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux) # include # define UTMPFILE UTMPX_FILE # define utmp utmpx # define getutent getutxent # define getutid getutxid # define getutline getutxline # define pututline pututxline # define setutent setutxent # define endutent endutxent # define ut_time ut_xtime # else /* SVR4 */ # include # endif /* SVR4 */ # ifdef apollo /* * We don't have GETUTENT, so we dig into utmp ourselves. * But we save the permanent filedescriptor and * open utmp just when we need to. * This code supports an unsorted utmp. jw. */ # define UTNOKEEP # endif /* apollo */ # ifndef UTMPFILE # ifdef UTMP_FILE # define UTMPFILE UTMP_FILE # else # ifdef _PATH_UTMP # define UTMPFILE _PATH_UTMP # else # define UTMPFILE "/etc/utmp" # endif /* _PATH_UTMP */ # endif # endif #endif /* UTMPOK || BUGGYGETLOGIN */ #if !defined(UTMPOK) && defined(USRLIMIT) # undef USRLIMIT #endif #ifdef LOGOUTOK # ifndef LOGINDEFAULT # define LOGINDEFAULT 0 # endif #else # ifdef LOGINDEFAULT # undef LOGINDEFAULT # endif # define LOGINDEFAULT 1 #endif /***************************************************************** * file stuff */ #ifndef F_OK #define F_OK 0 #endif #ifndef X_OK #define X_OK 1 #endif #ifndef W_OK #define W_OK 2 #endif #ifndef R_OK #define R_OK 4 #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif #ifndef S_IREAD #define S_IREAD 0000400 #endif #ifndef S_IWRITE #define S_IWRITE 0000200 #endif #ifndef S_IEXEC #define S_IEXEC 0000100 #endif #if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO) #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) #endif #if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK) #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) #endif #if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR) #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) #endif #if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR) #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) #endif #if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK) #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) #endif /* * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK: * * O_NONBLOCK Same as O_NDELAY above. * * on the very same SunOS 4.1.3, I traced the open system call and found * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked, * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY |O_NOCTTY) went through. * * For this simple reason I now favour O_NDELAY. jw. 4.5.95 */ #if defined(sun) && !defined(SVR4) # undef O_NONBLOCK #endif #if !defined(O_NONBLOCK) && defined(O_NDELAY) # define O_NONBLOCK O_NDELAY #endif #if !defined(FNBLOCK) && defined(FNONBLOCK) # define FNBLOCK FNONBLOCK #endif #if !defined(FNBLOCK) && defined(FNDELAY) # define FNBLOCK FNDELAY #endif #if !defined(FNBLOCK) && defined(O_NONBLOCK) # define FNBLOCK O_NONBLOCK #endif #ifndef POSIX #undef mkfifo #define mkfifo(n,m) mknod(n,S_IFIFO|(m),0) #endif #if !defined(HAVE_LSTAT) && !defined(lstat) # define lstat stat #endif /***************************************************************** * signal handling */ #ifdef SIGVOID # define SIGRETURN # define sigret_t void #else # define SIGRETURN return 0; # define sigret_t int #endif /* Geeeee, reverse it? */ #if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT) # define SIGHASARG #endif #ifdef SIGHASARG # define SIGPROTOARG (int) # define SIGDEFARG (sigsig) int sigsig; # define SIGARG 0 #else # define SIGPROTOARG (void) # define SIGDEFARG () # define SIGARG #endif #ifndef SIGCHLD #define SIGCHLD SIGCLD #endif #if defined(POSIX) || defined(hpux) # define signal xsignal #else # ifdef USESIGSET # define signal sigset # endif /* USESIGSET */ #endif /* used in screen.c and attacher.c */ #ifndef NSIG /* kbeal needs these w/o SYSV */ # define NSIG 32 #endif /* !NSIG */ /***************************************************************** * Wait stuff */ #if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX) # include #endif #ifndef WTERMSIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WTERMSIG(status) (status & 0177) # else # define WTERMSIG(status) status.w_T.w_Termsig # endif #endif #ifndef WSTOPSIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WSTOPSIG(status) ((status >> 8) & 0377) # else # define WSTOPSIG(status) status.w_S.w_Stopsig # endif #endif /* NET-2 uses WCOREDUMP */ #if defined(WCOREDUMP) && !defined(WIFCORESIG) # define WIFCORESIG(status) WCOREDUMP(status) #endif #ifndef WIFCORESIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WIFCORESIG(status) (status & 0200) # else # define WIFCORESIG(status) status.w_T.w_Coredump # endif #endif #ifndef WEXITSTATUS # ifndef BSDWAIT /* if wait is NOT a union: */ # define WEXITSTATUS(status) ((status >> 8) & 0377) # else # define WEXITSTATUS(status) status.w_T.w_Retcode # endif #endif /***************************************************************** * select stuff */ #if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_) || defined (__INTERIX) #include /* for timeval + FD... */ #endif /* * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93 * tschmidt@vax.micron.com */ #ifndef FD_SET # ifndef SUNOS3 typedef struct fd_set { int fds_bits[1]; } fd_set; # endif # define FD_ZERO(fd) ((fd)->fds_bits[0] = 0) # define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b)) # define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b)) # define FD_SETSIZE 32 #endif /***************************************************************** * user defineable stuff */ #ifndef TERMCAP_BUFSIZE # define TERMCAP_BUFSIZE 2048 #endif #ifndef MAXPATHLEN # define MAXPATHLEN 1024 #endif /* * you may try to vary this value. Use low values if your (VMS) system * tends to choke when pasting. Use high values if you want to test * how many characters your pty's can buffer. */ #define IOSIZE 4096 readline-6.3/examples/rlfe/pty.c0000644000043600000000000002015510524647536015506 0ustar chetwheel/* Copyright (c) 1993-2002 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** */ #include "config.h" #include #include #include #include #include #include "screen.h" #ifndef sun # include #endif /* for solaris 2.1, Unixware (SVR4.2) and possibly others */ #if defined (HAVE_SVR4_PTYS) && defined (HAVE_SYS_STROPTS_H) # include #endif #if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL) # include #endif #ifdef ISC # include # include # include #endif #ifdef sgi # include #endif /* sgi */ #include "extern.h" /* * if no PTYRANGE[01] is in the config file, we pick a default */ #ifndef PTYRANGE0 # define PTYRANGE0 "qpr" #endif #ifndef PTYRANGE1 # define PTYRANGE1 "0123456789abcdef" #endif /* SVR4 pseudo ttys don't seem to work with SCO-5 */ #ifdef M_UNIX # undef HAVE_SVR4_PTYS #endif extern int eff_uid; /* used for opening a new pty-pair: */ static char PtyName[32], TtyName[32]; #if !(defined(sequent) || defined(_SEQUENT_) || defined(HAVE_SVR4_PTYS)) # ifdef hpux static char PtyProto[] = "/dev/ptym/ptyXY"; static char TtyProto[] = "/dev/pty/ttyXY"; # else # ifdef M_UNIX static char PtyProto[] = "/dev/ptypXY"; static char TtyProto[] = "/dev/ttypXY"; # else static char PtyProto[] = "/dev/ptyXY"; static char TtyProto[] = "/dev/ttyXY"; # endif # endif /* hpux */ #endif static void initmaster __P((int)); #if defined(sun) /* sun's utmp_update program opens the salve side, thus corrupting */ int pty_preopen = 1; #else int pty_preopen = 0; #endif /* * Open all ptys with O_NOCTTY, just to be on the safe side * (RISCos mips breaks otherwise) */ #ifndef O_NOCTTY # define O_NOCTTY 0 #endif /***************************************************************/ static void initmaster(f) int f; { #ifdef POSIX tcflush(f, TCIOFLUSH); #else # ifdef TIOCFLUSH (void) ioctl(f, TIOCFLUSH, (char *) 0); # endif #endif #ifdef LOCKPTY (void) ioctl(f, TIOCEXCL, (char *) 0); #endif } void InitPTY(f) int f; { if (f < 0) return; #if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) && !defined(linux) && !defined(__osf__) && !defined(M_UNIX) if (ioctl(f, I_PUSH, "ptem")) Panic(errno, "InitPTY: cannot I_PUSH ptem"); if (ioctl(f, I_PUSH, "ldterm")) Panic(errno, "InitPTY: cannot I_PUSH ldterm"); # ifdef sun if (ioctl(f, I_PUSH, "ttcompat")) Panic(errno, "InitPTY: cannot I_PUSH ttcompat"); # endif #endif } /***************************************************************/ #if defined(OSX) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; if ((f = open_controlling_pty(TtyName)) < 0) return -1; initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if (defined(sequent) || defined(_SEQUENT_)) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { char *m, *s; register int f; if ((f = getpseudotty(&s, &m)) < 0) return -1; #ifdef _SEQUENT_ fvhangup(s); #endif strncpy(PtyName, m, sizeof(PtyName)); strncpy(TtyName, s, sizeof(TtyName)); initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(__sgi) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { int f; char *name, *_getpty(); sigret_t (*sigcld)__P(SIGPROTOARG); /* * SIGCHLD set to SIG_DFL for _getpty() because it may fork() and * exec() /usr/adm/mkpts */ sigcld = signal(SIGCHLD, SIG_DFL); name = _getpty(&f, O_RDWR | O_NONBLOCK, 0600, 0); signal(SIGCHLD, sigcld); if (name == 0) return -1; initmaster(f); *ttyn = name; return f; } #endif /***************************************************************/ #if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; struct stat buf; strcpy(PtyName, "/dev/ptc"); if ((f = open(PtyName, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) return -1; if (fstat(f, &buf) < 0) { close(f); return -1; } sprintf(TtyName, "/dev/ttyq%d", minor(buf.st_rdev)); initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; char *m, *ptsname(); int unlockpt __P((int)), grantpt __P((int)); #if defined(HAVE_GETPT) && defined(linux) int getpt __P((void)); #endif sigret_t (*sigcld)__P(SIGPROTOARG); strcpy(PtyName, "/dev/ptmx"); #if defined(HAVE_GETPT) && defined(linux) if ((f = getpt()) == -1) #else if ((f = open(PtyName, O_RDWR | O_NOCTTY)) == -1) #endif return -1; /* * SIGCHLD set to SIG_DFL for grantpt() because it fork()s and * exec()s pt_chmod */ sigcld = signal(SIGCHLD, SIG_DFL); if ((m = ptsname(f)) == NULL || grantpt(f) || unlockpt(f)) { signal(SIGCHLD, sigcld); close(f); return -1; } signal(SIGCHLD, sigcld); strncpy(TtyName, m, sizeof(TtyName)); initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(_AIX) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; /* a dumb looking loop replaced by mycrofts code: */ strcpy (PtyName, "/dev/ptc"); if ((f = open (PtyName, O_RDWR | O_NOCTTY)) < 0) return -1; strncpy(TtyName, ttyname(f), sizeof(TtyName)); if (eff_uid && access(TtyName, R_OK | W_OK)) { close(f); return -1; } initmaster(f); # ifdef _IBMR2 pty_preopen = 1; # endif *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(HAVE_OPENPTY) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { int f, s; if (openpty(&f, &s, TtyName, NULL, NULL) != 0) return -1; close(s); initmaster(f); pty_preopen = 1; *ttyn = TtyName; return f; } #endif /***************************************************************/ #ifndef PTY_DONE int OpenPTY(ttyn) char **ttyn; { register char *p, *q, *l, *d; register int f; debug("OpenPTY: Using BSD style ptys.\n"); strcpy(PtyName, PtyProto); strcpy(TtyName, TtyProto); for (p = PtyName; *p != 'X'; p++) ; for (q = TtyName; *q != 'X'; q++) ; for (l = PTYRANGE0; (*p = *l) != '\0'; l++) { for (d = PTYRANGE1; (p[1] = *d) != '\0'; d++) { debug1("OpenPTY tries '%s'\n", PtyName); if ((f = open(PtyName, O_RDWR | O_NOCTTY)) == -1) continue; q[0] = *l; q[1] = *d; if (eff_uid && access(TtyName, R_OK | W_OK)) { close(f); continue; } #if defined(sun) && defined(TIOCGPGRP) && !defined(SUNOS3) /* Hack to ensure that the slave side of the pty is * unused. May not work in anything other than SunOS4.1 */ { int pgrp; /* tcgetpgrp does not work (uses TIOCGETPGRP)! */ if (ioctl(f, TIOCGPGRP, (char *)&pgrp) != -1 || errno != EIO) { close(f); continue; } } #endif initmaster(f); *ttyn = TtyName; return f; } } return -1; } #endif readline-6.3/examples/rlfe/rlfe.c0000644000043600000000000004707711567744433015640 0ustar chetwheel/* A front-end using readline to "cook" input lines. * * Copyright (C) 2004, 1999 Per Bothner * * This front-end program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2, or (at your option) * any later version. * * Some code from Johnson & Troan: "Linux Application Development" * (Addison-Wesley, 1998) was used directly or for inspiration. * * 2003-11-07 Wolfgang Taeuber * Specify a history file and the size of the history file with command * line options; use EDITOR/VISUAL to set vi/emacs preference. */ /* PROBLEMS/TODO: * * Only tested under GNU/Linux and Mac OS 10.x; needs to be ported. * * Switching between line-editing-mode vs raw-char-mode depending on * what tcgetattr returns is inherently not robust, plus it doesn't * work when ssh/telnetting in. A better solution is possible if the * tty system can send in-line escape sequences indicating the current * mode, echo'd input, etc. That would also allow a user preference * to set different colors for prompt, input, stdout, and stderr. * * When running mc -c under the Linux console, mc does not recognize * mouse clicks, which mc does when not running under rlfe. * * Pasting selected text containing tabs is like hitting the tab character, * which invokes readline completion. We don't want this. I don't know * if this is fixable without integrating rlfe into a terminal emulator. * * Echo suppression is a kludge, but can only be avoided with better kernel * support: We need a tty mode to disable "real" echoing, while still * letting the inferior think its tty driver to doing echoing. * Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE. * * The latest readline may have some hooks we can use to avoid having * to back up the prompt. (See HAVE_ALREADY_PROMPTED.) * * Desirable readline feature: When in cooked no-echo mode (e.g. password), * echo characters are they are types with '*', but remove them when done. * * Asynchronous output while we're editing an input line should be * inserted in the output view *before* the input line, so that the * lines being edited (with the prompt) float at the end of the input. * * A "page mode" option to emulate more/less behavior: At each page of * output, pause for a user command. This required parsing the output * to keep track of line lengths. It also requires remembering the * output, if we want an option to scroll back, which suggests that * this should be integrated with a terminal emulator like xterm. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "extern.h" #if defined (HAVE_SYS_WAIT_H) # include #endif #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" #else # include # include #endif #ifndef COMMAND #define COMMAND "/bin/bash" #endif #ifndef COMMAND_ARGS #define COMMAND_ARGS COMMAND #endif #ifndef ALT_COMMAND #define ALT_COMMAND "/bin/sh" #endif #ifndef ALT_COMMAND_ARGS #define ALT_COMMAND_ARGS ALT_COMMAND #endif #ifndef HAVE_MEMMOVE # if __GNUC__ > 1 # define memmove(d, s, n) __builtin_memcpy(d, s, n) # else # define memmove(d, s, n) memcpy(d, s, n) # endif #else # define memmove(d, s, n) memcpy(d, s, n) #endif #define APPLICATION_NAME "rlfe" static int in_from_inferior_fd; static int out_to_inferior_fd; static void set_edit_mode (); static void usage_exit (); static char *hist_file = 0; static int hist_size = 0; /* Unfortunately, we cannot safely display echo from the inferior process. The reason is that the echo bit in the pty is "owned" by the inferior, and if we try to turn it off, we could confuse the inferior. Thus, when echoing, we get echo twice: First readline echoes while we're actually editing. Then we send the line to the inferior, and the terminal driver send back an extra echo. The work-around is to remember the input lines, and when we see that line come back, we supress the output. A better solution (supposedly available on SVR4) would be a smarter terminal driver, with more flags ... */ #define ECHO_SUPPRESS_MAX 1024 char echo_suppress_buffer[ECHO_SUPPRESS_MAX]; int echo_suppress_start = 0; int echo_suppress_limit = 0; /*#define DEBUG*/ #ifdef DEBUG FILE *logfile = NULL; #define DPRINT0(FMT) (fprintf(logfile, FMT), fflush(logfile)) #define DPRINT1(FMT, V1) (fprintf(logfile, FMT, V1), fflush(logfile)) #define DPRINT2(FMT, V1, V2) (fprintf(logfile, FMT, V1, V2), fflush(logfile)) #else #define DPRINT0(FMT) ((void) 0) /* Do nothing */ #define DPRINT1(FMT, V1) ((void) 0) /* Do nothing */ #define DPRINT2(FMT, V1, V2) ((void) 0) /* Do nothing */ #endif struct termios orig_term; /* Pid of child process. */ static pid_t child = -1; static void sig_child (int signo) { int status; wait (&status); if (hist_file != 0) { write_history (hist_file); if (hist_size) history_truncate_file (hist_file, hist_size); } DPRINT0 ("(Child process died.)\n"); tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); exit (0); } volatile int propagate_sigwinch = 0; /* sigwinch_handler * propagate window size changes from input file descriptor to * master side of pty. */ void sigwinch_handler(int signal) { propagate_sigwinch = 1; } /* get_slave_pty() returns an integer file descriptor. * If it returns < 0, an error has occurred. * Otherwise, it has returned the slave file descriptor. */ int get_slave_pty(char *name) { struct group *gptr; gid_t gid; int slave = -1; /* chown/chmod the corresponding pty, if possible. * This will only work if the process has root permissions. * Alternatively, write and exec a small setuid program that * does just this. */ if ((gptr = getgrnam("tty")) != 0) { gid = gptr->gr_gid; } else { /* if the tty group does not exist, don't change the * group on the slave pty, only the owner */ gid = -1; } /* Note that we do not check for errors here. If this is code * where these actions are critical, check for errors! */ chown(name, getuid(), gid); /* This code only makes the slave read/writeable for the user. * If this is for an interactive shell that will want to * receive "write" and "wall" messages, OR S_IWGRP into the * second argument below. */ chmod(name, S_IRUSR|S_IWUSR); /* open the corresponding slave pty */ slave = open(name, O_RDWR); return (slave); } /* Certain special characters, such as ctrl/C, we want to pass directly to the inferior, rather than letting readline handle them. */ static char special_chars[20]; static int special_chars_count; static void add_special_char(int ch) { if (ch != 0) special_chars[special_chars_count++] = ch; } static int eof_char; static int is_special_char(int ch) { int i; #if 0 if (ch == eof_char && rl_point == rl_end) return 1; #endif for (i = special_chars_count; --i >= 0; ) if (special_chars[i] == ch) return 1; return 0; } static char buf[1024]; /* buf[0 .. buf_count-1] is the what has been emitted on the current line. It is used as the readline prompt. */ static int buf_count = 0; int do_emphasize_input = 1; int current_emphasize_input; char *start_input_mode = "\033[1m"; char *end_input_mode = "\033[0m"; int num_keys = 0; static void maybe_emphasize_input (int on) { if (on == current_emphasize_input || (on && ! do_emphasize_input)) return; fprintf (rl_outstream, on ? start_input_mode : end_input_mode); fflush (rl_outstream); current_emphasize_input = on; } static void null_prep_terminal (int meta) { } static void null_deprep_terminal () { maybe_emphasize_input (0); } static int pre_input_change_mode (void) { return 0; } char pending_special_char; static void line_handler (char *line) { if (line == NULL) { char buf[1]; DPRINT0("saw eof!\n"); buf[0] = '\004'; /* ctrl/d */ write (out_to_inferior_fd, buf, 1); } else { static char enter[] = "\r"; /* Send line to inferior: */ int length = strlen (line); if (length > ECHO_SUPPRESS_MAX-2) { echo_suppress_start = 0; echo_suppress_limit = 0; } else { if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2) { if (echo_suppress_limit - echo_suppress_start + length <= ECHO_SUPPRESS_MAX - 2) { memmove (echo_suppress_buffer, echo_suppress_buffer + echo_suppress_start, echo_suppress_limit - echo_suppress_start); echo_suppress_limit -= echo_suppress_start; echo_suppress_start = 0; } else { echo_suppress_limit = 0; } echo_suppress_start = 0; } memcpy (echo_suppress_buffer + echo_suppress_limit, line, length); echo_suppress_limit += length; echo_suppress_buffer[echo_suppress_limit++] = '\r'; echo_suppress_buffer[echo_suppress_limit++] = '\n'; } write (out_to_inferior_fd, line, length); if (pending_special_char == 0) { write (out_to_inferior_fd, enter, sizeof(enter)-1); if (*line) add_history (line); } free (line); } rl_callback_handler_remove (); buf_count = 0; num_keys = 0; if (pending_special_char != 0) { write (out_to_inferior_fd, &pending_special_char, 1); pending_special_char = 0; } } /* Value of rl_getc_function. Use this because readline should read from stdin, not rl_instream, points to the pty (so readline has monitor its terminal modes). */ int my_rl_getc (FILE *dummy) { int ch = rl_getc (stdin); if (is_special_char (ch)) { pending_special_char = ch; return '\r'; } return ch; } int main(int argc, char** argv) { char *path; int i; int master; char *name; int in_from_tty_fd; struct sigaction act; struct winsize ws; struct termios t; int maxfd; fd_set in_set; static char empty_string[1] = ""; char *prompt = empty_string; int ioctl_err = 0; int arg_base = 1; #ifdef DEBUG logfile = fopen("/tmp/rlfe.log", "w"); #endif while (arg_base= argc ) usage_exit(); switch(argv[arg_base][1]) { case 'h': arg_base++; hist_file = argv[arg_base]; break; case 's': arg_base++; hist_size = atoi(argv[arg_base]); if (hist_size<0) usage_exit(); break; default: usage_exit(); } arg_base++; } if (hist_file) read_history (hist_file); set_edit_mode (); rl_readline_name = APPLICATION_NAME; if ((master = OpenPTY (&name)) < 0) { perror("ptypair: could not open master pty"); exit(1); } DPRINT1("pty name: '%s'\n", name); /* set up SIGWINCH handler */ act.sa_handler = sigwinch_handler; sigemptyset(&(act.sa_mask)); act.sa_flags = 0; if (sigaction(SIGWINCH, &act, NULL) < 0) { perror("ptypair: could not handle SIGWINCH "); exit(1); } if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0) { perror("ptypair: could not get window size"); exit(1); } if ((child = fork()) < 0) { perror("cannot fork"); exit(1); } if (child == 0) { int slave; /* file descriptor for slave pty */ /* We are in the child process */ close(master); #ifdef TIOCSCTTY if ((slave = get_slave_pty(name)) < 0) { perror("ptypair: could not open slave pty"); exit(1); } #endif /* We need to make this process a session group leader, because * it is on a new PTY, and things like job control simply will * not work correctly unless there is a session group leader * and process group leader (which a session group leader * automatically is). This also disassociates us from our old * controlling tty. */ if (setsid() < 0) { perror("could not set session leader"); } /* Tie us to our new controlling tty. */ #ifdef TIOCSCTTY if (ioctl(slave, TIOCSCTTY, NULL)) { perror("could not set new controlling tty"); } #else if ((slave = get_slave_pty(name)) < 0) { perror("ptypair: could not open slave pty"); exit(1); } #endif /* make slave pty be standard in, out, and error */ dup2(slave, STDIN_FILENO); dup2(slave, STDOUT_FILENO); dup2(slave, STDERR_FILENO); /* at this point the slave pty should be standard input */ if (slave > 2) { close(slave); } /* Try to restore window size; failure isn't critical */ if (ioctl(STDOUT_FILENO, TIOCSWINSZ, &ws) < 0) { perror("could not restore window size"); } /* now start the shell */ { static char* command_args[] = { COMMAND_ARGS, NULL }; static char* alt_command_args[] = { ALT_COMMAND_ARGS, NULL }; if (argc <= 1) { execvp (COMMAND, command_args); execvp (ALT_COMMAND, alt_command_args); } else execvp (argv[arg_base], &argv[arg_base]); } /* should never be reached */ exit(1); } /* parent */ signal (SIGCHLD, sig_child); /* Note that we only set termios settings for standard input; * the master side of a pty is NOT a tty. */ tcgetattr(STDIN_FILENO, &orig_term); t = orig_term; eof_char = t.c_cc[VEOF]; /* add_special_char(t.c_cc[VEOF]);*/ add_special_char(t.c_cc[VINTR]); add_special_char(t.c_cc[VQUIT]); add_special_char(t.c_cc[VSUSP]); #if defined (VDISCARD) add_special_char(t.c_cc[VDISCARD]); #endif t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \ ECHOK | ECHONL #if defined (ECHOKE) | ECHOKE #endif #if defined (ECHOPRT) | ECHOPRT #endif ); t.c_iflag &= ~ICRNL; t.c_iflag |= IGNBRK; t.c_cc[VMIN] = 1; t.c_cc[VTIME] = 0; tcsetattr(STDIN_FILENO, TCSANOW, &t); in_from_inferior_fd = master; out_to_inferior_fd = master; rl_instream = fdopen (master, "r"); rl_getc_function = my_rl_getc; rl_prep_term_function = null_prep_terminal; rl_deprep_term_function = null_deprep_terminal; rl_pre_input_hook = pre_input_change_mode; rl_callback_handler_install (prompt, line_handler); in_from_tty_fd = STDIN_FILENO; FD_ZERO (&in_set); maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd : in_from_tty_fd; for (;;) { int num; FD_SET (in_from_inferior_fd, &in_set); FD_SET (in_from_tty_fd, &in_set); num = select(maxfd+1, &in_set, NULL, NULL, NULL); if (propagate_sigwinch) { struct winsize ws; if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) >= 0) { ioctl (master, TIOCSWINSZ, &ws); } propagate_sigwinch = 0; continue; } if (num <= 0) { perror ("select"); exit (-1); } if (FD_ISSET (in_from_tty_fd, &in_set)) { extern int _rl_echoing_p; struct termios term_master; int do_canon = 1; int do_icrnl = 1; int ioctl_ret; DPRINT1("[tty avail num_keys:%d]\n", num_keys); /* If we can't get tty modes for the master side of the pty, we can't handle non-canonical-mode programs. Always assume the master is in canonical echo mode if we can't tell. */ ioctl_ret = tcgetattr(master, &term_master); if (ioctl_ret >= 0) { do_canon = (term_master.c_lflag & ICANON) != 0; do_icrnl = (term_master.c_lflag & ICRNL) != 0; _rl_echoing_p = (term_master.c_lflag & ECHO) != 0; DPRINT1 ("echo,canon,crnl:%03d\n", 100 * _rl_echoing_p + 10 * do_canon + 1 * do_icrnl); } else { if (ioctl_err == 0) DPRINT1("tcgetattr on master fd failed: errno = %d\n", errno); ioctl_err = 1; } if (do_canon == 0 && num_keys == 0) { char ch[10]; int count = read (STDIN_FILENO, ch, sizeof(ch)); DPRINT1("[read %d chars from stdin: ", count); DPRINT2(" \"%.*s\"]\n", count, ch); if (do_icrnl) { int i = count; while (--i >= 0) { if (ch[i] == '\r') ch[i] = '\n'; } } maybe_emphasize_input (1); write (out_to_inferior_fd, ch, count); } else { if (num_keys == 0) { int i; /* Re-install callback handler for new prompt. */ if (prompt != empty_string) free (prompt); if (prompt == NULL) { DPRINT0("New empty prompt\n"); prompt = empty_string; } else { if (do_emphasize_input && buf_count > 0) { prompt = malloc (buf_count + strlen (end_input_mode) + strlen (start_input_mode) + 5); sprintf (prompt, "\001%s\002%.*s\001%s\002", end_input_mode, buf_count, buf, start_input_mode); } else { prompt = malloc (buf_count + 1); memcpy (prompt, buf, buf_count); prompt[buf_count] = '\0'; } DPRINT1("New prompt '%s'\n", prompt); #if 0 /* ifdef HAVE_RL_ALREADY_PROMPTED */ /* Doesn't quite work when do_emphasize_input is 1. */ rl_already_prompted = buf_count > 0; #else if (buf_count > 0) write (1, "\r", 1); #endif } rl_callback_handler_install (prompt, line_handler); } num_keys++; maybe_emphasize_input (1); rl_callback_read_char (); } } else /* output from inferior. */ { int i; int count; int old_count; if (buf_count > (sizeof(buf) >> 2)) buf_count = 0; count = read (in_from_inferior_fd, buf+buf_count, sizeof(buf) - buf_count); DPRINT2("read %d from inferior, buf_count=%d", count, buf_count); DPRINT2(": \"%.*s\"", count, buf+buf_count); maybe_emphasize_input (0); if (count <= 0) { DPRINT0 ("(Connection closed by foreign host.)\n"); tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); exit (0); } old_count = buf_count; /* Look for any pending echo that we need to suppress. */ while (echo_suppress_start < echo_suppress_limit && count > 0 && buf[buf_count] == echo_suppress_buffer[echo_suppress_start]) { count--; buf_count++; echo_suppress_start++; } DPRINT1("suppressed %d characters of echo.\n", buf_count-old_count); /* Write to the terminal anything that was not suppressed. */ if (count > 0) write (1, buf + buf_count, count); /* Finally, look for a prompt candidate. * When we get around to going input (from the keyboard), * we will consider the prompt to be anything since the last * line terminator. So we need to save that text in the * initial part of buf. However, anything before the * most recent end-of-line is not interesting. */ buf_count += count; #if 1 for (i = buf_count; --i >= old_count; ) #else for (i = buf_count - 1; i-- >= buf_count - count; ) #endif { if (buf[i] == '\n' || buf[i] == '\r') { i++; memmove (buf, buf+i, buf_count - i); buf_count -= i; break; } } DPRINT2("-> i: %d, buf_count: %d\n", i, buf_count); } } } static void set_edit_mode () { int vi = 0; char *shellopts; shellopts = getenv ("SHELLOPTS"); while (shellopts != 0) { if (strncmp ("vi", shellopts, 2) == 0) { vi = 1; break; } shellopts = strchr (shellopts + 1, ':'); } if (!vi) { if (getenv ("EDITOR") != 0) vi |= strcmp (getenv ("EDITOR"), "vi") == 0; } if (vi) rl_variable_bind ("editing-mode", "vi"); else rl_variable_bind ("editing-mode", "emacs"); } static void usage_exit () { fprintf (stderr, "Usage: rlfe [-h histfile] [-s size] cmd [arg1] [arg2] ...\n\n"); exit (1); } readline-6.3/examples/rlfe/screen.h0000664000043600000240000000007410142522024016137 0ustar chetstaff/* Dummy header to avoid modifying pty.c */ #include "os.h" readline-6.3/examples/Makefile.in0000664000043600000240000001160012223320773015632 0ustar chetstaff# # This is the Makefile for the readline examples subdirectory. # # Copyright (C) 1994,2008,2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . RL_LIBRARY_VERSION = @LIBVERSION@ SHELL = @MAKE_SHELL@ RM = rm -f prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ srcdir = @srcdir@ datadir = @datadir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ #BUILD_DIR = . BUILD_DIR = @BUILD_DIR@ installdir = $(datadir)/readline INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ # Support an alternate destination root directory for package building DESTDIR = DEFS = @DEFS@ CC = @CC@ CFLAGS = @CFLAGS@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DREADLINE_LIBRARY -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ INCLUDES = -I$(srcdir) -I$(top_srcdir) -I.. CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) LDFLAGS = -g -L.. @LDFLAGS@ PURIFY = @PURIFY@ READLINE_LIB = ../libreadline.a HISTORY_LIB = ../libhistory.a TERMCAP_LIB = @TERMCAP_LIB@ .c.o: ${RM} $@ $(CC) $(CCFLAGS) -c $< SOURCES = excallback.c fileman.c histexamp.c manexamp.c rl-fgets.c rl.c \ rlcat.c rlevent.c rlptytest.c rltest.c rlversion.c \ rl-callbacktest.c hist_erasedups.c hist_purgecmd.c EXECUTABLES = fileman$(EXEEXT) rltest$(EXEEXT) rl$(EXEEXT) rlcat$(EXEEXT) \ rlevent$(EXEEXT) rlversion$(EXEEXT) histexamp$(EXEEXT) \ rl-callbacktest$(EXEEXT) \ hist_erasedups$(EXEEXT) hist_purgecmd$(EXEEXT) OBJECTS = fileman.o rltest.o rl.o rlevent.o rlcat.o rlversion.o histexamp.o \ rl-callbacktest.o hist_erasedups.o hist_purgecmd.o OTHEREXE = rlptytest$(EXEEXT) OTHEROBJ = rlptytest.o all: $(EXECUTABLES) everything: all check: rlversion$(EXEEXT) @echo Readline version: `rlversion$(EXEEXT)` installdirs: -$(SHELL) $(top_srcdir)/support/mkdirs $(DESTDIR)$(installdir) install: installdirs @for f in $(SOURCES); do \ $(RM) $(DESTDIR)$(installdir)/$$f ; \ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(installdir) ; \ done uninstall: @for f in $(SOURCES); do \ $(RM) $(DESTDIR)$(installdir)/$$f ; \ done -rmdir $(DESTDIR)$(installdir) rl$(EXEEXT): rl.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ rl.o $(READLINE_LIB) $(TERMCAP_LIB) rlcat$(EXEEXT): rlcat.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlcat.o $(READLINE_LIB) $(TERMCAP_LIB) rlevent$(EXEEXT): rlevent.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlevent.o $(READLINE_LIB) $(TERMCAP_LIB) fileman$(EXEEXT): fileman.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ fileman.o $(READLINE_LIB) $(TERMCAP_LIB) rltest$(EXEEXT): rltest.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ rltest.o $(READLINE_LIB) $(TERMCAP_LIB) rl-callbacktest$(EXEEXT): rl-callbacktest.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ rl-callbacktest.o $(READLINE_LIB) $(TERMCAP_LIB) rlptytest$(EXEEXT): rlptytest.o $(READLINE_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ rlptytest.o $(READLINE_LIB) $(TERMCAP_LIB) rlversion$(EXEEXT): rlversion.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlversion.o $(READLINE_LIB) $(TERMCAP_LIB) histexamp$(EXEEXT): histexamp.o $(HISTORY_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ histexamp.o -lhistory $(TERMCAP_LIB) hist_erasedups$(EXEEXT): hist_erasedups.o $(HISTORY_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ hist_erasedups.o -lhistory $(TERMCAP_LIB) hist_purgecmd$(EXEEXT): hist_purgecmd.o $(HISTORY_LIB) $(PURIFY) $(CC) $(LDFLAGS) -o $@ hist_purgecmd.o -lhistory $(TERMCAP_LIB) clean mostlyclean: $(RM) $(OBJECTS) $(OTHEROBJ) $(RM) $(EXECUTABLES) $(OTHEREXE) *.exe distclean maintainer-clean: clean $(RM) Makefile fileman.o: fileman.c rltest.o: rltest.c rl.o: rl.c rlversion.o: rlversion.c histexamp.o: histexamp.c hist_erasedups.o: hist_erasedups.c hist_purgecmd.o: hist_purgecmd.c rlcat.o: rlcat.c rlptytest.o: rlptytest.c rl-callbacktest.o: rl-callbacktest.c fileman.o: $(top_srcdir)/readline.h rltest.o: $(top_srcdir)/readline.h rl.o: $(top_srcdir)/readline.h rlversion.o: $(top_srcdir)/readline.h histexamp.o: $(top_srcdir)/history.h hist_erasedups.o: $(top_srcdir)/history.h hist_purgecmd.o: $(top_srcdir)/history.h rlcat.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h rlptytest.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h rl-callbacktest.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h readline-6.3/examples/excallback.c0000644000043600000000000001326011605321745016022 0ustar chetwheel/* From: Jeff Solomon Date: Fri, 9 Apr 1999 10:13:27 -0700 (PDT) To: chet@po.cwru.edu Subject: new readline example Message-ID: <14094.12094.527305.199695@mrclean.Stanford.EDU> Chet, I've been using readline 4.0. Specifically, I've been using the perl version Term::ReadLine::Gnu. It works great. Anyway, I've been playing around the alternate interface and I wanted to contribute a little C program, callback.c, to you that you could use as an example of the alternate interface in the /examples directory of the readline distribution. My example shows how, using the alternate interface, you can interactively change the prompt (which is very nice imo). Also, I point out that you must roll your own terminal setting when using the alternate interface because readline depreps (using your parlance) the terminal while in the user callback. I try to demostrate what I mean with an example. I've included the program below. To compile, I just put the program in the examples directory and made the appropriate changes to the EXECUTABLES and OBJECTS line and added an additional target 'callback'. I compiled on my Sun Solaris2.6 box using Sun's cc. Let me know what you think. Jeff */ /* Copyright (C) 1999 Jeff Solomon */ #if defined (HAVE_CONFIG_H) #include #endif #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include /* xxx - should make this more general */ #ifdef READLINE_LIBRARY # include "readline.h" #else # include #endif #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif /* This little examples demonstrates the alternate interface to using readline. * In the alternate interface, the user maintains control over program flow and * only calls readline when STDIN is readable. Using the alternate interface, * you can do anything else while still using readline (like talking to a * network or another program) without blocking. * * Specifically, this program highlights two importants features of the * alternate interface. The first is the ability to interactively change the * prompt, which can't be done using the regular interface since rl_prompt is * read-only. * * The second feature really highlights a subtle point when using the alternate * interface. That is, readline will not alter the terminal when inside your * callback handler. So let's so, your callback executes a user command that * takes a non-trivial amount of time to complete (seconds). While your * executing the command, the user continues to type keystrokes and expects them * to be re-echoed on the new prompt when it returns. Unfortunately, the default * terminal configuration doesn't do this. After the prompt returns, the user * must hit one additional keystroke and then will see all of his previous * keystrokes. To illustrate this, compile and run this program. Type "sleep" at * the prompt and then type "bar" before the prompt returns (you have 3 * seconds). Notice how "bar" is re-echoed on the prompt after the prompt * returns? This is what you expect to happen. Now comment out the 4 lines below * the line that says COMMENT LINE BELOW. Recompile and rerun the program and do * the same thing. When the prompt returns, you should not see "bar". Now type * "f", see how "barf" magically appears? This behavior is un-expected and not * desired. */ void process_line(char *line); int change_prompt(void); char *get_prompt(void); int prompt = 1; char prompt_buf[40], line_buf[256]; tcflag_t old_lflag; cc_t old_vtime; struct termios term; int main() { fd_set fds; /* Adjust the terminal slightly before the handler is installed. Disable * canonical mode processing and set the input character time flag to be * non-blocking. */ if( tcgetattr(STDIN_FILENO, &term) < 0 ) { perror("tcgetattr"); exit(1); } old_lflag = term.c_lflag; old_vtime = term.c_cc[VTIME]; term.c_lflag &= ~ICANON; term.c_cc[VTIME] = 1; /* COMMENT LINE BELOW - see above */ if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) { perror("tcsetattr"); exit(1); } rl_add_defun("change-prompt", change_prompt, CTRL('t')); rl_callback_handler_install(get_prompt(), process_line); while(1) { FD_ZERO(&fds); FD_SET(fileno(stdin), &fds); if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) < 0) { perror("select"); exit(1); } if( FD_ISSET(fileno(stdin), &fds) ) { rl_callback_read_char(); } } } void process_line(char *line) { if( line == NULL ) { fprintf(stderr, "\n", line); /* reset the old terminal setting before exiting */ term.c_lflag = old_lflag; term.c_cc[VTIME] = old_vtime; if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) { perror("tcsetattr"); exit(1); } exit(0); } if( strcmp(line, "sleep") == 0 ) { sleep(3); } else { fprintf(stderr, "|%s|\n", line); } free (line); } int change_prompt(void) { /* toggle the prompt variable */ prompt = !prompt; /* save away the current contents of the line */ strcpy(line_buf, rl_line_buffer); /* install a new handler which will change the prompt and erase the current line */ rl_callback_handler_install(get_prompt(), process_line); /* insert the old text on the new line */ rl_insert_text(line_buf); /* redraw the current line - this is an undocumented function. It invokes the * redraw-current-line command. */ rl_refresh_line(0, 0); } char * get_prompt(void) { /* The prompts can even be different lengths! */ sprintf(prompt_buf, "%s", prompt ? "Hit ctrl-t to toggle prompt> " : "Pretty cool huh?> "); return prompt_buf; } readline-6.3/examples/fileman.c0000664000043600000000000002624211130207321015334 0ustar chetwheel/* fileman.c - file manager example for readline library. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ /* 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_SYS_FILE_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #ifdef HAVE_STDLIB_H # include #endif #include #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" #else # include # include #endif extern char *xmalloc PARAMS((size_t)); /* The names of functions that actually do the manipulation. */ int com_list PARAMS((char *)); int com_view PARAMS((char *)); int com_rename PARAMS((char *)); int com_stat PARAMS((char *)); int com_pwd PARAMS((char *)); int com_delete PARAMS((char *)); int com_help PARAMS((char *)); int com_cd PARAMS((char *)); int com_quit PARAMS((char *)); /* A structure which contains information on the commands this program can understand. */ typedef struct { char *name; /* User printable name of the function. */ rl_icpfunc_t *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, (rl_icpfunc_t *)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) char *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 PARAMS((const char *, int)); char **fileman_completion PARAMS((const char *, int, int)); /* 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 = 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) const 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 = rl_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) const 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; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ sprintf (syscom, "less %s", arg); #else sprintf (syscom, "more %s", arg); #endif 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 = getcwd (dir, sizeof(dir) - 1); 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); } readline-6.3/examples/manexamp.c0000664000043600000000000000634411130207321015530 0ustar chetwheel/* manexamp.c -- The examples which appear in the documentation are here. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #include #include /* **************************************************************** */ /* */ /* How to Emulate gets () */ /* */ /* **************************************************************** */ /* 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); } /* **************************************************************** */ /* */ /* Writing a Function to be Called by Readline. */ /* */ /* **************************************************************** */ /* Invert the case of the COUNT following characters. */ invert_case_line (count, key) int count, key; { register int start, end; start = rl_point; 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 = -1; if (start > end) { int temp = start; start = end; end = temp; } if (start == end) return; /* Tell readline that we are modifying the line, so save the undo information. */ rl_modifying (start, end); for (; start != end; start += direction) { if (_rl_uppercase_p (rl_line_buffer[start])) rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]); else if (_rl_lowercase_p (rl_line_buffer[start])) rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]); } /* Move point to on top of the last character changed. */ rl_point = end - direction; } readline-6.3/examples/readlinebuf.h0000644000043600000000000000655511053014510016211 0ustar chetwheel/******************************************************************************* * $Revision: 1.2 $ * $Date: 2001/09/11 06:19:36 $ * $Author: vyzo $ * * Contents: A streambuf which uses the GNU readline library for line I/O * (c) 2001 by Dimitris Vyzovitis [vyzo@media.mit.edu] * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * ******************************************************************************/ #ifndef _READLINEBUF_H_ #define _READLINEBUF_H_ #include #include #include #include #include #include #include #if (defined __GNUC__) && (__GNUC__ < 3) #include #else #include using std::streamsize; using std::streambuf; #endif class readlinebuf : public streambuf { public: #if (defined __GNUC__) && (__GNUC__ < 3) typedef char char_type; typedef int int_type; typedef streampos pos_type; typedef streamoff off_type; #endif static const int_type eof = EOF; // this is -1 static const int_type not_eof = 0; private: const char* prompt_; bool history_; char* line_; int low_; int high_; protected: virtual int_type showmanyc() const { return high_ - low_; } virtual streamsize xsgetn( char_type* buf, streamsize n ) { int rd = n > (high_ - low_)? (high_ - low_) : n; memcpy( buf, line_, rd ); low_ += rd; if ( rd < n ) { low_ = high_ = 0; free( line_ ); // free( NULL ) is a noop line_ = readline( prompt_ ); if ( line_ ) { high_ = strlen( line_ ); if ( history_ && high_ ) add_history( line_ ); rd += xsgetn( buf + rd, n - rd ); } } return rd; } virtual int_type underflow() { if ( high_ == low_ ) { low_ = high_ = 0; free( line_ ); // free( NULL ) is a noop line_ = readline( prompt_ ); if ( line_ ) { high_ = strlen( line_ ); if ( history_ && high_ ) add_history( line_ ); } } if ( low_ < high_ ) return line_[low_]; else return eof; } virtual int_type uflow() { int_type c = underflow(); if ( c != eof ) ++low_; return c; } virtual int_type pbackfail( int_type c = eof ) { if ( low_ > 0 ) --low_; else if ( c != eof ) { if ( high_ > 0 ) { char* nl = (char*)realloc( line_, high_ + 1 ); if ( nl ) { line_ = (char*)memcpy( nl + 1, line_, high_ ); high_ += 1; line_[0] = char( c ); } else return eof; } else { assert( !line_ ); line_ = (char*)malloc( sizeof( char ) ); *line_ = char( c ); high_ = 1; } } else return eof; return not_eof; } public: readlinebuf( const char* prompt = NULL, bool history = true ) : prompt_( prompt ), history_( history ), line_( NULL ), low_( 0 ), high_( 0 ) { setbuf( 0, 0 ); } }; #endif readline-6.3/examples/rl-fgets.c0000644000043600000240000002561310042030201015440 0ustar chetstaff/* Date: Tue, 16 Mar 2004 19:38:40 -0800 From: Harold Levy Subject: fgets(stdin) --> readline() redirector To: chet@po.cwru.edu Hi Chet, Here is something you may find useful enough to include in the readline distribution. It is a shared library that redirects calls to fgets(stdin) to readline() via LD_PRELOAD, and it supports a custom prompt and list of command names. Many people have asked me for this file, so I thought I'd pass it your way in hope of just including it with readline to begin with. Best Regards, -Harold */ /****************************************************************************** ******************************************************************************* FILE NAME: fgets.c TARGET: libfgets.so AUTHOR: Harold Levy VERSION: 1.0 hlevy@synopsys.com ABSTRACT: Customize fgets() behavior via LD_PRELOAD in the following ways: -- If fgets(stdin) is called, redirect to GNU readline() to obtain command-line editing, file-name completion, history, etc. -- A list of commands for command-name completion can be configured by setting the environment-variable FGETS_COMMAND_FILE to a file containing the list of commands to be used. -- Command-line editing with readline() works best when the prompt string is known; you can set this with the FGETS_PROMPT environment variable. -- There special strings that libfgets will interpret as internal commands: _fgets_reset_ reset the command list _fgets_dump_ dump status _fgets_debug_ toggle debug messages HOW TO BUILD: Here are examples of how to build libfgets.so on various platforms; you will have to add -I and -L flags to configure access to the readline header and library files. (32-bit builds with gcc) AIX: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldl -lreadline -ltermcap HP-UX: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldld -lreadline Linux: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldl -lreadline SunOS: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldl -lgen -lreadline (64-bit builds without gcc) SunOS: SUNWspro/bin/cc -D_LARGEFILE64_SOURCE=1 -xtarget=ultra -xarch=v9 \ -KPIC fgets.c -Bdynamic -lc -ldl -lgen -ltermcap -lreadline HOW TO USE: Different operating systems have different levels of support for the LD_PRELOAD concept. The generic method for 32-bit platforms is to put libtermcap.so, libfgets.so, and libreadline.so (with absolute paths) in the LD_PRELOAD environment variable, and to put their parent directories in the LD_LIBRARY_PATH environment variable. Unfortunately there is no generic method for 64-bit platforms; e.g. for 64-bit SunOS, you would have to build both 32-bit and 64-bit libfgets and libreadline libraries, and use the LD_FLAGS_32 and LD_FLAGS_64 environment variables with preload and library_path configurations (a mix of 32-bit and 64-bit calls are made under 64-bit SunOS). EXAMPLE WRAPPER: Here is an example shell script wrapper around the program "foo" that uses fgets() for command-line input: #!/bin/csh #### replace this with the libtermcap.so directory: set dir1 = "/usr/lib" #### replace this with the libfgets.so directory: set dir2 = "/usr/fgets" #### replace this with the libreadline.so directory: set dir3 = "/usr/local/lib" set lib1 = "${dir1}/libtermcap.so" set lib2 = "${dir2}/libfgets.so" set lib3 = "${dir3}/libreadline.so" if ( "${?LD_PRELOAD}" ) then setenv LD_PRELOAD "${lib1}:${lib2}:${lib3}:${LD_PRELOAD}" else setenv LD_PRELOAD "${lib1}:${lib2}:${lib3}" endif if ( "${?LD_LIBRARY_PATH}" ) then setenv LD_LIBRARY_PATH "${dir1}:${dir2}:${dir3}:${LD_LIBRARY_PATH}" else setenv LD_LIBRARY_PATH "${dir1}:${dir2}:${dir3}" endif setenv FGETS_COMMAND_FILE "${dir2}/foo.commands" setenv FGETS_PROMPT "foo> " exec "foo" $* Copyright (C)©2003-2004 Harold Levy. This code links to the GNU readline library, and as such is bound by the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 or (at your option) any later version. The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ******************************************************************************* ******************************************************************************/ #include #include #include #include #include #include #include /* for dynamically connecting to the native fgets() */ #if defined(RTLD_NEXT) #define REAL_LIBC RTLD_NEXT #else #define REAL_LIBC ((void *) -1L) #endif typedef char * ( * fgets_t ) ( char * s, int n, FILE * stream ) ; /* private data */ /* -- writeable data is stored in the shared library's data segment -- every process that uses the shared library gets a private memory copy of its entire data segment -- static data in the shared library is not copied to the application -- only read-only (i.e. 'const') data is stored in the shared library's text segment */ static char ** my_fgets_names = NULL ; static int my_fgets_number_of_names = 0 ; static int my_fgets_debug_flag = 0 ; /* invoked with _fgets_reset_ */ static void my_fgets_reset ( void ) { if ( my_fgets_names && (my_fgets_number_of_names > 0) ) { int i ; if ( my_fgets_debug_flag ) { printf ( "libfgets: removing command list\n" ) ; } for ( i = 0 ; i < my_fgets_number_of_names ; i ++ ) { if ( my_fgets_names[i] ) free ( my_fgets_names[i] ) ; } free ( my_fgets_names ) ; } my_fgets_names = NULL ; my_fgets_number_of_names = 0 ; } /* invoked with _fgets_dump_ */ static void my_fgets_dump ( void ) { char * s ; printf ( "\n" ) ; s = getenv ( "FGETS_PROMPT" ) ; printf ( "FGETS_PROMPT = %s\n", s ? s : "" ) ; s = getenv ( "FGETS_COMMAND_FILE" ) ; printf ( "FGETS_COMMAND_FILE = %s\n", s ? s : "" ) ; printf ( "debug flag = %d\n", my_fgets_debug_flag ) ; printf ( "#commands = %d\n", my_fgets_number_of_names ) ; if ( my_fgets_debug_flag ) { if ( my_fgets_names && (my_fgets_number_of_names > 0) ) { int i ; for ( i = 0 ; i < my_fgets_number_of_names ; i ++ ) { printf ( "%s\n", my_fgets_names[i] ) ; } } } printf ( "\n" ) ; } /* invoked with _fgets_debug_ */ static void my_fgets_debug_toggle ( void ) { my_fgets_debug_flag = my_fgets_debug_flag ? 0 : 1 ; if ( my_fgets_debug_flag ) { printf ( "libfgets: debug flag = %d\n", my_fgets_debug_flag ) ; } } /* read the command list if needed, return the i-th name */ static char * my_fgets_lookup ( int index ) { if ( (! my_fgets_names) || (! my_fgets_number_of_names) ) { char * fname ; FILE * fp ; fgets_t _fgets ; int i ; char buf1[256], buf2[256] ; fname = getenv ( "FGETS_COMMAND_FILE" ) ; if ( ! fname ) { if ( my_fgets_debug_flag ) { printf ( "libfgets: empty or unset FGETS_COMMAND_FILE\n" ) ; } return NULL ; } fp = fopen ( fname, "r" ) ; if ( ! fp ) { if ( my_fgets_debug_flag ) { printf ( "libfgets: cannot open '%s' for reading\n", fname ) ; } return NULL ; } _fgets = (fgets_t) dlsym ( REAL_LIBC, "fgets" ) ; if ( ! _fgets ) { fprintf ( stderr, "libfgets: failed to dynamically link to native fgets()\n" ) ; return NULL ; } for ( i = 0 ; _fgets(buf1,255,fp) ; i ++ ) ; if ( ! i ) { fclose(fp) ; return NULL ; } my_fgets_names = (char**) calloc ( i, sizeof(char*) ) ; rewind ( fp ) ; i = 0 ; while ( _fgets(buf1,255,fp) ) { buf1[255] = 0 ; if ( 1 == sscanf(buf1,"%s",buf2) ) { my_fgets_names[i] = strdup(buf2) ; i ++ ; } } fclose ( fp ) ; my_fgets_number_of_names = i ; if ( my_fgets_debug_flag ) { printf ( "libfgets: successfully read %d commands\n", i ) ; } } if ( index < my_fgets_number_of_names ) { return my_fgets_names[index] ; } else { return NULL ; } } /* generate a list of partial name matches for readline() */ static char * my_fgets_generator ( const char * text, int state ) { static int list_index, len ; char * name ; if ( ! state ) { list_index = 0 ; len = strlen ( text ) ; } while ( ( name = my_fgets_lookup(list_index) ) ) { list_index ++ ; if ( ! strncmp ( name, text, len ) ) { return ( strdup ( name ) ) ; } } return ( NULL ) ; } /* partial name completion callback for readline() */ static char ** my_fgets_completion ( const char * text, int start, int end ) { char ** matches ; matches = NULL ; if ( ! start ) { matches = rl_completion_matches ( text, my_fgets_generator ) ; } return ( matches ) ; } /* fgets() intercept */ char * fgets ( char * s, int n, FILE * stream ) { if ( ! s ) return NULL ; if ( stream == stdin ) { char * prompt ; char * my_fgets_line ; rl_already_prompted = 1 ; rl_attempted_completion_function = my_fgets_completion ; rl_catch_signals = 1 ; rl_catch_sigwinch = 1 ; rl_set_signals () ; prompt = getenv ( "FGETS_PROMPT" ) ; for ( my_fgets_line = 0 ; ! my_fgets_line ; my_fgets_line=readline(prompt) ) ; if ( ! strncmp(my_fgets_line, "_fgets_reset_", 13) ) { my_fgets_reset () ; free ( my_fgets_line ) ; strcpy ( s, "\n" ) ; return ( s ) ; } if ( ! strncmp(my_fgets_line, "_fgets_dump_", 12) ) { my_fgets_dump () ; free ( my_fgets_line ) ; strcpy ( s, "\n" ) ; return ( s ) ; } if ( ! strncmp(my_fgets_line, "_fgets_debug_", 13) ) { my_fgets_debug_toggle () ; free ( my_fgets_line ) ; strcpy ( s, "\n" ) ; return ( s ) ; } (void) strncpy ( s, my_fgets_line, n-1 ) ; (void) strcat ( s, "\n" ) ; if ( *my_fgets_line ) add_history ( my_fgets_line ) ; free ( my_fgets_line ) ; return ( s ) ; } else { static fgets_t _fgets ; _fgets = (fgets_t) dlsym ( REAL_LIBC, "fgets" ) ; if ( ! _fgets ) { fprintf ( stderr, "libfgets: failed to dynamically link to native fgets()\n" ) ; strcpy ( s, "\n" ) ; return ( s ) ; } return ( _fgets ( s, n, stream ) ) ; } } readline-6.3/examples/rlcat.c0000664000043600000000000000634311130207321015026 0ustar chetwheel/* * rlcat - cat(1) using readline * * usage: rlcat */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #ifdef HAVE_UNISTD_H # include #endif #include #include "posixstat.h" #include #include #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #ifndef errno extern int errno; #endif #if defined (READLINE_LIBRARY) # include "readline.h" # include "history.h" #else # include # include #endif extern int optind; extern char *optarg; static int stdcat(); static char *progname; static int vflag; static void usage() { fprintf (stderr, "%s: usage: %s [-vEVN] [filename]\n", progname, progname); } int main (argc, argv) int argc; char **argv; { char *temp; int opt, Vflag, Nflag; progname = strrchr(argv[0], '/'); if (progname == 0) progname = argv[0]; else progname++; vflag = Vflag = Nflag = 0; while ((opt = getopt(argc, argv, "vEVN")) != EOF) { switch (opt) { case 'v': vflag = 1; break; case 'V': Vflag = 1; break; case 'E': Vflag = 0; break; case 'N': Nflag = 1; break; default: usage (); exit (2); } } argc -= optind; argv += optind; if (isatty(0) == 0 || argc || Nflag) return stdcat(argc, argv); rl_variable_bind ("editing-mode", Vflag ? "vi" : "emacs"); while (temp = readline ("")) { if (*temp) add_history (temp); printf ("%s\n", temp); } return (ferror (stdout)); } static int fcopy(fp) FILE *fp; { int c; char *x; while ((c = getc(fp)) != EOF) { if (vflag && isascii ((unsigned char)c) && isprint((unsigned char)c) == 0) { x = rl_untranslate_keyseq (c); if (fputs (x, stdout) != 0) return 1; } else if (putchar (c) == EOF) return 1; } return (ferror (stdout)); } int stdcat (argc, argv) int argc; char **argv; { int i, fd, r; char *s; FILE *fp; if (argc == 0) return (fcopy(stdin)); for (i = 0, r = 1; i < argc; i++) { if (*argv[i] == '-' && argv[i][1] == 0) fp = stdin; else { fp = fopen (argv[i], "r"); if (fp == 0) { fprintf (stderr, "%s: %s: cannot open: %s\n", progname, argv[i], strerror(errno)); continue; } } r = fcopy (fp); if (fp != stdin) fclose(fp); } return r; } readline-6.3/examples/rlevent.c0000664000043600000000000000633711130707432015413 0ustar chetwheel/* * rl - command-line interface to read a line from the standard input * (or another fd) using readline. * * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #if defined (READLINE_LIBRARY) # include "posixstat.h" # include "readline.h" # include "history.h" #else # include # include # include #endif extern int optind; extern char *optarg; #if !defined (strchr) && !defined (__STDC__) extern char *strrchr(); #endif static char *progname; static char *deftext; static int event_hook () { fprintf (stderr, "ding!\n"); sleep (1); return 0; } static int set_deftext () { if (deftext) { rl_insert_text (deftext); deftext = (char *)NULL; rl_startup_hook = (rl_hook_func_t *)NULL; } return 0; } static void usage() { fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", progname, progname); } int main (argc, argv) int argc; char **argv; { char *temp, *prompt; struct stat sb; int opt, fd, nch; FILE *ifp; progname = strrchr(argv[0], '/'); if (progname == 0) progname = argv[0]; else progname++; /* defaults */ prompt = "readline$ "; fd = nch = 0; deftext = (char *)0; while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) { switch (opt) { case 'p': prompt = optarg; break; case 'u': fd = atoi(optarg); if (fd < 0) { fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg); exit (2); } break; case 'd': deftext = optarg; break; case 'n': nch = atoi(optarg); if (nch < 0) { fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); exit (2); } break; default: usage (); exit (2); } } if (fd != 0) { if (fstat (fd, &sb) < 0) { fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd); exit (1); } ifp = fdopen (fd, "r"); rl_instream = ifp; } if (deftext && *deftext) rl_startup_hook = set_deftext; if (nch > 0) rl_num_chars_to_read = nch; rl_event_hook = event_hook; temp = readline (prompt); /* Test for EOF. */ if (temp == 0) exit (1); printf ("%s\n", temp); exit (0); } readline-6.3/examples/rltest.c0000664000043600000000000000414211130207321015231 0ustar chetwheel/* **************************************************************** */ /* */ /* Testing Readline */ /* */ /* **************************************************************** */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if defined (HAVE_CONFIG_H) #include #endif #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" #else # include # include #endif extern HIST_ENTRY **history_list (); main () { char *temp, *prompt; int done; temp = (char *)NULL; prompt = "readline$ "; done = 0; while (!done) { temp = readline (prompt); /* Test for EOF. */ if (!temp) exit (1); /* If there is anything on the line, print it and remember it. */ if (*temp) { fprintf (stderr, "%s\r\n", temp); add_history (temp); } /* Check for `command' that we handle. */ if (strcmp (temp, "quit") == 0) done = 1; if (strcmp (temp, "list") == 0) { HIST_ENTRY **list; register int i; list = history_list (); if (list) { for (i = 0; list[i]; i++) fprintf (stderr, "%d: %s\r\n", i, list[i]->line); } } free (temp); } exit (0); } readline-6.3/examples/rl-callbacktest.c0000664000043600000240000000376612243745631017024 0ustar chetstaff/* Standard include files. stdio.h is required. */ #include #include #include /* Used for select(2) */ #include #include #include /* Standard readline include files. */ #if defined (READLINE_LIBRARY) # include "readline.h" # include "history.h" #else # include # include #endif static void cb_linehandler (char *); int running; const char *prompt = "rltest$ "; /* Callback function called for each line when accept-line executed, EOF seen, or EOF character read. This sets a flag and returns; it could also call exit(3). */ static void cb_linehandler (char *line) { /* Can use ^D (stty eof) or `exit' to exit. */ if (line == NULL || strcmp (line, "exit") == 0) { if (line == 0) printf ("\n"); printf ("exit\n"); /* This function needs to be called to reset the terminal settings, and calling it from the line handler keeps one extra prompt from being displayed. */ rl_callback_handler_remove (); running = 0; } else { if (*line) add_history (line); printf ("input line: %s\n", line); free (line); } } int main (int c, char **v) { fd_set fds; int r; /* Install the line handler. */ rl_callback_handler_install (prompt, cb_linehandler); /* Enter a simple event loop. This waits until something is available to read on readline's input stream (defaults to standard input) and calls the builtin character read callback to read it. It does not have to modify the user's terminal settings. */ running = 1; while (running) { FD_ZERO (&fds); FD_SET (fileno (rl_instream), &fds); r = select (FD_SETSIZE, &fds, NULL, NULL, NULL); if (r < 0) { perror ("rltest: select"); rl_callback_handler_remove (); break; } if (FD_ISSET (fileno (rl_instream), &fds)) rl_callback_read_char (); } printf ("rltest: Event loop has exited\n"); return 0; } readline-6.3/examples/rl.c0000664000043600000000000000615311130207321014335 0ustar chetwheel/* * rl - command-line interface to read a line from the standard input * (or another fd) using readline. * * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #if defined (READLINE_LIBRARY) # include "posixstat.h" # include "readline.h" # include "history.h" #else # include # include # include #endif extern int optind; extern char *optarg; #if !defined (strchr) && !defined (__STDC__) extern char *strrchr(); #endif static char *progname; static char *deftext; static int set_deftext () { if (deftext) { rl_insert_text (deftext); deftext = (char *)NULL; rl_startup_hook = (rl_hook_func_t *)NULL; } return 0; } static void usage() { fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", progname, progname); } int main (argc, argv) int argc; char **argv; { char *temp, *prompt; struct stat sb; int opt, fd, nch; FILE *ifp; progname = strrchr(argv[0], '/'); if (progname == 0) progname = argv[0]; else progname++; /* defaults */ prompt = "readline$ "; fd = nch = 0; deftext = (char *)0; while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) { switch (opt) { case 'p': prompt = optarg; break; case 'u': fd = atoi(optarg); if (fd < 0) { fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg); exit (2); } break; case 'd': deftext = optarg; break; case 'n': nch = atoi(optarg); if (nch < 0) { fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); exit (2); } break; default: usage (); exit (2); } } if (fd != 0) { if (fstat (fd, &sb) < 0) { fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd); exit (1); } ifp = fdopen (fd, "r"); rl_instream = ifp; } if (deftext && *deftext) rl_startup_hook = set_deftext; if (nch > 0) rl_num_chars_to_read = nch; temp = readline (prompt); /* Test for EOF. */ if (temp == 0) exit (1); printf ("%s\n", temp); exit (0); } readline-6.3/examples/rlptytest.c0000644000043600000240000001460312122336376016013 0ustar chetstaff/* * * Another test harness for the readline callback interface. * * Author: Bob Rossi */ #if defined (HAVE_CONFIG_H) #include #endif #include #include #include #include #include #include #include #if 1 /* LINUX */ #include #else #include #endif #ifdef READLINE_LIBRARY # include "readline.h" #else # include #endif /** * Master/Slave PTY used to keep readline off of stdin/stdout. */ static int masterfd = -1; static int slavefd; void sigint (s) int s; { tty_reset (STDIN_FILENO); close (masterfd); close (slavefd); printf ("\n"); exit (0); } static int user_input() { int size; const int MAX = 1024; char *buf = (char *)malloc(MAX+1); size = read (STDIN_FILENO, buf, MAX); if (size == -1) return -1; size = write (masterfd, buf, size); if (size == -1) return -1; return 0; } static int readline_input() { const int MAX = 1024; char *buf = (char *)malloc(MAX+1); int size; size = read (masterfd, buf, MAX); if (size == -1) { free( buf ); buf = NULL; return -1; } buf[size] = 0; /* Display output from readline */ if ( size > 0 ) fprintf(stderr, "%s", buf); free( buf ); buf = NULL; return 0; } static void rlctx_send_user_command(char *line) { /* This happens when rl_callback_read_char gets EOF */ if ( line == NULL ) return; if (strcmp (line, "exit") == 0) { tty_reset (STDIN_FILENO); close (masterfd); close (slavefd); printf ("\n"); exit (0); } /* Don't add the enter command */ if ( line && *line != '\0' ) add_history(line); } static void custom_deprep_term_function () { } static int init_readline (int inputfd, int outputfd) { FILE *inputFILE, *outputFILE; inputFILE = fdopen (inputfd, "r"); if (!inputFILE) return -1; outputFILE = fdopen (outputfd, "w"); if (!outputFILE) return -1; rl_instream = inputFILE; rl_outstream = outputFILE; /* Tell readline what the prompt is if it needs to put it back */ rl_callback_handler_install("(rltest): ", rlctx_send_user_command); /* Set the terminal type to dumb so the output of readline can be * understood by tgdb */ if ( rl_reset_terminal("dumb") == -1 ) return -1; /* For some reason, readline can not deprep the terminal. * However, it doesn't matter because no other application is working on * the terminal besides readline */ rl_deprep_term_function = custom_deprep_term_function; using_history(); read_history(".history"); return 0; } static int main_loop(void) { fd_set rset; int max; max = (masterfd > STDIN_FILENO) ? masterfd : STDIN_FILENO; max = (max > slavefd) ? max : slavefd; for (;;) { /* Reset the fd_set, and watch for input from GDB or stdin */ FD_ZERO(&rset); FD_SET(STDIN_FILENO, &rset); FD_SET(slavefd, &rset); FD_SET(masterfd, &rset); /* Wait for input */ if (select(max + 1, &rset, NULL, NULL, NULL) == -1) { if (errno == EINTR) continue; else return -1; } /* Input received through the pty: Handle it * Wrote to masterfd, slave fd has that input, alert readline to read it. */ if (FD_ISSET(slavefd, &rset)) rl_callback_read_char(); /* Input received through the pty. * Readline read from slavefd, and it wrote to the masterfd. */ if (FD_ISSET(masterfd, &rset)) if ( readline_input() == -1 ) return -1; /* Input received: Handle it, write to masterfd (input to readline) */ if (FD_ISSET(STDIN_FILENO, &rset)) if ( user_input() == -1 ) return -1; } return 0; } /* The terminal attributes before calling tty_cbreak */ static struct termios save_termios; static struct winsize size; static enum { RESET, TCBREAK } ttystate = RESET; /* tty_cbreak: Sets terminal to cbreak mode. Also known as noncanonical mode. * 1. Signal handling is still turned on, so the user can still type those. * 2. echo is off * 3. Read in one char at a time. * * fd - The file descriptor of the terminal * * Returns: 0 on sucess, -1 on error */ int tty_cbreak(int fd){ struct termios buf; int ttysavefd = -1; if(tcgetattr(fd, &save_termios) < 0) return -1; buf = save_termios; buf.c_lflag &= ~(ECHO | ICANON); buf.c_iflag &= ~(ICRNL | INLCR); buf.c_cc[VMIN] = 1; buf.c_cc[VTIME] = 0; #if defined (VLNEXT) && defined (_POSIX_VDISABLE) buf.c_cc[VLNEXT] = _POSIX_VDISABLE; #endif #if defined (VDSUSP) && defined (_POSIX_VDISABLE) buf.c_cc[VDSUSP] = _POSIX_VDISABLE; #endif /* enable flow control; only stty start char can restart output */ #if 0 buf.c_iflag |= (IXON|IXOFF); #ifdef IXANY buf.c_iflag &= ~IXANY; #endif #endif /* disable flow control; let ^S and ^Q through to pty */ buf.c_iflag &= ~(IXON|IXOFF); #ifdef IXANY buf.c_iflag &= ~IXANY; #endif if(tcsetattr(fd, TCSAFLUSH, &buf) < 0) return -1; ttystate = TCBREAK; ttysavefd = fd; /* set size */ if(ioctl(fd, TIOCGWINSZ, (char *)&size) < 0) return -1; #ifdef DEBUG err_msg("%d rows and %d cols\n", size.ws_row, size.ws_col); #endif return (0); } int tty_off_xon_xoff (int fd) { struct termios buf; int ttysavefd = -1; if(tcgetattr(fd, &buf) < 0) return -1; buf.c_iflag &= ~(IXON|IXOFF); if(tcsetattr(fd, TCSAFLUSH, &buf) < 0) return -1; return 0; } /* tty_reset: Sets the terminal attributes back to their previous state. * PRE: tty_cbreak must have already been called. * * fd - The file descrioptor of the terminal to reset. * * Returns: 0 on success, -1 on error */ int tty_reset(int fd) { if(ttystate != TCBREAK) return (0); if(tcsetattr(fd, TCSAFLUSH, &save_termios) < 0) return (-1); ttystate = RESET; return 0; } int main() { int val; val = openpty (&masterfd, &slavefd, NULL, NULL, NULL); if (val == -1) return -1; val = tty_off_xon_xoff (masterfd); if (val == -1) return -1; signal (SIGINT, sigint); val = init_readline (slavefd, slavefd); if (val == -1) return -1; val = tty_cbreak (STDIN_FILENO); if (val == -1) return -1; val = main_loop (); tty_reset (STDIN_FILENO); if (val == -1) return -1; return 0; } readline-6.3/examples/rlversion.c0000664000043600000000000000240711130707441015751 0ustar chetwheel/* * rlversion -- print out readline's version number */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #include #include #include "posixstat.h" #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #ifdef READLINE_LIBRARY # include "readline.h" #else # include #endif main() { printf ("%s\n", rl_library_version ? rl_library_version : "unknown"); exit (0); } readline-6.3/examples/histexamp.c0000664000043600000000000000551111130207321015717 0ustar chetwheel/* histexamp.c - history library example program. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #include #ifdef READLINE_LIBRARY # include "history.h" #else # include #endif #include main (argc, argv) int argc; char **argv; { char line[1024], *t; int len, done; line[0] = 0; done = 0; using_history (); while (!done) { printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) { len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; } if (!t) strcpy (line, "quit"); if (line[0]) { char *expansion; int result; using_history (); result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) { free (expansion); continue; } add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); } if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) { register HIST_ENTRY **the_list; register int i; time_t tt; char timestr[128]; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) { tt = history_get_time (the_list[i]); if (tt) strftime (timestr, sizeof (timestr), "%a %R", localtime(&tt)); else strcpy (timestr, "??"); printf ("%d: %s: %s\n", i + history_base, timestr, the_list[i]->line); } } else if (strncmp (line, "delete", 6) == 0) { int which; if ((sscanf (line + 6, "%d", &which)) == 1) { HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else { free (entry->line); free (entry); } } else { fprintf (stderr, "non-numeric arg given to `delete'\n"); } } } } readline-6.3/examples/hist_erasedups.c0000644000043600000240000000531712243741502016760 0ustar chetstaff/* hist_erasedups -- remove all duplicate entries from history file */ /* Copyright (C) 2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #ifndef READLINE_LIBRARY #define READLINE_LIBRARY 1 #endif #include #include #include #ifdef READLINE_LIBRARY # include "history.h" #else # include #endif #include #define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0) #define STREQN(a, b, n) ((n == 0) ? (1) \ : ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)) extern int history_offset; static void usage() { fprintf (stderr, "hist_erasedups: usage: hist_erasedups [-t] [filename]\n"); exit (2); } int main (argc, argv) int argc; char **argv; { char *fn; int r; while ((r = getopt (argc, argv, "t")) != -1) { switch (r) { case 't': history_write_timestamps = 1; break; default: usage (); } } argv += optind; argc -= optind; fn = argc ? argv[0] : getenv ("HISTFILE"); if (fn == 0) { fprintf (stderr, "hist_erasedups: no history file\n"); usage (); } if ((r = read_history (fn)) != 0) { fprintf (stderr, "hist_erasedups: read_history: %s: %s\n", fn, strerror (r)); exit (1); } hist_erasedups (); if ((r = write_history (fn)) != 0) { fprintf (stderr, "hist_erasedups: write_history: %s: %s\n", fn, strerror (r)); exit (1); } exit (0); } int hist_erasedups () { int r, n; HIST_ENTRY *h, *temp; using_history (); while (h = previous_history ()) { r = where_history (); for (n = 0; n < r; n++) { temp = history_get (n+history_base); if (STREQ (h->line, temp->line)) { remove_history (n); r--; /* have to get one fewer now */ n--; /* compensate for above increment */ history_offset--; /* moving backwards in history list */ } } } using_history (); return r; } readline-6.3/examples/hist_purgecmd.c0000644000043600000240000000644212243741321016572 0ustar chetstaff/* hist_purgecmd -- remove all instances of command or pattern from history file */ /* Copyright (C) 2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #ifndef READLINE_LIBRARY #define READLINE_LIBRARY 1 #endif #include #include #include #include #ifdef READLINE_LIBRARY # include "history.h" #else # include #endif #include #define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0) #define STREQN(a, b, n) ((n == 0) ? (1) \ : ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)) extern int history_offset; #define PURGE_REGEXP 0x01 static void usage() { fprintf (stderr, "hist_purgecmd: usage: hist_purgecmd [-r] [-t] [-f filename] command-spec\n"); exit (2); } int main (argc, argv) int argc; char **argv; { char *fn; int r, flags; flags = 0; fn = 0; while ((r = getopt (argc, argv, "f:rt")) != -1) { switch (r) { case 'f': fn = optarg; break; case 'r': flags |= PURGE_REGEXP; break; case 't': history_write_timestamps = 1; break; default: usage (); } } argv += optind; argc -= optind; if (fn == 0) fn = getenv ("HISTFILE"); if (fn == 0) { fprintf (stderr, "hist_purgecmd: no history file\n"); usage (); } if ((r = read_history (fn)) != 0) { fprintf (stderr, "hist_purgecmd: read_history: %s: %s\n", fn, strerror (r)); exit (1); } for (r = 0; r < argc; r++) hist_purgecmd (argv[r], flags); if ((r = write_history (fn)) != 0) { fprintf (stderr, "hist_purgecmd: write_history: %s: %s\n", fn, strerror (r)); exit (1); } exit (0); } int hist_purgecmd (cmd, flags) char *cmd; int flags; { int r, n, rflags; HIST_ENTRY *temp; regex_t regex = { 0 }; if (flags & PURGE_REGEXP) { rflags = REG_EXTENDED|REG_NOSUB; if (regcomp (®ex, cmd, rflags)) { fprintf (stderr, "hist_purgecmd: %s: invalid regular expression\n", cmd); return -1; } } r = 0; using_history (); r = where_history (); for (n = 0; n < r; n++) { temp = history_get (n+history_base); if (((flags & PURGE_REGEXP) && (regexec (®ex, temp->line, 0, 0, 0) == 0)) || ((flags & PURGE_REGEXP) == 0 && STREQ (temp->line, cmd))) { remove_history (n); r--; /* have to get one fewer now */ n--; /* compensate for above increment */ history_offset--; /* moving backwards in history list */ } } using_history (); if (flags & PURGE_REGEXP) regfree (®ex); return r; } readline-6.3/examples/Inputrc0000664000043600000000000000447211130207321015125 0ustar chetwheel# My ~/.inputrc file is in -*- text -*- for easy editing with Emacs. # # Notice the various bindings which are conditionalized depending # on which program is running, or what terminal is active. # # Copyright (C) 1989-2009 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # In all programs, all terminals, make sure this is bound. "\C-x\C-r": re-read-init-file # Hp terminals (and some others) have ugly default behaviour for C-h. "\C-h": backward-delete-char "\e\C-h": backward-kill-word "\C-xd": dump-functions # In xterm windows, make the arrow keys do the right thing. $if TERM=xterm "\e[A": previous-history "\e[B": next-history "\e[C": forward-char "\e[D": backward-char # alternate arrow key prefix "\eOA": previous-history "\eOB": next-history "\eOC": forward-char "\eOD": backward-char # Under Xterm in Bash, we bind local Function keys to do something useful. $if Bash "\e[11~": "Function Key 1" "\e[12~": "Function Key 2" "\e[13~": "Function Key 3" "\e[14~": "Function Key 4" "\e[15~": "Function Key 5" # I know the following escape sequence numbers are 1 greater than # the function key. Don't ask me why, I didn't design the xterm terminal. "\e[17~": "Function Key 6" "\e[18~": "Function Key 7" "\e[19~": "Function Key 8" "\e[20~": "Function Key 9" "\e[21~": "Function Key 10" $endif $endif # For Bash, all terminals, add some Bash specific hacks. $if Bash "\C-xv": show-bash-version "\C-x\C-e": shell-expand-line # Here is one for editing my path. "\C-xp": "$PATH\C-x\C-e\C-e\"\C-aPATH=\":\C-b" # Make C-x r read my mail in emacs. # "\C-xr": "emacs -f rmail\C-j" $endif # For FTP, different hacks: $if Ftp "\C-xg": "get \M-?" "\C-xt": "put \M-?" "\M-.": yank-last-arg $endif " ": self-insert readline-6.3/examples/rlwrap-0.30.tar.gz0000664000043600000240000054734110737174550016631 0ustar chetstaff‹Wù|Gì[ûsÛ6¶ÎÏø+°jrmïJô3ñ\§ÍF±ÝÄs]ÛµÝfvâÔ‘ „5I0i[ÉfÿöûP¢·ÓN_wïD­) Äã¼Ïw@¤Ên*U֢͵Õ¿Óg Ÿíímÿýdká;|¬¯mon¯oo=Þxò€{o=ü}ZFÚïÿOÕÑló2Óµ±…[ýSõ¿¾±¹¹öYÿ¦þÓºüMEódkëGõÿd:ß~¼¹¶µ±¶±µAúǯòÁgýÿˆ‡âïBűmŠZ¨²ÔE"”‹#ebd UMÅhªE¬. þoJOr‹ÛÌR[%=jƸÂ|´H Œ‹mQè¸úÖÔ"µU.ƺãÌŽÄD¹‰˜è¬&É´0¹k‘ʼn|óõÁáþ[‘9‘«8Ñ©ÈÜ9MšÓùßR›hºÔ&ÇwÙÔíðBßèJ™qµ(rUŠ¢®Tá„w¢TΙk-Ê æ^Ó×íTt—7‰x‹w ¨~×X¬]éøZ¼Ò…Ê©ÅñW« ßÌIÅ$Vhª'ª¦0ï-É“.¥EOg03ïqñÝ\]5‘k{O]­sQëBߊÚÄW„ÇZÔÓR‹&WîJ4¬]ëjD’ÿýü¿oqftQÿîþ¿±õx›ümkkssó1Ú×·6¯}öÿ?â“ÙJçÒ”®É%L^ÉÄ¢IÂP% ½îKx±ƒ뺩úR%¦„cy­3ƒ‡N'új]m%ø²21cpîLŽnIêAË2U$¦6à´¬B\QPÒ²"(è!UpEÒ­ðÈU.PË‹7cÑA5±.A¡]Álƒ4(JÆMiÃb‚aU{m, Ë2¹!­hhC Ô¸ÉJÅtÚ451™*H¬è)V‚ŒÑ¢`¦/I•.¨T·Ö^ EÉýZNTå->|+M?RcIÇC1Dß–šhƒ¸ÀEî"y[Í̈„ìÍ[ÃC0ÖAF5Ù⨠3cXˆ…|,õ!^X÷Hw<3ë ér# ûV·Èe²Ìô¡lP¤ac¥%e5®/mÅyf}J$h¬Ñ¸Hž31fÔ´F Îð#QÌ=š‚Ðh´AVÜOxÆ‘¥ažì:4S˜Yjr2ÍN«;þèÈâ›ÄÀR`»¤N¡ëŽ5“‘/awÔ!’µ"Æ5‹Û/71±¤ ƒ «•”e4ƒ‡9‘•½$B7[ÉË•a3ƒÓÂÈ:ÞÕºJ!3Ærò2qh÷üØT ‘Ø:Ÿ ‡W}¾â>³Å_‘¶sÃwOgwþ¿}~,ÿÇö]mËß.5þDþ_ßÜÜ@ý·µ½±þx{k{ùsk{ýsþÿ#>Àå 0?m ‘š[˜?]aפ¢Fj:ÔÌUO¡Ù“Ê–â ]Î •Ògxkl.vmñOòàJ‹UzRÝ9ñ=å©Q¦åìΉWÓÒb gæ·hÝÓ©¡4<Ä:âAñ }×ÎïÅ©'B|mnKKqh×ÎnÅùDSæÄprêÎ|øœTÔå\£ Ž,bÆØh íýk•‰ý[ÝÜû‘¬âjḤ8&ΩŽ@ÂEÄ‚T‘ø/?“¿?Q5.¯S}Sì?´HyZ¼æbáЪ³#JCZû·\|c“ÅÿríiøV'B|KÕÈ *“ÝD “„Çc™ æÈ-É"±ÐXj©œ#Ì9SN ÒH²NÆKì¥æµ9¶`·B¤¯ àL½Ÿúf5r,XÊ”hµŠ2Öá™R,0© jß"ü“̸@Á/°_”ë ¢Ö·4ö_iAS™MQbq–Ì Â¶E% a æE¥d8Èë”*Q¹Yu¤; QÈo"]3Á(RkE©WcqyO¿¡ÆJ<øüù…ñŸ€åKÒÊêoáþßãõÍÏûªþýƒÀ)ŽLñ«EóSõÿ‰m{{ýñÖ“ÇëTÿ?ÞXÿ\ÿÿ!Ÿ³ ²šîH d¬’ Z’â—ŠMè[ƒø™ÆAÏ¿ß?=;8>zŽ„Øí¸çºøîô0 ‘“º.wVWÝK£¢«ÂÞ oFE¶úïIÖŒ‚­Š3ÛT±^£Q>4UöqõÑÚdû8xôáÚ¯÷1ªUß‹CëÂ/õòäP¼¬lSúå†È*&V¼žùm´É’SkëÌ|Yçe‰Œ9Ÿ¾Â“6»ÿϾ’[ÑpÖ-O¿Ú8Jg_ÈG '1Tªô¬mhvqe|>óŒI*±äÒ]¡.¡:P¡ðɼPì æ¬§²ž Þk~p§åË£ïÄl$êÍ *’(ß1ÂÞp* M1FY'¯ôtdU• H¦mLêVL}QS$K¨çêÄQ«Cé&¶É9ÂäÜsNiå´Éä Á½©mPê„«g8‘Ë£©¼QSZp^'È‹uiŸÕ­`Õµ«mÅ«‡.‘xa•â‘CÁWÊÁ;HkDŠ»__ž}õðÃéÉ7—Ç'ç—üû£Ü=9ù‘'Ê’"5cÚx FU^õÕ£^WÑ€fâz¡Ù¡Ö׫hÆCß6 tôôȰ¦Ÿroÿì|ïà4¬ÿ⻃ýËÓããó²í6~oÀÊËOzܳêê_WÿJ&BÆ‘ËA•ʇ‹ãð85}–dcyº?Üûfßßí¿>ów»UŒõ¡‹G˜Õò OÌ—¦©äÝÕƒ×Þ×½+´ŸÕoÎþÖÛô°N^ù3ÆgOë’Ý%fV2°òýÊÿ6^ý½Rã/Ãk·Ö?ã¿?CÿÁ¯áã¿õý\ü·ñdkmc¦ÿÍ-ÞÿY{²ýÿýŸèüU Öeï8®íHWr«/Ê·{":{%†ÈE¡ÏÅàS˜%ZŸˆÈhyqQ,Gë2:=½7ò"}qqñpý"=‘=ÙÃí}É·˜Ygèõ‚{ùGë³GϹûšç\zþjøýþåÉéñîåÉÁÞåîë½çKSí–¤| ¸"K8¨òè·œ\i]HU*¾’ˆå"=x”8B-W49SÇ„W"&çsl+,½Øqõ¥rí܉ծXªy°- –Xºg ̵¬»¬áH/‡§/ÏoçÀxª7¹¦·οF(TöTšTŽÍµ.$é5†#Àw!ü2@r©aD?FJÚñ±´«^ÐNŠ®hg”¹RÅÚs~\°¥ÿÜ—óÆÕ¼ÆÍH™spØåàðøè%±ÑR½¤Ð>]7$]7yöAh‰Ø¾Îþqt|rvp&ð0 ‘è@¾ ‘É3áÞR[°¼ˆè? ¬¶{zÀ„ ^øAdnUSx,Í 75€° *‚øHôbŠ„AX7h H Zü¬y;ÞHI2äÖð½~Ù ïË’ ÈÊ ˜àð ^ u¶f͆+6Õv[‘~ò ŸQ¦û‚¬ŒÍ{fhwÌ ,ä†öܯ‰8³¾š€yÄŠüƒÅP™ñ¤&-c6‚ù‹3aÕ+Û©„C‡LSQQÒ>"¨´=ô¢Ñ9ü‘dÑ{³…ÚÎáüLJˆ ¸²ë fqâ Vú²{é]<Úo¥μlVàÄzŒjhØýòe8ßa8›o0x²ÞUp)ÄS{Ï%7¸ XP*£Å§b‘ #ša¬kÙÕhè¨XÞQñÑ tÙ‘¯i-¢Ixšús"Pôéxbå2vêZ¯Ì å53N,°ïÝa_´]¥—#YË¢{T'aìNGeCß³pf@/¸šj ¨L§M~Lïfu©ôO=ýT…ÍÛï’ªöå)x³©È,¬Í{Q@/*;z⹸â Âé äAèšx"éÀÔ{ò”aÚvV¨Ã¨ÈõÖœª"6ä®(*äðèì€i­pEUÞïZÊ;P× “Ê+ó­Å eÄ‚AxW”+•£pð%Õº—6½¤&Ì·'S¦wÎpÌXˆ8ó^\)ûéˆæå›‰©5G`Dw²ÍBŸ• ¬D{“‡'Þ°[û—ž´VP²G£z}1²09öìÖ$±Ù·qÉÍ-÷–ï2…t…¯Açä£ä§>H)B„@ 3A‰Q"Ö4ó_Vq"z×¢š¬ö³.¯|øøæmÿoƒ¯þë‡G¿xÞë=ý×Å…üÎù &ffË![ôd}c ’9gX«¤1•;ƒe±*}ËüF7Yí“ÅÄY“hÚa $"¢ŽµÇ¬Ô = ~i/ÈA¾IΚär{Ûmêx]‘qœ†"èeTŸß—ûÄÅ ¼ù/VDD@fFÂnKùô€ç'» —Ôðì__±UQ`›~Fš ]øô'Ñ‘„6³–ƒçŽxÄbná"ÔŠ±üŽLAfó0ˆ(Õ5Sˆ¯FìÐU Êq§2ñ«É\#œìpÐ Ž ’ÙS>fc#ä3šÄ±åubßÎúó¾¹ðöXx™AaIS‚AH¡ y½ðQüú *ÉxÇì†6²ü 'oÒ:>ûÎö*ÌÊñ&L(¿"û_c´@›uÜѱÅ]7´ÖÖ —ˆ¬HÅÂp¿ËuÀ–ë\ g«2 9}~þ¤²×‰˜é'GØÈô"yt7¥ 0ƒf!Êcôµ±£³7Mœ³]ð̾¡bXX°ë;)Ë> ëÓ7‰ü¬¤ÓMóBU–ãŠc³JIþ˜.÷x½{âu!Y2l0b˜+s:&Ʊ݂jo¬XO%‰ 6ß‘iqùɇ§‡¯O‡'—¯Ž¿Ù'4ó|ox>Ü;8}ÞV».¿^°0:µª<{|GùŒìB¡2Vk dbSB2t’Ç—'º8Kz\=¥·á°‚°Ï=ó´ þE>Ú£É9 ß[¿ˆYqÑçî'¡{W«>múç»ç‹‘ƒE_ ’-z…°k¸H˜F§{,›åWW)Á•Ë›+$ ± š°ÝÌ'e}|´+Ðëµ°ÅÀgÁyª0sH“vÐÐZñle¶zWUÒ±&1X+úŽ^¼û`˜Ò³Ýiä)»®Ö'^ëôfžOÐöüÄ‚`jB@sNuwÀ«E3i3E×3N)D·K»²w¯Ž»0 ä„×)*;”ÒFÂt`˜^J¬­HÙ¡ÁøLBy¡ÍDâ`\d©ý8poNóʾ›ÑV±Z(41LC%)­&.èJ'cÊ2;¾-æ¾³€éŸ)ô,û4N„B^ ¯ |`Z¡r¬+¸9Š™ê42¿¦žéúâ[é’V0iÈH>dàNìYêÉ.)ÛÆîˆœGä.f0¯g }C?.]3rµ©›ZsI#ö >âÒéîÃjã<øê…r>°7·}AgÙ(8ËåjdÙëË7ì² —)7ñîò–|¯Í#‘<ò“Šù¤>‹p]™!©°ÿ„¥]«@:–Þ§öÝÑâ>F$界l+ªM(B“SQñÑûàjdn÷÷ÎOáî¼À²¾-yèÊ„3ÇLéÇ—4󥟴ŠZT.~è²jOô³ôôéRG%?÷a0Ô8^…þþ’B›×Á-ªTßP  ½¼ð dü¡"IŒC˜Ÿr<¼+¾!D¬›+©™aŒUU«“ET/`'~ò^ˆ±ó”¾<¢ÃœÐùd_kVÖ Ç·W Šþ™ÄŠør”* ‚í#í«‰¶VŽäBÅÇÆc­¤®/¹˜â²K,{þWPóŪ$òK(’ãy$¤“ÅbouÝ[nFœ4‚¬e«t8sV¹ø’Þ2={úe:~öæé—£ñ³·rÿVQÛ!-/­=Ý\_ò9ÃïZIª‚޼ŠÖòțưhr/2óq¤°Ý8Áh¾öÒZÚ ¡-‘¥yµ¹D¶Ag˜`Qt¬5®DÛÚü>{ Äw¬ö$ôÒ‚ :mÅ‹Sé‚Q°uúöùˆñ¨ISDPÏ$ˆN[!;ò±)íy4pÏvA¨_"9Û_!ž[-n˜õÔH™0X¤Æ¿‡ EÎZD?i–+ÍÐ­ëƒæ-6ë©ó#©·T¨Á¹ ‚#È@5 2WñZ¯4ïß«ÞÅ…ð‡Ü„ÊÌ%ÞqAðï•|VÁoðíÈÞSdx¤im§¸$às•¤Ã’î{ŽRšàpvåˆô 1¬Ä€ ˜Ý—ûÛ{Ç<Èmmò ´{NGU˜Z2Hè„wˆ(ÍzáÕ›C³KðïovOÌ›ã£þZ3j¯yе¶ûK+fP«eóvwçÕ²9æûˆå¹ô•n·>z¾ ò„¦OŽO&©ÈîAÜ¥ C¨ƒ–aÞà?¼èÊ·Ììì)°Šõ™‡!Ɇº q}H”þkįQJ“^k¤+ãåqÎê®ÄG˜ÁÃ^•lÇǃz kùÍN¹!ÝÝ©Ž· ôí´zŽäC—e§˜¼ ¦b¦[b+33VÄG™®€TKëBŽXa4VÁîÎtÒmCÇI-‡!SЪÓ¤GøC°®½…ƒPºBF@—¼¿*áûmÄ×—"ý(\±<ˆ=LXít8Z@é«£Æ+wyQ¸Ý1\Ëœ¹£Õ×»M¯8ÛH)`Y.¶ô<$¬"^º®N@®X]Ë™À¹\ý´M|µÉ0x<¬tÜÁ €Ÿè1{”3¬PHˆ•Ñ»L©¬t’+ãñ5n@wÂÓÁþVÙÏr4â3ºl§ôÍœ1¥°º G)CgÌ!? ű  k°<4# Oƒ rHǘÆÇ.ë©—Ùᆠ€ˆ•-OÕÊp*1X‹Â/•+g0*°ZˆÏS\Ž©`;ÚÚe#Òø™ÐÏñÉöÉ›c¸ Wƒc¦¬W+g á]K 8FÀérh¨Î‡ÎÖÇ$Â0ÂÄ»k†ò¤R`=B{ÔJ/T]ŽèÇñÙ—]HùλÑK(Ä–]c,FWÆAOá¨4¸…uK>Z,OÂJFñ4ÿI˜àaWe °á\”Ñ$Í舀Œ—…·­mSçU1DÐä~)¼²”3mN¼í7µ8,æ´|-&£*s¬ùÊÏlÏèÃEªÀRÚÔê1º©ªdD“ˆHlpyŠ{›µ¦=^%9K¢C-X¼‚À,çDûEws[ï3®0òJW9G ‡‰Lj)Fñq æîB0e•ñR/%FñÕ+ úÛ®ƒs4äMή]tïB¨jù¹+«pvúWÆywwÿðÍÉÑo˜R¸pðë~ìvènÏ’ðN'ÙrÇÁ”Ž“$[ŽèX6_ÁQù9³‰ërÒ <òÞÆjU³²O"6¼-†UfòÎìø)Óm‰¯Xz±ëñXÐZ—îE™¸Ú:mÙ †oBfóE@JIDR›Ç €/>:fru›`–ÏÆ0–]z· ó|¸îªüÓ†.ãªJ÷Zµ{Vm„žO  <ès \ùg… ©C&_/ÅP!^ (XE:cãfœÜPltÅ«ˆ!0oE˜ï‡7/MŒùpXXEƧ‡°%x¦n'£¢„ŠŠîô±òǶ2˜^lB$ɶ‘P%…³ñêC¾ÈEÂ[,DòLZ–ÙþŽÝÕdŠå¤(Hà Š·Q±d½’ál‰J¬ÎQé“CLÔ«ô].t¸y´/DGª6Z—­Ñy·¿\P"²úF´Â-ÚCF{pmFƒÓ‰cñ»iáêâš…¸n5YJËû¥í¦ Ìq.;j‰yï+!ê Ÿ×ûÎîF«á®L¼0šÒ¶U¢8õ«V@vŒ…z™ Ë4·VÊ4‘ÖÄv¶.a éäÓXpìô5Œ ‰¨ >¥íQËæÕà ³©d®U;Â8¥«ƒ„Ø ˜‹‚½¤RšêÌTâV™áΠÍÒß4#£ |ŸPwûÍÉ«:™)§n €7Q×;t®Ë¼Î|”˜/í…/æèöÒ6+¶_¢¡¯«|*°d€Z¦OA> Ÿ4de‘éNúÂÙt„!}ú8®®-?^®­š’ \Øú©Ë'JXŠ— ©;DÏÂò¨RÈP!Þ͇ᇨu.Ÿ·.»t¶vii‚Þ”'žtN‰ýPÐEÐÓ”\zeAoìLD³¹‚Æ3X©Wà.ö&§…\Ŷ¼ïXYåc†!öõ `åN8£Px_4p¶î9r'­ãà»ÞÑDñ«á2þ|óÿíÿ_8á’]n]þËâ¿­iü‡Õõõ?`ÿßÕµoöÿÿŠ?t”›¯éJ4›öê«ÁϱñóÉÑvóùîñ }¸[²¥èpíì5¶÷™—É~±õëÆ;‘ Z¨&f1ýÎQ¨ßÝ-uZã±'åïMPÚ< ñÍ7ëéùïö¿îù4ÓÿçÁzMü¿<\G,8:ÿkßâ?þKþ|g‚7çDrŒØ\bFÖHL ¤ÓÁí°LXb˹ã6™?ÙêØ ¯…-í”MíïPÁßùïGü÷cþûoü÷ßÙÕh•ÿ®ñßkj…þ]ç_âŠôÿ~dÌ ¢úÌ1q Ì ð•-1KÙí·1&¦àÂ9ƒE¥T+m0E5«jzÙ†øÐ,„´oÊ„Û YH³ÂŒL5Q‹}ÛÈÉ4Gî̺¥³ÓâlÖ T;óˆ·†Xf™×9p$—Ö%¾ú~œ…óÅ`˜87ÀPÞJÔت·»D—¾9!†çy»}t´½ò®b5ÐÊÁ:së†÷ZWvèÔK²Ø6ˆM7: ìG­þ˜¥ú¯G;¯¨Åív÷vOÞaÒ/vOöÇÇæÅÁ‘Ù¦ú‡ÛG'»;oö¶ÌᛣÃãMnë¸qBÆ­ÂO‡Û'¯èÙJGmº ¶ Ãçz/ðÕb­Ãí·_6¸Ñ”¶€ ?¦hHN¢GOfQ¶?u8ø}ÒøywÿÅ?{Òµl·P¦[…í×'ÛGüôûÍÉ‚_é³¼u ¸åÉ 0û^ÙöÛùÅÛ· ;;xÜÙÁíòëƒç y¡?¶4ô¿ä'zsxÈ?ùÙ×gzûî%£¤·üÚþØ*n¨¼î™®%Ôë¬Duue²X§¿bQjpÂÂÉýÃó°Ýà2ä±AÃߨCs'СÄÝ>šêðhº¾_\¬ÎsWÎÇÖuÓó¸ÉÝX]¬ð¥¶¿éÝ~j+Z€*sùLŽzÒa2h#Ëq®Žƒåucßäµg ˜"=(5ê<˜<Ÿs 6EžæÃ:L“{üÖPû©ÛPÓ”}„ ÅÀ¯ð+Xþ+~á«»oëÆ_½`Ýý³[ ÜÅùôw¦Ï©^lkºœá¯pˆŒ*êÐtåw“‘ÅÓµZÊ©—‹þš‰5¬óªÄïÑå&ÜŠÑÐ?ì.^åÏåElTÈ3ƒk6öÚä²x±é+ÿá„_Òqïš]²ªlZÑmãÞ‰/T¶À‹]„3+.z/WÔÜF¦Ôz™Æ¦¿ ÎtTͶ½% ÀV Ö¥–#LŒ%äûVºê©º\]Edá,ž©º³°Ý"QŒ$ú¾s¥em¦„úá›d¹(«U¿65ûdßé8M¸Ø(çV©nü‚Ê«²NF~õ™©U.@L}ìJûü/í'd®uƒ¿õ(œ pÎî§”ËV¡jõ_ÑGð#:¬zþ‚ƤóðWTÁÆÿŠ>3äþÓ°sæ?ѨÞ0 ¾¥S@†˜…¨º™‚±¼íÈ)ï ™ª…ðÀÕ§"þw-ð´ítå_š æ«óäèUˆMCÜÊ›ýÌ|¥5^Î Q¼‰0$8|u°ÿ޳"g¹¢ÜE¥~žñ p‹Ä·I|Þ—`bZ ¹ ²nÑ‚Ž)o˜áì%mP]a8ºBfÞ'<ž ®šà,4‡ðÖÅR‡œæ~ÃZ¼½ñvD×Yön ê²ÁC6g+*˜€C…E‚>@Kh Âʦ`î+›ç~gNࢩùe}ùáß+ëËÖË0{¹ÿFã«Ø7EÝå1lg”k½;»ân|Ú°ÙD#9¾N‚Ûb¶ŒË|c mɧv’t`*·¼ÐøÚéú7ká¯`ÿKÀÿùsþúü-ÿÃÿ‚ý×~ñµ—f¶ÿÇ:R@Xûïpþ·Ú£où¿þ%V–†¿¨Û8ÊiÅt\ÊLþÑîµFÔki¥P@­¬‘rÆÈÚF „×~`%mM§Ù2úšTéå¤ocgÃÑÐE¦Å-ò’MÒ{æprÚ£+Q3€q”|¼I/$\ ËæØuo˜¤‹»Æùð­ÙNl‹ÀÍ”lP ë_‰XðÓù M\ð¯ši£Y†ÚÎ{®67q“)vž!¶1Ǧƒ[˜³Î. P'ÃAW§þŽvW],9’‡úYv8¼øðúæ äVZl å"LêZn¸",‚Ù98|·»ÿ’Ƽ{b¢¢ñRǃw½b=~H¬EššméÞi]žŽºsz|½mV×j믘7ÇÛÁ¬@d°³q[<²[Ú†XÝzT'DQu‰é2ßÄNÆwÖ«¸ìÔˆEÿú Q9+È–š._<¥×g† ß7ßnïž4_Qd¢ÂW­î˜Ëª£6Õ¡ÓrfÞ"ø…ƾ :š˜.x[‚ú²ù!DJ¥I¡\’N9xûô©ù[Ùµ[È ådŒáÛî =îůÏÚýì+v¤ñK¢H‰É4Éñe2ïˆKįÚX1¼ Þ%£Q0U³5:çrTRW¤Ù|sÜhþ|pØØÏ¼C–½¨r¯{šé$…o¶m6ëd÷u£‰óÊ;†_´öñÞv/y¤Ák÷Š)gÂMç§7Ý·¢urZ3²qnÿh|€ núeãyóâ†Ï“1¡´ ,¹*;oŽŽÇ™*pìfP5„òÇ.?Îè’£0]q¤â+œS8-SûœÀa¿GHÝΗEîøöµ7Œj¾Bãíëó«nÿ×З¬¢Â54AcÒ^†Ëd+˜Ì:aOžï¨}üq¼öc8Úg:껞ŽOŽ×IW KTeÔ¾ªØI>ùþ¡À,ÑWúX*WøQž7 Ùv_7^¿>ø©µ{™\¿¾Ô©º‚é:eÌZ*¥ÔX©ƒ¿úåòôü¢u>¸o„¨ÿA8Iº>FB\pÔ(8ž3ûÙ¼#©¼Ù­ìKdöÕÒéä¬Bÿ#dEÉ`kl‘¼Ó ÕrŠUEÕÊó›’2Óí­Í*‹¿Ö¨Ñ›Ú”r¸o;ožyÐòŸœðT ~žùMÙéÙö>Î]a™'ö1¯±a9‚ºì3¨ç¿ßKú¥´‚xsã?ç_«6JÁŠ}ˆ¯/÷Ù¦¢à{'êýh¯ùÓöÑîö{ zØ{Ó®þQ¯ie+¸ß' ÃggÅ)ÚÁ¶…D£{»ûκ>nÍŽ§iiæÕO§­}ÏÞLJïšû®5¾â¤Ÿƒ×—GoñíùîñáÞö» ‹×Ûï~ Ü÷fU3µ©;MÛÏÔDóP@˜&“è³îo ÙzÍ”Ît¯×D¨‡  …ãá5gÉí»‹ 3»v©×=KÌ2ýaž&˜z¢!½›1rHë)á*JwfwçÕÍÍdÚ—ÃÒôŽ}ãUi¼ŠÆ‹å ode½l6‘ Į̎uEҸܮc2Á]"êɨIh¿yÖÙ¿¤=¢Ü³ 2KätrÞ<º×r™Y#iɱ楉Z–pi~¢o6ùNÓeÚ‰?_Àš؇ÚmR¯ü)zͤw?zÅ#Ï;Î=ÖL“]ÄM¹ë3eõè5Äƒàø€ÍN’IÒ‡çè»­ê2¹4[ÝN«ß¦UÐ«ë¨øÙ.㦰ßñµÞÔÈó =³„`]ço*"ìH(X„AÜlÐ2…imv9à '!ªn;Õ½Ÿl4›lvðæ؈/,¬º½Ý×»ûÛ'„+ßìì4Žw ×h¹…ZN©°jˆ(ƒúåÆdØ´Qn Ò Ø/é4Ç“”().I;AûÑ”`‡²A%K~MÎÎ@pÙC¢N—Û™c"p×M›ÚiˆL¹ë¦t/x÷¤fÓrÀh<#6…vªÕiàI”ª´I„.."½ÓbóК6Lg í O{ƒö-‘ò ,Ñ·“þ véUû¢×‰šÖðŸÍÓë’·¾0ò˜Ç„t¼üqapúDbÁéË+‹ ÒO—–›6×Ý$Ó›¹¼NÁ&|,!’ÜXO ”ð æ«4AàÉœ§Ö€¢¶4Le˜=(Ç o,¸ty ÖfÐ.aÂÍ1‡w­´{ƒ4i"p§Ø 5UFÓ„@Ua×m¶Áe±~aïý¹Æ¹YÍ™2¿$‹?r‹JË Ö–Šö,$-$Ý@‚îφ¾‡Žjj†¡¦ !7@­6mH°¦MĈkm©‰0ÿfiª„¯þômBó`Mš[²ó•Nå—_7üyf$ÞÈ»à‹\w÷ú´•òº•¦–Ñ– ó 8P%r®=¼Ö„{Œ–{Ô®˜<@Ñš­ñÔ´ƒBJH™UvkšË–#:l]^¥ÙbµLWãÑÚÔ›ujÈbbjjÍ6ÕªœQ6No*ÅbÙ¯…ì œÙWdS™h[Ð{6Ã¥–jºY™ŠS“¬(áò‰öÃ5¡—6n “]²·û‹ËÏø25W´ÈÆ€ŒÍ9R]ÒÉ’„ÍçGºV]oú¯98Ó>´™Ô/ª“a¤Ôõï9Á‘ÞUÈwÓŒ m½¸¹}†vFKˆÓ¬ÜèÝmh7Z¬°DÜkÔZP˜ÈÊs',¸]H„·l*Ë’Y4»¢Ò²Åsz`P„æfµEƒà“ƒœämŒ$Œ‡nÓ¥„ø]¹êvÆþ–qÌSDë*ò!’šÝî ¿ÓŽƒ°HiÀ¹V}€>.¥ùô®’ÅÇ›l#u ø ›Ì1o Y»'êÏètÆlº<ý²¬(­æ` ª*Ý6¯ªæ­YZ1ÆUËÒ}A5"õv’t› ¨Ó,îë8ÐßyÃÕN£ðñh‘s¦†/Ä=gËmb9;¼Æg½Ö9å8Íü¡Âä2ðhìfœÐg)Ñ´[µ¡ôÞº—Ñ}£µó?BMåX "ûé`%¨2Ÿ.¯›ŽA›jO²`Z œÃ„–Â=ðcÑnH)$΃£©a6ãÓ UÜh4wÙ†&UBÅÎlÃ:¾® Pª’©™ÏŠ-Òž²‰ž¨„Y¦3\3¨’Ï YoZ´ÚS¬_Òä„5}˱-[mNâN)äŒr@‰™£[ŽÖ›YMºÌ…<µx:K5dÞ+íÉç¹Vš>ÍmÔºbÞÛÑ[™¦€e†Ls­h›/» ›JcÀP1jJ8åU{ÄÂGŧiŸ°šÐgƒØJÏç–ÙË”q@ê—qìV’÷Ÿ_4ejB²/u@¦Çß½é$-ÔøZcôÌ+§Qv¹,ý9äÕ ëFÕ’iéíÚâ¥ËŒQÉ-GÍÉ´G§uÇGð·›1ŠÖùE™o"fló» Ÿ‡h¢QöÛT±dYXîlÒç¬3º[<ÃÌé J¬Â¢éR+FGȦJbªÈ×rÀz ¿ýgmÈõvrô¦!(6HÈ¥šÙS¹î8à{)ÈC±$Ê&^` Ô1wHƒÃQ’) »-©±ò+´ãýñÔHÐ_ â ^/¥ â„›“áô»Îà*. K話1EI(h2Æž ¦Ž^îȧ·]O´?tEZ, Ú‘Ûm ED»>õU¯ÓL“ùÑ¿4ͦ "¼ÌØ-ÀïÝâW¸Ãf28Ó'ºO‡-Ì 6 ÑËI¶VÛ¾ÒÜ…ÊŒ¥H€»ö:T­¨ `ˆFjkSbéÛ{Ça1þmV§ÊÑÒyù;ý¶¥Tj•ÍS¢ÇgÏu<—§k·>µ[ŸòjŸríV9ÒX;H„…Y¾(‚‚Š^ýÞ®\|f³G¦”XÀFtr¿á/6k÷Ï?¼yÉ6ø§¸2¾Z,n¬Èkû\4]«¬[E ûnïƒq±ºéþíLÚ’U)WØH•ã> ·ÕN‰,ÿØm™j•#×'UîÇx?tkö"æ ¢pã6 ‘ì~ÿå^£Iã~yòÊÌüóp5¨#“…¶v÷ ·ô«ââš©(¿øÚTq«ƒÈ-þ`ªøëÆëƒ£wðÝ~Ùà”V™? ™3ä1yít[ÕÕQ›ÛÏ›¯vf¯‰©=â69Ç7 áܼ¿îh|çˆæÞÎÁ™Äš éí`Hp|²ýú0g©jkC‡ÄxÑ»Y$3^3bI/í° i8±G;fŽ6'îgíá#ôCÓi³•.®HFr>"ÄPÜe['oBê5ãÏ‚)E`ôGLþÈÀA¹`þúooЄÑÈN³iêß¾j5šÛûÏ›ô´Ÿ¯WKŽGˆCVR˜÷blݳ’lÓýüÍ/Â=«Å)oü™ž¤›MÄ>qúuy'Ls­Ï©¨(Ê¥LúÿS3çt_‹º‡-Â×,ŸßjkSã¨q嵯>ÛîmFµ>kTü÷úÕØ´õÛŒðÁüòßþkÇYá.æ¶qtôúø%(ÔùJ§U‰Í$á¾ Â6”ìKt¨é‡hƸ\™}¹Ú·X4å°×ãWoa³wp4¿×ß&kqi‘¦âΦ»Û©dŽ¢HEÒ^’ K5zòì"ýúŒ‹§Ô >€¬e*‰“iJFÌ;e1»07cƒ[×/9L_âäòv?woB$ÌË-¶qÝ”e­4MFΈ߳EÖþH¾Ãêè›_ÔWÿ/›»çkzÍ÷ÿ©=X}€ü/ëk<^},ùÔ~óÿù×øÿÌ’9Ú96ww;uã·¿òÑÔ–ÿÎyVj«+kÌj­¾^«¯ÕL§u90OCs· Þ@ 7´*áðì†:ÈŽŽtªçƒ1Η(ç†ÈäŽâ<ìˆñµ\‹æ{í%Àw_à`ôeþE˵Œ‡‘u0º…‘õΉ`$—`è†óþºÿÑ_v?úbï£/p>š»Ç…y.HÝŒ¯Ñôî£z6ÉíެÝ«¤åÆtÝ „ˆ“ãÛ@·œ—¥-YÓx[ KK’ñÐW4)ç!´€$'´J‹Ô´ëãñ`h¬mªóý Ŷôü°·½ócó•—ŸýÐÜys|rðz÷?ÁoVÚ“t<¸ìþ¦+©Î*@T&/ô9÷"­xË@ÂŽVXG …¤`8äýD’ÀS2íBAÒuS¤Õù Ài‚úœÕS Ž&}ö“1<´ì¸Ð6‡9»öc„‹·"ËÅ2l̵±rôŽ=â›ã²)!ñ÷H£‘2§I»a—u8HÑÊy‹­Ž©Q,+!xZhšc+Ê„üîh÷h‚Màl97œ×‡ËæíÒ·/I—Ç .¨hU:b]% -»è_ ¼ÔF¼ì€ž¤…>»ô`m|Jk·OJjîî³Ä•Ú;OÆšuØ´Ú0¦8·ÒîÑ©,ãï¸}+#+!ÕaÅ$å…ÒÒè”c;<6ۗòûTønb!Pú Û}bâÂèô»ïð¤D.øˆj­hÛ6¹Ý°1ûFidªÿšá•Oè)X’É0œUÙ? 5¨Ö˜âÞGd5Þ¹AŠ„Ÿ0½Kï½iüû›í=³Êå°+É'øо˜*üò¤ñïFÚnÅh4磄¯Žl=ÔXË«ÁIm§Š_¯sqàLɘú!¹6%ßðÏ Gç)O쨱}bpÅ—:”ÛÖÝGv‚‡²`Hʉ*’9ÛZÁdk5~2¸Æá(ùÈ54ê¬*/vŽOÌc®ó‚º¢[·t’OÓë°M¥ÿ&ëÐÊ) PxÁ@pÕê}0U3$¼yasmŠ‘šØ!â̾’þä²ð;]ÃQ2®Ç½;À¢Epw}î%­³ÂçÂO»Ç»'kÑ`Á›¸a$á,s{‘™„/ÄJkmÌ~¸qs¹>-=•û¼QVbÁ3UlßÓƒBǘro±0òHjD:qE8ï|έŒXâZS¼_P¶k»ÐZ)g¬Œ»Bn iUí®‚ÊxÏÕl#X)>­¸—gœ‡4Ìœå>m¢]ȼ…phÅä/ Y*ñ©…{i©|ûå˜ZñE¹¹G¿¹è˜v@Õå·À›ýAS¢zÝð( S—æRðŠ«¸­ž.Z™;ªU4xžŠ°;3Šœ¦ Æ¿D½¯7 ¹n;ŽàDq½2¬3Æl£ºÀA+eÝÏœáù2ΜÂs,ˆêÏ,œÔüzK×±óà:;†äj¸PÙ”¾¨m èù £„›ËŒ¶e±Ñ ×õsæ¾H`M.ÈÜOì²;²q«3f v ™Y(†^rC€å Þ4™òÆ—C©µmûn&^Wv>˜®ÐSÇ0F4´q”"Ì:„,O—’¿Ù+fÿ $ʶl9l¢õé†&pÛO·àÃìLjÁ['þ`.èîÞà<#B¹ËÒ•æÛtõA ’+Qa‘ Š‚H j¢`G­ëËA¿S7÷4 |ða%r=é,ÿÿ¯ù‰nÖÁ$5@¤°P`â]9ˆÁC®q"Iéiç½Á)Ñdì}a{*v%—Äüj®t›úœ¦e_0¿óX7«굿Õ<öóxÑýD—°¤j§8‡Y0\±‹|©-¯Ãg;iÏöñ˜ûX[YýÛÊÚ#³º^¯ÕêVsúh™Sä<—lâêô­IèS1‘ט=ÙX¼ÚÝI·ÓMlNù0½©¹oމCä_nhX°ŽÛ`¡1hjÓC½V§Ñ¯?Ìlóô&s~QÞ5ÎUKØS›Kžvæ"õªvˆª‹ ¤…oœœ´ÿ1Ã$ì@:0mݤʹ‹[[Y_5«ëԮπ=Z µ’5´,€ A,ʾ ôyWW­® çÒ!J¥Í-Æ´óãɨ/û&v@SµÿþàoQ›½Ò «mù.¾¿F¡·ëIæÜñ}›=5c¹ŒÙœØE–¸ÕÿÀ;ÿº5_ cÐv¿2VDIº‡ÖK“£û X–¼ãö€—uueõýgjêÖé?¿¬ÛìP€~r¦™ÿ¹Oöê‘…]öë/KdËÓôtôaÙ7ÉC?¹²‡2ÔºÔCÆ—êÖ×<³#Om±),Þ Ã} XÄ/!¦üÂkËm‘¼QéNr‰’8 rú ²^ž¶éèŽE+¯»}Žþi2tÒdÈ’¸é ¬e'P{\¯­ÎV+ö,õÕUwïåá^yºÑZÜ(aß‡Ñ Ø`tD]¤Q² â²ùɆk„È `;e¹à ¯ªespa®¾BXxóMGößIÿÛ¶þ+ô««×"þ½[]¯±þo}íQí›þï_ñG˜1L™ö|®.ÈâÇz.ª9 ]7%ifèýók ,’îyß×aµ4Cccm•¹F eÂÞгFóÆh¾VäÅm«¯f³±Ð$îÛŽ–„=È9±_å§åoþ>ÿ‘οFÿÿ˜þÇù¯=\°º¾¶Žó_{øèÛùÿWÅÿ ö¼ ‚ÝsLéF &iÕ:+µv›h¿‹ñxX_Y øåt0µAãŸ'Ëýd¼"Ù‘Dî^6T¶5)öŸ9ËRÅÌðÂ*kÿta?¦´¯úùÒPÊùá:¿,ý°ô[ÀRïÖdÃÝe,VëjYƒï›Üͦ©mp±‚j¹sìjyáÖB—ú×6²oÖ6ŒjÚ´~cÖæ`÷KÃuíš®¹_ƒŠ²¼]j†²Ôþ‘ïO\¨Â 3¬}ÿ=ZÁßüõûïËæwÁ_ó½Í]‡gÜGöŸûdT¢_*?•ÖnÓÀZÔÀšhÀÄ™Fp‡ZX³¾.*¦Àû'hý™©¢{éô³š/—ü¼ËHSº£/îà4¥ ñZÙFQê™A{U4ø¹PbÔ õæ¼e,U„¶&ýøzóá.…:ûTöÄ=¯x1RËœv\º½ #¡1e£•|²¼l yB ,%\£¢†¶Ž!ÙQÉo¦õ‚¡!šK¿3–ÒJŸcüñsÙ†O`£åTÔW†ýŸ&£@Æ£òVêo'ư|¡¨ ¤t™ »Ž}°¢È0i0ŒPªÎ‹ÅHÈÛ©h\ ðMÝÝâuïž\ä÷ØÒ`Y¸å©ÜÂ=1ç°¦…{ˆÃÐmî .»cW›‡@GðKg*h¸Ôpq:NEÛÀ=^°Ê›Ë1wÐêtš¹-òÓŽ#Þà{™PsÔ¶Wf;l‹$½b¦Ž໕ ì n+0ÿR@ЈSUF•23aƒŽhúÆJå o±%k>$ש DÝ´ŒŒ¾U̬ÜéÉc4X!l:¥HÙá..¤ÏZ‰Êq#üh¿Y“•’·Ù¨H1jMFWR~¬¬íXp*Û’-͸À­¿øl—'X·i Ž}Ú`M¢¨ƒ2~÷k8ÌÄÕ6PwÃ2^øÎײLØêmx¨Õˆ‡Z˜°?ÉÅy&l•™°'«•ùl:T‘áÌ8®‰=ú!Qx÷`“ê:o‰QÏÀ0tèPÄ3iï™ âG U{y¡S’¼iÄ%X<$‘Pxˆ+Í"ž«‹+©¨å¨B´·)h¯“íØÊiêèëQµìóÄsÁ0[ç-£+ÿ&‘æ´¸¨¢û]‡îtebQ`H¹}a«‹€ wS¼%"é´Ñg„¤ºOE=>š5Ù Ì“/X5Î(E ¶pùe_dù<Ž^š–ŒÃ%±á [zØ–Rb˜Kññ²‹ñ¨¡ DpŒ¯’¦ÉAgY6ËdÃOVì‰Ë'ÉóohwÝêl!‹w#ÑÀ ì–Vü¥e´´Qtt%Š ‡HÅ“3b,äQŒÞsÜH°fîŒ$wô}cªšØ-Kµ˜µ H½Ì&:Z#w¤nXhÙ¼U:V<5ÄB-NJžtøØX«%¥=ììlØnP³ ƒ]Ðî lÝÎì6 /÷Jô ­p?çÚ¶øUq´c…r8I{ry1ëáƒ.;Ì-= v÷)¿¼ßøëÇ6*(/sÊV5,Jw¶p8¾½ëàú‘Ë7huÆ ñmzÈF†EZwXÆK]Ñ@p³s¹§p8„¤¦ÀPéE$jvãôñj¥8x Q±Û&,î©yW¤1ŽÓ´€ 7Šýû¦¶¤ƒßé™ÑŸÈ!¾¯=[BLˆ¥Oæ`ÅCàI¼(UX{Ìò†FÌeÒê;~O 1ÖU•§’øìI*ܸΫþ:¶R`!çÔÇ šAѼbªêgõ- †Gže•I ÷Çû¢›UvWÄïÓ=eÞ;Tç%˜HŒ•¶@ÏT6}¶± f‰ÕL j[¬,P…õîƒÃú“tl+A›–š<é'2¾fIîäÓ°'Îèù3óQHÕöìMúYÅÐþæþ32@¾Á•ãÃ*ØFJe·žri…gÛרÔ”U­!”Üj9o¬îâ —O8ßaõ© >|ЦÚ8ƒ  „¸®ÐLªg´W×Û;Çèx®¤Ûs¶]Ö¡h½§LŠ¿™w}³ÿÊØ&Ðÿ¢ø««ÖÖÄþcíñCú…økßì?þ%ˆŒm¼<Ú~}Ì×8£^MÞ<>xs´ÓÀÍ.äOñaØ%ÖslF"ak]øbãrƒD Ú™pŠ…í×Í{Û/7«Ï5ùæûâ–æ#ßz_ä@?¬Zëuªg-bŽ`JNÎ@ý&êDßô«6yaytJÕqÝCßu÷‰¹»EÍHªu¡—¦zf–þ§ùvþùüwû_÷ü?š™ÿy}uýÍÿüp]â¿<|ø-ÿó¿äÏw&ØñŒ/Èd<`z¬¶\[S°àvX¦s¸å‚ÆJ:¬-Î8ÆKíïPÁßùïGü÷cþûoü÷ß+lËÎ×øïµ µï"þõ€ÿ~È?2s g~ƒ*²<œÓ´¥×<jaîS3!Âþ²‹¥BŸ¦j‚Y8µ ‹ Å0jæréƒ5…b£±®Jg*!Ëò¢»íD¥§DÅL:Ë;‡¿`§õÝL+­ŠQ#X4â¶cncÝð^ëÊYq!ß;®m¸¨~ŽW¡°uÜ8i¾Þþ±A°òr|ÒݲEˆؽ0üp®˜žÞÞ-ésyeëp{çÇí— .ÑëžÚò˜ùnC¥hÿ3,׺l6Ûà[wžc›Å»wÿãW6â÷ËŸï–ð¡yÜ€6âäà¨\dó (k5]×E7”vbß•Mµmª—†è°¤^±9…ÃRÇ;G»‡'y…v÷O'MrÖr û ƒ(8·¢Èñ7›¨Ï½åáå‚hUšZ•ŠÖ ‡Gø÷ÁñIôBë¼ÙÏÖʼA½øÕé9ÕrA`ŸùÅVáb€íþ5~or)‘»¥ÆÏÆÏ'åB:Ñm'`)<ߥÎv^¿>Øçù •Cê5ïm·_ØÞÙ;Ø¡é¼~ÀǃaÓkµ™X¾|Àà¡?›—ˆ:¦SÅî[nµž2tåsÚ)Óëƒý»/ßÐ>o6öŸ7öwv!†y_X¸[ò#,.?(PÒâñ«TŒñPàá–®D… ÒG0¨Á; ùÂÜÙklï³LˆVŸçw]¼[zÞ8>!‚¬|·D{…FŠØ4»gÐxàÔåB°³\Ýmu})¹yðÃÿÓØ9A¦6ï–ð‚6ßQþ -•#@ý[¢þW@F™6*£zB›FU"ªÕ‰¨W÷º05†„ø­+µ÷|ûùs.ÃOåÂóÆ‹í7{8„;{ož3õ]Ý]¦ÿ3[¸Å›D0°U ÀÂdo‚-Æ»KÏ’Ãî²u}špl]yQ€€ y4¶³ƒ–hDÇúo4²2ï´õ~xÈô»³ÿ)_Ý}*ììì=·=öv÷Ô{ÏgU‘×{ÏÝ/÷Xe_ð<ËÝRÌÆ”oÌ+Ð8¡–èK2nÓJè¯6ÿBe=X ‚Êö§m†~Ÿ4~ÞÝqÀÏGÛM”([ü´§[Äôœlñ<Ðï7'8•üJŸå­;Í[þ—|Á•jßËõºýöG~ñöÇ-Ze<îìà‰PÎëƒç y¡?è=¯!¿ä'zsxÈ?ùÙ×gzûî%ß‘oùµý±æ’ø¿ iÈo„¿å«\ö›%´ñÞ%ö{øÎ—ŠÛðo¨D»Ù7»Øç-%Ä«üOùÖ£‹›ÕKƒ±ý¼’2œBÒ~åò~ÜÙ·ô(ï&ýà-ÿ`jRÇ,O[BT¨P§­œæí[ùi¿µ‡ÿ…~Ø÷ƒ ÂÀ•þÈa¼üù­_íXÜÚz>Ç ·øbHïõ'}Ø='zó±kßðÓV!ù”´›VWo¶‚ŸBs{Z›)p7uÿK¿èÄí³¾øÂ[ÒO:øI߯—=œ>n"¾lËÿ—³{Í[W$¯í¯­‚ãÿ¶ä‰ß`®þ­þ¢/ ¼m—geNøÍ¾Ø* Õ£|'zóþiù•óþù¾"ñë +ú+=èUX $/õ)‘ÊÂÖÝR,ë+CìA$@õ7Hr¬ü¦ Ô©çå2ž…-X‰l.f:!pâÄvŒ«î¢ˆÇWÃÚæ?ŒïÞþϳÅtʼnòîÞ]YYü‡c÷ÌȸÎPVÞmˆq§ë™6U¤ï5±‘ö*ÿ¹¼´R©lÐ2Ú ²¼A½Üõù^äL§SÍÆþOeY¾¬«LÿîphwjQ¨›³Å¢müËZÅ<йKVyKÇ*Š…ÙK»ëm¡0éçÁA¸ïN[þ3.úôšg6óv{ [ zÖUŠÍ\¥`)D/C5†u?g^^i;{f2纗Y‰‹mi¥É¬Ìzán "­ò¼¦Dè1ñØåBá’èèÞµLJ£ÙaBªž„Œh…f–·N‰Ø)lm¿¦±6a\¾1b!cµ¼‚e†l¦Æÿ8„Ì×·ÄäÜ_n# Ýþb[ !ÿzã¿ÞŠ#kÿb;–Pþ«Í„äò_l‹iò¿ØFÞ@ ËíåA½À¯‚nÑiBfXYøú¶Õ×ÏéÿCúÿ…ñíÞ]Z>X=9±¹û$¿½Ë‚2õ¢‡ƒéyùvؽckAŸÚ}²hˆMHÚ@Á[‹6$áf`¤‘¶w~<ÞÛ>~µu‹Ve›n8,-W1.~¨Œ¿œÓvn{áòµ±(¼Ö§ÿã+¯ö?¨¢•ãf}²øoË?µüy«TØ}Ž»H„ý|sj†½ÝãCV7(Ê;ºuìm” jçT΀hŠN’Í€(èæµF”A·¨”š’zD 0±"?ÃÅ”zAÒâ~B…eéÞÒí¸È‰ã$Fá/wï®þÊ‘CÌgÏtºmQÆç<4.[7ECMV2ãòC·C£Û}NÑù »©̶PÀßL•ç­¦]“)ìB´Xv ‰ ¦–7¹[˜woþcxÕ‘QÌÛ€ÿÛwÀ ‰/Ö§±…(E¬—Ý;𺎘;’Š}ÌLK\ÓU¹{7¹¤ ¸yÖý´aÏÍ—íC¨Œ_ðS’á80á&Ϻ…¶€ kþDÿ÷ ^þKá%–™À"í2³ºc·|'»åñ‹é-Ïîy¡ð’7Øî‡J:å<Þ›% ±PFHe?œsÕ.}~ àî]ô’ì fŽ^g=3!-®c^É?Çï^Óßl$Å h®NÝÕUßlñ½ŠpAÈ ßf7Óso+¿üºüËÞ½ûþýÒ¯+ïéÏý•s» ƒanÁoÕŽd?:+tÂÐÙ¹'på51Ä*LâËFtè¶š˜búõŒså?6ÆEs®L<•?²)T“³€ïî]?:/è[Y*‡²Çû²E »!ñÒ¬¼_Y¹ÓÙ 1P—ºYè-­¬üòŸ+¿.ݽ[©,†•·:ù‡ ägŒ‡¢òúƒ‰M¸(yÓqkÈ'½³¹¬‡¼³é€"8Ý®%Ôë¬Duue©† ýnV|1šœ¸D툅ÇJ…¿Q‡pû †vkL{hªÃ£éú~q±:£)‘‰ñÓó¸ÉÝXÝ_HƯ²ßOmE ÀÝ=äw0]8ê)”éHpôÖ¥S<ð‹º±ï òÚK·©/½Œµê@˜Y·Ÿ/Óó€äÑ/–bZ Èoý µ›º±â'—}„ÖÍÀ¯ð+Ô+þ+~á«“cÕiAéâŸÝz@¸•/Íô9Õ‹mMW4ü‘±ER›ün2R¾Í¢üEöeÅIÓöŸóªÄïÑåf5•†þaw 4>—±Q¡¾ ˜#‚Üä²x±é+ÿaljšØò»Û®[yšÿíï,÷.’¯MÛÆR¶œï…‚ õ™ŒªÙ¶·d>'’ àò’SS¤ì©ßQwp_=Õ¤EW‘Ó"`†BKÅJQGÉ?'Ý‘„kïrN²Aë¾–‹2y:s<&@Ž}²ï9£‰Fn®,ZqkX7~9Ò|ÿÎL qDÓb…UüØÌ”üÏLmŸÛˆæ(Àn€Fñ±+ãi—¡¦¯ü­æl€ƒr6p?¥\æh…oÐnð#:Æz2}`})Dø+jÄÊÿŠ>¤ÃvÎ|Yú¦Á·t EÈIJ0Z7SP{ë-Ì©ƒ‚™u""‰p} ²âßñw 9ç¼Pàõ±ë"ÿÒœ±0º üO=T5 ý\ÅC¡° 4Þ &BªTàðÕÁþ;e¬”Îm±6—æewWÀxΉÅ6óÐ1ëæ5ç|D§Á6Ÿ£77Nˆž>̵ @ò±°gÃÎ3oꙑ‡G'{E…'sˆÂª8F3o;fæð„•uØÑé1Áá OKXO€#8/ñщw:¨({š9W&´*ÏÂZ/ox@ êU1§MzŽ“KîL¦„_§?!C.’.Ë|/žÂ¨-± ËûŸa_Yÿæþß2ÿŒ°¾¾kälÿïǵZý¿××?¨ÕþÛ*ýõhý›ÿç¿(þ¿l¹P7¥2"bpö nÚ’„ÔD3ÊB‚Ë%vê„Ãf•þzl^µOíMN5GÑWб¿ôµbì/}ûK·‹±?c ¾8ÊþÒ_²¿ô—£ì/}a”}üWˆ³¿ô5âì/}­8ûÁ¼fFÚŸaßÌ ±OOÓ0ÒåÍa¿ ¿äüzMÖst64“(ŸQ¼‡±«QɆlÊQ&²…ƒñ²µ &úã²m7íÑfL7˯¥U©pC«ÒµO]j ‡úùÀdU£©Jï3 !€çÜÖhŽ‹GÅG0¶!#¸§Ä=í!¼Í˜ó7Ò$<¬æÿ±±l7ŒqÓ4 Ì_C?û€ë½Á¹)ÝAÌ\ÁˆÃÿÛjXTW8æÄ üsCšÔ­*2ú+"vT™-³%\K%tm±2ݾ„\å€<›àÑúd,ÄQŸº¹GÖg8Û–$XUÓÅGšj¨ÚRüL…`˜ãöÒœ.‡c‘H¬:¸RktÎ$1tß@©¸÷ýaëÜFXr¡ ¥aâV]­±_uý#‘Þñ¸@ êf„hË:¡œØ¥ÓsjsâJpŸv;aÌ+Þ`õñÙ«ðn“¶S>¹\ÍíK³«õ`ðÖB°¥g1 Vô;#c>wxï´>×ýœ¢%î»%N'Cð岑ºá2Œêü\+a¦€ôƒ)!¦ià_ûÉž÷ ÷6ÿ9I&IGB/¸AÙÆ8˜—·FH®Á¼‚ -‰íQ™[¢ wÜíá>/+t—“eiêJ"ÛòÁÂHgBW°D“sÍ"{s8 W‚¾±·ûzwû¤Ñ<~³³Ó8Þý©Ñ|~ðæ‡½Æñ† ²(ð]Œ1_ ÿá@3׺ÖgAqbMºsÆêa; b¶iBUz7±^€ƒ"¿ÁPnh,HO3Ôó©ì§Ýf{УۿÙâ{$Zë¨wt}ÄæËa~©GÐPÍFãô§¼ rtý¡Á×ÄžèÛLgØâ;Êጴ"j’c0æ`¨è4÷ZU :Þ}ùvwç•:cA®£ºsärCDq¥‰©ÇAT%†ôGìš½ß4Þi»(bpÈLJ"6¼ßH×F×WWão|ÕsÄ4¦65€nÔIýMû©à"9kMzQ|Lû5SŸÈ±^3¼+â! SBSÎz³Óí €nYyÓê5V°Ë[~(µø­b‹p8‘yáÉÎÌñ_f3\@ :¸¨Xì¤qôZB~tS›ir£EÎŒ*W~pEûf慛ǒÓÈY³ù1ÂÏÀ¨‚ŠKnÜõjó.Ñâ|,gæ„ӣ˗6Q#¬Yb·g4Á}ƒ‡iöƒüõ&©]UAž™R¼øáw„îz2t©@h‰tŒœ ERݼlœž4_üx{GS¤Šr3ÿ“‰â÷õV½¾}ZoïÔ;õúóúYýEýâUHÉþe½>¬×ëÿ¬Òú¸~ò±È[û}]RÞŒmàS›©q½3‹Û8ùõ8ªèr Óœ!ù$8"ÈUO䱫„ôìép꾄l§.·¶¶|Bfj'š™ç0žå‚Ëg£KË~Ö: xog2Éèe Ž}rwˆäø{QÈ©ªÅÉÅ MrêpÒKÉÿ¾ØZü\‘z„ð«‚…«Œ¸©¦ýÓ5ƒ?ÚÆ¶mƒÓ0T±)÷«º§NN¿§¶Ž¥–ªŽZBÕ¨Ç[©T©¢üM=íØJLRpéy Ò±ÅYWûƒ*]ÆÉ3zn+²­w3§ôY¶¡+oêä…«–ô†ÒIþR]Lµ¯Ë{S¯ÜƒüG _ Ëó;ëÚ:Ä{Üjö=[×’‰sÚïÛ✼z¸¾´U„&PÈ.Fàkrê‡p=ôm$UÈêß´x‡¶›pW=ÕvœS?ìõŸ¶Qr™\ž&£yÛ<²…U3¯ìÇ$@aܸM©­A·jÕr©öÐÝr:cjÃå¶ Ew¡Yã=ÑÞW+Fÿû\ø¼¥âcãŒ;²ð»qùg"^—£Åǹ‡$¼/ƒPLs¯eéNïb¦$O¯Á)U¦ˆ®à¬=ÌK=ÑŠO+LåßG¥_¤Ô¯¸WÜ÷Å”ÔxögÄÄCIw0 YÄŠ`ÿ€Íò@Ì|––*qÃA(^!t©=¨øúö"mj¹"ŠÑd’n$4cëúü1ÚØæü1Q—t‰™ˆL²y}a‘Dnñ<ùRb?XÛLzíÓåÞ‘ œÛD`#Éê>é_´†Ãk''dÊoyÙ¥7ZayV›š‹ä‡xaº0< Ä}y-²"z³¡ü²†ø•ËK"ý©vïzC˜f4¨k!)—†-É:/“_ôvÌ8°ÜSҤƒ¡ù@Væ|vÀˆ™LìkypeÙíÂ6:Xa^¬/ Eƒ Nô› >)Iá¤ÙX6¡)…ÜB•îGÂ;‚BDxî4íùnZ‘}¹¢FWMÎNmcK£Ñ§©²Õ²è> ¡¿QGÂaKiþì g¢ÉƒØ=¨ànjVóÔd×&CAî„&ybrØT8j‚ß‚ŸäJmDxh>Ãø¼ 4ï¤ÿ±TÄ8h)[p#læ¶çÙ…¬G%ÇJÑú)Ü–1£V€’åóeº?DxPm™C©»ûÏÞp’.ŠTh<º¶ G×›-³È‘ä%e×fÑ,n˜;¥òH\Cgî!Ú$ŒÒ8 qíÐóâb¤}Æ(fÁµ/F˜~eiˆ¸ìÆÚB*Pv:ëBV§¥â¢ì\…ÊÌHТõmþ¤¡!º_Ÿhœš¨N$¢Ï ¤ •Ah}³xæ*I#[NŠeëÙûþ DI×^Â/âöê½ö=¤~sV­vRJËH†WXð3öÔ‰Âí®óÂy&h“N„/ù4T,Þâ½ë!ä¿*³:Ýt؃(Å…`$漕]òÏ.¦¼`Kμ´\çxü´Ô”Ü!¬S¡.GeMå¥õønÑŸ°–eVñ°hN J–1ä;%©Å&¦D !b9^ p£e´q%’¤=Ц—Yõ I+ý¥"9›‹õÏ:é†ü<ë;1æ—þ ïl%”ÙàJÊ!¡ÁGXÓÑ¿4B•ú4*“ý\`Ô˜˜1DÑþ–Œ¶Iª*2YèÐ ‚tI.‚?W-ºd[Í^wQ9 6嬿ÚHf¨(ÀirèìüpÔØþ‘³hòMÈýçþ1þЙŠVyM4q¤€ör Nüq=p¦)œY=¹¤-H½xÞüÆÑA龞½Üèõqã$":é2Ê-“½û}!;”[vvƒ>àÔ‹ª<5^{<ƒÜ>3åWe{%ÏrÐþ¸‹IjˆÏàäiüulïfD'Æ 1Ð÷ûú+ó1åÅ vQJh i>|ç &Bb8Qýx@¿çµ¦H&¿1ýh›)GHꢆ K’~ô’ö˜¨aQëôøN úP`˜ôY[ÓT?ñ’CT’¢å•(LqV‹ü©hC/yñ?NŠb1NGÅ9Z6é—ƒF\$Ì+ƒ«™ïÍŒÓYE™b¿j:ê¹c~>è }¢b2:å! >qK·ž]:·dr1õeîuLéž$á¾.W¦ô·›÷:´ž˜TE‰¨˜ÝãyÇÜ<#òzLKX§dŠe[9Û</—‰,VÌ€à36gV ¯aÝ g?‚lÿ#’ì¢B6I0ß”úŠ&ÆÓþÞÔ5ZN3uŒYeªvZ´Fé¤Ç¼œôUty‘r´Þ¢ñdyF‘U6tV„);„XdËÓÊ.yÓM‰~Œ‹j+DË‚ëbH/ÍoÍ'q²GuvÕ©.e#çÉÈÃ.Æ @ 9#(8<øéä_¾MH*liQaƒó‚™ëe‘;}<|°nˆXMñ-Ò~G5×Ä‘¤*phµÛ“ËI“8ê]NR5!Û‰fä â}–Dã|0bH²0O Ÿ³~U£ ÕO~ú.1¨[Aåˆ ®X¹ÎËAÈR­ÌÞ3 #”Ïá”Ù2AðAža‚£÷ýºkRd“1ˆãÒâûþ¢``|^lÊû¾Oç͵ì)†¡»cŸ„y@yЇWÕæÂ.á]}“6¡ŸoJÄ0FÇh *œW¨A-m°mÈzP¢Ôøy÷D­ŽËñáÈÃU"ÜLeðºOáw³ÀN«¨ => £Dr+K+B¯nÌh‰!åàŸ…ÛøÓØO±À¤oµ€ŽŠ°‡¢˜M}—ÁOi1<âƒË„³§Š#U‹Ml„Èe…²å9´¾ñ[½éOŒMfÞËŽ–åmÊQüb¯»I¯SÑ gý0jgùuÉÕ‡i¥ÃA¿³ ;CÇÃuD«îätœxN[jE$hÐ%»5E¢g{ƒs¸³c­Û£Äg°µðFœ©Éœ Ò:.b<Ay¾æzZ:G%fcÎgØMóv¿ˆ?ê;•Xp Ê„lóÄ{ÇiÕ©Ÿ'rí8S¦îXÑ¢4f/ÅÙW"¡+ºNs±«z[<=w•UŒˆq“®óQ8x"Ð7äXp9"§X¶Úa\L'm0;1]>þV0¤F®±Â7 îs[Éôö¦>>v;BôsNjö}ßÕº%ò\°HAj9¤ÂkÀÏ1£,|.,@Ä AÉâûÕEoüEŸÄ´:YLÖcÒH©s¦bãT9ç ‹ªn à"®F?ß@Ž“´.Œ)t’e ´¹+ƘØç½DÍT¡?‘ oMB%F8›=]ulç¥Út*Ý* š¹“$*súD`À*¥%Éž ’§Ÿ\q¸5'©w@¯*Å‹še:”»1E7¢%è"´­ØTM†Ú}®™Ë?€Ì¤cJs"`0¡ÄRå‰à“Ç#òó4ål ÜÚ"wD4I¨³”ÑÃò¹Ïq] ¡,½Ö-®ÇrQ/­DHå0˨mþûšœa:ì° ³aXÜ'ý*Ðjõî¼AA’W\ª,Lõ³âó¬ÁZ>}´õƒÐÎŽsÏʉV Z‰±ê‚¦¼¶ó­H†ªÜí²]È̲Õé¬Y¥Hî®ð ƒ>áè‡Tð¢Ÿð¸“Ô£÷¢ª­­¿µžüpüô´M“P,þ]–û?²§»‚;¬®¡òk6Òd}¨Œwëî#ø"TÌÀ9ë]%΄΋z¡°¡c7“Uâ¦Ý’èm‚+ HžNËwËæ™$"xóîÉÉæÏ¡¤Û:Êå«X© _F© _¾f¬']7¦ £—yö8”ÁÓ±®‹&ªd1I¹x#Θ±ï„Eh* Ê_LŽ\©…\èô ý“ýj÷4 JnEèÙÈÙÏi©ÅÂz™–“”–ò7ÿÛ8¤!àõéè± XuNoµ˜ºL¯%Àlݵ‹e9Bb6.o+Œ¤Øë'.i¡]ÊgñŸâ{Ûܬ´`ñ’ c%ÎüЮš_¾é•Y­W«¸É~K±JÎÒp÷Šs·@`ÞŸ¾I ø ¶ÉŨpÉ\qÂr¹_ˆpN[× Þ–ew,|vÆJ4ø Id|²Jz“Þ™–©ý¾`Õ"4Ü+^Qa¼¹Ë—(8Še%Wgj2fÉÿ™ve¼ßkaƒIP`À€óÕ_7d¸“3Vá‚D˜Ù©.¦‘ß•^€³)£k<«ª«²µªÉö_±  æ9˜ÓeYö(3~"õá\EãƒÈî½?šŽ{#ó†` ®„`PžꃗQŒÄÊ3}èM:çIÝo6ÀãA˜æTl£ Ñ`AÜØìœíUŸãJ³»ËM«+R‰9¤ +•‘ºc½&d÷XtFM¼%‘A„‚Í‚*fÄ„ŽÑiçLå›ÎZWŽ-¢&µrlP²R°2.(eW€FŽ€Y­ {Õ;ƈe;l¬:³È|´ð{Á™'^  UĉJŸä¦{ÚP öÇWC 'xàZ‘L`Ú\B¼&«íÚPˆä‹rû5súÅÀâàŽ-_ž2ÞöÒÎŽ„Ñkܪ6HȈ §d›=1c#sšw×- p•±ñúYWR­+tÈNd X;Ž–Çv!’¡Iòð°ŸØ¬-ó.­ $º ÌÏÕàñhïíÑöaóÕÁëFâü÷u÷^^ðàãýœ×h¾ÞˆŽUP‹:U’‰y¶Ë ØçÜ^hyWx h!pîŸWœ©tÓ.ÔÜ–}“ËEfC»lö=Bÿseyº]ã‡ü&Ú Vl°Îû$±‡Æðvb ¶¼÷¹¼Óàd­ºSÏ Rè_¶Dž*Ë š‚øZº‹îuÆã1´æŒw¼bbKå¢]„¢xìi‡/ðgMÓ©ÑVÌ‹æÁe«ÔÒjõØBŠ8 0hW"[ÅLwü,VÌlüˆ7˜·ÜÇU{­S[l9k²4ϸ wY§”PjîŒX…‡ìF¬6íóFËÈò†Ñi3\ÑÝíFÉJãÁ²¼“uOÕݸx~\L.ݼûl%ÂâÄßülxL´Y€R˾q÷¬—¸wÖ-F½è ¿ÄÝòå)îå<ÖÔ@9T¡30~bÓí®‹·/Ys&ËÙ3[5‡ÑAÏ ^9ë¥Ì[ñKXÏ%¨(žjÀ΄‰pØkì.ÅW `LްZþÉÙõ­¤r~ç¸ ç4¯Iê€3åÊZ)Æ}ˆ•!Ñ=–¼²ž;±³O i´¤ =ØÎøIΘžâ>±KUö^9 ʹnÖG!ž)8±0 ä‹…sZ qkÐßœÕûýÎiÍ“ù+6§d`…Yj[•–ñMWúlmÒúܽ| èé‚… áÆ~º866Šú<ÀfVü0ÔG Çáá ðqiõÙ,=ˆdÁvˆO÷„†Î!Ã("AMŽ…cë©ä‘5/]ÄžHg¡ Ç‘Êz]hEkNdq±åàØ‰p…«ÏÞM[·,w"§r‰£ WcÉú&WØPZ¼ZƒÝ˜˜•‚BÊ~‡¿“Nvϰµ@zg"êO‰™BØ\÷ 8‘íœN¡Yƒuß8V2H£ý“®¦ÎF€ao•^Æ]%Ó¢u£Xœ®TVoöþ îìjeÌ«ÖÏœbàGdÌÏdŠ-Xr0<ñ@aUÒv”£\¬.¢ÅnÚê /Zö[í×r:v˜sS#)ЇD„s>pŒóÀÔ  À¾7¸dä&˜þòçÂŽ«ÈP hç3Va–Fl]¯{:bq•u½P‚ä}¿hR<Ñ|§vŽ_:íËf?$;£åÝl$Z{Õhõ°Õ] ÎÄBdë·C €5DXÇÄéùƒv—á‹cdIùß²óe®O} ¥À†:¿ÐJ«äâ©\X†UczÐÍ6vçMŠé)a—Twà ›¦&“Oràƒ9`lÌtþW/ÛŽyºé}ªÎM,_+V«L'¹¸®Ê¯Ë½¤Ó¦*ŒëüšdZ»×.Úe‹ka¥tæ&~… „áp®(KÔDs'pPéºE§'ŒnVƒ÷ÍÓÐâ˾<˾ Î"ŽˆÆÓ¾êO çÅ.;PÍ;(&ÞEß’üœÓ #3T8&É鵞¤fo`=Zä¿©x+Ù+¿Vå=˜*‡ ]¼ÐSÍ‘ÚGX„̰±½6ØOìg,¡­Ô ÝÉÔ\·ÝäÐZìC× 'mš¢yOÇýý¾~4±ï«›÷ÿóÞÝï¶Þ7þxO¥Ð©QåÉúÿŽ"xÕWK™Q‚(®VÈf!ÓïsÎA µ,cà†]ñ±7<øWÌ}ö64^GÜN~Mx¶¼:xaÅ=êbèÔ~ÿýÆ—^¢Ùb­˜©ª?yÜ(ˆÜ '¸J¯ºp¨*µ=%)|[‹õÂÂtx5•óŠIW@%PùJ@°Žf~ µ  *Am‹c³ÍƒÉ‰*¥ÃÉ©rŠ*7eäú~ô¾O@ }& ,˜ÝÙè,ƒhvñ6ŠçFz›]gu,šË]¹…Üzª§§‚€²wn|jj±J®ÊxÕªˆ/©æU,ÌkŽ—¬Dpà âs@£3 6š[k<è[oÓö³ˆ,·Ó¿‹¬òQ¨T<áD¦Ú)©øÑ†}«}¬Vi•itVÀњŠ(Ž'1þ³gØ®i´¨ÏëÞ®ÿæ˜n›™i†´9‘àž˜UPq·(ùÔ¬Å;xÏÒÁªíõ’sœÙ›ÀܬD[[­˜¶{MU$b„æZ ˆÊ-†3㟂o`-ýÙ yö‰xAíe÷À…^œ[X¥œŠñM\—ä¬5tøVWM´j¼²ps0dVîE´rÒýt¯LÆßc2>ó­ö+d[‹f1Í!oh“‚úâ½{Ô5hñ©ñÒ'j‘íèñ ýéâ­Ÿ³ØÒIÚ:O2êq¹¼ÁTA±Ä"ªR`ù µ_¡vŽ÷ö÷B-(>kžeX7ƒ¹†ðà!¿zfã_0¾ @°›6ÑnÓ…- Ìûrzï JNúÎØrî`û(îbΆëKÁØ}GÈ¿;>i¼îCÝR‘™K;;+ÚE´23aÅqô#–t¥ˆiA‰è,F£1²¾Œµy–»pÚ3ïß³s[Þ†rÁe…3–xpò4{s\ÇÌ@†Ù(M]×6ÖkÀáÖŽ#„ZBzÌs¶´²«˜âp'yþg€KÑÀÁ!bz!4mÍœ†ƒ† › j6ŒÏ ¸ÄÔØÖvê_Þò+DÆïÖŒM«•¦C}Ά¼ÓLù¬s+¦ö$kìÉ÷ÕX$ 9)WY;´SµÏj?Ýó˜!- es>‰È¡°±4†S‘ÔK‚¦­€ïëùˆF”V¾‰ð5ËÌO£ã݃}&ufúXI3Ϙä# =ûFä’DmpÞï²}Ž`ô9Ö"]Õ*½-úÐãHa‚›…c}ÑeD©Öˆ×Ìa£1Õo“en(6¼W,®¹ýã(7 QÏx|!½ØÞÝ{sÔȪzXl™C€ÃD‹©}Õôº\aRqB'‹FŽ8¨Ç N¶ëÜlûY½÷ͼ²Î(dNæWå°ò+:G/vä}žÅ{^Z=E0i%dœè‚³}uì!wA}ûͧGåà¨ÄS°ýŽÇT‚ ØxkTZÝqÂÎ=c?ĬØ6äè’åsTd‚ÿ®e—ÂöúšO”f“ªðè#Ew„D©Å&YôõžDöáˆC6á ^‚ÈËÐ[) ×QÅ÷éÒ+aÃÙ¡ýê%¸vpkP¶÷ÿñ´×ºXöâ±:%;I8’b€°oÒl$¢;ñ ã‘©â•W“ûâ[nŸwÕ+: h!Ô@p”?µrÙñKS‘xx: ÍÕøï5ÝÜÕxoŒì¢­2½,¯jòêýª[ÈÕxáø òáÖ4 î’âô.©AV09\V0ëG}£Ýtº£^Ÿlo3ØÖ•‹Ëê&mÖöMÐ% šT4i)"¦ô¬<«cp꺛u»îFžÙjîr#džýçÍ¡üéžUƒÈñ%¤UZÚòêê.ZÃÔKåå >cÔ_Í‚í´Ím¦ï™I#1…±xÌÎP ÷oÏ6N–3Ñ+/júÂíXwìƒawaLc3¦¬.¯=¨8¹ ¬y™JcÛ\Ö,¦×ýöÅhÐLÒÞu…³A°½ZAÎŒÚ'ª9¶¼?š`"R ™C¾—1 “#ßÞIÚ¡n5¶@E$ª6Œ[æiÝ<·àЀ~ÚË­h .¿œ£o ÛcR +öâØ9;Pët¢x>Ä7p>‚ºQ@ì [ æ­ƒŒ‡­PCýfPD$¸Qh’ÚïXZ½ä—*%vÛ‚+ù@\;Zýk^.å‘Û(]¢^Çõ-WÞpB#2W±bìÀÂáÀ.Ø™Ô:oW©¼aæþ¾k¤ fÀˆÁ#Κ€¦"Ìl?o¾:Ø©! mÉUbªK#ºl¸*‚owMF,Ì™(Œ½“xZÓóhË*óý P¿bÖÄ{ÒBG¤;ÅS_ e*2æž.WÍËIû"ÐIÍܳـ% Œ6lËf3wNbò(]»ý’UúQÉf{ÛžD¨ì1!ï<Ž  m;°IsWÕ¥j§0 œD=¨}˜7ÂCå™é‡#ô+Âc ¼Ìt8œ—€¸×Q9@~fo<%®˜z^Ï„xôXÑÕŠ«_.»°£n‚¨šVâŠÇÚvºgÞÚn¯ÿ´ýr{wê›çf<­ª©šÂ`‰g-ÂÔb.Îç;°_Ëâ5*2½äŒ³WD( ƒM¬JÕé¿æ!¿èÛ÷~õ„ú`1Àº] ½j×Sˆÿ,â‹´ Çr–sަì@H>¥³ŒžwP3Ÿ ‹nC3r",´bs“EðN2;Œ[ĉTéæ{j &Ä+ŒmòиÜZËÄG!N3ƒJdÜ'yTÆ×Ã]t?†ÛÚ rE >kÅnFSn0M6œâ©Ûô²52Î\';ÇÛ/öÞ¿š‡WÉ–ÅÝ‹SþX‡…d©ÕCnQ‰æ@·ÛU‹cñ™NÎÅ’LC<Œ‚`Cªä¯œsíœXš´"´¬>˜ðfô Ð1­sB-’tŒÅBo,Ç»/g‰[›k›)4 }Ùjϼ½ŸÀ$ˆÅHÔSpò$‡gº/¥»ã4éñ](‡hÇ–úI·„°²ÒAZ’€…x»ûB‚ 5ž—r"•U<é¶»„@»d ·ô†Õ‡Óð!É·jƒM[[*JžÒyH>:7Ä[ûÕ7ÀF¬&D4¼@o±pÇ'Û'oŽgh8 iám¬!jykuõ]¶hͳ›B”¢~¨›[uâíiщád]kÎasØÉ@¬ÑçoÙbÿ¯Èÿª¿j Øùù_×­®­#ÿkíaíÑãÚÚÚ¿­Ò_|Ëÿú/ÊÿjÜž×£|_Ö&iå«åu5_+¯«ù:y]ÍíòºrÁ¿œÕÕüõ¬®æ/gu5_˜Õ•k|…œ®ækät5_+§«›ÕÌŒ®NÍ93³ëÌÄ®>…¥æÔîîSt‹ªP²BžŇü1ÖpÜÔWÍ«n_5ˆšµ/ÎÈ{‚`¨äâdÙJ,x’ì†"ms6Ïaj4âñû牆ÝEöIð b²»äó£5N øÝaÃtMe»˜aÍ+"‹Ð!(žY6uÍA_ûYLD~(5NÇË%çÌmj9ÉáÈ :&Î^×ÅÍ/“#îª;Lšpï mn•4Ľ]K‚¨_T!L§qKN“¦Ä yùˆð¯Þr~Áz^S£½ž6b=ÎÓ@dÖeïéëójï9ñ™àËñwÉp?ãò†³‹±º{_ã¸ñò§ †BtÙfàümÆÔ“Ëašqׯ@—ãµ1’=¶‘ÒùN@­K&"SêJæ€Y°ÛýuÃt¿ÿ^¸;Ùì²4Øø0«¨#ÜžIæÊš¹+KÍç/ö$KHvYÝÇœtßþ‹&í;ÿì Gb¼P­öÂÿˆ£CV<þ,;g 1Çì½Ä~ÅŒí:q® ÍĆ’ÐèÄìE¦ÁÜm ì:Òs Í]#»k˜wˆD8Ž3:^ô/gƒ^op…«c-ÈÊ™¦h PòÌå6 À¾ÝDCÐÓ¤ƒ„ư»+|„yÙâ¸ï|ñpÜw›—)s=aáØ;Øù±b$<¼“ugÃÞߪ©7ûSE‰¤rïGÈ„õŽÔöùá—KÍ;èŠSOË,Å1+;’žä“])çaa2npVx±Ù¥7,£×œnêƒÍ+v:Å­NÇÕ¨Ø"öÀ ψg£eTÈÂÊ©‹¶0}ó ÖÃaË„DÇÁÌ+"ÛÈ ç`ãE›âùÀÁjÑ›gø4Xý‰m“¥.¥ªû比ËVpí¤Î/Xè„íè$È 4Ò¥,Mòƒ|3Tjà|º¸KV¤&=Y;ÛdœGìØ’“É_#\ë^§r®êMÃ Ž¦Ú€ƒ‚M€“¹P²¬Ým/”yÔÔŒÔâ!ª-qL+ŬN«Í6x*?´¼È„¯%æqØê"Œp(é†Ç8LLy¹(¶D†OF² <–hÆ~y\ËÞ (÷Ž´Ø:NÈ(ËòÁfÓömœ^³à”ù ê…àÝc&¬M€–ˆé„-Š5–ÓÜ•‰M¥Ûí\s^¢ÐÒîik eF/} >ÂR­!ǹIúƒÉùEÅÒ"hê;Ó:LÆcoéYË´¼l̶5I¿;*ÒœTK0³Íü[K1h…íÁFî¤Èí­!÷‰<´Û“aW,“tç¾HÜbEVr>E×eƒûn©³ åno–| ¼H€[ä¹—ôÏÇì¢Â’P?u+>¥1}·÷ê‰,ô <ç럃÷QÓsœ·‹Á¨û´»= KºøØ»¬,aw‰^K›ó2EÂ3Ì!Z§°Ñ³Yq‘ë°µý~jÂF¥Åùmá~àÏ3kû¥Fáà@«=£ÿë†ó³ÒéúTÒý ËIê­•ˆÂª>5z”IJÐÕSSÞe>L7u2´%Ù/D¾ñ n<§n‰V˳‡÷©”W©ÇoŽr…h• ´—§Iöï•ɽû#`£Å‘…œ1Ñ ’Tâ,LyŸÝ|,¤bÀS~…ê£"B]H‹ðlDß¾r²}l[TdÃtÍ“ ù/ /sÉel¼|ds^|ð:𻋧áú‰ÄÞÒ?Õª·óZeĉ±Ð¶õ×®9ÎÀ8²X×èx&ÃRNÐTIO0ŠP´Ø¢[ÈU>ÄffÒ‡ÊcŒì’ØÛ¦Øí6¿»Q˜%J#ˆÝiM:ªÁq¬Æj*Uk8a¥¸Í: !tµfµÃ‘áGżÝ?xµ½ÿ²Ì±:T¥f{uì…o•Ù.*šéŒ^{†UÀw$š¦¢ã¤qÖ^uÊÄÖÉ:5ºX>‹]vƜŊX¹®n¨Þ´~HV:/*'9!-ž*; üÙbèBf|pú¹ ¢D©—óþjÑËæø*+-ŸSÞê+JAjf…`$[EÐ>èTO¯Ρ’ÏqÙfÆšZ¬'RAL8*ýÀ²x6]¬ßÙš¶À¤ÅC¼j°yn:étIpdø¤]Ã…+Ž(óËì˜XÝ1OÇzû¿ï ¤ÔÍÁ`ˆÀ…:º%4,‡we”- /“ÎD,\0ÅݳÀÙ›+€£ªúˆF7„3Ò¶Ž5Û÷ƒç8ßÞ‚ðÜû¾wƒ˜J¿äü wK7v3–"4¿0S]hm/|ióCr½±3Òƒ”´h 0¬É´ÃšÐÁˆ“òBÐ[ók\AžQÅý$2s#èFs¡rðA <óR<ã»ßu)ãƒörð÷Áè vr¤ÝHجIbk&c“af\).¯›­ŽÏ“-ÃýSvMдOÆt!vu–¥šQM§êÀ0)™‡{¹ÜûT¬DI[ô»OK r¬±l“¾½®Ô‰ÑÒTLµ&|zML PB‚ñlÁœB£œB¦05 bX’ôÀƒ4‘чoòP^œ*8]èóm ýš[èKÍÔªßrÇ_{8§†ˆX[i»Û5ßÕ=$ªïêA—½°ä™ÔÉe«²ôâcƨ—ˆ%jÍÜyäÁ3Í"ïµ›{Üû9ü-¿¸ K ,~ÞÕç b==XÝœCåÆ/íúj~ñhU×Wýªþç—¯ªðö²t¯v!e┊Ä_+ôO2‚}­Ù[1©5§¾Ö|`ˆ-ä°6”š«oc„OÐuÉ·J@˜)AÞ+¢2Ÿp7w2l ºŽ¦m4Ho]£Ü@˜ZĈObw<³Ù1§Ûƒ÷·eë¼?HùØÎÇÉ·\FwÑ,ãßòÜ6UÖŸ@ø®‘á4-²W²UEÉVe%Ûàì̶Lû´Ì×ó¨íä¥Vƈ-€…D ·ˆŒtÊ ¨&?uYîšq$ÿ^Ëiª;½ìØZ°¦.U‹,æV G›¥AÕ¥v[ƒøÊ "= _ eüÇ&\(Í}Œ'L1¥Õüa¥k‡ã¿ d^oøq´ÆH> ’ó sBøíŠÈÌ‹( ì-uå¢ýÜœÛÊ×aÁ¢$¶&#¥À¸ " ‹©ƒê”U«Õ¢ª†ÓªFƒ¦ _šÂ×”¬íQgÕCË‹ÙB3ûζCÿl}±RaX¬?p±J$†ÔªcÖŒ“ …­ð¬bAí¬”ø¦íLú%*'+dX)Im´Ån’©ŽŒ³ SL(g»dWò¾ZKŽ¥•Ûe1˱9²„ðMIÍœý’^+…™{o5Ù‚æûÖIÊêSâ1p¼HÉnÃÐÄ­ÚSHá½Õþ¼²|ü¥¿N±s±"ˆ“…„Ö}5ÍË âúYÍâWUjÛyqRžïXÔ/ú (þ k–b%£©4µ%ç}e•3u¦{ÅšÏ0ÎqûÙæ–ʹŒ ¾` ݪ˜íÔ¶^0ù˜ÒÆe%½.[ R×Hùí{@“b=Êàͪw"*&ôTg}´>‹”H)|y^±^4/&{‰¸üýê"ÑÁb|ÀÚ®4Ó _µ6Åš;v2¹eï|8 ø¼¹àwtùKƒ>¬ÈÜ9Èj›`ù1ßpªnf™K¡W×ei:U̘é3S~€œº7>ªþ›½Ciý@Öªõ•€Àâ[¿wB^`å½ÿ•ÅÂy€#æOÞ*G7uödôé#µ?”MhÁ ÷~Á&®o²!_Ê~>jÄ·!aÙæîbpåòôI8V‚ðf PÆᣛƒ3;Ù?(“ÙlËUhJËÖÚyð]©APg° PÖà¸ÔãTQü(–èx5ûõJ•à˜Xó'ê %EŸÇyÑ» ]ñ)òc&í 8ÐØ»X’þ͘Œ/|½²æÅz2±*&+ro¥œW¥bÂqÃc˽#´Î²õ·ÆË¶´_5Vg6ɲԥ„ùÇ®0þâO2aŸÕ4 U«mÄ+B4)J;±dcöÒõ‘ÕF´zœëøY™# SµÐ…ÑèªÈRJæÙ¾s®D8fÒiwê$wgñ¸cÕ_´8¶•ÉpÙìÆbk­W@ÊW^g #‡/øµj‰`.éõ­íÒ€Ó,«#f-ðh­ ºÁ€Z€£ß~;m…fNòœ“Õë&£3ÚÍxØÐÝÕB0xxoù­Ôäêú i( :“Ý»hEF ø'¶ÃáÙíCõRív[Ñ‹…´#.‘¶$ Ðx÷K»)/#¾ý~G­ŽC}Ût…ýaå`åmõDã°8ëŒî¼’f·L:ÈGlÜ%2‰&è;ž¦wp§!¼±›H l1|®Ü{ôׂ¦PÅÍÒ$T'˜E"+XûBT“kûnžTÏ´jêöqÚ|=;8µ\7+¹ÎAÖÔ_¶fÆysÕÛϘCdŒÿzú¯Ç2·­éƒåP@v²)*FžNFªg÷–Ý,ó|èÞ#x³à¹œZ£Q÷#¨„@OÈrøv³Û„À`p­¿:x»óæèøàÈV™EHº´9¹Rùg)kR°nz·åU 𬫠0#à ¨Ç "ïºõbþjn¤¹ßØ€žÖùYè÷;ßyЛÿý9Ïð¼¨/ì7æPºM8=êÁ†¤v´Ä”˜žô"²•ÝZ]VÛ:R‚dPº7×ú™ä¤fˆ7;}æøZÝ–g64 ŸiQ#ÄÏw8ŒªT̃Uëáa î½ Áí5Ý‚÷ƒ_u0Ï*p¶—8W› A0›šÓ6`¬ ½JQg“4ØÏNö „E äbQh<ËqVD‘qmÂüÙ½P…ÀˆQA”\wŠƒ‰+ç˜+l¶aåTí5[Ü7;|Él‰ïÌÏVÌ+µŒV'™ÛêŠv›o%žUzš—¼e/¡¨õF®Þ‹ûgÇ¥þãÈ¿Ô †UV32fåìGgœ³Û©!¯Þ«ªŽi¹N9m#!…£ÆÉ›£}è%ë±ÕGaÚBRO‰CihˆûÝŸ3+×fWž×§‚úT†Ab¬;jœÔ¸,ü[tA;‘V».-¢[¨,JÔ[Æf5˜*̦MéÀBù¸S+c*ÒÆ,/ñ*î³½Bm¼@I–Î,¡ÈΞû,$\C]òP©ûÄwÚd·AKdBÓÄ -Kû’£›<¹—>exç7Ä{²£]혀ÐG¹ú”OI… {Bsàõ©å’[Üœêðú”–k0Û.[FO'ôj÷ø¤ÙØ?9zg–ìþȵíR p;´<áji^ªv{0ê(ßφ¾îðŠ 5±¼‘'Õi¢)&ÔÈ#ìG‡»µµõl–ïiˆu#Ä`døß‰Ï  Väµ,bÄ:úëv¢œ=œìÓ Ü-¿«Tõ‚{¥ q4‚Î++!39²*ûœ޳¹‘‚d.,µ¶Ê5pÔó’UÀ»× •X²à¢èÒÖ°ÚˆÅxÐÅÀÅQÞ°Tc÷Ù¤¨¯^7^¼Ý§%¾{|¸·ýŽM»‘'"¬31·aŠ¥ÃÐN…xøËnzš€¡â8!ˆR†$s]äUeUŽ9ôè*AäkþƒAƒÖ,qæ¡3ÉÄA/l¤ ܰ«8*Q»Õñº,®ó³fn¾nYÛG Cd 6ê Ì|è]‰ÍÍéˆÍ0þrð쌖­XÛ‰(—½Žr$¢Z>SnÓTË¡€œõ¦°¸Ì¼3Q„7Öø’.b¥[BÎ8-B]áÝù-·¤ük¶"ƒ¸¢9R÷q¦>gâ\Pqg×ü±;ð¢"›‹Jõ<Œ§Ã¡¦4.Žê‡.ìà¿_“´^RgÅ< +Ûp‚—CÝ8MäÓ¿vk¢±x”p¤+®}%GçœÍhâ$H…Œ¤Ký šä*çd”ÚÁ2(œ 7²Bêæþܖ˶鰽X¾uCE§çÃƱ¾ÑjîØ7 ·ôÍJn OL‰½·ÑøWVá"JÌä¹¹ÑÒ¦FùÞ×! Üq.uúHøÀÃ{*,¡(C•þ*3Oeûòª ½°©¦‰ˆ rá~dŒ#6íÜ'Cr…£ä'—ý‚Z ìRs£Ž8 ûl¥ÑÌž«í;¡Guàáö$ÔÅ ç­P dŒÁrí® ˜ZÓ2õȹìvÐTƒ×hhµ]qüq~»vA»AIõ&oU·Lñcw4F°IeŠÑÜ]D\Ö•HfÙÁ™\ £å¶ÍÔ Çð„ᵺ%×®-ÕkqEh"JöN¿„œ’·§#ÞUÙVíßF% ãïcæH`UÖqØá˜Ãh’è¢VC½ˆZeW‰²À­ëPFPÖ—<1«Ø§§‚ ËQcNEíÁ|Y¨þEºù5¿?œÕÜÊndQ}¡õdNOü–ÙûÄn†ïâÓhÎ…@¿†ÆÏ-§ñ6C¡»¯KC‘V—§q:±:H§+ò‹c‡áÔ̶oål²näÖí1" þC4D7Ó‹ØeÛ½¥E¾•Ðê}@w)‰çžI–aXE•ªcTüòœÅ%"‡aY$ÑíEG&ïàÓRK÷¹–hM=é¸X•‚§J? üÆ„eŸëcuT¹Äôâ’õEŠ±Ë 2Í)¡8ͪ¸ ¦+óð<ÔØØ>¶ûû? ÇUŸ}÷‰ÌÏEUŸ>öôÑËiˆã‹(dq&eP{B1ñÌ8#”xØ®'iüû¼Æé-ˆœ,ÃTU^ÜŒ 9 6ÿ$ìõûiâLÍ?¦fÀ]¸ „œ¤½h7#Ð/KxÖ «C½Ó•¢Ó°•ÌJ€~#Î;ºïuUlÔßÍ|âwº#…+ÆEÔx-}qÇ#@3a¤’©q¸ ™¦`«² FB…[!;í›V7‹§ ƒ'›s`P™ì,¯1‹œ‘ßÔ‘ŽîN.pÍì(0Ê ïéêðþ}OÄŸñ¼GC‰ÈÈ>iF'còtÐÔ)G/ùRwÇgη9BNåC!¥•?ßÀ 0»BJùTËÒ·Ûö€Zã™G]V£9*-F#‡ L{]UÙO6Ãåyâ€3~ÿ}¶'ñ¡ Bò$ ¿FjûLƒ «}ý矋]ùŸy¨G/ˆÌàËùw‡›RøýV“”ýx²gK}™a)ñ$öƒžÝžéQÜ´€eÙ(Ëš8pne‰[íö=ûb:DqØïˆ¸Êú4‹³‡ &™ Xç9|­„¹­ƒkµìzAÍ.8è»x81oÖ¡MmÂÖ§%¶ònL¤˜5‡Ící§fƒòmdË[yA)sÒr.Ú° kòßZNPÌK-^OsËËMWPKÕÔ¸öÓENz•á̲Caø¾ @o`k‹4gŠ0·d{­˜¨DV¼ší×ëë"¬™ÓW¹° ¦*áË G‡Æ’–Hþnǧ·þhH.½ÀÌ0uù1¥L8ÿø «€ÔÍìòr¼Úx’/ûLM«ÕAQ˜l©È¶.ÌÖi ˉø&¹;Yc#Ò‹’?¦e›%]£Œ¡% XËö4¢ Wû0fŠB¾?Œ-A:„aJxUTM¦«Ù†GᗙžÏ>«z¬ðtÅîíºó¤ŽBògóQÜ\I–ÝGF3G2¼dI¶ ßrŠYF'²Y¾¡ûÀ+7£â•ãã{f5pž¬õŽoÌå!c à`0Rðc…áS‹ãu<0*ò‚Ú£7DÂ68Íñ£/gÃ$,- µ|`Tï˜ôˆ¶5ÿ¸æ×C£ù%ŽXÃ,&¥Kθ½¥²¢ßt,¸‘šw/jò¢æ^¬É‹5÷b]^¬êX¼S`±žzFÌ€\}±“ «Œ€Õmr¢WãË!¢˜4a|ÄùSì D6g‹Ž ›~Kšc[@¢Þ;)eÅ,чNw$(ÀgøEWìm0`_A†ßT›&ڃ̛µ©7ëSoˆ„p)˜g³•ªÅ‘D«ðÓõ_ü Ôƒ!pŠ˜ñ£Y²®ÙM™h½‹GÆriæ¶j4ߟ4^‡*÷ n7ëàbï_Qá,K~”äSÒþ§j5nqKjb½¸í Â3æ«t Jì¢ý±TsI¢– ÄvËÐ=ºa­—nÑ'âTŠÃw\ޓյ]xͳ.Gôìþs’݃aùèµêQ©!oʸ¢FLÖ-ÓÆêI'§D"w+Ïp´ìz@‰­Í7»GQ´^ÈWTŠ0ÎAs稱}bþ §·Gû{ï*渹{ôæøˆÞÑÓ[zrÔnÐØ"g­C.Š1d¼ñÆ„Oi¿ÌV6VÚTœà£JÊŸûÎC„ßÓùÌ L†=ZÅŠà×åòÜU°‘­n±V‡P)ÁÊF¸Ì ×¥z9‚-îŽ\ýæÞŒ!Cë`bu±‚¢œál`G¶bÓ¯¢5·NYá&í‹#¯¸”g˜Š9˜•é€\aŠW™ƒÉ‰C. y ⎠Ûl ­ö´{†ØOÌ¢Y´êTÄÄÆïÈý^l»bÃ<[¬ÔN!¤£øž7fˆ]RgÉ3ç$?=IÖ¥~ucÚ?;™é:_d¤~³I:¬·ÅäX)ÝV º„I^ƒí“>ÍæCthfJY[Q”,‡Ê\§³>¬ÏúðÀÈ%üç7º/;¾ˆŒtoňÑýÌlÞÌkå ïÀ@,ÀMÛðò>Z"ÇuïàýƒÇÜp¨j+"<} ´B€p}eŽ× '8s»~’Â"ëµ Ú`”<pÚêÊžö@-'ࢪƔ®¤„ª»^¼Œj@ÁN€æGX÷9'©K"ÚM9ÇŠD:¶hãQ«ËÔ`:l·—cÏWÐ0¸K÷–ðýtl¦CFÆ‰è ’>í ÉØ? Ëâs÷^’²U“¡àLwx¸SÑßœJYÍê«D Öò½½JÂE~Í©â¿7`3““1“à–cjè¦AèçgÞtÊ¥‹Q)šï"va±\"5¨ïbÝ$t‚‡‰Æ}vsp¿ì÷ÒºèÙ¯£h”Ù@–‚ƒÁlØä ›l%Ì!k|4J¶«zÍ*/ú÷&ga7ÌÐøH1âv–JÃjUiL «U9Ô›ÂLó¡ ÀÍ]¶1„Lí¶¹†ìË×9›¹Iv­¸9¶§dAâpƒiâ¤_ÜP/JðåaÆŠÖ—©dƨ^RœD0>ªqhä2r»twɬ³Üž™^ÝM<£¡ÛB‘¢T8ðŒdr“tÏ|âMaq*6V„Øõe²s<·ùê8èöX­ñoòÃtΆÃ+r¸pÎ~îó8µLR'3RVW¬’‡:éO¥T¦>x rfRpµ ¤ËÛ—Û7™ÅGZð݃J1S}]\°ó̱šÅz‘‡Z´)¶J9¢ÀG¥lHVrÏÏ&š?08å`«mfÈ:ür9 s±)¾:yóSóu8™0üágoàé/$Ü À578;ÑÃmb¬Å nrKö)wbe)€¦ÐÓ+×9gønÔæk {z´ N·]¶[9hÛëï&jëP¢Ñ0Ä(Óè‰bü†¹$…˜Ç4ãˆdËÜì¡âŒß8a<;TÔ¬IÐg¨V1Ö©€õ§…‚ÉkþáSn$ÍI_Æùuc‰83¥¼$œj¤£7=ã7/#ÞñßbçÀúÚ:J«µ„~ašÕE樳IÓ?šR)oi¾wöT5wq»¤£ì“s˜Bcw³öSâøÍµÇµ•¿­RÛkjí2fÆ¢Îßsö‰³¾ŸÞ¨Ä~™åûYDvì2M†ˆo!’Ø—¦ºy¯Sñ³ÚdoPf<æ ÇÔ*ù€®Ž (õóíàÐxV5Çz"4”’Ð3ÍD¢‚„Ÿ‰Ñ“PŸN?}|ø®y°ï§ðQ‡B(‘Ë–› ŠNGÐ&^±88;+ª.ô;`'¯?Úkþ´}´»ýÃ^ƒöÞp[·jÍQbFÆ-³m[òVO¬½lº´ŒåͼÅü£¡°ÀVoÎ[Ç?þ((ƒÁÃ9Èó]‹åJqÐ/VÖËÖ3€Ûɶ~š9/Éþ7›¢´Î?þRÕü%‘¸L °ÄR‰G^2ÄMgwËæÿޝ¿fê¯[äÿª=z¼þù¿V×­­>z\û·ÕZíÁ£µoù¿þUù¿xÏëøG„çªâ#ò-×·^ßxE ¼ædð‘é¤Ïàøˆ+ÉaÂ|l¨(é—MÛ$ü¥Ä;£2œÃf­üf0úP’ü«ã‘ ŸuÖÑx_"(ÔlW¬F%ºpIÚÓŸy%mH4-i#´9Úç¬sY¡¿R'qgv`|}Öñ9¶9±¶mW¸i ñ…F5ăm Bd¬h_ô:¿üÊù¸4Ó¶dãbûlš>‚ÄA#‹xa÷yTô7¤ï¾+ÑY„K¥Œ¡) íù`Óf”Â^E•Èßmק׬\´ð/ZšýLwÓ;ÅÇÈ}ÕE÷C©X`—$Y¶¼ËeD~GÔ˜(RŒøùÒƒ5ï^aP}ÚpÉ>á6Zbû[‰‚ª€½DŒñ$Ãrf[žºÙº”äâVÁ¾ ö’‹NÕâ­å'ý›6´úéÇ«lIý+â9½Ü˜--1 Ó’`GÍwK`ïÂëAæya-•¨›% æ¿”­ðŒCMk-±ˆ"*«¢’ymj¡h=òTߊP…%»,ÔiÜÃÉpM¾‡Æ(ls½ÈZT +«`Tbľ‚Úí¦-ô¹”9|ØaøMz ÞÌé·Ð¼>GG3û ¿IŸÁ›9}Ò›œ>hžæ7b·-U/%ÿ„øÍ¥¬ \Gæ™í¼µ©-¨õÝBŽá½Àò§Çþñu1Üúæ¤;h{ÙQìì¿ÝÝ?þ;"33_ræHBÝDi5Š.€.‘÷ÝIŸ™šÑáµ\Ùˆ îó8êkÆ÷z'iuîÜXWÒÇ,o‰äZPCGPoÒ N-¢hsèàBK”Š]Dxõ1z¿ôàsGb‚3±VÇísÝ~¹2øê‰°/.Œ$"”¿¬üiØy‹æÉ”Q:i·“”(º½ËjXÃÆ‹VêS^Ùä_("3gZq‚ôþÀ¦SA,"6 O™ã°ÈÚKöÙOœ÷=}8Ð,m™^w<ö¶›Üí|Ãkpjâ s±ŸIøøòšHž>!á É’dl 8–9ä?,¡—DR¶¤Äý'¯……âÛË»ëIJº¸C‰,Fâíì4a˜dC5+ýA½ò²¾<²xf\vrØùR‹cßU[JÑs0Ð)ú´(1È2ÆÜë-aï9Š[ö ãìÝy߇%µ¡¤kS Átãõ—[¶¶÷½“|Þ¹-'ë|>n‡+X.†›3” Þæ°&ŒMÁˆ8±C 7eJÍÚ²W:ÉÇzU¬8Ól õ(ÀÍ ˆ¸™ò Ÿ¥ß˜ ÈtvJw­ûÕ§>p˜í0„38ëlJÖ U¢ã9hæÑ?Y-/˜pÇYðð˜Ýœ|m{sõ›oF4Î7¤N–Ö<wU9kÈœ^æß…¹`­¦; ¯<]…XÍ`±<‘r>yYÀq ÔygØf8ag¾öŠiý|]iךÃ,[A˜Û›°ï\ldíÛ &B«#΄À•uG*Zb÷‰Íp0u  fþý÷ sklß˪L¼¦'h¯mˆaBY¿‹®ÔÒ“t†@— ›» *Âñ “õ Rîtƒx"ƢТ[‚ÀrØÞÚDïÅëµL±;Ë1éïÅÇ‘_¬€;%^Êåv³wÖkA0º»CtÍ~Ùƒ…(€fåP*ü®^ž]˜ÁU’É™Gêâ^§Ò(¢ž±!Óbž“G$]š)æn™Z—î%Ÿtúª$¬—QºÎ®;aMü.Å=#DlðjÚ/µV>¨Y=«Omð¨VeHU§2Ö ISaIª‡Ñ9g;0E]Æ:Rºº»Ñz²«Ð—ß¹ž+þ>-z‹Çœ%¥¥°;dÕÆjâªv„ÖµÙyþSéXõKVk” Ô'æ‡7/^ïþ‡T=Ìɽ$ƒw†-3šr‘Eÿé‚ÞÏy`)3‚UmM›¿º€œ F¶b9#a„Ø^&6k cm¹£<¬V£f†>k–ÞùŸhîð‚d‰Ç]±ôO˜ò,hØY‡ÍþI«=¿-ÉfûGNÙTÞó¥0ûpåÎà7ë-Çnª°s´¿75Žþ¢…õ™»œh²¡vYŠÙ]þO±?»Í½ÁyNsÙÞJš˜Åc¸JÅ.y*zròN-v”#4¥¢ î2‚£Q )Íò<¶¤•³œ´x7ë³úŸ¢üë™°þÿÑ ý­¶þàëÿk׬>^{üo«µõÕµÚ7ýÿ¿âÏwLBÔ`°ì6~tZdÝ  ¦ÎYÇ ½7_|Q ›PÑ*ÊG§çšF«Ô>[6ãñ°¾²‚À÷I‡0–ÓÁdÔN8‰Çr?¯”}š¨å:±b]6å·± ügMƒq ÕŒ}ç’s”ÊÚ¿æÝ‰R· 9_ÁÿÍÄᛉÃoèYr ÔFO$…ï&ýð—ÜÄRßG¢µA‰4¡Ú莻ÕÉ“E‘(F}FþMBW!ÔÔË55Q½¡jY£ƒáÚ†qñè­I±xÜÔ$¦º4?\s¿ÖÔú8t‘GÓlANåèkk¥fXCž“áþ¶¦¯¡L¥]ãÐ÷sÖá÷Q§ýï ®’Q‰~ÙèrÜÀÚmX‹X •‘4¢7ÚkVÔ`Å…ôþ Zfªè¾V9ï’ŸwY ôż‰¿«!WóèjÍÅc³¶­bÔɶ§ø)\¢˜š ù7jUêlP•£üTöÎîŸ8pIÌã'»=aÊCõgݺµKâçMp©’K-û MßMJ~ãf‡v {ÑÎdXJ+}NÄÇÏeëˆÆÒS6U=g‘W­)»ÚM$M` ËŠJBJ—Éå@²:E£ðÜH ÃH»XŒ„8Ãë@2W2Çê“!Gw·±&€òËßýð££êçp­ã¥¦r¶XÝÜÝíÔåy¹Û¯|4µåu³¶ºº¾R[]Y{`VkõõZ}­f:­Ëi|š»<ËÑÍ7Ç'¯é„¹—£Sä±mÊùŽŠ¾>¤•7ã²±x„…E8uO‰ 4¨ï¾Ã“Å[ô™¸)6µöŽO¶éŠÑ¼…<ê¨ â¨`–ÌÑαN×’4<á¿ß0á‚®,ŽÒ‘…ÅÓVvE3Ʀ·zç¶×G™º‡$hi§lž·.»DìÒ žÐKôµÊGþk‘1ó©˜=@Ìè ˆ™/£e–kjÆ3· e,%]¶Œù£+ÿ+;ÖùˤÎS:_@èÌÝ㼘åÚcɵÂ>º@õ޹ z*·?vS:b.­_¨ß ˆB¦ ‹ÇK$ÎzËiUâq¡mHÁq|=”VdÁ8áǼ‚¹Ë¦ä¯––±òvkɘ¢•óÖ9g¿bÉØGÍ…$ÒSEø~6-MþµdØ_Ösá»bÙü ]úâ%éòt@À­*bf¬+Ïš3¾8-^*4=”´@ YZëáßòû¤·\>6}ŒS9cEš ¤g/ÀÞñœ °b’òBiitÚíŸ ªOG§Íöå°ì>ͽð‚rÁß.ÎGµFøÎrWNßž!áñšá•Ïè)ÒN†™û~ÿ€Ö Z[Pšiž­¼y°zàÜâ™ {oÿþf{ϬBvv€}I>ǹlAš-ûò¤ñï¦ÆJ¡FPŒÆsαGS5öPc-¯\§‹g¯sqàM‰Ì® Oé@(qÚâòôÀ8:âÔ{©#¹mÕýÆÏ'æ!w¹[+T£4«{ÊÖ8m¢ â7fÜ!ž·hŒçº ´ô‹ÀÁ¹2Ë"ß]ºßè¹,ž¡·A“ýÆÜ ú!LÝ‘¾©ag6]°2k˜åÈÒñ8¿¤{”ÿj Òÿ’î¥Fû[1_i‚a¾dRã«-Cúà:ƒ`°åü½\ú¢VLg6‰vü3ZʼnàJþåÍT¾0rµ?xs‚se”ɦˆ5Òq0TÅ—~½aƉ27Œ=|Á.ÚžË%ÛaÜ@¼blj9]< gŽ‘»F8A¡-Ó˜PC†!ÃÊf  ý½jcڲ尉֧šÀe;Ý‚k"ä><† Þ:ù3!w÷çÆ]o$È-D·$¹" –i è!($y¸Ì#bZ×—ƒ~§nîÑõ}Öý*¬pj9é,ÿÿ¯ù‰.·Á$U] ÓÎ=Œ“‡$CN MãP?9¨j¦Åù ¿ø£ÐôA›ÉqæW–u~Á<þÌcݬ>¨×þVðØÏãE÷Ý…D¢²•'˽Òñ¹ÍŒ®™ŠÅÈ´F„¢[à†³}<æ>ÖVVÿ¶²öȬ®×kµúƒÕœ>Zæ”øŽ \¦Î™ëJìåm†V~-qç9üÙíî¤ÛAèkâFÀ /·.Í}sL ÿrCÂuÜËUÏʹìÐÅC¯Õiôë3Û<½ÉhQvMn¶®5ž$¹f;Ú¤S¯j‡¨ºHÐÐIZšÚNñÇd4Žd³„_à™ºI;‘l˜ìóÎ<<3ŠNÉÌýÀZKB±,2/4É2Í—L»×M˜[“@Ôv½¬XÙÛh·?T»œKUÊÔó®f&;›Œ³}Lw|gzqÚÅ­­¬¯šÕÇõ‡ê×gÀ­Äx0èYÑ[&2 –8ÈVïºì« ÂÃÕÕG««Â7ÀÔ¬ÍÉL[ŒK%ô¼o"Ižªý÷{ˆÚìÒC $œ®%˹øÁ{_Fè%×iÂŒ3¾os8¾X,’²ädp`YâVÿïüëÖx|Ñ%Þ}»ßA)²˜ s8$ÕýÄÆœœÎkzYð²®®¬>¢ÿLíAýÁ:ýç—u›CnYK?e?îÓƒ½oda—ýú«4Þ§7ééèòo Œ?2Œë¡L§µnõñå£úƒ‡õµÏìÀS[È ÁŸ$\Û@3MðÍL ì±¶ÜÑ^¢ä¨¥Á® ²0ýIÛtô Ç¢•×Ý>Rv?M†NœËÑÎôÖ²¨=®×Vg«•;–Ä4‘^¼<„Ï[¶ÑZÜ(aß‡Ñ Ø§)µAÇ(92ñ²ùINAªþ$W¼²\EvÙ\˜«„¯‘†™gFí´Ûùå×Íb,®oßJ\_Üø&¬ÿ&¬ÿ&¬ÿÓÂú]K÷i‘Ί" óLæOFH«ÍÁmˆêž÷E$‘ÐuBPi½8ü·FôIn¦RÙ"oÎþÇR] µÏ$El±Z`)aOh“BÎÈÊáI:&D{¶|ñ4~G7qünÒ'ìDïŠþz+z2\Ý(’OÃQ™×áM>4²]öUdãoÞeMë(nð£Öß9V4,Z_Ì¡t1¸J,âSe0äËüNIÒŽ¦xfç[zYõU^¦ê/ŽÑlRp 5 r_oqô夙Ö5¢èuítÞ7šÇ?ýÈ» á«"4°åï†Y‹Š!&ƒ£5ä  ¿fH…fuC…¨gˆ‹xÅ fg +åÙÞTa2”ÒoXÀµ¿ü#EöAÞé{ŸÝÈËΦØÍɵ¶N;N¤-‹pA» @V|û²qRúT¹./,ÜÿT}zIÏåSå#}Ä7—>–UFµ0‹Ùåî!Ùý‚Ò³_0[Œãc,ëRÕ< $†ÉóÉå%õÓ]j¤WæÅ­ a cfI\(?WŸb·«O'púù6‘Äô.‰R@|1 ë "?å– Gu—|°%ß±ÐwŒU,.ii¼g †ày ¥w­kvK’žù´îgݤ§× ÁúpsþtÌD»ËÇÈ꯺cÍvÊŒ NdØÐ¡%j64èÇ1;h:H=NUù”åìûÙìOz½òæï÷3o*æ6oø`Ò.ùýå-eK–Yb£º©NÉ÷²£¤fœ,ߌ°0¦Ö±p¥ gZ¾¥ÍÀnIS¦}iæwkƒ4«m“ë–+—7>ÿ™¢þÙøúˆmn€K½ä”z¬ƒ¿’¦ù=Øš£œÊfvœ#ôk™ß,£Í¯Ñî{#ÑÒÁh–8ïË›Dæˆäk7JŒ(Òäi³™'íÍÛkë=zš{=-¿í0o%7R$+3Ò~‘sÛd]Ǭ&E­ñõZÓ™_ûçZ%RÏïmž@]ÛT™ø_§;í’n̨ë@§¤éÍ›ÄéS+;ªô‘#LŸ±T¹’ô9â=øQì‰88ˆÕKÌX+qrðØ*šCý³VwD®ã ΂è xw²©3q6/Û¶¥´È·ø5±ì£K„†ÝKºˆ|AÅîU “Êeâs®9ºˆ5(QâØì2§É£˜HÒpbÂy$*k‚ü‘‡¯dÇ­T³Š´‚Æó½Pš³di É‰WÑMÒz­ÔʦÁ^Ø>,…²äœÝb¤ÔŽFCÆgãôži€2X+» e¹))! V)eÃ’Í~Ú¥‰@€¦Pc½ Ë––ëq$!zú׆†Gôw›«òÀŽrØ«¼Xë³L—»wÙ,;FPW¼l=Ù–êúÑ0î£aI×~>iAO”%—HC>K­Í©ßâäïKK‡ÿ´&wA,ïéR_hoŠØp•ý_EÕ$lÍÅ[–Ò‹ÉXÅ Õ·€lö‚ÍçGMnÎTèÞ@”r1ú³¹)!ÄÔ7³¤yÅf˜ŽH·Öl“þ߈_ò oZ£ŽÙ‹V‚ÅÆ¦ ,ŽD ˆ±ÿªî­UݪÑÄnqFtþ™]†BøÕ òŽŽsh™Li^ÆÉ|%b.~Iüd²6·¶'(ÜÚ €˜õйyIf±!ñ‚Ì‚šÂ§Í<ê·V1Ü¿[·É¥O›vMÍ3áÆë^|À©Î§WMæš]´[Ú¡˜Â--QþE+æ™ `i•j°ƒ*%—ˆ ]ò¥ÈA€|ÄÍ<Ý @ôv›³úu7‡ÓóþY%S¸µ•Ò_Þž™/sý× =gAÑØ§`k~ŸF¸Ÿ "ˆÃ·ëÍx™72G–æ~fï+æ÷f›¾–v§pç$ÌlQŽ­OáKl}d(ŽAi1EüØ”Öèü¸:ËEM-ŒŒ§“ê 2ld…·™%™cWTøRâ[Ý:°ôwÕ½dä‚ü¢£5Íi ¨ƒññï/ oÓ¶•X R9,Ü-ïwÐŽ­?µ¹vlÙ ¾µñ`°v¬„Ãï̘|…ûãÏÞ 6KÚ¬Áårê¸ v³Ó–)Íû›íCÒUýlcÇB'@ ʶ\¬‘ÔHVü‚3Î2Ï?šÐ´$êgGí!À› [Ú_žÍçÀpB´j¾ÅU¸‚ÀÎØä Q¡Žì¿ ¶*Kו¥ßèr`7f¦á%à zsÕ¿§Ýæäؾ˜>çä}’¶OW@#³Ç¶ø6SHfûItiŽ­EyVúd‰kxËH6WËö:ü¤âR¶H °y/­d k“c¼*|fo&º°VF^rªVÂ#£,¤5í¾©î|3î> ÔÂÌt–¯0[K¾? ¾‹vR à­,Vïz9òâÞ•)8ÝŸ=RúmsZÛáÂßeÁß^ CZèþ p^ðøß“/Œ•¡ÜûM7@ —ß ‹Û¼Þ^¯³TPý“B7o˜®÷ov¯ô÷õîÝüfæncv¯ey*n“®uãt‚¼,\Êò½x!%<'Ì>,mc‘ŸÅ5FóÓ¡Š|ß‹µDÅ |E¨¡Öá¾.áX?‚ `h7ãW±e«L¶-³YSªÈà7Ì[ŽfH=»X½c'B˜šâ@ÈÝï/ÿ°lŽÙk’u¯¸õl™s•ϩȭ"7àUÂE–Ì9§?äPðÔ¸ãÀG.¶¶ÕëRÛ‚±P¤‡ÐîBö‰QâœÆßñ¡Ò‚>‰ÒzÓh/ø5Tè=À`ƒ‡Ìv ³š,Múí^ò¬,m}úú㘠>pg; õ`F" ”F2k!b੪<”¸æõ͵ÂÙXh÷}Fý*èKn+gÎ_iÅ¢Ò wüÙsêæîáE7qzÉãfy ƒíãò¼žÚè;,!‡37ÈiÁŽL–ca†Â6Ÿë[à‰|ÍûÒ-Ðú²L2ØY;0Kgœ35Û[ÙmÕgUí©ì\mx'øo¥"Õçð(ÏÆZwñÑdÃ`Œ„¿óÅ{'ßtfæ,í  ŸÑ·Õ,ØYŒá nPݸô1TÍ™Ú\¸=çnõg¹HŽ-Þs×€é)–xz”ŽEùmJž¬L`†]¯×v{0êè%±VK)«b¬=^ù‹HüëHäýlÚþ¯Óò€8Œ”œu9òwàI2Ô«—Ï–ÏrÄ %kš%ûÝ-§Ä~L žky9 œ—rÇ"hé¯ Æ]9£ùÆâä³8ÿÅ<ˆ²`ûÅwŸŸàûèǯà„_Î0E Òì[·Ë~òñ+8‡ízöhêÔØQ†_á¾o Ëx}¦$o1o†_´,„fÏÊÜ! ò@fOfŒ ²ú²1ØE,Í]…¹“þT.ç`%ŽI0«a;·¦Â-/Èýã"Ÿsr L5µÏ³e[9LÑÚ?W u"JÄš=EÆ¢+3IÃø,(ÏFê# ‹–8³´l,7Å:Ú‰èÝ+šÂím°>9Ilˆ÷Ü Nqˆ1ót¢ZŒaB«ñá¾E=! cÕ‡K~š¡ØðÊT±:òT(/Êøb"¦.j âþülýdJéçrµZ}–|W]¡ÿß›Ûüá’Qåmiÿ~BýàŠ h²Ò»r<¼ì¨oÕût¿ôçipnEÞºZÌŽGV ¡W&GÊ kÖÚ#½e…É¥ZÐôÕègIß<ÇÖGª hÞÊB•ãiÌ´¿û4Db ŸºPxàÞðï²P*t“»™8- !‚w"ƃäîïÕ’;œ2À±ŸéÏôV™G}]BfróC™I,m“ˆÕk{1ZÉÿ6¼l¨+¯1µdšÄØøÙIúµ>„þp]GñV­zú]¶¥+ìÕÏþ-R\¡ík[Yøˆ‚²Ç?sG•ÛQ81F„2d·X i:u,¾W»„–% î4Æw¼$‡ëa¢-xÇN±Œ!‡îJ( w8NƒÍÔ%àæÂõû9»~26?´ÈŸgÁ÷íL¥çøõê#æë¿Î`oÑ÷X´àýs ÞÓ€Ìð=õ¼Ã•ðQºî‹àû]YÒ}àö­_öÙ;ÄþnÂÝžÅþ.¯çAø§þî¶þ³‡ðktráÁ;á²~Bø§i÷û"¢Íëy8âç#0Œ¯X;Àiõ˜øÄkȦó0Õ§/âokñ3ÖŸA„èNPÊŠ(`ФËçý2«ÉK’øÓ‡Y,/Û¨q*\$¥áQL—j¹À2'ð8#èGü%“9¤ôžÐr½DÂ|7œ,»²ZÉ´ H ñŒmn­Yµ™,O±1òúV¿ìjJi7ƒk/jŽ÷:äx?mn^bQÁÄ‚~xfR“5äæCX¯5:·f#0ü »½ÿÇ­A,C{g¯“˜_1ÆL‹K„ š¿Îœ…0Gx=Ó£ó/‚±˜¸ˆM›«ÁñPl¥œ^ÿ7 ƒÉþôº,¦0‡Éšï•2ÿŽÿm¾œ/€·ßì5ko%0¿¿9Ú2¢Y©·Åõf.’ýÍñÔ¹D¥'\CŸä0-‘½P¿üÞTmqæú ¯>¹€"«»ôô›9ü¦ýe´ÔSŠ^_'”ó«“ôž¸é6Šv=Ë®†HŒ“‡««úiU„ØÞC-¶Œ7Ò›Vó]“þtµau¡ÌüKS|¾œÆyÓ®ˆlnæãW›ŸòW¾¡X…â?LkBe7^g¸u» ^‰×»è3t ÂESÂ4¯M™íô0ÝhBEË EM¶Ý²œÆ&;®`!òú©ÓÑõ¸*ÛºÓ‹ÕÈÌ'Zë›t?Ó3 ¿Îàès6ê“ÙL5ßU]_ŒnX¿\xr£ˆÀ)hžr ík€SØìLhЇu{pÊÛ´ihrKaU…–âéäƒÒ›”KŸåRŠ—àö–ÑùXø.›ŸþKL¢Ùy“ÈÅIÏ i§Mÿ3ÄèfH(YnoŠ@e:&µü˜³Ú"”©HÿlS=E,ήêîÆÕ£›UÖUG1ÞæZßפʜn\,ßÛôÃKñç:rq‚§–ãKLÌ3ž¶…/vµe€gXȘS³ò[-©½·lÆ=LÞ3õÃJ0gŠcù-Ÿh͘l³ͽæÆöµZ ãG†Ú=®5­Q`–m:§N à°Þc1øNÈ…y^È¡Yú…ý¦5Ú L×ïlÚã:³¨­`—óΙ5È¥Ùã2–’Õõ†2I({­ýüMføØõe»¥™½‹öA£õ?V$˜_ŠæØàèž_+P„‰{ò$µ!Š´ÜH"²pð¢n_8ÿ‘i_LÚÒ囹ýÑ)Æ?´5¥~ÿày£¼½·w°ÓÜyõfÿÇ&21™‚ªÝZŒ`íhop=bo,2®Œå-kžZ§&EXXã% !¸ZkvX¬Óü $¡ÿ}îìùEƒœÝ_µælìÛ$„͉xð>—´±ç’‚œHôºýI‡Óí™’M¡@¬¢ó÷Ò‹îæ*]ö›:œ Ó}2Õ•A­Oß+ˆ¼(}bü.D¿TàrÁõR°«m`ÊOBšùðMÜoÁ,ØÇÒöÎNãøx–‘— UÈŸÈÂ…R'P2­~v©]P3Seo….dF* £3"ö;çS<ÌYw—i„³x@å³Ï·ôXB3LÎ/  ÕôU³7„¯)ü,Ò‹£FCÖO7,Šxáüô^lŠð9ˆ_aV9í[à„ت3ç¯LwI^2òsÊ™rµÝjZ›Ÿ©O:&ª€È‚âtšyÕ¥F‘¯3¹Ž³ )»*_ú«…‰ìÌjR¥ì%z/i‹å/h’cI5Y ¡ÕÊ››|¤¿ éj-s툫]Þ¶Ôncw`éV»+žj·à{‘vEµÍÅ™Kð)ËCfLìç;žŸû”á©îx†ŽÌÔvl( W+ÒDá3_X+öO›÷z¢³¼ Çj©›`X‘DnjÈoôýÓìeKÞÔ½»tûœeG9[øóÂBaŽÂî÷Œ%ÈíÆý3ƒ©vîh3К&æC+<„[é;!è ®¬$ºSE%tûr$iocËdÂø·ÿ¯ãïâÔ?¬¯¯Gaü9IÃ¥xͱ“Œ¤mb_^óYgoþN”Þ¨MßÕ1X|àã^gÃõkua=9{ŠÆå-üÂ$€:¯HG}ÁO/ ŒŽ€ãñÄ¿¥ø–Zà[jo©¾¥øß-µÀ¬¤Ètû”È’:øñã(wðè´XÂ`t…˜…¤ÝkÔewJ>6k½¥ 8^lD2BHš´7æxÐô%Ó(©:¾#•‘üº¼n¶ÁThÚè¥%K”áÆb-eMNì‘I°& &5Z¡À’j}tª¦Þ¥ÌLF§Dö©¢µ× Í–«H$òSªH’–%ÎðÎVKÙŒÐ×.½;ì‹6]¦²KäÎ…ôY+Q9ëo6 β\¼JÞµÁÒ(ËèJ%Õôh;6ú©(¦J¶4'FwkÀ/>Ûå Öm:=ö •­¨7ØÆ(›z)eÀ¢ÌQÀ9­mÕœ%ŒØ9w_.T¹ùΓqˆÍ­øãTýö8ù¢¸:íx¸ª¿ïy‚j}P˜y`V¼\ÊŒº¬ËdS)I^)/ãÎVå…ãuCˆ? ®ÉÈ­]´FœÂ»ã’®x(»õ9á–G§šd ʯÎß+&wåÕ[ÐqÖõL—¬%j§.dˆ´·Cuágé+\õ“u+šÜ¤G ÷ÃÑPêQ3Å Éj{: šùØê`•&·¡;ÉÝsÌ”¸Œ]›¬ÞÇ5!»Ì!ß-$ŸÑUÞšk‚¤jf¶.ZW”Ò‹à<,3ÜpŸÓöá°ÀŠ6€Ú°Gâ^_vÃXX¤ÂãÁ‡’b²òe¯yЬÕM|mµ±VðÌC[Ìib/·[£ó‹;¶²à 3Õ:Pf$áG€//n›+h™kȽØÝkè·æ™_«S"1’Ñ/?¼yñÒô_rô[”æuœQʶK|ó¨X.ƒÕS¼¼&Žz0‘‰ ²• Øe35²œ6IK2œŠ±ã1USÓz4”2d~èwî-3z”þ•Æ»ø~uqÃùº37%%$0&±Š|7D³âþ-uÇQÞê_«P‰Ýƒ·÷wÝFÞºÒÏî3v•ñ“[P~oý@“oØ“a•V;¯÷'&ömûuãØÔr>¼n2ª_›þøæ¸q$5L<Ü>ÚÞ?8z½½·÷Îü Ãúµ™ØæübœŠ‡'„»´;á4‘¢ äïbV`u°fÇÄeÄfCô깩Qhºàž MË;4ê]ZCçàVPTÓéb©x/ãªmñSí¯´ö*Y%Ô¨ï™ñŸ³t Ú C%‹̳¼-¨›U {*ì"é ‘FÞΖ“ñäÒDm†Åì¦M!¢s›®V"„–Ö‚^Ðe) ÿÚ4]3¤úKà‹]Ã!Ïóäˆ÷6 ®Çᡆ‡ÚênHhÒ†«üwíûïí9“°¶¨LŽfj¾™Mô1ÝHÏÐ-Òx@]²ôKé(i v›jQ,ÌD 좺 ÐfÙ§ÎgӡвbºÓ/¶÷Žö껓£7 «…;fGP}ˆŒ¼à¤žaðÕü¼«1§Íi3’d:ˆ×/aÇ…w/!1ÜUÎ*uuqÕw™xpè°·)h¯“íXòp¨*VOg•}•ðU*Ãäü= CÃæ€ó—þiõVÑý®CwÞ;˜GH¹}a«KN,ÜMñ”ˆ ¤ÓFŸ/8:6è>Í0ð¨b Ûâ¨æ`—¥Ä.¿Œƒà‹,ŸÇÑKÓ’q¢åu…-=lK)1Ì¥øxÙÅ@ nD´QaÛi2¾‚æ´Ûÿ:˲Yö€Eè°bO\>IžC»ëVg Y¼³¨|ìÍ ì–Vü¥e´´Qtt©xR`Fr“z£÷7¬™;cÉ}ߘªÆ®V‹Y»°€ÔËl¢£Å1rGꆅ–áˆÊêrÿ¨EI‹î$–cðV«$Si;; '$>ÔÆp¦ÝÓ^xÒº-œÙm^î•è [á~εmñ«âhÇ åp’ö4äò"êãƒ.;Ì-= v÷)¿¼ßøëÇ6*(/³cïeö8¾tûëG.ߠՃƷé!iÝaÊ$MÀàG‹ærO1à°'ŸÄy$ •^DîÜ8áêqx´»ò¢VzÞøáÍË& ð9²P»ÝaÂ➊|6çá8NÓ‚Ü(öï›vÚ’~§·€ø@½6<¿äDñ}íÙbB,}2(O¢7º®·ˆïnh„e9~O 1vø (*O%IDMÉJtš°t¯ê¯óh+rN}¼ È+¦ª~.!­J,:KZ¸·º—ÉÞ¬²»ê<;ÕSæ½CužQˆ‰ÄQi ôLe3Ðç` b–X ß+ ÔKV4pXahXĽIM@¨t-ƒO_JY’;ù4ì‰^=6¯å÷pö&ýÌToxsÿ ßàÊñal#¥²[O¹´ˆÂ³í üdQVµV6OèbË«»8ÃåÎÃwX}ªÂ™WÁ&b ò§¤Ä’b/$œSÊI3¯·wŽÑñ]I=Öa¶h'Ó:Þ¡h½§TŸXÙû¿ö€Quuy}u%µWÀS/·¿n«ôçуüïãGñ¿««µGk×ÿ­¶ú¸öp}}½V[ý·ÕZíÑjíßÌÿQ )“Yuÿþò‡ŽŒ‘=¯[yŠpPWÀî§œ¡ö£dpMÆíeÃ'é¡s©Ò_Í+ºsÌÞä”?ñ__+Ãñ )ŽoŸÛø “gR›Ûø6É ¹+ð'r…äÅ={ñ—§/þ’üųÏÎ\œæäަ1ïf߸ë·Ïeìf…Ä~œ»Jåa­ mÈ@¬nÕHI•xÐݽÉéÖbP¨Óå~ƒé„IƒórÊà•%5ŠùØ1s÷/`½™ Î64„f¿Óœ1í§\hXtµ Ó-¥“”è®g§uE—¸,ø|6½‘¬µî'Ol4èÑúþÓ°ó÷jEb²CÂ"® ¹Œ'ÎåL»‚,šDmDï{D4‰š"N|#§ì´§ß"F_ô¾Ÿ\áÂß`y¦ Ža¯]^Ígæ± R¡ӴHÖt¥Lw FÝsÆsáÙϘŸª×äö¨+‘J¡•Y]à¨lõºšÞ“GEÄÌüñ/M«‰gnÃJSå½á2Ùäõº(š¸M§»Û:O‰y»]Êi7E4\dâ 62 Rq áþ\ ¿év„ * •Ö<œÁl_/N¹¶úàoÄù-Oék¦| öáwíTÚc©K<Çýñi™CÞ€ù׎¨X ãP<#¥v¿b+‡Ö°uÚíu ‰"&Vq¼lÞ^\?SÑ+÷)I¬Dg¤?‹ O÷¡lêB¡â†SntM¹Ñ“ÆÑëÝâEí¸ßCÍY,Sì9Á4JQÄDö» gxؾ4{ƒ ÇÊÚ*:-Šy´×0eV°ÐÌ6“Y¤6µ@ªÒœPšµôÍÎHyýÆ,q°b‚CdßpXx«@™Ë¨÷I‚oÊÜ馭ñøºt|ò|w_øéƒrFהމ·7Z†Š;1nSóÔÂ(j€bÆù ¸ ×¾kÃð ¨J¹Ké…"ù®˜yìEð,êÚã^f0'»;/ßîîÿ ,8åyƒñŠ5ŽÊáp/Šè%"ÐhA+óÑ1'² +é,}~Åîø"Ä…˜³_rïÊiª,âå5ÌKEj¤;ô™Ä³ý4ÊäըH´8¬ãÚêêûþ1‡‚?ÎĈí\¸oŠ2©—Ýô4!ËÆ-µE‘›,ZY¿òä°²¥ý¥Kÿr8ÆDˆÄì6å}³…Kµ Yæ×¾úùA«ùéã¸:éwa•S,‹ü4š¯Ý—IÊæŽLfØ^ôš*å9Aƒý ‹²‰‘`˜L•\´†tѦ²ü1Ô²ˆ—S±ßŒ ®cTê|°ú÷GhÛs×µ—’ë1õÆáø©/þªvŸ ¹'YQ1½-ÙQFã·§4§æS³j,¤e†¾µ¾½UJÅ^RTY’ÉB¦D{—ð3Ëìôj9%…øÈ–m÷â¢Á¢dK^ä•$°É”› óÊq¸áì8QI%n²¥ú¡—㙬Œg°évè¥@}†ÿ9›$r¸…‚ ¢7qæ£Öåv³Ýþå§ÆÁ‹_$1µyS㓃C±L˜9`í|Sª¿27ž\uÎþ„:i&í‹Çë¾NR«^ŠÁ¥!_b"íÊ{4XÕJ\v/‰Î™&¡p vJ"â[¼ÊÕËrwJ~Š ³í~Ú»&O‚ð{†Ï•ªOÛÍÞY¯unîošÿ¹»³½°Ïý'ŸÚÉwÞYr嘨åeiÆUžÞÝÿUhÝ̇“Ý×_YЬãä¥`ƒ«¸ë?6McçÕ½ò\B;朑jyúLtÉôö–dEüUæ^Õ';Ç4á·éïD nº©ó;4ªýƒ““w2fÙ¹+ <GÉ3ƒØò}e®ôrÑJúnìYFÈPãPÉ)Ùp¬Ë¯Î%BX26ño™~—f!úBx¯ZÙx8§™º(öèPÓ'àö˜ä¸¹I_³´øþt10) ð•Î¥'3Qi÷R³Æ7Â{ˆÁ:'†6BdÈ<ÎãÁT3Ãv½òôÄÜȬ}ž[ÉöHæ,P{4we¢y¢y3J'î[Ñz`Çaû.²]¶Ú£å‡–/¼ö7³ÕaÍé¡¿h;Rpù*mŽW³÷¶¿Xo8€T5î×ètÄÀ(X\¥våáªÛ!Zf3Û9m™gµ†ÄŒ‰û /6lcz9Äl/w1ðiÖRèå¤î=94 P¯?¿d¶ÁÓQéòQ9uúe[B¹E³¸ ®K©*à]D¾]­õWhÊk+)õ)+áîÀ=ÝóºÌ¬_:[âò¨'ë6Ç*ª;ç¡oÐ¥™Çš)‹/>Ö™rGÀ90±ôÝ­"áⵞægC8Í’CÅøEÌqàUǽQëçÄ¢'ï‹uó¾O8÷ý2Pú¨œœî@\õiV=88™ÿ1é¶µâä{Î}®~žÓQp3oŠ•Ü~¹éq8¸L~«5–~ÃÆ¤ØœžC’¬˜}5kÒA~½÷Õ¶¥nî°bübVïìªwJûµtnN‰•ß};´'m×þTÊ‚ãñ±Rþ¡þ8¾¯¿®À|ýÿZmõáê¿ÕV=^_£§Gµ[­­­­®}ÓÿÿkôÿìA¸»—¤iïÚŒºì&Ý2Ük!J][~¼\[5¥ÁðZÂ…”ÚeSûûßÿí -¼Lggæ-(€'çí«­áàtði¹=¸|Z†É±µ0O2ZѧêÌ¹Íæ›£±uëe‡ÊûØ>OÙù» Y3û#À@MÔ¯+iäbý—­–¾’ÑÁÒ_³9“ƒ¥[YäOÿ‹M–þ²ÅÁÒ_58Xú2{™øW08XšmoÐÍLo+{.v»ýöòí­ ÌÒWɪ.Qýrì üÛ'‘ –/žÚ˜_¯¶j4‰ÙÛý¡ùªð öº§\RâŒDÞ7OÞ6Ž3u®Óh ÓÕÞìïRWqIŸ`´Wpq utÄ»½l¾*ÇÃãlFùý¼ØÙ?Ù‹»9k÷ǽ9³Ù=ØÉVÁlX×7cp‡'Toû¨Ñ<7-:ùi°gÿ™Ñ›@`Ðw’@}©d<àÄP3ÚÈýS³éØsà…³N“*™æeëº)F„µ2ÝìûxÖqÙR‚ê À{ü4Þîïüûüí‘ùƒöŸ7ö¶ßÉ#ØÉ;‘j‘ÕÄ5ËV–d±Ù’LÇ :†g‚…]‡}úaùu4)ÿ"‘%Mq…Ú Â.]yFÞ¯½(f‡ܧ†+ÆÁ6Pa±RE6ïl²É®ˆötd"kéL†%[G…z*îàñB®ÄŒ†ŽøH2tß"ÖÅJVµbV­­I,;õ·ÑòwBçÕ°ÛY]ºUÊÍðŠX‡ö¡‰¤\Ž{a5õA%دVÊC¥ OÅgÇ ,Ýälw‘«›.Sf¡b,ø·ðá ã™èÛý½ƒé ðLvâù–¡@ÏG\Ô± 3ù„HnYRl' ¾Ã”§×PtF¼ ¼P(û] VÈ‚àå§b¸LRž'lוâµÃ[°¢è¾Š:_4pHŽä‚‰4µÞA ë4é÷ía=5â—:ð’"š<;Ü&™>*nØ´î\k1|â#ƒúí³.[ì0̵km®Nvhžì¦ÁË.^»8ÄüÈéÁü‹ÎâÎÞÁ~cNÿ×—+4-H5n1Œh¿hûoˆ€ÜÝq`ɪΧÀ u©]«Ð_kÁ«¡ÅyP„º ߃RãéRcWJŠÁÃõ~i£P÷»L×ãƒ_­Kì—Í [ ò¢äè|RÍ=<1kñ£÷Ò5&틬£Vj³7 ˱۵rÅY1NÅÓMPvÍ—]Ë-‹=mñ5YòØýEóàG1P2ȣà ! Ó9hOʇ…Ü.¨KºßrÏ›¶èüûd!†Ú̯Ðés†Äs€uÜØ&ƤñÜAVäÑyKº @ 8÷uÄÕ€ì”T°¯ŠÃŽÒñäãÕ§ëߊ?dª®MW][(®ÖÖÖ<|ôøoo¶é«¯ï}Ðζ³ Ìrƒ@<87ËR¨¯—i^……ñe¸åÈùmÍw¼¶Á+KçE:^˜ÛçšôiÌøÆR²a _—3Ã,ȼ63Ð \ˆ/€…ϳÔÕ®ÖÔ±½úµxÁ˜¤ß–¤FEÓøùäðèàä@ ¢CжœáÉ iT oÃØSEŽfXnþÿй"\¡ä¦É¶¬ˆÃâM:Á‡=§*'•Èh7ÌÜjhÆJ¯ç‘ë~%l‰fóß÷n6•zgâÝé"׳&PÃ.mv*²UúL ª24V·%öÍÀ§}n| »(ºà™̰•ž†¥2†`LôÊW@R–‘¸beE~ž¿nœïz´K³h²eNT2N1)½~gÉ íÙdU°ez+c0¦qtôúøe ­?‘X!áõ¥«d§ó^¶Q‚â.CÁX9ÊCµó”µÛOƒnÇBe+MínKÕ‡#â-“TÃÓîöRÏL±?à ³×Iêm}3ä²xF`eÅJ”|%0ý_¦{µu›½ÒèòòrЪ@ oÆ û`±¢^Û~[¾vÿúð0‹9‡›¦ãðŒ(2Hä™ÉÝbQƒNÙî)¶:åé]Ê,‚Ø, &í‹:Ý-]ŽÃñ1™Â[÷Ø%5¼$PM“IgP ¼Gq'—“^K|ѹ޲VëuPSmõ;ˆ~èªJ —nÚîñh+ŒÇpMnëæ§Çóà‡ãçìŸðsc÷g76)ÒU_ß#k8Yß±‡˜ 8™U‚`¬ OeFMXDÂ:,Û-u—“e&Áõ[ƒ“ºð"µ¸•"xòy÷£¦F)bïÐ(¡«ƒ‹êTeÔl–ƒJE,e‘½xв³î†¯ÝÒT"h) ~­˜ôÅ€KÂ)_]hVNEˆŽÎH¬ØÌf0E¼FW²jx7[IÌVpŒ5á%rÅ$ÂveÝy°2„(‚ƒ–ªø°?–ÁHŒ‚j +„÷ _»ÇÛ2ë_’R?4ùK{¿‚­•ê>²ý^Í"iœ\lkfÉ­¹¹½„~‘C_Q@œ_Dt~!{f‹åˆÍÿ¯CL¸jŽwÔB˜QÜ·ûn/¸ÂÍ7XÅ7êï/Ü–zq rç”'&éeÓ8¹i8R⋤ ßbH,dó÷`LmÏíÑ¢¥{©’Pþ"³|ßcж䲛ÃÜ‹íëßìoö÷ÞÍWgà"kfoÐþà T´¿»Kñå}Ö·zÁí-—y¹2gÚO²>E±[W~eÖ˜—\5‹ÊEŠÅ;ZqÑœP[ð©\þV¦,ñÿ^ÿ—žo—GèŽe’¢0«ÞTi4«ª`eIëRîË/¾«3ª^Ú©øºé2dfCk™Mæ¼kSdô¡zÆ6Ÿ+{„­0ÏÃÕGZnz5Úî]e?ž ¯í5SoV§*·}²Y¶“²³;ÒiÐÔÏ/Q¸ß,¥þ{ØMưªhÿÛ¿ÐþëÁ£GÿeýqíñƒÚㇰÿZ][ýfÿõ¯Šÿò-TË·P-ßBµL…j™aK¥Ôø~M§£þòzûçÃí“W{ýïk¿nx‰ß 7JDï¶þE×ݤ×QÓûÈ& šªæ»ÝÆÞsªGÇ£©¥7B[TtôáïÎýµ{™|d—ü~ó’ µ›&m8Gü7+dL]5ŸÕŸOz4øÒjhðaÿ¾µ a8¬oÕbËúW}^àA1ðÙe…H%XAHŽ©[JðFœ’Á‹ M뉾êØ8þa7m†á&¾‹…ÎýŸ ™…kE"óË xàu•åÌZ_¾AkJ*E]S{§‹ÑV‹›EmÚj(3cN0)îÚâ²¼™‘#ðKx‰,qÍbÁ†Ùr쇺äšÜP÷ Ofæ.é ”ƒÒôšèÒK–rö§êÒ” rºÈKešJ°V:H§h´q>¢ Þ™ ¹pëñ1ƒî0l"ÿ$~¹4ÈýÓÉÙY·Í>Úa£ìò¬ ß £Ab]ëÔ–——ËLô–šq³æ³=O ðº*H|÷e˜&\Èî²A—I†¡v虚jò·Ès¢uΔ0™-Îrj½ÙØ•ÞÊ{ùß9Ñþ1Xo °æð«ÒT#ÙKþâ½´z/­› Z1?5ŽŽwöyk?Ú¶´®ùÞÚh[9mǸ3Ѹ™,L0?‘¯Ù¡)zß=Ù¡°;õËBívkìÖJœ˜âND%uvÖ›¤%ñ ¿-v¡t«Ì åƒ+jßd4Û„NEíÐÀÀV4#[Ö\Råj_©öFœ 9ø©ËÞVVùE @‰^µú’kΉU<·@ªòº„¢’t¸¬"qPfCûΈóãI|o ±îxËÉ4“Uw5Ķ–Å;BÐý½j’«< v¥n¦šûDàÜ#éÓ>u©9 ÑÂ7qj©pÙ!J±?OpõÞæ>Úw±d5Gi*~ŒD¡âÌ”#;ÂØ…qu}ý—ÚÆzíR «"oV/3A„òb—b„âÔ§w¡¬k.N‚âÙxäào=®×´+ÊWÏš¡.L‘ËÐ!§s£–©=v[,µ†ác,µïN-Õ$|_ Îðn“K¨¬ì/iõ'æl[“ö±‰},5~Þ¥]ØÞÝ{sÔð‚?£Ž˜¼é=Âňð7c4aºRܧ)ýìSLÍÆ©s×OÏ‘¡3„eÒ¯Ÿõ÷Ì”ž±ÞîÇ+~»Ït1cÉéލöU—Ðqº¼f1’[>ˆàu ¢cª"N§Ôe(áé6•ƒmb95æ]?)<6â@$³æpÖªL>%m„¾&vAîH4•jcŽûÔ’Ä1ÌW«^zl¯#ieåoºšACê?4Ì!\×ä‰öAÓfOóœÞÄûó烯ÍqërX¦íl‡RÞŠF6Ÿ…ýÈ:eüŠpÞcd iêši8fž‘,§I'œƒ*œõ´ÿüJߌ¤k»$¥ÓºfHÔKŒÄ‚¦­Aˆõ¥ã5Ù1¬ÚØn˜È± û¦zË㈩ºöôM™¨5[€kVMTïx€v.Ô´ïfÅv³¼t>ä÷,¯ŸèÛŠr‚Üu¶ßy1ø]æaÁÄ¢j¡ ñ.Ð ôÔ+O^›ÃnçéJûªƒÅ)!3F©8BUAc§vËëu? è|ò‰ï®ãA™Ô²¿z†fŽPìãzxt°Ó<Ü}ÞÜyûÜƒŠ˜ Ò1¸&-#Wˆª+ù- ø¥ÊMÐ0?ô8*ÇêFÈ)¬–fI0 Q±]Ñ><+ú|$wÂŽˆ¦rˇXoˆ40/EI‹1N»£±d&öê­Ð–9œs8CC‘M»×Á^åÛÞ­F:Z²‘†³<\Уö½¡g¸!šXâGnÓ/ŸäÿámV1H*bÛ{jùc3[’¤e]B4¡†,.Úm·Ò”î…ðÌ‘c‹¼B.ZM+ Á笜‰ñ2xlgÐsòヲAë¦Äe—O¬lJúï36èc>~ÒÇSÙ²Û Êg›:;/¢›QÆõñYè„»= ²¡€Ía’Hz$±ŒOðRÌ~uYã„ ãNHf/+FÌR‘ ÜxVE7ºΗÄœ°Lì(á$Ð¥bµX)Bpæ€ÞJË=›Âð3‰†Ö×TïµïU×,¯=`s_lrS­ÞK ×2vÖ€Q–î­¢­W‚CCE0²pãqh ò8qãE—Þ“Ëläôx¢ª›Õ«£Ñ«Òºf”c®½lÒdÅáˆ-6Ñ$¬ñª´qP$¶/’ö‡Ð\ªFI‡¥Ø¾€âM)Þ”â?3ê5‘à…yhÄŒÀŽ‘ ЖÉq*2é÷ý·Ncå#KÒ&ÀVˆ…Æ‚{[œü¬S©ìU·Ír«]γLk#’½“\ÞË U"ÒG‘Bû0Âe›ïlÔÕd{ÝôNS)k.h:ø¢ 9s_Þ5_7^½k¾ÞÞß~ÙxÝØ?ÉÎü9ŠŸãê¸L.AƒÖ:—,bÔè&E‹p)ù .h÷ªç#“H~+ Üõ¹3Rå•ë%­Æ5ÑŒY,}m@‡ õÜÿÏÞ¿.´‘$ûâèúj=E¶ [—Ö!ÀXnìÆÛ¬1—¸Û½…T@ ’J­’¸LÛûûùpâ¼Áy‚óåÿb'~™YY¥àvÏì½Ö´gIU™‘·ÈȈȸ°¿ugä‘pç{QÐÓÆ*©«£ 4#E“ƒh¢ã¼N!èc3¯#M8N”<¡2}Ñÿòéß»C›Þ:=ã6–9 ^jN›U5™šóhèEòdµòr¥äHhIë € *È*k$óæÖ…™•ÏP™}ôª8ý8Ö“ùrÍjšd©U›ì‘ínèÚ˜Ò**¢a|~Úy°åר«s7"w'Cn7¿ð©ñiñÁê税þæã˜o¶òŒºoܦ…ŽЦ×B·‚qÉ0üÞð‘Sõ.Ѧžç|<†ûk<ÑÈņÌx:Û#[î¡®Öû<ºÁ*¹çäãÚ¢šhÎ5£EdZÖŠu…H=í…=B”…FI»/Ï´öÁ>ÿ†j¿MBBä8“÷ã·BÕû“Þ8¨šÝk‚pG“³hŒ'”íÞ®„˜¿æ9iר£íOY%2ØÄIè{¼ßòÅá?Z,¢†ƒÞ]Cpdrà™D•|ÉdÊHvÄ>Ÿˆb¢O€×èWx6ö8ËÙúëS-Ûìj…Œ«äî.ˆZ|}lé(¸ IŽ[Üf4)¾[qŠIȨ½l·«´öt™ )HRv¢Ã›í‘™„»ö%G)$>£móüKnuÂMö®éæ|M=5\ÌaÅÌKÀSC¼J“òºü"©ž„ºó3Î6:ƒ¿ªÄ€`ÖFTöƒÃõí=ñfwc³ýnw{“DÆŸwØë­ƒ½÷ë¿Ð6eµŠþ²PÖŒZ–1ÒH ŠÀoEF:v‰,†]ŽÇÃV½>!1!ðj±YSýÃΩ>é\ÕE9Z—MœÓwlš»‚žUÛu¤ÈÀÜ„½ZMgÛq\óªšíÛ"häêÙÌxKß xAOigž 4§Ìhx R‹Öñ…9 úÆõ—ŽG VÛNi+ôðÍùkYÚŠ/ÐJÆf±U žGvŒ0ð@:n::MwÝî·ˆÇÄfð•°#LÚce˜ùKv[U¶¯z¦.KYwiÜË1XÑ ýíu´Ü?Õ ø~ûߥF³ùTçl¬,/¯üÇž¬üeÿû/²ÿÕ–UV§˜¤³#˜±ùÆŒD¹¯Íñ¨S­çwÈnÕS¦Ã_h6 Óm4ü'Ø ½ÉðW[ ±ÁðŸb/üU‘UF¤Åå•òW„¼êYŸ Æ›àœà¿é…ˆtñ*$QlÀÆÂ°n,TÍ…ÿ€Wþª "I7[fSi÷Ðs/©ÁB_}Ñ)öuª9ÆØF5Z;¤„áé #‰…ª•‘`¿$—1´J†‹5&žžÒJo}Œ=­—=ü‹<é’û›¯1ûwÝ`Äj¦œ2¶q$›—jjÛ%â†!Åð,žŒ†èŒŽõ.áËGÜ—3eš%F(€~ÈŽÐZìpþeðaXQ¶Àe {1Ÿ›LÑ€Ac£#4*ñ¬"*¬ ðÑÌ ßè²±!y"N‚ÈM7@ÏL_„# ”>õ †ÛqUÖ)RqNI¶¦Š:36€ÚX›»Î2 gƒ96-¤m V¡Úаeè)f¸«ô .¦« ‰#ï âzèQ#¬ÀM9.õ†2ök„Ò´’š$EðCž‡2@,X;<Þ"’ÿyhOshö~ß2 çù "öª›nKuÆn4Nmã æ“1›–Š/ºÿ~cï± `@ ÂV+Å÷#T`0]žbẼø^tÚÔ\x~M×M ÐTgtå‰Îë>{º+ÂËjq%w±jrêÌÅTãbý:€ù«¼à4ƒ M´Ë[JqI‹œXL¹8‚‡cøasµ¢Oy8•²4g[ÈÈÛ!„=¤Ù19U lNM_´ßý¥ï Ý”ƦjFÂ<\¯¯§#F]Î[g:àÑØÏ@ ²Æ›­¸{ñçÍèb.¿“¹~Fê’ØRTÏ•“ÄÉ_¢-“0O±&$Ñ+±„§¥ëÝÉ™6¤v;§‰¡–J'vïNFÃ<×%ßåèº ‚gqFäjaRj¤v×x´8õ¤édkzºIZ¥Øä•“?›øÙ`'éq8F°Ió2ìM"µÀ2U 9²Bo[Á·ìLy”iHØ%|]Œ¿6µ#´2‚›Ó÷ÊÔ3„à›zØ,I^²L¤l8t%ažÎoï}ÛtÞ¦q™Q™NIÖ>ë3I÷ÓgR¢œa ¾ìPâÛÕxˆÅ)+I®+Î4kÇ•­Õ—ë Ó!IÍò0FDB½^›+‰w¤C][a1wÄÆªVŒS¶ ‘ÏÕP½°…èWµy-‡LX¡C ¦ŒÁŽŽh$sžl;j=utl‘† bS¬KÈÛ±ÿ_?ô"߬چ^ª| 7Ù1I‹Í]‡l¨ÛiZÆ]{I”©à¥ ÍQ ©X_/², VûFV«¨+ßrÌ…‘GG¯FäXëÇ9°|Ÿ\^äØzŒøæ®0‡Ð0;5%^뎎Ã>øápl„< ›ëõ˜yícˆ`ôŸëá’ª"J®I„Ní¼«…é{Üc£CBá‚?è{¶%vWdÚa–°ó>oüWò‡|†ê"$u¶†^6Ìß'¹e¾Cú>‘HõBêÊǃ¬Ê˜ŽEŒµ™6ñ€àX‡ozžÏ©]Kt-ŸãØ›#¤q]«&n’œBð&ý™ðE »¬u²ƒùœÀè‰ïŠà:M|xÿ^âúe«å´E¦Ùœ3¨7˜7¶fMx3u~Y¾Eƈœ;9¶Šã2«üÕ&ad£-âö'-&ZcB½ñ ôÜú:/ñÛ¾”.$Þ»¹«x4nÛÞÙ| Òe#˜DÀôs=éúá‹;#oܹ£rå„Ï ‡CÎEš§ˆvãó\n:´H¬-ÏK/×¾*ñÔq’×G§S[Z(9u%‘VÜ9ÖüÞíüØ4똫²žÔ’ª›É¹ ’"±Âtð¨–.wAÑ,’ÍD†D¸|Bã~Mý€B/QUÓC_ lŠ9P³xcMp< w€Tã³LL¢T.ç$Oü{œsÒÿ¹ ÈÎ$Lô‡EÁt=°ï¡vbÖ’q·Õ÷kæ]"¶ë•4uEMɬÑwäf|wúèïßÂ6³ÃÞÑÕ‰©î"â÷ß§Ÿ&Ñ0•èØ]qЯlX¦Ïv„+Š7 r6$÷7½Ÿn0eÉŒù¤¬÷”;2·Sƒ' N!éœ<9:×àW6#ëOfKǹäRÏÌ-âó–ï1Ûáyñ;½é P¼3‘5#'Þ T™œú=‘ ­`&uð_V UGßÑ’‚fz,ýÐŒŒåPt±çœÑSç!çDŸÎÊÃXþ1"F_B/ž¹lÊæ_¤„Ÿ¸£^¤‰ Û,ùkSåíõ¯·Þn¨Æx­ž?.€Að?ª %Ž÷hŠ%) ÍãÍÀŽb*ÆâX«Zr¹9:þM ÅxoÛÖ¿GF?×R¿Q´*q'm”ïdFMSÒ¤<6\©ÐYüJRÙœ¬XGN/¶¦hƒ?Œ³?Ý_œA^Œ&許pRaÝ^eÚ^wä÷=1Î\#åøä×vžm×0´›€P•³HqC Á -7•ÿ{Aå-ÃÉeVã2\èÕʤ =K:\5 ©‘nî}¤F3Yhc?£ÐâÓd¡ÍƒŒæÒ¥^o&‡÷Ù¥êB.éîÀ[€Ý-5þ©R1‘²6§Ô¹Ãý÷Õo;€Êɳ֨i"ðÏVÔÔÀ#0`sñ±àì‚uª‹«'™TÚB(\‚Ppœÿ¶s,žûßv [ƒì<ãE$ü€\Ö#["`Å&°¨lí‡3Ümé°Ó3ýÒÎyK™8ZÆõ1¬‹†2zb²)8Çn¢iâ£[?×1'­ÙCMméë­ôƒÓÐvTÑ5A,øŒH ³2ûA"³†¦ 3J0è ]ÓýiU3¹Xb™¬.`;±×Ó™gŸO'~¥_´ÁÃØ>"1ÏSQÕ†Aó•Qûn¿ïz>½¡±Ë=I 0£ñhz¢(èé÷ë§ò­¦Ò½“^OGÔ¥¤Ä|Þ˜`;çJ%1,É0þ­Âsîö0Ž…ï–™Ê³ˆÜÙl̤¯îÏdøs ã”(þ®DJ¾6£tŽyþ3 òñO/i_%³ÊÆEœaÓJaIÆÚ±-èa¿FRª‡ÓŽ…^„[¥‰­÷CZa:ü/` tã±ß\7”j/gP¼1ôIMB1 òÚ‘?ôˆ-¡AuHHìÚÝQ­&-2µ½’3Õ]n—aàH8¼‡Š þÄï”ËiòÀFÈ9÷¾•Ó7/Ð[Î~¨”•Cñ>“Þ¡/€™C ñ\Ó=U¼k’÷)©ïžoÑõa¡}¦R®}åxfÖ´\y(f+Åo”}iÓ-@|Ý€“e„ñßgÎ*æÜ‚°[Uà$’NάÌòW’«bÜq.Çŧaqšž¾H'ó¾ôè©×¹JŠÜßïöü„ž\×Ëë2é`|ÓocíÚì2ðÅÈg‚˜YT‰b\‰@&\Yø’KaK®<«›gD™Â77G4Ñ‚GX(©˜èVåÎe8¤N¯)[!~Çn$ˆ`BlÚøÚëic“˨b<üÁf˜¨%Õ ¾¨!I_ôòJGoáTÜÖÎï¦ôšÒ ´»©ó3,3® JÆ” dë O-’Rü0Æ.3 Ì5»1|´¢¨ ¬p#܉üÂk8çÍ].Û³ í“Ôv*V”ŸˆÆ‹yå8¨|e1Ûé»tKu Ž!>4V¶mdc÷þöç2ñ6m©‰X.ÎqSæ"Î90„!·_­:h¶›¼<í«ò8ìzwã´ì;L¯\²·%]z¶W5lD‚'"•Ítª5QfÍšªâwz¾óß¾ÎÏvçÕ¨2]íBÂJåa݉ ùÿŸY6ÿíšà€D#d{§S¸¦ÏÌ®³¡=³°†6Äáx†iJ!/÷$2†ŠÝøå",µ’Y:†¡Îçîì¸_P9ÿLÔn'¼VjU5VZÕÖÒ3µ±yƒ±íW#+£M†è<> Œã¢s<äïeILo,ï¯)‡æý§ÐŽG¨»'»:YBÆÈTEf‘Üûð^ÖñNŸî)ìä9—ÒN¦/ìæm¦P+rÜ‹TÙ:üq”¨'·÷|DÇ1Ï€^ñî·JŸ¡AKÉx#>y’û¬žäžA ©t}oSèe³I“Ÿ¾ZßøÛÁÞú†~ÑX0/6Ö÷÷·ÖßÂüðÃþŽ~½L¯sNØÌ[0°é3"ÿ·Ø£2ͦ׹,r áÇÂk$¶]¸§-JÄ|1ØMH:šå¥u/‰¡X|ùŒ#¿wN¼|?˜rºD`›øƒŽoͱ<9ޏu°qôkËë /½ÖIùÈ|Ë;N#¸RÖeE[*•T 1*ÑIWóœ èv{¾Ø¤Û­h–¹ Ä%$¶”icãõnzú*6GÑô`IyÆ’§ß L-¯3 ‘lAîûÏØ.æS5õ*ή@½©bÒÇþ@KF|ßEÌ ;°™cWäN”GÁEÀ>¥7>sY|D4ÞpAG} öÛœsåÀЋ¯²€ÎqB¼ü›+±spmKeŽDØUAa#)e➉ù ¥ÊŒB1lÚßÔkjhÉÅ_pJ6Jfù·ï¿GÒ±á”R9bt¢n–îí]˜uË¿YîEó¯“Áñµ,àü“ö ¡…iA;¸ö ºd"AIT×—gyòµ|çêÆuq{ão/|«ÑׇU„Q L²]6kõ {5xÕÔýÈ8‰²×‹Œ³0Q;:“Ê\/ªJ£â“/ÃEK8Í‚ÿÆ*/¢÷hü%ý$ NDû·RµÃ©ž"¯HÜr\éËÑõÉl|ÍÀ; Þ¾1û†*ú†/d#¾Bbç +k;ĈiÔYl¾wxyDëèŒGu¾ýÖî£XÁt¶'«?U @9ÞâúÊŠ»ÀÒШݶY”?. -Qá¾”J(ñTѪPØÏÇ7-%•ì Y¥øFjðÈVcåo•ݺöȾ½w/žšHKeé–Ä.R%îÇ[ðC€•Àl_éƒèõdĶc²³c\ùñ©B(óÙàŒöŸ2"±f†ã.=ŸJÉjÇŽ4»lÒàiÀó4þ£µ1„øÔ7ñtˆçñ¶¥¾…(OÐä›ôŒ£üHذÆYn×”2ŸbØ'ðïÁÒ¢³–²ˆ¶K³wÊT¥¸©q• [X;Yq)!vönø‰\ЏZ¯Ü»N8V!@ÎZ¤£l–‹R‡O«l’ôܨ¦8|y?|(ý°¯Å&`F›1ãÃñž ùbòcgÄÁ7†©E$Úobò‘?:ÚŽæM™œ8e‘ìñJ8ˆì1%XòÈ™i1‘R´2ÿ<Î<œT…~v±Ç,‚03÷¬Ä'ݼ"šTè©/ƾ £°⃠÷¸ƒ`*;Ñð¹kaÊÇ|hŠ í¾Q þFúÑ?µ´¡ƒ&º3øGŽœØ¦í¹kw´ð\%·d&H¢Séðý—st–Ü/,l‚iwúf«:¢¤&n Ý•-÷œs_.Ý¡..ay1ÅôÃH¡êy ÿ¹E×øâ×&ñ‰”!èŽùó…rz)ïD$ˆŸOÉ.ø"‚n$2G(sm‡cniÒ'Æ<ÕÀæÒq¬eЬ‰ŽI— ‰ßJ˜ÅŽn1ãï\Ø5ûœ×°Ëuh¾¤¯ÑUQ" !5LnÜãÇr↓‡W$Xô˜‚”5ý(‘è¹7áØä1Ö1´ô5Uü¦”B jìp i›ö½Û ;#!!E­”¿SÿðG!SøNÜÝñeõ†SÐÚ°¯D.Ä{‰JqŒ=Qipèqpdí“¶ab=ÍêË.\>Q±€Y›Á«¸¯8³P…³^1å¨X“úÎc ö¬ÃiW¦#ˆÔãDÐbzžœ“µ¸K/_Ú~k¬°Åtٱʣ‰ì\ŽŠÎbËUM q•iPlXHô•ÄíŠÎålS$pà…ÔÌ0¤Ú¼¼ì÷kµ—Ä¡è½ZÏøD×aä㎩îÎr9þñ\–ÑØÜz#¢iH;Òi©f³ÞX 8MÓÉê©,ëAÃïM7\§£›BhPY¢³X¤Ü_i+¿4þ‹œîbíö¯‰ÿÒX\\n þ =[Y”üÍÅ•¿ò?þËò?&×¼¥¼1Üá½Ý(Ÿ®‹ø9žÐÑŒæî<¸€O;3ãÕª?»^U"tr˜¯`,ftåŸü+ÿä_ù'Óù'uÊìP#`›üHgû²ûêLœˆƒžØ“#B+&EoÇ‹NGUC®V}}¸yp¸½™Úö’iKGÁ9íÞÈ%ÖV‘Õ]é;(.~p7õÛ?õE‘ ÔofDÔS«N™›ôêýûÝ6»¹oÃÏ¥‚ÔÝ_ÇtoºÃÒßd¤÷,Nvƒƒ÷ë?mR§Þï¾]ß1«„|F‚Ë7y[ðÍþææëÝm[Pbg™{qŠÉkjñ#2^,.ärâ]/1ìˆÓÂׄ›‡[oÙÛ„U.ñµp’öGíq‰} ’ÚôB$óúÃX"ì{Aç(ÑðÉs})q!÷¹rK/W¾>‚ãMLI¤˜“’°¹y O¦·ãs`Mnú¥ë… ù\¥ÿq„ð âAò†•,Ho‡O ‘Ï£® å®åŸi`.8‰jö8'@ ¦ªü&ž°ç ¯d{¢Ó‚-u´=û߫ٓ¿Œ'Úìç'œÆš±R¡#üd062´€÷‡¾æw‘°b¢Apa½oxKéÍóZkaF>•¿Ö>KL2è#æä…ç—EÚ’ö§¤X¤[ÐùÝPÐ&Ò‚÷ [¹g/|ò›”jhm8%ô¢wp19‰Ê(ÏAW&ƒ˜,À‘ÅÙ[õuGG‹#ðÉ `BhÚE¥O9À’4ÙA¢¬C…q 0Št l¾ý©¢¾K)rS£˜Û-ÜžýGÍä{hÄØ¨eD“A#¼¯8J•†(6a†’‚7 ï_ˆu²Á€c‘V9Ú‚FBªô2è+Pã qÑÈ\ -žgüƒ> üœW%ÞK¼[mÐ fýò›åNǸ¬S”|33pòhå!‡Ü GþuN´x{ƒ@0ú¢~"éúbz£©Š<Ò?ì9뜴SZDušÍ5zÕC+šLn¦ãÎ).ôÀy™¯|Éh²Iizñ¦Iélb:›œ¦Î“êZ’ÀêÊ©}‘µ}úÓÇ EÑ™¹Â…á‘¥G¼•ô„Éí¤¦Èn1e2C,{Œ¢Ýf0—׺oâãÒ»ž)vÔ`9*¬û#TÙ‹t§ x© nYÅq3PŸŒ‚¨p|2ð^Æ@¦úÿÜFúF/ ÏqANÄ«°Ô–ÓÍŒ ×ý%Ã阗²ÃÿÈ€dãá”Sl\"|¹rÃþ%˜',SRøŽåX;n“8èÚœõ Ý¦/9Ón—\yÛ¯¦Çûë‚Ynã¢LáŠåöI¿*ºFÔg½ð2ŽÁÞlÆx“ñ‹‘tAä„8÷à ‘“û—ªþŸ®ÿÇÒÖÿIªñ§OŸÎÐÿ‹º¼±ð´ù´ñtiyñßž.7ÿC-ÿ¥ÿÿׯ?þtz1pîú//Ϻÿyú´¹,ñÿWšO›‹MÜÿ,,4ÿºÿùWü#êËÊj\°ˆ‡ç‹Æö:ùéFìêcòl·Ê CÇÜ*ôUÏûÇÀî¾Þm1ÐCÔoµàeò7ÿlª 'šËMt8ñÎø9ë#»a«u0î>ϱÿp~ Dþy®§æ¡¿i¨k|,ÏÿHÞŒ6¸`hQ±ÐmJú•>D…[4Á;;oälCt‘´ÒyŸÖ |•ß0 ÛÑ:—wеÔ6«ÿÚ:«‹•ÏdÐ>ó¢K©JÏ;Çúöw!Óë ýfU]âöâzÝâqô}±V.•^Ö•†€ÜÑó‹ê¥¢?´®›;?ý—ïϦR·®ãæúm¿ÂD‘xPY¤×þqT.}_=yyÜýžÀ–¸4£8߀iÌ‚t®!…`!¯l¯.å±™K~Ö“gl3£$ž :P´M…)8”‚HOhŸô´ù@‹ÔÜìëwÞ}4–GتW=ß>žÈãÉø|Õ>;ÔEÁ*jH\Kٔͦà7ß`’u׈ŒÐL˜7Å£_¿9±/#µó¶u£»t1Zª{0§ë¦—¸Øúô A9uñM›£µçÛšëœý³ª¹/ü'Û·Çï&¿™úá‡ÍÝ7Ïs‰ ÞN8 8ýÄqø›§AÊÁÿN?Éé|gEŽÏ:Þ¸TS[n>ÒKÎcScÖ µ0äorNæ­™+c£·qpÏ|¢¦äÖÎà>W¸¶£bµö…dŒhårߨ:ýî ì8ýÎ^£Ü7ßüàß_(Pî U{8è”=Öøu®uÆ•kulXô–?‹ìˆz`Efüù8'7j·VHÑïmuôtÕÑ´c_œÈÎÅpù7gÌ8žÇÎ-åZñæç“L׿]¬â]œkùêhçDïVîäµâ(f;è”ñJö¢?Ö©íÙ=λª8ô¸¿7^€dÃDH%¹–Í/+a…~èLËsK}*¤6ã¼¢œX4ŸkdËÚîîc›rZÑÒU½qÕ«"556VDj,°Ì†~ 8[ÔÚ¿åZÉW C<ÚÜÕÕ\ë&±á6œéDްœ=fhèããwŽVNçŽ=N¢Ëà| R§‰¾c:°¸óUqüÐ=ÏG…ó¿UTÿvXÇÛúEÆ«qýt<¾;­ûÎ àœÒÇ)—çß(ûkLÇëÿ»ž«[Ga *ùîxP—æõagÞÊi‰0’ ü°³áŒ5ñ‚aûÅ㣣ãîó“r¿T?>>:>öçÇÇ'u;¦QGs0ùú¸?¬Çjó󜙑̺݇Hé¼Í»ˆ*¿wÐX;Î;­çù¼&©¾‡4/Tˆ¯ØSåy,ÕªnÙ…9íÝ•yôÜbÌ%0øAèw.Ãb)>ß‘Û9ÿ1Ž=“;W&b”B àRqþ(‰|H MÑD¼DÃúì´O¨2lE_(É€°=é?¯,X5ø = ¦q™Ü‹t¸8¯µ”îíxòâS=扑̫áÕŒaòúJæ‘ñÞ$½›ÿÑhv5ÆÄŠx–õâ&4–ºÌîß*qˆ ÜÏ걡*³ç‚O»Ö ?è 2cf”3©óHE¢µË—P¾äÕ­ZB$‹Ov•À䟻¨Ÿø÷ßÏê[µÈÊm­ÄíùþPØÊÏÆ(³}ã³aÖ Ù ŠÀgÏñù‚]¢æƒj5ÕëãQ °Å%ó_×G^…Y–2Þ†V,y½ùÓáá/ õ®]' ™ž×-­µULA•Äù\Ödž„vß”fã—´®tyÂ<÷4„–mL‹‡ðK m~cÑÐ,Lù¾T'ðVÍ72 ÓDÿ^d°Ÿñƒ¡ ñ™™ËèŶì¡ÌïñÒß:è¬.¢Œ“‘¼«418ëMü/©ºWåçɺ5ÏO9Ì®…ï8’³Ôx>ÿ»-ò¹Ï¯èñB?ÏD‡™*$ÕùŒ©#Ëý'˜±õ?n¯ÇŸ:w7ÁàmþÉmÝé"ƒ±›)ÓÚ½¢;Td¾ Çy>.˜‹Î×xNŠp1ìæIZB¬²­tÇLP^z>H~Ä{Ô¹YgñRÚ’¸Î ™4U?0¡CŸ6mp>ò.I—+Ç^ƒ9µ¸¸àT¨QÍ[ÚT¡vø[ÚZºÍÁE|•/6W•é „òt»ÿÏÿ›œAtåµTÌžÓóÿׇ”Sþ8øþ¿ yýÔÿóÿ¨ÿçÿ^É£G}Ÿ^xª\$æˆd¾âÈ¡E˹]ùw÷s{|û¿>¸S  /dï³q¯xpøzk§Â@*6“ø‡5äh±Àc®$›{D‚©hA×6¶¶€Q¦ïIeE,v)' ‡G#ÁÃH›C2‹!­‰ˆggr Š{ð»pRa0ÂwX£…ÜUWøåö<06½ID“þŽ VÔµCÇɶƒ^\«ÿ4™" *}àasä€ÕëC:2C1[»†R³u¹þuÀQ Ÿ³N–{HòÙ¥)ë ~›°}{¹kBmXS1é¢êSÇÆn£>¬¡ y‘«T=Ï]z0pða:MÀÜÁ CF✕o´+°²©¡n¬wî·ámPÁ éÀÕÔ­sDêñ¿÷Ǻo¥‡!OmŽC£Ñ‡àÜG0åB/6'ÃËpt6‰ÄoXà#ø”£®$ð£úÜU <›1 TuäÝ©óÉÌŽ4Уè wǼJ(öü—Ôݱ¬ö8 sÑ%ÚƒOìš°Œ$ÒH Ÿœº¾‡€\zpˆÎ(83"a…æ™MEèš iàŒLñò@ýŽž Á^xcrÝ `Ö¡p ™&§çl8îIĉv~†6‡‹QhH{f€µÊ¿C0pÜ2»p7+J¬{'H¶v>Î]²AsW²Zžc`>ô“7“º‡0CR·¿óº~TQÀŽç툚>§•e> ºlêyN¾0¥!ÐÈôô\áH‡,C´ëË0ìÖX¿Ø˜|€GßוˆÄv÷;…4㘒áŒ}“ØNÙ“~'¬â<[|°Ò\hSpAÔ«ƒTó° i¿z¿»ñ·)½:ôðq½ä5 œILo/̸|jníÖÁ.mxx,òó¢èá91.FUÒ¬“SÆpQ†‡âó8!´¤ÇñaÇŒÄíxFÏ'ƒì¾[©«´ÚæšBŒdDàŠzê‹Dš#õ-õ!Ï3O¿~׈{PÇß%—ËŠîú7fjãÝûן6è¿ÃƒÃ½O;¶?µë6ŽÄ—ˆ{Ä2Ãz íq(«'WæúÄ$P å4â—sFRÌ3o sBªÈ×7­ÖApqà«/tÈüt9±Y"Q ë4=ßx§ŽS•ì¬ K6êó´Ù嶈›ÔW((T}A';QfâÍðäe耈KöÎ{ß°A|æ¢ò[#ÊðÑ/Œ†Àˆ ÝÀwê77Þí~Ÿ¿}ÚÚXßÙÝ)¹ý£Nñ§Ã­íMsâÇo’=¯¨ÃðsÌÅ #àZ×hD±r ©ü|f'göfáK{#Ú®ÇÌGéÏktsçµì"Íi½i®e“ØádR†í”QQÉ•¼–ø %óüKÉ´3Z§Âe¤{ ˜-ˆ€C€-ä½<ïÚ££Ö¯\¥urR/ ³’-÷æÒgï:qã‚^ ~QRÛ\ˆ‚ÜÆQ ;=¨£»ÁØ»…‡f,¸örm¥¶ð²d¬|U¬Ó xqo~=üz<:9)Õ#mË—?>¾ývañ*«É`ˆ¼‚ùý ¹Ž;P…K:”Ý %É8"—þ­ýaêž™_qEÓ·ÍZÒ6ÅZÁlå£ÜœzÏ«l̓[ô7­M?6ÝVîÚã?ßþg¦ýÇBcy þ¿ôoñ)ýö?HÐþ—ýÇ¿âßÜ7õ³`P.ÙbƒÙ¾‰cÇpRÛ®Ú<enk··Äˆ ,¦Eñi!þšÔB÷_¼© %@'ÔçYõUƒ~¨}<×¹1-éŽTŽm믷7¥pÊ& ˜Ÿ#º4'Qðä6Ï70'÷ý®Íõ ­Yò¶âӧоŸ¹jÅT¡ügþ+ êÏûç=ÔQCõÌñâHÐa¸¼\ùyÅ”Ÿ/‰@ô£i :šÕSÖõ‚„Šˆ£Q¡Ë)¡Ïî¸vëÑ=5ÿ敳ÒYkû%Ãÿ'Ì響úüç¿“ý_ö¢ú?‡4~™ýg£Ñ\úËþóÿÌúK ‡ÚÅ„øçÁùßX|º´„õ_ZYY ¯ì?›+Oÿ:ÿÿ5ç¿2 ÀœZ×?`ò9aµ/ìBø‹ä‹ $5¸ ¨px'ᔊ%Õxöl±‚¿Mþ»Ä—ùï ÿ}ÊWùï³ CX¤‰ªàoƒÿ.òß&ÿ]â¿Ë÷ÄcØtj¹Ì\Ø{g­€òUúÿâÓ‚efØRá†AŒ’¹?! ÈÜ×…áh"sŠ%2g†ýÇC‰@IP¾"ÈÜ×…ÁÌŒG™ÓÌ_Cdnv‘ *dz5©v1+j¹A…¼Á±Yê`LÅǪªÞçÿM/ÄÀ«0£üö:X€ÈSm4±8ŒƵŽhbâû·Ÿ—Þôaöp*è4! pð{l70Æ‚œÄÄÚy›´#ÕŽêš>’àRËÜâX|ÒÖ'㥄O„êÀ,1¡x4öGD5â¾ð x7q£¨;Ñ‹+1ú¢±¬™gÍÐk,õîêK7XŸéÔ büi2Ç—Ô1õq–?žÉZ'ì¿­Úëùˆ+ùl+¡ya(¬êG?^ &µptñÈ89ëƒð„ÀoŽ-ótTêØ;“±Á×ùïCä6¨çMUŠ$®Ä£÷ƒž›E»µhr&Qk¨SѤÓ!'ªà«äJÊ…õwi¯ò-D¥[¨Ó½Ò.HÎMÀ¨2v_6LÏ}5ì!›²Éõ€¡H #rÄôIF9ˆÇ±yÏqqPBQHXGêÞB£MkÛ÷×NEŠ›_È«O ·$'¢J­\¯T §0‹÷.üµüqî¾´Ôü‚:ÚÝ;ÜÚÝ9ÉåvŸ‘Cõ%°VfãÜ ãÓù¾_à,=“âL»C_—‡%B€žêeiaÍkþ‰†gÏ+,Âòä¡üåqUśԔïâR Q%2‚Oxp3¥HÔ¿F}s8í™GÓ­”Û÷‡ázióî‡q;ŸËiˆ˜KЗáƒÖΜ¨$´?¸ßj¹¯âÁäâuÊ¥Ôo?™p2l®;¼Ó颺’€£Æ·º#fvvsæ{Îúw>åPïœg4ÍÀ‘µ|îpt'(§Ñ©bÁ@ï<èÛž7Š|“ì»ÅgBìtççTõb¬ÔsÚ]&³ô|C'§Jbß'ý³Œoce3ÌèMf9OÀX/òü¹bðê]OÕÓ/§kñFA£—ÜâåTMÞ¾ùt5UÒÖ Ð$ kòÚµ¸Ž,õ(,‡u¶l[Y•žÌ©ì>„ë„ІAMÍTJ–.Oõ¨OD$\â´<ߘÇ@òêÅw‹¶4:Ü0p0|?ò:9¢x~ŽDf±¾a[@Ös%%9 ›DGY›hUÌAE5†®¤  Ô‰EÕXžll´ óÚ¯>l½Y”È_´-ÙÉ™o‡íÉSS;áØ7Tœ=>øùpÑÕP*`þPÓHb¯|ñ®²C»ˆÖ¯Ë³Œh¿M:¦qºÓ©Ž” ÇóÔŒL题l"ös5êßߺ/U0çxÞÀ˃Tè6þP½[yA½&a¤£÷÷Ãí½×[ûk0=ÿLÔµÓâ×Êjá)g—ï_9T•Žòßõ¥N½sñ‘ÿåKnS§¨ ñé O LöI׫OŸ¸9[”d“×»ÛRšú73?_Õ/9/Aªk0€–\ ‰úÕùùû+bÆyWÿì±µCKãìˆ ïL8ž°‹,¼Å¢@»‡ŽlÂüx_ŨF[BwÏ2ÄIaº“~ÿn }«óW,¾^îµü ’‰„Ñ#pPOb\ÐÌ\ªúÔÒв±úO^ûgåí·ºÞö¡"Qü{¬¥õÙÙš$¼QOäÏ`Áå$ªHauÑ„EìM—ˆØ»ðQZ+brÝ ù$AiÔ½òGâ“nÄQܰs\06s¬ƒäë”T“ÙI åF¿“,âìS…z.~‰“‡'K†©{¢'e­€ª…ÔÄÚ·¢SMŸmŸìi[?ª¶Ojåúq­Ngnrö ÒÆÞ‡6" W·×w>¼Yß8ü°¿¹_ýÛæþÎæûêîÞæþúáÖÎ[}Œ¶„Úë+…¡«CÊ8wºxô:ã8s¥ìfÒðÁ@¾§©Ò’Óïzý?Wç£Ïó¿ë‘&Jìjš¼~we©EtdŸÜ âvu¥½²d(O~„ˆéK .¼,` _Š¿( ’CƒèrØ\XøsúÔ#xuõ* /4ÀÕ/Hk´’†÷G;G°†ÃN,v v¾ÜußÿóúFÀVg[ý#ÀþÌ‘FAfÇ‚aô¥øMÍ?gÆÊY`Ò¼ú—‚ô¯®ÂÇ‚DÙÇâÜv0Ê\g%úÁèœ4³èõ†—DŽÞ44HÑá$ªðR^ª-àtH Ü1ã‰À#¨ý?)ïæJ~׆ÇÍÏöt(/×Ü£û‹A-}ž:hÖ;’ð´{Õd…ß*7<ŒF8?âh¼6xÉP¨O#¯7X¬8MV–lÂ0’GºÅŸd¸ˆÂjlþ §Ît’Á¢±­8š Ò.¸‹tñ^†ÁЗËV:°˜§¸“£prqÉŠlH f n|ñ5]ºˆwðß¡CŸj«:ÅÖßï½[o›ÃÏ?3jžA>¯úÈþ•ï¬dÕÕq±V>.™“pT+Ï×õajÙÞIJB²½˜±Èoþ´¤Š‹…•¥R>F£©ÉscyËÈ£xmùK*¼ßX× ¬Ôñwõ‘Íp#ûñ¯—“5j+ºÎú½•VfÔÚÛ˜]mØñ¦ê=}d½§‰zÜÚâýãJ¶´"-->0®•T;µÕWºÞƽõVÓõÖßëz¯¾¬ÞÆG]ïõÕ{¶®«Õé׳ûÇø,Q—ç¥yÿ\&gåií™®so;Ou;–P©½Am 0áûõnlƒÅå~š*§ùÒtÁÃÙÏ¿'1ÔRu>¦ëÀÛÉVóoIXp«Hâç™uʵßãªÚ¢b›ð<}˳4gt­µYɉÕ0:Ï$\Å]ý×£½Ÿ?žÔë =ã‘*¬¿Úx½ùæí»­ÿüÛûíݽÿÚ?8üðÓÏù_UðÎ:]ÿüâ2øûU¯?‡¿¢ñäúæöî8Üãm‹qLÇæÏÁ ÞDíC£y#‘ ‚Zœ–$…"µ5 Á"¸U#O»y"p±ÝRÐÑÞCðÆÔþ%‹:¢«»ñM±Ä$ð,vuîGF‹ˆ¸ÌÉÒM•63a›jŠ{Î%½—†¯Ç£*q t39T¦§Î8[Ë ­f)Qëq ãfm95OJÊ­;[Û¢&iÿÔ¢Fÿ^Js&GëÞ Àí†'GÑÉ£x‡Âh Övÿ$ /¿V5¦aíÔ›Ï\AóéB58ë3Sè‹9GºÖ?ê?m»u"‚ÁuþqÝýé6–baÇÞpn›‹¨LŠû" vë`£ÜjÔŽ‹'ᎂ¨Ü:O]ÙÎ#–gP•"pwTµ d4·{0K\”ÂI û‹/­w[ÕëÛ{{¨K»ô`uÆœxl@^‡^£Ö¨^cˆØô9¹í‡I¸úŽ “w[Ö@··¦lïµ_oTÍcÞ½Þ•ïÿx3ìÑB³v3ôÎÏjÞy­ôTqÓ{÷¦¦Ö¯ü’D Ò&¬Y½­÷›µøz/Z¬Ë…–\Š%/opãÇöFsïÒùªùÄŽhæŒ+³먠Çr']áQµº4ñ·V8Hƒ¿¥öÛëýƒ—+Xêõ-oÕ•W¡J¬^up»2£šlulòÅrë)æÚ¾ ¢ 2ÏD Ü¥½öSÕá©e¹¹’šjúil°óDn/­¸ô®u0’DÐJõûÒëU£°ç..>¬ƒúµvR®×ÓtM”Ý&p¬xÝaØó˳[¦Z_Ýr°ºBâ^FPú‚xÿ™C[1Û!!ÅfŸ±å‘ ÚòTÝÀI7ŒíGIØâs WHby‡X¢ÖÐÔ¿õAÝàHÊX³oDô£oÜ!âÅ“Þ6¡á»)Ž:z c–•,ÕfÍ|óϘG–ÍǨ‹[U½:e—:Gý¨üé`©œ!ÜšÛÜ´ÐùŸÞÐøû=ø¤Ñ•Õ$'í.eN—jZ³úŸï cŸ ÂèÁWëí¬Q7“£Žk ùA• íxÖ,”réy(¢ ßTÝwêýpÜM æ`ˆàa¾\iTš¥Ï…$Í=*;uVñ5÷-ß$lÆKg–ÍY3Œ¸dˆìCã´ªm`‡­•šøÕd¹çé$ºNO¶€£—Cÿö1.·Q0žˆñÛ‰;‡ÂÄëØ/ØÅØ1Š©¹¬àëF E_\#‚;[ÜAÜIRÅ¢ó]áI²$]5ï±ÙÆŒÜüðóœVÒ‡±±ëáÅ:]ý&žÎŠ’îœk>>¬cç1¬¼²Í×k Ú¡‰×Ûìš|Ÿ°*Ïáv9ÿDSoÄžØÔO5œ?Ü=È«®?@®R8?È;;z"d2Mñ4 ;÷1åfš—Ïöæ¹Ç¶…[‡2 Ìý¼†cÁиʊ©žÏ#ŸWÀÕÜŒûcÊx|h0+ÁF2–s±*ê=Àô¡\yºáòÃ>yTkÊ5n5,ð¹×#ŒM6?tŽþ c…³CªQóÈmÒ<»§E.òøñ^"VQ²aóÈmØ<»§a.òœáds÷6«…Ùjµ@vÆþ`?`kRÕoï_$-e2òÑ@yi›Š¦¯"X¾Œ6±ÚKµfV½ï÷·>fÖœôHPx@ úiý£Qv\{·†±¸°¸ÐÚx/½ U[\jÆ¿ ÀN¡ÔF"ê_Œ¼áe•Ý>´†,èµ>loíð^Ð0ø0*Í6"à =̨`Œ5™5&³FcaN9ú/Î.ý,èÃÚå ɸE4[‡>aÍò8dµu¹NâÌuŠÍz£‹ŽI¶H߯NÎD›ˆÅE¥ ””©öëDÙXAÆ•,÷,¯®Ìn…*¨ä®Z]-·^‡½!É>åaýeµüi¿™@Œ®¼Ë ƨ¤5-¯ýÞØSTˈæÂP‹m_ X…4è_G!í~‘ü^ÿ”Ñ뱩•ÕÕYj2áä?-™nŽ8…¬æTQ΋˜Ý‹c5f’#ÝJ³CLH£‹ 7ô(µÆEZ¯ñRÿk­o}|Ù:j,žÔ­ÅïHz¤k‹µ„WùÑ $˜íÖ÷6ðȨX¼’µï Wö³q1PÁµÏ7`«²VåKz\®ñSæbw¸–>U FKòd}*ˆ:°¼º‚!´Òš@ݧ”òÐ[YrJó–®Þ*K=ˆ/ä§€'[¯¶iNrHŒ.tjµÑ¦HÚ6°–¹™f\²èþÎÿ®¡M¦ Û‹|ãDÝfsÓ³0j..Kï5·X×ÌbÚk$V®Ï2|µ j6‡úÄñw „® RwÎ/àô@o%é(laÇç×nóqÕvŠ%~õÄf¿¥ïÃÉ8*æÝ ~“°n9/lRú® À}”ŹœÆ¦¸O2ø•Ø8VãuU}¢[ÚJÖï%æé ç?øRòjcªÀôÅFYãñÑÒò M.°¦#[¯]C•^D½PÕ ørY“ª8f: 6~³*Gа¡Ø¹_xu©ª›„C¿ÇM~6#µ·ûóæ~aæðQ‡Íîe„‰-ÄÏ5>ÈxÿîOÓ¥GnM‡þ$W/EÎú£1q£K¬ þdÈgËh†“D•åì¥,åÌúIZªÍ§„fÛm­§Z˜2@]â—ÅJZ¨¯×G¸Y„;MÆGü eÛáæ¡2 {µ{5cg„/UÚU©9{½÷±¾øra¡õª¶[;¨M©J¸ZÆýŒ`ÖšK'tÊQÛ4ÔV£–®|9œ>qÅ^×,+2`-΀5µb¦îÊÓUT·Wý`FÿnïÃGAßG]ÊÔŽ^™«™lß©XÏ­6/U+ÞíÉ>õ²µ»q†ç”w _¥Šb,1ûSҜܬþ˜=¬Oì^å{‚N»3œ´M˜‹Ó©âLUô&MÞtd!€öY0޲ŠI<1Þ‡4›ìiìc6ýoy±Y²“•—Ëù˜')1žß[oCAÔh/̰: ‘ 1 @s±4k/:gö 1lg>ï6þ¡ÝDÇk ƒ¼Áüì+KÓunÄš 8R(L¿Î É™S¼yTc¡¶8{$î]xÖ;ãîb|Cucr_–OáëL†‰qO3MÉ62¨Toæt2÷6S€ƒÝû›é"®°œÓšUb2¨óbÉ"±¦¯”zóû0«ð*¶“{¦”1•‘ ‚ÜwvÚTµôhåÖ `´ÙT L14‡HÄó©ÝÏždªH•Ó½|’¡Ìä†l)ð¡ªhwmIû«?¸r#U¹ñøÊ´[|þŸ¸#?ã´•©Óc—.øãö™7ÞÌNK•æbºÊàž*4oÒ§«ÜSãsö ÖT³Êû›Y³­wÆÄ<²åLdÌìÿ½hñ9)c½nò¹‘b𽸱±»wx°ö°<“$bh£#ذވãüƒš.w cL÷£Y­Ñ2äÔ/¦Æ Ý× a€(ÃÈ :¬öÑÍ Žq$ÛβÙ4Õ´e:~êr8¹-³{GÈ[%d7î~ÆUYGÉÑ¡ï—Hƒi.rq¨jŠ€Hü.¤C6=Ð Ÿ UÞíqĚػqö}¢Ì ¥ÁhóÉŽª%¢ºšrk/¦æ¡Ñ¨-6gÀÉ ï_¯ËÚÝ 1žgµ›ÚïõýÞÊ;¾ÎÂДlI}"ÄÒþ¯º²ëëè4§ý„3ñze)+,±Ì`«žý9C×ó'ñÚ¢Vr¦nf«Í…å…²m9åÝ>É:Ûqo—{bŽshZœ£óÞ“ó SRX’H¼Œ8Š*6  òÄ´·7VVÿÆ9”¾äÖªy­Ê&±-yÒ~Ð0ô3«Ñï„#ÄÈÑÕ%{)µ|).½T——u&OuíÐô»Ñ¤'N|Q7iæõþ“=a,{ã/:$=ÂÔñþ…S}X|°Y‡Ï½U´NŸ?ø¼t&Ñ.¥;‹°H«S€-]ÌX4Ì(ß^>þ~2S5ÇW‰Ou8£K÷ÓXRwDøÕ—GOŸ¸/¦lª3ºª 0Ym!³ZùÙË—åÖöÞf=0Æå&rŸeÀéý´Úèrˆá7Bà õH쳌q„Ñy̪&£é©¬_w*$¤|q&¼‹Œ]ÙI"Ôþ¢Ñy£5uuoùi-èFVrë}0f;  ùaµ‡—Ézrk#\û·rƒE3ÚáŸñS‰ÍEUyÏ‹œe̳±ø0ÄE;‡ˆùr‰Ṋ:^ϵ½NG˜.™Š10N£.jÀÇ%Xcâ+d*uWŸí·UŸíµUOyÄØ’Ã?[øÓæí°¹™nœ>ÝúW_ÕÆÁOdÑuãÏ{pmìÔûÄ1A\'ú?ü£M¼i.-4NR®b²)Þ<µŽ%Î êÅ›ÿIñ6b°fõý¯võ3;Ë€§ƒÙB~%ôä|Ô™ÏN·Gs·öçF%fû*AöwwR>WÏ'ÆÑ¤?§Ñ|ŽäÏùLZ²¼05ëKµ„ Ëÿ•óó§5ž9½b’ÿ¸If(^¼®7éSÐÚ>²Ô¿ÜZ:þ {¬6ûg>îžêIãª):;ìà,pÄ@§ËNSIÃj< ( ÆLÎå1à`ºÿذ°Ø'˜TDø i*:lyûóÖÎó)©À§ênoí¼ýùªý`pqÓ\œª{#Þ³ÍÅ8lc/¢%ÞHå F^|zá À»®æD¹™jrV{{ut8Uë–pQ»)—[¸‹ÍJ–ÅÁL{ß3óÇ5ž÷$`‚µ|BÀñ³eFõ©Ç«™a‘n;’9åWÑÔðNÙtÏŒƒIÿŸé­½5¦ó<¹^Ð1™ †#¿JòoìÇ…Dȇߪ„‡µØÇ ¾Ü¿›=y™½RSóòáaäŸL¡¾D©²;gf”ª¬m3ÌØrÚÒ¡çß_sä3=*§«­ãc¹õvçƒu6ILdmu£§™óƒ®UëDsæ‘Âöëb0y¨K•º®”Ñ£zì”2šH0ŒXè"GM…"ÖD•{ˆ‚&»££Œê3:óëѯõÎl¡QæÈéÄ<òªÿ8)œ~å­rÖ©óo;€SñÃD4»ˆnØâÀµ:)$|Ýüï䚎mF˜2 O«Þ-ýy êus1»6½xÀùèÚ­Óuzñ˜¾³f÷O™…~sqô'MheõÏ‚§’¤?¨AFŽŸs I¾tâ‡ßKx:Ûmvßxßn'¼ÌãäÃŒgúQî µºfOF;¯²Ûy•ÑΫév^9íØVð`ÊâF@þÐŒƒí-Éôûs¹#n¡Ë´K~ž½¶®ÓYà4ÿ©K¼²”úùO_fÝÄ¿`¡ylÿm–¡é¦ˆB:Dà=´€êgÑ: Áá:î!!è\q¸ÕÅõG©ª“¡#—é`e?¨:lGëT K—bó§å’uÅ0Ñ™Œ.G[‹Q™•Ò¬2+ºÐÞÆ:Jeâ^N©§–Úüief§œ2Ogujåi\hµ\šQhÕµ.’»ôðìï„\CU­GÁµ7ö«ˆðóKÁÑàY¯[‹ÂZ#qEj¥Ì¿„ Ò‚V£Kö<±àp`¦fÛ?™XYc_# “¨äåᕹßSlIkFL|-G¿‚*· IÔHí«ÎéAˆoRÕóEƒ6{ëOË:–‰QÑgvÝ,ûúª[wh÷/ÇÉ/øòlvÙéà2=îvÓ”µõMú#f ñàö¬Ìsn ÞåÊR9›ú#H]þIl ëP’Å“?‹U)kVJúºmçÄu\ˆ¿zóqž¯H²ˆH"±@üÑ×±AîU!X@œ#Dsð}Þœc·Œ}„øŽjªÓ5QFa8v²ÅŒÑIÌ8¶K2¸ˆ9:·bSOâ…s‚¿Óí,¯zH:‘;ðÇêýF{ýýûµ 4á"ä¹!ÑZ$çHõý¹¾ŽKm.•jöºíh2„ɶßmë”k§ÔùúóAÑ©Ä8 >·ž¤$÷Ô-“Õ Uÿ¦Ë~Œõ#õäÿ•ëª~á<¯•§k*Ÿœ"ªæþ:êHm¶š5c í÷ÎI*‚‡›;‡ë‡[?m®å³¤®ä‰nœpv†!%l¨“‡ j;û—˜XMÔéðüÜvè‘`P'&ÏñçÔ¦$©õXÍ|–¨ñ«‹6ŠyØëöº%Îliz !;T‡w¡­N7«W»öø.2üDC³ü<Ê0G…#-μb8+»0y›.kAyp DNRXÌÞ\úZïPk†($¿áŒB:¨§ “Á‚N»¹ý‘ ™x‡I GÅ>£ºw¬Øæsþ¾ž†ÑbÕïßfôëãáAµÉ3w÷d»¢q8Ì€µ¿D¶|8Ì(Í€ÝõØÏð!e§)—Å²Ý `²Xsn õ³&âwžL?§}›ö¶ "•x(üƒ*¿~øÊ±uèû÷‹aÖô•åšØtM[µÙËã8ÜýwÜ|ý»½7/ {ã{º^ƒÇLøžâ¼O»ž:é"]ÔŒ…¤m)^tN?>'ÝRgm—d´–žŒå;Å÷~Ø?ƒ =­ÝVFhªÅ4?ü¢š­Ôl„L'¾ÃGs´äÝ–¸mù8^fyiu¥\zâDŠ0|@oâŒGú:,»ärºdùSyÃ'#¤ÕÁŠ.«eÊû÷Zr¾x¥S7 i%¾6wÌsÂj¢ìÌÛ¸¹B Û* 蜤W¦åÖÆáÖG·åe‚ˆwœÁò±»öBcA¬HGfô)`œ‰2 a^&¢»Üè'\¾ï…°M­¼\h½®Ær­™rïÞYµ;uÉ»½¢Câüt´Ì'&W"?RXàŸVV§ ñÝp8+æX¿6(yù’qj²@'hS<¾×³VÊYOëɧK•Ýy°ºœ|pð·õ¥Ô“׋ÉïÞ¦<]^h8 Ñèwøˆ(œ‰@°\$Hº v4ºPÍ9àŽ~U'e%u 3þ;ÃõF ‰•D©,i6q¸ˆem¼8YªƒÎH‹ÍùߥWŸÁó¾ÄsÍhÊ~OSË5å.~¼öåŒEväÃ/ìß8k¦:$—åI¾Þ}ÖLðï‰èšáß±sš3Œ6§b°fÈЇ¿•èb¶­àcº#Ñ-2éÀ_ãÄím¤§/õØ•ŒR¯’ÂÑÔeä#ºp°}ôjóäÀj¦¢}výL*ž ºMDŽ67P5#ÂÕ suPñ`닪¤+Æ‚,…â³9Ô©ÚÃtî|’Û#‡Ÿâ̤öåôQ¶·¹s¸õa[ö§fHb¢ÂêtƒxâÑÉÜêÝöž"™‰ÈðB5)$)*ÿœ˜§qnV<ˆÜÔû‚|vkÛµWÞˆx;m/èÕ6pgÕÞîþô"iòËäfÂ=ÐãÉŸ›ÚtåÖ›Ãr ¿AÄê·þÈëuÕ;ÿƧ^\âãG¤ é{£+\#þðEÍ$Jr`ëWˆî™?¾Aª1p#ãI” øRU»ï§|€tÉlÄÀÿ’]Œ|opþctÓíÔtMt«æ²m÷@dùì'«;Ð0÷¼I¯övDýþ1æ4Òhø×ÓéV¾tz¦ ‚X–[ëõgÄ ö&„Åø7Q¹µ³ùóA5ΙàlÉppWE™0J%ËØÇ)ÒX6øbò’ì/ÅF÷¿ÿ‡ý²›YÃuHë <ð;qøŽd„fô„^Ï¢KÖ -Yã>žt¦ãÕ+ÿUxÛzåÇÁñÝ$i;5°}¯ËâÈ+¿¢öö68']-E™Ï|úzÕ^ù$ÜÛ½Ç->:½ppO²ÌYmСq_,)‚‡r¯¥Lp§¡|¬.µ>ìmîW“(Ý.É M†þè!œ#(Ë3 ,”•PV…ÏW:Ë.½avïfÇßéydAš"_òµ7º Lhð©ð©qΙOŸ¦‚«ê=L]‡KµZ·UkÄ×µª1”0éѧJéYš¥C³Í »<˜‡† À`–­OÉí|l!ßIB$W=;yh2\ÜT)I­±º’Oq ÎÈ›¬jI2&°Ý¬áM-2õ¿úÛàö¡¡bdä›VEPÕT¼áƒÍêËÖÎîît0Ë‘_{ƒ®ß¯¢«û›Ý9ØÖèѰèøãp˜Ú‡L„™ºüV„\T¤ía^,âT`g„?xáE5 ü>ñ4âùëƒz9Ó.{Ã¥´´Õ‡F´×óÏìQ7 ®¼N‰IAcÖP! Ã|g8áxîÚ±¡¦‹ønH4 l#! ¬õiHçÎ5¹•jÈG$L“¾`s³r™Æ—›.ghùñ!™JÉh!ÝàÔ¥CLKz®ƒªD¹aw؈%#Zø¨±0Umsgóã=•üŸÂ–¿P+ÜÚâ‚& {?õ!Ý—ÜgIøÈD€-¦:ôñoï« P˳AÝ^õ2A•gWq§dºÚÖáÁì*Á8}on1LŸ>¦“Z0óæøoò zÍÎ7½»GÝv¹ôyïî{±Q+?m;¹8-¦=7qÝØÆ9¯û‘rr­±Ø”â¨03 ýd ™ô©2n ºrëã¦Ä~'bôSšßúƒ ë¢7ºº{à†jzÊžèÓ¤§'2»~k|çæDÍXÜ µÐL¹k:›£TûeªüNx1þáwk¥‚j¼ønQןšòVŠ ¶Òk¥/Âò/7è§ãcõÃ0W1Ö-›ÿõ$êvnN%âsŽhØö¤žOÆlÁoÄøÅ„Ýù=—H 馔|dlÖ9æ̱n<\VäÏ¢nÞuYË‹P”¯ é3#Ç¥uf¨3“ð´[‘}¹¥ºlTƒyƒÄ?Kfœ`aK2M$Lˆ)P2†3n%úU0Âù¾b‰íÛ9+Ì4BÆÛ=XrT ù¥¼I*{´\:ªZªüR$'­ÝöFýd&z„Lœé‡HPrûœÎÙ9=öŒö8Æ+ƒþÆy6IBv¢º> èŽÿñPá§ÃˆWµu¸¹qøa³Ý¦÷&öcêâöœ9DðFmxƒ=oc¦rê6¸vyÔÊhߥšNê‘$ƒ‡XA&rËj©¤ý õп…¸|;æ?„±Ão%yIºÏÓ+vLj *žÇƒ¹–·?¼?ÜÚ^ÿè:Š¨â ±’Ú‡¨ÌO‰õ¥1KáH4”³¶‰ecûÃl¸ëˆ1«ÆlTºwÐAðêà5ÐÇlއÇâ§6KÍ“¢¦Á³îÝ`æ–J€Á0‘²nzè•9lC¶9£ñhÒ+M›éìÑ!Aù*~7˜¡@m*<èô‡ÄÔ4nUTþ§EB¾Å’Z[S ȇô${ÌÃñíbºŸhë~ètÿ?‚yÿ©a,_r¸³™Í6f7;³NºJö\RÂ)çÒ&I§…Ç*ûdkV[ž³VÌÉ ¢7 t©©‰½ížav$IØÔr›xs*§ñìÙÂÂÊý°Fþ Ì‚ÓìªÙuíÜoÓäë~ ¦âìz2ÁÓUïÁy¯ÇW"ÉSJçä…Z½oûbФ ¥-÷%GïØö@À6æú0ìõÂÈÚºêT(ZÄåGþà:…Ñǵ\N.wµ6×ãÚέâüï[{Pá9Éß:ùÖçD›2*¶¼e ÐáÈïzcßð¯Þ€Åí8 ÍO.—ˆm&¦êN ®“‹ÇÖéà4Ä ±Â1°S0»Ó˜>,éM½øO –l¥¹4+ÊWªÜê¬À]ÉrK3‚q%J±ø@]Îü»EÍ“Ï/´°ÚFVÒ ;˜‘ËrØÎ(Ž+ª‡l©ý°9 0?ú„#^Xaûäs/è‰JÄ 9Ž‘Ò|¨»pÂæ':åëÖ˜­Ÿ»×(Æ*‘CrÒ^èu5ûÄeÁZ›€3òf‰Xw¼–«ºŸ’ûír<¶êõÈ»öï²v1˜ÔÂÑE½sTqµ~ø7ë¨^î\ú+’œÊ:ZkòCÇnE4ƒ?f49Ë嶤ûf4˜˜Ñ„D›y:³0'½É'wÎÀ+jÈFx¹ˆˆ ×=ǼÁìÒ{Oâæ`µ,îQ,Œ³®T9ÎHœÉђЊÀ”ˆÿ ]ªÅ(ûG=¤  £”]¤Âë ë‹¼ïwýnÎmÆàÔ6áµ6²brî *‹0jÍÁž\Μ­)«,è—’Ÿ”tòÔÔ¹uF«¹u¢ÇÕ¹vë\?P'7•kO=MéC’ÖšøÇµÜ§©9+}$ÿ¡žy•ÝHœó“5¯ÒÕR‰ÅÝj©WY ò«©.ÚW³3If2Ó¯²jNŸ¶æÔ«ô„&#Þ¬M)qr ½ˆSÀ*ã\EŠr hÕJ.¡GqÞ[cæ ˜v7pˆ¾éüQ×Þ(™ŽZ`Y®½^‹Ø“n·z áÂÍ(ûUxEòƒH°»ª¼½À%Æ¿ØÆpÜRy»ýÖ ùd ÙÔTäÛÖ]õÛ…Å>þtS…ˆüP ®ºI_sÿñ?üߨw3ò†Õ…Zs¡>Ã^äÐñ?« ’Øž./ËçÊRâßš‹Íÿh,,­¬,<]Zj4þc¡Ñ\h.ÿ‡úo5‘2˜ûùßäßÜ7&z€ðµ´ô“‘}´ƒ®|%dÑ‘’ð"5–j6Âá݈ÞâF âÕb›üw‰ÿ.óßþû”ÿ®òßg†i¾‚¿ þ»È›üw‰ÿ.+Ä­Sáù˜­Þ„“tª¢¶ðóñ†GùêÂJua± Ã<»TÓg‘}ˆ6€8ë—åx_ÿ^¢Pé&j9qÚ&~ž˜‘Ž^ÌS}1‡‘€&Ô¶v·7ÄÍ?p ¦¦ÀZ§Ø ?ìÝMu•©3é 6Ÿ-óœ™ ´BÒŒ§ƒ³ ±‘Dc©Ñz8®öB9ñ™ƒ®vj…£kd˜L´ù–ôÔÞä¬tÔû ãèõ WÁƒ›8Ø3€A…Y+B2’x ¾oÑ4¡áUàêy<À®íà¨'3küâÏ|í[ ƒ)ÿÏ[‡ïv?ªõ_ÔÏëûûë;‡¿<ç‹LX~Á?ž!a ÀýÓ˜F$ðÞQ× ÀöæþÆ;ª±þjëýÖá/¸Žx³u¸³yp H¾Uëjo}ÿpkãÃûõ}µ÷ao÷`“ÖöÀg~’êß3·ç¼:°V÷Ç$aD2æ_h9µvžIäð‰q‘¤û‡×Œ`x°Ÿ¯jÇÎ>‡*„Э¢øX5Q«IµÓ;¬¢–TÈ\õhÒÆTœägõ&8'øoz!¼^O†òÛë`a±ÑX¨ §=ýá`]ƵŽìÑÐïÔcÿ¶ã {}ÿp*è4Ħ9gù- ¥ƒ_6©ÁF:Çh^á‹}˜ lBÃLÖ Fmµ>‡(UáÕ÷ÊìýœÍÃö…Á»Éx,öcq9$” ¼f¬!àîÍ"P{,ï(–w´€rŸÌ¬šœõ±±ydþ혧äü\§!à$ü6£Úà»÷á ½Gw²Iïöqh(¾8Q ñh$ïJ£N=Ñ ”“!HÏ —èé¢X&¢QÞèb"Zve X@Ül…ýg8/$•Dnˆ‘‰$;°hL+0âŽ1 ÉØÍé^€¶ ºs_, Í Œ(ͽxØþ€M:®"iJËÑ"ýÏüxñMâh`íÐë\!ضÁ².€qÃ7€Wɪõˆ‹ðC¸=˜¾!6±L´±mâF7žš a¥q&áCtnDö•¾ ¨(Ïpr]"9ì¤C[žáðC˜Cç–Ð(R€öu0»à±jÑ?è•®O3cÍNQ]j‡Ô¦ÔÓï«‹V‹·Œ³Ô@ßÚI…ÔN"‘Æ&Ú§ÇÑ%ÇœÖ';Ò BŠTˆ{0õNkF}’D÷« ½_u{}çÛu¾BÚ¯îîmî¯ní¼ÕBµD“MU£U~VY 74çtÆU™:ÝVìš² ‹ éfzŽX+l3@‡¥Xà.Ÿ'GBóØ÷µ»o~~!ïÞ¾Wjr’ÄÁ öÕZþ8÷_Zj~Aíî’œvŒ­n¿Áh©æšÕ-°þ~ký —Û¸@H8Ü®èÈè‚EðÆ«^VLóÏìW+žk7vÁ@åÇ(‹h¶iœƒ·<"¯Ç£U!º½D¤üÌgŒ´y/bÒÊXP˜ÞD´¬W¾{ÚuýJ ZµÙXXP7á芎Ÿ}ÜÎÕãæ™w¢}49÷Ø¿jôP´³=ƒæÃÜàØXzS]fñšF]AÚ'Õh2(†Hx³= ”çÜ:uzœ´ŽWÖàà!³(†þiÊ)áÛpÏT&rüE[Oðw1Ìá¯ÃÎrsQ \ò‚Å®?©’àÆÏž6øKÓ|éú½±'-h7l©<-"…€À¹aúü*8“OGñù‡MI«úæßzcÙ)¨;›KÝÎHø‰¸;ÒõæŠé^CÑÉÒè;C9j,6¹OúâÖô•ŸŒº +ì_+c»À_2x|ôŽÓKâ..Ý {CÂ6iëâRîOèÇË({Öçžré>.°é7Ó Ÿë­@»LÆ—Òï(@»…þ&÷+8zq£€awW€»~àãÆïðG08#öè`:$s–̯›Q¤«T¯o±E¢{ªÒ~M"¯¨b̬£L¥Q÷Œ¨‘[‹ždUSº-$¼³íØìwvËæ}oÖ¯—§`¥È“Xþ®®TIü`c2¶´¶ð–Rð–¾Á¨-Á4QÖÕÃ(Q_—ÔŸ×ã+Û½ŽÛS¯Ù”–¸Õ ?6£öà‘âtgY±ö•m—Ss¸ø5ð&Ý+†÷‡Ð61ý¡¯‹µ¯ê 1·Ý¡ÇC"ô’€ãbä /Ö¿®ûðO·*ÎêæÕp|ûŰõAà4 sÔ½Cm1|Kº”`ÅýëC°åSh0óÜéÞÆq 4€>ç|}â0ª¯}V­iý”‚þêÔ‹šä)åxM2/8içÔ¾=ìÁ™r‰X/fUñìƒEì´ŽDHì28°a?`…&‹&,G{a¹Q+kí’=ïŸ4ž./àDY^]LxÞâ³+ý žê“É Gûvõ$þ¹¼_9z¿B 𣕧'•%e¿¥áA ¿ÀV–RàúÍf)läׇ‹7êËߣ³Þ‰/_ý£ÞÙ‰|½Æá¿là»yy=8gç´jü­³t‹Ù²qäQ·±pMϺMùè¡@76VnùÛõPŠšˆšr>º–ß—«Ä– tõê²|‡žþhpTýc±¶;ÜœØp×'h>EXâã™|ᇋWxðTòé4”|ð‰Ž(;Ü`5>Våûý `»tEâË”|œùú‹f¾ôô—žSº±çE6YÜÇ×#M¾ G¢p~¥ë.5¤ïÎÏ©"Íd‘æt‘å…DüL-?sJð/·@yÍEå|Ÿz9J¼¥ ØÙáïS/ÝÚø5U :k¨äÏé"£§+•~àß6Ÿ©ø«}5h,,Êèé[ÓâQÔ0_†4§ò}@kŽFؤ\Á©.$G4Kü=Þ”|¢çÿóÝ¢q5þçPp¿3ÚÚÔJø>ìœi´Þ¼¾¢ƒ jt VzéD¾SíË7zÄØ]žÉ“žï”Ö?š¾ÁgDtWòa …Âèêñ·3óuuåÖ|íùcûw‡1„ëUóâúYüíL—Cu Æ?ÇÞeˆž/'}´2„$Ñçê'B 5©º&¢äC7vãÛ5¹]M½…ýªo¿ø ü âÿ]ƒ‹ŒýAäI¥¬^M…ÉÓªjÝÐù0%ÓùÒ*+«ŒôyÙ1ß‹öÉ¢p†ÛZ‚S+«ï6zc±öøvpb ØÒM®R“š.ðꯜèŸÍ—ºå&ÓÕþ²ìƒk¦¹7+ËÊÎ tiÔ¯ŸY!¥N‡B"#Û©n½€Bæü-6J¬(Äáìéì†n¶×ã0lÅy²æTq±Ä?É8]e2~ç-N—UêÐâ™Hà¨ÅØ‘¸,KÍø9¿ø½“ßwVvP£»QŸømVó8ŽÜå2¸GÔL¹Jÿ³qÒ·Y7XǧóãBË*(éw¢ñãBÊ7Q u r#Ç=†J3BĽTË1ÿb¿³ïh9Åø–WÜ_Ìz$*¯,Åï-ï’|ä‚°üKˆaaÜrÉg£Ž­0êÓWaVÎ|ý¶ß³ßü3óíºlë\ÌWp2\@»ÝëDZ²¡Ó\à÷G¿OžÉw¢0ò¹l¿,ë/+·„&ø±dÚå¯wÝ‘gÊ€Uâ§`–äKÏð{·Q`~œK~].sþtAúJ‘Úç·ñº2?ÅO™£²‘_¤œ`¬ìO¤))'™«jœMÄ@ÀâÇìÌQÖL–|q‹£%sg\?vË>fž«Z6DgASó¤¹}¹h¾ZÄŠ%WW¥]ðkò…=ØÊñ±.O™k³_5žçf¿öõ+î/ꆃK¾º9/ÁÅ%_3çæ”Ðœ\˜·á榊5ÓÅšYÅ–RÅ„«KcNÎ)¥9;·3l¶ˆæî¦ ŒREFÓ…œÔ\ÞT$áô¦ s—,ÅÜÞt1°w©‚Âñ¹EÁèÙBÂõÙ×ýÀîNböâ¯`÷Ì/œ£\0”^1¨¿5-ʈ¹?.ÃüŸ|û»þt ¾0—g«é8=e—LþÒ”0λY6ì¡" ¢ù9¢“‚ é eÃíñCà šàÍwæõ<ØÈDUû¬¤þª{-¼¤­9:o¹H÷ûYücuå6þA\e¢>XËăëÕ¸ðõ3÷»iøKùu-‹ݾ4P˜ãä‡ÌsÚÇ9*˜5ß–¯ËöëŠýl´k¾ƒIåÌ­Ê7Ïâó­æÇ­¦Æ:£EЩ/Œ¬ó•yZ[×0¶R€Y[óîŽÑÀð¹ÂË6þ•f>ŒaiÀo$ “´õP4ÖŒ>YnEžn…M©Â¾Ï×äb@,×îq0ÍÕ•³¨;ÍK»Qó5gË^ÜÛ& …OEüÅ.GÀŒÇUýtØÑ_"ïœÆ‚ëÃAp;ìd꼂…ž¡“µŠ ݺ Χ 2æõ»ºÓ“n uîˆâyI”Q‰Ÿ§$¯žù+Y²‰ŽÌbåîÄöM35#1]Ù ]ÈV³†‘?› +«³tƒxoêôi¨3&@K!ÉeãÆÓ4ƃC‹UË3 jhR›_ÃÊík=V‰<ï²7 ̳¼3sÈ1štà‚u€ø¬ÎÒ”¦Ö eeñ­FVC«ºš ¨*`nBÇ|y7{ùuÆ€uµÌÍ8]ÓYÔÉíÌ ÃžAq³¸ü™×óºNÂY_Wc—}]±ó,•é!ßә݆+N3•Ú/´ÓȨf7’….zá‚™pÑ:£pº³ÿòrú”½³ŽGGG]ü²¹°¼ÀV6Öî"YÓ„WÖ&6™v¬@ºìgSQ-¥êö#·Þ­¶y¸â­œRsyf‹Ë÷µÈ=36¡¼Ì@g¥5“¤^Ýb³¹.—Ä_®!A¹î¯r9´Ü Õ¹z'z`¥›ó{Ö .¸ý|vµ˜†pÕl̨¯¥—DõæÑâìÓ³òìj%ÕÚÊ÷÷)~ê‚p܃µ «NõU[sN½Ùú¸½ÙR#Ÿ/Œ~“ë>ì*”Í †ê|¥ç G‹KÒšó埮ž<ÓåíWzþ¬)Ÿ5ÿœnñ7š+Oõ˜OJ_ÅÎÛê®ÜÐc @c-b‚­5atþ@g„ΞÇu²¨âT *óF¸ë76‰øÈ"‘RB*Ì©­B_»&´Étþ€ÓAåÙÔžâ¢Äv™g’š±Y[|)7G×Ytx†­NÒ È’C_ÜRù+Á-¹Ð¾–* {_5PâzˆêÚ¡ÒA3Ž0ü0,|5•ª×3wøx”®M}áÐñ±ÔÁÎF8MF¼ÌV©–œ› J"…óO6@£—Kö„þ–&£`w×AËÃ4°üŽ3á|N‰éêŒCŒ_šÒÞÅ`Ò—”æÂŒáOFCþ¨ f±(“±•Q'\Ü<Ì}èbq%É\5óà‰‚u•ò´Ÿo;‡æóXŸ=ÁDln²„ƆÑböŒÅ7QÇŸìF0+„,MãD8Ìn1nJpʲé×è¡[:&€Ô,Wg“‘,u—l\®Z—ÁÇZ/øõàÒf á ihÆâB|3äðÜŽ. /³$úTþ³îRÜTŽ2Ui)¼E!Sá:º÷áòצô 3j.dŠ:‹T•·AýAb&¥ãª0Þô3¦—ÛK½êÈ?óÜÆ¨jk²¡=>ž²x„o«öÛ³¬1Ø€º¶+7±I(~4fT[h.Ü[‘ ýq½D~;‹4τѹ~šÑ4=Dî‹i¦}úeñZ˜1V¼ËÞõ†»)«äÎ'‘Žƒài…‚Ë-N“ˆéBÍ,j1¸l.Ì\„(Ó¹øòhiù$»Þê}õŸîž­d¡ð3“äÑ,ŠÆ[ùq•¤ iÌäA˜±Þ’.!6F2I¤ò0C‹ VvÕ0…l憬μӅÃáò‚ܨ†Ã•…Nõ!9¼ ²˜O¶Ý¾¬Úü<¹ŸÂFKYËeÈZLo¸ ®Äj 1ÌdÅÆÌ-HçëL…FͺJܾp1]…Ø}-zÿ1M‚Î#:C‰âbL, Ï2x6¹[èlÆHœ2pŽâ‹½åì…æ‡_›*:‰!U‚AÛÿYaryK øÑÀë4ïSß9`i õWÄÌÐ_öX?+_ÚYrËJ¤×‘úûbü5pŸ7 +ãê xšQN´ÄËüq¥?äºX&Cî¦1YsËò¥÷nñ¼IãÒÜŠ¹è–I«Îš´?ØZHczvÝAò]óÏn:óÎ’ã‹fì±á A$™Â”²ÈN,&?;¥.]:?£è÷Þ/k[•`<6ÆÌU÷EUÞ̤ž=º—)35í1ˆ?Ðû•¥S±²4Ý#¾ªV³Šÿ¡ÖÝI¢_ÎüÄ䎿íp2úœœGÓÈ=3ÉU¾x4Ñ,yÓÁÑl¡tyŠ‹Æb©ˆ_(ƒŒúG°Dœ%iëDM¦ð˜­ôñ‘y?ãªx Qó›š4Ÿe*¢ùy²ô­.~;«ü­[Á[|¶˜ÕñY¶&O¢³Fö0­]'ØÐîþ$æ¦êøÁ¬©´ò-çî±åuôÿL„ˆïý¹l†Š)ºœyq{³¬ Sû56%»±C]ÐBãm›Á£˜¢S¾¸,zú¸›·E[c2Êji2J÷s¼8[|Hð¿:±æ žL¿Í`£É`q&ÓI/baÔ| $Ç•}3Qmé±ÕœN5gµvuO[ÍYm]ÝÓÒRfKšÎnj)³©ÌZn[ÙzØ©jIu+F$¥™÷[‰¥z g&3¯òç(ôºH«™¥’½׾Π+°­œe<Ýõûþxt÷à®O[ûŒ›‡šq^˜ÙÜ8˸e|q‹Xvj€Œ9Ö–Ÿ3å?1Õ®3ê/ß_Ÿ=©èoví•û*ß6Ÿe“`6~N’1ž]|о -³Œ8n¯zYFc0 0ˆeF´¹8K>e¥WžßþqC3b:ác¸„8¢9ËHñnb)c߸á\¯6D£ÖÁ· ý=uT޻յw›qs£sqLë³®³.È“¥¯í w=–?]ßÒÿ³(Áys¡Q=Ÿü=GSAŽªÙ žY§šþ5Ó€ðz³—gVÅ›•å,{Û•åêM7c–oVŸ]ݧåÑ7²4=·gáí}bõôýÇ-;‹v†=ªØg_Rçîn|>ñQ鮟¡ø‡ö,"ÄvÙ¼±§ëýcÚØ3èǪ¸,;J8.8 xîœÈP6ðpdzƒØyŽW¿¹¥tÐÁq㸆 ™ *œJŽ‚QEǵ°Y-†ápB']MVó1kiU}©÷¤àÊBç1ÁÆ?ÈÜ÷³­páC¡b ,6ÙšiÊûβ‚Š÷=ËD ±bf0æÀ’¬{p'¹´%ÌÑëÍ “ËÕƒ•;œ$Ç3ÈuJ„oJ6eo8½`“÷‡-á£KfR.—ÒÞÇ cö0ÉT‰­Oñ¾_ÄÌ«û}fˆØ‘/Ô“ýûð—ðÜjŠƒ,í§xÙÈCnáÆÂòìð$éô÷ÃvzëTéÛ–Õ¼˜Rm8³F" ¸¹¤5S©Ž½+_L)8˜ê¸sÉ!y%KÕöÛMx„˜WÿY€Ä°DbC¬Ü°$‰Àa³c”«Ýà‚ËÞ—]–¢º®W+×iÓÄZò~?ì"¬×—‚´5 hç¬ï-e†aqÇX5Á^3ƒ³d$c–”S·ùù0Ê#–Üm>oÒL¹÷g*žQ„é¿›QËD,Ž‹KX{fŠ8GÚ—»+žÌ‚'nÜcìbd 2'ÒNÐN©Š¼>Û6^x ÑŽ¤nCB§É÷Ú½t>™bŸDdûä„N’7¥lÙ¬]–âÐJŽd³ýAS“ok‹“Sâb0©ÇF3ûf‹}²ãþ™Õð:˜Çc|jJ9cAHX€HÍ&î! ¸‡özc„ =×¾Úþpp¨6w^«­µ®Ê‡4¤Âãêu£A–Í”ˆÆŒukÇ¿¢¼s„óGùÑRMfƒC½!P£hë\êxy4“üMrË&œþʶ=®%xµL ³„“ë„\/2e# Áç6ÞO¶|Á¡UvÁ¢SšHü;Ühñgo2ðt`:]Ä",¾ßõ“=ÒÎ=eû½«°½‚Ÿ§¿ W(…Ãó$¼pðU.—½¾%žPcÎZÆëm À§g¥Áñ³ð—øq†½IdfX¾ŒÆ²D·²‰© ô<ˆ'_YBèIØMYÄ‘ùê4Ý·FI©X¯ÚcE¾Rs·ö¡8­ ;}ª‘À¿Ö†^¯o6‰„¢•æé‡?IO¯X0iZCG¯.Œ0³ö‹Ä›ÕˆÕ ¢ fÜúžTìšanWäã©D ³í¥E¤\O­Ëè– _àèÛ÷%ª¹Í€âËAö›Ž†7‹·âöÍ…¯œ˜ev7‡ó,OÙÒTM á’óàþ““ |ÒµÜ]BuŠ{I‚2ÞŠoœXK¤’u½º:JN¥Ž½§ó–7ñÙäBS8>ùåÕ3g×$ÃëØt£¼‹@LjíkæA°†7²+qLÄ3@ îŸ*ð‰ÛqÆŸŒ¹\rMÌìÓDÙû›˜ÉšÈ¡ºüãÅe ÿµ˜®½òˆÚ+¦vÓ©­i‰üäðô±6›}±EN\αÏÁ wböYðÑù(Œ|§ÿv^»¯,K8ö¯ìóØP4ÞY/¼NGqŒ½ƒ«ˆ¼äÄw”Ÿvâîz=0yã)LØÙ>Õ\glHö8J°­vÇIdlyai—}-ª´Ábü2:}·ìë’h®ýD:P¡/œ¹Ìß2sõòí„@¡OèrbûÓë0é ÆÃx½b5s•x̱¶âN»Uq¾f¾?›)Ћfv»YutºàÞáX—Ì4Wc®™ùíRÜ)%í‚kR—ñæÖ8¹±ï–_¼T³ ¸«Æ‚»š´àN™iW½‘‹ž£9¯<çÅ•ƒÒÿ¸î‡¾yÁ?b¤ý¦•çÔ[’#GH0 ¹®N«¥ÃåÇÂèaG-ÆN˜)6)ÅžèhH¥¬›B©4}Á#0t ó^Äþ%;ÞþÊjYG¤0ED$sŽ‹J‰ ùÚ‚ @"”Ò7ýz€ÈG€<Hâ¨S@úà›|mN#x£“ ¯ªëý]ãSæÜu?½쵑z›ô)Çs’4aŽŸ;7ÄeÐ"¯ ¯Ö™]+Qó:aëßø‚‹ÄÈ ¥,ùLœWq §rÆÜ6j Ûê™%èg1RÆ%ˆ³9p8.NY®R좙`[ñÆ·ìjâF¯œ °Ÿ~^3Þ\KÓÞ»e×>ÚØ?Œ2QòÊ:ØPרò[Ï)»aÊŽkTGUFR‚RfÚ©/œÎé<Y¬„DÆèˆy‘ðh“l¯4¦ “g¡Zo —{³o«-žÅqÜâ°ûsàt`_8Œ;àÄ<Ãu”èÁ,Ô²X½fΠ½@™æhË:¢@Ö›è®/Tˆñs±ÌbÇÊ6kÄôüšŽúþÝvÔ?íÝãŽÇö‹SûµL’dæ ¾¾)Åî•Î|³Ë\7–A^™79fp&|úÜ\ê¸!’ËÝH/7i¡>Cöæ7’Ðet®¸J/¼$“S$'¼Êš¹Ó›}ð9WUI·ž'FÈJ„' Ÿ“ü€ ZžL–‘ë?[ÂKÃÛZûþÌOà¸[ö=«‹ïÙÏÙ¾}Ù=lx‡ø½5u´…¦‡¡CáØ¬“N”è^¸ïYyxoRmÑ´'Ê m°9ÖÙÝ7m±„=«„É™/Œ5³eŒˆ6 F¶öÛhÔ5Å%^öôl™+Òx]úуËëp:éõ™‚÷e²U GûÄÆcžBhkè™ÔŸ=úî1Õõ>«Ï ÌzþÔ½r̨ }$EœSï9E'Ý<ë!›ãœòILi©¢×íV/ÃðJ8·py;ùA¤ q†½vû Gã–Ê;¼óÉ’êŠ|Ûº«~»°ØÇŸnª „JpÕMúšû¿þ=þߨw3ò†Õ…Zs¡>Ã^TïúCœbă/<]^–Ï•¥ÄçÂÂâÓåfó? K++ O—–ÿXh,.-®ü‡úo5‘2˜ûùßäßÜ7ª~ êÑ%6¸^{U娞œ_Û&ÕÖÙ²!S1ÚtÄ|’.. º~Õ??÷;ãˆSL›ô¦qÂRõPJÒétïÿÝ#³ýT^{Î =•Ùþß0±ýÿ­yퟩC¿Ìp{=¯ãÖL Ù\ÈHiß@Jû§:¥ý_íSíçÔ.mù`À’°cB?t¢çßÒ%lØíמú!ÄÇÝN§C:¿kg£b¦Ä {«ÿPùy"0ÈWŸ>9O%-qêaÈyòÏY˜3‰j5!k©Ÿ ³¢“ÓF•Äut3Vqùã¼èzMòVHQsê´œáp,0b‘”ÆjŸÞùQûçt2‚E»û8=·î|"G÷¯’¤[ÿ:®!Õh“ŒVj{ÇŠäøì£P¨R½Vž¯ÔuIÓêL0Ê«µŒ9S ¾JÆPú*Ö?·i,0ÇR¯Ó5dlk ¸†·u°Ž~žEÏqh Ìÿÿ¨šN›™‰UöîPëµCΨú9—õUõé—- NûÌÉÁ8©8§UÇr"RÑnó+‘_¾t8œû#NñÙó."^ ¼Ýû>¬þá³~ZjDcP\:ÆZAŽf4e> .D„æ,c Ƭð¾òõ±Xë/)Ÿ8hœ@¡$j-Öš“Ì]&4"‚Uæžy Àèæmz3C:œ¹„¶•Þÿ’Æ$¡¯åœU6{gM]íÏ©w{æP¡ÝˆÞ(@‘yÓ]`]/:LÑZu;§ÌY£‡¼ª™Ít½èòc?wé܉qJsôÿxiPR:î9 cÒ( r¡¤ôãv[c÷ÄÁ=â‰pº rÔÙ&¾sŠjòȳŌˢw®¬~¿"fù­×Á} nZPVê†NLZ½_¼»od [LÙ.rD«LÛAÓÕ¨-1Ü `°€ð%Iuû5ý·§ ää’˜TÝ~CK89?§Þõûw~þÇ<=?tvµ©ÒÉ] Öæ_æâ]>GD;~S ²ª•“„À¼Ï³6“MUÍusšô¯“Åœ-›ã;L3Ïò¡µ^7WY7Þ'ö¾Ù™rZ2Ü?qJ]ªŒQSÍBÄs}y‡ùÖê$B(<‹:ÐÅÓ&½ I¸£¢UYkƒV°[0IfçÜø…® ›ÜÃ9¼*•¦¢p[bMÎ@¿¨3Þµ¾Å"tÄ‘xvÇj3 ðä¢wW“zÅŸ}mïJ ¥ÚÔÀÄîÑØ"š aŽ©‰‘ÙxQ­$#ÀßëͽÍ×›;[›mbäöˆ—ó×Á(ð}—‘³™¸DŒÌ„Ÿ· z»ÂÊ9ÚÉE¢PÃÀM-Þ ;î°J5iò§:§¢4ZŸñœƒè)xÊü˜@ŒoˆYQEf"‰¼FºE΢ijC5J5ïø´Ó¤Ã=XbjòºbPKüçaÅָסµ)éKœ¢ª¥ŽóêE²û$®­¿Úx½ùæí»­ÿüÛûíݽÿÚ?8üðÓÏù_ÞY§ëŸ_\¿êõáð·íëë›Û»è BgQo>âýÛ!ñP,6ˆR6‰ZÆw´ÔLð%ÓÇî&[=ŸØ)˜·+'„ׯG¿¶NÊ-UWõçIg[ýª0Ï].œ´Žën¹R›úEb sšfómÁ0 œÛ-)ï: ôÍëi×§q>N‚*À ²ökfÄú·øáÜêyn^Â}oÉn¬íñ+&ž ×ÜP%¹“é$ôøãS—6[7 \uò‚½˜ªŒï†PJ÷˜Lé9òÏ&AOôÜÒ™’ÎMŽêP’wÊëvùb—¸ôI¿—¤#8ذÎ 9 ‰1ôº¼UÍQÐ ¹#|š‡8yíþÃrŽGª€ÿ妗æê1—£EG–cš/ñq½×IÜËž¶ ¸â.6C£»\œ¨Ý×dÓs¢$o¯€êÒX-@-¿hZí qö{½ZfwPôÝÞ‡ª±P[\`ì$v¥À’A‡°ÜfL;,¨H'é Pê¢| 㤠훡ÄU"q“ç Ã1àn„ããùz]æú¯óõ®þÚâ¯nÔ»ùºjQÁ©ÝM=pÄáÑr2Ìiè»bæÇ¨»={Âíë†4ŽÈ¤»ßó7`é…!U/Ç›Œ§`‹ü²-±Ð/6Ä}•®0”†jÚ×®séw®htœ—¦ µXp‘ð5˜+hnlÉ-¡f¢œU&R=’¤ìWR3bÉ­æRt±©™cBû¯¤áî9”¡[¢‰»ƒ8Àû€A&@²tjäœÆCqnyðPȉûËF/Ò*ÊNÁ˜µÂoª¢K¶Æ 3¹h+™3_éôx™ÁkŒü!ë"+øà=E¬mš­ý­üä†É¢¡ô`=$u┇é–ÊÇ6wK’y:8OTqiáÙŠñþ™à+µE4PQ«g‹ Éú鲡’~G~Ÿ° ì“[~ž3A¾Ô¿ÒíF¦T$<Ùé\ëÜï áéçÙÓÕ*ßc“#<¾‡LÊÉçîr kaË„¨>Gâ°K “…c 9ǰAÌòÆ(à>Ô=tŽó¡G$Î(]@¥ä¬›‹ÌCâQÃùâÑòÖ2¬@r,véÎ;rXH#[Baéuì… NׇÁ½oê"›’ËÊöSQl>×C;­s*oôPа‹á^/Ì ¼ôûz†dûÍq+SÜX‚Lm6f¬¼ 넎Y¯sÑ”¤Àõ…!™ØÓ=VÑõXÂéo› ‰9ž>ÝÃïsj¶‹ôÁò×Üè©&/-kßÈ7bØŒ7˜Õç ÅÐ!ÃT° Õ¶D]‹2Ö/ƒôŽà|Ú}¼š©~\$4+×€[¬xokpòófm‚i¦iú¹ÏÃüœ3ÕŸ;Ö/¤YÝæññàY¡‘tÓ¬ZÍé`–ÕéyÒ†Œézí²PÓ•^ ²€­EÍX¶Èîà‚ù2𨡮`Q NPS*GP_Üç¶ï[… ”§Åœ×+ÒªØ#«’Ÿæö“û(‚\˜¯72a¤€ü{Ñ–ñhÇu;ÜCüžÒ«½å‡ S·eß— ¹4#ârJ§%kzBÅø¥jµZAeÒ&a” k]Á"44S¾Ýü€ˆÉ~õ}¿ Ö¥Ö¨0ñó~Sê':á«Ë K´øl¢•\òì•V¤ :^8iy]^/8eƒíÔ \THê°*…‰uÄ×Czà ×>[k-þ$«ÖOÊóŸêŸDw-ÄäÖj®om­ï¾³ë‡4êŸ@ê>}²¤®Îǧéq­Ç?OsI]ùLúåÒņÖ}Sa­û&hµn~ªàâtA[Ê!ˆ¯ñÈn¨Œ–¤ê}MdÀBüÊúiu{2½#ùÄÏEÓb‚Þš6gPÜF~ÆÄ®%KÍœ–µé.ÈýÅ#H|‚úÉ:òªÿ8)[ ú(*t€“ Z²b޽3ÃÔ’ ’ ©''åøÆg¾Òª$»î|ÜKÐô„Ì89`Ì ARäÊ»š³dÉJÐH.½É84ª6Öwîÿs)ÞªÙû>NÀ êG¢ŽzF*d‡œ£Õ—lõÙ›}ÀÖ‡t(áÚcÔ•;£[e©/¢QLƒË¸Í+3ͧékaÑIiŤfRÇÍVˆT]x#èãø¼¯†Vÿ铯ê—9»/ÒØRÂW!Tï…\ÔÇÝ\rÓ¼õÊP¨VùrC¢ðj#3—Á¹]ØwºdsÙþœVCÃ(DVc«ÇCUïú×õÁ×Zì¡Ï5/i yJ¤ ÖVéKÞ>‹¡¼þ0ÕÊ5®ä¶£5ášIÁa/f ]*¹õæ`ˆ: ýÄè÷I2,1ñ¤GFø¬†¥©ñ2vâC7vO ë΀;ÙóaŠÖg ¼[úÏïSÏæ¥{H6ˆÓ“žSî•®¹™’C(¾§Ú¶ªmw¶ãòö¦³%ªÛcÙù­‚=µ Ç-EÂÀ‹©}š¡µîÅ~€<ݧ\$1ñßPŸçÞT¦5{¬ÒÓê=Pêlt~k÷ld,ÑÉÁÄše†íX;K‘PNÛ†TÇ“LŸ Cš§þYoZaº*M–2ÈÚú¨â2¹x7tˆû‘Ì7ã ‡Öâyrßé¢fï Bw÷ä©´»Ã \¢`©­¡ÁɳùuùSuëþý¨0àbg¤GíæTmwŸ*w´£Éùyp»–7^"ÅŒqôÖkÄòñ 'ðTKáÊüïÛëÛ” ºj<ÝŸikófÕmÐV?O_’þøÇ÷+w°QY$,OïVg+ÿ»mÝä¯Ú™w¥·Jg8ü?Ä+ü·æ þ§ÌränªO1.€}s*N”WVyØåa[”'iPE­–:n¨ããÖ°àÔ,ÌÓz:ßzì1üˆËãÌŸ±õÓed=§]¥êuúP¼¹žÿc¯]VÿçvÌ4w- hl³!FxšYå»bc˜Ð‹wÐôyø*'O§|õm?ÿ)_ç¿Õ·ÇßêÿÚÂwú[BsU¬hm>bÄ~’ÓÙå“甋´ʲ¾qÚ2Ò ºvî.†ÞøRU'@¸ãý9Í3*«k‡ÜÚÁoצÎ#9K¿Uß«o/,içQhý!÷÷‰ÝdSzCnöÉôVøãÑ<´²šš½1$øX0¿cÎn§g6O‡d0ö°òŒéw¯Ç "›‘Ë€Á ’±tÃ\™k0éì¡ÛIÞžÄ.°%µ÷f¯^[¸fg›8z¨j;#Äs‘i´Öè¦2î)åVViðËÃ7‘QÐA“˜yV8ˆm Vf÷ YšÂ@Œ²ÄT½ÞÝ:ÜÛß}Ë»8†YÓÝÙç¹l¦±UÕ–QKµ&†\§-у~tI;?ë¥M³ik¹nŒ×òó¿›¶ªŸóÜ>ÌÞ°΢°ÊF+Ò>;†Dª¹„qã@<¾Pè¹bû>Ø´\×`½‹õ¯1:´³ý·Ò¿¦v:CótcŸv†xzI¤Ë¾x·½ûZÞá1¿&>$~½ûóŽ~MùõÅ(ûîí¾†ŒÇôZ.êõëƒÃý-yÍéõ¨oÞíoó‹QŸžö¯ºÁÈào¯·öe xŒéÓ‰p+nn[×òùøa›Øa<À:wú]‚!³¡G*ì x=J~¥‡¤¿sGõ÷Q_êJ§¡„¡yN¶:(ÙÆüŒLgr"bsHä†DDV')YƒCT;%w]–,/þ4kÏ5ÂíØ‰¶ñIµ[R¦­ñhâ?Pº_R™31¿8ÝÎL !€˜9›·Hòe@.ÄLö¼E¥/•T¼Jóáš³ñZ¹¤,Ò`êR©Ë Q I,¯{!% YœÌwöpK™àÙ„NPÖªHAVØL»Á$ŸKEá§&‘i¬{hÊpÔ3Ù“×æº ž"ó ÷DORËNGrÑ”´emiø‚"ïÄ¢¦è†°ZôÒ੆<]:Iƒvu°ÀÂÔ=i1tñÖy¢+­õY…¹O8&Æ/ì¼çúØéèhÌ’êˆ?X8áxå=Îh691U£Økuàƒ³ÙJ¯8ÔL.ovÀLóy&꧆ð,ž¦FƃÓûU¬lU”ߟôØž“-o‚0xDpc+nÙµªû•JåyT©Ëǯó•<1s‰ ÖIÇ™ÖØžOn¡P3ü° æ€ðd;¡w©Þþv©WÄKõ¯ô —C:¸ †4acÖº±™xJkµ8ZO½šìøo;e”y»‹u´3hÛ ¹'…«Ýæ§êüïñËÏ` Âøåç¼ñÔŒ. ‘¾Ð¡ˆPªžö¦«1ä·…ØÀªÒÓü»ôç³;×?ÖüöÇ m5ñã¯ßÒošfÝv(çÀ—û]+â“~A|ÕíG>øŸØRTÓ|ÿ<ÿ{ã³UæidÓ³žŽ#jŒ Y²lzce·[Ï Y¿‡kò>VÅtÈøÝw¹˜¾ I¼•®gÞrÅç|~©ÍÈy(á f‘·1|A6óöÁžÈá1«'òvˆ=JˆŽÝø‰x•ÚÓ;á¼ÎšÀ gQ¨ðCâéÀæAxSs&ØåZ4ÝU.b%‡Ñ£˜e¿WóS a=bþó-žN5[äÚé:¸—KÞhØ@4xVáÆ»ôAÌ$ùÍ%ŽQÄ~áðìéÁd$C¿?ŒýÛâ‹pÑt­¦™· ÓtM¡ú¼6??ÇÀ UAôS0=ˆÚ£€ÛÑcHï‡3B8TyQ3•ó¦^à·sZm4fe‚õˆ@1„kW=˜[Šh/AŽ©è$ ®*%A7®x®­~Ͻ 'þVgrÁ¸£²:B¼>7>ǰ&Nãb‹XmòÊtßXËâ¾=V8P[¨«!8“S1ÖIåï™Ë/Õþ!fë=ÿãtä(_@HîíË£)É4Ž{“$=‹~tŽõÜc½£!‹­Œi³ÍÞâ¾éB,ÈZ$*™ËéNüI· ÓúÖÇ .þuñŸ–š+SñŸ–šéÿÿÅñŸ ’ï÷!Œ'g¢CUçþÒÁ!mŒªN*hžÔ+¡Ñ/n” Õ_©àïÓŠŠÿ.> *M†¼7tÎU:!±À{ôpÔU? ùóÇ`Ö&Ôç1¶]­ã½à¶VþŠ'õW<©¿âIýwŽ'e]æ\¿s+«w•?$Qùøt~AU«—~oXˆ1ÅqˆË'b9åF“ÁZ‹™³ †éh¸bñâq¬…Š:Õt¯€uæƒRe½ŸpO1êÐÉl(Æxè|·!Äk^ÇvÜ>l{5·DN›òÏ( Ü87 ¶e©VGÍͬâKŒ®W5ÂjÙ;[0°Ì$òPéo4ét|¿Ëá$0Ž)›¥|÷Ò¼…cÓÀÜl0N)¢˜L­LŠÃfíŒÈ6î‰&ã.c&V%Ž–$ÖJ¾ŠIŒZ­^~ªÊ>ÿéÉßaÉñß:ÎÑÂíîníîœÔj5…›‰ýõmu´¾ÿöÃöæÎ!žærïDÛp|šù^p†oÓÌ{à€¬ëõàâ¤Ö$$‹ƒÚfq0ßXõ™ËcVÅY¦YËc{•Z¹éßh?™ƒðOÚM]°Œ»rY ƇîÚ©±ÍE2uR^?ÚØ>ioìî¼ÙzÛ~·¹þzs¿£æŒšKµ2ÂM1M çTPÀ®*Ãæu•Vòf6\iË+é øRðêRÓñšÐ¼æy>Îz]nÁlÀ‘Ÿw~©¼ñ-?GP.ßW)w^‹-v+oÑÀê…S›…îÞæÏ‰iÉ۲ֽʺuÈVpë¤vHã¿Ñáby=¯O\Æã›ؽtíá³&”MÔ²·Aª©*çP?§í ÙùrÒ6õ°ñp½þ|P£^Ð/DéySó=„ñ^;g¿AšHö—ÆþÿÝXÅöµ"öu,\"4F·Ç‚ÕAx8$KÊ5,ªðͲl2ÃË^ê(Ÿî¦/¡Xÿ-¤c2b}œè°Ê)‚îN1–wšÁ/¸Ú—Î>êÔ³TÔF³(çg‡¨^+W«ÂΩ5¢ŸDFȨ¡¢YTÓÍ{€† Ô3 %")¸1žhªÇËâ{¿tëì­ãwÔ )¨ÍQbµsÞ>Rb‚]ö‘Ù‡–tpì =ÓÃs§¶šWì­#¿EƒA?åªîû[eÚOàh¼_XTü¡¦ô¯%g­ÝL”©_V/L^¡k–Å`¬×–èÒ`¨.P·&t‡˜@eÆÁ[—Ó  ¨Îô¦èù·Ÿ ýø?±%z÷m‰7Ô©æŽøÛFEógï„Þ£wBï+w‚Á£qÒÔx$‚%¦(aF5ö?y}’Æi7:îb)ÐaHœäTÿø4æ+4ª?ézŽ'`Þ‡ÞáEBõÏð4Ïð8îfm\ c~$ÆÁ¯áHjÄË[=-âÏû¿M‚‘XžÚPnÚóÂÏÏf$Œö>Œ¶ªÚ?€×¦îÿ¢î1õ@Kaüú*¤œïSØ€ÉÛuI·Kï1⚘ô3º²i8'LØ'œp †ÂQD0iZtN_I:(Í'ÂNÂöþJ]‘öŠë[+1¨×*ǶT{Xd<4Ã4Û4t¤)Â:nG—1J}õÿíÊŸºµR',ÃŒ!*'*h\)vÂþ1òÇÆr°NÄ?³ös5|®~ãó€û‘ØÒé+[iìi _XÂg ÷Sb4¢oîïïîÉ HÁìæHnDZê’[%ÞgúbWadÍ×!Ú”‚©AÐa9Ïþ|܇ Ér“RÇEЉÍÇO‰£X"Ÿ„˜çi}?Šbõ²(œ À4(%)„.?u…ë’ÍâÅ—¼ày0BÀZ8‡IŒ>4ÁKe²Q¶é‚š³ Ë%ÃihVÃf Fõ°^×|ô%.‘êדº\’bf·|ù-_þ±–¦»[ÚÞ(9Î`˜)„¸¤Õk5åÂÖ$ljҊ,bÒ4 }† ŒV†Þ-\±#¦¿¼3¡þ0†Á}"nhÆ]V¹ô?N±£Ô†™ÁþæúëíM}d9Î x.Ù›ƒ²Éz¸°Ö”F"ž£ÉØFÎ=˜0ç€YH>²†¾ž´gA4ˆÓEÅS…™Õ>â»d¢îŠU‹>âe}Œ™MÖ ÿ÷ añ׿?×þ×õ$úØÿ.4aó›Šÿ±òWüÿö¿I'²jµªóÚYÇ´Ë€ä ¢G0h]ŸÝµ’žhê‡sýíG¢…ÚÔúÁ¸æw'/rVÁÛ‚n³º°\m¬ ‡˜3vC(r0³«µømsô3ømOÀ­Ñaó_Z©ÎU/Oè›fàKŸCW ï¥Í)M ¼ìó.çÆ^›SÕ "€Ê\jv.aöÞ°z‰lÞbÌÅ_ʪôÀô„/Œt9ÿ;wÿ³D z®YÑLQwQ•+÷ÕÞæþ6‡²2!¤–à<~W÷€%Éñsî‰:×-n°ªJ†U;Cà?zÃÍGãp¨-`Ì|Ù“«J¼·a™S:Ÿ†"UQÓmˆŠ1?ŦETPGîr½šù¸†<À+`ùþn†cÄ™[’8xLüúà&·Prf_N;y«g e 5‡=ùTuˆ «‹lÙe§um€ä”$AJŸ¬~'B‡˜:Ðv9ÙF_2tJl©/h±÷|vëÀ}‘yHN¹²OsÉ­y7$Tœ¸ûn×ësˆK÷k‹ÃÓÑOU¿Àï9|®%QíH ®Ì¸=æôM=Çü37ôŽS¤ù:oâ™ëmhž;wø‚œ¶n­n Yœ—1*WŠÔþœ^B™©'8~›Ë=‘Gn>}b?0¢ZªÎ.F÷‚V*&póº¦ñ™KtìÎ’%ô·Ò9¹×²KŸè%3½Êëø ÚiÍÁƒû†‘ž&ôFȧ´ÉYãQ±"µÀh£¬E®çsÆæAö¬ù³ÐAÁ߳ͩÍéÛ™ECiIˆ—ªv{F¼™jÀÉ2Xìn©&=Ût[Sgœ?èJh§Ü_ü_]Ÿk†nÿ·¼øüßÓÆrsiq ,Tca™ØÅ¿ø¿Ùú«kµP[|†·×>' k,ÀQëi.WV?¿[?T[ôÿƒ–Êéò¢3QxF‚v‘Ÿ¢>tP8 6»upZíÅ’³•zÁ1“lœ;*û]‰öž«+ÿî,„³—*!ÊãœqP…‚.T)l_C/Ù‘Ö„x³þ-#›ã>ˆÄë-êl8ös,#vÕIͫᣆ0ÈcSÑÖý$ÎIžv†]eFÓÃŽtp—Š´<êû•„–cb|y, = ¢)éZ¼‡t’^y!à,é~í|TßèùõRÍ,@œ—Û P"þ\2nè'X_OGÕ®OSäwsÚñÜ]ñìŽSb"%\üôÇ=_G%î†G¿¹Œ&Œ=´Õv8òâ¬ÂÞ$¶#ÖBÜëŒÂrî#äSè€qú£ð<÷aÜjO¤ŠI’(>v»‹ߊ8çd è÷n÷gu¸«>l¶r[ç ºÕ^¨ˆwŒ^äî¿GÄüÂA ÂKñë;įGG¯yV8r;fÆ8¡t9Øõpž,9ä‹fX©Öõ;°3Ôã—…²3VɬwI/ÍQU»ŠŸLwš6¯Ç}·n‹p@4ιÉi;æv!Ù8_]äø^d4¢=C›æš[‰B|}Õç ìëÈz8q¼+¹ÈGêsŽÀ˜ÍÂmûC`ï†ØOßü€ÐvÁí‹×_½ïAé w„Ýॗ¼¯9‰Y`<ëLÝŠÚ8Ü_Ý—ê‘1’•u‰ñ!o…Q|V%#bõܸÞ[—M Z#þÿœ¤Ð ˆéà=z!lú ì?í‡à¬ÒAzWF ¨/`TŽýNжÕ»8á»R4ÆAWhS]î,íÎ쇃` ·{·¼’ð0ð1æFr_LŒI2oäÄVèïc#¬zÑ•èÔCZxŽXèsÌBñÖEÞ1ÌC-·!µ´Ï¹ÊÀ\Ä4³£c8pÁ!.üq)7ÕŠ Œ$Ñe¬C;y’­;7 ƒÁ1žkê¤a'Y{T==³•©uBòT’sÜ?s K;>ÀÕb2`Ä­(£Ý„X`¡ÑdÂqNâCaY7ïD;‘Î|™4NµJ[§ˆßîE`”ʶ0Äâ>I¬Eÿ6§üzä¬MŽ3Y78,ªˆºð¥Ö™œKlËkõ—§›ZNéÛü¸¾½÷~ó •ÛŸ ˆšJœw•MÕ©xk= ƒŽb·†Ë^]È1€õ¼ÊŒbºõÑÓP¢ á‹|#Á ’½ô¹Ã^©‹Û)ˆ_4MI»Qÿ¬Ó 8!ªÎøãcd²T‘<Ä„ 1”½•‹C– /=ö<41Ld nà(¹b£ƒékœÎ}²Ü®bäÎVµC"²·§_µœŽ÷6×w>oN£­ƒÃõ÷ï×ávØÊ}ˆ8ˆ$±›Sµº5:~.ª3-kä´£³©.ÎmYD54²·¾¿¹sønó`ë@m¯n¼ÛÚy›c Äù’6Ödæ ÆM”Wqö6ÓÉÇÉyâ@˜›…çu.>¯i&Ïß„ƒ7ÕLlÏ3¾-ÓòõÄ“æŸ÷ažHWîŒ@_UûJϪt†‰*†ç矈Ræm8̯ਃÁ¬8|·»?ÌH½ŸœUÔeorö#TDT¹6èÉ¿½¹·þv3§yŸÉ8^-.TÿߨUŸt®ê²f]MüùòŸë”ü¯“ÿ›‹ KÿšKOI\YFüÆÓÅ¿ä¿ſ²}ÿAô^ãB{n¦_|Y_„v'ßñGU©ž ‚P U˜ÊÐ…)²`kÆywƒXŽŠ{&…b¹ô„ùad0_éƒÁ|E°`xÏŒxCþÂx0_òƒëUÔÖ0˜Gþ°cÿúð ƉòöÃÖûÍç0PˆC:mìîýBG¯D暊" îdsPGɈ BÿÖ7Ú[;[‡üeosó¿Š‹µ•F‰hǺõÛ¯·ö‹|…[âë;»;[ëïÛïv¢û(:u\¸Õ:T|›[ (‡»H|UÔªàT(évwß¶5ó‚âI¾#ãwR²…§}°y˜ã ÚæFÉE&>‚<çæ{c¢QŽž´»þÙäIÌðã2ìû$åÚ¼{)Á¼Š†wíÏ…ÛAz2îèúþÛöæÎú«÷›E%ôâÝæû½6â^ï¼-U«Ä+’4Xå2'u$¿ÿ¾@Ž4g´¶³{rrR@qç¥Æµ×+¥¶Ý®Ún?ÐŒèk)DO…€ë†ê±±qΓ¡ ¡ydv‡³¦ñžîÓÔVCôD¦ö®§J;Ýøeó€úQÉ=9‚°1×0¡µ¯µ»éÊ÷‡8w|œ€$IäGÁ?X¾2Òs¸3È4B$‡“± 8•z‹FøzóÍÖÎfñõæ«o+ UyÍZ3t°!fÀcAbߨ¾rãÍûõ·|›Bà¶Þ¶aUì|«£5>¸0#Žf&ƒÝŽv4+BÅ+%_ætG¸B£a’÷&ƒ¨QcBiy©Òáþ/„AÛ{„=Å£zYÍ™èY?˜>½PåzN¥þÅŤê¤rd½k軳ÁÖÚlnîo·ßU’¨®Ûâ[Â`ˆµì´ñµ}Ù6ý\ËÓÊŸM=Êz?órÄcö7>¼?,ÎO, Ú&¦éÈÌ+d=Š¥8¥Ì;ëU#œƒès¬jÍ?.È„îØio½Ù|°Y”Ó³÷ë;oÛ:ZQ‘Ž ¶ü«Î¥Ç ‡Ô?:A.ùï[^«u–ž{â¸E¡œ*«þ7º¸V\ð÷ÒXIšÉW¼Ûùðþ=±·X0¨žÉAäó}‹UE";ŸG˜˜ž¶-V‰¦u¨ßT±âBé9ÆW2¨£èÛÍÃݽÃ6;hKð.âP‰ù8¨¨FEiœ5Qã¿K8Ü‘‹):ù¤= y‡$›½ºŠ7v§-Û1¹îƒa3èNƒ˜µcÅÒÔaˆâ’€ˆu‡¹ãŠKRFŒT^‡ð ñ”:B³ù„^ÿð—½ÍöÞÖëö¡C½·¶7S-™;ØóÉ€sõ >dÞn€f­¿Þ’‘Z¨[oñÖ>“ÆsB˜CœoÞ­ÂýF»Q°„¥/pbúüæÃÎFñHÖ·"`w“Sü~—¶2ÍóAåˆÖá¤$¤.»À ´v?ìolææ‚szªx {G=m¿ãÔšÍ0ŒÛ‹Üœ?èçLЏS)q#ÅÒs~6£ÅgvÄwlT#ŽÝÎÏ(‡`ó®x–brèÙ;œ>1„â8ƒUºÃªÄ"KÖ„RêcªÍMu›~D4£qg‰n›^šåKõSMCXÛÝÛÜÙ;üÅ™)•Š€ýÄËœÄÏl¯­ñäí¼ÝZJªvÄÑ‹J±;£2½î×;Dý{ ùÔH¹ÌYðÞ†nÌìRÌJüó~P{‡ê~= þmªKõ&üÔí O[¸âÞ¶F®+ñ¥bS.͆b]uÐ)ã5U)¨’§$!Îôÿq®ÎXH@Âj ÏØ­ôô€x$0L\Äݳ6¡ÓPo?Þ¤4Eèy_3;¶7÷·6¾¾™ÎûšÚ;ÜþøÕí"Ý߯Ÿ0"÷µ!ÄôëW†xÏŸ6?Þ×ÒŸÔ„Ûùêf@ÇîkeƒøÏͯnû°Þׇ{^?8›ëûtÞ¼~¸›1ïa]Œb´Gâ “ q0GÁË—§¹aç²a2aqŸ>©ñHð¿ã…ÆbÁM×TÿµV>.ÖŽK5ö¿°¹Ê«©F´Wj1ÜÅ/†û0Xg)¨ãœúczòÚvþëÃîáækÌâÆ»õ}š¹j£ ¹fĦGÅs¶Ÿ¡¿µ‹Á¤Ž.êôY7Åêªdí»rn΃ortΓ>Ÿž% €>T jÞ鬚*ÏÍT²BÇvÒ¡Iè<êµI~nËõO; þá³°´ùvsÏÞ0Nb5¨–ùªbè·UEMÍž™®ˆß «Üt^Ýä@ [ÓfJ\Ç¥Ìn-b¢¢iL×™Ò<&ëå#ϼüÉÍÉ*ˆ–Ìäqƒ1Ž”a°—ß` Õj×{£0Dº/­kUKy¤ÿòþØýp¸÷áN«cõÛ»oT.‡|dݰÅg»Ó"TEøVR19Òè—ÜÒ1}t¨ è›ÙØþ9:íz0Ž+™(#©ÈÒ(’£Þä¾ÄO}òþ2åü¿Äþ3…ÿOðÿ[™eÿùô)qçÆþs¹¹LÏ¿üÿþUñœOI|tLÚ5“䥅|µ\µ) ð#÷PÆ·Õ©¼o ÉþÆ›üw ès™­¨‡Ã%¬AS¶ž÷™]âv?¸†ÕÔO9K®f¢HæâKmš0EÙD0Œ3¢$b.VpwÂFž6Å­HGìUunÐî?9Q[ŸàÒ™¸ZÛXGSîy7ÖªiAï±ë|Ф;¦:s¹þR;8/Òß½õ¿­¿u£#X+žT*¹#z{N§\¯xäÓœÅ(È~9ÉP¯Æl»d„ »YÑÔEÅB7&,{0‹•Ü]l*:òH޾>õ]M±½»8À•¦ésÓfË.ö>kÿ»ãíú¶µ 5ëZÔŸÈJX½çŸDŠ‘@Þk¿ÀWªãG&×Zg²æ€óׯ3Êg$êå\eÙR þ…´ý!1Và¡Üv@*Šz»‰}—4¦1—«ðtñØË…f&‚ªÅÊsãĨ~Ø)e ždó#¯ßn{ÃÀ°ðkPÉ›ôrÆsøÝFÂ{g@+]Z.O|•Å! þ¸ãaè8bß« ‚þ¤oÀ•Úƒ§ØšÄ³Œ¥<ÊšÞGó `3:†Ï„æÍúáúûâÑk‰ËÆÞ¦óD¥±o¦Ì§TÖ€¶lŒ¶Œâ¾'€ælÉÄž5 Ê8Öü=¾ ÷RK;Cš˜lFã×WŸ¹óÀtvÂ^xt@muÌE0;–¢ðá×¹O &×, µx”5|žã’Þ/›‡íûpäšZü‡¦‡'hK2 s²ž³C©g¼¸xb»ñ‘©-<0s0žÚü¯[û›’Øq#¹Þµ$òß7l„,â 8Çè’‰(ÓçDÉΜ¶eoo~Ü[ßy­ûïaþÄr šzÿϧÛoÄ–ôï$G:êí´ÏÀÑyBùg'f/T×ÏÞä¶ ”ú{://ëT¼À.ç&ì n€Ãˆi³¤/75 •¸r­V`wçžÉ\ï"4¬'ùœñ/ùµ°fãÖŸ?ò%iLáá$<ŸÜ½Z»8Á¼„¦Nf˜ÙÒÝoÑ9‰þÀÑ[ÝY0a ÌÓŽ<ÞYö°vœ.²G‹tíc%à·Ž¬ q:6%‡þdPS–˜ÑºÁ ¾ËwlM‹Õñ%ý°¸\»ù]H&ƒIÄSAÄ,šœ™!©knr‡&µãÄq«°*>§ÂaB‘šëë˜Òip<³fd»Gß.èè¥]ø¿â|ƈ,¥Ó[“Q\l‡$[¨¸¶Ëé«ï&Ù×Á/4æ›FÕÖèó@;ÓpÌbU¾¨;tZ¨Ÿ`n­™FìK 3¹ÄÓã´§ k‘#áX%`œÀ¹i ‚‚ñ°˜Æ'q$’3ÚpJâ)c¯±Vv#â–ªz­t€­Ï~ÊæÒõá Oë&. ñ©Ô)öæÙD‡ˆ´ô1 ¯|RÈ„ð©é Äç8 ƒx/˜®ñ„0¿âp-\LÄ8 7èyL`XV,Xp~@lÇ.Sé{¼ÁÌ(xñœÊ¼Ãà4¯žÅHŽX7ý~­p<_ŒÛ-Õ §þí¾byբߺcu\6–KùSÎÆÝ•h7&èªf:æ··¶vÞÅàõONùpðnóýûÏÔÉ~z„ysÜÄ›Ò!ô¤6 t±ÕÒ•ŠYÖÂðÑëX *1Jæ®!‹+‹ë²9gb781p´äez:ÒÍÆ†až¸ GÇD,Ë:¥}cº:aŒ4„ƒ)F”g”Î'–Ž1g] }ŒU|2s€Ráš´n©]Ã/Ñ‹”@Y}tGÞ„þ‰L"Ž6aŠ‚Ê1Y¾†8ífÈÆõ}!~ýn‡æœù _ÚZ.-G¸¬ ˜'°úûX $ñu\iqˆN†jã5ï2‰cL©ãHbõ²f±æf>9žœƒø§dñï¾SÛîiβaÄ%Û_õÿ¥&z:¥2ê G¬ÿò?œ?£¯Èö¾:=åÅõíÍŠbbQµÏKKV~Ð7)°ö€gï´w"¦£Ö¿ty‘1‹(.ÌÒŒ$y¸ÿa“>]ùsƒÁµ× ºqK-‰‘}ÿ¤â›õ÷›ÚÆû¹m{çB0ÚÜòôckå ~ÑÞÙ=4b«S/û½¼Â¢5ÔÐu×ä+[+ÌL²vóœ°Êˆ9ìÝímÚç˜ÖblHʾz¿kŸÙ]/ùœa}λF#ÎEö‘³ ’5:4á…uœ¯šL"rµvú0’2Ê‹KéàšN÷®‹"ЀÀº$[öî¿å~&êÝ8f¢ý]Ãüö9r¥g@ô$”:Ýû TýAo;àC^8Ì‘QQD¾Í÷Y1N²Âź3GÃEiÀQ÷¡.)ÓÑY®®EÃR’ø’ _äÀ´lXÂä³è´Žõ4±ŠÚq(BÏ"*hPñ å;5#ŽÏÈŠŽ>¥ÃNÑ9OøZ­–3J¦×›{›;¯7w6¶6˜*Î&‚à4}_n./ýØYZ‘ßIÂÄ·ŸpM„Å?ÁÅÚæ76àßµññ#>Þnügž¥Õüî«ÿÜÈ£àÏ>ÇŽ“õûËAðÛÄlL%ž}~{&VW‡f0vx¤ÿ]+ct§G„_ÃPGgZX tå‡f.mJ¾‹ÅvžžµÒó˜Geºê£Î„Xo+¨bR;$å„ åR4™†í$Fƒd"iÙ*b½ÐŽ#ç4;÷Ý=vÒÓž«p¢"Ä(YŠï¾– ðÈ/–Îfg½ÔÖÎÆû¯73  8:müMÞæGX\:ïh†:µü<¡‡È·ÚFµ[éZ?VÜZ„N¨$«Äµç¦k.:&ãáJîî_DߺÕòÔ1„Ä¢BÐÔqÎé‡÷èÚ@ÒT›}Ê+š y8g'ÒzM“zìæßsÈ\ìUÿ±^ý_ ÕgœU~^ ¨T­®Ñå4§óVI¤‹¡õ¯¦Ú·¹âÁLŒ'ð—Ô:5æûPºã³:¹ª3°" ƒ%0Vƒé· |áH»ØÍ’Òûµº ŠÜ̱8\j ÐyÅ—Ëy=»ãx,Â"âÅÉJ’3aÿu޲8½™X‡PVpBLudÒ)±¥¡‡Ø¬>¢,zQ’•ê{wPì*)ˆÎ_˜)E]6<‹:Ðsºi7L§„÷׬ÊZàÚäWë[‰5­K¥–z„«ÛÍ®“naËq gµ¨šjI-«»–:j~ÁFSÈsíh\˜ µË|A½ÈŠ.Êâi¢Ùh<Ô. J&PKSÎÛFíRtÄÈAHkOC]¥íÿ{}*ŸuÞ“ÐKRà¥Zàw6³»É½«g=ÏJ~þ6!¦üsb{¡û*OÝÇ«þ¹„à×9/ìFà‡ƒ4FHLÉöÝ;ûúöeì]Tèœè\zƒ êG,ëð]úS§ªT­˜»ÈB¯g¡ð‰-KW°„xI"¡ÜúqÛíã!§™ò·:ŽOLRîÚ¸ÙÄÁ–Oº>AÜÊ`01ɱ$8Iâä­SÆó ´¨dÓ’ä¬+œÝ)b ÉØxZí˜jŸV‘Î2”(qø­ÖÏw½è²»DÄó&­M.´óDL'ð–|aš¯>˜ öHßøþûx!âϨQùi@œ°ŒjEí ›~oe},ÅÛ&P¯íš]äãœÍz¶–ÄwMâ“Oç'.tóãa5üW'xœ2…mjÜf¾:¤w¶ò<«´bº¬9>8LVC5³ñT_cþð…›ÂÐñGPiÚD†#Ä—JnÏtïÓ¹奄ò5ÕïÙý€æ‡0S“úYU#ð²²¥ïOKL§#±l |z\qð×dž¹¾å³Ÿ¥¸ Š&~óÉîbfU=Dl/²oŽêϜ˩RåªG†<îbtà~“âÒ‚â}qøiàœ®X_ð¥Ç@)ÎpK;ÔC„Ôêö^…‡÷´¶À›âi­!¡%÷Ý$êݵlE…¢-µá&€ÒClŶغ/…êvá9®Ilh“ØÂã‹„À»ÝŒà£5¸K>ôhµ¶pË2‘-§½½BrÈ15,òŒR},¨ÂúäˆMR!.Y¼”Ü:iTëyœHɰ_qu†ÆØJd—?$µ 3ë5,(R¨Î“Œ»nýÑܤ8)»zaû¶w_³ÂÙRÁÇ¥\J ÏV^ç0y(šìœzÔɧ¿=#yæÓœiµ©+:&UB!’V}±ÿŸá-7Ïð¹†ÓÔ¡½4Ç%zà”)ámZ;3m ¤3ÙZ›÷›ë¯·vÞ¶_秊õ¦ž:Ò Œ¾ºmwÃñgêg”­ËdÔV/“t²O±öFº”iF_5 Ceü¬D:üãT …ì°m Ο«ŠbÚa5mÜÈŒŠ&ÉéÈÿ;‡Â×YÿE‘À‰€ñ(4²Ô<–~×Üjs–‚ë`Ç+šƒ÷ëïÖ Ç¾“H¡5—â“îDb‹%[™yÁ’ULnÞC\_x:óe:PûŒº£øŸ;¡/'šF—>[uúàÅbJ…{–öGî=gñÚ š¨Å1’†Ø€cû äâDeK}L¿4WÍæ¸P4œÛ\Íýó|¼U+Ï×%;¹v‡¶ÞÐÆ7 Æ¢,¶'¶…Õ¨•‹(´Bç^Ó•È(ÐLÝZ0«QÑ@ú!âýŽ8KÅÏ1P胈æaÀ=¤ ×Rw¢ qÒƒ·trLÚ ñ3g~Á¨àáäⲕhkFãªv}c,Â;}dÞˆó+ 0’Àc4b¢¹4w;Ñ#a.ÌèÊÍeØóíV@W8’XÁµXVg¦Ö%ì¥'ª/Æ~´²¸°´*š*SÀ°3¢xsÊ¥DÜ-V,Ñ6®‰Â«ÒXøÍb€p8¿ÎÕÊñ’ÂkE/tá>®˜¨&B‰¯®À"÷?E†[:uI:"%³/sjS¨¸Ö¯Û` ON¸Šr¤s‘Ó¬άq¢Å>k<2°9Î)÷ƒVßu—<".¡^Ô2§97 ¬a•·Ó§[ €Îóû :Ų óø¦àòÓ ¨š…×úÞA,^ FõƒœÁ°²èr3(HÑ Aoµ™ »#~H´ö!³•7œŒVß9V´Š•7sE,¦=ÎÁÁcë:YÅÄ|Q¦³¤5¡Áˆ)”¼?ûæÆéÅ (°ÑŠ)¬$#Ÿ»r̤7¤MÊÚµPÄ6^³MàúéÎxBd›¥u³²©1|1ƒWÊ$ëD3¢v é˜wWuÞ.l×Lc°b‹ßä Ziª~0Û+VXJ{l»Z/X<+ ê†yÿ/>ð³SG“ \WìãÁûÆrª}­æÄ1>— •Øœun4‰m4r¶_r6î‘N {›—x ƒööß`gµGÂ@ Œ¾içÞ9“Dê;^‚d“9Gc(—' &ùéRqºÊ“ÒƒG¬ækÿø!œäÞµFØèÕŒ-GˆK£j•o£¯Ïáð~†¹.X܈µ¢•³^€Y¼l0‘5Ìb÷[·7³Q†òirZ#aVŽ}ûÝÕg•BºŽ8ÕB¨ÎÂaM½aòÎBârZ%ô6eºt?ÿ1m‚÷¼µÍÝ¢°¾·É[B°ºyŽßý “£=ilåµ$¤˜;O°êy-ØÝç;™i·üoi'`l…1£?ÖUã"†«Q¤V0¾,‰j„7’&oñKm–¬PœÿQ[>½æÄ”Âú°…<Ðp‘µ¯7‚üZ_Ùlh,æ’tONGN|…»õøôIç’U}­²—‹ &n&ûç9áxC¢dHɵ;þh,ŠBh9‘þSÌß!4@YJ -yê,¸ Ò JÁͤƒœöeª¨Øéug·*.NJY5Ž$‚ðÁÉ£M:SÇ€8/Ê\ëæ™Ù´^b&¯½æCT_W˜YÀ”U‹Ã‘omŽ«°&.Uâ[Ä3Xp©!m2q„Ï¡4£ ß­Û™¹˜¼á$ ^¤…'íU¦ÓYŠ™4x_í†'ù-é™ÑFVæ^œï͹,÷=²7/t`+4oÈuÜPiÀÿv {#ŸCp8ÞM0×àW|¿¨s«Ì9ó­gÜdbNÒȇÛj³e€Š{ Çú`Û‚Q8´s.—ᤱÄÀ“¸pšÖÖÝ0·½‡³"‘dÍ%8.Gê\ªñ{®Î}ø‘ŒËóvh²1Ù Í…‹G¿¸£õêÿ:ùžóFÌgZLÝë8]!™>ÆÛŠê‰íе÷†¶Açc8Ê_óœ4»Õ­ù¢qbàíÍ,KüŒ*ÖâÔš,GE C}¹özìtÏۇΟ…Ç|u«–Ï9bXýpœ·õÂI)Cße‹‹ñ4.90HVoq¬PãÞ£ Æ.ŽI±ÀÆÛDGq–èÉ\%ŽApÚ½+üs6ÖË3Þƒ^òt׬b`ÎX"~æt·Ó¡¼;wìE°±Úøå-§¡ø9^*\Wè²DÚLP¦ämƒýîŒÊ‚Z+Øê7WKp<Óáx½l}‚ëhBˆu€tðÁئ†ÒÇç”R¯¶W˜Ñ%±ñ ¸ Ú»U1K+­ý‹} µ‡õ5bÌ/žHló» lië}"t¾x4ufcÞî`™&¬¨ó÷Ô[Ç»˜š‚U} øAÑV“Áð…”ïŒÀÐbF÷x(®ç.Þ×â($Zö®öÓ…¤E}h”2߯lÐ)ÒhT8jtðÁô N?©˜¸KæLÆL›ð– ß?a§‡ë,î›ÂÂt§ ¦Vao½ÉX³Šç©ÐæÜÏÏë¯yýZ}©G…•Qײ ùyýuÒ£SŽ[(ºsÂçp¦¯øœcÌÚ¡^§9ÿEì-3 3nKtº ý~»­Í$}ÌúÆûÝõ÷c_^•Ë'ðÁçÒt%íî]±ìEv ^Åêë Zu©( `¦ËôÖÎ›Ý ’«‰Ê¸QûàÝô#dËIÏ¢ä3…‚q¸2fTÞÍ•eIòÌ{U…•×Xû™éð"y*˜g¾Êÿ3ªâž7†nzéô‘¹þóßfŸ§&ÃÚÌ#zê6.…ÞÔÏê^1XÚDÅ#y\š²Ã=Ê1ôn§à!;I=#$Uèú鉄ÌÚwñ ©Ù}Tñ§­×›&éËQl`ži“|”eŸ]ÒDux¢²0çƒDáRv[±#ÓÌ®üøØ¾üøØÎÏ€9£÷Tº4£¹‡ûõGE9‚™P³‡ÀÅK³ZŒ£–è«åŸ%­ºÃYÙ+!Ü[Eá|{`2욀ATº?¬^ê;)W¼Fªº®o“ÐD8~ÌQ¢MÝ@NÀNø#C2ÐŒ p;> DªbFŒÄésŸ-x…ñÏé ;Z¾A,„6ˆ{JÝÑ~·»û7äàöÆQÌhµ @/$¡ER$'Ǩõ8:÷]²×k™ÈôYI¼v;/æò‰›Ã½SIȾã Î^Ýõoù QºÓÖm×rm:&¸™v'œ Æk(0žêt`Ó•`ÔÂÊh1{L”e<›o¨Oô§UVÆî1a?N7.þâó©Çê{Õ8•ÊlQÈ*bÑ9à@Oõî/ºl°r§ujG'iÈ3ÂRý›6É8ʳÔ(±0¯ãT¶ap›ÂSp2,[R^Û"¿Zpkó¿Ç?ªùãù"[8–þºD5ºÌŽÅ•¸Þ¬hcÿ6 ª•}‹6¢¹s…¯/†{ä ¬j¦JkUdÔL M‡<¢ŽSþjû úÚ$÷+Œ3¢¹Œ¡ƒ¶Q«é4p$לø>L=¶âq—ß¹Æ;®ÑÓZÍ1tK¼hC¦õ3'UN-ë®Ë“§5ð„,È]8Xqž#¾ŒjOþ`ì¤ÅÊ¿#^65Ñq ‹™ªÛ¬%ucj’h—ðR”èr¨µæšürÈ_±â'(ê‡T˜¢:ãVîÉ|ÆðiSÛ{·»óKK™·9*‹ìXç±';aqع(ŽÑ‹ÄœPûÙ{¸dfGNS`ø ,ã2¯GBØéZ äçò¹Øn€tšwdöe“N\ÝÃî¾¶ˆsÏ3(mh5}œšöô¬8n,¤±úº9@¶<7\´¶çï{×Éçp«cåÈ v:ÄßÐî>½)Àd‰M‰ÕÀ±²´&ÉÇpC°km<ÓÆàçôWŒ¤U°vvp}l5øŒor%,·x×0)d{¢¢æ£òà9_ŠÄY³/Æœñ.bk(ª¹¦1@¢U2&&±Ö¬SÒ®|Ñ5¡Ñ7ÕkUHÎ×)ûlë¿-wµõ§y¬]sSzÝ‘ žèÞœB0k¬;R£d­{Âu,¶I¡Ì9ÍËí}-áïü(Äâú™ïpzÌ4ÄœšÖb:V—ÜT´ø£ù*½Ä‰un …®œoÌÕG"œ¼I8,2‰ %!¿ÿˆ=òÙ%ó"óßÌðÒœËæÜpuSÚE«ÝþÿìýyCGò8ÿõ¼Š¶ÐFˆ °ãl JŒ…l³ÁÀpì|Œ#i­%¢‘ ÄöóÚŸºú|äZ¼ÔÓGõ]]]]Gñ&’—)H´ªN~ WŠƒç»0çùÕ*)±Øµ˜šj F½ù5—ͯ­ìu Ì âÚ˜¦:£×¹[âñ,d-j¶"Ï'5ÑV*¡ <>’ ɱe¶›à5S[ó…鱊ÄdîMC‘ý†ÌÒ#0=o³PòcòÒ,­àZ\äTð54õ© a›ß¿¿‘/|ÉBÏôdúV,7Q Äm”3Äh”ȧIÎ¥$ª¦3çÂÒÍg-ɰWúI,hÏ–m~NÙ¢›é½ö7ñ~rÿβË߆DÊ脯 ¥~!ëâ©ÙÊ“3¿.+Z¿ÓÙµZþ7¹Î(W~`¤˜Å&5£ÑçWb|­ÇM% – +£X±à‰·JyêNƒ™aÄ0|§íN{xÍoiæCEçíæº2n+ÄV$&,ßhŽ´2Ñ6è˜ËdÑŠiÌR~Qê*¦2 „#þ,›(h$Ýyafµbb`Å—=*Í-%ú—åTÑ€)‚P#(¡±ùbxPÃÐÍ+;‡¸´Ÿ5a$ƒè¾0sJw8S¯^Wò¯_/õõã:}ÁG‘YKKIvD;‹n‹ )‡¹‰ Å»øiÔé£ýIíó™O”дÌ]ùSmìþßtŸÛ}²£ý„Ï0[”Ö­ðÊ"f` úl¼îÞoœÂžKF§Émt"ÿ«1ÐxMO1šz„žÑ ׊ÒP/,ƒ²?ØÛÞ4!ÈþHçZì…0– „qÖ Ï­A¶ýc›#¯æÂü4â„â{rV_åw>ù)4.ÌùÙrxÒ›Q)‰à®F’h‡‘œÁ¤¢;¹õZÎôñÞA}³öT´b¨”¼ã Ø,Ew†ìËÿÀžx\‚b»{G%zå»™ z×¹Šš¸Ð’_ _Œ4S5ÝRV雯!(:y¶HB¡ DšÕuDÀEõ…­²D½·íAÜ#L‹- {,]y3!Êÿu¡ÙûZWÔyòÏ L|^§+ÀËÙçìhìĉ¢UùÒïï!H:èc~•¹3ö­ã«â‹ÍÒµ'°” Æøù†2g1©ªwâÓSak›5”‹,ÔX-ÏFÂ,*íˆÆ”´Ç·¹mDGÑžkrÝEObÌaa–r‚/ò×Ђ67çÈQ¶Zi0?Ô!ÄR›±k'ój±™‡tv¢L¸H ´àÍšÅé ¥HœÅ€.†ê¥:éÀig˜ÉûœJŸGá15ò¯–^Óâe.e†©Õná£d³Ö¬wêYíI`4»-·ÁÎïx3P¦ïå,¨9£ubµ¦Ò~ÇÇ`é^šnÂͲ'FÚI—/j-yN1ƒGö­{ª“-†°'i¬ù„³eã _–•¼`²- ’êH.T(&­zP©ñ¦vÚabuÀœ-¥ë'í9Y§7ˆ^ˆÑLL¨åJšž;@í=çpwæôÄúò‚<¿1,)Z"ÇMä*é Œ’Ÿ£€ÛÞî±µÓtÖªAÉA­Æ³¶FKolU½áHæ•·®ï«©vö¢KتüüÜ2øn§„P×qŸD/Îw>n¨z„:qó _bÇ=,Þ¾¦f¾¦’ÔrI)RF%û Ø€·Q¯…]yÎ,ˆe'»Ï‹Æº6za‚U@wÒší3Ö©Õΰôe•M»Ÿ¶{!:p$DTJ¬Øk7 „åq’”؈F9ë2YCl K¬õ˜pÌß µJ¬ ;ì‚+A—¦ìHØR·o¹l.…S„ŠF ÇÑXú”›%6˜m”ËGÍ=×§b‰Ú&Ö}èê [îw,oa›ãˆoÏr¸Pºõ±ˆ˜üôÚXï,N}óƲl²ôøH¾ms[ñuGˆ„Tô«u¡¯l6‹»$fÁ¤9(.?Êî;̸¾ùë¢ô2¢Qœñt¤}}hî ¿h¤–‚µy«©|m(W»‰Ô FÁ#ų¢}>hØ`Ô‰<×¾"CL$ a?ì æ4캬ªk×XšÎ¥ŽA§` ®O½ç˜ti:CÆëÑÞÞÎâ+™BõІ ë„ï¼ÖržÄ(p$ÈòR’s8™Å&:Dû`øKúkgÈ3.eè,O<˜›%ý¬’€ËBC‚õñP‡Ò³¢å^›maçN¤ð¦ÒÒ7U·½îULüºŠé¿¥UOa)”?Ù·ÒýÿEYO õñÞÁ³Í£IkbÖ à¤£,0œ– ˆ 9bóqþÉÛoÑ­ÉéŠG¥~x%~”‘7ÔŽºA_ùE|?„üE#yj£ŒbwœÙœŠmØA*×^Ò ´_›|ò„vÚÁÆ é«jE œwêÿAñSeyf¶xÔ³m:@¥Òk·;Txá­çCb}.„ïÝZýÝ¢§å7ù´6ñæ3H˜ÊöN?ð½¢"d^¥¨}o|o¿5ÊÃ2ÕBþ•ø€ÆÙ`ƒþ—ñÌ6”é“ï rKÌÈ–Á»®®Adº!D¢Ùc2ÜV+㹘€ƒü²ô\Oä–^±ùU*š°‰ °ƒâ£x<’Î,ƒE'?1»‰r».›xØîЊÆ[¨Hv’bCµpÞaVo茰:Yw£±UÐEÕì·c2æXp ÐsgómiåF~µ”7ɘTÅYÌ~iP)5¼ŒÅÜJüžuª#öqù¦X›žš$‹(pUbî¢\$´cK°;µ *‘.(¦j¤ÄS%ÄñH‘SJ IÊd Îáφ˜ Õ·¾gøÚØÁ™×¥ŒBŒlJk§ÍXÕ«2ç”áÅQõfCäþûqÒ¾ÒªK@L\Ð.8KØ…Úød°cPyo8`qs°°½’èÅ¢M?¯(y× ”s€„uy™6¶7QfÝ@JL)ZÉ‹V¤ABÌjàK÷¢7Øc¶öÆŒZ\€å¤·“†ÐË3a<(¡ g$«¢_îžÒ néÒå”*ÇsNª˜rœjq{¦ê%É3[™*‘¼’zÏ[¹ÿJõ줛!oPNZÅÚ:CËi™õÚwjCS³Å@mœ•ô„ïd¯hhÓ’<@´à>ˆ—7ò+, Ù¡F¯#Û/m<ˆjCî\ÙXäé‰`Á±3ÞÓ¬~*\Z÷œ¶¸Aí3m䙌S2ž`›q‚ xâö¢±¨g‘Ëê%w‘Ìøq‘‘Pn6l7I>äõˆ+kÌ•OÑI 2ò¶‰rK¸ê²."´úýXb5S:2Ö¬M¬(\·ƒfµÑz>øYlJúÓ†hn,²jŽ i¯qÅ1I1î”7âS3”êÓ®AðÿnÿýþtÐ0}i¥|o¥bnœa÷³Ö±ÿÜ¿O¿ß>ð) «+ß®~sïþÚÚ*į®~{ï›ÿ§þV)}1¿“ È¡ ³Öû¹¨Ph†œL€hZ£fäò$‚ ¨¿<:Øllm©ªzôüÉ¡ªííÿ‚rhG{[{JØHê ¾¹õ¬Ž¦*¼ÚÐz6~D­Óܨ䳋(šVt::—(²ã‘Áà0Ž)´iˆ¶‚švÔû“Ú* )©œ ûÞ·àE7ãßÐ{îQýðèV]`Õ­íƒCN€¶a‹ƒþ›ó\­[›G›Šž?>¶Þ€L4”Héz]wø‘méÿ§>/¦ÎÜÿíÞçßÿ&íÿoî»z÷ÿ½ûß®|sïÁ íÿk·ûÿÙÿž‘ÐL;š }¹3oÅ9!Ãòм¼6Ú½þhø0SDã>‰h|³<¿Í+¶sõQ²¥ÌYtûô7d09 $bè¼s Sá"î[|ìâˆÞVÎFlY}±}ôtïù‘ÚÜýE½Ø<8ØÜ=ú…ä¦YúíÍr߆2áðrC7}ʾ•'4^‰æ`¨pY!*Ïêµ§qóÑöÎöÑ/ØéÇÛG»õÃCdªMä|omמïl¨ýçû{‡uèÜC‡B–4¬ö ]Uùÿ¡Æžx¨ªü¢„‹•‡b\ƒrtÚ§:Séڧ䱟n>¤…›-ÈÀvÑoÙ»ÿ;|ª-‚|]þ_$C2‡uèÆæÑÞA‘íP¶ÍOÆò\‰ÿœÒU@ï¸9å%#³›ë°v°½”•I?Ɉ-<Ì¡£°Å€Ìa‘GwL“µÓ0± T*»ÈÏÝÑzu=Ø?¨ûß{‡G^„”y¾›.•ŠÁr~½¸6ðE Î6œgŠxàûªßñVUåI 2µ¸· ßB?0+×b´_´¦Ÿ\êUw2ÚŽ¥(mZéc)»ëÜJ§Œ%™½[Z“#ø4p6ŸÃŽ;°d®‘OˆøÜC»õ‡L ßO7ä|„4”ðbaP$›õ®†_Î#2Gˆ°¾Ð}#y ÕI f\ÏîÓúp;d‡Ò®ÏIfö“±ìÖQxØ Æg„ògÀÁ™b¡™ç°t\3 EcÛBV \ µúæ.[‰Ç8±‡MùèÄ8ŽKsdçöb¿¤DÞ8Qëµú¶×í¬AõíSš–]è¿Ý“Np¸÷ü †YxÝÛσzí9 £ŸÉ°Ñ“úBÁIDÍÑ A:œq¾[oÛÎŒëŰëæG;8Þ'¯"D´~9“âÔ±ÑUÔÌÎ?VG§êu ô[gùûIFdVùô8ÓãÄú•@iþ¨7V­À·h¬¶þÛHÈ\U¬·Ñ»1F¯Š6I_HÞ—áhþ؇‚ „¸ûyÒåËŠÅGKEe-Üçû\.yÿk>ïT\yÿ>w²±!å©d—ä@rµ”·Á•¡b½ŽÕü÷¿–—–n¦¿ rhçùð =ÃabNåbNÑxè8§Dú42£{*: š·†]Ö]8:×|åq–·ÿ}»h¬×9ù¬®b)•Ô6Ÿ`Ñ0<‡+_Múâí&×8Úù.RŠÞ·0ö8*êOÙ¥ø}T‰–¦(l¯ÄÅ[ª©!<Š¥¼¶ûGvŒdóH˜Ñ[ÌtÒ±ïï˜ÑyM Øü²Þ¿‡tb;I%ô)£ZXI=U*ZÑþܪ£¯/Õ»ª°Qp}j¥C÷ÍkC}€ÿó mñÓxèµ¹¨åó߃'ÿ·½ß¨ïþ ‰¥Ò)4˜FÂì2Ú²äi‘ÄT¹Ñeië™ðô3Ñó) > øíc0ßb™Œ¢$̱‹?´_œ‚ÔªŽgÊuóÅOñ⧇A­†ÁZ Câvˆ#äâI9œ")1ûûô¹¿Oa›.aˆÕv )Z< ¶ê)'þâ—øxÈ¡‡A½öt¯A-âÄ욘]‰921Góä N-¢|¿¬ÃB¦ = tNº [xgo÷ ÿS{üÉÁšp¦Ã6·¹¼XÉ äq­±¿½Õ¨½Ø2ÝȇE6%hâ4þÐý¶©–ö~˜Š²y åýÐy˜-Cået;[f:%qÛöý‡ã8Hq:¿ŽÜ 9šæ°ÁØE‡¾³Ž‡Î'§9atºõ0pr<4Ob AŽã‡2‰¥‡Á)`_n3‡òEϹàñÅÅÅu,ê´fdSàCÇÇNØäc“Âß’ªÛbÆÖ²Jãq <–ÇCû…)g±‰¦àC‡áÀÑúëa`X+9D1ØW+_‚·;]¥ùx¼byi:âa€/ÌœÀ¡‡ÖwÅ(> bè˜×)/âa½$pbÌäèyÉf‚pެ(‘h  ÁLìROôZO.ÂAÔr;èÇ@³§õ^N®¼êXóõ0`S¡v½¸ßƒ4ñqˆ?\Üñ?ñ0#/3Ù2^d>åAFaÝ^ñïäÉÄ,Òüb½‰Îú¢A‚òáóÇ·_Öן– ål%h©i=ÈdQ­« <­lG$Nö#š9Ä®ˆ’2 øJ&À–òè»s©¨¿µåôÐiíª“ø¦&€áZQ:ïàÒ` ÍÎyï ”ÇLûŠS”"V7$†®°Di ¸íqX2jÑCÆË*DÕL)”÷ᢺ½÷üpÝÆéÀºšÄXôuï=^L’ÌÆvè—¼,v¤»†UöaÙAŸ”CäH3¦™<†Ù`Tþ¡,9í9§Aj EÛ‚Ï̼‹`ê@®ObFî"P ›GÏ}#îÖ mÂ-IL]óèõ‰;/{Íc;ŠÇÐ4 ÒLÑL\®hƒÍgŒ\‚@ãŸum‹vÖ–€ºK®Š_š#~5Öy7ôÚÏF]^6TÉC«©¨Õ§Ö'ðÏg-~¿ήœoݤ›Yû¤ùQÙ»?ï˜/êguÛ´aŒê•ù‡å?”.Z@Ø%ǨƒºÌ$ÆîúôqQs¿+ÜxÀò†È+9üºõ1~܇ùEÿIâ¬kó‡ü%ÇÞÊdá‡Èª©R•ÖÀƒŠ©«òÔn§ Vșݒ $Ç@rGäÌI–ÍìΉ;æõ¬ø1ƒ8c,xõÎÕcÎ:o¿ä¹ÚZL?åѧVd/ufÃîÐrÑ ÅGÕ–¶G_©ì0H«Ì[úyÌz'ô~ÊïçÖb4B*FVò6±–N !ŽD ØIçEJðí|qµ¨%b& [Ì …Mÿ4^&éXÑ>#Aô<Ï®ßOÒ‹8EÛáVì‚Ô$q\ì7°MkE×øzYoy yîÓýå{ésÓq6_ä9öžTÄå‡Êß³Z`:ŒOwr.‰Ý½‚ufŽˆq Á%$«h£¨Tzu÷Íë¥â†!–Þà#…®ÕëȘ‰ô^+6’(êUQßß3éN$o#@Cð#FR±dv¥rB9õžÑ||Ù.ò²œ±gxoÀ„È<×ĹÞV1S'à+I9çžµ¨B!-‡šþó‰/ÈéJJaWÃ&75³ÎiðÞ"Ò> ²Otè¯P r–´ÎˬøÃïtU÷‡:Û‹½ÞNªÒë!ÕÅä=­*h¿=^¨ú\à-Lï]èï±<©®\þaÎTf)¬rìq êÓ Õ}‚[™C¹-eåPÉDo«…™ |ƺ]ßðVÂ49|§–žÉ ?ªœ»á6M7€|±-ù7Ú}Æä‰»;ð¡ÒŽàúGà¸ñA*c#æí6 hûæŸÞ fªEÁöR¶â½ó;o³;Û‡ûôF EY£è´ØæsJga¤Üo£¨zB–`²:–&dÛz-Êû{[v‚–Ì⢕ðÞ0)^üô*‚~ÇN^åó+¯aÈ¡~°,w]Ì-[¤¦QÞ"[VúC·^÷M»­ÛÞ‚æph…­+ìmàßuåOñ„±õï4XcR=w¼QÔc‹¨â<©R{Ð$C•<ýé³g1¿HoöÈ–¡Gû’~LçnyÉÝ`nÕ½éÑ¿xã¬}U-ÛËnvñIÍö1tG&î*g#eçj/™+$Åðþ½PBXç .4¿ù<sÅ+> ¯OÛþ”ÿ£÷‰çâ$½WyŒõæÉ´àÏ‘ìÀK1Pµ/“jáÕõš7¿jf~-o£’7;ëÔT'f]Ñ–Æ<IöN“áÌ5Y†µfÜÁ »¤Z®˜[HÔq½¿¦ò9¹²º1‰FõIëQkû`o÷Y}÷gåäþàB6ëR¼XåQ‹]W¹/;t¿°/onï4dhrÎÕŠ‘.Ž~x¸Ã¢!Ó—…}G&R'ó§“Î÷€—û›‡¸tÎiÔ†–ê¸ÀùÍÊø|þG˜âH}ûí6@´tÍá×ø Ìù`¾^j€,)¢xoéȆBj0¸’ß¶÷Ç*ñ°ìø%ŽÛ›S¥è7|t§ÀÉE£”™I©Ó°·ìjn³Ó‘™ÂR‰ø$ÏMèÒ¤R§êã·PYú5‘=·¨§ÉÄà×hè>£Ÿn=n°=3º`¦/>ó%ƒ4£+“J·ÚÚT$›HõŒvè¨gâhÜ2{f§2L.""=¹n—Fc.ë¶i9Új©î›B‹²¶¸Õ—hÁ›=õœÆ8#0-eQlú²©JÍUêD6YZgS]êÙvBCIwsáQ‘Ù³l±?ö gÅâ˜`]1ÅÐp÷Ùw<"[xBÙÌ®s©Oì¹™0¿ç s§\©VÎõþOeJÅú ÄatØ©{¯ÒÓ9žÛôÖfö۞݊ X&õÐ)¢Ìë"å­L-ù"Ùæ¥Ì“·†V±} GœûÎÃùô*¯^—_ýšÏ/½®ÿ¯*çšrŒû™0ºl.8.ßÑ¥®™g٠•il¶Íæ‘4BHcʆG)‹NA–ªÂÆ0gW›Éãw§ò>ýNŠÅN,sæÒ´ÎŠO Æ„ó i—¨É›ã’ïašÊq¥r·µmxoçjK–+¯~­¼†Czy¹à"#@£“4ïÕ [aæ‹&® ³^d 味l^9âÔì@Ç› TUñÊêg ¥û’žs5=ÜÎlŒQ¦-ï6DmÕX *D»“N³üÓªÙW¥þÁxy;¸8:ƒÔ+€w’X ¦s3‹qGp”í| Éðþ=×]Áxf¯&‡;âožÆ—cõ”о‘Û@]̶чŸš55î’׿ì%w?{ÎX •ñ+ãÄRiF®Y.“8ºö&íÕ˜#D¡?sn6'‹ýÎßÇ×Õu“€‡K£õ· ºgrZ ¸Ó®©Ë¢4SçæÛo¿õtn¯—W¨us¼&«äÝñb÷ï߇£­Ì«Õtù9J§}æ+„UR¡,fÁPn-‚]: 4çÌÃ@éü÷v]'=ñ Ü]9ŽQÈ÷ 5‡ ]+BÀÊ×2šp(sͧPníFUS Uú.«¶ÓßצW™þïFµ¡xéõ}3jû¿éu¡´±S~zÈ|ƒˆÅfŽ¢?}¿q€@zp‡€~KÅ{ôÏ”:|‰Dkÿàu"b+ò¾Hª "RÍ¢C×±‹b[ZÄŒ :°·v´¨á|¢m„(J¬{W¤‹%H:g%±¡ÊºüÌöH¶# {mâ Ùgˆ›x`„Ò§Ö¿3’¼KÒ]-ó9>B£žŒÑØ¡ãs×LêÆ†+_C<%k Óÿ§ŒzîªO/ú dÞ¬[RH!Óö‡ƒœ¶1þ"¥5KÙȈß‹×J—ž¤F¦—Þ OÓü&f³­jø>p8PšZ·q Ó}J39u=:ï×W¿®£°uò¶\rÏpk[(ÀoÍwGÏP_°Tvû*a·Ôj–òð¯’óù¾©þ˜ÄrÙ½-•„·Z.C˜µ/èdö{“³rˤÔOæË­I—˜òú;+½õ¶=3í«™¹¤í󿛍œÝ‘qYMñLWM»ø¥ì„ºKz"ȸøÎˆÄÌ6L-¤ŒºaòF­9¼´,­œKËMé›ÈVýÂþˆ$ŒÔ$gD³GÕ™ Sh<—ÃýÀúÙbÒ/¹a¨ËvgæœkÕ¤A¤ÏŒ¹€XÍë‰ì‡‹š aj1ìœ9îkº¹‡àºÒìï.eO3¾Lµ³mæ:Sl‡Õ ú+¼( ÷éï¡EôåÀU!CeÌ ®Ÿd-}>ÉÌe4Ó‹Âdë0 nUfŸ&ž‡ŠÛ¬ó¡êDgCž £]µë9µá®>ïíÉÈãæÒqËyÇKÛ^òj[ÆÅœ÷¬í×3«c^f³ZÕ_­¥ôô×íêq4 †EP q·ýÞÈøÀØí:ºDqX²@¦)1:Ì`q‹”~þ¾óЮ,#îT!'мºNž)X“|Z£öe%`V qÊ‘[• ÇîÇz¶õ7 cö—p;&ª¤Ä½˜wK(,Ϳș>ºOë0nö%pÍϬO0F¸6mÖ'X¸±²øë™Ö_ wÎ ¸!h°Í­JºQÙ–kÏ ÎúäYO™0À§àLKÅœhJ!›VÄÇ*«¥„è‰DAL†½lßxפ‡4zÕ¸.ªÚ‚¹Ý®ÀµüBrðíæº6~i¿­4‰»Srå)Æ,.±ÆŠ¾³f¤Á˜d®…ýûÃáDŒýPÁ ¯×Âg?ômŠ'â…(g ¢½ø¨A …Ð¥°&‹~QâΊÍwaùAD襜ãί§­ßèAÁ5é5W9–B=C:¸ö,rʲœãÜê'ÛÜ*š\FÒ‚²­•?6KÊS¢R¾LH€zöë¾Í*Š#,CŠîëÊ7(BûzÊŽÇr©Ôæ³ÀQºqra2m]Aj[;°¹eÙ&¯l.ÝÒ, X6¬,r¿uæ´ØµZåäIÖ3ídùx†[œ^áëÓL%Ýd-YéY‘Cc¡÷‡[b_1cõâܸËHMÚ‹"Ö³-EyytZ ÞÔ°â'Ž«?ž}>ïÍ-„œ©ÇeÄÑøp8I™Ae)à( ÙµŠÆ>ê‚òþÓ½Ý_n”Í\±„@ÅÛÔáè Ë5Ø¡"”^9¼£éým"¢!qÂ1¡B§GgºaÇ*ÃV†‘© ûTiŽ£2œ/]œs3Üâ•ehÚ”VÆ™ŒwßÃyt˜ŸÅJЋ¹ :“æâÏpã¹xˆÆI"~»S4MGP“co½P*îñj:Àû5\ú±Ä=.·¸MŽP·wp«‰lÖo Ù€ 2[„{ûG'{?ú&çÆšÌ-`ï;õ{İ7/~PÜS"áËp2O‡§ný°ñt6¼h0èųÀÕv÷ævÖì ;³ =®íí̇}8ÍÙðN^ÍœÔÙ¨×ä—²lxh0p|-0´àO±²‰kƒ–Æ8”ý£¹šÔ^OoÍþÑ/s¾þp$4²>G›¾‡ƒßÞg.²íÝ££_öçZf'펈Av§4pûp®àõÍg³Á†íNŽ¢ÓA8¸V‹¥FÇ îl?z~´½3»Ëݨ®guøYýÙÞÁ/ót·ûÏÊþ”Î>ûéð¨þlvÓz¼ã+ÃhÐÕÀ]Ù÷Gõƒgó43îG½éËoo¿¾;aýUúƒ¸Yù¾ßnýPi^¶Øe'Š„`tÓ…HÏò#êè³3ĉT,]™kTsöÀ@Ãg´|žaè†Qïí”QØ~Tßýy6 |YÀ˜ íšílïþ4Ø@ ŒW7€NÔ ÓÐq ¡çÆ€îh¸Æ<åàkš¯A¦Æ‘À×îÑKØóúìÙIЧܬù9¬=­oÍ3C­qÝŽ:­)cËà~Ù®ïlÍ2êÀÊœ­¾S¯ÍhÆê9¬Ï·zPÒnMt¸=O×z¤Þu6 ÔîþàïÇsLä°¥fÎäÑÖVýñ<‡:¹ÀΚ7'xH­%³¢1ÙÃù!Îp®Í0tšáÔ¥{t°SÛ<šTÿz¨ý_æÕëD½é vwê»s€¢›æ4H¿àá9ÇÈ_'•vÜœM’ÀÆö^m>²¡¢-y€¢Å·yaÎEt!Ðy©.‚z¶çjé‹Íí¹ZŠtH;žÙN$A¶÷¦´²¡cQ"j²ÊÎÕ”v7šÙŽígõy`zÈ‚›íùî6`’y6é¨×‰›o¦äÏwwöj?ePäü`£.ânt>ˆ/{pþ·ÚI¿^ûGóÞ³:Ü!_ìÂ῵}¸¿³ÉÛt-É"¹6ß„ç‘SBôvR’{éV‹¤ß.QAVÁýXô}V!%ŸOκ{O"@äãà­ZPFEgh¡'-táfB[ÜSaàÓ—¦‰æ€Ç86"*Œ$×ÝÓ¸ƒÝ çn¡ Ïyƒfel¬Å1H†h8Œ^³[Ñ[ x_¾tËýR{ºy°š.˜DÍfvɵtInéðZ‘ðµ—u¨‘ÿ·[¿q©±Ëðü¥~¹q±ÝçÏêÛµ—˸êÌUnÿ¨öež½¼q¡Ã: #Õ·n\0c$C–'DÃÑ Ça¡&íó^Ø,ÖkuðåxñHµúO;yiêݰ}‚gÑ$TèÛp©\1`WµGñâN#iâN§Ñ[nk÷iìíš{ÌL »¹{¸­j.¶NÜÖš®‰÷£‰\5”àI³ˆlÿ±—Óxx!§±.ˆbôIãV@ º±ã#y[Àϲí{£î)´+ g_ÑÈö6 íõ%0ìÆå;ò9Ñ{dâ^»í Ì)PNÑl).BMQ” 2,õã¤}µTTœEÑ§ÚØH¡$@íò ¯¨GOéb–¨Ú|o⩯x‡aoG}èo Èʰ‰Â¥hÒ6V˜4šƒF'BdR-„§M8RÎ/Úÿ}Óéöâþo@ÆŽÞ^^]ÿ^¬;õ#¸ãV ›j[õÇOžnÿç§g»{ûÿßÁáÑóŸ_¼üåÿLVš÷*É{p$k«}ÞBý+«k÷îóàÛ§„8Ž5ˆb•+rR; Fvç2¼Nár`Õdßù~d½Ý­âÀÚeERvyåÔ¸—óù2-4JV9v5SJýà%³*Ä×WÊDÛsì ¶Òƒ»ÊlZ´RŒ%M¶Éë\)¿ÙÕÂ.)Y=c©¸`Ih[˶¸NÔ! m£þ¬&2 ë)Á-LCµ¨ŸmnïT¬lHü,jEÕÉÍ„ ¡üUú«·‰= 1‚Öê‚Ú~|_DÌFH€ÆŠ–Õ0<¥ Û‹.É®ð2Þ~úƒ¨ÙNÆ#1Gؾô<üÿbÚÀí5ÛèÖK¾äѱðì&ǃD?3wáîÝî‘6Ü)š{¦úJP"ëÅí3ÕØ¡?ÏÑKÝN­±¹µu€Ä1¸³ƒ?µ½Í#J¬á-Û[õÝ£íÇÛµMê`HµÆ³úæáóƒ:Z;ãÏÃC€J°žííÖ6~Á09£Ã_f``ps¿~ ÁÕwê(tI™èÂI»Q.vÿë+Ç€õÉ"òå^Uk†¢2C‰ãw’+:‡ÄôîñÑSC‹6ÍÀÒæ-Í.@M?\e´ÈŒW¨ÖUáx1<.2àÚ*Eî%[ý"‰-,R^:^,—ËPì÷ÏKˆv·f®â猡8{Äà êö9«*™Ôµ{9edÑàóËJέWg«ê€S¿Ió޹]ÆD¹º¨9†tÌâvF\§ ÖC,øþ}—)hFÑTŽÑÖ Ù[9.V–òuÌ*/u¦—Ç‹•ÊqqB ÎÄ—]k##5½§õÁm~…ið+=†Z+ïÄ Ô´ZáðoøóÿT~}‰eà?lǼy‹Ð»©Y“ ä@“†¿Np\k[ˆeÊ]¡.Ö^{Б‰‡qyÐvÉ­ç<‚ÛndU5D¥¢…†ÛéöÓz1M¸U©Ë§³@í×ÜSs°¹ðu¡!l¼Å¢z@7çW‹Á‡@gIFM”½ÐyR%Wœœb5nBÎU''D¥áfÀÃ\)˜¬ÛŒ[Qu‡>Õ\3œëzìLöU}¸¥{ÈV´Êz§ºeƉ€tc K²¦`9¿I ÝñšÐJg°æh©;´ã­]¤ë,Ú¬ú¯ þB¿„Ç9X.Ç9Uœ§;x{Äë>,B¤»^§¬%<¤«¤ÿ8¯A@E+EVdÌ¢‚E^nHº÷âÆjõ8œàÝ=/zÍæ rWÇy§Ü1ÝÈR±kÇ9>2L>3¼’h0òøä8§²ŠOi9á5ŽÖßD’­p5’‹¨ÓIª„)?†rÆke*Ge” 2¢?Ææ€©ðhe©H˜UÚƒG6è^^ eáoP½RH³úMÕ¥c•!×nŽ 5Î í¡‘èó 4¼ä‘–PºedÖE]š ”NCE^I¦{"ݱ—‘4Á:`'½°àþ ï ¦~ç˜tÖuæ¬-57º ‡wµha Þ¹‹È)á¯õý÷Çp›¬ï=¾es} 6×z £ûÁŒ{ÌWͼèÌ“üŽÕçMÿí\þ‘s9•º%€n  y  \~õËP?MüdÓ>)Ò‡9Eº Ñ=^ÔšKôä®Ä8vŠâỪ_lZKÇ(3×°Ë|‹QrrëðÄ+Õ]÷Nå3amŽD¾ŠÎ[7ñ§°œ†Yk!Äâp[å¤EMX~‹]›E£ŒŽÜ®f]àÐ'—Ë•£W>yÛ“l(BÏ´ ½‘¡ˆŠg\ 7-e_覗^Ù†bÜc1o~Ü-曵ZaèøgY‘Ù€Þr±Md:HóHÛ wØ…@è,§€Ù!錸G‡û¦˜Ä(4ËV>ßgo/³·¸üov™4©aíê Á[‘ö¥˜8JtŠƒ&e]HöçSCGxxÞ•ã~nr6ô².ÆKl ñšyúún3£a„¦ôÏ‹ Õ¦‹ua¸€¦Ãµü¥H"Dk,¹A˜6*s|_ Idü$¼¬N¡£ôba[º€úÒHû""‹ú°ÉˆÐHõ……³ØF¦ˆY’¨…+“'+$(˜·$‚\TŽm*E! Aú%ä+fq ‘½$p„„®XÖÖêEI½’Scزv ô ¶¹–ìVPoM_äÏiÈ2]Â>¾Ú'ˆúvsJÕ‘:j2:M†í!Mb^­ï¸úCm † ÍŽêÞX-À.SìâAøßP¨§!€ÅçÅdt~³Ï²È®¸=ûᨣêçíå Frš-È$Ü/T›íŠ<‰‚-Óç7Øý0îÄêQÜûº ø¨ƒ,ïˆ!ÔËêYóYxEW¿»·ZZýîßßE¶…N¯a® Üz©ˆu¶ž*Ð)Õ§¿•Wù×Üù rf ê{»È\®¶l‰Í_^ª|UªH´GÃ(ý`ØÌØþË¡Úß;Ü~©äBÌ/†Ù”‘“8[q¯0„eJ7O"¼`¿·‡â59QùW+¯—ÉM1a<@•dþžu áfÚåu¾È–mZz‹éµLϬˆ DÆýÈ+ó¢P½ãAû¼‡.YØ$Ôd¤ÄT$;ÙEQÏŽ·"òÝNЏ#Ê*W®øËk;->ÐÛB´ÉËN'D9o¶äT–SŠ04ž{Â;ÑÝÂ'¦çñÉ0ïªêeeªp…@¨Ê¯Ã›Ô)öí©^{º×¨UýîÊïQ•¥Øž?l +º¬—zKEs¥§¤ÂÕq³ /òM¸ÄKñÂÂÆÆù$³Ã0ŸÈXOI\äŠÊ,T ”4¢Àˆ H>6ªMV(õ †)ðç?º3Zp–³’µ!ǹD“‹/©Ç“¹A†¨[TêMç(6xêDAkh*~HUÝé©Râ¶G·vÂ#V§×Hª*Åç ¹,3ƒ2 ÃËXÇC˜¿„9Q«Eµ×SÏ9\fꮕªƒÆhwa¤AÊ”µ¢ÚúÏ“ý}õ½Z+¯Ü'U@]Éu—ìÍo´‚`"¤ PL¸'³óDŠ ¶{\?.Íd·<‹Ç( çÉbœ †–˜488¢Þ«§Þ~w‰Ày jÆAäÈ €ßpØ;=g¥yavg,µÔÒñVà ë/·´‹x5•úþ[¯'…‚9ýª¡¬õ’.W ÙwEøåðžØ¹Ð•ªLC[˜©qU-Hæ‚®‡4*w¦ç‘K;ÚÝèŽ+ÆJÓboNV."¹@CÞ…ãB!ÅÔ —«9§Jß[Æj¥œÓ/T³øYeô(Þg–Šx½Á“@mˆ;Éz‚Ýì´ˆ$pÚ[`¦UšuzçÇ|•\½^*®ol,i¼76õNQ'˜L ‰°˜Þ70CyÓ’ö¢‘\d䆻a C6jÄ'Ðæ(›Ön©lZà@ƒF³ß¯æxôtºþ×’/Åù¯}_Žó_É¿^ýÚpIŸ×ÿjüë¼»iK´(¸×œä"Õš¯ÿÕïO«ïó@Š|ûýW+ê{»ÂÀ K g\Ä ŠLÓ/SHTw#¹¶%jñðçƒ{åµeµÓÂ5@äuŸ¦‰˜<@ùq =Fç<ʘ¸1q i6t Õ“ES¹p%â Wô¥3¨¯«¿¡ÐJMzâÚ(6Ä::½%’I)L$ Sâ|‰¾I*îm§ñéå©pgûÑÞ£ÿu0€hå%éºr ìøÊ>#¡ð«Í…Vyqyç²ØJ"4û¤Ø§çlöGz óä#æÒ óP@²Pr¤¬›ïÃÚÁöþ‘ù$ûh µ X*¨ýò„¥Ïõ¼zZ7k;{µÍ`óùÑ¢Y ¦o6BÉÛ»÷k9 cÈA¦)æ@h¹`óÅOÁaýˆ,@Scà¬@–d£ƒÍg°ÔqŒï)AP«;[Üßç/äÔ_Öë/8Tðg«Žþ@¸·<íþm#¨’GÏë|¼¹s(áG0‡;›‡O¡6ø|¶·ÅÍ<ƒûv+ê×j\ÎâòЦ`¿~°àòêôW "¹æÚØÊÔ 3ˆ—OÏŠ‘ÁΑ„ vëò¡jʶW³ÙÕó¬;-Q=œ´d͘B Àúì˜0±ÚrHyž^‹Á:}~µ‡ ä¾UÍ—è³ Ïê2†QËM A4hc»LÜ!(Ⱦ/…µÃ¿øº„¼’ÕšrÛ;‰ƒ{ª»¨€Þ‹|û«bP,h" ïfÒè)+.Åùh¬š,_Áÿ‚šÒVáko2ŒÆiœ@Ä•9ëØUƒ­’µu =m+æi:±ô€Ó`&|™&sþäç6$cÞ ÉF•ÊÊ9²Ù©ŸòÜQ©œÅ1R)Äùå—BgvˆÙÒ»J¿'<ê§,qMO†.r_ÀÅ iœË6>K4‡ü*Ès† ~ŽòÚƒ°±ñTØ÷¬ê<ˆzè9u(¤²ŒR(e ›eht&l6£>qº¤{ ëFbŒ®5¶A2Ͳ€2ÚFgh‰=ûB±IŸÞ)9NØMHä—ü¾Úƒ\ºj›!Ý™‘ú†ÏTë¼ î‡¶AÒ=Œ±1>Š%^þ¶çµ±Bb˜sH19¨¢ñ° ú£¥sòPé£eÉ…â}¹º7:ßxW$iŠeûŸÞ—™‰pÂ68Þ+]í™>R—Òm‹IG8 AÇùY¼/÷Ã#][Æ8±œkI ê/Ó)}Õø÷*…¯JKºŒFÂTUÝþ DŸÐņÃgIæW²pˆÇµLX†Ê©IjǪrå¥W¿–Ê>Û2§¼ #‚•ùšÛîqÍ”ª\W^5³^nÇ…\¡ÙÇé{©üºÒ@OïöxŒzÄovòW{±™"xRA’ßÔ‚ã̲֘æYrÀ¸6lBf•pæŒBÔçNMHä7Õ@.% dÚiÉç~8a4!ÓV.7ÞV`YËúãKYŠ 4Bõõíb¾éb>ΘtžÁ”.OŠ¥|Íw)óÛ =å}¹Nؽò: ¿þuÛÄ«Ôi•,>÷â¹”nùXŒƒ´Md*“ÿé}¹)H6É„ô¦p[8>ç@~a~ûË?EYà{¨ø £ RK.•q™yãW¾\Ê••†_ü¹0ƒl9+h†^†˜¾K‚¶A ] –2€Y'"ÄÄhÃ6(¡‹$ "ÛAÔýÃç *ää×_?–O¥[2?~Єô¤Ù¢s&wO.2¶AÒùMµR Hå^»äB÷¾Ü'lƒÎÒ¼š ¤ñÞØ‹:™ôé}¹¦2þ¶AÒ¿ßNEÜu‡c°”jJ:"õí:ýç7Ù Û $§Â¬q"~„”I‡mЄt Ým.ªûÌLŽ%¬÷å~8a´çÂã-gþåOMÈo¤dã6 {dÉà~8aÝÉ”Ùáté2™ŸÞ—ûa&–¿mЄÆú¡+0}Ѭ¶¥TÒ©oÿÓYcã&;agDt5£¢yL\,óËýp©Ò[üZòA§¾ýOïËtÀÐ~Í*´e'Ƥ#ìPš8ÿÓûr?œpÆH˜8£a8šKã ͈rgÞĦ³¥¾ýOïË_Óñ1f.#LMHä—üq‘²< ¹\r ºNØMHt¤üxË{gL…Øßi´M<–ÎúusÖwîb½¸$2¿)óËýpÂfÖèÓ„0ÐãÙ‡‡šêo”qOš‘úv«ä(ïËýpÂ6hB¦}öuÉi¢Çl§2ÓcÒ¦™6Îÿô¾Ü'ì1!_þñ—¤ßX^™þûÁÒx§2âÆ£œ­jcÓÙRßþ§÷•ç$Ú  é€Þ~óÇ·‰s×JMHä—üÑô®KÞ-hüà ۠ é€îÀÄ+Œ¼YúÍž5cFÖ‰L}ûŸé^»Ï«¦÷n#L¿fE:ÓìÆg‹IGØ‘ó' ¿{@&EÅŒ5"SßþgöJ}þÊ õRF˲"3FãdzŽÅ¤#Ò#(uNAón^baDX*)ÝB/ybÊ´bâ'ÉŒ”=#.;ëXŒŸ £RYüÏìuá $¤Ö‡?´©IKœ:òS O/:±à´b M.’Y`RöŒÌé¬9–-‘Þ)áŒÝ@¯Þ $4!ßÔ¬s)™e~C_rà¹NØMÈ´Ëe´51íóB: ¿©ö%Nó§A©° šiP’Ýžß0ßo£vÄ„¤Òùå=£,Cqé  é·AäyZ.q›ÇÃ6hB: ¿þ0%Þ#tâ=ŒÍ¨e`¸Eé  é€ü¦Ú0p¸A"A·äÀs?œ° šié`[ÇÊ^q‰ ŸÞ—ûa烾mЄt@~S=µõIo­,ØRªEéˆÔ·ÿ鮊q“° š3[󸏱L)•HMHä—üþ»¢©2%­ÿpÂ6hB: ûàÂÏèÅ[Ì-¢™TpÈjß7öAÖT3烬ý «aN}%6–“;ë9V³¾ìdÐ× çË| iø|Xþbéjê»ë•×¼rwç•~{â==éÓûr? B½²f4!ðqœ•ø gkt59"õí:8þÊ},»âç2¶A!ôñe~U2éRnÒ·ÿé4†cÜ'lƒ&¤é³둳ÂòKéÆÅ¤#¼ñâ8?‹÷å~8a´ƒi›0>šKÅI{lÔDÍø¼×þeê O¬;‚¼š=>ɯȋ|Aô½"ºìBg¾ÈYªZdõÞ¢ÙöI¸ÊÕÏ‹¥¸Zƒ¤>Šò*äÔ•Ì32FôZÄÁûcñÍæÐc©‘Ðãí—Ïê뎗ËAÔßFäªAÛgR÷Ê+2^W^lìnï>Y'shQ ì.‹ IJ¡„LŸTæ¼ÝñOhˆU’Û@EEwIÚÚ!ö]†L1äù)ã‚’EŽa’³F­ÍÞ`ºÔ¼)]-•œÃòØ“¥Q)ɱ2a‘{+´#rû¨ç’Ñ߉+ˆ]Xl!˜X)®ïÊç–JRáºnþì…¡}V‘Õ6¸¡Å}ôás‹—,T¦"¥7ăøMÔƒl°ˆÚØÀ“<î$ô 3¬ ÌGþwõ‚Ï´”êLÅ‚ˆX{¯^—Y­´šO« Vócʂռ§48¬c®ÓJëtò8ÕûN`âSöºáõi4 on³%É˰7äBÝD­f(lmx†‚YÙò„Â!W©¸JöåÕŠ’–6ËO'˜¬ãvJοZæü%“-™]d“wÎÈLé0šŠ&ÅD,°Ö†qÜÑORE†î0£ v?£“\3„¹<³1sÖ/‰ê

    ÕpOÓ!D. {lÈp™NG=鎗J¿å„-5ò6“iŠÁPá]h€Q¯¡A]r m†&VØ';œ\ é’­x„·4ÚîY7qôŸÒõ’-¼E§£ósnûY …Ñ ­õÕ³Ò•:o’¸nØL´ÛAy1ªr©RÔm5Z¯z|ÜDØ##sÚD G¯ë †5¹@.A,Å ÄFþçÿÐ@”Çùw&‚<7LÌMÞ‘^Ö1NÎæÛ‚+0]TšK:ߘj"}1ú‹æž¼Eb„ýi‰ >‚] j¯‹©*l56@£˜0z±ðè´J0Ûáz‰AZÝÁ¹E]b¼‰±>²t.­ ã—q¬HýÍ^â q³òü%\±Wz Ä‹ÆP}ÿ}c³†VçOŒVrÁ*('žy(¶Âþ×»Vp·òpÏæ¸ÊAð³Ž._±M×hÙðÕϛ՟7wž×ñ3Žb­ù ÐĽ®ïiz1*Ÿ——U­ÿ‘Á (U\–#ŸŽì. Ô²R‡QîÄ—tiE|pÓXbckT Ò³‘eÁ`«·å²Ñ)Ǻ[wЄ$Zgx¡=ª &ÃDdÉ:i<,ëµáýkµÀ,×<˜”Œ®dŽTìÔ•ÝT!ÝiES[Eճ⃰ +^½h4aSå0 Ú–…‘›`H•~^vfÆ{¡SöšÛŸÒoËZÖ`ÙŠ“<ú°"鄸ˆšH ÂÄôNL_æÇÛ;u­Ì› Ö%ÍÌ%¾íÐÖk¬¾¶œÖ1f30ôvFBI'|WÙ¸@b²Ëž<®ã$Á±Ó+¦À‰<5­„ºµ}  ùä,µ“_Yr’ŸÀ@¼‚L£&íˆL€ÁÇýƒ:\4MÓŒ‚Aó¢·2€[‚š wj&Ö̓;w€Vz•3RGèiÕMU™•dTQ÷êàè×#cüdúê\)ðMÑÀ—¥©jo(™"A@Ihë‚-£¨_àÒ‹FoaOWÃã+\‘®²;ˆ,ˆ1HŽ Gb–éÈ#X=¸¥Ø8<žî=«=<†§d‘‘Åeº[»è…æEÛßÃ];Kµ§.‘Sq–ü#7ÛÖèd¢^ÉdàpñÜ&Y{n‡‹cvùÄp´?, ‘æÊ.+%¤~ûZn‹Ã–j•ØUÙ-.Ír#‚Ì;½†ÐÒ‹Àðå7N7nv$÷ÄmàkÆ]é‘§® ­rÀMkœ!fXÆçCh5rk`ßhÜáÂŽ0µPCˆ²t’— ú‚ØR6Uj/î•ΛMõʵ^à \Í}S¹Ëòø ’áÝ$š ml|hSf­¯ìíAi=0¬æ#}´VÜ$Æo·$Õqf65¬Â-M©[Ìá0 Ññ'S¦´’e8âæxa¿ ¤[‰é †¢õ=0¤‹™nÃ^Í è¯§ª~ÛžVFý2(W9­L2^Dõ“IE„Ü4ä籎ØB}Øyòí©CÅø‰9,)ÃX#M$h\x8¼>|þ8Ž];(I˜ZJ$Xlùáªõˆ¥¢câÞDxÁ!#`²x)øxОoïl)±g$ôîgsg œçÕùh(!X#øéÞá‘ôŒø§%ÍÅÛq}¥tÙÀæ4*ôŠ`šÉò¬J÷Òw¹ÚŒÏè^_ÀÛéçXçRýJ[™ÝÝóÊ]À]â|_öJp 1Q¨‰ÿÈûÒë„a´«N4oD·u6•“3œfRc’þ5àÖâXr ¢³ýR?œ é Äß")kŠš'bXo¢¨¼Ï¹žíÖ´^"¦·ý;1M‰ý ³þÊiÉkoæ5êm^ãî¡[€B eZa8àÆ]¶aÚÙö§7aõÒð»{‚7@›HÌ ¤n3¾uŸÁ%¿‡F³/Ÿ¸Lk5Û¿š}ög˜n¥cÎ:á9â1ÉN»÷F'-+¼ØªÒÎ÷(טóíå‹^D-‘€¯â©1‡C<}¿ÚÂZ·šc΀"Ï7IÂ÷ÆHš£Òùž3^cymÝ’:U©}ýue(¼NÖÛbäcÅ©Þl¯÷›ô(ÕrÓ?mÚ{7©?.(n“3n×@ÔtâÙdŒU 7ÔA»Å”vó"nãÅ« 5£F—Ïwý˜îÄA›˜t]³#‡·Zƒ#É ‹ÛfÂÝý, Á|ÈÉ%‹ãÕüòÌà™ûºË"bóyâB,}/ëHÁ7lÍ à{Y;úkjoÆÌ•ÂÝ ÀF1ΦšÚ¹ÉÕ:r\sy®‘}íý{?ÄÓædV'3mn¸³•‹Ò­æÄo}S [V-{±ú]Ni_$>„ʉæúêF‰øÂò¯Çez_^&¦ÿ‚ÚT¹r9GBN¥ìêî¤+¯7cMó+“ÌN•W¿Ò;ür¥\^>߀©Ý¼¼§Aò[~.W¼áP°Ó–¬Ô¬Z*Ö¡ñê*|k7kU×:-ï÷;X`ªPî%®|Dw°èOÛöðz=H5Ão—6:ÆV  LÖ ^æclø²^i†¥.ßÚyØI€Î¦»ìdÅ÷J‘¡ðÅ)`Ýhévoà×/M÷Gf#«Qü;©®Ô>Ì,2–ñ’ÿvB­c™Ù’Y£ã—>H§‘î rrùSMá7ûy§\¼¸aQDÂlAÕ%H+ ‰Y-0¸ºìyeàzŒ*6×yoä{ ¡]l„¹ØAù”²c\Tªè̪øc+XaM—?ëÅflÂašÛNǯ,/Ñf1@g_>%´oË¿0˜Q Σ^4 e)8°ÑD±ñ¶V~°ŠŒ÷þõ€d…kEµúÝwkËø÷ý½O¿¡¿èï¿éïwËjmee…þ®.ðwÂ÷èï}úû ý} Ý«ã³á%¢¦Çèv’†vYm÷šå€Þ]ìL\ ¢o,—H9v\8 Tp³ ôn¯Óî¶±«}$œtɸŒ,÷á }Š( ibJ]“±\3qjs‚cùƒð²;ñ¹}Ù¡Æj_E(ÚkKÍrG§5OŽšŽMÐ9z4õˆ%iúºLo@í–ûôxæ òuÑù ôdA  ¶‡$°Álsª„³¸HÇÄó]V0êoµô‡àâ²…®`‹ásSþ¡!ÀHf盜áÞú¹ëð99jXX€½'ÿÔÂ~ïÆ]T–o/=0^aªêf.b$½KõG*ó{Þè£Þ›Ü+M™[f0_™Ä-“ÌWæ­[æíŒ21ÑŒèS鱨`ܼ̆!(n¬ÿe4 _Ñ¿rX˜4Çüo–îÁ,½qᥒ²ÀfÃ…ø6ºª Ó¡ë„ø—ÞXÒ¬aÓÀ%H ÆÛ§“2˜= š·1~’4i'·/N:ÑÛ¨“5~’4ßøñ‚hãÙe´O'Mhàø‚1ÝW¡âÆöãÃjþl( ¥Ü½ˆÿt¹VQ* ðRf†ñÖö;ØZšE‰Ê2"ža-ŠÔmH³*Ó¨Ó’üV".þ±Ö>Ò>€kÀÒqa©h´°~së†O}ÝÎ%•B¥p,ÿ …ÊyîDÑugœdT)rµ¨2æÊÑ9‘ª •rôšÓ¸ôÔf€Xu@¤|æÇà¯á`¤Ý·ß™°PàNô„õ†F@/áõWp ýN9Ã÷¡]%wH‹‰­²§Í­ãŸ ¹Iz£2ㇱíÊ ÎØA³EÓËji|½P”Q*¶EÇtxud†:)«—YÔ2 ÒÓš“ÑÀY“–[ÊÙyS¹%åo”;fÝÝ›;¨¬¦h]¥¦ 'Ti'“–ÿ˜´†²–Ðø òW9ô À0Æ}†3OØïÆSIŽ¤í±´¾ï¥·È†VèOëà”êW§V¿:Oõ«Sª_%AqÝ$ºÁ¨7äõÁU¨ÐZVä[ßU"ô¼B—"Eއ^qPÐ`Øë\1^h4:a±Z;pä\ŠA‰Ô È%i£qFí4Ó‰ã7jtÞ¹ÆsÈÜÛ‘cM~BéÄÃC·*Öôfƒé‚ýЋÄÐ}¯üŸ±p¹QDÌÁâ$¼]â wÇ ìÑ ôÑá–º_^Qpi+T¦€£å±à¼F}»7Œ¡Ñ¢Š–½@:¬ªCâdÐVsD¬ôÎh¢#Hßòí½L&CÊJå“1&·À2õ0ÿ}±»#$ pÊPaв0$2dp7½€•€2X4¡„e“å`ÑÄ"Ïz²kµÈ~®ß'÷0‹Iå×ãÅWaé÷ÍÒÿ5^K`¥ô]ƒ4BËK(¡ÞÇŒ'ú8Ÿ¤õ5¦÷¥ù”„]”4zæ¬LëvIFÈŠ­ãŠ´ùíÝúîžÃ=òGÚÀ²ü=0¤¶óM0 u30k4:sŽí)ÝiÀ`% iŠPÚékQY$¤K{à³p§RîTºÃŽ5œ,"Ûª4q•ö(þÙP¦ÀIÖ¬˜ÇÊL¬8ÕrA‚ÿí¿q¾ÁÚ ¿ÃòõPiÓqǰžŽIêú¸X9>^­2Ä5Ö·§…i_ª-¹Ê¯óTSua™ÑÓú!€ƒâM7·ÞÝ{,09s{OÜßã2æÖS§x—г?qekW) ¹TÔ¥:”Ô-êΦ?£¹“¬ÕíЬ P æ¤Ý=²ò€ÃënZèÂñoèsœgÏ‚™‡ÇH™ öpÄ—“fbl.œÙ˜<®H,LÉìÙ¸“žˆ;Ÿm˜þº3ÇȽ»ÞÚ©I`–o+:KÊs¾Œ­-9áv>i”¶-œÑFó`Ë+¤}ÞÃÁúje’;Ð*xvsVå”ÊÐ en¾C*`&æL(5èâƒHKeúÁ?el.¶¨¼¤[ÀKt4PÒ’é‡òù%jˆã[—kAPP+ú-}à;´Z½§V¿‘“–i“¥Z°ýœž©TpÆ‚©l[|%ÜITáÛ¸ÝJÔޡφKÎ9PaÄÒãè—d£«f„ºŠS&ªÙDÚE³'ráê+Wè§A†=´Àe•ë¥æÓýÌYVÐüpÄÁ±Jb> šøÑu IÌGAcçÊ0Žø(XÆ3³ÎÄå\&ÚŽèP“)8z`I¢Š !9ß!Õž¡¦9)0I›^ȉ*óTŸ‘È6² ÚC€&0õg"©‡¶1ðn’§P““WWï€ÐîÞ·êŽ>4ò*•xJØü.ÌzèhB`¬¨ˆÕ“”¯<]–±Ï9› ›^ŠÖ‘Ô Æ…ô3 !½”‘s 6 ½ä¢}6´H`ÈÊÌD3c2Ð(q8®Ò9‰DîÄäi™çTÞõ| ñ\…l|°Z¶@øUÞ«J!ÝBA¬J•Ó)¬zš2ø=´nó\ "’t“çVÒ: “ Ö³8 Û2À Ö–g¾H2E€ûã`í¡¶¨=TÞ Ë7ªÐ÷Úy6¡9³‡›7‰[xÊ0gfÖÃËd…ã$ÑÐxY2åT‹7ìí"ó_™TRÇKÁg•ƒ'u˜¸¶s÷xznîòN¬ØYa9 :}Ä +©bº®©C±¼coÅ$Ÿ÷Fû,E±[€DwbfS%p¾3»ÅgdÏ©÷wZ¢’9AYÓÉ 7G›wZFʤåD…ÎX“;;«uËÍ]ÎÛæèÕ„ÑÅl»KfªE+™ŠÐÑ0½ƒ“áXb¥í=Æ_î`ÔËZŸäšìæH¦&u]ßú–ñÒûQý#î Ô'ôh9ûPÔï Å;^ÌAñHiÃ#vqhÄugþž_„ÖñzÒF°t»×çëýœ€p&6®fÝhÀ»¾½ÞŽ·bVþ•5GƒËOSiw 3+›žŸ*ËšVÃPw-…¯=Îò0ùÖàT9gG£,ü¸¶fôþ—Vé=OÏUú¡J_+KªéÄìG«q8n}™/[9•ñ\s8þ33ËÔ&×£>\ò‰÷ ”€°°£^B Þa&$l^—íÑwÓ· 5v "’_©™4#=cwñ.ЬvORoSÈÆÄݶèS’ˆã”-ö‘ÐÓ¼›ÕVÔV”Ø¢[l_*¤Ø 7>ç¦áࣤú”V2\Á”Sí²¥ÿáÁx5¬’Ðg³ß‡›3Šàçµn@_ºIN ÓjªÔ„TÖ0¹Ìå¶œgxØI*ŠêR.6¹8S„ùÆAåµ2ÅÌ<)˜xiS!¢µšXeY§eùzíé^cWå&çFC4œ­Æ÷g¨ÔÒ„ïøÄ R"¥à“†~5‹tò¶ŠDÇ6˜göÕ5%é\AÒ&™ç*|2eðâ?™ sÞµ@•µ ¹Aº{(èblïnž½ æ‡3kU8³2u(h‘¥àdÎ0ué¦-šFl~,¸™΄I=a›8|Òãå5ñ-Ó£é ´ ÌG§‰°ÒR‰.ÉÌCkg®uxÏ€•÷m=“8Ÿ§èŒ±ÑŠJbºÕé =âŒKùJ…€¹Ó^ff,óô4û@F®ÊÇ[8Dc qÖ8ˆâœdâ-ꞢB-­À7GvEãkÓ´"·™_ÂCß„úCÝA“µ$Èš¬K1`Ž%‘ ¶ÉÒYȺ/ (SH_Ju„U[¬(¶ô,ƃ9p.ÙÌå¦3Ï…q±Ð§"Ü ¶u]³¹¶2}X”­“g£[‡ ˜OG2Žƒ÷OE0™ æ¡7çÇ/XÅ4ô¢Óǰ ­Ï‰\ÆZ27nÑ%çD-îÊÁ𼈅ò2¶ ‰´Bá?«P•S‘Šä°8EÑ(E¾§a” ì6a¿m\ôVË«+cÜ7Tçql®MZ¿ž%0ûü’¦?[HY<  ŠØ±$FªÁÑ·ƒNÀBÔi#+^çÑh(ïTÄËakáñÊ·{Zs¹c_ÇÖQQá:ùYÑK£4kY‘² š½ÒQ˜mÔÛ;ä'/$ll¿TéÜ›—Šê¶ÏCQ³±œ|ÍÇÃÓNÜ|ƒCÔY'î÷¯‘ûÓLä}eôh¤ÐiÒÒ`ÐÖ*iUă7Jd¥a8Kçd°!<–„gÉeâBÑ \ñHí«6 ?ʨα‡?HFÍÓtÑ¡¶7¡Íœ¹Îñ¨¯rPàì,ö+kxoäÓ" ùà¡‘ÕíàœÁÊ åŒ¨ö†í&€(§€(¸äâÞïEp[…‚Žâ!1ÒÈÜjÙá|”gŸÄ%R·JÎúSÏÃi§ÄóØÞ=<ÚÜÙÑ ±sà]h&Ë'_XþpU(XŠÍf<ê±¾cð¥ÇŒä¢éB¨MEˆd³µA[X{@Kå þ­4k|ëE…Ú«øa·´ù2I~´ÝÈëÇÇ•8Yƒ¿2äâ×dìb‚L˜$PÕz£àc³hük§L‡W‰IsXÛS{[Gèû„aÙÀG|Ù£¿g[I on‚E¼²¬<µ‡©$Côª { ­ ŒSc±ìÊW"ÞÅá>×:iÆÔÀ6¬œ¥” ÷ÈŽ…R¢²v1!ꢥ’w`¿sùŠJÅU ùwõ¡d”=¬lïyE9jfI4 é•÷šxpÿ~aŽKüåED+†y;îë'z¸{Óoõ3Kg‘2 ê?#:5èý:H:¨r¼ÊU u7XIݾúÁ>ê‘mê¶h_pjxgÅVefóô4b;ÝZš€rBÕZ¼øäý ›€øJ;²¤=ŽÉжsƒ­ —Œë.¾Qn°â“6Wdùúæ–:§S™nWØ‚.Ü?È\™A§²ØŒÅèÜh^ ¢áhÐKƲöà"W¡Š›­[$)OÒêÀkåKEþdv†Ú”’}nð‡P¿•í#ßt=.±§_‡`©ÕnéëCÙh˜ZgVJõ0×Âáî즒7/gÁֱ̉2ž!œ²~—ó“ìò˜.nŸ©^Ô¦ÕÜ ‡H‹g—K‘€ õ…±ƒë‡ ½Ài~A¶A ˜öÙ²r @/+-_KŒ(Dò–HÞõ¡@xh˜J´]r¤ÝR’ º~"(d…Ü ¨…†ïGMTü“‹T“ôÅ DÒnE’GÁm^6B]38.<ÝXI8 +r’pG™÷*¶P×fi-=lwvÙ5ino¦ðh¾H]³ø]VÃCÖÔnбõZ ô’÷ĺ¾4ÍEÔ³WP–GM'£Í[?œœÜ Xz“º¤§ÙSÆï3×2§pÖ©%™¾Ä?°Þ§òB61trdGÏV:ÑÙm‘Ý\òÕ¯_¥J~µ‘Ï΢"„Óƒ\«äñ0aôç½e Ð Rª9ÚàßœÍ9Ε*:µ=âämY#%–/ËmÕjI¯º5$¹#mc蓜äI²|µ|UX֚ˈkÎ.E_!åÀ3¯ÅÆ¡hm…$•WÇÇùו¯¾ªœo$• ‚´œ¯T´†Ã„¾Š ÉìT­ëà}ø> RgÖOlÊ>"H‡‹MúŽ“A¤Æ‘¨LÈ­“ôÁ&ÔÓ¬³gÛ‡‡Û»O ±%Zæ_Íçߎþ€ àŠø·ÔK…¤…¡-º…TaJÈåš*•ðáõþoc݆@k@b5Ù¨F¤òMˆ3ú¶Ç'R¢à°@Ñç 2yÑé­ôbšÎî ` @9'{ …TÂV) Ï€ÈyƒÓSêÏÁË*6“5öì§­íƒÆ~nÜo¢wõ#xk,•¥÷‡•äìÙJÍ5K1ixÀÎé‡Ù+Ç”!tÿe˜2žíØ;ZœõdF%ÖÿŒ«yÍv< ÜëE4‡ ‡poë$EU`¦›ŸgV:ž†:ý~yu©¨m…¨ô2ªNk°)% ±"†C C¹&<ƹLÜt)Ä»A¤tݸ¿Cêý[°1´MãrÅ.-XɃ.Ž’9> –éåsó3>4ŽÊd|8‰Ìø éjô«· ‡[˜Ã=îX³•+20Žó‹®UÜbECÉFZf÷†—o€(‚?=üÿ1ŽZPu6 îpS.ÑPW|¦½MÇç9RkõûKèù7Ë$ƒs Ið8nºÝkÃêÜÀV D|ë¨ÉK™‡‹Î8—¶¥±ùâ§Ï%‰@*™/—@ÐõT9UY=RòÞãÙ.'j‰ÿñ4sP÷'œ$8sŸ$c™-{ßAÎv(õBWa7kè M¯ªé-Òê—ŒžÖiäÉ(þmÈûm &¯ƒ™˜ƒÖEÖZÀ3 5°^œ Š£•j,Î d³ÊéÜF Á7ª—ðzõ·P¢aTq.ãäâY›Xä,œ2„M0d$ÖY…¯+}¸í(¸ûüêØê©4P€! •’âbÕ™KÆZ‚TAƒÐßhÈŽñJ‘çr„;ŽyxKöÄò¥ÝO÷Tk#™ùKU–+HàrÔé¬wøÂÇÿõ¯UeÀªüYк²¬Kð³I@N} hn|óúœx@Þå¿öË"{^x×ÿEÉk¯ŽEÿ!Ü„Ñ6 ªSü²àÞ˜l1º# F&!_èH®=¼Ö:r¥2JLˆTÙéS ÄÌIu¥|oå&vI¬5’Y5±vVÆì«ˆ‘VQÚ$+#0™=ôÂT‚ÍÚÎ^ms°‡„JH){<«a“å•(ÁùûƒM°ùühŸE†³€ˆê‘)"HK'ÁÆN«øi}s«~ pøc$öID±¾íÝÇ{‚31˜Q«F{ˆXÄÑqË¿³%¼‚ÑY]ôøŒŽÂ =vo‡ppž‹Ï!ÔíJø9¹öý>¤òÍø„¾ Œêô à^ô<ª–8#\àŸÆ—Œ)ÊüeyBäF·ªä‰ä¾‘:ãØê£ó¼’,ó>?‹EuŒÔ6/r÷Ä…ò ZáÙ/d:Ù2nšFшÒr ÎÍŒ! œÄ“¤‡zšç§­£aô3‚sZL»¿¾ó‹} Qú¨Ûl&¤¿ÔÝ–fã³Þn bæý–Rª:Çí÷ï¸z8³—ëŸsçå6åÓ­ ¦­™7_Y/Yw_“ôn¿|ð´½Nùk|(óÁMš…c>¥üõ0ˆÓùÏŠG¸™ØÄt?÷-fùDÌâ ퟉N¼•ÝÀ`ö¢™K{É,žIêKN†ÏlÒfˆlm®²ÜâyNÖ½÷±næÓEë†ø¹ =²ë\GÉz1˜ù¢¼Ít$[X¶fˆ’C*± Ƀ9‘ƒtUX‘Ÿðj›8öÈH)yábêDøŠ´ÍNI*“ˆ½ 廌ô˜ÎFD€BÎeÕg¥y´ÝmŒ b™‡ç½Q9œO·Ký·î^™ýùDÞ—y·±KÃ]<ží9Qz§˜Öñ3‚¨k$YñÊbo0E4ëRJrdkŸ¯…ø(Dx ƒÏ¸ðñ±¨š–T9Șc!84TIŠ[0®}q¯%].ÃëDÉ5uóÙÑæÁ“x!Å,xŸÃߌ[4ïTx!¢½_ÉùÀž©,“<Ä#¦.l_gÔóó]A®‚ØÀ¹UU»UU»UU»UU»UU»UU»UU»UU»UU»UU»UUûªjÖ¿»x¶Euœ6€v‘»•<¹•<¹•<ùÇHžÐÕ:î¤}ñà(3¸¡YâbäU“>.`åÀ½ì²×DpÇD}L”ô¯1Ƈ-ô‚3fÍàëýmÜXTRŸAì=÷Áñgኳï)”-Èçݼʶ7oòhA 1=*™MoVÆÌÙÈŒ’Üä¬Q»0î¥[Ïã>½ñ©Iš³á©RÜèô|§ljÏ›YñöP–ÜÄqJpb«þèùµj¤%¬ 9‰ Aâû¯œÁc}$”Ø5n“ÁþeGÙ°%ÃV ÙCò§ ˆ=*ÃÕ•ô’¨s†DP/Bg@áàz*ôËU©Mïœþ¬æ`©µˆõ¡J/ó¨%–˜iÇ‘씓– òG{,CƒŒOHL˜\ìdf¬WžZ¼|Ì1­O÷žÕŸì½ØmÔ·¶÷w6q&Ù©(µÆnTÉáþ/=¬as Wƒ[K‘&¦Gþ°ÓT{%%ÎVܬ˜dà|` KÁ‘âèwÕñxiÊÙÝ›h—×x£BŸ´ï/ rÞl~Á€ó—zÔ­Õ>ë[n­–ù„[«U)íöÁöli ³ÖæŸól ÍÉ{­ &®†™×ïZ-ûæ]«ýñbée<ć–ÌB‰%þjHAwù ˆyL@f|·Èâ³Hwà þyÂ†3Èœò“0‡›ú‡Hr`U¾þ­Ç­GJ„CïÚ®ð†Á€ö ¢Åæk@Ô|ÓMY¾¢3IÞ›½Ÿ‰æ½%yoO±ÏLòÞR¼§æË˜ˆM¦¢‡Ã·›ŽÍ¯´+kn¶qhG]º‘p͹UÑæ"°øX°‘©<² l„ ˤ‹—uŠaTH=\;^?áÞb)X£J[ŠùƳŒâƒè•ª ˜hž°µ¦¨Ó‡3²„ç=VËŽ›y7šFÖµI¤RÆ(jH¼ëÔoI¯‹W¿ª×K•Já$X€þî´áø†N÷0!…9§f-"H¨šãÙEš¤Ó~u®qäQO>ìœÇ@a\tµÂA|:bk‚ÿ©+ë¤\X†ÙAíÈó`ºZM˜ÃpGy©ˆ#fÔ®¬PZ%ÙÑ'n÷`ÅNj‡‚×[!là’ÀÕÅkÌìŽBP: >—lúWT QÁ^‘fù…C‰&ü„B'ò£ƒFƒBKZ”·Ãk1DF¾ ôúEgâIÔKûÑ€ýáN½;`W$®Ì7z¸½“ߦÑiý6B¶3CÃC­ ƃ7ÜçA—{­­_³¯”áÞŽtç3‹%Hº%ƒù–¯šñÙ…†0%øÛ¢¿ýÖ)§þòŒ§§òsN¿Ý°O¿@ìÐoÌOÿ«µn¡"E¸[·•Ö§|˜Få(¯Õ3d='gÀZEÞ9ã.þ¿Á!ã5÷Ë0ÎÖÊ«÷Ä“R"Ì ¾‹ð²kÆî¤ÊdMQüÉÀ†4Þ¦1q™u /Û‰˜ºc­&´Jåë/ëõ—G mÛÈòÐ’Þlk"¹0N ;ÅkÌu›]Â0cG,Pf¥áÄ  †¥f{Ðέ¡-‚ûÁ 8¨‡JÝÃ8°ƒRž¸iT¡ÀûÆa“È2õ¼?üY+¸#;ëUxúš0D9Ïe8BúqÑéh(g[µP@„ЍK6£¢(@¿d>±Ü!¾Þ¿€‹AZ.Çðê¢Ë¤s›¹Y´½Ãày([ß°ŠÌn68Æ®úwÌ×UáÕ¯å×KÇ‹ÇåòÒqN.TXæ.c}ÞÚ!‹­V‡7‚Ó}Œ›eÑÊ)…ÐMË:ßÊõ¢Q9j“Ðûy@®“:’ '%XÜw¬w¾eñèGE#vbŽ‹«£E¢qÞ6Zó`ë³e,]Gh¤ L:-MÂñ8~ƒ‡Ýèlx½î>#†­·aožãN¤ºµ›?<PÓ05o¸,l„E®™sƒSC Fw*ç5ÿŒ' S]è¸Ü0ž» Ì08nzç×ÜíÑ•Œ®fiŠXçJ„Òùµò^U ™jØìœ ‡ì‚K@HR»’OäJ|Î*R‰o¿Õ,‰o¿µ¾Í££Rõ¦Ü*´jZÃÛ¡Š·Ó(\݈r£³¢ íËŠ¢ÁU·<ÚJ"›”ݱ »ÃÊó+A#TgĈò™Ký9«`¶[ÏÇÛ/ŸÕבâKRíÀÎCM#9®N#­ÂO³ax|÷Ê+Á‚ ˆ€ÔÁšvˆí¢Ý6Ø™×L¬+ÁêÕLʽc ÄN^üË“Aب/Iý¸Ï©¡D$‡µ=eÈ«ˆÈO#m¿# GKÙð6­ÈFlj7k²å(¯ _· ·ä!߃UÈÖ.ŽOJ%äiöiøçOiËÎ+Y@i>Ëó¨„ËÂe7¸Z{–^ [_šm‘Ï`uüð%EƒÛ),4ÆÌ.š…3gžþcÛ)‹ ÈÈÄ7ÛEH2æÖè!ŸÉhÉ,5áE:ã²ù7¹dþ1—KXѧpT'.‡¥@ì5U %uÒ‡•4rA-^Fh1.>…ûÛ[|äû4Ñqq ì˜ÇŽ?b~«]Ÿ_¶a‹ ïf[YèY`³{°ûÑ(âÅv9*#ëmâ¥Ôƒ^${2ÔuIæ‚>9t c÷BƒdxG–o$ëÑË¢roqqÑ’gv‡—“u¥0ÏÙó„¸ëÑ!jæ~ôrµÉ­l‹¸pŸçäû²uÏál8eDÅ'Êç’3°·¶I²n÷8{2`fMêfàÜ8ý¦8V¾vÓÙy¤ì›KN ø¼‡O·ô·z‘IÍjìOÿ›qŠÉ²þû<ÉýgÙ$|ïæM1þƇò-’מ7F&†Ä^>^ôîºyÍFé$ûe"†vCE©SásÔyóÓ œw'p_Ïc÷Ï…0툰9»î=úsp"²–òœ~㻈µˆVÓ,Oæ&—’I0æ:$|[*ÿøÃb¡}ÖƒdÕhÀXÕ £tL¸× ¤}6ÿ¡’7kàs X’~°:~´½×Ò[UøU-}í 3Ȭܢ>¬žžjOóéG‰×MîÛøh\.k q<‚t†»ª”¨T{éßóBãf°óìÉF»Ö‰ïõùÏ…;éjz±‡‘?š-G”Y{¿šOÕÜŸú%§áÕñœ„˜žÔjÕ£úæf1Ö¸¸%>!L”»#dùw ô…‰$ݬù÷¶Ek5‘LTi>ö_d~)þf³qþÉ&Ò¥»ÞJ¯Ž­ý@^½\ªMµˆ9ÁŽ…7’Iÿç\nqöÿ4ÎvWúÂÙzë䤷{çvïüí÷Îú—¢nÆ®ñó záGwnwÔ펺=æÛcŸ~]øód¯0Åü—3ðÓî+^¦)ï_CÒ4¼¾ø÷‘À÷ªâÖ ÆDY¤ž'¬Šè&*ÏóÞš§–èSîÖÞØ¼³ÁÍ”@ðUšáJ$Æß‡Z×Lmî©Ú¿¿›­=¥ðnWÍ÷îW>@2Ö£ç”Óÿz§ÑB»×ìŒZ‘ú>¶ÂÁyùâ?®§¢®“Êðº%ãш 1ªz³BésÆN|I¼Gh;3O†q'ê±>ÄAíP}Sþ}© š’*N¤uÉp0jÕé<”û¼Bžoðx{§®–ÔâÒ ™Äý¨WT‹NÎ%T¸ /l~BÉâF€_í&¬¾p –"µØ‡É帥>?PMí 8œÍ¹ÜÕ~G³ãL-rZr^ÔRß²º¬`) G%XÍÛ°ÑA­‘·òÁJ«‹o—ûEŒI`!žS! æSlQ²ã\.¾-:¤C‚íñGZ÷Ë+ª†þ›~SÍ&ÙzGeJÔÁY ;(´\ÚÜ=ÜvÝhi÷O8g£ Ò‚Æ4áôŒKž¸X Yù…ã«§O ê"º¢¾…M”†)D‰ôr¦”Ȳ&ö¨¨œ„˜XP½s8ê…è$o™DPž–H-¿w®Õ5V·'ªpUÇ’v]µ{,8¤Á.Üa»Çê°EŽZ-&>èˆ` EýïÆ-¨¯mv¸]ZY)Ü­BE0Päh€NʧƒQ´Ìo]„ ÃÁ ¼†¦þ¡€2ê ó0Âb6&òIQ‡t‡tµº"maÏ'Є…QP«`5’×À>ðfÀU'g÷½p½¯ ªVÕŠúQ­ªuUZ…uŠ«`ûÑ3USXÊ}|%¦'³ºBý¹$ê†ÍAŒ®8Bh]4 õ3C:¹CôÆÂK!k§ˆÉûÇ{{‹WEœ1jûU§ùÀ´ý&†El:´ÛxÌKXz‘öá2¬ªU\Ñ潪ÞaââÒY‘³…Å6yÍM–✣ûa{À®é°¨Ù¨ËŠñÊâRq6:¡¿³´Ù¿ds#Pðñv#EèË6¤+3,«•"Š¥bøÕÊk…ïž^òªMÆ™xQ§WÄl¾¢ô['ìwÞvªpÀIäD„0¼/Žƒ;¥M¸+”6CUÚj<Ýþ²q¸÷ü VÏAäË&F6ê/ê°\övësh#r®uUçÆ©ðÛËíÅC²Lþ÷-t <¼f’œxî Mƒø†?&HþˆIÙ Ô”µYkÔ6kOëŸ7wdygVE ýŠIÙ6Lzìp9jM0fâ¥#µËò Зùjõ’Q¿§ñ„Ré¶ñ%vÅTFOçª?k„f_·$›n mø¶“­úþÖöA•]7Pa½]·âá‡VÔGßÜÖu ”ëÂIíû“Ñ‘pþ÷Y¶, Ùä¦ÎõÎÅW vÔkÂMBê»[ò¦ÝŠÛCãé6HyÿéÞî/ëJ§—5:.5õwFî³Éµ(]ؽcû-xd•[†šºÖÊG+šS<^wH·RÃÖn@óÒ³Ùt³ d*Cg%5·£ïßFñ0ª óÒ®âÞ$ïá2Dsíx¾£J‚6f¢ Ÿ“9èž±×u:dpˆN´s<ë'S$‡w¢ð­E»HžMk”ª›Í¹Ñ<¹,°_ÉQI\´\É*yeƒ[Ϩìd¢‚Ò¼'¿bOÖ F[Ðt®‹jà{ˆd pL ÈEº‹° P2ܳ8JX/wNSEÄ7“$›É©ö Ø"i}É%õ}•j±hÁQ:чg•àîîœáʺ—}ol¼NÈd,.lÇV¬;Ûò«£eÒáË™w >vãKš÷G‡[™óîpŠlÔ‚§zöªXÖË#§×GÁ.WgŽþgö2ÕѲÓS¯³¹cólåôº(cÛh6‡ÍÍÆö~:m:{#Z’žOsíׇ¥õš×%4ûÇïñÓýé ]`n·c%7W’Ò"¤t4=¸_HYˆMØÒV¨}€àÅ¢×8´3C0ˆ7aâ3‘,%£mÌ]BxÔ[=ƒ©>"ùF²n»Ë:FÔ>DW2ç¡#Þ¤ð‚€¡ •ÎÚßL¦yåSˆ‹NKï¤Cm'H4–ztg]X:^|e;¿^:.ó•ãÕJ¿ ¾WeÅO­µI0û8OlH#{ÚÌ>Œ†@¨·ëÄ'šþÚVëƒè-c˜A` ñ!æL†}”ݹ·Z°B´ÈÅ:£nOý{E-R5ÇE2þ$@.=3$€ ÅÖ»ì7ê “›íD{l&¢m5ˆ±wk*^›|€Idmþ!±ŽSáðD€^ir–•Xs0ÊŸÝðZ¡1f·2yÆ«åÍe`Y:ÿ±+ñiÒ¿€.D¨¡éF©#4&q[)Ä£Y»Ö¦$rT j*´t,·ŠÙêlõ‘ÌeàŒ®ª5uOÝWߨf.5U·àQuÃdXÈ· å ¤í2bŸN:ñª…kh»|Qs ó‘ÔÕò«éi ‡1Ì=tõß°ùß¡‹„åâÌ»,y†ñF=U¥µxÃfÎ;‡nü ø“hÅ^öc7ɹÞ8¦RíF È^Œ†LÑ´=<#›$d¯&<_†S¢yöÚI—ߘȎÔ5á¦Õ^® ŽBCt*÷=Z%Ñ"Ð6¾= ÐxT"¯JÍKX]eŸLïø>$Dß][¶vÜJ(­‚˜HTu”1"*NˆÔÅÕxRjÊ­¯³;Kx£—>øarÑM†-²Ç0äÕcPéhГ· ­‘}8êíbUûúkǤš6®ªµC x«CÇ´*¡U#lÉ¥ÝÊr(Ùí(s[5“|¬Ù‹ŒÏªþzïÇæß±"E)þ`‹ C£šZmjØíg&Aš)œg_ö/ ݈œ¡R¬&Vžjë±u¾eýÍû|ã: –êÉãÙ bpa©’e!îò°…ÓÀ¯xך1b@Ñ>HðÝ/Ô :— yµ°*²2¬¹¡eSòb¶nTz¶¿LÝû¶¼B›âÛò*í¦NHt >5®›‚ ³®ã‹­9‰t×¹^2´Èm)”ž6È0¯˜M",¤OËÀÃçQ±Þˆ/lÒs²/M-úwyezÍ<ëN}û¿Ë.ÒˆRm,øLø÷ïŸt\Àçg/ú[G/cëJš‡¦Ó8ÆÊ@»ô£­{©^.ËóÌàÌ'Ûµ Ç¼´¤XwžÍøž p+|¾‚tÙ­ÕàÆùlo«^5øwŽâòœ“ÙÜBŽí²yšXÅ‹â=—ïÑ8 q—ö¡ æGø±c|‰ŒBÌŸÈ*Ç|Šò+ÁLËò$c2aÃfžú°/1Ê,ÄÓÕ §–Ì6µ×C¢-¡¢ÀCŸÞi¬ù>t/n¾Ç’ý}‡?Ò’+9·¿_÷ âæ˜àhgÿS¹9Œ=·X´€(ÙÄÜ·¨g@ѵü’õ· Ö$Sµ¡Í^NT ŸÛ9 AÙ"ºa§+R*6Ãý~N(îÀqYF£ÞˆßTÏBl”ˆØ";_ ˆØT0km$pûhÉÜÜ·3,ŒÉ„GÂ?-3êBxIØ‹h#ËŸïšÞã’wˆøf$š ñÅ·Þ¨E„?—U\`öw³áô÷ùíf¾ÝÌéÍl·]2j"µ§È›höÖû2û~O¢„Ÿ,èÝ‹ ¸;”ÐzÀ¼¹w~‹e3é÷ 3uB Ë ö@cÿ ¾°Wkl?®Ã½HО!SÈÛ•¼i÷ûȘ§¾ö™¸‰Ó-6£kÛí±V}ªµŠÔ-]*™øÍûɪ¦Ð<Q"·3þq‚v˜pKzÞ’ž·¤çíiuKzÞ’ž·¤çíf¾%=ÿÖ¤çúÜ–g}^/ì¤ s‚ sµ‡×Œ¯>ÙÁÃç®h+‚ÿä”âøßô?Æé5–ûË8¼‡ýúÁΧ›'D„ħɫããÊk)¦åÝ£Kœ*Ÿj×»ó ø)¼£/PÓ<Ì#ÿíÕ,9'¦™n`qÐnü)&0ÜLDÖ¨I7'E1i2ƒæ¢\óSUõÏAhʪ÷ŠFßU ‹áûÓb!ŸØ–zN5¢šÓEiç[IΩD[4/½VÏ&Ø¢›ÐjõÏI¬Õÿרµè3jõO¡ÔêÓIµúiµú§kõLj­~#r­ž:Aë>ÁVÿŸ Øês‘l24œ;ÿw¦Íê q–½¶RäYýŸCŸÕ?‘@«ôõ ­~K£Í¢Ñx$y¤˜JSó:PýYÄZݧÖ&ÏâœôYò¬yÜ·™Ô[F™¹h9.ÐH†­æ?Ïû—gñ¸Ó>³‚œaÅý¸³NÌoMüßÌü(ƒ™Î&û’nÂüŠ>‡£° e«ÞŸ2¿€š€{‡ê~ùJéMd­ ´¢fm7t£îÒ2‘Ʊ Œx«ü—G)8Rlóˆ‚}õBi>†Tzß¼ä²õ ]I“éï•¥À3B6ÇmÖÔZy¥¼¦4>Ÿ"‚þ;N‘ÆïŸ6EØû?q‚ÈF Zvï©íAûªt&ë4)ŽsÔcßMT®fcÞ‰õ:(6Çv¬Jhºì©Ç’ ½`n1aâÖ¸þw8»©ÃcG·9Îaž ª ¾R+W+“íq­­ƒ‘ÿ‡…¿³÷¢~°Ø,ªÅB7·ªÂ0 qü¯Âï'ûÑÞóý}ÉîýQ6 pÉZÄ’@EµŽŠFÀ}¼¾cm_œPo»`²¥ðų² Ʋ%z1O7¨ïa”î¯8=`ϧÚÊû˽4YŽ–Ö#ªåîâY±Hµß•Œ(¦È"ãg™5‹mXs+ª ×åµo€mýuQ_R¡È‘tb8!P\ÖC‡ÅàT6ŒGý>§¢-é§ói,ØÚ\Ô˜ÌË ÆP”ïo@‰Q3¿œóo"’¤ýÕB¹2>tºv.þå õ%¤ÏÔKÐÔ–F;T(HÅÆêøŒÔà¢JµVƒYGýKe!QÙ:tWçݸ‡LuzJ?"®s{ ntwZ;ížÊæ]tgºÎé$'Ø÷ß ÞИ›žÖ7·ê‡jUcêÎ|F¬¯“Êe؆+$‹´´µ¿w¸ýR,…ÃöigCÖó@¹Ñ•ÿ:i ÀÆÅ?úâ?Ù¯æÆ)ø‹úËí£Ã£Í£ç‡ö u"q/5·à‘8Rë¼GÖ—†ä§H'ýðƒú·9M èíǧ¾åÖQXçã+8.¿ajÆžÎYG-ùÂΨůãeÈÀ‡Æá™ït„bÖÕêÆ-ã–ƒq3†Á ÃV÷9¸7?xLýó?^æi‡Éxã£èéæÏõÆá/‡›ÛG§©Óˆ´”·¶_ªoÊ÷–•A}ôÀ˜Bð YÑÄj:í&šMEÉNù'¯«ÂE4ã Oe}ÁYöaõt£.ÚyÒ1˜Ÿï+N½èv•áÖÚF÷Wø@ 5>¥«'<ÂÞpåMƒr(%€¯0†'ó‹›ëÒsœsÖ Çè;|£~èéÆ4zC1‚¡™F´ô.ÏÙèX=–sÕ}þ[Ÿ­˜OÎѤ!ÎÆçhµÃøÃíir{𸧉=wÓ_£¯š/p”dÕÕ‹sŸå€¯°–!È¿+xu>N‚;2@óœ;ƒ(™xÌHšwªÌª<ÅëË8^R§‹`_:d2±n³ß?I9ü¨L9B`X{1TwÖì ;™gG‚èO˜vÜä\öº xï‰Ývœ|¶äs¢ôöaô'¯x£„±ÍWdq‰?¸÷þ8›°ªFIxÚî´‡×Sg!«@Ö\üMNèÛúö€žïº'hS«™Á›^º¦ÏqÉ›ï¤êˆƒ2òÑ–Ò˜¨УÞðfhˆ 5£y±Îÿ÷@BSñÍ­˜[+0(G@!Œ“US ãL3´rÄ"Ðgá'›F+‡ñJ½@þ>ûë"ãoœýGÞ xi}æz~¢Ý>ßõ^¼®¦{}±y°»½ûÄíÙºˆwjo?ÖÔÝ2ŒÃÙD•¤¸–^îf=q}nø")z³þˆ¨e¼¥Ì÷eø0œÖú¹¡é¶f¯}ã3& çjécfJÎ$’Û­ÂSÓšÖ º4 ÌG;‰ç­†n;! ¨Œœ^$èçIÌ ý8wSoó£ÚDlÔas4ŒE¨VÜ$oämî¦ÎóÑ£š óݸçÙ¾LÝ#˜ºOÝ£}‚ÐÔÁv“½ØÏ¶Ý]þyöãDˆÕfñVw6ŽѲ,¼Û ÑeÔÙŒZ)bozÓ?0ö@#"oþ'XäY|¾ãŒcöÏæb¸.-þtÞݼ¦áž u ¦èLÈ=‡e$Žqѳôù<Æ}d6Gƒ„”zª cð–xË ¼eÞ2o™·ÌÀ[fà-3ð–xË ¼eÞ2o™·ÌÀ[fà-3ð–xË ¼eÎä[@?]jÔÃK«ô“'÷!©ñÅœ¶9®6Ú¯ О¶BºÐÂnÒdvñ¿ÇÅ¢Efá[þ€)*õÏfã>ÿÒõ±J:·J;·Œ›©Œ›¹5IŽêÏOõò¡I„µ×¸ÐcžTs_J8;«®Ï"œ=’NÕ<agäcä=?þ»ŽGy¹X,bŸÐ#zçš,9LÁ’»ñf܉{hÛLAf¤®X@z.<ùéÕLWaGbæ3’\ȹ»9Šy€'õ£½ý£Æ“ƒ½ŸÚÞÛÝÜil„ ×€ÐxØŒw±v3)ÏÇP{b›²„ÝŒ]vugÒLÃä¢sÙ¹À«äýçY·H ëñöËgõuµ-WHááiçÛèü 3¯|?uÊâ¶¹Ç~››ýÎ(Áÿ ¯êyØ+Õm÷ôsÍŒö„Þ„ Ðk…Žk2É _­½Fôii 4”Þ$ËS›\Ec%Ù0‰FàâKòÓoö›Í ¶´Ôï7Þn½¦>¸O¦ì¦µ”ײêÇØÔwøçjY]o| #È^múY¸æß£AŒdÏÊòÊ©qsû¥z¹£jjµ¼‚ôVüêsl­9½ôˆrýS6A&•üË%® ¤q–yL4|[Œ0òסöY Ë-O5œ“Ókß,«Õo?H¨q˜ºtã²ûêêÕÊkNûúkˆòÛ•Ö`*¿^w°T©D4¸6°ÁáiüVO—ݼN½íþp C!Õ·C³ëU?}¨$¼Æ+•¹7å&\Ði—Z+¯}»®V¿YyPZYûF-Õ^?àùÒ%Cö9Ø[í³6™ŽîÍ4²–Mš@+°ÅÿÝp›ö_Ý{ÄŸuétC–~ø/ôæ¯Ïw޶_–î­©ŸïBZ<ˆÞªïŠêmjÍ™gjâùYu–Í]ˆ_9ò}·™ÀL’á<Ä(å« cÆç–…wË›ËîŽÐ0_ÖÚŽ®äµ±#µN³¬ãdɲ§#É0…½ø7*ts3nýv«1›f¥\s‘§ˆˆ”ýŸG¡f ꓇úŒë›‡ ]66R$-uõrÐñ]ô&Ûíß# ”ü¼E?ß-²½E¶s![»#¿,¾uêùcQ®­xÖõse!^›#Ûžt0û‰šK㮿"6ï¬Bž“ÐDvÃku —)$'ý´æ{fžÜM,l"˜ÿQÛš<‚n¬ŽÉÂôB³»‚åoq÷-îþ8•¸ÊþÓ”TÑŸb”kžÃ¥Î6Å%f¹± Ê£ígõÆ‹môÙôËa¿R‚D>_¹Ó>%?g£‰ &å,*ž¹óÞ(u Ì¡K§qx¾VS½(j%ª4„­6ÖvæBÿÙEçó…‰þ­Î›¸±MÁOÅùÚ7>žVsZ*´¼T¸*äþêGÂùpxhÞȲmïÕžÔö?Í/GÞŽÈd÷“gÄE SrMpâ¤êe—v¯¡Ú©á_ušØ’ž?O8K›þ,eMÀM]·eÀžêÄmB~vç6çÜûX«VÒ°Š‡ŠL?fÓ¹Bñ«¸ß¢­q¨åTÀ“ÓE'§Ÿ5ÁÿéWêx­*#»´(cº¸² Ôj~ÉLû­=õ[rõF¬^FU\d_–× ½Û­?œÝÀuÏä7Øl,œ0›ƒpP?:Ü~rôË~=£>C‘"9º‘ôúÙ™*uÞzÓ‹/ íwn|©N ¸“%"“ùÂ,£ÖÀ‚3ÙÂNÞ¹00’Ë §Ð? CôO¤ÓMt7‡Þ½^ÜÅ£D½ í°7\FqUB‡ßwÚÝö„èÅc]â .îÇÇèæü*ìö;Ѳzº_zþR­®¶'Å[P|Ö ¯åxh·Ê´Ç’»px £®Öü†ÖKé`˜Ñ©öÒ†|¥‹¸1W¡è÷ô0¦³g™0ÈåE»y’«Æ0?‹GÑûµÛ”EÀY§Q'¾d™ƒýAt;]ƒ6|&I4@ß&H»4äÀ¦âܺÖ2P½&_5œ¢¢e½z*î‘'@f±¾£É‹6ʰø‡]fÎOÐxE3I¦aÖÝØˆÄPÒãº÷ðQŠ„½kõ)’—ÀC׌­Di¸b[Ó<‡EB£v5ÃJK `jûüþ†Ã&«}¥h¤«À§£vgK ' 7™jÁP[õ%ù2N†øÚöû½vô X™ÍÕrºËYSŠ]>‚v¡w÷š¹3ólÉk4bs‰–õ‚~âq•“ ¿îØt.Ãë„^C€¹àª-Daº›ÃQˆ‹¥{[ü€¹PÜá%dC£.+H†î9ƒ.L¹un'$°Òi‡‰½Îd¸»…sS© oWN{ƒŽB'¸¼‘™KßÍ ¯¦î-6N…9Ò—_}¥s’"$6®2ò¥ˆµôaüeŒcµ}—±Ñî‡ÿnXÏõ°¼df‰¦ÞŒÒK·y¹—•7‹I™Î—ºc“ïÎÞî”ã‰d™“TJöc2ÈrT€Õ§›¨ƒB[I¯?Œs†rDfÿšaÙÃo¯'9+h\·#8ÜÖa–ÀYÔNBÈÁäwß iÐÇ%$ ®…Û3F½·ª?Âk³ õd=ƒeÔÿ¼´ðc]ßpÙ9y1ãœj¼ü_óyc‰U=VG©š‘þldjÞ.aM£ê¨?Ž@5ø‡R§ÞˆþÓISw2ÿát©éjQj&}>ŠÔ¶[rô–ýä¨gÜOä?ÄuVô)ªÙŸL„NµÓ­û“P÷*դʌ?:¨o>;x|ÍÊ_Äɰ'9ãþ4¯Ï/Û=t0 Ó*:Q‡Æó?:ܲy A±ªñÿßœÉÌÁÞ×ÙxGNX+˜ W‰pŸoÀׇ܇ÍôèCEý7£:ØSÕîógõƒíÚͪâ™û˜êöž½¼Q]°n?®žv 0ÐÇÔÃÏ07›©ÚÞîÏõ—SÛGTF¸è£ëºQUˆF?¦¦ÚÎÞnýF5!*(ÅÓÚ1%ù£Gä°¾yP{ZßúØG75{çäð7‹Ž›žûg„ù¨Ö§Û?žýæÅªDç©ïÕp  ø¿ã•Õµ|#ƒ££¼t¼X>.–ó•ãÕÊ9%¢¢UiÄÅà8áRwíÆpgƒu¦Žî ¯¦LÆø\Ôžn¬Â°aéÜ„5-ÿ8Àk x-çϰ5«­m‰„HÌ­†-cAV[RžwU ÏшÂlÙÉ7¿É-)ðO6·%]ü8±j= ŸMªZ·Æ UKÌ'S­›ð©vÇóŸ.QíLå?\ Z÷4KžZÏø|âÔî˜Ý ÏÝ Ï}Y3Z²ÚþZº¦¿‹ù¬qš&Ût–“o¢Ù,½§}†Ü>·°Ãçûû@ÍWõ Ü„æb…ñæhDɼô—[fn5sÎþ¹(²¹͹Ê[Uó¿Ì~{`ÝX®ª¹…¾¼²yª¾‚º¹ß¥Y çã¹'©œû9gu»ü™×û˜C¯wÃS¯÷'{½ÛsïöÜ»=÷nÏ=5}ùƒ¯÷<ùz7;úzóŸ}½›~½O=ýÐä\3ìßìô“BsŸ~’ÿ=ý¤ÎÛÓïöô»=ýnO¿,<ôåO¿t…ÿ„Ó/Õ§Y§_FöI§_*ëìÓO Ì:ýŒLèn¬ô±Ðƒ3MîGÆ—i<êM—åž³<ŠŽÒCyêÏ|àæ-ŽZý5ó€Î.6÷­ ˜ÀrH›FçÓ³{{lÿ™Ç¶™—‰ç¶—ãöà¾=¸¿èÁ=†¾üÑ=^å?áðëÕ¬ã;³À¤|,ó„#œOoÉß“:Bëp=~‰Gl™{( ¦9ƒφýõJþ–Ï{£r<8¯ÀoEg«¨"¢eD£­€dEd™Ü ‚¬ƒÿªW´eÞÉæ\…=ÉÒâb‚ÏL:íqI'eúìÌÍAihɽëxä {´Äžˆºä Ó€£¿‘4QÔk$íߣ¹œ®ßàßMûÚ̧!¯Ð›ð'ùÖÎå .¶‡ƒÑü›Å¬ÙPuW¡r @¸$¨z¶cvù‡ê~y­¨íí›-©iÚY Û®kå¯ë)Ûé/в96ܘ·òYXöz‚êÒµ«¶ôyö%Étžv"tFŸa[úðnwe.kŒ37åüªv?olo>Ú©C`çyJÄÿ¯¼Ü̱.[ôÓ\âí’Ëeó§/:Cü\?8ÜÞÛý#–Ý‚£:N"Ò¨T‹˜¼{D3…ÌUAMÒJ>_i^¶Ü ¼±:—ƒ°¯ÎÚ4Ý.Üv Üi´¾Zm8/†1œ.”ï%#àùvë„ø#"C(—DˆÐrbÚì1\RVâ!¦á6¥bܸ”Ã2?Ø ÎÄ’sjcᆲ~°0ŽP>?›môõIt>_ðfQ&Úò]"8Î:¹DÎÕ œ&‘ n `C*7yJ³M Ó2ól ¥ŠAàYzÔ˜÷O2Ï««ö.qÁÍÔ§çÙX)mêù±ÛþÁ^­±¿½Õ¨½ØòüK¤ÿåf¿²žcY/Ùú–žðŸ`ûÅî¬Tû¼‡Ä+2…?¬Ï7JÁ-]*µÂa8ˆã! -qcµ^*æ’ü ìAGÏí,û÷¢õŒÊ*¹ˆ?Šs©!Z¶¡"‰PȸD³f Np¢£^Ê{ú ƒbפ>sìp€a¢áeõ<\!+äXW2Y&ã&ÐmÜ'Ë¥G–¨e4ò5ÔŽÊF ªô`sb¢¸=¨±MnÆ ä=f™)¡Zq¯00—!ë8¡w²eJA_gƒ¨¿…fÀÍÚC¨O!vlÆŒ.¨°s­ú¨ññ}Û9ŒÙ<ôA=o¿EWf8€R*Á¡CFúåª]ÓTã *Q–8.(ME&j°.6F-Ùì {Ìœä 9"*щCÒê¹_–qZ¢¢Kº‚¯Á„IËŽ9ã,îÀbC(D½¢žÞ ¤>c3\†äÞ }·q­z4ºíÁaÛ{Ñe‡ôkÚ=¸ pЊÍ%“v¡Ó ë}Dìé&&ÅZ–5Þ2i’R, YÇÁ\R)T XºP¨œo KÖlûÜ4ÂNoÔ}Mk'w K²–1P9>^­ µB¥Ÿ“j섌 €ôÏt}J’m©›%Ûß;Ü~I£ÑŠi ì ¤:‘«ü:O[«n³ÌÄË£zvP¤z'àŒ•_-:¯œâãáŒ"@Þ=Ö0oö_«´·q\^½ûðF§˜¯è'×ãU÷eý¾ªh¨¦‚18¬J^ÅâÕãµRb „T"Ä…]«}v†$:~Óí&§,q‘y¡Të*ecºtéƒp  pG®¼ îV!Æ€ÎÙ—žI˜fÔÒˆ´d©Y°q„2=÷±5¥ïýÒS'àÜ¿É-"ÊD×3êáÉBHk®Þ¨0·—i{ÿæù ôèö@è^á*¹ÚE{_}¥8Š‚Äqƒ£àLÛ‰ðýø Þ{útÀ^EMI-˜N¤؉¯ýÏ¡… ت?>¬–¶ˆ>®íí>Þ~ÒxôâyŸþ7©Rxh¾ä(£EIØ1#,BʾáhãÈÿP]Eg´&'@u¡Ðp³ aYìMWÆIá£asÈêÆôÔ/½Óã+Íô¡àboꢋ]ºî¼=æ¤ìÐ/=œ\>W¸À¶¬¤QU§Î Ø9ò¢‡&ÁÞ–ñõøÝæ³­ú~ãèàyýCÎ> ;I7w!Í1ù>‹i÷ŒM‰ã9Îáë.@Bkmérðqì=`âüí˜ç]ðÜ;Á‡G›GÏ«åŠwïü€Hi„ ½Ýós¾Lå;Î6Bå½:r“9‘€ éJÈ2±39+QÄ–ð“^Ï]•?|ZßÙ!'Û½hŠ5YŽ7µƒQÏÞaùÂL52zoŽ€îëYŸÙd«‹Õ´aÆx4ìHª©5j2psÙ^ÖLÕaÕÕ\¥D¿ 7Êp8šl“×¹R~³«…‚{ÕH¥®3Õï ÷q;p,¨ÃQŸö&s,èÕÖS‚[˜†jQ->ÛÜÞ©>XÙ<øYÄ$öyr35¤J|®ŽeÔFkuÙ)ð÷òRĽXVp—¡ Û‹.rkÈ–ZËm'®!r6Ñ­RÿÜÐqI·fõCæ·ˆí‘;`{â.¡¨Ž°ø˜sNõ• :<·ÏTcó°A£øbsç'u‰ÐšD÷3íÌêÄ2bv–zm @„‚¼kƒRàüH"b9hUÔEÃr,óP ˆgS-…’«9•ËÝa¦Oæ1¾F^ CvàñÍN¿Ñ\C@µ¸˜.#ÍÜBv¨¥ó“¨›{ˆ2ÀÌMZòêø¸òzIq:øq´ iFf•‰…6(6…üuÅ·®¤o P/¥ÄL¤Ì ý~ÇžT‚:«e“>0é•üŠÎ¢›g0þNô7|a«-P®ùdZU-@{xW¦·ÝÅç;o£dN®„NúS˜ºkEšjä¯ê>3£¶÷ìÙæîVLc»_I$ÓA@QÞ'b)|w^?¨?ƒ4þ<<¨ëÙÞnýhóà ïn># Ú¶+÷7÷ëÌQ}§¾ÿy!ø±ý¬Î»Q.vÿk\&zÛœ°d‡ Iµf(*3”Ä ÎCbz ÷Àøè©¡ƒ…Ø@xk.*lÔ08…}‚«Œ6Ts¢ÖUáx1<.2à†É÷ò„²¯À¿U,BV-Ëe(v‚ûç%D»[3WñsÆPœ=bpPu{€œU•ÌêÚ½œ2²Poîe%çÖ«³UuÀ©ß¤yÇÜ.ÉBä~ˆ]Gd=É;±îbÁ÷tHA0І¤‚œÚÊküoé¸XYÊÔñ{䬫—:ÓËãÅJå¸8!gâË.‰µŠ‘š„K¬i2.êWz µVÞ±ˆ@RÁ%ÿ†?ðOå×—XþÃvÌ›·½›š5©@ŽreCýV8!³ [ˆeÊ]¡ƒd0M’½¸±Z• «»æÄ:[—6³µ&œfÉÌ«Õ-¢¾V²dRÅ€hzТÆwR¹·rÍxIKueìNŸžâ‡BÑtÔdŽMàÊ’À2%¢Üï(xrAo•µòzY¡z]MPäl@H¢v¢.¯óEáå÷ä0Ábz-ñ‰¨@Xü—‘(ù]¨×b á6r3é¹6VÄê1nlT$;¢ƒWˆ^Ò¢T ½"´zË-«\¹â,¯Qì´È½´¹¢ñy×AÑz—D8>Áfá/ÊUàDw ÞçH6×8ý+S¯œ¡*¿Î‘¬Sì‰Ì‚†UÅ"ˆò{Tå»?ÖÀº"®K©GOÉNRáê¸YЙ&\›¤xáNacã΂|²0Jï9DpŸmjnK9? Òˆ£ûÞZ @µIà ¥^Ápwþ|bÊå#hv,g¤—OÃÓkéh~SljÀ[[TêMç¨î¼l:QКŠRUwzZP"ukRÇít§×Hª*Åç ¾ž’ï6ÜExÓ^Æê<Âü%ÌR\-ª½žzvøË!Ï1 „®•ªƒÆhwa¤A%A>PÖŠjë?Oö÷Õ÷j­¼r_]à+B (¼‹ZɆ@+&Bº¥“ûx2;„#9Ôíqý¸4iºy»Ês-Oš}Uê°Ä¤ÁÁõhA½ýî:ó,ÔŒƒ†yã‘¿á°wzÎJózïÔ™K-µt¼8èú‹Åmí"^M¥¾O{wsÌÑèW×=1dXÒå ƒáá:ðË/à]<¸ÐÜ$¦ -ÖJ­$sÁq¾ÝI Ê)Åyä’ÆNƒ¥«;îå.•¦™Nö¶˜\ ÿ™ÂqASÎ6ÎåW]q #’ÁI•rÎÈ8aÍw˜ß´êú¡)-‘4Ç“@mwÕIÖìf§E$ÓÞÕ;Æ¿óã?¾J®^/×76–Š4Þz§¨ü@ ‰°˜Þ70CV˜x Q‹j”$"eÙ ûHü*€Jõȱk·T 6-_kq5Ç£‡¤Óõ¿–|Þö¿ö}îö¿6’½úÕúWã_ç…ÜM[bÜÜæ$©Ö|ý¯~ZQ"`AQý¡ÈAàËUZž#'–_™Ô0D=mB«ÎF¦~‡1@€»R-l·æ ÓXx)yz¼½S?TѰY&™Š(l ™H}Ag狯ƒD‘P(ÔV&áø¼š ¬˜2>ª’äFË}”L ÎÝ×BÔ¥5ôÎZùÁ* ÷ÞÆM¦È…J‘‹†Uä5þUÍó%EÙOë›[0Ín‰²y€þ)…¢la<:9t*ï '7ÿ0bÿDŸOD5ÁírÄäS¯èßêi5¬þvä‚Yï…Fü1=³¸·'ÐŒƒÝ [ÈóDÆ2¥yïÇNLN§‹×F/‡Ä™Ît‰ïD·ë´ï±Aá¥ô1pÄA jcUµ—wt:¬a›K"Òùô2¶uL0Ê$ö:z@)ôôP´Œ(Û 0}çòò—¥à8ð¶o`dS®,«é¸}ž®ELb½9G’Í€k„ƒóD‹µ¡ü¹ªT6ðÊùsÇ'Çù×÷ýªr^8( þ5=ɪÅà«••êñ ŠÔa|6¼Dšû1¾:Ðð-zn–áûÈH8Kx`ÙDÊ2Ÿj¸Õ,”´G(h¶#¯Y>r‘·Œ/zpèžâ‹ n¼nÜjŸ]£ŽGŽdû—­j!ÏB šx-ä9P¶wa^vv FB…àÙO[Û}ˆ’PanÙ TQë­yì ÝÏÏÚ–ã‡/Ý‚.å•Þ?ã·h.H.úhEÖÒµ›t)€ÖcœH`™5ÐÙ‹…´$h´1œ±x¹%› È+]ᇠ,•–ª"‹¢‚L‹òÍn÷«š)­e 'NVXWcY)£ˆ(ÛÌÉEûlHÞJ?f¦ªÌ¯¦ç×üÂô×à;·£ Š8Ô©õTˆÍä-‚×,ƒß;˜Ò†mЄt@~ùÇtÀZç¶Ùã½ Û  é€üòþýY\R;{Ùàœ0°¤">ÞKHä—ðoK ²Œ“i&-Û÷_þ‘ìy=úôå’U@ x„WÞL\N‹¿å&àœ TMH¦U/4›m€¦ënØ®‹+B)3ñ¥õÝ„D@£<=vO×¢-^i@¬Gp0‘³"À ì:…²Ú=| `še&“Ò4ÚÃD“u‘µJˆ¸ò×Èo˜™iŽ÷†úÐ!_þ¡‡P±¬Å¥ƒ&¤òË?îÞ9Zs´5é¬`ßGÆ Zi\ I쨇Ëy¯ý; ¼Ï?¸Ò,6&®¡hèS»5‹ÒHöòp¢BÄ‹—ßa½®DƒÎå*±"òîXY™¾ZîˆR“ ¤N|›b掴‹ç#T AÇy³¥Ä£=ù¸bU{Túg%‹ ¸YíÌAK{qIü†ÊGÆÀÄ{së£a"*ÍMÔƒ'Á'Ó5frSæEMP ¾a©39 ÞÉjµ¢‹¤R®”*çè#²\®,,(ÔP€`¾¢*ý+ü¯@³søhï%Ê}Èø £%>%ÑEPa.øÀ†ÌæšwTXÝÞÝ>*™íB`%÷aÙ®ÄptE¯T›|Ì üSZ›-Ôb"©G¢LcÛÑ%h2JÐNÍÉø_äŠ3Ï“U«„åž…o"RÔ)N=ÿL6S°7+sö²@°Î ÀËêµ€mg”á>3GœÌˆ&¶aíë H‚Î7©˜õ™QL³V,,Ãl1™-ºž©¥Ðî17N/¬õñ%2E·`ÎÒ34,©Ê‡_4ÕnÄßP*#Í f"ô™Æo£Bã¼ÓÚ1¡_w¥•"½Åæ_üÇÈnžBoþ4_` Œ^}à˜å:Æ7`½§È± ÿÄá…Bo£^M’À$áîUVë\ì”Á-EVQeþÚ r’˜~yk9qô6±ŸÊfUA.ສL„QP«jM­ÞS«ß#Š¢Ü!Q››ZFCóWL‡NGÝ0y£V¾ý[Ò}ƒkZ̪H/é_.¥Á`%§H߃úfÔÆtožp‡®,¯|¥ül…½g¨.Ÿªâ¸l KY¹IíÈ“ìÈÞ0°Lfò(±°@ï4¨y+ÂP-#݃Cå™QS4ŒHþ/6,ÍscR¼}æ¼8þsA•µ]– zâºOkkC) 0Cfø6.Pý¢çXÁ!5ßN»[-üënãî>Ÿ1„h‘G‰/!“þ®‹U ca&ŸGA¬2Ž”¡‰d¾Ë”s^Wø2æwS2çn¾ÚO›Oê$d‹¹ì×xž£Í?›DŒç½#›S"Æslï>±ù{<ߣçhfmïàÈf5Q6·£ }×U—¶9tâx<™—„y { ž© DM˜/+Þ–;¼ØÜÍó¯OtB’Né´O±e”hÃ6ݱ9t7ï|ø9Lª_ëuBf—¨bvÒÉH®êˆóxßNã&,@“Íû´¹Äœe±a›wZnïÓéMÌcÁ¿.ô³X@SÀ¦\ »J‘€ëm›aѯ3»-þuâŽNÒ3¤gg|Tœñû´&ñ¯G%ü»yükãXVé®XhKÅïJün*þHâõŽÆ„ï’IagE"-Ò ­9X–öÿd°a›Îä²Îá~¥jøéº›ý‘®‚éT ¢Zñ@gà¯tžØ4=Nµ›[œê U¨C©4]ó‘Êëapë’Ç4+öä`óÙÝ|*b<çaí`{ÿÈfäïñ|[›G›6~Ù<¨݆ÛáݼÙ´Ú/OX•ênÞÇð¤ÁŽ6Åàâ1¼YÛÙ«mÂÙ!'åùÑo$!?íÙæOuN߯ô:§rئcîíÝÇ{wó:äîw² ÑH.pËë°MÇ“aÎ9üÉ}ŒŸ-/ÚÙ«,_›•N^üMñ“Soý¨ÁýÕ!¾€ÜŇîF+ò´9ÜgpXdüñËÃþârðSF=“FAg-<ÞÙ|;ŸxÀ)5ŸìlIF 89÷÷5 9uÃÅyØ@X:ä`¢—õúKÄDôkã÷ý‡âù×Å~û[Ûˆÿð7µÒù4ÅÎ~²ÄétÇS³¶î:l®t:™JÐè#•ãì–ÃÍç’É|»c ñÏö¶ê8´ô[é[oàæúq“òKû2"½™¢Irözý6-þµqH ÝÍã_g®8²îÇ’5–µØÜilàKåßÙÛ}‚t^óÊçZa”¬n”wr¡’»ÚÈŒ“rdÓŽÆR­‘HcüR›‘Be“ñ8_yYéçTŠj~/^<šê%ÚÅünÍ‘Äc]H”»î‡&Ô”zƒ‘#Wådge ú"= âÓLçˆSjl]iÛ—C.6¦ ´ ò0mЯA|X¹ËVÂëp$•WËÇÇ_¡ÔÅW•s”ÄxXyø~¡q÷ncá}å<@Ÿ$ÉòC’Ѹ[y¸l’‚õ^0T=ÈP°3‘+ä+Ëçyñy€ Á~°‹…Q1¬'²ÓjÜP§µ1þ¼xR¿&rú¢I2h˜© ú玜¹Þ.¨ŸÉ*Zï>×€,ݱˆ ²£h%'dî2Ò"PùEì("s+ÿŽ?>wë!Ïöóu©(£Z-­—lô’‰¨ëz»çŽŠ`¸&ÄŒÀ:›JQWºQƼ@Ó5/ ¥7 –Ä Iʇ#Ó#,C»CíJâÑ ‰ÙmƒLh'ñå¤Jq²pÎXÂ%N[ =³¢î<gÕ#ô!lùœ1 #²ÀFôë‰Ç°‚æ_^dº´ü$µ—öwPŒ†bBÔEÍ¿(˜FíŸ2 ô4R[{‡¥dx݉– ”fûsW4³TŒJœ¬ÊÆO׆gâ›+=ƒæ%ò8÷ZæwÜ`TP@héÌ‹—‚l/“ëš×Ê;é»±ð9/?«Í6ç>¹Ü<;!eA6µŠxØl„À–õÄV`Qre‡=@Û(ÕNo6‰:±&¯å=Ãi^l—£ò²Ø¬fX£D å—U?Šûí¦mŽýA;a†4Z8\—R¨*ºdØÇ°<[[“™]Th—b,á@Ý«æl!:s'¼£ïhËÿKFVô=`úõ×K•÷ï7’÷ë^VïÏQGÍ5ÀUæÑÒ‡Ö•RRÒ¾*y *c Ò™¡ÍùTbn†áPk´ÌT8Ͳ™“I› Å“ËCÏî—ÖÉà: &ÇQ‡YXž`"Òg¨9™·Žl:À4Á3 àijÄey •ù‹•Ê’ÑìOH•@“˜mF–© ¦Ûpï pš‹lƒç3D f°Ä,Nö9ßÌfbFª…$Z“ÏbT‡Œ—Ø"™Ê©H¢{tÚ—3­$‹Vx×3›È¾•ú6> ’=у89éX¢w}cì”óF+÷¸ÀÍûV¡ÝÜ6qjL=ksϹ“”Él Àí^™J s¤"öéSJö$çåÉÚ fdü½ Ñóo¯@æNË1 ÀÌ} ÛýOݾ¡cJs5äh´ù¬©„V:»8áåí®‡æ}|oÌé)†ŸŠíó°2Ó)Ì”’³èâ‰J íc‰+Z(ðÔ(ó7’ÑP&2;î›b ¼³•½XmkYiõrBÅát8»·,ÿz\&ƒaËË6Q¼ wZ¸Ÿ%´â½ ç=°bKx¬i~e’Ù©³òêW²Q¶\)——Ï7 Bj·çg $¦è)÷fCÁzøY©YµTìñklŒ¡Xâiâe­ŠfˆNKÇûýØæiØ|sZÆŠf»Ó^¯©føíÒÆ¸Å›f;àXÀ"Q$y¥-;·D‹LD”â뮘o-qY# ³é.;Y¡c<•‡"`ñ°ÒÇPà°È$ð‡àOÀpA¥nª¤s¿äTȳ1ÖFô×g‹©éý’®ƒºv ÛÊñKê¦Si¦—˜ô5ª©UöÅž“\X¢&;ÕiÌ'AÅC}.Ùw¥²fœ,e†í+-!óÕ¹$ð~%Â&:ZçWZÖD'ØÁýÊŠ|èDë¯D⃢1hóü;§i¾rÅx¾:/le%ëw£Ñp€£#aM“Ú‰Ö‚TUuR.³%r!ÖdT¥\lb ¹|¤'Œ³§Z„gî¶8áê†mæK¹6—œ9òÆÝ1´ƒ¼®nN=‹õáÔ˜†6ÅT€1NÅ|µ1Ä”¯º‡*dË8fMVášS&›${fp²ýö*r³ØoJ:›g²úMÖ_$?‹3VáxV7Öd—3…sɇI¤Ï‰òÁ‰ùŒäÆö¹¸Ì:S¹±ç·(p¿øGá»Ç8Ô|.Ìi¯”¨.8:¯“©]†ï’9]\ŒýIŒcIßl`ü&ãÀ£ïuô:” ö÷L°s"\׃¹Ñ€]Z÷dläøÄiN!`>¥Á¦§9PeO Jí³WCz4ý@?¤Ɉ†Ò»ÑÌÚ‡8®€@“jK© d5\¬­µ‡\?ÿÅQ2oîl¬‰‰ûÍ*1PŽ1/çºW¿Òs7ż^*P®GèÁ®‹¯ËKËÇÇ«ÜôjGé5ôûG¡--‚`Ôkÿæîß÷®ÅÏ;C5@›ûwÖù'‘sbO ‚Aú¬T0ü&¸Ó‚øK6;¾Z9*~¼È² 2õ¹Úé\|õëbñõR‘ZþzI w*‘Ù„L«~ᵺÂÎ|€¯{’²•+ÀcB.Ø,¨ô·&°-4² :¾ÍÉFµ¬D‚ZChЈ /Éú`ô ìªÂ9,/‚kš”I•Ñ7ïEM´«3¸^Æm …£«}‘WŸ¬ÖÖ ¢Ã½çµº³Yá6+k™B´sB€³¾”ö\+6>­k\£ÎÔŠšˆ§†²t#¹§.‘…Þs¸¼Z÷»€<à˜ÛMTÔ&°Úý1 î}¹hª"Yå_y}`ùV–ÔWpc_ž4 µ‹Ú3éDâtuÃ+  Zd49©~³èCÀE"0Nëw4á&¥IP.MÝý`ÎÍÕ©í9â‡d§€Sz-Çê7.,ÞÕf@XË¥ë‡KN‘LHÈ¡Ýc 2Nƒi“#‰Wp RdïÊ\ƒH±¼²Îr( êz¥…“É;zÖÂiW#,.'-*!¹2o`ì·Bÿ`"­æô›ÄÕH^-ðÐ -ƒmœλ;_9ÅÑ ¦¡(·Ð"DH‘Ó`¼ ¡o }ømœÊH…Vh/˜ñð.n/ âÀ¯‡f‡™’ÎÇÓ+964ážç‰¤oœP†$M_]Îh|+£ñ>¤X6´ì“NÊ{P2Ï)ÙTÚV}›*?–‡Þaæ¢Ú„`g¯ï£ŽîfÆ8͸rÏ÷ÒϵÖIß¶‘oh¶ Ñ¹7k8—7-ĦeeÓ~M -ŸÊ4Å&çä{•½  *¶þÜʺéL̨e Œè¬žX]B"ͽÁ6ØËA¶2 éã˜9l¾k!‹²]¢KµÑÐ^„ x5hEWôHäkE—ƒFØEÖn¿ÑŒG½au•õ0VÌøŒrô ñºåå5†}Äö®/)혶„¶`£Ó ÞT4Iöª”Þ= ‘옓ÈrG$ý,m›ç¾J›Ø9¥SùÇߤ32L)>ýEÚ6ùù ]¡y+]¤g;{ëµâämÍöe]ñsåÉ|1žž¶¸#铿*ø/?®¡ l¤Æ™®%D›9z'Fg´£\ÑWÙM@%‘¬ò³Ç"o ÖŒG†žãÅ„Ä©ðø°‚òÝ3ýŒ[Š@\/£ð®¼׈ºÂ•èÊ¡µÑ´)þlc„ÚÔ’dEB^3Grs$ ]ÛœˆÄ¼6®¥NtÙr»W ÷ì„©g‘‚°›¼o`GµZ¡FéL¶&  ƒ h)nÁ8m d"ÔøÕ`ñl~1ŠzñèübÝ««7ÆRãÍ€`Ы¹ÓFvfÑj±kz†G¶û8Д[»³LB¸`ÆMaIq}^`SÎã¸%$üºÚÜ~É„ÂyÁ*ÄóF·MDÞÚÊý³§r=@.%`0èŒ,Š#!7@qÃ9ȈРÿý•••2ŸÓD¬üfVUVøu¡¼äÙ—ÔŽ‹áv &ž€%áB>ÌäéžIñ`ÔÜ<6s–ôŽŸ:©à,©jã?UbÇ Žm¢ÐûÃh“.Â3ÁµÅjtËÊј.ZEް5^(m¶>"||Õ¦ÀNhéàŠc–žT~å(UUä~Ï«åÄs?ÇYr)'àN³<€Nü4¨N¶,ÈÔ¿1¸›uA{úf=‘¤½ö¦7XVÏIenìÌbBYôžìÈfŒöNÍ‹4ÀxîÕö<³ò,ˆ;ýF½æµö}K˜”$ϯ‰Y§Õßµ}P˜‘_äá, k£= ô‹Ü‘ø7¦-0¼l7##bÎÜ8ãÍÎàH†}Àˆé{Œ´.¦ |‰E§ElW\øz=†ºŸ© ÕÖ»Õ³ã YùÕUÛTVG·¨® N6UŸ`_àjÜv¬ÚÛcîØ4YU²Î •ó‚IŽ Ï)îÄÈV.°MzdðÓhÁVô )lÁŒ•<•þjƒžgË?fJßP x– ðTàIÿþÃEá_g:YhèVøVøVøV˜N®Àj•ø¸ßòl ª5êv¯‘¤Îç¢áã1tÌÆb„øaÕº ÐMZÑMZÁÆhñíQ-ÅÃCc h;M\@äýoRÓ#Å[ûN§ÿå =7 Öné²Õ€ÅgД©÷²¡í[‘”ñ%>Ïð`“µx~Í«A?zºwpøÙë@O…îß§ßoø¿èÄpõÛÿouåþ·+÷î¯}{õÿ­¬®|ûͽÿ§þV)1¿“µ‹h¨€¨¾Vß71 H¡—›—ƒQ9j~XGöÞlna‡ÝðwÄd¨\LLM4R7 áñ)Ïb¼®HHùˆ¹zÚáa9žÂÕ^íŒNÕEgtú9’á *÷:ë,‹#• 2Fý&ž×€h`Ó—Tx=^—›€;Å#˜~A_ö!  &É›76Ƽƒ«·ˆ‰ÅdЂÇâ)'ŠÏÎT­¬^`Õ÷ç͡X†ÜõÑmÎ0>gF·á7c€•ôc&NNÃÖ»òÐØZÔÿéD„¦›2BF$ƒ½,·N;t£ƒb à[?›ªEZcH*´q+ì¶Ø~ ¢öù…ú¾E›@lÀ¼ÅÝÔ¢H²ôŒ%íKBùG0>/â¸TɲªÚMuX†Ù¿î¢ ’jÏÂ!ÌŒåf¯-)Á {­/þM£«+ i8Lèq™÷É^^"L¾Q/ Ï¢Ž¿Ðƒù2%ÍòüE0¿ùN¡†V¤öQoYŽðZuïÞʲzæ~¶©ÔÊÚêêjiõÞÊ·J=?Ü Te…Yè‹]} ‡|gAO_„hg_÷ªFéè~ecb¡¤;ífÔK\©^<¬ «šÙÚd‚¥Ó‰/QV†ƒÆcο.§xù>"Y*‚”ˆ3”mÓ=ÇÿZ‘µ'ާ” /Ãku:9ká­ Vd—}Ò©…B~䨋Ðlˆ²\xVÐdÑ\GíN¡ê`G:Ò&Ymsÿ;…ƒ¾#ªJM« ÓÝæRIßþ ÛtGûe#6î$<Гß4¥›'§Íǃ{Ä{«$°«í¥˜$O¤ðs­b:|Å2>"d"Pzlo£:QÀO-ÿÿö¾µ¹ìÈr¾nÅþˆ2w"xHÔӦ잠(JÂEÊ$Õrò"Yˆ‚«±á_¿yNfÞ{ Ûã‰˜Ž‰ Òîn²êÖ}äÍçÉLî^ïQ[}í!Šì,nRC²BÈ|³UÃÉX™Å™‘›ûS½¢…ŽÅ¢³&í·#S×l'ùÕ:»µ €Vd7:ÝîØõ3búCc~;@˜ÙBÄ7 ŸœÊðÛgÖÞ£½ôLE ËÔ²ï›PGrwôÊÜ›_Þ3Úi®I ïê‘!.$–ª -:R{Ó„O¡ƒd‰¬]+zÄÜ144 cÛ•eæ/"-¬Z&¯â£Ô5Êël2P£‹Yb9CïûsDÙp û¸Sæ•°A:oòt.ê;Àó#‡Ó^Ü~²SfòrxÙŒËjš ±ÖsìÎyÕí#:&’n¿éŸjœJƒ‹ÛÄÜ„ýùNç+Hö`N+Ø]Ù0oNUÐVÌ+ãCYw4Ûz¢éNj΃nlŒˆ­xšñ¬Ol®]‰V[ø–’]£a&WLž‘_¡¿Œ=Ðû¦O* MLÀWâ.hŽ ^­Žô–ñÝ rFx“lH-!/ÄÊ“qDÇóhé°¸)oDª€iД£ÝŒýh2ÆD·P‰Ùwr¦ËrÑîç½½>å’ŠÉî®Ãi×{Ö—ý“{nd’H&5´¹%þ8+¯åšoin™u›[>¡šzÿg}0këA,õ ìs·õ¥`T\Y|LÒ„ÏG .㆗.…#¤ÝhÛ1k h …¬íÄ l4qfSÆpòÖ¬À|@NÍrM Ü•™q‹6¥ o©ÙNŠz1™ÎîŽr$Õ¼˜Á»ªK‚ñ–%¥šåÄiPˆ´“/¬y†£·t"+3y´‹ü‚•špJ.ïñg¸¨ñ‘”=©K>Ô9!ñZ ½[ÖaW²þ¼´XÃõLãü ™†º©Ê¥HÇ‘1M¡ ëŠLâᎳ·4œ×³²°ÊØ‚BB’}sª¤i¤µkê;5Ÿ+¨˜\[àüÃ͵ÖÊÖ˜Ø:ç,Ö²‚A§Éo R›5 ¿ª¡í²ÿ™ýCåXþzqtöé‰|cš­‚üÑ=t=y»zaåw>ëüvD{.eãu–0}Š…d ˜½A…ò.å²ÐÛÌ/ûhzч|•ä/Š”Y‹\mªïZ„£èäã‚gÅݾÞéª5˜|VŸµms ]:rŽž€r$³ ¢6ßOJ2­³Ü ›§–~9ç‰e3¹›«â[ÖûÇÍœ%#áv m#.ÇQRÄòÞ ÖO&ßI¿¾Íó¬Ün†öKšNÑÜrñDvìÈE9@€I„ÚöŠÕC÷¢³Hïý•E Y©ÃÈáM„ÉÌ™V ¦ÜÊèN*€’ÕW™C¿Ò­7¦ìšÒþ,t0L;±W²DY'd´ºÒO íl•2§Õ=%´Ì¿Ü„]S´J¬û@‘q¡÷ùý÷GÙ×z5"kV¥¯Z|ÅåNX$›dW{#UbP³ø¬®«Ù0»mªÇàxSåºÒÜTÜ[‘«Û7Žú/:†·‹j‚¾³3ý:±ZÂËD͸è- ¸ª#Ø$Ó§²xÓŒóØ"&³¢º-é0vÉÿ&ÿV– \ P€iw™¾ÖºÄ‚þÃå·Ôª§Ìgû¸u:Ã3T"£}˜(Ý­BàRœ±Ùw²‚ì‚Oמ–£ §¤–•ל»¸Y·p4]ëevs­°¦ã/k¥0=ÑZN«ÎÔ£Dÿ‚ÐýÙ-sWšI9Ï"å˜~ÇuUÍv‚qŽiœ-SÎ&O¬(ouº²âÉR¥ÓTÑ$kï2BcðùQrn‹ÛËŠK¹·[èRHCîÛ²T"ÑU´e"Ç÷µäfÑF@hnuFE5B5–½åÆÊq½äy³TF´1-T¡çΦ°¶Œðô©‘ÎãòÞìè< ýè° w7>QëK/ÓÀÝæq) jã˜-g3—_l jÑùïUy·Á9JÔðzG »±yvÕå*"lËÙ•ûý 43#·%èæ«—`ÞÙò2±òÕÜ×4{:çÆ`£¾hîî7á³ÚU}r&M½ò›ñzÐÍ*èòwâ]¬áŸÝ˜“|E•¡¯æ€rÉÐ:ÚmSF£+ªQC 1ê •(Y°Tu¶5}ïVöø»a·ç;h]:aì⊼ D²ÎZD[˜>¯ÒC¢¿£h7>mU%ü…lƒèP“"íAOg1!ñ=*Ù¦PQlt¢pšÐÒ1Ü(´·œ eÝPpt‡¨§J€+Ã-ªP•A‘Èp´}Æ•ÌU«UHšS«DÂe5åuÑLÙ¡ Í _€ùÓ9v!/’0‘=Ô>ô}¢0‚b”øÿ¨¨¶Ë,u!xJëNC¾¹NVòÜ›\N醆CüÍtlÔü ¥MÚµlêÙÖÍN ¨ºun6Sü™Ñß6U@ÖpÍ$¿aŸûò7;÷·Ç9<Ë©E=¤D 3€ËÌ“úèÒˆúÓÁ„5Iç S$hâ6a ·*g”CsLR¨h„x± ¿µ‰Sá4A•5Ýåð€íð&2Z}[4îŠNBÕÆÞÈ‚FveE¸OT¹¹¶Æ fíyoð¿éºXÓ‘êB0+¨ ‘!hÈLÕ æg©z®=ͤÒ—[~e㺶m\J¯JaÝ{ÃÊuw<‘Ñ›‡Ó9*~–q÷:ƒ‡÷_WòŸ8ƒÉCÔ…¢†¨@kجÔOM0ó€2v ,: ½gÅLæ2W~fjŒ…mÕ=pE÷áœ^„SŠÙvÏÝán=¦àûüR]ë_^m<ä j¨f¹ìK£îü|uéÒáRw_Th.ÙUd*êÓ¹0,¨Çq$'B0Î<µ]ËŒX呯sØ€=LZ=ráêë×3~]?éñ˜{ó’ßËGV3¢¶ƒÕ"–ÝlÕÒ2)Ú¶žTî³óI&¡%¦ñù´o²eg.¿0¹ÊüdÚœœ°Ñ"UâŠd•åà¿cÓ¡Ûeí¢ä‰—®Ìî­'½. ñAj˜?Ñ<ƒ«'(µék=˜íê.´‘Qšjˆø 7á¶ø+5€[¡hj§=]!füMȸœ©jÒ‚÷m…0ßj´jÁ u2yôäDÅR’]µÎêœsøTfj{a7´²ŠoÉº§-$£CÅJn¢5æ'#¡Ëü²BÈÈ v\X(šÔ°P¼µZ+‡º.¬³Üàõ¹ºMeTË81± i¶M­ìpI) ¯®oÞ^YÄ\œ·‹’…Û¶LaÃ]”l¢yþ"ê ÚtŽ u× Pbnæúkªµtt‰ÌÐŽ´Wtúji@™¨wvž¨*ˆfÂÁ„‚ÇËŒ:εÁúÁÏ?üuðOÄ•”+Ò$oÇUBŠT8ÈNÜsË´²p}ƒ¡B3(˜«ú¬¸fçñBB¸†–øCüÍ‘ Uá7ab¼:<&˜7àÅ>±èBÏóÕL9ˬBËuª{/õèܼK­Mäb¹aƒi-N“t nAf–¥˜$Žæ5L|uÛvC¹æÒþÀÁÀ´l7cнÅ[¸UÖ0HwS]V–¥?+îBôÞ ÅûëÑqD¸ÔˆM_®50FEGÁÞpÞ÷ÌÁø “½¯Î'jôû…9u;g¼¤‹05<Ž3úg{:ã0ýlc7Lƒ:¼i_LAù%Uÿ¬¸jظ@FüZ·A×ì,-ó@²ýE‘"z‰»¾Ä$Àïó’ÛM^´D8»| ê cO•Hó\^­Æ«:€/—œê»y06¨­ €tm¥2‘#Ô½I†PQ-I,[ùÿ‰&9ù ´RÂŽ¹Ž ‹ìõ(_©`§;E®hˆ @ˆÕþ×Õôš¾Àíñ\ƒS(Œ1èòbQòk¹Á‘´™ÖN S”{Žl^s0z¿×zºÞêNþýˆH˜¡èØ)G_4åwöò´#¨ù»&a´™ýtÕ Åâ:É?‘޵¥cðò€0EÂW`î2÷vQ5„­»›©Åŵ74=3D M­à8-Y[,^GüD@Pj˜C‘H*×6ŽŠ•»á#”3^É¢Áý íiñ¡nÓ›sEk}ãÙ{†„²ÊPg’vÌ@­ÆGØD+Ž"Û1Ñyž8P» µƒÄd†¡‡ú-iS ƒñÈ”ÍýƒßøÜC÷õ S8êÛ’5B3ʃàdlâÙÒ4 ĸïVm:’ŸÆ¹2~]3ÞnkïÊR-Ðb )–ùr'å>¼©¾­ƒÍŽÌkX/ ÆÄHxE û‰…SNNÑ ãìàäâ'žÿÞ({txðåü(¿øx”>;ýpvð)Ÿ;*ö]þþìè(?}Ÿ~<8ûp4ÀsgGx" Ùdyê”ÿ}ôç‹£“‹üóÑÙ§ñÅ…Œöö§üàógüàíñQ~|ðUvóèχGŸ/ò¯N²S ÿu,óA5ya|’=_ŒO>p@qÏÆ>^äOÙýýàäÝù:_D×€‹ñÑy&óøqü®»¨ƒs™öNþu|ññôËE˜<wpòSþïã“wƒühÌŽþüùìè\ÖŸÉØãO2ã#ùãøäðøË;ßÊ'§²O²2™çÅ)·ÆŸõÑe22~öéèLöïäâàíøx,ŸrøýøâD>A|ñÎüðËñ,âËÙçÓó#øo°…2ˆløÙøüßóƒóÌ6öO_Â@²»2Ƨƒ“CÔÆAb¹ùO§_ 5dÝÇïð@æ`£ŽòwGï/Æ?ÊñÊ“ò™ó/ŸŽl¿Ï/¸AÇÇùÉÑ¡Ì÷àì§üüèìÇñ!ö!;;ú|0–íFúì £œž(oy6Âá •ýørrŒÕžý鋬g %`ŒƒBmØÌäܳ¯cù8Nhóð|Eþÿ'!£ÓüÓÁO ÌþÉÈC¦Û]ª¢ˆÔyðö{ðVæ3æ´d"ØÑ»ƒOŽÎY ~ÚÀäƒüüóÑáÿ"Ò“³>Ö]‘[ô§/8Eù… ’Èqbi C;2ÜAÐÚ‰Óˆ|{ó^öâ·7ètq|zb“\䜱üóíž>;:‘ýâu:8<ür&W Oà ™Íù¹lãJ†õò6ÏÞù}â>çïÆÇ_Îîј|ùT¶C’ÖÂ8‘÷¤|ü^>uøÑN/ïÜÚŸòro䱃w?ŽÁyô;™Ü…ó±íÉ©`ûHÆÆäSYŸßàö|T˜Ô­Qõ°^PþË/Ã=eǤ\ 6É8Á:«Vüu‘â(“ü6Cé™°¼fþG»ÌÄQ7Ùª òGM;³¸a2À™@Ÿô LŒXÆl’j™ueÊÀ°`Rǹ™¤‚†`±»=#Î]²Ëea!§¨0oK¡¿hE¤â KÃŒÃÛ·þ0ñ}¡,®ÅX¼:.|Im$xݾ—k‹Y‰òÞššÁÆ„ð„ »Öº‘ŠGû©Ãïu`GëóªQ¸¨iŠC$ºÒ ³!×e“ ù‡ÚÄ@²»Z¿Ø†¾Ûã*‘_(˜¨ þÇê&SÿH„ä ^ŸY•žô»´K“¢Îy¿ ÙSVí7&‡)‚r¹î¹-Ó8"³ÛŽÞÐz+J1‘BÓÈý#Ç1ÆQz]”tÿ¾þ<Ú¾i(Ö̰ z–¶Ï®tɵ’ã(\D î`B.àß„ jQ"Ò)Š6†Ø”Ó²¹ÿ1}^–Vé4ÿ¥mÖtrfñÂÎjmép¬§tœÈÃ<" cƽ|{Vhý—T`¾¿™Ó?øOçóg’é"H1"p£)&´@Ó,¡-—€ª5õ\¤ù€hVv+¤~Ï\£O8{ô¬’BæøÝžUß”™fD?ÊsdN­¦Tt€®,I¥Çña.öwUí¾_ý~°qq›ó¼{—ï½>©o­ ¯hç§Ç¢{ÿ”êÍoHFùr½@YìÒÝî(^‹M~e…A9Ãw°±ì#X&Uð¹Aö&ýÜd7ÈH+7ëÌ;½b`Åb!ñ{ ³áÓî oÀ+þ…$õiëÔ,“Iýô¼ÿ—ev[ËÉÌàÝ·å|%VÞ¶Ã!89MévUi\7dü[‰-–Ð<$#óÜ”z-¯õ<ï=€‘ííÛ²éçšÉÝd- ø™F:æŠgG¨itÑ5pvbžŠëÕUšY!8m8õ( ¹´oCZh¶ÅOõºž®Ñ‡Oï8dâå:|HÑAq¼"el¸f—þoBç»1(×±Õ„Þ67œ `0m?¸Ôäcÿ³É?“o¬%"Q$Hý*¹XËU«ç? ò=ÑÕšjÆ:$PZôÔëh+ÏðúQ(Èüº°Ýàe±¸Qôp€~Òó¥o#Kò`CÉdkR^T DÛÔˆPƒÛXé,sÑdŽg~&ؾÊ*u&¢hÛ•~1ñ«·•âu¹Ü…¤LáÎA¢žÔ=…Îóg¶ÔºÈ¶×º¸ïÚ|¬¤ôÿAý'êÿÇõõ¯[ÿïéÞ˽yúúõÞËg¯Ÿïí½þ—§{{/^¾|¬ÿôë?*ܪ•äí_Õ DÍÜÞº\ŠIÎ>*ÂØO޾žk«Ï’,%C´“³žDW92Ñô¡Gñßÿþ['î_»þçóWO_ÿËÞS¹ÿÏ_ì=}ùBë¿=ÖÿüU~>Ÿѽz>¾8:¥¨[ë—šÉ.\%ãb#Ÿóà¥å½ëÉD k3fëlZkò"Ô‰P&ôÅèYÚñ#/ìiZ±sÞtÂXö­üëÏCeåü{%Ÿæòñ72îêgUýßž¿C\ÑÜUóAÖÖ³¢©,H·¾¾-3â¶¢£'¡B'ƒ6Y§6q–iyh8=Q´ãô³z³X‘Ù2û̶°,“„¬-Ô+G×£<-k%Ú¢Æk¤B…Ÿ×ó! è£û£ü]w¦š‡7ål‘eÆz5}X¨O±¤Úm€ÜYœtB;ÏÎÓpÅPÓ¸¦ØŠû(«:,‘¦XÛÅz(3 Ç·%2©Ä|~Ã&0‘vYM×ÌÌy»ú{.%z@>4ë :dm2?a5[VCŽÕbKÆd^ÀÇAtVû%Lˆf}.tõw¸XZÖ3„Užõª‘؇xy€pr°õ&7FŸ+ xÒz´SÙ郥»5òŸ¡×ÍÌšÖ< b·2Î"ô¢ú_•å a½Ùr4÷Õ’î'"7µt<´f¥ŽQ²ß7bœ^7õ¶Ü¶t£¹€\ùtZ¯0 ºД½Ê˜ÏË®Ž£ü£éÖ‡ÏØõôB~š—ü{™ù)òQó®`èbßiÖÎ`×ó¹ç õ&W£üí—çýd Óòru½ŸLÑ\H•ÿí“$¸ ” pVu…ÚO,ÈÏj=5½êxÒR‡;ÚÓ«û)õéŸË8§¤^ˆÜMoMô¥aD™xöå¤Ë„ù ¿ÑËÉtÚ]Î)ün7pFrÎ<žž^Ðé”ZU7¼hy¿›ºÖTçÀøÔtŽÝž…‹Ð5="çúÙvo@†·¿É ô™?þëÇÓOGÂ(XRÆ´®Ý”Ÿíz¹§M¶Ã7Ÿ\VóXèBñq&Nvf¬Rº1•ÊÃöZÈw³Ö²÷âz4õ'Âû¯*GDv’}:8jmøKÛrøþøàÃù‡c]«w‰:üüyûŽßÙïõ÷bEËÖÚyÁ?3ŠE§Ó|wÈ2“]왽»ÁîM ZpBáß°âK²Â²ÿú´úÿ*ÕèaýïÙËW¯žCÿ{þzïõ‹—{/¡ÿ½xöXÿ÷×™¶| ­ UC貤æj)*W)×–Œj©dÓ:XŠ™÷L³g{TÌ(·ÎM ³ÖöýÌž=:}϶÷Ë©° UGt låðâìxø®oèg¤í«j Œb&lDùHrÿЫío.b²ìéèÙïÃïÑ#FéT„Fêë°¯C•>t»1à"yѾÚB l¾–o¼·LÞkQpÒUzÍ™§2c*ˆ9ªýuÛü9e,±åžì·e(hKmìç0ÞN þé»P↹ewûd‘ÑßÊ5·Ú^îaUµ°¢>âÙlD+ÊK9öPîðÎ8{å!úéCÍæo> ¹4éÎI˜1#SPÄTÇe}-í_¥‚fB[õ´Y7 µ’l,% ºRÀ%3¬Tk‹‰?Ö— bB²$gwYÃ<Ð×xæT tÌñ“Sœ¾÷†3FßœZyÁ{ZÐËå ˆ‚%T‡Ë—zªj¼Ãp\3f»OnVóo Ìô…Üëi_'#v…¥Ø"ÏA»ØÅ™v7=ëì[lå·ˆH\›ÅwW4s’;6Ñ¥rÒ bí˜=´ÿ´2Z­¨ÃªARBr#¾W¤y¿;™Å[4CF\—Z wA|µQÒhÕ´Ô(¿‚߈²b3×ÖÓRésä ד' ÏQsEÕÎ+ƒtÊ·qºZ4z5в¸†Œ ß•ÐÛË–uóÂ8¯øŠÔ›fŒ xÏžÞ2ˆJj»B”åûrïéÓQ~. þ‘믮lÍŠã9›¯P÷Ç6m´…©ÍÊâ»AÄ9 Ý·þ¸1­|//WW^H2è’=3`5<»ÅÔC…q‡'üN¹zh¦ú/Ù]b Î~ç›6³»bÝS”»w>þðu|røQ9‰¦• w.³sü¼ºEikTì/øo©¹ÿÖ"µ¾6S·êr½ìn•ò¹æ¹²öåü ‡o{ß ùÂñ울“Ðl¦Ûô (lQL–Áe 7ý8WÝB¢W§åU!#dé°´­Úýi÷B5#VT7oÚÔ”@ ƒ,M®²ºÖ5”eO}LWMÅj‹¬:‰½Äiù(åD¸–Aø¥7]ݺŸ;\ù@ŸÔÚ0V½e5?=eÿ#Yœ;±Ôºñ/º£Á3tU--7u€ ùÙ4L°wøû½ý¸ìÇØg——@­ù‹Qû(x‚¦©Z*AV0‘ßGàý<_Në¦È!i^ù`=„½……_¬d•'׫u9ïSqz;‡„bæ}ÂÖ6NzýDp9,É=F ¹L-¹š^.|NÀµ—²3Í?úrSÙ±O‡P û»-QdÍë›EÝGÈ„f±Å7e;›šö¯[Éwʃ˜Ü;Æ^u‘CÃý~³\.öŸÀiê íFª +º.Górù¤?õ®ˆ•0D—t5ø5†‘¶²‹i†g×*oGÛØ‡yOðœ¸]í”OJŇ£ªIiü«lSµXi›–˜ £ªK#8¹ïÕm?Ìü&$í£´^ªM›hx¸Ï_ fü—ÀMP èά`?㌞¹(þV®QXÊû!—¬«Ñ`Þ ³Bÿõ*t[r«Þ¤=½C­±õ¿OM^uÂ=ÿÞph¯ !¢ºXF(vžŸ°ÆÆ÷¨r´Õß•nXBlß¼†Øa¥üÕ¼£¢tïÖ—Å´ÐJ"3(è^L÷Þ{¯.YJqôDÌôYÛ1–`ocVµr+ýßh©†hÜTg“÷€ÝÛ»Mûpë¾yܸ3N€45rl— T¸÷{tN6&òß|©FúZ~lÞé¶™÷D׌ZÄnØkªU‰ê†¦à´:ƒ¨ÿØ%6xv¦ê̵ê¸Fi1’Åùý.a@ŠÈwoÓ²YÛ j· ¿ˆ{­†``Ä1^o8ÆUJR–‡p°@åVþ…Uª錦H¢Õ½-¯)ÍRP^_¿BÖŸ—Ú±Q 胢j½{ÐDgâ6Šï…G,àÐZÑBœSxP*“¤Ãó?+u0¹ºŒvV|IÂïÌ#˜™E%œ4´” EŒËüäôxqÐø|—Uý4SÎROÈ/:þ³'²“'XTÓžLÂEò'aD„tSϑݑïÂæÙŽô;g—:•Þfï.W º„:EîdÆò\Úc7Hw”þ!îÎ.õí%švo#  0ºÛ`”ÓsU‰È,Esj!8|t|‰ü¸VOOK6­<@–i± û ºç£Ÿw[å¢àð“okÆT^Q8·X)Ic<¥*A;PÇYÄG¬“VV÷&Ð ã*\†3^ÙB±>²üžÏ\X¥Ù+~]É>µù™Û§;!|Í'èˆeÑL˜’Ãm$G9Ë{Ö1Æ2Ô\ùìG)æ†õo† M¢Â,eTÈ\À5òw½Åᣬ Šy”HuçãçG~t |R¬4£%Z†j€'ѹÎϬ™gë$''ytøñ4¿š׬j4ÇKz~ähÔ×ÕÏï,»ߨ L‘6Ñ ¿µ±3š¤ÁW×B”󳼟ÿ–?¾È·ìKC1‘ôpxu£¿MiÚ…ñ¹ý•Çd;ÄèdœznÚiý¾3×¢MÁ£ )šðÉ»ÁÚÉ«mñ£*u÷¶§"Gæ½ÁVt˲®eNÛ”¸‚´Æ­¶Z‘ßõ#whõh޾ʎVQ¸DàžÞ²ãè¾åi…ÏFML¾¦j—ê—ý<`æMÞ#ÿ]éâoL›T9â¡ÒÛK9kIˆtŠü¾Ý®¥$<êÿ«<†U•¾kwúAAï…s]N®Ë¥H‚¦×W°+qéaœä8¢Þ®˜–X,»¦ü ¥ëv&F€Òò kT`qS˜i®‡&ºÜö¢?u` z6ŠW^=º¦oa[ëyŸáÄmþÝ…ãôãƒ|ºÒV8y£u„-áQÉÒ_¯WÖSÁŸckÊPƒ»]Ï'7ÈJmÕì õçkâ&ñöÓ›%Jaã—ÕÔ‡Þ®j<€d|عk_2ä[MÀqk?ËOŠÍ‡×û-RZ<êš nDÏ‚;*Íkw1Ýfnî_­¹ƒçeÂ2Öèp.Kûé%hë‰ù˜j|]4‡ÝÈe­¯¬RC#ü±Ù´Ï7O©l#Hè‹ó‹Ïª2Zä½Ï ä0 åôíQ†¨HÂNÈ+0V´¤½âᱬ¢']&òæ Ðß4íf:Ã0kT>"d¯ÿáâàmðì]R°Á_]ÎWÃPw?zßöC¹‚Éz6Iʆˆ@¨ɽZ‘Í´¤ZH ϰmWJ{µ/¦BpR*±õ€·žB}7´T¶}_†ó3W8#Z®?%‚ãÓÓÕ‡¨ mœu;ºé"öìrû-O ‡hX™åÜQŽo®É¹tG@@|“Ö¡/‚ÏÆÌµ—oOvõ71̙ԧä}îÑ ¾\‡ †µS ¬àé0½_¶í4‹AãÀ ¥~2Õz¥ŽÏý4ß%¦œ=;øüEYëL¦õdå ÇúbߴшtZnóÀRÀ>0¸\5óPæ+ÐâÃé °õ)+¸~sOåéÜäÀÃI n & 'V%¤"PyN®.k½ªw–=Ä®ù=‰P.'£<ÖW†A&ûó|ŸÆ%oê(„…ÿâãã4“_'×+°Vxzñ² }_àÙ~~Þ´Pèÿª®äAUwR—@OáZ¢ÔŒùáwÕu%nþe^ýl£ííçcôÊßzõ“ÿ2ü÷Åé»Ó_ÿ-ÿþâ©çÿ={þôðßÏ_={Äÿ?8óý,;ÿxzv1ÞY`x0¯îˇsDöB®[[]B[±Ì`ïßúƒœ1×ËYòçoQk åÎ-43^ §¡KªA;>=ùgÖñ´k¿GáÃ<Ñ_ä+x9Y£2:ïဢsÅfZ]£NEd?ZK&¬õ¢ÊU¢4Cˆh›Á%V3}n} 6`ѧ«Eq¹êZ\]Â"6‹Â‚:YE„[©%ø™ÑOœ4mWd±oøÉóæþãýû¿·÷ìé ¿ÿ¯žjþÇó—¯ïÿ¯ñ`ÁLK[·Tÿ7 ͸ž9`䬓¨ÖMKXZ[t5ïlŠ|8}pÌ>aÙ;KëËî¥õY¬O2‰ˆï{†XÈi„­›ý6ÔtpZþmULTªß sÉÛE½DY› öE̪^@ôS_›v3VSÎ-^ËXÃlG];;}õÑzÙ9{.¥E”þ¾´bvE¥üNx@ղɺ[ÍhËÌ:!ThÕ<Ù™–\ö¸'”…ü:C[ÅÅÀ¤Ÿ¡R`e]kê¤o9ú¥2Áß¶¹&´û&GB´eå`²á7é<”c›qÄS§I|aÊñЧËu´ÝÜA«b“÷®ˆ,‘ÿ]ÏW£º¹~"ÿ|âÏ=é²ÔvÐrÙH5G%`~5j·ŠÝ Žéײ! 7E‰œ|mü76½£¤]TâÈ nI`Òg3FàÚr5­‡,"ºq? ›{W!:0…pª$Ý_8ï8+¯Z•шWàhöZFü¾zéÁŸë˜QŽdi(‡å’DÛ”4¡«À%³†˜ª/߉ù!ÊüEC°—œòn›m~s?ß©˜®}×j µÝ´°?¶gYõ'ëhgE‰<ùTtoE¡Áâp¸ÇuDÓ¬œÒFæÜ"ÆŸhã¦\JñÂÆa|;Óƒùm^òc±8®…<ØÖ•¯vÆWô7@FR½›æX/¢Ü‰@ņ8MCËV³uŸP…Í­Eÿa†Ë6}qÔÖ¿Ír‡ê´Ø=ëM ›¾¹QÞkËRK^Z&r«”E+zhÔ›×—à5Þœ¸]Í‘s‚jp#ÑFú;ع§s–â==Ïÿ,ä€þ \Úk¹9 R)¦ÈjÐ,a"MØ‚ÙýÇÌsmøÛ9ët I·ëÛËzfŽ‹{ÙÆÝåc¶ÙÓp ;VÏOŽ' ™“x>½^!œ×èe2¯×Ú¹¤ÐÄÂKöd6÷ï-𥰠‚Þ§¦¥úƒ‘ylÜ™X`_æá4ô 3ÄŽžú ×3Z2–ÖP~ÊæQÞF&ôi =ÆiT•Jò³<¤bÆÚ Lvtz˜O‡õãƒÎc<^Œž‡d&æÄoËýèÈ @,Öƒ ±Ð†~c±«…0­)7ïåè)äòÀëåÁJèöú6ƒÃ›V6[¼ú¶Y­æewO™}F1ë!)X¨$^ÔÜÑ,~Nà­^kž`ÁñÑH¶e”“Àd/³–j0Z&ÕÒçÁóMÏÈW|ôš[„(t!ýÂê3Dw Ñí0ýâB~ÈGò#×õLøÑt½oÛG^Ñj% ¯2çFþÅ‘Ô î×­×Ðs×Òh×óÉ(ÿTt›é‘÷ŠáÚƒ7 Í´[ŠÇD«Æ‡ÏÃð£P£/âew?2³,%Ä_D,jHÓR‰ záê…®é 3Xôr'@…U×=Ή[,£\»¤þq­Í¨¨.:®-‚€z‘`£ÛÄZͳ+a/€(G >±ƒ>¥* òÉŸ÷ƒè61ý®ÅvG¬¥º…eêúZÙ õe·Ö¼¹5©XÔYR’eŸ aõùaÑí䦊HP (ÁN*‡§-²s¬&Ë*NCŸÙ×<Úýü0ô;c®H$ìçŸc›Éi9¯Ê©Õ¿„ç×’‡6õ ~ñI¹œ<¹6|9HªaßÍ\¡Œ©W8x¹ºdàsTÖûC«¾ïü·ëjúÇ—˜#|ö4IžÎŸÊÿ²,‰^$#¥méUg( ;£Ú¥FiQwD·óOlÕ/IS^£Ђ"?Ú ñ‡˜ãƒÚà œîeàÁ4.CSe™  /™â(g™|5æã`}'‚k[çšJ#˜5cÄÕ™Í ãlZ•!JV*éZK!1¿ºúKŠIsºáP;—ÑKkMlB¬Götìà<µØ‘e«Œum$$¼iPËÓÿÚ¨Ôí™XÜ™g«4˜As•¦Ý“Áh§Z$à Üž[mRVF`oº•A,Ò´ÌJÒ/b N„ý@…^}·sãîU™PüÜ Ö×>9­xø+­nRKÎãB9z¡ÐªÏñþÜöQþ•Õ—À¥ˆ&¸,câÝ8­µ%Ï¿Šª£xœ}†¾˜.¦[E lSF|›W¿Ë…ú)A£åAt‘,x'¶gIÇ€ÜôÇÒ??????????????????ÿE?ÿš¯ð readline-6.3/support/0000775000043600000240000000000012302645510013462 5ustar chetstaffreadline-6.3/support/config.guess0000644000043600000240000013135512253665151016015 0ustar chetstaff#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-11-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: readline-6.3/support/config.rpath0000664000043600000000000003511211053015105015755 0ustar chetwheel#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: readline-6.3/support/install.sh0000755000043600000000000001234307457107124015474 0ustar chetwheel#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 readline-6.3/support/mkdirs0000775000043600000000000000216511050551141014673 0ustar chetwheel#! /bin/sh # # mkdirs - a work-alike for `mkdir -p' # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2002 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . for dir do test -d "$dir" && continue tomake=$dir while test -n "$dir" ; do # dir=${dir%/*} # dir=`expr "$dir" ':' '\(/.*\)/[^/]*'` if dir=`expr "$dir" ':' '\(.*\)/[^/]*'`; then tomake="$dir $tomake" else dir= fi done for d in $tomake do test -d "$d" && continue echo mkdir "$d" mkdir "$d" done done exit 0 readline-6.3/support/mkdist0000775000043600000000000000514512116703576014715 0ustar chetwheel#! /bin/bash - # # mkdist - make a distribution directory from a master manifest file # # usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version # # SRCDIR defaults to src # MANIFEST defaults to $SRCDIR/MANIFEST # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2002 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # SRCDIR=src ROOTNAME=bash usage() { echo usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version 1>&2 exit 2 } vmsg() { if [ -n "$verbose" ]; then echo mkdist: "$@" fi } while getopts m:s:r:tv name do case $name in m) MANIFEST=$OPTARG ;; s) SRCDIR=$OPTARG ;; r) ROOTNAME=$OPTARG ;; t) maketar=yes ;; v) verbose=yes ;; ?) usage ;; esac done : ${MANIFEST:=$SRCDIR/MANIFEST} vmsg using $MANIFEST shift $(( $OPTIND - 1 )) if [ $# -lt 1 ]; then usage fi version=$1 newdir=${ROOTNAME}-$version tarfile=${newdir}.tar vmsg creating distribution for $ROOTNAME version $version in $newdir if [ ! -d $newdir ]; then mkdir $newdir || { echo $0: cannot make directory $newdir 1>&2 ; exit 1; } fi dirmode=755 filmode=644 while read fname type mode do [ -z "$fname" ] && continue case "$fname" in \#*) continue ;; esac case "$type" in d) mkdir $newdir/$fname ;; f) cp -p $SRCDIR/$fname $newdir/$fname ;; s) ln -s $mode $newdir/$fname ; mode= ;; # symlink l) ln $mode $newdir/$fname ; mode= ;; # hard link *) echo "unknown file type $type" 1>&2 ;; esac if [ -n "$mode" ]; then chmod $mode $newdir/$fname fi done < $MANIFEST # cut off the `-alpha' in something like `2.0-alpha', leaving just the # numeric version #version=${version%%-*} #case "$version" in #*.*.*) vers=${version%.*} ;; #*.*) vers=${version} ;; #esac #echo $vers > $newdir/.distribution #case "$version" in #*.*.*) plevel=${version##*.} ;; #*) plevel=0 ;; #esac #[ -z "$plevel" ] && plevel=0 #echo ${plevel} > $newdir/.patchlevel vmsg $newdir created if [ -n "$maketar" ]; then tar cf ${tarfile} $newdir gzip $tarfile vmsg ${tarfile}.gz created fi exit 0 readline-6.3/support/mkinstalldirs0000555000043600000000000000370407765404276016306 0ustar chetwheel#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here readline-6.3/support/shobj-conf0000664000043600001200000003455012302524445015431 0ustar chetadmin#! /bin/sh # # shobj-conf -- output a series of variable assignments to be substituted # into a Makefile by configure which specify system-dependent # information for creating shared objects that may be loaded # into bash with `enable -f' # # usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is part of GNU Bash, the Bourne Again SHell. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # defaults # SHOBJ_STATUS=supported SHLIB_STATUS=supported SHOBJ_CC=cc SHOBJ_CFLAGS= SHOBJ_LD= SHOBJ_LDFLAGS= SHOBJ_XLDFLAGS= SHOBJ_LIBS= SHLIB_XLDFLAGS= SHLIB_LIBS= SHLIB_DOT='.' SHLIB_LIBPREF='lib' SHLIB_LIBSUFF='so' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' SHLIB_DLLVERSION='$(SHLIB_MAJOR)' PROGNAME=`basename $0` USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" while [ $# -gt 0 ]; do case "$1" in -C) shift; SHOBJ_CC="$1"; shift ;; -c) shift; host_cpu="$1"; shift ;; -o) shift; host_os="$1"; shift ;; -v) shift; host_vendor="$1"; shift ;; *) echo "$USAGE" >&2 ; exit 2;; esac done case "${host_os}-${SHOBJ_CC}-${host_vendor}" in nsk-cc-tandem) SHOBJ_CFLAGS=-Wglobalized case `uname -m` in NSR*) SHOBJ_CFLAGS="${SHOBJ_CFLAGS} -Wcall_shared" # default on TNS/E, needed on TNS/R SHOBJ_LD=/usr/bin/ld # for TNS/R ;; NSE*|NEO*) SHOBJ_LD=/usr/bin/eld ;; esac SHOBJ_LDFLAGS='-shared -bglobalized -unres_symbols ignore' ;; sunos4*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD=/usr/bin/ld SHOBJ_LDFLAGS='-assert pure-text' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; sunos4*) SHOBJ_CFLAGS=-pic SHOBJ_LD=/usr/bin/ld SHOBJ_LDFLAGS='-assert pure-text' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; sunos5*-*gcc*|solaris2*-*gcc*) SHOBJ_LD='${CC}' ld_used=`gcc -print-prog-name=ld` if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then # This line works for the GNU ld SHOBJ_LDFLAGS='-shared -Wl,-h,$@' # http://sourceware.org/ml/binutils/2001-08/msg00361.html SHOBJ_CFLAGS=-fPIC else # This line works for the Solaris linker in /usr/ccs/bin/ld SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' SHOBJ_CFLAGS=-fpic fi # SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sunos5*|solaris2*) SHOBJ_CFLAGS='-K pic' SHOBJ_LD=/usr/ccs/bin/ld SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' # SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd. linux*-*|gnu*-*|k*bsd*-gnu-*|freebsd*-gentoo) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; freebsd2*) SHOBJ_CFLAGS=-fpic SHOBJ_LD=ld SHOBJ_LDFLAGS='-x -Bshareable' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; # FreeBSD-3.x ELF freebsd3*|freebsdaout*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' else SHOBJ_LDFLAGS='-shared' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' fi ;; # FreeBSD-4.x and later have only ELF freebsd[4-9]*|freebsd1[0-9]*|freebsdelf*|dragonfly*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # Darwin/MacOS X darwin*) # Common definitions for all darwin/mac os x versions SHOBJ_CFLAGS='-fno-common' SHOBJ_LD='${CC}' SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' SHLIB_LIBSUFF='dylib' # unused at this time SHLIB_SONAME='$(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF)' case "${host_os}" in # Darwin versions 1, 5, 6, 7 correspond to Mac OS X 10.0, 10.1, 10.2, # and 10.3, respectively. darwin[1-7].*) SHOBJ_STATUS=unsupported SHOBJ_LDFLAGS='-dynamic' SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' ;; # Darwin 8 == Mac OS X 10.4; Mac OS X 10.N == Darwin N+4 *) case "${host_os}" in darwin[89]*|darwin1[012]*) SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`' ;; *) # Mac OS X 10.9 (Mavericks) and later SHOBJ_ARCHFLAGS= # for 32 and 64bit universal library #SHOBJ_ARCHFLAGS='-arch i386 -arch x86_64' #SHOBJ_CFLAGS=${SHOBJ_CFLAGS}' -arch i386 -arch x86_64' ;; esac SHOBJ_LDFLAGS="-dynamiclib -dynamic -undefined dynamic_lookup ${SHOBJ_ARCHFLAGS}" SHLIB_XLDFLAGS="-dynamiclib ${SHOBJ_ARCHFLAGS}"' -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' ;; esac SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 ;; openbsd*|netbsd*|mirbsd*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; bsdi2*) SHOBJ_CC=shlicc2 SHOBJ_CFLAGS= SHOBJ_LD=ld SHOBJ_LDFLAGS=-r SHOBJ_LIBS=-lc_s.2.1.0 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in # the ass -- they require changing {/usr/lib,etc}/shlib.map on # each system, and the library creation process is byzantine SHLIB_STATUS=unsupported ;; bsdi3*) SHOBJ_CC=shlicc2 SHOBJ_CFLAGS= SHOBJ_LD=ld SHOBJ_LDFLAGS=-r SHOBJ_LIBS=-lc_s.3.0.0 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in # the ass -- they require changing {/usr/lib,etc}/shlib.map on # each system, and the library creation process is byzantine SHLIB_STATUS=unsupported ;; bsdi4*) # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked # shared libraries. gcc 2.x is the standard compiler, and the # `normal' gcc options should work as they do in Linux. SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; osf*-*gcc*) # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; osf*) SHOBJ_LD=ld SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com SHOBJ_CFLAGS=-fpic SHOBJ_LD='ld' SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' SHOBJ_XLDFLAGS='-G' SHLIB_XLDFLAGS='-bM:SRE' SHLIB_LIBS='-lcurses -lc' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; aix4.[2-9]*|aix[5-9].*) SHOBJ_CFLAGS=-K SHOBJ_LD='ld' SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' SHOBJ_XLDFLAGS='-G' SHLIB_XLDFLAGS='-bM:SRE' SHLIB_LIBS='-lcurses -lc' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # # THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface # irix[56]*-*gcc*) SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; irix[56]*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld # SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' # Change from David Kaelbling . If you have problems, # remove the `-no_unresolved' SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux9*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux9*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux10*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' # if you have problems linking here, moving the `-Wl,+h,$@' from # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux10*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s +h $@' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux11*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' # SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@' SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux11*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s +h $@' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv4*-*gcc*) SHOBJ_CFLAGS=-shared SHOBJ_LDFLAGS='-shared -h $@' SHOBJ_LD='${CC}' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv4*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-dy -z text -G -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sco3.2v5*-*gcc*) SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sco3.2v5*) SHOBJ_CFLAGS='-K pic -b elf' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5uw7*-*gcc*) SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5uw7*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5UnixWare*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5UnixWare*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5OpenUNIX*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5OpenUNIX*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; dgux*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; dgux*) SHOBJ_CFLAGS='-K pic' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; msdos*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; cygwin*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' SHLIB_LIBPREF='cyg' SHLIB_LIBSUFF='dll' SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' SHLIB_LIBS='$(TERMCAP_LIB)' SHLIB_DOT= # For official cygwin releases, DLLVERSION will be defined in the # environment of configure, and will be incremented any time the API # changes in a non-backwards compatible manner. Otherwise, it is just # SHLIB_MAJOR. if [ -n "$DLLVERSION" ] ; then SHLIB_DLLVERSION="$DLLVERSION" fi ;; mingw*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' SHLIB_LIBSUFF='dll' SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' SHLIB_LIBS='$(TERMCAP_LIB)' SHLIB_DOT= # For official cygwin releases, DLLVERSION will be defined in the # environment of configure, and will be incremented any time the API # changes in a non-backwards compatible manner. Otherwise, it is just # SHLIB_MAJOR. if [ -n "$DLLVERSION" ] ; then SHLIB_DLLVERSION="$DLLVERSION" fi ;; # # Rely on correct gcc configuration for everything else # *-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; *) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; esac echo SHOBJ_CC=\'"$SHOBJ_CC"\' echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' echo SHOBJ_LD=\'"$SHOBJ_LD"\' echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' echo SHLIB_DOT=\'"$SHLIB_DOT"\' echo SHLIB_LIBPREF=\'"$SHLIB_LIBPREF"\' echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' echo SHLIB_DLLVERSION=\'"$SHLIB_DLLVERSION"\' echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' exit 0 readline-6.3/support/shlib-install0000755000043600000240000001201411777104520016157 0ustar chetstaff#! /bin/sh # # shlib-install - install a shared library and do any necessary host-specific # post-installation configuration (like ldconfig) # # usage: shlib-install [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library # # Chet Ramey # chet@po.cwru.edu # # defaults # INSTALLDIR=/usr/local/lib LDCONFIG=ldconfig PROGNAME=`basename $0` USAGE="$PROGNAME [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library" # process options while [ $# -gt 0 ]; do case "$1" in -O) shift; host_os="$1"; shift ;; -V) shift; host_vendor="$1"; shift ;; -d) shift; INSTALLDIR="$1"; shift ;; -b) shift; BINDIR="$1" ; shift ;; -i) shift; INSTALLPROG="$1" ; shift ;; -D) echo=echo ; shift ;; -U) uninstall=true ; shift ;; -*) echo "$USAGE" >&2 ; exit 2;; *) break ;; esac done # set install target name LIBNAME="$1" if [ -z "$LIBNAME" ]; then echo "$USAGE" >&2 exit 2 fi OLDSUFF=old MV=mv RM="rm -f" LN="ln -s" # pre-install if [ -z "$uninstall" ]; then ${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} if [ -f "$INSTALLDIR/$LIBNAME" ]; then ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} fi fi # install/uninstall if [ -z "$uninstall" ] ; then ${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME} else ${echo} ${RM} ${INSTALLDIR}/${LIBNAME} fi # post-install/uninstall # HP-UX and Darwin/MacOS X require that a shared library have execute permission # Linux does, too, and ldd warns about it. Solaris doesn't seem to mind, # but ldd still warns about it. # Cygwin installs both a dll (which must go in $BINDIR) and an implicit # link library (in $libdir) case "$host_os" in hpux*|darwin*|macosx*|linux*|solaris2*) if [ -z "$uninstall" ]; then chmod 555 ${INSTALLDIR}/${LIBNAME} fi ;; cygwin*|mingw*) IMPLIBNAME=`echo ${LIBNAME} \ | sed -e 's,^cyg,lib,' -e 's,[0-9]*.dll$,.dll.a,'` if [ -z "$uninstall" ]; then ${echo} $RM ${BINDIR}/${LIBNAME}.${OLDSUFF} if [ -f "$BINDIR/$LIBNAME" ]; then ${echo} $MV $BINDIR/$LIBNAME $BINDIR/$LIBNAME.$OLDSUFF fi ${echo} $MV ${INSTALLDIR}/${LIBNAME} ${BINDIR}/${LIBNAME} ${echo} chmod a+x ${BINDIR}/${LIBNAME} ${echo} eval ${INSTALLPROG} ${LIBNAME}.a \ ${INSTALLDIR}/${IMPLIBNAME} else ${echo} ${RM} ${BINDIR}/${LIBNAME} ${echo} ${RM} ${INSTALLDIR}/${IMPLIBNAME} fi ;; *) ;; esac case "$LIBNAME" in *.*.[0-9].[0-9]) # libname.so.M.N LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]\.[0-9]:\1:'` # libname.so ;; *.*.[0-9]) # libname.so.M LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so ;; *.[0-9]) # libname.M LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname ;; *.[0-9].[0-9].dylib) # libname.M.N.dylib LINK2=`echo $LIBNAME | sed 's:\(.*\.[0-9]\)\.[0-9]:\1:'` # libname.M.dylib LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]\.[0-9]:\1:'` # libname.dylib esac INSTALL_LINK1='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK1' INSTALL_LINK2='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK2' # # Create symlinks to the installed library. This section is incomplete. # case "$host_os-$host_vendor" in *linux*|freebsd*-gentoo) # libname.so.M -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK2 if [ -z "$uninstall" ]; then eval $INSTALL_LINK2 fi # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then ${echo} cd $INSTALLDIR && ${echo} ${LN} $LINK2 $LINK1 fi ;; bsdi4*|*gnu*|darwin*|macosx*|netbsd*|mirbsd*) # libname.so.M -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK2 if [ -z "$uninstall" ]; then eval $INSTALL_LINK2 fi # libname.so -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; solaris2*|aix4.[2-9]*|aix[5-9]*|osf*|irix[56]*|sysv[45]*|dgux*|interix*) # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; # FreeBSD 3.x and above can have either a.out or ELF shared libraries freebsd3*|freebsdaout*) if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi else # libname.so.M -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK2 if [ -z "$uninstall" ]; then eval $INSTALL_LINK2 fi # libname.so -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi fi ;; freebsd[4-9]*|freebsd1[0-9]*|freebsdelf*|dragonfly*) # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; hpux1*) # libname.sl -> libname.M ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; cygwin*|mingw*) # Links to .dlls don't work. Hence shobj-conf used DLLVERSION.dll # instead of so.SHLIB_MAJOR.SHLIB_MINOR. The postinstall above # took care of everything else. ;; *) ;; esac exit 0 readline-6.3/support/wcwidth.c0000644000043600000000000003324511050046526015300 0ustar chetwheel/* * This is an implementation of wcwidth() and wcswidth() (defined in * IEEE Std 1002.1-2001) for Unicode. * * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html * * In fixed-width output devices, Latin characters all occupy a single * "cell" position of equal width, whereas ideographic CJK characters * occupy two such cells. Interoperability between terminal-line * applications and (teletype-style) character terminals using the * UTF-8 encoding requires agreement on which character should advance * the cursor by how many cell positions. No established formal * standards exist at present on which Unicode character shall occupy * how many cell positions on character terminals. These routines are * a first attempt of defining such behavior based on simple rules * applied to data provided by the Unicode Consortium. * * For some graphical characters, the Unicode standard explicitly * defines a character-cell width via the definition of the East Asian * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. * In all these cases, there is no ambiguity about which width a * terminal shall use. For characters in the East Asian Ambiguous (A) * class, the width choice depends purely on a preference of backward * compatibility with either historic CJK or Western practice. * Choosing single-width for these characters is easy to justify as * the appropriate long-term solution, as the CJK practice of * displaying these characters as double-width comes from historic * implementation simplicity (8-bit encoded characters were displayed * single-width and 16-bit ones double-width, even for Greek, * Cyrillic, etc.) and not any typographic considerations. * * Much less clear is the choice of width for the Not East Asian * (Neutral) class. Existing practice does not dictate a width for any * of these characters. It would nevertheless make sense * typographically to allocate two character cells to characters such * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be * represented adequately with a single-width glyph. The following * routines at present merely assign a single-cell width to all * neutral characters, in the interest of simplicity. This is not * entirely satisfactory and should be reconsidered before * establishing a formal standard in this area. At the moment, the * decision which Not East Asian (Neutral) characters should be * represented by double-width glyphs cannot yet be answered by * applying a simple rule from the Unicode database content. Setting * up a proper standard for the behavior of UTF-8 character terminals * will require a careful analysis not only of each Unicode character, * but also of each presentation form, something the author of these * routines has avoided to do so far. * * http://www.unicode.org/unicode/reports/tr11/ * * Markus Kuhn -- 2007-05-26 (Unicode 5.0) * * Permission to use, copy, modify, and distribute this software * for any purpose and without fee is hereby granted. The author * disclaims all warranties with regard to this software. * * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ #ifdef __GO32__ # include #endif #include struct interval { int first; int last; }; /* auxiliary function for binary search in interval table */ static int bisearch(wchar_t ucs, const struct interval *table, int max) { int min = 0; int mid; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else return 1; } return 0; } /* The following two functions define the column width of an ISO 10646 * character as follows: * * - The null character (U+0000) has a column width of 0. * * - Other C0/C1 control characters and DEL will lead to a return * value of -1. * * - Non-spacing and enclosing combining characters (general * category code Mn or Me in the Unicode database) have a * column width of 0. * * - SOFT HYPHEN (U+00AD) has a column width of 1. * * - Other format characters (general category code Cf in the Unicode * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. * * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) * have a column width of 0. * * - Spacing characters in the East Asian Wide (W) or East Asian * Full-width (F) category as defined in Unicode Technical * Report #11 have a column width of 2. * * - All remaining characters (including all printable * ISO 8859-1 and WGL4 characters, Unicode control characters, * etc.) have a column width of 1. * * This implementation assumes that wchar_t characters are encoded * in ISO 10646. */ int mk_wcwidth(wchar_t ucs) { /* sorted list of non-overlapping intervals of non-spacing characters */ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ static const struct interval combining[] = { { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; /* test for 8-bit control characters */ if (ucs == 0) return 0; if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return -1; /* binary search in table of non-spacing characters */ if (bisearch(ucs, combining, sizeof(combining) / sizeof(struct interval) - 1)) return 0; /* if we arrive here, ucs is not a combining or C0/C1 control character */ return 1 + (ucs >= 0x1100 && (ucs <= 0x115f || /* Hangul Jamo init. consonants */ ucs == 0x2329 || ucs == 0x232a || (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f) || /* CJK ... Yi */ (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ (ucs >= 0xffe0 && ucs <= 0xffe6) || (ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd))); } int mk_wcswidth(const wchar_t *pwcs, size_t n) { int w, width = 0; for (;*pwcs && n-- > 0; pwcs++) if ((w = mk_wcwidth(*pwcs)) < 0) return -1; else width += w; return width; } /* * The following functions are the same as mk_wcwidth() and * mk_wcswidth(), except that spacing characters in the East Asian * Ambiguous (A) category as defined in Unicode Technical Report #11 * have a column width of 2. This variant might be useful for users of * CJK legacy encodings who want to migrate to UCS without changing * the traditional terminal character-width behaviour. It is not * otherwise recommended for general use. */ int mk_wcwidth_cjk(wchar_t ucs) { /* sorted list of non-overlapping intervals of East Asian Ambiguous * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ static const struct interval ambiguous[] = { { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 }, { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 }, { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 }, { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 }, { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED }, { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA }, { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B }, { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 }, { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 }, { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 }, { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 }, { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB }, { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 }, { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 }, { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 }, { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 }, { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B }, { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E }, { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 }, { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F }, { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B }, { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 }, { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 }, { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 }, { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 }, { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 }, { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F }, { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF }, { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } }; /* binary search in table of non-spacing characters */ if (bisearch(ucs, ambiguous, sizeof(ambiguous) / sizeof(struct interval) - 1)) return 2; return mk_wcwidth(ucs); } int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) { int w, width = 0; for (;*pwcs && n-- > 0; pwcs++) if ((w = mk_wcwidth_cjk(*pwcs)) < 0) return -1; else width += w; return width; } readline-6.3/shlib/0000775000043600000240000000000012302645507013055 5ustar chetstaffreadline-6.3/shlib/Makefile.in0000664000043600000240000004442611703653231015131 0ustar chetstaff## -*- text -*- ## # Makefile for the GNU readline library shared library support. # # Copyright (C) 1998-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . PACKAGE = @PACKAGE_NAME@ VERSION = @PACKAGE_VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_VERSION = @PACKAGE_VERSION@ RL_LIBRARY_VERSION = @LIBVERSION@ RL_LIBRARY_NAME = readline datarootdir = @datarootdir@ srcdir = @srcdir@ VPATH = @top_srcdir@ topdir = @top_srcdir@ BUILD_DIR = @BUILD_DIR@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ CC = @CC@ RANLIB = @RANLIB@ AR = @AR@ ARFLAGS = @ARFLAGS@ RM = rm -f CP = cp MV = mv LN = ln SHELL = @MAKE_SHELL@ host_os = @host_os@ host_vendor = @host_vendor@ prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ localedir = @localedir@ # Support an alternate destination root directory for package building DESTDIR = CFLAGS = @CFLAGS@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@ @CFLAGS@ DEFS = @DEFS@ @CROSS_COMPILE@ LOCAL_DEFS = @LOCAL_DEFS@ # # These values are generated for configure by ${topdir}/support/shobj-conf. # If your system is not supported by that script, but includes facilities for # dynamic loading of shared objects, please update the script and send the # changes to bash-maintainers@gnu.org. # SHOBJ_CC = @SHOBJ_CC@ SHOBJ_CFLAGS = @SHOBJ_CFLAGS@ SHOBJ_LD = @SHOBJ_LD@ SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@ SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@ SHOBJ_LIBS = @SHOBJ_LIBS@ SHLIB_XLDFLAGS = @LDFLAGS@ @SHLIB_XLDFLAGS@ SHLIB_LIBS = @SHLIB_LIBS@ SHLIB_DOT = @SHLIB_DOT@ SHLIB_LIBPREF = @SHLIB_LIBPREF@ SHLIB_LIBSUFF = @SHLIB_LIBSUFF@ SHLIB_LIBVERSION = @SHLIB_LIBVERSION@ SHLIB_DLLVERSION = @SHLIB_DLLVERSION@ SHLIB_STATUS = @SHLIB_STATUS@ TERMCAP_LIB = @TERMCAP_LIB@ # shared library versioning SHLIB_MAJOR= @SHLIB_MAJOR@ # shared library systems like SVR4's do not use minor versions SHLIB_MINOR= .@SHLIB_MINOR@ # For libraries which include headers from other libraries. INCLUDES = -I. -I.. -I$(topdir) CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS) .SUFFIXES: .so .c.so: ${RM} $@ $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -o $*.o $< $(MV) $*.o $@ # The name of the main library target. SHARED_READLINE = $(SHLIB_LIBPREF)readline$(SHLIB_DOT)$(SHLIB_LIBVERSION) SHARED_HISTORY = $(SHLIB_LIBPREF)history$(SHLIB_DOT)$(SHLIB_LIBVERSION) SHARED_LIBS = $(SHARED_READLINE) $(SHARED_HISTORY) # The C code source files for this library. CSOURCES = $(topdir)/readline.c $(topdir)/funmap.c $(topdir)/keymaps.c \ $(topdir)/vi_mode.c $(topdir)/parens.c $(topdir)/rltty.c \ $(topdir)/complete.c $(topdir)/bind.c $(topdir)/isearch.c \ $(topdir)/display.c $(topdir)/signals.c $(topdir)/emacs_keymap.c \ $(topdir)/vi_keymap.c $(topdir)/util.c $(topdir)/kill.c \ $(topdir)/undo.c $(topdir)/macro.c $(topdir)/input.c \ $(topdir)/callback.c $(topdir)/terminal.c $(topdir)/xmalloc.c $(topdir)/xfree.c \ $(topdir)/history.c $(topdir)/histsearch.c $(topdir)/histexpand.c \ $(topdir)/histfile.c $(topdir)/nls.c $(topdir)/search.c \ $(topdir)/shell.c $(topdir)/savestring.c $(topdir)/tilde.c \ $(topdir)/text.c $(topdir)/misc.c $(topdir)/compat.c \ $(topdir)/colors.c $(topdir)/parse-colors.c \ $(topdir)/mbutil.c $(topdir)/xfree.c # The header files for this library. HSOURCES = $(topdir)/readline.h $(topdir)/rldefs.h $(topdir)/chardefs.h \ $(topdir)/keymaps.h $(topdir)/history.h $(topdir)/histlib.h \ $(topdir)/posixstat.h $(topdir)/posixdir.h $(topdir)/posixjmp.h \ $(topdir)/tilde.h $(topdir)/rlconf.h $(topdir)/rltty.h \ $(topdir)/ansi_stdlib.h $(topdir)/tcap.h $(topdir)/rlstdc.h \ $(topdir)/xmalloc.h $(topdir)/rlprivate.h $(topdir)/rlshell.h \ $(topdir)/rltypedefs.h $(topdir)/rlmbutil.h \ $(topdir)/colors.h $(topdir)/parse-colors.h SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so \ mbutil.so SHARED_TILDEOBJ = tilde.so SHARED_COLORSOBJ = colors.so parse-colors.so SHARED_OBJ = readline.so vi_mode.so funmap.so keymaps.so parens.so search.so \ rltty.so complete.so bind.so isearch.so display.so signals.so \ util.so kill.so undo.so macro.so input.so callback.so terminal.so \ text.so nls.so misc.so \ $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) $(SHARED_COLORSOBJ) \ xmalloc.so xfree.so compat.so ########################################################################## all: $(SHLIB_STATUS) supported: $(SHARED_LIBS) unsupported: @echo "Your system and compiler (${host_os}-${CC}) are not supported by the" @echo "${topdir}/support/shobj-conf script." @echo "If your operating system provides facilities for creating" @echo "shared libraries, please update the script and re-run configure." @echo "Please send the changes you made to bash-maintainers@gnu.org" @echo "for inclusion in future bash and readline releases." $(SHARED_READLINE): $(SHARED_OBJ) $(RM) $@ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_OBJ) $(SHLIB_LIBS) $(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so xfree.so $(RM) $@ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so xfree.so $(SHLIB_LIBS) # Since tilde.c is shared between readline and bash, make sure we compile # it with the right flags when it's built as part of readline tilde.so: tilde.c ${RM} $@ $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -DREADLINE_LIBRARY -c -o tilde.o $(topdir)/tilde.c $(MV) tilde.o $@ installdirs: $(topdir)/support/mkdirs -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(libdir) -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(bindir) install-supported: installdirs $(SHLIB_STATUS) $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY) $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_READLINE) @echo install: you may need to run ldconfig install-unsupported: @echo install: shared libraries not supported install: install-$(SHLIB_STATUS) uninstall-supported: $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_HISTORY) $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_READLINE) @echo uninstall: you may need to run ldconfig uninstall-unsupported: @echo uninstall: shared libraries not supported uninstall: uninstall-$(SHLIB_STATUS) clean mostlyclean: force $(RM) $(SHARED_OBJ) $(SHARED_LIBS) distclean maintainer-clean: clean $(RM) Makefile force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Dependencies bind.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h bind.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h bind.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h bind.so: $(topdir)/rltypedefs.h bind.so: $(topdir)/tilde.h $(topdir)/history.h compat.so: $(topdir)/rlstdc.h callback.so: $(topdir)/rlconf.h callback.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h callback.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h callback.so: $(topdir)/rltypedefs.h callback.so: $(topdir)/tilde.h complete.so: $(topdir)/ansi_stdlib.h $(topdir)/posixdir.h $(topdir)/posixstat.h complete.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h complete.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h complete.so: $(topdir)/rltypedefs.h complete.so: $(topdir)/tilde.h display.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h display.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h display.so: $(topdir)/tcap.h display.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h display.so: $(topdir)/rltypedefs.h display.so: $(topdir)/tilde.h $(topdir)/history.h funmap.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h funmap.so: $(topdir)/rltypedefs.h funmap.so: $(topdir)/rlconf.h $(topdir)/ansi_stdlib.h funmap.so: ${BUILD_DIR}/config.h $(topdir)/tilde.h histexpand.so: $(topdir)/ansi_stdlib.h histexpand.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h histexpand.so: ${BUILD_DIR}/config.h histfile.so: $(topdir)/ansi_stdlib.h histfile.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h histfile.so: ${BUILD_DIR}/config.h history.so: $(topdir)/ansi_stdlib.h history.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h history.so: ${BUILD_DIR}/config.h histsearch.so: $(topdir)/ansi_stdlib.h histsearch.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h histsearch.so: ${BUILD_DIR}/config.h input.so: $(topdir)/ansi_stdlib.h input.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h input.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h input.so: $(topdir)/rltypedefs.h input.so: $(topdir)/tilde.h isearch.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h isearch.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h isearch.so: $(topdir)/rltypedefs.h isearch.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h keymaps.so: $(topdir)/keymaps.h $(topdir)/chardefs.h $(topdir)/rlconf.h keymaps.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h keymaps.so: $(topdir)/rltypedefs.h keymaps.so: ${BUILD_DIR}/config.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h kill.so: $(topdir)/ansi_stdlib.h kill.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h kill.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h kill.so: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rltypedefs.h macro.so: $(topdir)/ansi_stdlib.h macro.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h macro.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h macro.so: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rltypedefs.h mbutil.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h mbutil.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h mbutil.so: $(topdir)/chardefs.h $(topdir)/rlstdc.h misc.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h misc.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h misc.so: $(topdir)/rltypedefs.h misc.so: $(topdir)/history.h $(topdir)/tilde.h $(topdir)/ansi_stdlib.h nls.so: $(topdir)/ansi_stdlib.h nls.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h nls.o: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h nls.o: $(topdir)/rltypedefs.h nls.o: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rlstdc.h parens.so: $(topdir)/rlconf.h ${BUILD_DIR}/config.h parens.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h parens.so: $(topdir)/rltypedefs.h parens.so: $(topdir)/tilde.h rltty.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h rltty.so: $(topdir)/rltty.h $(topdir)/tilde.h rltty.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h rltty.so: $(topdir)/rltypedefs.h search.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h search.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h search.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h search.so: $(topdir)/rltypedefs.h signals.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h signals.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h signals.so: $(topdir)/history.h $(topdir)/tilde.h signals.so: $(topdir)/rltypedefs.h terminal.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h terminal.so: $(topdir)/tcap.h terminal.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h terminal.so: $(topdir)/tilde.h $(topdir)/history.h terminal.so: $(topdir)/rltypedefs.h text.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h text.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h text.so: $(topdir)/rltypedefs.h text.so: $(topdir)/history.h $(topdir)/tilde.h $(topdir)/ansi_stdlib.h tilde.so: $(topdir)/ansi_stdlib.h ${BUILD_DIR}/config.h $(topdir)/tilde.h undo.so: $(topdir)/ansi_stdlib.h undo.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h undo.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h undo.so: $(topdir)/rltypedefs.h undo.so: $(topdir)/tilde.h $(topdir)/history.h util.so: $(topdir)/posixjmp.h $(topdir)/ansi_stdlib.h util.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h util.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h util.so: $(topdir)/rltypedefs.h $(topdir)/tilde.h vi_mode.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h vi_mode.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h vi_mode.so: $(topdir)/history.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h vi_mode.so: $(topdir)/rltypedefs.h xfree.so: ${BUILD_DIR}/config.h xfree.so: $(topdir)/ansi_stdlib.h xmalloc.so: ${BUILD_DIR}/config.h xmalloc.so: $(topdir)/ansi_stdlib.h bind.so: $(topdir)/rlshell.h histfile.so: $(topdir)/rlshell.h nls.so: $(topdir)/rlshell.h readline.so: $(topdir)/rlshell.h shell.so: $(topdir)/rlshell.h terminal.so: $(topdir)/rlshell.h histexpand.so: $(topdir)/rlshell.h colors.so: $(BUILD_DIR)/config.h $(topdir)/colors.h colors.so: $(topdir)/rlconf.h colors.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h colors.so: $(topdir)/chardefs.h $(topdir)/tilde.h $(topdir)/rlstdc.h colors.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h parse-colors.so: $(BUILD_DIR)/config.h $(topdir)/colors.h $(topdir)/parse-colors.h parse-colors.so: $(topdir)/rldefs.h $(topdir)/rlconf.h parse-colors.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h parse-colors.so: $(topdir)/chardefs.h $(topdir)/tilde.h $(topdir)/rlstdc.h bind.so: $(topdir)/rlprivate.h callback.so: $(topdir)/rlprivate.h complete.so: $(topdir)/rlprivate.h display.so: $(topdir)/rlprivate.h input.so: $(topdir)/rlprivate.h isearch.so: $(topdir)/rlprivate.h kill.so: $(topdir)/rlprivate.h macro.so: $(topdir)/rlprivate.h mbutil.so: $(topdir)/rlprivate.h misc.so: $(topdir)/rlprivate.h nls.so: $(topdir)/rlprivate.h parens.so: $(topdir)/rlprivate.h readline.so: $(topdir)/rlprivate.h rltty.so: $(topdir)/rlprivate.h search.so: $(topdir)/rlprivate.h signals.so: $(topdir)/rlprivate.h terminal.so: $(topdir)/rlprivate.h text.so: $(topdir)/rlprivate.h undo.so: $(topdir)/rlprivate.h util.so: $(topdir)/rlprivate.h vi_mode.so: $(topdir)/ colors.so: $(topdir)/rlprivate.h parse-colors.so: $(topdir)/rlprivate.h bind.so: $(topdir)/xmalloc.h callback.so: $(topdir)/xmalloc.h complete.so: $(topdir)/xmalloc.h display.so: $(topdir)/xmalloc.h funmap.so: $(topdir)/xmalloc.h histexpand.so: $(topdir)/xmalloc.h histfile.so: $(topdir)/xmalloc.h history.so: $(topdir)/xmalloc.h input.so: $(topdir)/xmalloc.h isearch.so: $(topdir)/xmalloc.h keymaps.so: $(topdir)/xmalloc.h kill.so: $(topdir)/xmalloc.h macro.so: $(topdir)/xmalloc.h mbutil.so: $(topdir)/xmalloc.h misc.so: $(topdir)/xmalloc.h readline.so: $(topdir)/xmalloc.h savestring.so: $(topdir)/xmalloc.h search.so: $(topdir)/xmalloc.h shell.so: $(topdir)/xmalloc.h terminal.so: $(topdir)/xmalloc.h text.so: $(topdir)/xmalloc.h tilde.so: $(topdir)/xmalloc.h undo.so: $(topdir)/xmalloc.h util.so: $(topdir)/xmalloc.h vi_mode.so: $(topdir)/xmalloc.h xfree.so: $(topdir)/xmalloc.h xmalloc.so: $(topdir)/xmalloc.h colors.so: $(topdir)/xmalloc.h parse-colors.so: $(topdir)/xmalloc.h complete.so: $(topdir)/rlmbutil.h display.so: $(topdir)/rlmbutil.h histexpand.so: $(topdir)/rlmbutil.h input.so: $(topdir)/rlmbutil.h isearch.so: $(topdir)/rlmbutil.h mbutil.so: $(topdir)/rlmbutil.h misc.so: $(topdir)/rlmbutil.h readline.so: $(topdir)/rlmbutil.h search.so: $(topdir)/rlmbutil.h text.so: $(topdir)/rlmbutil.h vi_mode.so: $(topdir)/rlmbutil.h colors.so: $(topdir)/rlmbutil.h parse-colors.so: $(topdir)/rlmbutil.h bind.so: $(topdir)/bind.c callback.so: $(topdir)/callback.c compat.so: $(topdir)/compat.c complete.so: $(topdir)/complete.c display.so: $(topdir)/display.c funmap.so: $(topdir)/funmap.c input.so: $(topdir)/input.c isearch.so: $(topdir)/isearch.c keymaps.so: $(topdir)/keymaps.c $(topdir)/emacs_keymap.c $(topdir)/vi_keymap.c kill.so: $(topdir)/kill.c macro.so: $(topdir)/macro.c mbutil.so: $(topdir)/mbutil.c misc.so: $(topdir)/mbutil.c nls.so: $(topdir)/nls.c parens.so: $(topdir)/parens.c readline.so: $(topdir)/readline.c rltty.so: $(topdir)/rltty.c savestring.so: $(topdir)/savestring.c search.so: $(topdir)/search.c shell.so: $(topdir)/shell.c signals.so: $(topdir)/signals.c terminal.so: $(topdir)/terminal.c text.so: $(topdir)/text.c tilde.so: $(topdir)/tilde.c undo.so: $(topdir)/undo.c util.so: $(topdir)/util.c vi_mode.so: $(topdir)/vi_mode.c xfree.so: $(topdir)/xfree.c xmalloc.so: $(topdir)/xmalloc.c histexpand.so: $(topdir)/histexpand.c histfile.so: $(topdir)/histfile.c history.so: $(topdir)/history.c histsearch.so: $(topdir)/histsearch.c bind.so: bind.c callback.so: callback.c comapt.so: compat.c complete.so: complete.c display.so: display.c funmap.so: funmap.c input.so: input.c isearch.so: isearch.c keymaps.so: keymaps.c emacs_keymap.c vi_keymap.c kill.so: kill.c macro.so: macro.c mbutil.so: mbutil.c misc.so: misc.c nls.so: nls.c parens.so: parens.c readline.so: readline.c rltty.so: rltty.c savestring.so: savestring.c search.so: search.c signals.so: signals.c shell.so: shell.c terminal.so: terminal.c text.so: text.c tilde.so: tilde.c undo.so: undo.c util.so: util.c vi_mode.so: vi_mode.c xfree.so: xfree.c xmalloc.so: xmalloc.c colors.so: colors.c parse-colors.so: parse-colors.c histexpand.so: histexpand.c histfile.so: histfile.c history.so: history.c histsearch.so: histsearch.c readline-6.3/COPYING0000644000043600000000000010451311050304560012772 0ustar chetwheel GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . readline-6.3/README0000664000043600000240000001753412120106406012632 0ustar chetstaffIntroduction ============ This is the Gnu Readline library, version 6.3. The Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands. The history facilites are also placed into a separate library, the History library, as part of the build process. The History library may be used without Readline in applications which desire its capabilities. The Readline library is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License. For more information, see the file COPYING. To build the library, try typing `./configure', then `make'. The configuration process is automated, so no further intervention should be necessary. Readline builds with `gcc' by default if it is available. If you want to use `cc' instead, type CC=cc ./configure if you are using a Bourne-style shell. If you are not, the following may work: env CC=cc ./configure Read the file INSTALL in this directory for more information about how to customize and control the build process. The file rlconf.h contains C preprocessor defines that enable and disable certain Readline features. The special make target `everything' will build the static and shared libraries (if the target platform supports them) and the examples. Examples ======== There are several example programs that use Readline features in the examples directory. The `rl' program is of particular interest. It is a command-line interface to Readline, suitable for use in shell scripts in place of `read'. Shared Libraries ================ There is skeletal support for building shared versions of the Readline and History libraries. The configure script creates a Makefile in the `shlib' subdirectory, and typing `make shared' will cause shared versions of the Readline and History libraries to be built on supported platforms. If `configure' is given the `--enable-shared' option, it will attempt to build the shared libraries by default on supported platforms. Configure calls the script support/shobj-conf to test whether or not shared library creation is supported and to generate the values of variables that are substituted into shlib/Makefile. If you try to build shared libraries on an unsupported platform, `make' will display a message asking you to update support/shobj-conf for your platform. If you need to update support/shobj-conf, you will need to create a `stanza' for your operating system and compiler. The script uses the value of host_os and ${CC} as determined by configure. For instance, FreeBSD 4.2 with any version of gcc is identified as `freebsd4.2-gcc*'. In the stanza for your operating system-compiler pair, you will need to define several variables. They are: SHOBJ_CC The C compiler used to compile source files into shareable object files. This is normally set to the value of ${CC} by configure, and should not need to be changed. SHOBJ_CFLAGS Flags to pass to the C compiler ($SHOBJ_CC) to create position-independent code. If you are using gcc, this should probably be set to `-fpic'. SHOBJ_LD The link editor to be used to create the shared library from the object files created by $SHOBJ_CC. If you are using gcc, a value of `gcc' will probably work. SHOBJ_LDFLAGS Flags to pass to SHOBJ_LD to enable shared object creation. If you are using gcc, `-shared' may be all that is necessary. These should be the flags needed for generic shared object creation. SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library creation. Many systems use the -R option to the link editor to embed a path within the library for run-time library searches. A reasonable value for such systems would be `-R$(libdir)'. SHLIB_LIBS Any additional libraries that shared libraries should be linked against when they are created. SHLIB_LIBPREF The prefix to use when generating the filename of the shared library. The default is `lib'; Cygwin uses `cyg'. SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when generating the filename of the shared library. Many systems use `so'; HP-UX uses `sl'. SHLIB_LIBVERSION The string to append to the filename to indicate the version of the shared library. It should begin with $(SHLIB_LIBSUFF), and possibly include version information that allows the run-time loader to load the version of the shared library appropriate for a particular program. Systems using shared libraries similar to SunOS 4.x use major and minor library version numbers; for those systems a value of `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate. Systems based on System V Release 4 don't use minor version numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems. Other Unix versions use different schemes. SHLIB_DLLVERSION The version number for shared libraries that determines API compatibility between readline versions and the underlying system. Used only on Cygwin. Defaults to $SHLIB_MAJOR, but can be overridden at configuration time by defining DLLVERSION in the environment. SHLIB_DOT The character used to separate the name of the shared library from the suffix and version information. The default is `.'; systems like Cygwin which don't separate version information from the library name should set this to the empty string. SHLIB_STATUS Set this to `supported' when you have defined the other necessary variables. Make uses this to determine whether or not shared library creation should be attempted. You should look at the existing stanzas in support/shobj-conf for ideas. Once you have updated support/shobj-conf, re-run configure and type `make shared'. The shared libraries will be created in the shlib subdirectory. If shared libraries are created, `make install' will install them. You may install only the shared libraries by running `make install-shared' from the top-level build directory. Running `make install' in the shlib subdirectory will also work. If you don't want to install any created shared libraries, run `make install-static'. Documentation ============= The documentation for the Readline and History libraries appears in the `doc' subdirectory. There are three texinfo files and a Unix-style manual page describing the facilities available in the Readline library. The texinfo files include both user and programmer's manuals. HTML versions of the manuals appear in the `doc' subdirectory as well. Usage ===== Our position on the use of Readline through a shared-library linking mechanism is that there is no legal difference between shared-library linking and static linking--either kind of linking combines various modules into a single larger work. The conditions for using Readline in a larger work are stated in section 3 of the GNU GPL. Reporting Bugs ============== Bug reports for Readline should be sent to: bug-readline@gnu.org When reporting a bug, please include the following information: * the version number and release status of Readline (e.g., 4.2-release) * the machine and OS that it is running on * a list of the compilation flags or the contents of `config.h', if appropriate * a description of the bug * a recipe for recreating the bug reliably * a fix for the bug if you have one! If you would like to contact the Readline maintainer directly, send mail to bash-maintainers@gnu.org. Since Readline is developed along with bash, the bug-bash@gnu.org mailing list (mirrored to the Usenet newsgroup gnu.bash.bug) often contains Readline bug reports and fixes. Chet Ramey chet.ramey@case.edu readline-6.3/MANIFEST0000664000043600000240000000536612151211600013100 0ustar chetstaff# # Master distribution manifest for the standalone readline distribution # doc d examples d examples/autoconf d examples/rlfe d support d shlib d COPYING f README f MANIFEST f INSTALL f CHANGELOG f CHANGES f NEWS f USAGE f aclocal.m4 f config.h.in f configure f configure.ac f Makefile.in f ansi_stdlib.h f chardefs.h f colors.h f history.h f histlib.h f keymaps.h f parse-colors.h f posixdir.h f posixjmp.h f posixselect.h f posixstat.h f readline.h f rlconf.h f rldefs.h f rlmbutil.h f rlprivate.h f rlshell.h f rlstdc.h f rltty.h f rltypedefs.h f rlwinsize.h f tcap.h f tilde.h f xmalloc.h f bind.c f callback.c f colors.c f compat.c f complete.c f display.c f emacs_keymap.c f funmap.c f input.c f isearch.c f keymaps.c f kill.c f macro.c f mbutil.c f misc.c f nls.c f parens.c f parse-colors.c f readline.c f rltty.c f savestring.c f search.c f shell.c f signals.c f terminal.c f text.c f tilde.c f undo.c f util.c f vi_keymap.c f vi_mode.c f xfree.c f xmalloc.c f history.c f histexpand.c f histfile.c f histsearch.c f patchlevel f shlib/Makefile.in f support/config.guess f support/config.rpath f support/config.sub f support/install.sh f support/mkdirs f support/mkdist f support/mkinstalldirs f support/shobj-conf f support/shlib-install f support/wcwidth.c f doc/Makefile.in f doc/texinfo.tex f doc/version.texi f doc/fdl.texi f doc/rlman.texi f doc/rltech.texi f doc/rluser.texi f doc/rluserman.texi f doc/history.texi f doc/hstech.texi f doc/hsuser.texi f doc/readline.3 f doc/history.3 f doc/texi2dvi f doc/texi2html f examples/Makefile.in f examples/excallback.c f examples/fileman.c f examples/manexamp.c f examples/readlinebuf.h f examples/rl-fgets.c f examples/rlcat.c f examples/rlevent.c f examples/rltest.c f examples/rl-callbacktest.c f examples/rl.c f examples/rlptytest.c f examples/rlversion.c f examples/histexamp.c f examples/hist_erasedups.c f examples/hist_purgecmd.c f examples/Inputrc f examples/autoconf/BASH_CHECK_LIB_TERMCAP f examples/autoconf/RL_LIB_READLINE_VERSION f examples/autoconf/wi_LIB_READLINE f examples/rlfe/ChangeLog f examples/rlfe/Makefile.in f examples/rlfe/README f examples/rlfe/config.h.in f examples/rlfe/configure f examples/rlfe/configure.in f examples/rlfe/extern.h f examples/rlfe/os.h f examples/rlfe/pty.c f examples/rlfe/rlfe.c f examples/rlfe/screen.h f examples/rlwrap-0.30.tar.gz f # formatted documentation, from MANIFEST.doc doc/readline.ps f doc/history.ps f doc/rluserman.ps f doc/readline.dvi f doc/history.dvi f doc/rluserman.dvi f doc/readline.info f doc/history.info f doc/rluserman.info f doc/readline.html f doc/history.html f doc/rluserman.html f doc/readline.0 f doc/history.0 f doc/readline_3.ps f doc/history_3.ps f doc/history.pdf f doc/readline.pdf f doc/rluserman.pdf f readline-6.3/INSTALL0000664000043600000240000003002012302645364013001 0ustar chetstaffBasic Installation ================== These are installation instructions for Readline-6.3. The simplest way to compile readline is: 1. `cd' to the directory containing the readline source code and type `./configure' to configure readline for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes some time. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile readline and build the static readline and history libraries. If supported, the shared readline and history libraries will be built also. See below for instructions on compiling the other parts of the distribution. Typing `make everything' will cause the static and shared libraries (if supported) and the example programs to be built. 3. Type `make install' to install the static readline and history libraries, the readline include files, the documentation, and, if supported, the shared readline and history libraries. 4. You can remove the created libraries and object files from the build directory by typing `make clean'. To also remove the files that `configure' created (so you can compile readline for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the readline developers, and should be used with care. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in the build directory, and Makefiles in the `doc', `shlib', and `examples' subdirectories. It also creates a `config.h' file containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile readline, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The readline `configure.in' requires autoconf version 2.50 or newer. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile readline for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile readline for one architecture at a time in the source code directory. After you have installed readline for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the readline libraries in `/usr/local/lib', the include files in `/usr/local/include/readline', the man pages in `/usr/local/man', and the info files in `/usr/local/info'. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH' or by supplying a value for the DESTDIR variable when running `make install'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the readline Makefiles will use PATH as the prefix for installing the libraries. Documentation and other data files will still use the regular prefix. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but need to determine by the type of host readline will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM (e.g., i386-unknown-freebsd4.2). See the file `config.sub' for the possible values of each field. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: the readline `configure' looks for a site script, but not all `configure' scripts do. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. Optional Features ================= The readline `configure' recognizes a single `--with-PACKAGE' option: `--with-curses' This tells readline that it can find the termcap library functions (tgetent, et al.) in the curses library, rather than a separate termcap library. Readline uses the termcap functions, but does not link with the termcap or curses library itself, allowing applications which link with readline the to choose an appropriate library. This option tells readline to link the example programs with the curses library rather than libtermcap. `configure' also recognizes two `--enable-FEATURE' options: `--enable-shared' Build the shared libraries by default on supported platforms. The default is `yes'. `--enable-static' Build the static libraries by default. The default is `yes'. Shared Libraries ================ There is support for building shared versions of the readline and history libraries. The configure script creates a Makefile in the `shlib' subdirectory, and typing `make shared' will cause shared versions of the readline and history libraries to be built on supported platforms. If `configure' is given the `--enable-shared' option, it will attempt to build the shared libraries by default on supported platforms. Configure calls the script support/shobj-conf to test whether or not shared library creation is supported and to generate the values of variables that are substituted into shlib/Makefile. If you try to build shared libraries on an unsupported platform, `make' will display a message asking you to update support/shobj-conf for your platform. If you need to update support/shobj-conf, you will need to create a `stanza' for your operating system and compiler. The script uses the value of host_os and ${CC} as determined by configure. For instance, FreeBSD 4.2 with any version of gcc is identified as `freebsd4.2-gcc*'. In the stanza for your operating system-compiler pair, you will need to define several variables. They are: SHOBJ_CC The C compiler used to compile source files into shareable object files. This is normally set to the value of ${CC} by configure, and should not need to be changed. SHOBJ_CFLAGS Flags to pass to the C compiler ($SHOBJ_CC) to create position-independent code. If you are using gcc, this should probably be set to `-fpic'. SHOBJ_LD The link editor to be used to create the shared library from the object files created by $SHOBJ_CC. If you are using gcc, a value of `gcc' will probably work. SHOBJ_LDFLAGS Flags to pass to SHOBJ_LD to enable shared object creation. If you are using gcc, `-shared' may be all that is necessary. These should be the flags needed for generic shared object creation. SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library creation. Many systems use the -R option to the link editor to embed a path within the library for run-time library searches. A reasonable value for such systems would be `-R$(libdir)'. SHLIB_LIBS Any additional libraries that shared libraries should be linked against when they are created. SHLIB_LIBPREF The prefix to use when generating the filename of the shared library. The default is `lib'; Cygwin uses `cyg'. SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when generating the filename of the shared library. Many systems use `so'; HP-UX uses `sl'. SHLIB_LIBVERSION The string to append to the filename to indicate the version of the shared library. It should begin with $(SHLIB_LIBSUFF), and possibly include version information that allows the run-time loader to load the version of the shared library appropriate for a particular program. Systems using shared libraries similar to SunOS 4.x use major and minor library version numbers; for those systems a value of `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate. Systems based on System V Release 4 don't use minor version numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems. Other Unix versions use different schemes. SHLIB_DLLVERSION The version number for shared libraries that determines API compatibility between readline versions and the underlying system. Used only on Cygwin. Defaults to $SHLIB_MAJOR, but can be overridden at configuration time by defining DLLVERSION in the environment. SHLIB_DOT The character used to separate the name of the shared library from the suffix and version information. The default is `.'; systems like Cygwin which don't separate version information from the library name should set this to the empty string. SHLIB_STATUS Set this to `supported' when you have defined the other necessary variables. Make uses this to determine whether or not shared library creation should be attempted. If shared libraries are not supported, this will be set to `unsupported'. You should look at the existing stanzas in support/shobj-conf for ideas. Once you have updated support/shobj-conf, re-run configure and type `make shared' or `make'. The shared libraries will be created in the shlib subdirectory. If shared libraries are created, `make install' will install them. You may install only the shared libraries by running `make install-shared' from the top-level build directory. Running `make install' in the shlib subdirectory will also work. If you don't want to install any created shared libraries, run `make install-static'. readline-6.3/CHANGELOG0000664000043600000240000007515212271542452013200 0ustar chetstaff[Readline-specific changelog. Descriptions of changes to the source are found in the bash changelog.] 6/9 --- Makefile.in - quote value of ${INSTALL_DATA} when passing it to makes in subdirectories 7/1 --- Makefile.in - don't pass INSTALL_DATA to a make in the `doc' subdirectory; let autoconf set the value itself in the Makefile - removed a stray `-' before $(RANLIB) in the `install' recipe doc/Makefile.in - add a VPATH assignment so the documentation is not remade if it's already up-to-date in the distribution configure.in - call AC_SUBST(LOCAL_LDFLAGS), since Makefile.in contains @LOCAL_LDFLAGS@ 7/9 --- config.h.in - add define lines for STRUCT_WINSIZE_IN_SYS_IOCTL and STRUCT_WINSIZE_IN_TERMIOS configure.in - call BASH_STRUCT_WINSIZE to look for the definition of `struct winsize' 7/17 ---- configure.in - call AC_MINIX config.h.in - add define line for AC_MINIX 7/18 ---- Makefile.in - add `install-shared' and `uninstall-shared' targets 8/4 --- Makefile.in - install and uninstall libhistory.a in the `install' and `uninstall' targets 9/4 --- configure.in - bumped LIBVERSION up to 2.1.1, indicating that this is patch level 1 to release 2.1 9/16 ---- Makefile.in - `make distclean' now descends into the `examples' subdir doc/Makefile.in - the `distclean' and `maintainer-clean' targets should remove Makefile examples/Makefile.in - added the various clean targets 4/2 --- configure.in - bumped LIBVERSION up to 2.2 4/18 ---- [readline-2.2 released] 4/20 ---- Makefile.in - make `libhistory.a' a dependency of `install' - fixed a typo in the recipe for `install' that copied libreadline.a to libhistory.old right after installing it 4/27 ---- doc/Makefile.in - install {readline,history}.info out of the source directory if they are not found in the current (build) directory -- only an issue if the libraries are built in a different directory than the source directory 5/1 --- support/shobj-conf - script from the bash distribution to do shared object and library configuration shlib/Makefile.in - new directory and makefile to handle building shared versions of libreadline and libhistory, controlled by support/shobj-conf 5/7 --- doc/Makefile.in - set SHELL to /bin/sh, rather than relying on make to be correct 5/14 ---- savestring.c - new file, moved from shell.c, for backwards compatibility Makefile.in, shlib/Makefile.in - make sure savestring.c is compiled and added to libreadline and libhistory [THERE ARE NO MORE #ifdef SHELL LINES IN THE C SOURCE FILES.] 5/15 ---- README - updated description of shared library creation for the new scheme [THERE ARE NO MORE #ifdef SHELL LINES IN ANY OF THE SOURCE FILES.] Makefile.in - bumped SHLIB_MAJOR up to 4 since we've augmented the library API - rlconf.h is now one of the installed headers, so applications can find out whether things like vi-mode are available in the installed libreadline 5/20 ---- configure.in - changed RL_LIBRARY_VERSION to 4.0 to match the version of the installed shared libraries 6/5 --- rlstdc.h - new file Makefile.in - rlstdc.h is now one of the installed headers 8/3 --- shlib/Makefile.in - made the suffix rule that creates xx.so from xx.c write the compiler output to `a.o', which is then mv'd to xx.so, because some compilers (Sun WSpro 4.2, for example) don't allow any suffixes other than `.o' for `cc -c' (not even `a.out') 9/15 ---- Makefile.in - AR and ARFLAGS are now substituted by configure, used in recipes that build the libraries configure.in - use AC_CHECK_PROG to check for ar - set ARFLAGS if it has not already been set in the environment 10/5 ---- Makefile.in - removed savestring.o from object file list 10/28 ----- shlib/Makefile.in - don't use a fixed filename in the .c.so suffix rule to avoid problems with parallel makes 12/21 ----- support/shlib-install - new script to install shared readline and history libraries shlib/Makefile.in - changed to call shlib-install for install and uninstall targets [readline-4.0-beta1 frozen] 12/22 ----- configure.in - call AC_SUBST for SHOBJ_XLDFLAGS and SHLIB_LIBS shlib/Makefile.in - SHOBJ_XLDFLAGS and SHLIB_LIBS are now substituted by configure - add $(SHLIB_LIBS) at end of command line that builds the shared libraries (currently needed only by AIX 4.2) 12/31 ----- MANIFEST, MANIFEST.doc - the TOC html files are no longer generated and no longer part of the distribution 2/18/1999 --------- configure.in - set MAKE_SHELL to /bin/sh and substitute into the Makefiles Makefile.in,{doc,examples,shlib}/Makefile.in - set SHELL from @MAKE_SHELL@ [readline-4.0 released] 3/11 ---- doc/Makefile.in - removed references to HTMLTOC, since separate HTML table-of-contents files are no longer created examples/Makefile.in - remove `*.exe' in clean target for MS-DOS Makefile.in - make `readline' target depend on ./libreadline.a - configure now substitutes TERMCAP_LIB into Makefile.in - use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline' - clean target now removes readline and readline.exe in case they get built configure.in - use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP 3/15 ---- support/shlib-install - Irix 5.x and Irix 6.x should install shared libraries like Solaris 2 - changes for installing on hp-ux 1[01].x 3/23 ---- configure.in - make sure that the $CC argument to shobj-conf is quoted 4/8 --- xmalloc.h, rlprivate.h, rlshell.h - new files Makefile.in,shlib/Makefile.in - add dependencies on xmalloc.h, rlshell.h - add xmalloc.h, rlprivate.h, rlshell.h to list of header files MANIFEST - add xmalloc.h, rlprivate.h, rlshell.h 4/9 --- Makefile.in,shlib/Makefile.in - add dependencies on rlprivate.h 4/13 ---- doc/Makefile.in - add variable, PSDVI, which is the desired resolution of the generated postscript files. Set to 300 because I don't have any 600-dpi printers - set LANGUAGE= before calling makeinfo, so messages are in English - add rluserman.{info,dvi,ps,html} to appropriate variables - add rules to create rluserman.{info,dvi,ps,html} - install and uninstall rluserman.info, but don't update the directory file in $(infodir) yet MANIFEST - add doc/rluserman.{texinfo,info,dvi,ps,html} 4/30 ---- configure.in - updated library version to 4.1 5/3 --- configure.in - SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are constructed from $LIBRARY_VERSION and substituted into Makefiles 5/5 --- support/shlib-install - OSF/1 installs shared libraries like Solaris Makefile.in - broke the header file install and uninstall into two new targets: install-headers and uninstall-headers - install and uninstall depend on install-headers and uninstall-headers respectively - changed install-shared and uninstall-shared targets to depend on install-headers and uninstall-headers, respectively, so users may choose to install only the shared libraries. I'm not sure about the uninstall one yet -- maybe it should check whether or not the static libraries are installed and not remove the header files if they are 9/3 --- configure.in, config.h.in - added test for memmove (for later use) - changed version to 4.1-beta1 9/13 ---- examples/rlfe.c - Per Bothner's `rlfe' readline front-end program examples/Makefile.in - added rules to build rlfe 9/21 ---- support/shlib-install - changes to handle FreeBSD-3.x elf or a.out shared libraries, which have different semantics and need different naming conventions 1/24/2000 --------- doc/Makefile.in - remove *.bt and *.bts on `make clean' 2/4 --- configure.in - changed LIBVERSION to 4.1-beta5 3/17/2000 --------- [readline-4.1 released] 3/23 ---- Makefile.in - remove the `-t' argument to ranlib in the install recipe; some ranlibs don't have it and attempt to create a file named `-t' 3/27 ---- support/shlib-install - install shared libraries unwritable by anyone on HP-UX - changed symlinks to relative pathnames on all platforms shlib/Makefile.in - added missing `includedir' assignment, substituted by configure Makefile.in - added missing @SET_MAKE@ so configure can set $MAKE appropriately configure.in - add call to AC_PROG_MAKE_SET 8/30 ---- shlib/Makefile.in - change the soname bound into the shared libraries, so it includes only the major version number. If it includes the minor version, programs depending on it must be rebuilt (which may or may not be a bad thing) 9/6 --- examples/rlfe.c - add -l option to log input and output (-a option appends to logfile) - add -n option to set readline application name - add -v, -h options for version and help information - change a few things because getopt() is now used to parse arguments 9/12 ---- support/shlib-install - fix up the libname on HPUX 11 10/18 ----- configure.in - changed library version to 4.2-alpha 10/30 ----- configure.in - add -fsigned-char to LOCAL_CFLAGS for Linux running on the IBM S/390 Makefile.in - added new file, rltypedefs.h, installed by default with `make install' 11/2 ---- compat.c - new file, with backwards-compatibility function definitions Makefile.in,shlib/Makefile.in - make sure that compat.o/compat.so are built and linked apppropriately support/shobj-conf - picked up bash version, which means that shared libs built on linux and BSD/OS 4.x will have an soname that does not include the minor version number 11/13 ----- examples/rlfe.c - rlfe can perform filename completion for relative pathnames in the inferior process's context if the OS supports /proc/PID/cwd (linux does it OK, Solaris is slightly warped, none of the BSDs have it) 11/17/2000 ---------- [readline-4.2-alpha released] 11/27 ----- Makefile.in,shlib/Makefile.in - added dependencies for rltypedefs.h shlib/Makefile.in - changed dependencies on histlib.h to $(topdir)/histlib.h 1/22 ---- configure.in - changed release version to 4.2-beta 2/2 --- examples/Makefile.in - build histexamp as part of the examples 2/5 --- doc/Makefile.in - don't remove the dvi, postscript, html, info, and text `objects' on a `make distclean', only on a `make maintainer-clean' 3/6 --- doc/history.{0,3}, doc/history_3.ps - new manual page for history library doc/Makefile.in - rules to install and uninstall history.3 in ${man3dir} - rules to build history.0 and history_3.ps 4/2 --- configure.in - changed LIBVERSION to `4.2' 4/5 --- [readline-4.2 frozen] 4/9 --- [readline-4.2 released] 5/2 --- Makefile.in,{doc,examples,shlib}/Makefile.in - added support for DESTDIR installation root prefix, to support building packages doc/Makefile.in - add an info `dir' file entry for rluserman.info on `make install' - change man1ext to `.1' and man3ext to `.3' - install man pages with a $(man3ext) extension in the target directory - add support for installing html documentation if `htmldir' has a value Makefile.in - on `make install', install from the `shlib' directory, too - on `make uninstall', uninstall in the `doc' and `shlib' subdirectories, too support/shlib-install - add `freebsdelf*', `freebsdaout*', Hurd, `sysv4*', `sysv5*', `dgux*' targets for symlink creation 5/7 --- configure.in, config.h.in - check for , define HAVE_LIMITS_H if found 5/8 --- aclocal.m4 - pick up change to BASH_CHECK_LIB_TERMCAP that adds check for libtinfo (termcap-specific portion of ncurses-5.2) 5/9 --- configure.in - call AC_C_CONST to find out whether or not the compiler supports `const' config.h.in - placeholder for `const' define, if any 5/10 ---- configure.in - fix AC_CHECK_PROG(ar, ...) test to specify right value for the case where ar is not found; should produce a better error message 5/14 ---- configure.in,config.h.in - check for vsnprintf, define HAVE_VSNPRINTF if found 5/21 ---- configure.in, config.h.in - add checks for size_t, ssize_t 5/30 ---- configure.in - update autoconf to version 2.50, use in AC_PREREQ - changed AC_INIT to new flavor - added AC_CONFIG_SRCDIR - AC_CONFIG_HEADER -> AC_CONFIG_HEADERS - call AC_C_PROTOTYPES - AC_RETSIGTYPE -> AC_TYPE_SIGNAL 8/22 ---- configure.in - updated the version number to 4.2a Makefile.in,shlib/Makefile.in - make sure tilde.o is built -DREADLINE_LIBRARY when being built as part of the standalone library, so it picks up the right include files 8/23 ---- support/shlib-install - support for Darwin/MacOS X shared library installation 9/24 ---- examples/readlinebuf.h - a new file, a C++ streambuf interface that uses readline for I/O. Donated by Dimitris Vyzovitis 10/9 ---- configure.in - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ [readline-4.2a-beta1 frozen] 10/15 ----- configure.in, config.h.in - check for , define HAVE_MEMORY_H if found - check for , define HAVE_STRINGS_H if found 10/18 ----- configure.in, config.h.in - check for isascii, define HAVE_ISASCII if found configure.in - changed the macro names from bash as appropriate: BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T 10/22 ----- configure.in - check for isxdigit with AC_CHECK_FUNCS config.h.in - new define for HAVE_ISXDIGIT 10/29 ----- configure.in, config.h.in - check for strpbrk with AC_CHECK_FUNCS, define HAVE_STRPBRK if found 11/1 ---- Makefile.in - make sure DESTDIR is passed to install and uninstall makes in subdirectories - when saving old copies of installed libraries, make sure we use DESTDIR for the old installation tree [readline-4.2a-rc1 frozen] 11/2 ---- Makefile.in, shlib/Makefile.in - don't put -I$(includedir) into CFLAGS 11/15 ----- [readline-4.2a released] 11/20 ----- examples/rlcat.c - new file examples/Makefile.in - changes for rlcat 11/28 ----- configure.in - default TERMCAP_LIB to -lcurses if $prefer_curses == yes (as when --with-curses is supplied) examples/Makefile.in - substitute @LDFLAGS@ in LDFLAGS assignment 11/29 ----- config.h.in - add necessary defines for multibyte include files and functions - add code to define HANDLE_MULTIBYTE if prerequisites are met configure.in - call BASH_CHECK_MULTIBYTE 12/14 ----- config.h.in - add #undef PROTOTYPES, filled in by AC_C_PROTOTYPES 12/17 ----- config.h.in - moved HANDLE_MULTIBYTE code to rlmbutil.h rlmbutil.h, mbutil.c - new files Makefile.in, shlib/Makefile.in - added rules for mbutil.c 12/20 ----- configure.in - added --enable-shared, --enable-static options to configure to say which libraries are built by default (both default to yes) - if SHLIB_STATUS == 'unsupported', turn off default shared library building - substitute new STATIC_TARGET, SHARED_TARGET, STATIC_INSTALL_TARGET, and SHARED_INSTALL_TARGET Makefile.in - `all' target now depends on (substituted) @STATIC_TARGET@ and @SHARED_TARGET@ - `install' target now depends on (substituted) @STATIC_INSTALL_TARGET@ and @SHARED_INSTALL_TARGET@ INSTALL, README - updated with new info about --enable-shared and --enable-static 1/10/2002 --------- configure.in - bumped the library version number to 4.3 1/24 ---- Makefile.in,shlib/Makefile.in - changes for new file, text.c, with character and text handling functions from readline.c 2/20 ---- {configure.config.h}.in - call AC_C_CHAR_UNSIGNED, define __CHAR_UNSIGNED__ if chars are unsigned by default 5/20 ---- doc/Makefile.in - new maybe-clean target that removes the generated documentation if the build directory differs from the source directory - distclean target now depends on maybe-clean 7/17 ---- [readline-4.3 released] 7/18 ---- shlib/Makefile.in - fix bad dependency: text.so: terminal.c, make it depend on text.c 8/7 --- support/shlib-install - break `linux' out into its own stanza: it seems that linux distributions are all moving to the following scheme: libreadline.so.4.3 installed version libreadline.so.4 -> libreadline.so.4.3 symlink libreadline.so -> libreadline.so.4 symlink 10/29 ----- support/shlib-install - change INSTALL_LINK[12] to use `&&' instead of `;' so it only tries the link if the cd succeeds; put ${echo} in there, too - use $LN instead of `ln -s' so it works on machines without symlinks - change special linux stanza to use cd before ln also - change to use $INSTALL_LINK1 and $INSTALL_LINK2 appropriately instead of explicit commands in various stanzas 2/1 --- config.h.in - add HAVE_MBRTOWC and HAVE_MBRLEN - add NO_MULTIBYTE_SUPPORT for new configure argument - add STDC_HEADERS configure.in - new argument --enable-multibyte (enabled by default), allows multibyte support to be turned off even on systems that support it - add check for ansi stdc headers with call to AC_HEADER_STDC 2/3 --- configure.in - add call to BASH_FUNC_CTYPE_NONASCII config.h.in - add CTYPE_NON_ASCII 2/20 ---- doc/manvers.texinfo - renamed to version.texi to match other GNU software - UPDATE-MONTH variable is now `UPDATED-MONTH' doc/{hist,rlman,rluserman}.texinfo - include version.texi doc/{rltech,rluser,hstech,hsuser}.texi - changed the suffix from `texinfo' to `texi' doc/Makefile.in - made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi doc/{rlman,rluserman}.texinfo - changed the suffix from `texinfo' to `texi' doc/hist.texinfo - renamed to history.texi to be more consistent 6/11 ---- shlib/Makefile.in - have configure substitute value of `@LDFLAGS@' into the assignment to SHLIB_XLDFLAGS 6/16 ---- configure.in - readline and history libraries are now at version 5.0 8/18 ---- support/shlib-install - support for FreeBSD-gnu (from Robert Millan) 12/4 ---- Makefile.in - add variables for localedir and the PACKAGE_* variables, auto-set by configure 12/9 ---- Makefile.in - use mkinstalldirs instead of mkdirs 4/22 ---- Makefile.in - separate doc install/uninstall out into two new targets: install-doc and uninstall-doc - make install-doc and uninstall-doc prerequisites of appropriate install and uninstall targets examples/rl-fgets.c - new example from Harold Levy that wraps fgets replacement functions that call readline in a shared library that can be interposed with LD_PRELOAD 7/27 ---- [readline-5.0 released] 11/15 ----- examples/rlfe/{ChangeLog,Makefile.in,README,config.h.in,configure,configure.in,extern.h,os.h,pty.c,rlfe.c,screen.h} - new version of rlfe, rlfe-0.4, from Per Bothner; now a standalone application 11/16 ----- shlib/Makefile.in - substitute TERMCAP_LIB in from configure configure.in - if SHLIB_LIBS doesn't include a termcap library (curses, ncurses, termcap, termlib), append the value of $TERMCAP_LIB to it 11/30 ----- configure.in - take out change from 11/16; it doesn't work for some systems (e.g., SunOS 4.x and Solaris 2.6) - add support for --enable-purify configure argument - pass TERMCAP_LIB in environment when calling shobj-conf examples/Makefile.in - add support for building examples with purify 1/23/2005 --------- configure.in - set BUILD_DIR to contain backslashes to escape any spaces in the directory name -- this is what make will accept in targets and prerequisites, so it's better than trying to use double quotes 2/25 ---- configure.in - change check for sys/ptem.h to include sys/stream.h if present, to avoid the `present but cannot be compiled' messages on Solaris and SVR4.2 (does anyone still use SVR4.2?) 5/7 --- configure.in - add cross-compiling support from the bash configure.in, which cygwin and mingw have apparently adopted - add check for pwd.h, fcntl.h - add checks for fcntl, kill system calls - add checks for getpw{ent,nam,uid} C library functions - pass a compile-time option through to Makefiles if cross-compiling config.h.in - add HAVE_PWD_H for , HAVE_FCNTL_H for - add HAVE_FCNTL, HAVE_KILL for respective system calls - add HAVE_GETPW{ENT,NAM,UID} for passwd functions Makefile.in,shlib/Makefile.in - @CROSS_COMPILE@ is substituted into DEFS (equal to -DCROSS_COMPILING if bash is being cross-compiled) 8/2 --- examples/Makefile.in - use $(READLINE_LIB) instead of -lreadline to get around MacOS X 10.4's preference for (incompatible) shared libraries over static libraries in the load path 8/11 ---- support/shobj-conf - new variable: SHLIB_LIBPREF, prefix for shared library name (defaults to `lib' - new variable: SHLIB_DLLVERSION, used on Cygwin to set the library version number - new variable: SHLIB_DOT, separator character between library name and suffix and version information (defaults to `.') - new stanza for cygwin to generate windows-compatible dll support/shlib-install - add new option `-b bindir' for systems like cygwin/windows that require it - new stanza for cygwin that installs a dll into $bindir and an implied link library into $libdir configure.in - substitute new variables from shobj-conf shlib/Makefile.in - substitute bindir, SHLIB_DOT, SHLIB_LIBPREF, SHLIB_DLLVERSION from configure - pass `-b $(bindir)' to shlib-install for install and uninstall targets - library names now use $SHLIB_LIBPREF and $SHLIB_DOT INSTALL,README - document new SHLIB_DOT, SHLIB_LIBPREF, and SHLIB_DLLVERSION variables 10/4 ---- [readline-5.1-beta1 frozen] 12/1 ---- configure.in - changed release status to `release' [readline-5.1 frozen] 12/9 ---- [readline-5.1 released] 12/14 ----- examples/rlfe/Makefile.in - add @LIBS@ to LIBS assignment to pick up extra libraries from configure 1/3/2006 -------- support/shlib-install - Install shared libraries with execute bit set on Linux 6/9 --- [readline-5.2-alpha frozen] 6/26 ---- configure.in - set CROSS_COMPILE to the empty string by default, so we don't inherit a random value from the environment 7/8 --- [readline-5.2-alpha released] [readline-5.2-beta released] 9/12 ---- config.h.in - add defines for wcscoll, iswctype, iswupper, iswlower, towupper, towlower functions - replace define for wctomb with one for wcrtomb - add defines for wchar_t, wint_t, wctype_t types 10/11 ----- [readline-5.2 released] 11/9 ---- examples/rlfe/{configure.in,Makefile.in,config.h.in,rlfe.c,pty.c} - portability fixes from Mike Frysinger 11/21 ----- Makefile.in - add `install-examples' and `uninstall-examples' targets examples/Makefile.in - add correct variables to build examples on Windows - add appropriate rules to install and uninstall example sources in $(datadir)/readline 11/27 ----- config.h.in - move #undef of HAVE_STRCOLL out of config.h.in, since autoconf tries to substitute it based on configure tests 4/27/2007 --------- examples/autoconf - new directory with example autoconf macros to detect readline and return information about the installed version 6/13 ---- support/shlib-install - changes to support AIX 5.x shared library installation 3/20/2008 --------- support/shlib-install - add support for NetBSD and Interix shared library installation 4/22 ---- support/wcwidth.c - updated implementation from 2007-05 7/18 ---- support/shlib-install - support for mingw32, contributed by Carlo Bramix 8/4 --- configure.in - changed to readline-6.0 8/18 ---- support/config.{guess,sub} - updated to newer versions from autoconf-2.62 distribution 3/5/2009 -------- support/shlib-install - take a new -V host_vendor argument - add ${host_vendor} to string tested in case statement for symlink creation section - add support for FreeBSD/gentoo, which uses Linux library naming scheme - change FreeBSD symlink rules, since FreeBSD 7+ has only ELF shared libraries. DragonflyBSD rules are the same. Fix from Timothy Redaelli shlib/Makefile.in - add definition of host_vendor, substituted by configure - add -V host_vendor argument to all invocations of shlib-install. Fix from Timothy Redaelli 3/10 ---- configure.in - add call to AC_SYS_LARGEFILE for readdir and largefile support on Linux config.h.in - add _FILE_OFFSET_BITS define 4/19 ---- Makefile.in - add targets for making and installing documentation required by GNU coding standards. Fix from Joseph Myers posixselect.h - pick up from bash. Inspired by Mike Frysinger 10/28 ----- support/shlib-install - decrease the default version of FreeBSD that installs shared libraries to 4.x. Advice from Peter Jeremy 12/18 ----- [readline-6.1-rc1 released] 12/23 ----- doc/Makefile.in - make sure $(topdir) is not ".." before removing all of the formatted documentation in `make distclean'. $(topdir) is set to `..' if readline is being built in the source directory. Fixes problem noticed by THOUMIN Damien 12/29 ----- [readline-6.1 frozen] 2/5/2010 -------- examples/Makefile.in - make sure to install example C files using $(srcdir)/$$f in case we're building outside the source directory. Bug report and fix from Peter Breitenlohner 7/25 ---- xfree.c - new file with xfree() implementation, moved from xmalloc.c 12/28 ----- {examples,shlib}/Makefile.in - Cygwin-based changes from Eric Blake 3/26/2011 --------- Makefile.in - don't ignore failures when building, installing, or cleaning in the shlib subdirectory. Sample patch from Mike Frysinger shlib/Makefile.in - split the install and uninstall targets into install-supported and install-unsupported targets that depend on the value of SHLIB_STATUS 4/2 --- {,shlib}/Makefile.in - add dependency for callback.o/callback.so on xmalloc.h. From Jan Kratochvil {,doc,examples,shlib}/Makefile.in - fix typo: htm target should be html. From Jan Kratochvil - remove `.' from VPATH. From Jan Kratochvil examples/rlfe/configure.in - quote AC_PROGRAM_SOURCE. From Jan Kratochvil 5/17 ---- config.h.in - WCWIDTH_BROKEN: new define, picked up from bash, defined on systems where wcwidth returns 1 for Unicode combining characters 11/28 ----- support/shlib-install - make sure solaris2 systems make the installed shared library executable. ldd warns about it otherwise. Bug and fix from Tim Mooney examples/hist_erasedups.c - new example program, shows how to erase duplicates from the history list examples/hist_purgecmd.c - new example program, shows how to remove all entries matching a string or pattern from the history list 1/12/2012 --------- colors.[ch],parse-colors.[ch]} - new files, part of color infrastructure support Makefile.in,shlib/Makefile.in - arrange to have colors.o and parse-colors.o added to library (static and shared versions) {configure,config.h}.in - check for stdbool.h, define HAVE_STDBOOL_H if found rldefs.h - COLOR_SUPPORT: if defined, compile in colors.c and parse-colors.c for color support 1/18 ---- {configure,config.h}.in - new check: check for AUDIT_USER_TTY defined in , define HAVE_DECL_AUDIT_USER_TTY if both are found 8/7 --- configure.in - AC_CANONICAL_BUILD: call to set the build_xxx variables - use $build_os instead of $host_os to decide when DJGPP should run `pwd.exe' to figure out the build directory. Report and fix from Yao Qi 8/29 ---- configure.ac - new name for configure.in MANIFEST,Makefile.in - configure.in -> configure.ac 1/5/2013 -------- configure.ac - move version number up to 6.3 1/31 ---- configure.ac - use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it will find $host-prefixed versions of utilities. Report and fix from Mike Frysinger 3/4 --- Makefile.in - PACKAGE_TARNAME, docdir: new variables substituted by autoconf - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary documentation files to be installed into $(docdir) - install: add new rule to install $(OTHER_DOCS) - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS) 4/29 ---- Makefile.in - installdirs: make sure to create $(DESTDIR)$(docdir). Report from 1/27/2014 --------- Makefile.in - install-examples: should not depend on `shared', since the examples themselves are not built using shared libraries. Report from support/shobj-conf - [from bash] darwin: changed the install_name embedded into the shared library to contain only the major version number, not the minor one. The idea is that the minor versions should all be API/ABI compatible, and it is better to link automatically with the latest one. Idea from Max Horn readline-6.3/CHANGES0000664000043600000240000016026512274455740012767 0ustar chetstaffThis document details the changes between this version, readline-6.3, and the previous version, readline-6.2. 1. Changes to Readline a. Fixed a bug that did not allow the `dd', `cc', or `yy' vi editing mode commands to work on the entire line. b. Fixed a bug that caused redisplay problems with prompts longer than 128 characters and history searches. c. Fixed a bug that caused readline to try and run code to modify its idea of the screen size in a signal handler context upon receiving a SIGWINCH. d. Fixed a bug that caused the `meta' key to be enabled beyond the duration of an individual call top readline(). e. Added a workaround for a wcwidth bug in Mac OS X that caused readline's redisplay to mishandle zero-width combining characters. f. Fixed a bug that caused readline to `forget' part of a key sequence when a multiple-key sequence caused it to break out of an incremental search. g. Fixed bugs that caused readline to execute code in a signal handler context if interrupted while reading from the file system during completion. h. Fixed a bug that caused readline to `forget' part of a key sequence when reading an unbound multi-character key sequence. i. Fixed a bug that caused Readline's signal handlers to be installed beyond the bounds of a single call to readline(). j. Fixed a bug that caused the `.' command to not redo the most recent `R' command in vi mode. k. Fixed a bug that caused ignoring case in completion matches to result in readline using the wrong match. l. Paren matching now works in vi insert mode. m. Fix menu-completion to make show-all-if-ambiguous and menu-complete-display-prefix work together. n. Fixed a bug that didn't allow the `cc', `dd', or `yy' commands to be redone in vi editing mode. o. Fixed a bug that caused the filename comparison code to not compare multibyte characters correctly when using case-sensitive or case-mapping comparisons. p. Fixed the input reading loop to call the input hook function only when there is no terminal input available. q. Fixed a bug that caused binding a macro to a multi-character key sequence where the sequence and macro value share a common prefix to not perform the macro replacement. r. Fixed several redisplay errors with multibyte characters and prompts containing invisible characters when using horizontal scrolling. s. Fixed a bug that caused redisplay errors when trying to overwrite existing characters using multibyte characters. t. Fixed a bug in vi mode that caused the arrow keys to set the saved last vi-mode command to the wrong value. u. Fixed a bug that caused double-quoted strings to be scanned incorrectly when being used as the value of a readline variable assignment. v. Fixed a bug with vi mode that prevented `.' from repeating a command entered on a previous line (command). w. Fixed a bug that could cause completion to core dump if it was interrupted by a signal. x. Fixed a bug that could cause readline to crash and seg fault attempting to expand an empty history entry. y. Fixed a bug that caused display problems with multi-line prompts containing invisible characters on multiple lines. z. Fixed a bug that caused effects made by undoing changes to a history line to be discarded. 2. New Features in Readline a. Readline is now more responsive to SIGHUP and other fatal signals when reading input from the terminal or performing word completion but no longer attempts to run any not-allowable functions from a signal handler context. b. There are new bindable commands to search the history for the string of characters between the beginning of the line and the point (history-substring-search-forward, history-substring-search-backward) c. Readline allows quoted strings as the values of variables when setting them with `set'. As a side effect, trailing spaces and tabs are ignored when setting a string variable's value. d. The history library creates a backup of the history file when writing it and restores the backup on a write error. e. New application-settable variable: rl_filename_stat_hook: a function called with a filename before using it in a call to stat(2). Bash uses it to expand shell variables so things like $HOME/Downloads have a slash appended. f. New bindable function `print-last-kbd-macro', prints the most-recently- defined keyboard macro in a reusable format. g. New user-settable variable `colored-stats', enables use of colored text to denote file types when displaying possible completions (colored analog of visible-stats). h. New user-settable variable `keyseq-timout', acts as an inter-character timeout when reading input or incremental search strings. i. New application-callable function: rl_clear_history. Clears the history list and frees all readline-associated private data. j. New user-settable variable, show-mode-in-prompt, adds a characters to the beginning of the prompt indicating the current editing mode. k. New application-settable variable: rl_input_available_hook; function to be called when readline needs to check whether there is data available on its input source. The default hook checks rl_instream. l. Readline calls an application-set event hook (rl_signal_event_hook) after it gets a signal while reading input (read returns -1/EINTR but readline does not handle the signal immediately) to allow the application to handle or otherwise note it. Not currently called for SIGHUP or SIGTERM. m. If the user-settable variable `history-size' is set to a value less than 0, the history list size is unlimited. n. When creating shared libraries on Mac OS X, the pathname written into the library (install_name) no longer includes the minor version number. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.2, and the previous version, readline-6.1. 1. Changes to Readline a. Fixed a bug that caused the unconverted filename to be added to the list of completions when the application specified filename conversion functions. b. Fixed a bug that caused the wrong filename to be passed to opendir when the application has specified a filename dequoting function. c. Fixed a bug when repeating a character search in vi mode in the case where there was no search to repeat. d. When show-all-if-ambiguous is set, the completion routines no longer insert a common match prefix that is shorter than the text being completed. e. The full set of vi editing commands may now be used in callback mode. f. Fixed a bug that caused readline to not update its idea of the terminal dimensions while running in `no-echo' mode. h. Fixed a bug that caused readline to dump core if an application called rl_prep_terminal without setting rl_instream. i. Fixed a bug that caused meta-prefixed characters bound to incremental search forward or backward to not be recognized if they were typed subsequently. j. The incremental search code treats key sequences that map to the same functions as (default) ^G, ^W, and ^Y as equivalent to those characters. k. Fixed a bug in menu-complete that caused it to misbehave with large negative argument. l. Fixed a bug that caused vi-mode yank-last-arg to ring the bell when invoked at the end of the line. m. Fixed a bug that made an explicit argument of 0 to yank-last-arg behave as if it were a negative argument. n. Fixed a bug that caused directory names in words to be completed to not be dequoted correctly. 2. New Features in Readline a. The history library does not try to write the history filename in the current directory if $HOME is unset. This closes a potential security problem if the application does not specify a history filename. b. New bindable variable `completion-display-width' to set the number of columns used when displaying completions. c. New bindable variable `completion-case-map' to cause case-insensitive completion to treat `-' and `_' as identical. d. There are new bindable vi-mode command names to avoid readline's case- insensitive matching not allowing them to be bound separately. e. New bindable variable `menu-complete-display-prefix' causes the menu completion code to display the common prefix of the possible completions before cycling through the list, instead of after. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.1, and the previous version, readline-6.0. 1. Changes to Readline a. The SIGWINCH signal handler now avoids calling the redisplay code if one arrives while in the middle of redisplay. b. Changes to the timeout code to make sure that timeout values greater than one second are handled better. c. Fixed a bug in the redisplay code that was triggered by a prompt containing invisible characters exactly the width of the screen. d. Fixed a bug in the redisplay code encountered when running in horizontal scroll mode. e. Fixed a bug that prevented menu completion from properly completing filenames. f. Fixed a redisplay bug caused by a multibyte character causing a line to wrap. g. Fixed a bug that caused key sequences of two characters to not be recognized when a longer sequence identical in the first two characters was bound. h. Fixed a bug that caused history expansion to be attempted on $'...' single-quoted strings. i. Fixed a bug that caused incorrect redisplay when the prompt contained multibyte characters in an `invisible' sequence bracketed by \[ and \]. j. Fixed a bug that caused history expansion to short-circuit after encountering a multibyte character. k. Fixed a bug that caused applications using the callback interface to not react to SIGINT (or other signals) until another character arrived. 2. New Features in Readline a. New bindable function: menu-complete-backward. b. In the vi insertion keymap, C-n is now bound to menu-complete by default, and C-p to menu-complete-backward. c. When in vi command mode, repeatedly hitting ESC now does nothing, even when ESC introduces a bound key sequence. This is closer to how historical vi behaves. d. New bindable function: skip-csi-sequence. Can be used as a default to consume key sequences generated by keys like Home and End without having to bind all keys. e. New application-settable function: rl_filename_rewrite_hook. Can be used to rewite or modify filenames read from the file system before they are compared to the word to be completed. f. New bindable variable: skip-completed-text, active when completing in the middle of a word. If enabled, it means that characters in the completion that match characters in the remainder of the word are "skipped" rather than inserted into the line. g. The pre-readline-6.0 version of menu completion is available as "old-menu-complete" for users who do not like the readline-6.0 version. h. New bindable variable: echo-control-characters. If enabled, and the tty ECHOCTL bit is set, controls the echoing of characters corresponding to keyboard-generated signals. i. New bindable variable: enable-meta-key. Controls whether or not readline sends the smm/rmm sequences if the terminal indicates it has a meta key that enables eight-bit characters. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.0, and the previous version, readline-5.2. 1. Changes to Readline a. Fixed a number of redisplay errors in environments supporting multibyte characters. b. Fixed bugs in vi command mode that caused motion commands to inappropriately set the mark. c. When using the arrow keys in vi insertion mode, readline allows movement beyond the current end of the line (unlike command mode). d. Fixed bugs that caused readline to loop when the terminal has been taken away and reads return -1/EIO. e. Fixed bugs in redisplay occurring when displaying prompts containing invisible characters. f. Fixed a bug that caused the completion append character to not be reset to the default after an application-specified completion function changed it. g. Fixed a problem that caused incorrect positioning of the cursor while in emacs editing mode when moving forward at the end of a line while using a locale supporting multibyte characters. h. Fixed an off-by-one error that caused readline to drop every 511th character of buffered input. i. Fixed a bug that resulted in SIGTERM not being caught or cleaned up. j. Fixed redisplay bugs caused by multiline prompts with invisible characters or no characters following the final newline. k. Fixed redisplay bug caused by prompts consisting solely of invisible characters. l. Fixed a bug in the code that buffers characters received very quickly in succession which caused characters to be dropped. m. Fixed a bug that caused readline to reference uninitialized data structures if it received a SIGWINCH before completing initialzation. n. Fixed a bug that caused the vi-mode `last command' to be set incorrectly and therefore unrepeatable. o. Fixed a bug that caused readline to disable echoing when it was being used with an output file descriptor that was not a terminal. p. Readline now blocks SIGINT while manipulating internal data structures during redisplay. q. Fixed a bug in redisplay that caused readline to segfault when pasting a very long line (over 130,000 characters). r. Fixed bugs in redisplay when using prompts with no visible printing characters. s. Fixed a bug that caused redisplay errors when using prompts with invisible characters and numeric arguments to a command in a multibyte locale. t. Fixed a bug that caused redisplay errors when using prompts with invisible characters spanning more than two physical screen lines. 2. New Features in Readline a. A new variable, rl_sort_completion_matches; allows applications to inhibit match list sorting (but beware: some things don't work right if applications do this). b. A new variable, rl_completion_invoking_key; allows applications to discover the key that invoked rl_complete or rl_menu_complete. c. The functions rl_block_sigint and rl_release_sigint are now public and available to calling applications who want to protect critical sections (like redisplay). d. The functions rl_save_state and rl_restore_state are now public and available to calling applications; documented rest of readline's state flag values. e. A new user-settable variable, `history-size', allows setting the maximum number of entries in the history list. f. There is a new implementation of menu completion, with several improvements over the old; the most notable improvement is a better `completions browsing' mode. g. The menu completion code now uses the rl_menu_completion_entry_function variable, allowing applications to provide their own menu completion generators. h. There is support for replacing a prefix of a pathname with a `...' when displaying possible completions. This is controllable by setting the `completion-prefix-display-length' variable. Matches with a common prefix longer than this value have the common prefix replaced with `...'. i. There is a new `revert-all-at-newline' variable. If enabled, readline will undo all outstanding changes to all history lines when `accept-line' is executed. ------------------------------------------------------------------------------- This document details the changes between this version, readline-5.2, and the previous version, readline-5.1. 1. Changes to Readline a. Fixed a problem that caused segmentation faults when using readline in callback mode and typing consecutive DEL characters on an empty line. b. Fixed several redisplay problems with multibyte characters, all having to do with the different code paths and variable meanings between single-byte and multibyte character redisplay. c. Fixed a problem with key sequence translation when presented with the sequence \M-\C-x. d. Fixed a problem that prevented the `a' command in vi mode from being undone and redone properly. e. Fixed a problem that prevented empty inserts in vi mode from being undone properly. f. Fixed a problem that caused readline to initialize with an incorrect idea of whether or not the terminal can autowrap. g. Fixed output of key bindings (like bash `bind -p') to honor the setting of convert-meta and use \e where appropriate. h. Changed the default filename completion function to call the filename dequoting function if the directory completion hook isn't set. This means that any directory completion hooks need to dequote the directory name, since application-specific hooks need to know how the word was quoted, even if no other changes are made. i. Fixed a bug with creating the prompt for a non-interactive search string when there are non-printing characters in the primary prompt. j. Fixed a bug that caused prompts with invisible characters to be redrawn multiple times in a multibyte locale. k. Fixed a bug that could cause the key sequence scanning code to return the wrong function. l. Fixed a problem with the callback interface that caused it to fail when using multi-character keyboard macros. m. Fixed a bug that could cause a core dump when an edited history entry was re-executed under certain conditions. n. Fixed a bug that caused readline to reference freed memory when attmpting to display a portion of the prompt. o. Fixed a bug with prompt redisplay in a multi-byte locale to avoid redrawing the prompt and input line multiple times. p. Fixed history expansion to not be confused by here-string redirection. q. Readline no longer treats read errors by converting them to newlines, as it does with EOF. This caused partial lines to be returned from readline(). r. Fixed a redisplay bug that occurred in multibyte-capable locales when the prompt was one character longer than the screen width. 2. New Features in Readline a. Calling applications can now set the keyboard timeout to 0, allowing poll-like behavior. b. The value of SYS_INPUTRC (configurable at compilation time) is now used as the default last-ditch startup file. c. The history file reading functions now allow windows-like \r\n line terminators. ------------------------------------------------------------------------------- This document details the changes between this version, readline-5.1, and the previous version, readline-5.0. 1. Changes to Readline a. Fixed a bug that caused multiliine prompts to be wrapped and displayed incorrectly. b. Fixed a bug that caused ^P/^N in emacs mode to fail to display the current line correctly. c. Fixed a problem in computing the number of invisible characters on the first line of a prompt whose length exceeds the screen width. d. Fixed vi-mode searching so that failure preserves the current line rather than the last line in the history list. e. Fixed the vi-mode `~' command (change-case) to have the correct behavior at end-of-line when manipulating multibyte characters. f. Fixed the vi-mode `r' command (change-char) to have the correct behavior at end-of-line when manipulating multibyte characters. g. Fixed multiple bugs in the redisplay of multibyte characters: displaying prompts longer than the screen width containing multibyte characters, h. Fix the calculation of the number of physical characters in the prompt string when it contains multibyte characters. i. A non-zero value for the `rl_complete_suppress_append' variable now causes no `/' to be appended to a directory name. j. Fixed forward-word and backward-word to work when words contained multibyte characters. k. Fixed a bug in finding the delimiter of a `?' substring when performing history expansion in a locale that supports multibyte characters. l. Fixed a memory leak caused by not freeing the timestamp in a history entry. m. Fixed a bug that caused "\M-x" style key bindings to not obey the setting of the `convert-meta' variable. n. Fixed saving and restoring primary prompt when prompting for incremental and non-incremental searches; search prompts now display multibyte characters correctly. o. Fixed a bug that caused keys originally bound to self-insert but shadowed by a multi-character key sequence to not be inserted. p. Fixed code so rl_prep_term_function and rl_deprep_term_function aren't dereferenced if NULL (matching the documentation). q. Extensive changes to readline to add enough state so that commands requiring additional characters (searches, multi-key sequences, numeric arguments, commands requiring an additional specifier character like vi-mode change-char, etc.) work without synchronously waiting for additional input. r. Lots of changes so readline builds and runs on MinGW. s. Readline no longer tries to modify the terminal settings when running in callback mode. t. The Readline display code no longer sets the location of the last invisible character in the prompt if the \[\] sequence is empty. u. The `change-case' command now correctly changes the case of multibyte characters. v. Changes to the shared library construction scripts to deal with Windows DLL naming conventions for Cygwin. w. Fixed the redisplay code to avoid core dumps resulting from a poorly-timed SIGWINCH. x. Fixed the non-incremental search code in vi mode to dispose of any current undo list when copying a line from the history into the current editing buffer. y. Fixed a bug that caused reversing the incremental search direction to not work correctly. z. Fixed the vi-mode `U' command to only undo up to the first time insert mode was entered, as Posix specifies. aa. Fixed a bug in the vi-mode `r' command that left the cursor in the wrong place. bb. Fixed a redisplay bug caused by moving the cursor vertically to a line with invisible characters in the prompt in a multibyte locale. cc. Fixed a bug that could cause the terminal special chars to be bound in the wrong keymap in vi mode. 2. New Features in Readline a. The key sequence sent by the keypad `delete' key is now automatically bound to delete-char. b. A negative argument to menu-complete now cycles backward through the completion list. c. A new bindable readline variable: bind-tty-special-chars. If non-zero, readline will bind the terminal special characters to their readline equivalents when it's called (on by default). d. New bindable command: vi-rubout. Saves deleted text for possible reinsertion, as with any vi-mode `text modification' command; `X' is bound to this in vi command mode. e. If the rl_completion_query_items is set to a value < 0, readline never asks the user whether or not to view the possible completions. f. The `C-w' binding in incremental search now understands multibyte characters. g. New application-callable auxiliary function, rl_variable_value, returns a string corresponding to a readline variable's value. h. When parsing inputrc files and variable binding commands, the parser strips trailing whitespace from values assigned to boolean variables before checking them. i. A new external application-controllable variable that allows the LINES and COLUMNS environment variables to set the window size regardless of what the kernel returns. ------------------------------------------------------------------------------- This document details the changes between this version, readline-5.0, and the previous version, readline-4.3. 1. Changes to Readline a. Fixes to avoid core dumps because of null pointer references in the multibyte character code. b. Fix to avoid infinite recursion caused by certain key combinations. c. Fixed a bug that caused the vi-mode `last command' to be set incorrectly. d. Readline no longer tries to read ahead more than one line of input, even when more is available. e. Fixed the code that adjusts the point to not mishandle null wide characters. f. Fixed a bug in the history expansion `g' modifier that caused it to skip every other match. g. Fixed a bug that caused the prompt to overwrite previous output when the output doesn't contain a newline and the locale supports multibyte characters. This same change fixes the problem of readline redisplay slowing down dramatically as the line gets longer in multibyte locales. h. History traversal with arrow keys in vi insertion mode causes the cursor to be placed at the end of the new line, like in emacs mode. i. The locale initialization code does a better job of using the right precedence and defaulting when checking the appropriate environment variables. j. Fixed the history word tokenizer to handle <( and >( better when used as part of bash. k. The overwrite mode code received several bug fixes to improve undo. l. Many speedups to the multibyte character redisplay code. m. The callback character reading interface should not hang waiting to read keyboard input. n. Fixed a bug with redoing vi-mode `s' command. o. The code that initializes the terminal tracks changes made to the terminal special characters with stty(1) (or equivalent), so that these changes are reflected in the readline bindings. New application-callable function to make it work: rl_tty_unset_default_bindings(). p. Fixed a bug that could cause garbage to be inserted in the buffer when changing character case in vi mode when using a multibyte locale. q. Fixed a bug in the redisplay code that caused problems on systems supporting multibyte characters when moving between history lines when the new line has more glyphs but fewer bytes. r. Undo and redo now work better after exiting vi insertion mode. s. Make sure system calls are restarted after a SIGWINCH is received using SA_RESTART. t. Improvements to the code that displays possible completions when using multibyte characters. u. Fixed a problem when parsing nested if statements in inputrc files. v. The completer now takes multibyte characters into account when looking for quoted substrings on which to perform completion. w. The history search functions now perform better bounds checking on the history list. x. Change to history expansion functions to treat `^' as equivalent to word one, as the documention states. y. Some changes to the display code to improve display and redisplay of multibyte characters. z. Changes to speed up the multibyte character redisplay code. aa. Fixed a bug in the vi-mode `E' command that caused it to skip over the last character of a word if invoked while point was on the word's next-to-last character. bb. Fixed a bug that could cause incorrect filename quoting when case-insensitive completion was enabled and the word being completed contained backslashes quoting word break characters. cc. Fixed a bug in redisplay triggered when the prompt string contains invisible characters. dd. Fixed some display (and other) bugs encountered in multibyte locales when a non-ascii character was the last character on a line. ee. Fixed some display bugs caused by multibyte characters in prompt strings. ff. Fixed a problem with history expansion caused by non-whitespace characters used as history word delimiters. gg. Fixed a problem that could cause readline to refer to freed memory when moving between history lines while doing searches. hh. Improvements to the code that expands and displays prompt strings containing multibyte characters. ii. Fixed a problem with vi-mode not correctly remembering the numeric argument to the last `c'hange command for later use with `.'. jj. Fixed a bug in vi-mode that caused multi-digit count arguments to work incorrectly. kk. Fixed a problem in vi-mode that caused the last text modification command to not be remembered across different command lines. ll. Fixed problems with changing characters and changing case at the end of the line. mm. Fixed a problem with readline saving the contents of the current line before beginning a non-interactive search. nn. Fixed a problem with EOF detection when using rl_event_hook. oo. Fixed a problem with the vi mode `p' and `P' commands ignoring numeric arguments. 2. New Features in Readline a. History expansion has a new `a' modifier equivalent to the `g' modifier for compatibility with the BSD csh. b. History expansion has a new `G' modifier equivalent to the BSD csh `g' modifier, which performs a substitution once per word. c. All non-incremental search operations may now undo the operation of replacing the current line with the history line. d. The text inserted by an `a' command in vi mode can be reinserted with `.'. e. New bindable variable, `show-all-if-unmodified'. If set, the readline completer will list possible completions immediately if there is more than one completion and partial completion cannot be performed. f. There is a new application-callable `free_history_entry()' function. g. History list entries now contain timestamp information; the history file functions know how to read and write timestamp information associated with each entry. h. Four new key binding functions have been added: rl_bind_key_if_unbound() rl_bind_key_if_unbound_in_map() rl_bind_keyseq_if_unbound() rl_bind_keyseq_if_unbound_in_map() i. New application variable, rl_completion_quote_character, set to any quote character readline finds before it calls the application completion function. j. New application variable, rl_completion_suppress_quote, settable by an application completion function. If set to non-zero, readline does not attempt to append a closing quote to a completed word. k. New application variable, rl_completion_found_quote, set to a non-zero value if readline determines that the word to be completed is quoted. Set before readline calls any application completion function. l. New function hook, rl_completion_word_break_hook, called when readline needs to break a line into words when completion is attempted. Allows the word break characters to vary based on position in the line. m. New bindable command: unix-filename-rubout. Does the same thing as unix-word-rubout, but adds `/' to the set of word delimiters. n. When listing completions, directories have a `/' appended if the `mark-directories' option has been enabled. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.3, and the previous version, readline-4.2a. 1. Changes to Readline a. Fixed output of comment-begin character when listing variable values. b. Added some default key bindings for common escape sequences produced by HOME and END keys. c. Fixed the mark handling code to be more emacs-compatible. d. A bug was fixed in the code that prints possible completions to keep it from printing empty strings in certain circumstances. e. Change the key sequence printing code to print ESC as M\- if ESC is a meta-prefix character -- it's easier for users to understand than \e. f. Fixed unstifle_history() to return values that match the documentation. g. Fixed the event loop (rl_event_hook) to handle the case where the input file descriptor is invalidated. h. Fixed the prompt display code to work better when the application has a custom redisplay function. i. Changes to make reading and writing the history file a little faster, and to cope with huge history files without calling abort(3) from xmalloc. j. The vi-mode `S' and `s' commands are now undone correctly. k. Fixed a problem which caused the display to be messed up when the last line of a multi-line prompt (possibly containing invisible characters) was longer than the screen width. 2. New Features in Readline a. Support for key `subsequences': allows, e.g., ESC and ESC-a to both be bound to readline functions. Now the arrow keys may be used in vi insert mode. b. When listing completions, and the number of lines displayed is more than the screen length, readline uses an internal pager to display the results. This is controlled by the `page-completions' variable (default on). c. New code to handle editing and displaying multibyte characters. d. The behavior introduced in bash-2.05a of deciding whether or not to append a slash to a completed name that is a symlink to a directory has been made optional, controlled by the `mark-symlinked-directories' variable (default is the 2.05a behavior). e. The `insert-comment' command now acts as a toggle if given a numeric argument: if the first characters on the line don't specify a comment, insert one; if they do, delete the comment text f. New application-settable completion variable: rl_completion_mark_symlink_dirs, allows an application's completion function to temporarily override the user's preference for appending slashes to names which are symlinks to directories. g. New function available to application completion functions: rl_completion_mode, to tell how the completion function was invoked and decide which argument to supply to rl_complete_internal (to list completions, etc.). h. Readline now has an overwrite mode, toggled by the `overwrite-mode' bindable command, which could be bound to `Insert'. i. New application-settable completion variable: rl_completion_suppress_append, inhibits appending of rl_completion_append_character to completed words. j. New key bindings when reading an incremental search string: ^W yanks the currently-matched word out of the current line into the search string; ^Y yanks the rest of the current line into the search string, DEL or ^H deletes characters from the search string. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.2a, and the previous version, readline-4.2. 1. Changes to Readline a. More `const' and type casting fixes. b. Changed rl_message() to use vsnprintf(3) (if available) to fix buffer overflow problems. c. The completion code no longer appends a `/' or ` ' to a match when completing a symbolic link that resolves to a directory name, unless the match does not add anything to the word being completed. This means that a tab will complete the word up to the full name, but not add anything, and a subsequent tab will add a slash. d. Fixed a trivial typo that made the vi-mode `dT' command not work. e. Fixed the tty code so that ^S and ^Q can be inserted with rl_quoted_insert. f. Fixed the tty code so that ^V works more than once. g. Changed the use of __P((...)) for function prototypes to PARAMS((...)) because the use of __P in typedefs conflicted g++ and glibc. h. The completion code now attempts to do a better job of preserving the case of the word the user typed if ignoring case in completions. i. Readline defaults to not echoing the input and lets the terminal initialization code enable echoing if there is a controlling terminal. j. The key binding code now processes only two hex digits after a `\x' escape sequence, and the documentation was changed to note that the octal and hex escape sequences result in an eight-bit value rather than strict ASCII. k. Fixed a few places where negative array subscripts could have occurred. l. Fixed the vi-mode code to use a better method to determine the bounds of the array used to hold the marks, and to avoid out-of-bounds references. m. Fixed the defines in chardefs.h to work better when chars are signed. n. Fixed configure.in to use the new names for bash autoconf macros. o. Readline no longer attempts to define its own versions of some ctype macros if they are implemented as functions in libc but not as macros in . p. Fixed a problem where rl_backward could possibly set point to before the beginning of the line. q. Fixed Makefile to not put -I/usr/include into CFLAGS, since it can cause include file problems. 2. New Features in Readline a. Added extern declaration for rl_get_termcap to readline.h, making it a public function (it was always there, just not in readline.h). b. New #defines in readline.h: RL_READLINE_VERSION, currently 0x0402, RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2. c. New readline variable: rl_readline_version, mirrors RL_READLINE_VERSION. d. New bindable boolean readline variable: match-hidden-files. Controls completion of files beginning with a `.' (on Unix). Enabled by default. e. The history expansion code now allows any character to terminate a `:first-' modifier, like csh. f. The incremental search code remembers the last search string and uses it if ^R^R is typed without a search string. h. New bindable variable `history-preserve-point'. If set, the history code attempts to place the user at the same location on each history line retrived with previous-history or next-history. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.2, and the previous version, readline-4.1. 1. Changes to Readline a. When setting the terminal attributes on systems using `struct termio', readline waits for output to drain before changing the attributes. b. A fix was made to the history word tokenization code to avoid attempts to dereference a null pointer. c. Readline now defaults rl_terminal_name to $TERM if the calling application has left it unset, and tries to initialize with the resultant value. d. Instead of calling (*rl_getc_function)() directly to get input in certain places, readline now calls rl_read_key() consistently. e. Fixed a bug in the completion code that allowed a backslash to quote a single quote inside a single-quoted string. f. rl_prompt is no longer assigned directly from the argument to readline(), but uses memory allocated by readline. This allows constant strings to be passed to readline without problems arising when the prompt processing code wants to modify the string. g. Fixed a bug that caused non-interactive history searches to return the wrong line when performing multiple searches backward for the same string. h. Many variables, function arguments, and function return values are now declared `const' where appropriate, to improve behavior when linking with C++ code. i. The control character detection code now works better on systems where `char' is unsigned by default. j. The vi-mode numeric argument is now capped at 999999, just like emacs mode. k. The Function, CPFunction, CPPFunction, and VFunction typedefs have been replaced with a set of specific prototyped typedefs, though they are still in the readline header files for backwards compatibility. m. Nearly all of the (undocumented) internal global variables in the library now have an _rl_ prefix -- there were a number that did not, like screenheight, screenwidth, alphabetic, etc. n. The ding() convenience function has been renamed to rl_ding(), though the old function is still defined for backwards compatibility. o. The completion convenience functions filename_completion_function, username_completion_function, and completion_matches now have an rl_ prefix, though the old names are still defined for backwards compatibility. p. The functions shared by readline and bash (linkage is satisfied from bash when compiling with bash, and internally otherwise) now have an sh_ prefix. q. Changed the shared library creation procedure on Linux and BSD/OS 4.x so that the `soname' contains only the major version number rather than the major and minor numbers. r. Fixed a redisplay bug that occurred when the prompt spanned more than one physical line and contained invisible characters. s. Added a missing `includedir' variable to the Makefile. t. When installing the shared libraries, make sure symbolic links are relative. u. Added configure test so that it can set `${MAKE}' appropriately. v. Fixed a bug in rl_forward that could cause the point to be set to before the beginning of the line in vi mode. w. Fixed a bug in the callback read-char interface to make it work when a readline function pushes some input onto the input stream with rl_execute_next (like the incremental search functions). x. Fixed a file descriptor leak in the history file manipulation code that was tripped when attempting to truncate a non-regular file (like /dev/null). y. Changes to make all of the exported readline functions declared in readline.h have an rl_ prefix (rltty_set_default_bindings is now rl_tty_set_default_bindings, crlf is now rl_crlf, etc.) z. The formatted documentation included in the base readline distribution is no longer removed on a `make distclean'. aa. Some changes were made to avoid gcc warnings with -Wall. bb. rl_get_keymap_by_name now finds keymaps case-insensitively, so `set keymap EMACS' works. cc. The history file writing and truncation functions now return a useful status on error. dd. Fixed a bug that could cause applications to dereference a NULL pointer if a NULL second argument was passed to history_expand(). ee. If a hook function assigned to rl_event_hook sets rl_done to a non-zero value, rl_read_key() now immediately returns '\n' (which is assumed to be bound to accept-line). 2. New Features in Readline a. The blink timeout for paren matching is now settable by applications, via the rl_set_paren_blink_timeout() function. b. _rl_executing_macro has been renamed to rl_executing_macro, which means it's now part of the public interface. c. Readline has a new variable, rl_readline_state, which is a bitmap that encapsulates the current state of the library; intended for use by callbacks and hook functions. d. rlfe has a new -l option to log input and output (-a appends to logfile), a new -n option to set the readline application name, and -v and -h options for version and help information. e. rlfe can now perform filename completion for the inferior process if the OS has a /proc//cwd that can be read with readlink(2) to get the inferior's current working directory. f. A new file, rltypedefs.h, contains the new typedefs for function pointers and is installed by `make install'. g. New application-callable function rl_set_prompt(const char *prompt): expands its prompt string argument and sets rl_prompt to the result. h. New application-callable function rl_set_screen_size(int rows, int cols): public method for applications to set readline's idea of the screen dimensions. i. The history example program (examples/histexamp.c) is now built as one of the examples. j. The documentation has been updated to cover nearly all of the public functions and variables declared in readline.h. k. New function, rl_get_screen_size (int *rows, int *columns), returns readline's idea of the screen dimensions. l. The timeout in rl_gather_tyi (readline keyboard input polling function) is now settable via a function (rl_set_keyboard_input_timeout()). m. Renamed the max_input_history variable to history_max_entries; the old variable is maintained for backwards compatibility. n. The list of characters that separate words for the history tokenizer is now settable with a variable: history_word_delimiters. The default value is as before. o. There is a new history.3 manual page documenting the history library. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.1, and the previous version, readline-4.0. 1. Changes to Readline a. Changed the HTML documents so that the table-of-contents is no longer a separate file. b. Changes to the shared object configuration for: Irix 5.x, Irix 6.x, OSF/1. c. The shared library major and minor versions are now constructed automatically by configure and substituted into the makefiles. d. It's now possible to install the shared libraries separately from the static libraries. e. The history library tries to truncate the history file only if it is a regular file. f. A bug that caused _rl_dispatch to address negative array indices on systems with signed chars was fixed. g. rl-yank-nth-arg now leaves the history position the same as when it was called. h. Changes to the completion code to handle MS-DOS drive-letter:pathname filenames. i. Completion is now case-insensitive by default on MS-DOS. j. Fixes to the history file manipulation code for MS-DOS. k. Readline attempts to bind the arrow keys to appropriate defaults on MS-DOS. l. Some fixes were made to the redisplay code for better operation on MS-DOS. m. The quoted-insert code will now insert tty special chars like ^C. n. A bug was fixed that caused the display code to reference memory before the start of the prompt string. o. More support for __EMX__ (OS/2). p. A bug was fixed in readline's signal handling that could cause infinite recursion in signal handlers. q. A bug was fixed that caused the point to be less than zero when rl_forward was given a very large numeric argument. r. The vi-mode code now gets characters via the application-settable value of rl_getc_function rather than calling rl_getc directly. s. The history file code now uses O_BINARY mode when reading and writing the history file on cygwin32. t. Fixed a bug in the redisplay code for lines with more than 256 line breaks. u. A bug was fixed which caused invisible character markers to not be stripped from the prompt string if the terminal was in no-echo mode. v. Readline no longer tries to get the variables it needs for redisplay from the termcap entry if the calling application has specified its own redisplay function. Readline treats the terminal as `dumb' in this case. w. Fixes to the SIGWINCH code so that a multiple-line prompt with escape sequences is redrawn correctly. x. Changes to the install and install-shared targets so that the libraries and header files are installed separately. 2. New Features in Readline a. A new Readline `user manual' is in doc/rluserman.texinfo. b. Parentheses matching is now always compiled into readline, and enabled or disabled when the value of the `blink-matching-paren' variable is changed. c. MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename. d. MS-DOS systems now use ~/_history as the default history file. e. history-search-{forward,backward} now leave the point at the end of the line when the string to search for is empty, like {reverse,forward}-search-history. f. history-search-{forward,backward} now leave the last history line found in the readline buffer if the second or subsequent search fails. g. New function for use by applications: rl_on_new_line_with_prompt, used when an application displays the prompt itself before calling readline(). h. New variable for use by applications: rl_already_prompted. An application that displays the prompt itself before calling readline() must set this to a non-zero value. i. A new variable, rl_gnu_readline_p, always 1. The intent is that an application can verify whether or not it is linked with the `real' readline library or some substitute. j. Per Bothner's `rlfe' (pronounced `Ralphie') readline front-end program is included in the examples subdirectory, though it is not built by default. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.0, and the previous version, readline-2.2. 1. Changes to Readline a. The version number is now 4.0, to match the major and minor version numbers on the shared readline and history libraries. Future releases will maintain the identical numbering. b. Fixed a typo in the `make install' recipe that copied libreadline.a to libhistory.old right after installing it. c. The readline and history info files are now installed out of the source directory if they are not found in the build directory. d. The library no longer exports a function named `savestring' -- backwards compatibility be damned. e. There is no longer any #ifdef SHELL code in the source files. f. Some changes were made to the key binding code to fix memory leaks and better support Win32 systems. g. Fixed a silly typo in the paren matching code -- it's microseconds, not milliseconds. h. The readline library should be compilable by C++ compilers. i. The readline.h public header file now includes function prototypes for all readline functions, and some changes were made to fix errors in the source files uncovered by the use of prototypes. j. The maximum numeric argument is now clamped at 1000000. k. Fixes to rl_yank_last_arg to make it behave better. l. Fixed a bug in the display code that caused core dumps if the prompt string length exceeded 1024 characters. m. The menu completion code was fixed to properly insert a single completion if there is only one match. n. A bug was fixed that caused the display code to improperly display tabs after newlines. o. A fix was made to the completion code in which a typo caused the wrong value to be passed to the function that computed the longest common prefix of the list of matches. p. The completion code now checks the value of rl_filename_completion_desired, which is set by application-supplied completion functions to indicate that filename completion is being performed, to decide whether or not to call an application-supplied `ignore completions' function. q. Code was added to the history library to catch history substitutions using `&' without a previous history substitution or search having been performed. 2. New Features in Readline a. There is a new script, support/shobj-conf, to do system-specific shared object and library configuration. It generates variables for configure to substitute into makefiles. The README file provides a detailed explanation of the shared library creation process. b. Shared libraries and objects are now built in the `shlib' subdirectory. There is a shlib/Makefile.in to control the build process. `make shared' from the top-level directory is still the right way to build shared versions of the libraries. c. rlconf.h is now installed, so applications can find out which features have been compiled into the installed readline and history libraries. d. rlstdc.h is now an installed header file. e. Many changes to the signal handling: o Readline now catches SIGQUIT and cleans up the tty before returning; o A new variable, rl_catch_signals, is available to application writers to indicate to readline whether or not it should install its own signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU; o A new variable, rl_catch_sigwinch, is available to application writers to indicate to readline whether or not it should install its own signal handler for SIGWINCH, which will chain to the calling applications's SIGWINCH handler, if one is installed; o There is a new function, rl_free_line_state, for application signal handlers to call to free up the state associated with the current line after receiving a signal; o There is a new function, rl_cleanup_after_signal, to clean up the display and terminal state after receiving a signal; o There is a new function, rl_reset_after_signal, to reinitialize the terminal and display state after an application signal handler returns and readline continues f. There is a new function, rl_resize_terminal, to reset readline's idea of the screen size after a SIGWINCH. g. New public functions: rl_save_prompt and rl_restore_prompt. These were previously private functions with a `_' prefix. These functions are used when an application wants to write a message to the `message area' with rl_message and have the prompt restored correctly when the message is erased. h. New function hook: rl_pre_input_hook, called just before readline starts reading input, after initialization. i. New function hook: rl_display_matches_hook, called when readline would display the list of completion matches. The new function rl_display_match_list is what readline uses internally, and is available for use by application functions called via this hook. j. New bindable function, delete-char-or-list, like tcsh. k. A new variable, rl_erase_empty_line, which, if set by an application using readline, will cause readline to erase, prompt and all, lines on which the only thing typed was a newline. l. There is a new script, support/shlib-install, to install and uninstall the shared readline and history libraries. m. A new bindable variable, `isearch-terminators', which is a string containing the set of characters that should terminate an incremental search without being executed as a command. n. A new bindable function, forward-backward-delete-char. ------------------------------------------------------------------------------- This document details the changes between this version, readline-2.2, and the previous version, readline-2.1. 1. Changes to Readline a. Added a missing `extern' to a declaration in readline.h that kept readline from compiling cleanly on some systems. b. The history file is now opened with mode 0600 when it is written for better security. c. Changes were made to the SIGWINCH handling code so that prompt redisplay is done better. d. ^G now interrupts incremental searches correctly. e. A bug that caused a core dump when the set of characters to be quoted when completing words was empty was fixed. f. Fixed a problem in the readline test program rltest.c that caused a core dump. g. The code that handles parser directives in inputrc files now displays more error messages. h. The history expansion code was fixed so that the appearance of the history comment character at the beginning of a word inhibits history expansion for that word and the rest of the input line. i. The code that prints completion listings now behaves better if one or more of the filenames contains non-printable characters. j. The time delay when showing matching parentheses is now 0.5 seconds. 2. New Features in Readline a. There is now an option for `iterative' yank-last-arg handline, so a user can keep entering `M-.', yanking the last argument of successive history lines. b. New variable, `print-completions-horizontally', which causes completion matches to be displayed across the screen (like `ls -x') rather than up and down the screen (like `ls'). c. New variable, `completion-ignore-case', which causes filename completion and matching to be performed case-insensitively. d. There is a new bindable command, `magic-space', which causes history expansion to be performed on the current readline buffer and a space to be inserted into the result. e. There is a new bindable command, `menu-complete', which enables tcsh-like menu completion (successive executions of menu-complete insert a single completion match, cycling through the list of possible completions). f. There is a new bindable command, `paste-from-clipboard', for use on Win32 systems, to insert the text from the Win32 clipboard into the editing buffer. g. The key sequence translation code now understands printf-style backslash escape sequences, including \NNN octal escapes. These escape sequences may be used in key sequence definitions or macro values. h. An `$include' inputrc file parser directive has been added. readline-6.3/NEWS0000644000043600000240000000510712111176707012453 0ustar chetstaffThis is a terse description of the new features added to readline-6.3 since the release of readline-6.2. New Features in Readline a. Readline is now more responsive to SIGHUP and other fatal signals when reading input from the terminal or performing word completion but no longer attempts to run any not-allowable functions from a signal handler context. b. There are new bindable commands to search the history for the string of characters between the beginning of the line and the point (history-substring-search-forward, history-substring-search-backward) c. Readline allows quoted strings as the values of variables when setting them with `set'. As a side effect, trailing spaces and tabs are ignored when setting a string variable's value. d. The history library creates a backup of the history file when writing it and restores the backup on a write error. e. New application-settable variable: rl_filename_stat_hook: a function called with a filename before using it in a call to stat(2). Bash uses it to expand shell variables so things like $HOME/Downloads have a slash appended. f. New bindable function `print-last-kbd-macro', prints the most-recently- defined keyboard macro in a reusable format. g. New user-settable variable `colored-stats', enables use of colored text to denote file types when displaying possible completions (colored analog of visible-stats). h. New user-settable variable `keyseq-timout', acts as an inter-character timeout when reading input or incremental search strings. i. New application-callable function: rl_clear_history. Clears the history list and frees all readline-associated private data. j. New user-settable variable, show-mode-in-prompt, adds a characters to the beginning of the prompt indicating the current editing mode. k. New application-settable variable: rl_input_available_hook; function to be called when readline detects there is data available on its input file descriptor. l. Readline calls an application-set event hook (rl_event_hook) after it gets a signal while reading input (read returns -1/EINTR but readline does not handle the signal immediately) to allow the application to handle or otherwise note it. m. If the user-settable variable `history-size' is set to a value less than 0, the history list size is unlimited. n. New application-settable variable: rl_signal_event_hook; function that is called when readline is reading terminal input and read(2) is interrupted by a signal. Currently not called for SIGHUP or SIGTERM. readline-6.3/USAGE0000644000043600000000000000375106746073640012552 0ustar chetwheelFrom rms@gnu.org Thu Jul 22 20:37:55 1999 Flags: 10 Return-Path: rms@gnu.org Received: from arthur.INS.CWRU.Edu (root@arthur.INS.CWRU.Edu [129.22.8.215]) by odin.INS.CWRU.Edu with ESMTP (8.8.6+cwru/CWRU-2.4-ins) id UAA25349; Thu, 22 Jul 1999 20:37:54 -0400 (EDT) (from rms@gnu.org for ) Received: from nike.ins.cwru.edu (root@nike.INS.CWRU.Edu [129.22.8.219]) by arthur.INS.CWRU.Edu with ESMTP (8.8.8+cwru/CWRU-3.6) id UAA05311; Thu, 22 Jul 1999 20:37:51 -0400 (EDT) (from rms@gnu.org for ) Received: from pele.santafe.edu (pele.santafe.edu [192.12.12.119]) by nike.ins.cwru.edu with ESMTP (8.8.7/CWRU-2.5-bsdi) id UAA13350; Thu, 22 Jul 1999 20:37:50 -0400 (EDT) (from rms@gnu.org for ) Received: from wijiji.santafe.edu (wijiji [192.12.12.5]) by pele.santafe.edu (8.9.1/8.9.1) with ESMTP id SAA10831 for ; Thu, 22 Jul 1999 18:37:47 -0600 (MDT) Received: (from rms@localhost) by wijiji.santafe.edu (8.9.1b+Sun/8.9.1) id SAA01089; Thu, 22 Jul 1999 18:37:46 -0600 (MDT) Date: Thu, 22 Jul 1999 18:37:46 -0600 (MDT) Message-Id: <199907230037.SAA01089@wijiji.santafe.edu> X-Authentication-Warning: wijiji.santafe.edu: rms set sender to rms@gnu.org using -f From: Richard Stallman To: chet@nike.ins.cwru.edu Subject: Use of Readline Reply-to: rms@gnu.org I think Allbery's suggestion is a good one. So please add this text in a suitable place. Please don't put it in the GPL itself; that should be the same as the GPL everywhere else. Putting it in the README and/or the documentation would be a good idea. ====================================================================== Our position on the use of Readline through a shared-library linking mechanism is that there is no legal difference between shared-library linking and static linking--either kind of linking combines various modules into a single larger work. The conditions for using Readline in a larger work are stated in section 3 of the GNU GPL. readline-6.3/aclocal.m40000644000043600001200000040562212231055476013606 0ustar chetadmindnl dnl Bash specific tests dnl dnl Some derived from PDKSH 5.1.3 autoconf tests dnl AC_DEFUN(BASH_C_LONG_LONG, [AC_CACHE_CHECK(for long long, ac_cv_c_long_long, [if test "$GCC" = yes; then ac_cv_c_long_long=yes else AC_TRY_RUN([ int main() { long long foo = 0; exit(sizeof(long long) < sizeof(long)); } ], ac_cv_c_long_long=yes, ac_cv_c_long_long=no) fi]) if test $ac_cv_c_long_long = yes; then AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the `long long' type works.]) fi ]) dnl dnl This is very similar to AC_C_LONG_DOUBLE, with the fix for IRIX dnl (< changed to <=) added. dnl AC_DEFUN(BASH_C_LONG_DOUBLE, [AC_CACHE_CHECK(for long double, ac_cv_c_long_double, [if test "$GCC" = yes; then ac_cv_c_long_double=yes else AC_TRY_RUN([ int main() { /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ /* On IRIX 5.3, the compiler converts long double to double with a warning, but compiles this successfully. */ exit(sizeof(long double) <= sizeof(double)); } ], ac_cv_c_long_double=yes, ac_cv_c_long_double=no) fi]) if test $ac_cv_c_long_double = yes; then AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if the `long double' type works.]) fi ]) dnl dnl Check for . This is separated out so that it can be dnl AC_REQUIREd. dnl dnl BASH_HEADER_INTTYPES AC_DEFUN(BASH_HEADER_INTTYPES, [ AC_CHECK_HEADERS(inttypes.h) ]) dnl dnl check for typedef'd symbols in header files, but allow the caller to dnl specify the include files to be checked in addition to the default dnl dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND]) AC_DEFUN(BASH_CHECK_TYPE, [ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([BASH_HEADER_INTTYPES]) AC_MSG_CHECKING(for $1) AC_CACHE_VAL(bash_cv_type_$1, [AC_EGREP_CPP($1, [#include #if STDC_HEADERS #include #include #endif #if HAVE_INTTYPES_H #include #endif #if HAVE_STDINT_H #include #endif $2 ], bash_cv_type_$1=yes, bash_cv_type_$1=no)]) AC_MSG_RESULT($bash_cv_type_$1) ifelse($#, 4, [if test $bash_cv_type_$1 = yes; then AC_DEFINE($4) fi]) if test $bash_cv_type_$1 = no; then AC_DEFINE_UNQUOTED($1, $3) fi ]) dnl dnl BASH_CHECK_DECL(FUNC) dnl dnl Check for a declaration of FUNC in stdlib.h and inttypes.h like dnl AC_CHECK_DECL dnl AC_DEFUN(BASH_CHECK_DECL, [ AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([BASH_HEADER_INTTYPES]) AC_CACHE_CHECK([for declaration of $1], bash_cv_decl_$1, [AC_TRY_LINK( [ #if STDC_HEADERS # include #endif #if HAVE_INTTYPES_H # include #endif ], [return !$1;], bash_cv_decl_$1=yes, bash_cv_decl_$1=no)]) bash_tr_func=HAVE_DECL_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` if test $bash_cv_decl_$1 = yes; then AC_DEFINE_UNQUOTED($bash_tr_func, 1) else AC_DEFINE_UNQUOTED($bash_tr_func, 0) fi ]) AC_DEFUN(BASH_DECL_PRINTF, [AC_MSG_CHECKING(for declaration of printf in ) AC_CACHE_VAL(bash_cv_printf_declared, [AC_TRY_RUN([ #include #ifdef __STDC__ typedef int (*_bashfunc)(const char *, ...); #else typedef int (*_bashfunc)(); #endif main() { _bashfunc pf; pf = (_bashfunc) printf; exit(pf == 0); } ], bash_cv_printf_declared=yes, bash_cv_printf_declared=no, [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes) bash_cv_printf_declared=yes] )]) AC_MSG_RESULT($bash_cv_printf_declared) if test $bash_cv_printf_declared = yes; then AC_DEFINE(PRINTF_DECLARED) fi ]) AC_DEFUN(BASH_DECL_SBRK, [AC_MSG_CHECKING(for declaration of sbrk in ) AC_CACHE_VAL(bash_cv_sbrk_declared, [AC_EGREP_HEADER(sbrk, unistd.h, bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)]) AC_MSG_RESULT($bash_cv_sbrk_declared) if test $bash_cv_sbrk_declared = yes; then AC_DEFINE(SBRK_DECLARED) fi ]) dnl dnl Check for sys_siglist[] or _sys_siglist[] dnl AC_DEFUN(BASH_DECL_UNDER_SYS_SIGLIST, [AC_MSG_CHECKING([for _sys_siglist in signal.h or unistd.h]) AC_CACHE_VAL(bash_cv_decl_under_sys_siglist, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H #include #endif], [ char *msg = _sys_siglist[2]; ], bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no, [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl AC_MSG_RESULT($bash_cv_decl_under_sys_siglist) if test $bash_cv_decl_under_sys_siglist = yes; then AC_DEFINE(UNDER_SYS_SIGLIST_DECLARED) fi ]) AC_DEFUN(BASH_UNDER_SYS_SIGLIST, [AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST]) AC_MSG_CHECKING([for _sys_siglist in system C library]) AC_CACHE_VAL(bash_cv_under_sys_siglist, [AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif #ifndef UNDER_SYS_SIGLIST_DECLARED extern char *_sys_siglist[]; #endif main() { char *msg = (char *)_sys_siglist[2]; exit(msg == 0); }], bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no, [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no) bash_cv_under_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_under_sys_siglist) if test $bash_cv_under_sys_siglist = yes; then AC_DEFINE(HAVE_UNDER_SYS_SIGLIST) fi ]) AC_DEFUN(BASH_SYS_SIGLIST, [AC_REQUIRE([AC_DECL_SYS_SIGLIST]) AC_MSG_CHECKING([for sys_siglist in system C library]) AC_CACHE_VAL(bash_cv_sys_siglist, [AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif #if !HAVE_DECL_SYS_SIGLIST extern char *sys_siglist[]; #endif main() { char *msg = sys_siglist[2]; exit(msg == 0); }], bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no, [AC_MSG_WARN(cannot check for sys_siglist if cross compiling -- defaulting to no) bash_cv_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_sys_siglist) if test $bash_cv_sys_siglist = yes; then AC_DEFINE(HAVE_SYS_SIGLIST) fi ]) dnl Check for the various permutations of sys_siglist and make sure we dnl compile in siglist.o if they're not defined AC_DEFUN(BASH_CHECK_SYS_SIGLIST, [ AC_REQUIRE([BASH_SYS_SIGLIST]) AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST]) AC_REQUIRE([BASH_FUNC_STRSIGNAL]) if test "$bash_cv_sys_siglist" = no && test "$bash_cv_under_sys_siglist" = no && test "$bash_cv_have_strsignal" = no; then SIGLIST_O=siglist.o else SIGLIST_O= fi AC_SUBST([SIGLIST_O]) ]) dnl Check for sys_errlist[] and sys_nerr, check for declaration AC_DEFUN(BASH_SYS_ERRLIST, [AC_MSG_CHECKING([for sys_errlist and sys_nerr]) AC_CACHE_VAL(bash_cv_sys_errlist, [AC_TRY_LINK([#include ], [extern char *sys_errlist[]; extern int sys_nerr; char *msg = sys_errlist[sys_nerr - 1];], bash_cv_sys_errlist=yes, bash_cv_sys_errlist=no)])dnl AC_MSG_RESULT($bash_cv_sys_errlist) if test $bash_cv_sys_errlist = yes; then AC_DEFINE(HAVE_SYS_ERRLIST) fi ]) dnl dnl Check if dup2() does not clear the close on exec flag dnl AC_DEFUN(BASH_FUNC_DUP2_CLOEXEC_CHECK, [AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag) AC_CACHE_VAL(bash_cv_dup2_broken, [AC_TRY_RUN([ #include #include main() { int fd1, fd2, fl; fd1 = open("/dev/null", 2); if (fcntl(fd1, 2, 1) < 0) exit(1); fd2 = dup2(fd1, 1); if (fd2 < 0) exit(2); fl = fcntl(fd2, 1, 0); /* fl will be 1 if dup2 did not reset the close-on-exec flag. */ exit(fl != 1); } ], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no, [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no) bash_cv_dup2_broken=no]) ]) AC_MSG_RESULT($bash_cv_dup2_broken) if test $bash_cv_dup2_broken = yes; then AC_DEFINE(DUP2_BROKEN) fi ]) AC_DEFUN(BASH_FUNC_STRSIGNAL, [AC_MSG_CHECKING([for the existence of strsignal]) AC_CACHE_VAL(bash_cv_have_strsignal, [AC_TRY_LINK([#include #include ], [char *s = (char *)strsignal(2);], bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)]) AC_MSG_RESULT($bash_cv_have_strsignal) if test $bash_cv_have_strsignal = yes; then AC_DEFINE(HAVE_STRSIGNAL) fi ]) dnl Check to see if opendir will open non-directories (not a nice thing) AC_DEFUN(BASH_FUNC_OPENDIR_CHECK, [AC_REQUIRE([AC_HEADER_DIRENT])dnl AC_MSG_CHECKING(if opendir() opens non-directories) AC_CACHE_VAL(bash_cv_opendir_not_robust, [AC_TRY_RUN([ #include #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ main() { DIR *dir; int fd, err; err = mkdir("bash-aclocal", 0700); if (err < 0) { perror("mkdir"); exit(1); } unlink("bash-aclocal/not_a_directory"); fd = open("bash-aclocal/not_a_directory", O_WRONLY|O_CREAT|O_EXCL, 0666); write(fd, "\n", 1); close(fd); dir = opendir("bash-aclocal/not_a_directory"); unlink("bash-aclocal/not_a_directory"); rmdir("bash-aclocal"); exit (dir == 0); }], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no, [AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no) bash_cv_opendir_not_robust=no] )]) AC_MSG_RESULT($bash_cv_opendir_not_robust) if test $bash_cv_opendir_not_robust = yes; then AC_DEFINE(OPENDIR_NOT_ROBUST) fi ]) dnl AC_DEFUN(BASH_TYPE_SIGHANDLER, [AC_MSG_CHECKING([whether signal handlers are of type void]) AC_CACHE_VAL(bash_cv_void_sighandler, [AC_TRY_COMPILE([#include #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" #endif void (*signal ()) ();], [int i;], bash_cv_void_sighandler=yes, bash_cv_void_sighandler=no)])dnl AC_MSG_RESULT($bash_cv_void_sighandler) if test $bash_cv_void_sighandler = yes; then AC_DEFINE(VOID_SIGHANDLER) fi ]) dnl dnl A signed 16-bit integer quantity dnl AC_DEFUN(BASH_TYPE_BITS16_T, [ if test "$ac_cv_sizeof_short" = 2; then AC_CHECK_TYPE(bits16_t, short) elif test "$ac_cv_sizeof_char" = 2; then AC_CHECK_TYPE(bits16_t, char) else AC_CHECK_TYPE(bits16_t, short) fi ]) dnl dnl An unsigned 16-bit integer quantity dnl AC_DEFUN(BASH_TYPE_U_BITS16_T, [ if test "$ac_cv_sizeof_short" = 2; then AC_CHECK_TYPE(u_bits16_t, unsigned short) elif test "$ac_cv_sizeof_char" = 2; then AC_CHECK_TYPE(u_bits16_t, unsigned char) else AC_CHECK_TYPE(u_bits16_t, unsigned short) fi ]) dnl dnl A signed 32-bit integer quantity dnl AC_DEFUN(BASH_TYPE_BITS32_T, [ if test "$ac_cv_sizeof_int" = 4; then AC_CHECK_TYPE(bits32_t, int) elif test "$ac_cv_sizeof_long" = 4; then AC_CHECK_TYPE(bits32_t, long) else AC_CHECK_TYPE(bits32_t, int) fi ]) dnl dnl An unsigned 32-bit integer quantity dnl AC_DEFUN(BASH_TYPE_U_BITS32_T, [ if test "$ac_cv_sizeof_int" = 4; then AC_CHECK_TYPE(u_bits32_t, unsigned int) elif test "$ac_cv_sizeof_long" = 4; then AC_CHECK_TYPE(u_bits32_t, unsigned long) else AC_CHECK_TYPE(u_bits32_t, unsigned int) fi ]) AC_DEFUN(BASH_TYPE_PTRDIFF_T, [ if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then AC_CHECK_TYPE(ptrdiff_t, int) elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then AC_CHECK_TYPE(ptrdiff_t, long) elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then AC_CHECK_TYPE(ptrdiff_t, [long long]) else AC_CHECK_TYPE(ptrdiff_t, int) fi ]) dnl dnl A signed 64-bit quantity dnl AC_DEFUN(BASH_TYPE_BITS64_T, [ if test "$ac_cv_sizeof_char_p" = 8; then AC_CHECK_TYPE(bits64_t, char *) elif test "$ac_cv_sizeof_double" = 8; then AC_CHECK_TYPE(bits64_t, double) elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then AC_CHECK_TYPE(bits64_t, [long long]) elif test "$ac_cv_sizeof_long" = 8; then AC_CHECK_TYPE(bits64_t, long) else AC_CHECK_TYPE(bits64_t, double) fi ]) AC_DEFUN(BASH_TYPE_LONG_LONG, [ AC_CACHE_CHECK([for long long], bash_cv_type_long_long, [AC_TRY_LINK([ long long ll = 1; int i = 63;], [ long long llm = (long long) -1; return ll << i | ll >> i | llm / ll | llm % ll; ], bash_cv_type_long_long='long long', bash_cv_type_long_long='long')]) if test "$bash_cv_type_long_long" = 'long long'; then AC_DEFINE(HAVE_LONG_LONG, 1) fi ]) AC_DEFUN(BASH_TYPE_UNSIGNED_LONG_LONG, [ AC_CACHE_CHECK([for unsigned long long], bash_cv_type_unsigned_long_long, [AC_TRY_LINK([ unsigned long long ull = 1; int i = 63;], [ unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull; ], bash_cv_type_unsigned_long_long='unsigned long long', bash_cv_type_unsigned_long_long='unsigned long')]) if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1) fi ]) dnl dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0) dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3). To simplify dnl matters, this just checks for rlim_t, quad_t, or long. dnl AC_DEFUN(BASH_TYPE_RLIMIT, [AC_MSG_CHECKING(for size and type of struct rlimit fields) AC_CACHE_VAL(bash_cv_type_rlimit, [AC_TRY_COMPILE([#include #include ], [rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[ AC_TRY_RUN([ #include #include #include main() { #ifdef HAVE_QUAD_T struct rlimit rl; if (sizeof(rl.rlim_cur) == sizeof(quad_t)) exit(0); #endif exit(1); }], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long, [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long) bash_cv_type_rlimit=long])]) ]) AC_MSG_RESULT($bash_cv_type_rlimit) if test $bash_cv_type_rlimit = quad_t; then AC_DEFINE(RLIMTYPE, quad_t) elif test $bash_cv_type_rlimit = rlim_t; then AC_DEFINE(RLIMTYPE, rlim_t) fi ]) AC_DEFUN(BASH_TYPE_SIG_ATOMIC_T, [AC_CACHE_CHECK([for sig_atomic_t in signal.h], ac_cv_have_sig_atomic_t, [AC_TRY_LINK([ #include ],[ sig_atomic_t x; ], ac_cv_have_sig_atomic_t=yes, ac_cv_have_sig_atomic_t=no)]) if test "$ac_cv_have_sig_atomic_t" = "no" then AC_CHECK_TYPE(sig_atomic_t,int) fi ]) AC_DEFUN(BASH_FUNC_LSTAT, [dnl Cannot use AC_CHECK_FUNCS(lstat) because Linux defines lstat() as an dnl inline function in . AC_CACHE_CHECK([for lstat], bash_cv_func_lstat, [AC_TRY_LINK([ #include #include ],[ lstat(".",(struct stat *)0); ], bash_cv_func_lstat=yes, bash_cv_func_lstat=no)]) if test $bash_cv_func_lstat = yes; then AC_DEFINE(HAVE_LSTAT) fi ]) AC_DEFUN(BASH_FUNC_INET_ATON, [ AC_CACHE_CHECK([for inet_aton], bash_cv_func_inet_aton, [AC_TRY_LINK([ #include #include #include struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ], bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)]) if test $bash_cv_func_inet_aton = yes; then AC_DEFINE(HAVE_INET_ATON) else AC_LIBOBJ(inet_aton) fi ]) AC_DEFUN(BASH_FUNC_GETENV, [AC_MSG_CHECKING(to see if getenv can be redefined) AC_CACHE_VAL(bash_cv_getenv_redef, [AC_TRY_RUN([ #ifdef HAVE_UNISTD_H # include #endif #ifndef __STDC__ # ifndef const # define const # endif #endif char * getenv (name) #if defined (__linux__) || defined (__bsdi__) || defined (convex) const char *name; #else char const *name; #endif /* !__linux__ && !__bsdi__ && !convex */ { return "42"; } main() { char *s; /* The next allows this program to run, but does not allow bash to link when it redefines getenv. I'm not really interested in figuring out why not. */ #if defined (NeXT) exit(1); #endif s = getenv("ABCDE"); exit(s == 0); /* force optimizer to leave getenv in */ } ], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no, [AC_MSG_WARN(cannot check getenv redefinition if cross compiling -- defaulting to yes) bash_cv_getenv_redef=yes] )]) AC_MSG_RESULT($bash_cv_getenv_redef) if test $bash_cv_getenv_redef = yes; then AC_DEFINE(CAN_REDEFINE_GETENV) fi ]) # We should check for putenv before calling this AC_DEFUN(BASH_FUNC_STD_PUTENV, [ AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv, [AC_TRY_LINK([ #if STDC_HEADERS #include #include #endif #ifndef __STDC__ # ifndef const # define const # endif #endif #ifdef PROTOTYPES extern int putenv (char *); #else extern int putenv (); #endif ], [return (putenv == 0);], bash_cv_std_putenv=yes, bash_cv_std_putenv=no )]) if test $bash_cv_std_putenv = yes; then AC_DEFINE(HAVE_STD_PUTENV) fi ]) # We should check for unsetenv before calling this AC_DEFUN(BASH_FUNC_STD_UNSETENV, [ AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unsetenv, [AC_TRY_LINK([ #if STDC_HEADERS #include #include #endif #ifndef __STDC__ # ifndef const # define const # endif #endif #ifdef PROTOTYPES extern int unsetenv (const char *); #else extern int unsetenv (); #endif ], [return (unsetenv == 0);], bash_cv_std_unsetenv=yes, bash_cv_std_unsetenv=no )]) if test $bash_cv_std_unsetenv = yes; then AC_DEFINE(HAVE_STD_UNSETENV) fi ]) AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS, [AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize) AC_CACHE_VAL(bash_cv_ulimit_maxfds, [AC_TRY_RUN([ main() { long maxfds = ulimit(4, 0L); exit (maxfds == -1L); } ], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no, [AC_MSG_WARN(cannot check ulimit if cross compiling -- defaulting to no) bash_cv_ulimit_maxfds=no] )]) AC_MSG_RESULT($bash_cv_ulimit_maxfds) if test $bash_cv_ulimit_maxfds = yes; then AC_DEFINE(ULIMIT_MAXFDS) fi ]) AC_DEFUN(BASH_FUNC_GETCWD, [AC_MSG_CHECKING([if getcwd() will dynamically allocate memory with 0 size]) AC_CACHE_VAL(bash_cv_getcwd_malloc, [AC_TRY_RUN([ #include #ifdef HAVE_UNISTD_H #include #endif main() { char *xpwd; xpwd = getcwd(0, 0); exit (xpwd == 0); } ], bash_cv_getcwd_malloc=yes, bash_cv_getcwd_malloc=no, [AC_MSG_WARN(cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no) bash_cv_getcwd_malloc=no] )]) AC_MSG_RESULT($bash_cv_getcwd_malloc) if test $bash_cv_getcwd_malloc = no; then AC_DEFINE(GETCWD_BROKEN) AC_LIBOBJ(getcwd) fi ]) dnl dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every dnl system, we can't use AC_PREREQ dnl AC_DEFUN(BASH_FUNC_GETHOSTBYNAME, [if test "X$bash_cv_have_gethostbyname" = "X"; then _bash_needmsg=yes else AC_MSG_CHECKING(for gethostbyname in socket library) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_have_gethostbyname, [AC_TRY_LINK([#include ], [ struct hostent *hp; hp = gethostbyname("localhost"); ], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)] ) if test "X$_bash_needmsg" = Xyes; then AC_MSG_CHECKING(for gethostbyname in socket library) fi AC_MSG_RESULT($bash_cv_have_gethostbyname) if test "$bash_cv_have_gethostbyname" = yes; then AC_DEFINE(HAVE_GETHOSTBYNAME) fi ]) AC_DEFUN(BASH_FUNC_FNMATCH_EXTMATCH, [AC_MSG_CHECKING(if fnmatch does extended pattern matching with FNM_EXTMATCH) AC_CACHE_VAL(bash_cv_fnm_extmatch, [AC_TRY_RUN([ #include main() { #ifdef FNM_EXTMATCH exit (0); #else exit (1); #endif } ], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no, [AC_MSG_WARN(cannot check FNM_EXTMATCH if cross compiling -- defaulting to no) bash_cv_fnm_extmatch=no]) ]) AC_MSG_RESULT($bash_cv_fnm_extmatch) if test $bash_cv_fnm_extmatch = yes; then AC_DEFINE(HAVE_LIBC_FNM_EXTMATCH) fi ]) AC_DEFUN(BASH_FUNC_POSIX_SETJMP, [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp) AC_CACHE_VAL(bash_cv_func_sigsetjmp, [AC_TRY_RUN([ #ifdef HAVE_UNISTD_H #include #endif #include #include #include main() { #if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS) exit (1); #else int code; sigset_t set, oset; sigjmp_buf xx; /* get the mask */ sigemptyset(&set); sigemptyset(&oset); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset); /* save it */ code = sigsetjmp(xx, 1); if (code) exit(0); /* could get sigmask and compare to oset here. */ /* change it */ sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); /* and siglongjmp */ siglongjmp(xx, 10); exit(1); #endif }], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing, [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing) bash_cv_func_sigsetjmp=missing] )]) AC_MSG_RESULT($bash_cv_func_sigsetjmp) if test $bash_cv_func_sigsetjmp = present; then AC_DEFINE(HAVE_POSIX_SIGSETJMP) fi ]) AC_DEFUN(BASH_FUNC_STRCOLL, [ AC_MSG_CHECKING(whether or not strcoll and strcmp differ) AC_CACHE_VAL(bash_cv_func_strcoll_broken, [AC_TRY_RUN([ #include #if defined (HAVE_LOCALE_H) #include #endif main(c, v) int c; char *v[]; { int r1, r2; char *deflocale, *defcoll; #ifdef HAVE_SETLOCALE deflocale = setlocale(LC_ALL, ""); defcoll = setlocale(LC_COLLATE, ""); #endif #ifdef HAVE_STRCOLL /* These two values are taken from tests/glob-test. */ r1 = strcoll("abd", "aXd"); #else r1 = 0; #endif r2 = strcmp("abd", "aXd"); /* These two should both be greater than 0. It is permissible for a system to return different values, as long as the sign is the same. */ /* Exit with 1 (failure) if these two values are both > 0, since this tests whether strcoll(3) is broken with respect to strcmp(3) in the default locale. */ exit (r1 > 0 && r2 > 0); } ], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no, [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no) bash_cv_func_strcoll_broken=no] )]) AC_MSG_RESULT($bash_cv_func_strcoll_broken) if test $bash_cv_func_strcoll_broken = yes; then AC_DEFINE(STRCOLL_BROKEN) fi ]) AC_DEFUN(BASH_FUNC_PRINTF_A_FORMAT, [AC_MSG_CHECKING([for printf floating point output in hex notation]) AC_CACHE_VAL(bash_cv_printf_a_format, [AC_TRY_RUN([ #include #include int main() { double y = 0.0; char abuf[1024]; sprintf(abuf, "%A", y); exit(strchr(abuf, 'P') == (char *)0); } ], bash_cv_printf_a_format=yes, bash_cv_printf_a_format=no, [AC_MSG_WARN(cannot check printf if cross compiling -- defaulting to no) bash_cv_printf_a_format=no] )]) AC_MSG_RESULT($bash_cv_printf_a_format) if test $bash_cv_printf_a_format = yes; then AC_DEFINE(HAVE_PRINTF_A_FORMAT) fi ]) AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC, [ AC_CHECK_MEMBER(struct termios.c_line, AC_DEFINE(TERMIOS_LDISC), ,[ #include #include ]) ]) AC_DEFUN(BASH_STRUCT_TERMIO_LDISC, [ AC_CHECK_MEMBER(struct termio.c_line, AC_DEFINE(TERMIO_LDISC), ,[ #include #include ]) ]) dnl dnl Like AC_STRUCT_ST_BLOCKS, but doesn't muck with LIBOBJS dnl dnl sets bash_cv_struct_stat_st_blocks dnl dnl unused for now; we'll see how AC_CHECK_MEMBERS works dnl AC_DEFUN(BASH_STRUCT_ST_BLOCKS, [ AC_MSG_CHECKING([for struct stat.st_blocks]) AC_CACHE_VAL(bash_cv_struct_stat_st_blocks, [AC_TRY_COMPILE( [ #include #include ], [ main() { static struct stat a; if (a.st_blocks) return 0; return 0; } ], bash_cv_struct_stat_st_blocks=yes, bash_cv_struct_stat_st_blocks=no) ]) AC_MSG_RESULT($bash_cv_struct_stat_st_blocks) if test "$bash_cv_struct_stat_st_blocks" = "yes"; then AC_DEFINE(HAVE_STRUCT_STAT_ST_BLOCKS) fi ]) AC_DEFUN([BASH_CHECK_LIB_TERMCAP], [ if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else AC_MSG_CHECKING(which library has the termcap functions) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_termcap_lib, [AC_CHECK_FUNC(tgetent, bash_cv_termcap_lib=libc, [AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap, [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo, [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses, [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses, bash_cv_termcap_lib=gnutermcap)])])])])]) if test "X$_bash_needmsg" = "Xyes"; then AC_MSG_CHECKING(which library has the termcap functions) fi AC_MSG_RESULT(using $bash_cv_termcap_lib) if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" TERMCAP_DEP="./lib/termcap/libtermcap.a" elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then TERMCAP_LIB=-ltermcap TERMCAP_DEP= elif test $bash_cv_termcap_lib = libtinfo; then TERMCAP_LIB=-ltinfo TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= else TERMCAP_LIB=-lcurses TERMCAP_DEP= fi ]) dnl dnl Check for the presence of getpeername in libsocket. dnl If libsocket is present, check for libnsl and add it to LIBS if dnl it's there, since most systems with libsocket require linking dnl with libnsl as well. This should only be called if getpeername dnl was not found in libc. dnl dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT dnl AS WELL dnl AC_DEFUN(BASH_CHECK_LIB_SOCKET, [ if test "X$bash_cv_have_socklib" = "X"; then _bash_needmsg= else AC_MSG_CHECKING(for socket library) _bash_needmsg=yes fi AC_CACHE_VAL(bash_cv_have_socklib, [AC_CHECK_LIB(socket, getpeername, bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)]) if test "X$_bash_needmsg" = Xyes; then AC_MSG_RESULT($bash_cv_have_socklib) _bash_needmsg= fi if test $bash_cv_have_socklib = yes; then # check for libnsl, add it to LIBS if present if test "X$bash_cv_have_libnsl" = "X"; then _bash_needmsg= else AC_MSG_CHECKING(for libnsl) _bash_needmsg=yes fi AC_CACHE_VAL(bash_cv_have_libnsl, [AC_CHECK_LIB(nsl, t_open, bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)]) if test "X$_bash_needmsg" = Xyes; then AC_MSG_RESULT($bash_cv_have_libnsl) _bash_needmsg= fi if test $bash_cv_have_libnsl = yes; then LIBS="-lsocket -lnsl $LIBS" else LIBS="-lsocket $LIBS" fi AC_DEFINE(HAVE_LIBSOCKET) AC_DEFINE(HAVE_GETPEERNAME) fi ]) AC_DEFUN(BASH_STRUCT_DIRENT_D_INO, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_ino) AC_CACHE_VAL(bash_cv_dirent_has_dino, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ ],[ struct dirent d; int z; z = d.d_ino; ], bash_cv_dirent_has_dino=yes, bash_cv_dirent_has_dino=no)]) AC_MSG_RESULT($bash_cv_dirent_has_dino) if test $bash_cv_dirent_has_dino = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_INO) fi ]) AC_DEFUN(BASH_STRUCT_DIRENT_D_FILENO, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_fileno) AC_CACHE_VAL(bash_cv_dirent_has_d_fileno, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ ],[ struct dirent d; int z; z = d.d_fileno; ], bash_cv_dirent_has_d_fileno=yes, bash_cv_dirent_has_d_fileno=no)]) AC_MSG_RESULT($bash_cv_dirent_has_d_fileno) if test $bash_cv_dirent_has_d_fileno = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_FILENO) fi ]) AC_DEFUN(BASH_STRUCT_DIRENT_D_NAMLEN, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_namlen) AC_CACHE_VAL(bash_cv_dirent_has_d_namlen, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ ],[ struct dirent d; int z; z = d.d_namlen; ], bash_cv_dirent_has_d_namlen=yes, bash_cv_dirent_has_d_namlen=no)]) AC_MSG_RESULT($bash_cv_dirent_has_d_namlen) if test $bash_cv_dirent_has_d_namlen = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_NAMLEN) fi ]) AC_DEFUN(BASH_STRUCT_TIMEVAL, [AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h) AC_CACHE_VAL(bash_cv_struct_timeval, [ AC_EGREP_HEADER(struct timeval, sys/time.h, bash_cv_struct_timeval=yes, AC_EGREP_HEADER(struct timeval, time.h, bash_cv_struct_timeval=yes, bash_cv_struct_timeval=no)) ]) AC_MSG_RESULT($bash_cv_struct_timeval) if test $bash_cv_struct_timeval = yes; then AC_DEFINE(HAVE_TIMEVAL) fi ]) AC_DEFUN(BASH_STRUCT_TIMEZONE, [AC_MSG_CHECKING(for struct timezone in sys/time.h and time.h) AC_CACHE_VAL(bash_cv_struct_timezone, [ AC_EGREP_HEADER(struct timezone, sys/time.h, bash_cv_struct_timezone=yes, AC_EGREP_HEADER(struct timezone, time.h, bash_cv_struct_timezone=yes, bash_cv_struct_timezone=no)) ]) AC_MSG_RESULT($bash_cv_struct_timezone) if test $bash_cv_struct_timezone = yes; then AC_DEFINE(HAVE_STRUCT_TIMEZONE) fi ]) AC_DEFUN(BASH_STRUCT_WINSIZE, [AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h) AC_CACHE_VAL(bash_cv_struct_winsize_header, [AC_TRY_COMPILE([#include #include ], [struct winsize x;], bash_cv_struct_winsize_header=ioctl_h, [AC_TRY_COMPILE([#include #include ], [struct winsize x;], bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other) ])]) if test $bash_cv_struct_winsize_header = ioctl_h; then AC_MSG_RESULT(sys/ioctl.h) AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL) elif test $bash_cv_struct_winsize_header = termios_h; then AC_MSG_RESULT(termios.h) AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS) else AC_MSG_RESULT(not found) fi ]) dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE, [AC_REQUIRE([AC_TYPE_SIGNAL]) AC_MSG_CHECKING(for type of signal functions) AC_CACHE_VAL(bash_cv_signal_vintage, [ AC_TRY_LINK([#include ],[ sigset_t ss; struct sigaction sa; sigemptyset(&ss); sigsuspend(&ss); sigaction(SIGINT, &sa, (struct sigaction *) 0); sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); ], bash_cv_signal_vintage=posix, [ AC_TRY_LINK([#include ], [ int mask = sigmask(SIGINT); sigsetmask(mask); sigblock(mask); sigpause(mask); ], bash_cv_signal_vintage=4.2bsd, [ AC_TRY_LINK([ #include RETSIGTYPE foo() { }], [ int mask = sigmask(SIGINT); sigset(SIGINT, foo); sigrelse(SIGINT); sighold(SIGINT); sigpause(SIGINT); ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7 )] )] ) ]) AC_MSG_RESULT($bash_cv_signal_vintage) if test "$bash_cv_signal_vintage" = posix; then AC_DEFINE(HAVE_POSIX_SIGNALS) elif test "$bash_cv_signal_vintage" = "4.2bsd"; then AC_DEFINE(HAVE_BSD_SIGNALS) elif test "$bash_cv_signal_vintage" = svr3; then AC_DEFINE(HAVE_USG_SIGHOLD) fi ]) dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process. AC_DEFUN(BASH_SYS_PGRP_SYNC, [AC_REQUIRE([AC_FUNC_GETPGRP]) AC_MSG_CHECKING(whether pgrps need synchronization) AC_CACHE_VAL(bash_cv_pgrp_pipe, [AC_TRY_RUN([ #ifdef HAVE_UNISTD_H # include #endif main() { # ifdef GETPGRP_VOID # define getpgID() getpgrp() # else # define getpgID() getpgrp(0) # define setpgid(x,y) setpgrp(x,y) # endif int pid1, pid2, fds[2]; int status; char ok; switch (pid1 = fork()) { case -1: exit(1); case 0: setpgid(0, getpid()); exit(0); } setpgid(pid1, pid1); sleep(2); /* let first child die */ if (pipe(fds) < 0) exit(2); switch (pid2 = fork()) { case -1: exit(3); case 0: setpgid(0, pid1); ok = getpgID() == pid1; write(fds[1], &ok, 1); exit(0); } setpgid(pid2, pid1); close(fds[1]); if (read(fds[0], &ok, 1) != 1) exit(4); wait(&status); wait(&status); exit(ok ? 0 : 5); } ], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no) bash_cv_pgrp_pipe=no]) ]) AC_MSG_RESULT($bash_cv_pgrp_pipe) if test $bash_cv_pgrp_pipe = yes; then AC_DEFINE(PGRP_PIPE) fi ]) AC_DEFUN(BASH_SYS_REINSTALL_SIGHANDLERS, [AC_REQUIRE([AC_TYPE_SIGNAL]) AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked]) AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers, [AC_TRY_RUN([ #include #ifdef HAVE_UNISTD_H #include #endif typedef RETSIGTYPE sigfunc(); int nsigint; #ifdef HAVE_POSIX_SIGNALS sigfunc * set_signal_handler(sig, handler) int sig; sigfunc *handler; { struct sigaction act, oact; act.sa_handler = handler; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigemptyset (&oact.sa_mask); sigaction (sig, &act, &oact); return (oact.sa_handler); } #else #define set_signal_handler(s, h) signal(s, h) #endif RETSIGTYPE sigint(s) int s; { nsigint++; } main() { nsigint = 0; set_signal_handler(SIGINT, sigint); kill((int)getpid(), SIGINT); kill((int)getpid(), SIGINT); exit(nsigint != 2); } ], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes, [AC_MSG_WARN(cannot check signal handling if cross compiling -- defaulting to no) bash_cv_must_reinstall_sighandlers=no] )]) AC_MSG_RESULT($bash_cv_must_reinstall_sighandlers) if test $bash_cv_must_reinstall_sighandlers = yes; then AC_DEFINE(MUST_REINSTALL_SIGHANDLERS) fi ]) dnl check that some necessary job control definitions are present AC_DEFUN(BASH_SYS_JOB_CONTROL_MISSING, [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING(for presence of necessary job control definitions) AC_CACHE_VAL(bash_cv_job_control_missing, [AC_TRY_RUN([ #include #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include /* Add more tests in here as appropriate. */ main() { /* signal type */ #if !defined (HAVE_POSIX_SIGNALS) && !defined (HAVE_BSD_SIGNALS) exit(1); #endif /* signals and tty control. */ #if !defined (SIGTSTP) || !defined (SIGSTOP) || !defined (SIGCONT) exit (1); #endif /* process control */ #if !defined (WNOHANG) || !defined (WUNTRACED) exit(1); #endif /* Posix systems have tcgetpgrp and waitpid. */ #if defined (_POSIX_VERSION) && !defined (HAVE_TCGETPGRP) exit(1); #endif #if defined (_POSIX_VERSION) && !defined (HAVE_WAITPID) exit(1); #endif /* Other systems have TIOCSPGRP/TIOCGPRGP and wait3. */ #if !defined (_POSIX_VERSION) && !defined (HAVE_WAIT3) exit(1); #endif exit(0); }], bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing, [AC_MSG_WARN(cannot check job control if cross-compiling -- defaulting to missing) bash_cv_job_control_missing=missing] )]) AC_MSG_RESULT($bash_cv_job_control_missing) if test $bash_cv_job_control_missing = missing; then AC_DEFINE(JOB_CONTROL_MISSING) fi ]) dnl check whether named pipes are present dnl this requires a previous check for mkfifo, but that is awkward to specify AC_DEFUN(BASH_SYS_NAMED_PIPES, [AC_MSG_CHECKING(for presence of named pipes) AC_CACHE_VAL(bash_cv_sys_named_pipes, [AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif /* Add more tests in here as appropriate. */ main() { int fd, err; #if defined (HAVE_MKFIFO) exit (0); #endif #if !defined (S_IFIFO) && (defined (_POSIX_VERSION) && !defined (S_ISFIFO)) exit (1); #endif #if defined (NeXT) exit (1); #endif err = mkdir("bash-aclocal", 0700); if (err < 0) { perror ("mkdir"); exit(1); } fd = mknod ("bash-aclocal/sh-np-autoconf", 0666 | S_IFIFO, 0); if (fd == -1) { rmdir ("bash-aclocal"); exit (1); } close(fd); unlink ("bash-aclocal/sh-np-autoconf"); rmdir ("bash-aclocal"); exit(0); }], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing, [AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing) bash_cv_sys_named_pipes=missing] )]) AC_MSG_RESULT($bash_cv_sys_named_pipes) if test $bash_cv_sys_named_pipes = missing; then AC_DEFINE(NAMED_PIPES_MISSING) fi ]) AC_DEFUN(BASH_SYS_DEFAULT_MAIL_DIR, [AC_MSG_CHECKING(for default mail directory) AC_CACHE_VAL(bash_cv_mail_dir, [if test -d /var/mail; then bash_cv_mail_dir=/var/mail elif test -d /var/spool/mail; then bash_cv_mail_dir=/var/spool/mail elif test -d /usr/mail; then bash_cv_mail_dir=/usr/mail elif test -d /usr/spool/mail; then bash_cv_mail_dir=/usr/spool/mail else bash_cv_mail_dir=unknown fi ]) AC_MSG_RESULT($bash_cv_mail_dir) AC_DEFINE_UNQUOTED(DEFAULT_MAIL_DIRECTORY, "$bash_cv_mail_dir") ]) AC_DEFUN(BASH_HAVE_TIOCGWINSZ, [AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h) AC_CACHE_VAL(bash_cv_tiocgwinsz_in_ioctl, [AC_TRY_COMPILE([#include #include ], [int x = TIOCGWINSZ;], bash_cv_tiocgwinsz_in_ioctl=yes,bash_cv_tiocgwinsz_in_ioctl=no)]) AC_MSG_RESULT($bash_cv_tiocgwinsz_in_ioctl) if test $bash_cv_tiocgwinsz_in_ioctl = yes; then AC_DEFINE(GWINSZ_IN_SYS_IOCTL) fi ]) AC_DEFUN(BASH_HAVE_TIOCSTAT, [AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h) AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl, [AC_TRY_COMPILE([#include #include ], [int x = TIOCSTAT;], bash_cv_tiocstat_in_ioctl=yes,bash_cv_tiocstat_in_ioctl=no)]) AC_MSG_RESULT($bash_cv_tiocstat_in_ioctl) if test $bash_cv_tiocstat_in_ioctl = yes; then AC_DEFINE(TIOCSTAT_IN_SYS_IOCTL) fi ]) AC_DEFUN(BASH_HAVE_FIONREAD, [AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h) AC_CACHE_VAL(bash_cv_fionread_in_ioctl, [AC_TRY_COMPILE([#include #include ], [int x = FIONREAD;], bash_cv_fionread_in_ioctl=yes,bash_cv_fionread_in_ioctl=no)]) AC_MSG_RESULT($bash_cv_fionread_in_ioctl) if test $bash_cv_fionread_in_ioctl = yes; then AC_DEFINE(FIONREAD_IN_SYS_IOCTL) fi ]) dnl dnl See if speed_t is declared in . Some versions of linux dnl require a definition of speed_t each time is included, dnl but you can only get speed_t if you include (on some dnl versions) or (on others). dnl AC_DEFUN(BASH_CHECK_SPEED_T, [AC_MSG_CHECKING(for speed_t in sys/types.h) AC_CACHE_VAL(bash_cv_speed_t_in_sys_types, [AC_TRY_COMPILE([#include ], [speed_t x;], bash_cv_speed_t_in_sys_types=yes,bash_cv_speed_t_in_sys_types=no)]) AC_MSG_RESULT($bash_cv_speed_t_in_sys_types) if test $bash_cv_speed_t_in_sys_types = yes; then AC_DEFINE(SPEED_T_IN_SYS_TYPES) fi ]) AC_DEFUN(BASH_CHECK_GETPW_FUNCS, [AC_MSG_CHECKING(whether getpw functions are declared in pwd.h) AC_CACHE_VAL(bash_cv_getpw_declared, [AC_EGREP_CPP(getpwuid, [ #include #ifdef HAVE_UNISTD_H # include #endif #include ], bash_cv_getpw_declared=yes,bash_cv_getpw_declared=no)]) AC_MSG_RESULT($bash_cv_getpw_declared) if test $bash_cv_getpw_declared = yes; then AC_DEFINE(HAVE_GETPW_DECLS) fi ]) AC_DEFUN(BASH_CHECK_DEV_FD, [AC_MSG_CHECKING(whether /dev/fd is available) AC_CACHE_VAL(bash_cv_dev_fd, [bash_cv_dev_fd="" if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then # check for systems like FreeBSD 5 that only provide /dev/fd/[012] if (exec test -r /dev/fd/3 3 #include ], [ int f; f = RLIMIT_DATA; ], bash_cv_kernel_rlimit=no, [AC_TRY_COMPILE([ #include #define _KERNEL #include #undef _KERNEL ], [ int f; f = RLIMIT_DATA; ], bash_cv_kernel_rlimit=yes, bash_cv_kernel_rlimit=no)] )]) AC_MSG_RESULT($bash_cv_kernel_rlimit) if test $bash_cv_kernel_rlimit = yes; then AC_DEFINE(RLIMIT_NEEDS_KERNEL) fi ]) dnl dnl Check for 64-bit off_t -- used for malloc alignment dnl dnl C does not allow duplicate case labels, so the compile will fail if dnl sizeof(off_t) is > 4. dnl AC_DEFUN(BASH_CHECK_OFF_T_64, [AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64, AC_TRY_COMPILE([ #ifdef HAVE_UNISTD_H #include #endif #include ],[ switch (0) case 0: case (sizeof (off_t) <= 4):; ], bash_cv_off_t_64=no, bash_cv_off_t_64=yes)) if test $bash_cv_off_t_64 = yes; then AC_DEFINE(HAVE_OFF_T_64) fi]) AC_DEFUN(BASH_CHECK_RTSIGS, [AC_MSG_CHECKING(for unusable real-time signals due to large values) AC_CACHE_VAL(bash_cv_unusable_rtsigs, [AC_TRY_RUN([ #include #include #ifndef NSIG # define NSIG 64 #endif main () { int n_sigs = 2 * NSIG; #ifdef SIGRTMIN int rtmin = SIGRTMIN; #else int rtmin = 0; #endif exit(rtmin < n_sigs); }], bash_cv_unusable_rtsigs=yes, bash_cv_unusable_rtsigs=no, [AC_MSG_WARN(cannot check real-time signals if cross compiling -- defaulting to yes) bash_cv_unusable_rtsigs=yes] )]) AC_MSG_RESULT($bash_cv_unusable_rtsigs) if test $bash_cv_unusable_rtsigs = yes; then AC_DEFINE(UNUSABLE_RT_SIGNALS) fi ]) dnl dnl check for availability of multibyte characters and functions dnl dnl geez, I wish I didn't have to check for all of this stuff separately dnl AC_DEFUN(BASH_CHECK_MULTIBYTE, [ AC_CHECK_HEADERS(wctype.h) AC_CHECK_HEADERS(wchar.h) AC_CHECK_HEADERS(langinfo.h) AC_CHECK_FUNC(mbrlen, AC_DEFINE(HAVE_MBRLEN)) AC_CHECK_FUNC(mbscasecmp, AC_DEFINE(HAVE_MBSCMP)) AC_CHECK_FUNC(mbscmp, AC_DEFINE(HAVE_MBSCMP)) AC_CHECK_FUNC(mbsnrtowcs, AC_DEFINE(HAVE_MBSNRTOWCS)) AC_CHECK_FUNC(mbsrtowcs, AC_DEFINE(HAVE_MBSRTOWCS)) AC_REPLACE_FUNCS(mbschr) AC_CHECK_FUNC(wcrtomb, AC_DEFINE(HAVE_WCRTOMB)) AC_CHECK_FUNC(wcscoll, AC_DEFINE(HAVE_WCSCOLL)) AC_CHECK_FUNC(wcsdup, AC_DEFINE(HAVE_WCSDUP)) AC_CHECK_FUNC(wcwidth, AC_DEFINE(HAVE_WCWIDTH)) AC_CHECK_FUNC(wctype, AC_DEFINE(HAVE_WCTYPE)) AC_REPLACE_FUNCS(wcswidth) dnl checks for both mbrtowc and mbstate_t AC_FUNC_MBRTOWC if test $ac_cv_func_mbrtowc = yes; then AC_DEFINE(HAVE_MBSTATE_T) fi AC_CHECK_FUNCS(iswlower iswupper towlower towupper iswctype) AC_CACHE_CHECK([for nl_langinfo and CODESET], bash_cv_langinfo_codeset, [AC_TRY_LINK( [#include ], [char* cs = nl_langinfo(CODESET);], bash_cv_langinfo_codeset=yes, bash_cv_langinfo_codeset=no)]) if test $bash_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET) fi dnl check for wchar_t in AC_CACHE_CHECK([for wchar_t in wchar.h], bash_cv_type_wchar_t, [AC_TRY_COMPILE( [#include ], [ wchar_t foo; foo = 0; ], bash_cv_type_wchar_t=yes, bash_cv_type_wchar_t=no)]) if test $bash_cv_type_wchar_t = yes; then AC_DEFINE(HAVE_WCHAR_T, 1, [systems should define this type here]) fi dnl check for wctype_t in AC_CACHE_CHECK([for wctype_t in wctype.h], bash_cv_type_wctype_t, [AC_TRY_COMPILE( [#include ], [ wctype_t foo; foo = 0; ], bash_cv_type_wctype_t=yes, bash_cv_type_wctype_t=no)]) if test $bash_cv_type_wctype_t = yes; then AC_DEFINE(HAVE_WCTYPE_T, 1, [systems should define this type here]) fi dnl check for wint_t in AC_CACHE_CHECK([for wint_t in wctype.h], bash_cv_type_wint_t, [AC_TRY_COMPILE( [#include ], [ wint_t foo; foo = 0; ], bash_cv_type_wint_t=yes, bash_cv_type_wint_t=no)]) if test $bash_cv_type_wint_t = yes; then AC_DEFINE(HAVE_WINT_T, 1, [systems should define this type here]) fi dnl check for broken wcwidth AC_CACHE_CHECK([for wcwidth broken with unicode combining characters], bash_cv_wcwidth_broken, [AC_TRY_RUN([ #include #include #include #include #include main(c, v) int c; char **v; { int w; setlocale(LC_ALL, "en_US.UTF-8"); w = wcwidth (0x0301); exit (w == 0); /* exit 0 if wcwidth broken */ } ], bash_cv_wcwidth_broken=yes, bash_cv_wcwdith_broken=no, bash_cv_wcwidth_broken=no)]) if test "$bash_cv_wcwidth_broken" = yes; then AC_DEFINE(WCWIDTH_BROKEN, 1, [wcwidth is usually not broken]) fi if test "$am_cv_func_iconv" = yes; then OLDLIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_CHECK_FUNCS(locale_charset) LIBS="$OLDLIBS" fi ]) dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB dnl require: dnl AC_PROG_CC dnl BASH_CHECK_LIB_TERMCAP AC_DEFUN([RL_LIB_READLINE_VERSION], [ AC_REQUIRE([BASH_CHECK_LIB_TERMCAP]) AC_MSG_CHECKING([version of installed readline library]) # What a pain in the ass this is. # save cpp and ld options _save_CFLAGS="$CFLAGS" _save_LDFLAGS="$LDFLAGS" _save_LIBS="$LIBS" # Don't set ac_cv_rl_prefix if the caller has already assigned a value. This # allows the caller to do something like $_rl_prefix=$withval if the user # specifies --with-installed-readline=PREFIX as an argument to configure if test -z "$ac_cv_rl_prefix"; then test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix} fi eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib LIBS="$LIBS -lreadline ${TERMCAP_LIB}" CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" AC_CACHE_VAL(ac_cv_rl_version, [AC_TRY_RUN([ #include #include extern int rl_gnu_readline_p; main() { FILE *fp; fp = fopen("conftest.rlv", "w"); if (fp == 0) exit(1); if (rl_gnu_readline_p != 1) fprintf(fp, "0.0\n"); else fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0"); fclose(fp); exit(0); } ], ac_cv_rl_version=`cat conftest.rlv`, ac_cv_rl_version='0.0', ac_cv_rl_version='4.2')]) CFLAGS="$_save_CFLAGS" LDFLAGS="$_save_LDFLAGS" LIBS="$_save_LIBS" RL_MAJOR=0 RL_MINOR=0 # ( case "$ac_cv_rl_version" in 2*|3*|4*|5*|6*|7*|8*|9*) RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'` RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[[a-zA-Z]]*$::'` ;; esac # ((( case $RL_MAJOR in [[0-9][0-9]]) _RL_MAJOR=$RL_MAJOR ;; [[0-9]]) _RL_MAJOR=0$RL_MAJOR ;; *) _RL_MAJOR=00 ;; esac # ((( case $RL_MINOR in [[0-9][0-9]]) _RL_MINOR=$RL_MINOR ;; [[0-9]]) _RL_MINOR=0$RL_MINOR ;; *) _RL_MINOR=00 ;; esac RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}" # Readline versions greater than 4.2 have these defines in readline.h if test $ac_cv_rl_version = '0.0' ; then AC_MSG_WARN([Could not test version of installed readline library.]) elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) else AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library]) AC_SUBST(RL_VERSION) AC_SUBST(RL_MAJOR) AC_SUBST(RL_MINOR) # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) fi ]) AC_DEFUN(BASH_FUNC_CTYPE_NONASCII, [ AC_MSG_CHECKING(whether the ctype macros accept non-ascii characters) AC_CACHE_VAL(bash_cv_func_ctype_nonascii, [AC_TRY_RUN([ #ifdef HAVE_LOCALE_H #include #endif #include #include main(c, v) int c; char *v[]; { char *deflocale; unsigned char x; int r1, r2; #ifdef HAVE_SETLOCALE /* We take a shot here. If that locale is not known, try the system default. We try this one because '\342' (226) is known to be a printable character in that locale. */ deflocale = setlocale(LC_ALL, "en_US.ISO8859-1"); if (deflocale == 0) deflocale = setlocale(LC_ALL, ""); #endif x = '\342'; r1 = isprint(x); x -= 128; r2 = isprint(x); exit (r1 == 0 || r2 == 0); } ], bash_cv_func_ctype_nonascii=yes, bash_cv_func_ctype_nonascii=no, [AC_MSG_WARN(cannot check ctype macros if cross compiling -- defaulting to no) bash_cv_func_ctype_nonascii=no] )]) AC_MSG_RESULT($bash_cv_func_ctype_nonascii) if test $bash_cv_func_ctype_nonascii = yes; then AC_DEFINE(CTYPE_NON_ASCII) fi ]) AC_DEFUN(BASH_CHECK_WCONTINUED, [ AC_MSG_CHECKING(whether WCONTINUED flag to waitpid is unavailable or available but broken) AC_CACHE_VAL(bash_cv_wcontinued_broken, [AC_TRY_RUN([ #include #include #include #include #ifndef errno extern int errno; #endif main() { int x; x = waitpid(-1, (int *)0, WNOHANG|WCONTINUED); if (x == -1 && errno == EINVAL) exit (1); else exit (0); } ], bash_cv_wcontinued_broken=no,bash_cv_wcontinued_broken=yes, [AC_MSG_WARN(cannot check WCONTINUED if cross compiling -- defaulting to no) bash_cv_wcontinued_broken=no] )]) AC_MSG_RESULT($bash_cv_wcontinued_broken) if test $bash_cv_wcontinued_broken = yes; then AC_DEFINE(WCONTINUED_BROKEN) fi ]) dnl dnl tests added for bashdb dnl AC_DEFUN([AM_PATH_LISPDIR], [AC_ARG_WITH(lispdir, AC_HELP_STRING([--with-lispdir], [override the default lisp directory]), [ lispdir="$withval" AC_MSG_CHECKING([where .elc files should go]) AC_MSG_RESULT([$lispdir])], [ # If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test x"$EMACS" = xt && EMACS= AC_CHECK_PROGS(EMACS, emacs xemacs, no) if test $EMACS != "no"; then if test x${lispdir+set} != xset; then AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [dnl am_cv_lispdir=`$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' | sed -n -e 's,/$,,' -e '/.*\/lib\/\(x\?emacs\/site-lisp\)$/{s,,${libdir}/\1,;p;q;}' -e '/.*\/share\/\(x\?emacs\/site-lisp\)$/{s,,${datadir}/\1,;p;q;}'` if test -z "$am_cv_lispdir"; then am_cv_lispdir='${datadir}/emacs/site-lisp' fi ]) lispdir="$am_cv_lispdir" fi fi ]) AC_SUBST(lispdir) ]) dnl dnl tests added for gettext dnl # codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) # gettext.m4 serial 20 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define(gt_included_intl, ifelse([$1], [external], [no], [yes])) define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Set USE_NLS. AM_NLS ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext_libintl=yes ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale localeconv stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \ __fsetlocking]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then AM_LC_MESSAGES fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) # glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) # iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) # intdiv0.m4 serial 1 (gettext-0.11.3) dnl Copyright (C) 2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ AC_TRY_RUN([ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, [ # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac ]) ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, [Define if integer division by zero raises signal SIGFPE.]) ]) # inttypes.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H if exists and doesn't clash with # . AC_DEFUN([gt_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, [ AC_TRY_COMPILE( [#include #include ], [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) ]) if test $gt_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, [Define if exists and doesn't clash with .]) fi ]) # inttypes_h.m4 serial 5 (gettext-0.12) dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_inttypes_h=yes, jm_ac_cv_header_inttypes_h=no)]) if test $jm_ac_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) # inttypes-pri.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_REQUIRE([gt_HEADER_INTTYPES_H]) if test $gt_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], gt_cv_inttypes_pri_broken, [ AC_TRY_COMPILE([#include #ifdef PRId32 char *p = PRId32; #endif ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, [Define if exists and defines unusable PRI* macros.]) fi ]) # isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) # lcmessage.m4 serial 3 (gettext-0.11.3) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([AM_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) # lib-ld.m4 serial 2 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) # lib-link.m4 serial 4 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test "X$prefer_shared" = "Xyes" && test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test "X$prefer_shared" = "Xyes" && test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) # lib-prefix.m4 serial 2 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) # nls.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate it. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) # po.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AM_NLS])dnl dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) # progtest.m4 serial 3 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # stdint_h.m4 serial 3 (gettext-0.12) dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_stdint_h=yes, jm_ac_cv_header_stdint_h=no)]) if test $jm_ac_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) # uintmax_t.m4 serial 7 (gettext-0.12) dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_PREREQ(2.13) # Define uintmax_t to 'unsigned long' or 'unsigned long long' # if it is not already defined in or . AC_DEFUN([jm_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) AC_REQUIRE([jm_AC_HEADER_STDINT_H]) if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, [Define to unsigned long or unsigned long long if and don't define.]) else AC_DEFINE(HAVE_UINTMAX_T, 1, [Define if you have the 'uintmax_t' type in or .]) fi ]) # ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40) dnl Copyright (C) 1999-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], [ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;], [unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull;], ac_cv_type_unsigned_long_long=yes, ac_cv_type_unsigned_long_long=no)]) if test $ac_cv_type_unsigned_long_long = yes; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, [Define if you have the unsigned long long type.]) fi ]) dnl From gnulib AC_DEFUN([BASH_FUNC_FPURGE], [ AC_CHECK_FUNCS_ONCE([fpurge]) AC_CHECK_FUNCS_ONCE([__fpurge]) AC_CHECK_DECLS([fpurge], , , [#include ]) ]) AC_DEFUN([BASH_FUNC_SNPRINTF], [ AC_CHECK_FUNCS_ONCE([snprintf]) if test X$ac_cv_func_snprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant snprintf], [bash_cv_func_snprintf], [AC_TRY_RUN([ #include main() { int n; n = snprintf (0, 0, "%s", "0123456"); exit(n != 7); } ], bash_cv_func_snprintf=yes, bash_cv_func_snprintf=no, [AC_MSG_WARN([cannot check standard snprintf if cross-compiling]) bash_cv_func_snprintf=yes] )]) if test $bash_cv_func_snprintf = no; then ac_cv_func_snprintf=no fi fi if test $ac_cv_func_snprintf = no; then AC_DEFINE(HAVE_SNPRINTF, 0, [Define if you have a standard-conformant snprintf function.]) fi ]) AC_DEFUN([BASH_FUNC_VSNPRINTF], [ AC_CHECK_FUNCS_ONCE([vsnprintf]) if test X$ac_cv_func_vsnprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant vsnprintf], [bash_cv_func_vsnprintf], [AC_TRY_RUN([ #if HAVE_STDARG_H #include #else #include #endif #include #include static int #if HAVE_STDARG_H foo(const char *fmt, ...) #else foo(format, va_alist) const char *format; va_dcl #endif { va_list args; int n; #if HAVE_STDARG_H va_start(args, fmt); #else va_start(args); #endif n = vsnprintf(0, 0, fmt, args); va_end (args); return n; } main() { int n; n = foo("%s", "0123456"); exit(n != 7); } ], bash_cv_func_vsnprintf=yes, bash_cv_func_vsnprintf=no, [AC_MSG_WARN([cannot check standard vsnprintf if cross-compiling]) bash_cv_func_vsnprintf=yes] )]) if test $bash_cv_func_vsnprintf = no; then ac_cv_func_vsnprintf=no fi fi if test $ac_cv_func_vsnprintf = no; then AC_DEFINE(HAVE_VSNPRINTF, 0, [Define if you have a standard-conformant vsnprintf function.]) fi ]) AC_DEFUN(BASH_STRUCT_WEXITSTATUS_OFFSET, [AC_MSG_CHECKING(for offset of exit status in return status from wait) AC_CACHE_VAL(bash_cv_wexitstatus_offset, [AC_TRY_RUN([ #include #include #include main(c, v) int c; char **v; { pid_t pid, p; int s, i, n; s = 0; pid = fork(); if (pid == 0) exit (42); /* wait for the process */ p = wait(&s); if (p != pid) exit (255); /* crack s */ for (i = 0; i < (sizeof(s) - 8); i++) { n = (s >> i) & 0xff; if (n == 42) exit (i); } exit (254); } ], bash_cv_wexitstatus_offset=0, bash_cv_wexitstatus_offset=$?, [AC_MSG_WARN(cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0) bash_cv_wexitstatus_offset=0] )]) if test "$bash_cv_wexitstatus_offset" -gt 32 ; then AC_MSG_WARN(bad exit status from test program -- defaulting to 0) bash_cv_wexitstatus_offset=0 fi AC_MSG_RESULT($bash_cv_wexitstatus_offset) AC_DEFINE_UNQUOTED([WEXITSTATUS_OFFSET], [$bash_cv_wexitstatus_offset], [Offset of exit status in wait status word]) ]) readline-6.3/config.h.in0000664000043600000240000001404011705561645014004 0ustar chetstaff/* config.h.in. Maintained by hand. */ /* Define NO_MULTIBYTE_SUPPORT to not compile in support for multibyte characters, even if the OS supports them. */ #undef NO_MULTIBYTE_SUPPORT #undef _FILE_OFFSET_BITS /* Define if on MINIX. */ #undef _MINIX /* Define as the return type of signal handlers (int or void). */ #undef RETSIGTYPE #undef VOID_SIGHANDLER /* Characteristics of the compiler. */ #undef sig_atomic_t #undef size_t #undef ssize_t #undef const #undef volatile #undef PROTOTYPES #undef __CHAR_UNSIGNED__ /* Define if the `S_IS*' macros in do not work properly. */ #undef STAT_MACROS_BROKEN /* Define if you have the fcntl function. */ #undef HAVE_FCNTL /* Define if you have the getpwent function. */ #undef HAVE_GETPWENT /* Define if you have the getpwnam function. */ #undef HAVE_GETPWNAM /* Define if you have the getpwuid function. */ #undef HAVE_GETPWUID /* Define if you have the isascii function. */ #undef HAVE_ISASCII /* Define if you have the iswctype function. */ #undef HAVE_ISWCTYPE /* Define if you have the iswlower function. */ #undef HAVE_ISWLOWER /* Define if you have the iswupper function. */ #undef HAVE_ISWUPPER /* Define if you have the isxdigit function. */ #undef HAVE_ISXDIGIT /* Define if you have the kill function. */ #undef HAVE_KILL /* Define if you have the lstat function. */ #undef HAVE_LSTAT /* Define if you have the mbrlen function. */ #undef HAVE_MBRLEN /* Define if you have the mbrtowc function. */ #undef HAVE_MBRTOWC /* Define if you have the mbsrtowcs function. */ #undef HAVE_MBSRTOWCS /* Define if you have the memmove function. */ #undef HAVE_MEMMOVE /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the select function. */ #undef HAVE_SELECT /* Define if you have the setenv function. */ #undef HAVE_SETENV /* Define if you have the setlocale function. */ #undef HAVE_SETLOCALE /* Define if you have the strcasecmp function. */ #undef HAVE_STRCASECMP /* Define if you have the strcoll function. */ #undef HAVE_STRCOLL #undef STRCOLL_BROKEN /* Define if you have the strpbrk function. */ #undef HAVE_STRPBRK /* Define if you have the tcgetattr function. */ #undef HAVE_TCGETATTR /* Define if you have the towlower function. */ #undef HAVE_TOWLOWER /* Define if you have the towupper function. */ #undef HAVE_TOWUPPER /* Define if you have the vsnprintf function. */ #undef HAVE_VSNPRINTF /* Define if you have the wcrtomb function. */ #undef HAVE_WCRTOMB /* Define if you have the wcscoll function. */ #undef HAVE_WCSCOLL /* Define if you have the wctype function. */ #undef HAVE_WCTYPE /* Define if you have the wcwidth function. */ #undef HAVE_WCWIDTH /* and whether it works */ #undef WCWIDTH_BROKEN #undef STDC_HEADERS /* Define if you have the header file. */ #undef HAVE_DIRENT_H /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_LANGINFO_H /* Define if you have the header file. */ #undef HAVE_LIMITS_H /* Define if you have the header file. */ #undef HAVE_LOCALE_H /* Define if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have the header file. */ #undef HAVE_NDIR_H /* Define if you have the header file. */ #undef HAVE_PWD_H /* Define if you have the header file. */ #undef HAVE_STDARG_H /* Define if you have the header file. */ #undef HAVE_STDBOOL_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_STRINGS_H /* Define if you have the header file. */ #undef HAVE_SYS_DIR_H /* Define if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define if you have the header file. */ #undef HAVE_SYS_NDIR_H /* Define if you have the header file. */ #undef HAVE_SYS_PTE_H /* Define if you have the header file. */ #undef HAVE_SYS_PTEM_H /* Define if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define if you have the header file. */ #undef HAVE_SYS_STREAM_H /* Define if you have the header file. */ #undef HAVE_TERMCAP_H /* Define if you have the header file. */ #undef HAVE_TERMIO_H /* Define if you have the header file. */ #undef HAVE_TERMIOS_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_VARARGS_H /* Define if you have the header file. */ #undef HAVE_WCHAR_H /* Define if you have the header file. */ #undef HAVE_WCTYPE_H #undef HAVE_MBSTATE_T /* Define if you have wchar_t in . */ #undef HAVE_WCHAR_T /* Define if you have wctype_t in . */ #undef HAVE_WCTYPE_T /* Define if you have wint_t in . */ #undef HAVE_WINT_T /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if you have and it defines AUDIT_USER_TTY */ #undef HAVE_DECL_AUDIT_USER_TTY /* Definitions pulled in from aclocal.m4. */ #undef VOID_SIGHANDLER #undef GWINSZ_IN_SYS_IOCTL #undef STRUCT_WINSIZE_IN_SYS_IOCTL #undef STRUCT_WINSIZE_IN_TERMIOS #undef TIOCSTAT_IN_SYS_IOCTL #undef FIONREAD_IN_SYS_IOCTL #undef SPEED_T_IN_SYS_TYPES #undef HAVE_GETPW_DECLS #undef STRUCT_DIRENT_HAS_D_INO #undef STRUCT_DIRENT_HAS_D_FILENO #undef HAVE_BSD_SIGNALS #undef HAVE_POSIX_SIGNALS #undef HAVE_USG_SIGHOLD #undef MUST_REINSTALL_SIGHANDLERS #undef HAVE_POSIX_SIGSETJMP #undef CTYPE_NON_ASCII /* modify settings or make new ones based on what autoconf tells us. */ /* Ultrix botches type-ahead when switching from canonical to non-canonical mode, at least through version 4.3 */ #if !defined (HAVE_TERMIOS_H) || !defined (HAVE_TCGETATTR) || defined (ultrix) # define TERMIOS_MISSING #endif /* VARARGS defines moved to rlstdc.h */ readline-6.3/configure0000775000043600000000000064454612120104735013670 0ustar chetwheel#! /bin/sh # From configure.ac for Readline 6.3, version 2.73. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for readline 6.3. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: bug-readline@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='readline' PACKAGE_TARNAME='readline' PACKAGE_VERSION='6.3' PACKAGE_STRING='readline 6.3' PACKAGE_BUGREPORT='bug-readline@gnu.org' PACKAGE_URL='' ac_unique_file="readline.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS TERMCAP_LIB LIBVERSION ARFLAGS LOCAL_DEFS LOCAL_LDFLAGS LOCAL_CFLAGS BUILD_DIR PURIFY SHARED_INSTALL_TARGET STATIC_INSTALL_TARGET SHARED_TARGET STATIC_TARGET SHLIB_MINOR SHLIB_MAJOR SHLIB_LIBS SHLIB_DLLVERSION SHLIB_LIBVERSION SHLIB_LIBSUFF SHLIB_LIBPREF SHLIB_DOT SHLIB_XLDFLAGS SHLIB_STATUS SHOBJ_STATUS SHOBJ_LIBS SHOBJ_XLDFLAGS SHOBJ_LDFLAGS SHOBJ_LD SHOBJ_CFLAGS SHOBJ_CC LIBOBJS MAKE_SHELL RANLIB AR INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC SET_MAKE CROSS_COMPILE host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_curses with_purify enable_multibyte enable_shared enable_static enable_largefile ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures readline 6.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/readline] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of readline 6.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-multibyte enable multibyte characters if OS supports them --enable-shared build shared libraries [[default=YES]] --enable-static build static libraries [[default=YES]] --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-curses use the curses library instead of the termcap library --with-purify configure to postprocess with purify Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF readline configure 6.3 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to bug-readline@gnu.org ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by readline $as_me 6.3, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in ./support "$srcdir"/./support; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in ./support \"$srcdir\"/./support" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" LIBVERSION=6.3 # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac opt_curses=no opt_purify=no # Check whether --with-curses was given. if test "${with_curses+set}" = set; then : withval=$with_curses; opt_curses=$withval fi # Check whether --with-purify was given. if test "${with_purify+set}" = set; then : withval=$with_purify; opt_purify=$withval fi if test "$opt_curses" = "yes"; then prefer_curses=yes fi if test "$opt_purify" = yes; then PURIFY="purify" else PURIFY= fi opt_multibyte=yes opt_static_libs=yes opt_shared_libs=yes # Check whether --enable-multibyte was given. if test "${enable_multibyte+set}" = set; then : enableval=$enable_multibyte; opt_multibyte=$enableval fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; opt_shared_libs=$enableval fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; opt_static_libs=$enableval fi if test $opt_multibyte = no; then $as_echo "#define NO_MULTIBYTE_SUPPORT 1" >>confdefs.h fi CROSS_COMPILE= if test "x$cross_compiling" = "xyes"; then case "${host}" in *-cygwin*) cross_cache=${srcdir}/cross-build/cygwin.cache ;; *-mingw*) cross_cache=${srcdir}/cross-build/mingw.cache ;; i[3456]86-*-beos*) cross_cache=${srcdir}/cross-build/x86-beos.cache ;; *) echo "configure: cross-compiling for $host is not supported" >&2 ;; esac if test -n "${cross_cache}" && test -r "${cross_cache}"; then echo "loading cross-build cache file ${cross_cache}" . ${cross_cache} fi unset cross_cache CROSS_COMPILE='-DCROSS_COMPILING' fi echo "" echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}" echo "" # We want these before the checks, so the checks can modify their values. test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS. test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -n "$ARFLAGS" || ARFLAGS="cr" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi MAKE_SHELL=/bin/sh { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 $as_echo_n "checking for function prototypes... " >&6; } if test "$ac_cv_prog_cc_c89" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define PROTOTYPES 1" >>confdefs.h $as_echo "#define __PROTOTYPES 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 $as_echo_n "checking whether char is unsigned... " >&6; } if ${ac_cv_c_char_unsigned+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_char_unsigned=no else ac_cv_c_char_unsigned=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 $as_echo "$ac_cv_c_char_unsigned" >&6; } if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } if ${ac_cv_header_stat_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stat_broken=no else ac_cv_header_stat_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 $as_echo "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then $as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi for ac_func in fcntl kill lstat do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memmove putenv select setenv setlocale \ strcasecmp strpbrk tcgetattr vsnprintf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in isascii isxdigit do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpwent getpwnam getpwuid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5 $as_echo_n "checking for working strcoll... " >&6; } if ${ac_cv_func_strcoll_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_strcoll_works=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { return (strcoll ("abc", "def") >= 0 || strcoll ("ABC", "DEF") >= 0 || strcoll ("123", "456") >= 0) ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strcoll_works=yes else ac_cv_func_strcoll_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5 $as_echo "$ac_cv_func_strcoll_works" >&6; } if test $ac_cv_func_strcoll_works = yes; then $as_echo "#define HAVE_STRCOLL 1" >>confdefs.h fi for ac_header in fcntl.h unistd.h stdlib.h varargs.h stdarg.h stdbool.h \ string.h strings.h \ limits.h locale.h pwd.h memory.h termcap.h termios.h termio.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/pte.h sys/stream.h sys/select.h sys/file.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/ptem.h do : ac_fn_c_check_header_compile "$LINENO" "sys/ptem.h" "ac_cv_header_sys_ptem_h" " #if HAVE_SYS_STREAM_H # include #endif " if test "x$ac_cv_header_sys_ptem_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PTEM_H 1 _ACEOF fi done # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5 $as_echo_n "checking for type of signal functions... " >&6; } if ${bash_cv_signal_vintage+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { sigset_t ss; struct sigaction sa; sigemptyset(&ss); sigsuspend(&ss); sigaction(SIGINT, &sa, (struct sigaction *) 0); sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_signal_vintage=posix else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int mask = sigmask(SIGINT); sigsetmask(mask); sigblock(mask); sigpause(mask); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_signal_vintage=4.2bsd else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include RETSIGTYPE foo() { } int main () { int mask = sigmask(SIGINT); sigset(SIGINT, foo); sigrelse(SIGINT); sighold(SIGINT); sigpause(SIGINT); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_signal_vintage=svr3 else bash_cv_signal_vintage=v7 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5 $as_echo "$bash_cv_signal_vintage" >&6; } if test "$bash_cv_signal_vintage" = posix; then $as_echo "#define HAVE_POSIX_SIGNALS 1" >>confdefs.h elif test "$bash_cv_signal_vintage" = "4.2bsd"; then $as_echo "#define HAVE_BSD_SIGNALS 1" >>confdefs.h elif test "$bash_cv_signal_vintage" = svr3; then $as_echo "#define HAVE_USG_SIGHOLD 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal handlers must be reinstalled when invoked" >&5 $as_echo_n "checking if signal handlers must be reinstalled when invoked... " >&6; } if ${bash_cv_must_reinstall_sighandlers+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5 $as_echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;} bash_cv_must_reinstall_sighandlers=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_UNISTD_H #include #endif typedef RETSIGTYPE sigfunc(); int nsigint; #ifdef HAVE_POSIX_SIGNALS sigfunc * set_signal_handler(sig, handler) int sig; sigfunc *handler; { struct sigaction act, oact; act.sa_handler = handler; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigemptyset (&oact.sa_mask); sigaction (sig, &act, &oact); return (oact.sa_handler); } #else #define set_signal_handler(s, h) signal(s, h) #endif RETSIGTYPE sigint(s) int s; { nsigint++; } main() { nsigint = 0; set_signal_handler(SIGINT, sigint); kill((int)getpid(), SIGINT); kill((int)getpid(), SIGINT); exit(nsigint != 2); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_must_reinstall_sighandlers=no else bash_cv_must_reinstall_sighandlers=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5 $as_echo "$bash_cv_must_reinstall_sighandlers" >&6; } if test $bash_cv_must_reinstall_sighandlers = yes; then $as_echo "#define MUST_REINSTALL_SIGHANDLERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 $as_echo_n "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; } if ${bash_cv_func_sigsetjmp+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&5 $as_echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&2;} bash_cv_func_sigsetjmp=missing else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_UNISTD_H #include #endif #include #include #include main() { #if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS) exit (1); #else int code; sigset_t set, oset; sigjmp_buf xx; /* get the mask */ sigemptyset(&set); sigemptyset(&oset); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset); /* save it */ code = sigsetjmp(xx, 1); if (code) exit(0); /* could get sigmask and compare to oset here. */ /* change it */ sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); /* and siglongjmp */ siglongjmp(xx, 10); exit(1); #endif } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_func_sigsetjmp=present else bash_cv_func_sigsetjmp=missing fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5 $as_echo "$bash_cv_func_sigsetjmp" >&6; } if test $bash_cv_func_sigsetjmp = present; then $as_echo "#define HAVE_POSIX_SIGSETJMP 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lstat" >&5 $as_echo_n "checking for lstat... " >&6; } if ${bash_cv_func_lstat+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { lstat(".",(struct stat *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_func_lstat=yes else bash_cv_func_lstat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5 $as_echo "$bash_cv_func_lstat" >&6; } if test $bash_cv_func_lstat = yes; then $as_echo "#define HAVE_LSTAT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not strcoll and strcmp differ" >&5 $as_echo_n "checking whether or not strcoll and strcmp differ... " >&6; } if ${bash_cv_func_strcoll_broken+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5 $as_echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;} bash_cv_func_strcoll_broken=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if defined (HAVE_LOCALE_H) #include #endif main(c, v) int c; char *v[]; { int r1, r2; char *deflocale, *defcoll; #ifdef HAVE_SETLOCALE deflocale = setlocale(LC_ALL, ""); defcoll = setlocale(LC_COLLATE, ""); #endif #ifdef HAVE_STRCOLL /* These two values are taken from tests/glob-test. */ r1 = strcoll("abd", "aXd"); #else r1 = 0; #endif r2 = strcmp("abd", "aXd"); /* These two should both be greater than 0. It is permissible for a system to return different values, as long as the sign is the same. */ /* Exit with 1 (failure) if these two values are both > 0, since this tests whether strcoll(3) is broken with respect to strcmp(3) in the default locale. */ exit (r1 > 0 && r2 > 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_func_strcoll_broken=yes else bash_cv_func_strcoll_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5 $as_echo "$bash_cv_func_strcoll_broken" >&6; } if test $bash_cv_func_strcoll_broken = yes; then $as_echo "#define STRCOLL_BROKEN 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the ctype macros accept non-ascii characters" >&5 $as_echo_n "checking whether the ctype macros accept non-ascii characters... " >&6; } if ${bash_cv_func_ctype_nonascii+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&5 $as_echo "$as_me: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&2;} bash_cv_func_ctype_nonascii=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_LOCALE_H #include #endif #include #include main(c, v) int c; char *v[]; { char *deflocale; unsigned char x; int r1, r2; #ifdef HAVE_SETLOCALE /* We take a shot here. If that locale is not known, try the system default. We try this one because '\342' (226) is known to be a printable character in that locale. */ deflocale = setlocale(LC_ALL, "en_US.ISO8859-1"); if (deflocale == 0) deflocale = setlocale(LC_ALL, ""); #endif x = '\342'; r1 = isprint(x); x -= 128; r2 = isprint(x); exit (r1 == 0 || r2 == 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_func_ctype_nonascii=yes else bash_cv_func_ctype_nonascii=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_ctype_nonascii" >&5 $as_echo "$bash_cv_func_ctype_nonascii" >&6; } if test $bash_cv_func_ctype_nonascii = yes; then $as_echo "#define CTYPE_NON_ASCII 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpw functions are declared in pwd.h" >&5 $as_echo_n "checking whether getpw functions are declared in pwd.h... " >&6; } if ${bash_cv_getpw_declared+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_UNISTD_H # include #endif #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "getpwuid" >/dev/null 2>&1; then : bash_cv_getpw_declared=yes else bash_cv_getpw_declared=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5 $as_echo "$bash_cv_getpw_declared" >&6; } if test $bash_cv_getpw_declared = yes; then $as_echo "#define HAVE_GETPW_DECLS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 $as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ac_cv_sys_tiocgwinsz_in_termios_h=yes else ac_cv_sys_tiocgwinsz_in_termios_h=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 $as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 $as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes else ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 $as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then $as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5 $as_echo_n "checking for sig_atomic_t in signal.h... " >&6; } if ${ac_cv_have_sig_atomic_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { sig_atomic_t x; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_have_sig_atomic_t=yes else ac_cv_have_sig_atomic_t=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5 $as_echo "$ac_cv_have_sig_atomic_t" >&6; } if test "$ac_cv_have_sig_atomic_t" = "no" then ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default" if test "x$ac_cv_type_sig_atomic_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define sig_atomic_t int _ACEOF fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether signal handlers are of type void" >&5 $as_echo_n "checking whether signal handlers are of type void... " >&6; } if ${bash_cv_void_sighandler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" #endif void (*signal ()) (); int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_void_sighandler=yes else bash_cv_void_sighandler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_void_sighandler" >&5 $as_echo "$bash_cv_void_sighandler" >&6; } if test $bash_cv_void_sighandler = yes; then $as_echo "#define VOID_SIGHANDLER 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5 $as_echo_n "checking for TIOCSTAT in sys/ioctl.h... " >&6; } if ${bash_cv_tiocstat_in_ioctl+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int x = TIOCSTAT; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_tiocstat_in_ioctl=yes else bash_cv_tiocstat_in_ioctl=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5 $as_echo "$bash_cv_tiocstat_in_ioctl" >&6; } if test $bash_cv_tiocstat_in_ioctl = yes; then $as_echo "#define TIOCSTAT_IN_SYS_IOCTL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5 $as_echo_n "checking for FIONREAD in sys/ioctl.h... " >&6; } if ${bash_cv_fionread_in_ioctl+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int x = FIONREAD; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_fionread_in_ioctl=yes else bash_cv_fionread_in_ioctl=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5 $as_echo "$bash_cv_fionread_in_ioctl" >&6; } if test $bash_cv_fionread_in_ioctl = yes; then $as_echo "#define FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for speed_t in sys/types.h" >&5 $as_echo_n "checking for speed_t in sys/types.h... " >&6; } if ${bash_cv_speed_t_in_sys_types+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { speed_t x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_speed_t_in_sys_types=yes else bash_cv_speed_t_in_sys_types=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5 $as_echo "$bash_cv_speed_t_in_sys_types" >&6; } if test $bash_cv_speed_t_in_sys_types = yes; then $as_echo "#define SPEED_T_IN_SYS_TYPES 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct winsize in sys/ioctl.h and termios.h" >&5 $as_echo_n "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; } if ${bash_cv_struct_winsize_header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct winsize x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_struct_winsize_header=ioctl_h else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct winsize x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_struct_winsize_header=termios_h else bash_cv_struct_winsize_header=other fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bash_cv_struct_winsize_header = ioctl_h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: sys/ioctl.h" >&5 $as_echo "sys/ioctl.h" >&6; } $as_echo "#define STRUCT_WINSIZE_IN_SYS_IOCTL 1" >>confdefs.h elif test $bash_cv_struct_winsize_header = termios_h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: termios.h" >&5 $as_echo "termios.h" >&6; } $as_echo "#define STRUCT_WINSIZE_IN_TERMIOS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_ino" >&5 $as_echo_n "checking for struct dirent.d_ino... " >&6; } if ${bash_cv_dirent_has_dino+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ int main () { struct dirent d; int z; z = d.d_ino; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_dirent_has_dino=yes else bash_cv_dirent_has_dino=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_dino" >&5 $as_echo "$bash_cv_dirent_has_dino" >&6; } if test $bash_cv_dirent_has_dino = yes; then $as_echo "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_fileno" >&5 $as_echo_n "checking for struct dirent.d_fileno... " >&6; } if ${bash_cv_dirent_has_d_fileno+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ int main () { struct dirent d; int z; z = d.d_fileno; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_dirent_has_d_fileno=yes else bash_cv_dirent_has_d_fileno=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5 $as_echo "$bash_cv_dirent_has_d_fileno" >&6; } if test $bash_cv_dirent_has_d_fileno = yes; then $as_echo "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h fi ac_fn_c_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include " if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl _ACEOF case "$host_os" in aix*) prefer_curses=yes ;; esac if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 $as_echo_n "checking which library has the termcap functions... " >&6; } _bash_needmsg= fi if ${bash_cv_termcap_lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" if test "x$ac_cv_func_tgetent" = xyes; then : bash_cv_termcap_lib=libc else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 $as_echo_n "checking for tgetent in -ltermcap... " >&6; } if ${ac_cv_lib_termcap_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_termcap_tgetent=yes else ac_cv_lib_termcap_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 $as_echo "$ac_cv_lib_termcap_tgetent" >&6; } if test "x$ac_cv_lib_termcap_tgetent" = xyes; then : bash_cv_termcap_lib=libtermcap else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 $as_echo_n "checking for tgetent in -ltinfo... " >&6; } if ${ac_cv_lib_tinfo_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltinfo $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tinfo_tgetent=yes else ac_cv_lib_tinfo_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 $as_echo "$ac_cv_lib_tinfo_tgetent" >&6; } if test "x$ac_cv_lib_tinfo_tgetent" = xyes; then : bash_cv_termcap_lib=libtinfo else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 $as_echo_n "checking for tgetent in -lcurses... " >&6; } if ${ac_cv_lib_curses_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_curses_tgetent=yes else ac_cv_lib_curses_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 $as_echo "$ac_cv_lib_curses_tgetent" >&6; } if test "x$ac_cv_lib_curses_tgetent" = xyes; then : bash_cv_termcap_lib=libcurses else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 $as_echo_n "checking for tgetent in -lncurses... " >&6; } if ${ac_cv_lib_ncurses_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ncurses_tgetent=yes else ac_cv_lib_ncurses_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 $as_echo "$ac_cv_lib_ncurses_tgetent" >&6; } if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then : bash_cv_termcap_lib=libncurses else bash_cv_termcap_lib=gnutermcap fi fi fi fi fi fi if test "X$_bash_needmsg" = "Xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 $as_echo_n "checking which library has the termcap functions... " >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5 $as_echo "using $bash_cv_termcap_lib" >&6; } if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" TERMCAP_DEP="./lib/termcap/libtermcap.a" elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then TERMCAP_LIB=-ltermcap TERMCAP_DEP= elif test $bash_cv_termcap_lib = libtinfo; then TERMCAP_LIB=-ltinfo TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= else TERMCAP_LIB=-lcurses TERMCAP_DEP= fi if test "$TERMCAP_LIB" = "./lib/termcap/libtermcap.a"; then if test "$prefer_curses" = yes; then TERMCAP_LIB=-lcurses else TERMCAP_LIB=-ltermcap #default fi fi for ac_header in wctype.h do : ac_fn_c_check_header_mongrel "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" if test "x$ac_cv_header_wctype_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WCTYPE_H 1 _ACEOF fi done for ac_header in wchar.h do : ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" if test "x$ac_cv_header_wchar_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WCHAR_H 1 _ACEOF fi done for ac_header in langinfo.h do : ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" if test "x$ac_cv_header_langinfo_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LANGINFO_H 1 _ACEOF fi done ac_fn_c_check_func "$LINENO" "mbrlen" "ac_cv_func_mbrlen" if test "x$ac_cv_func_mbrlen" = xyes; then : $as_echo "#define HAVE_MBRLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbscasecmp" "ac_cv_func_mbscasecmp" if test "x$ac_cv_func_mbscasecmp" = xyes; then : $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbscmp" "ac_cv_func_mbscmp" if test "x$ac_cv_func_mbscmp" = xyes; then : $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbsnrtowcs" "ac_cv_func_mbsnrtowcs" if test "x$ac_cv_func_mbsnrtowcs" = xyes; then : $as_echo "#define HAVE_MBSNRTOWCS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbsrtowcs" "ac_cv_func_mbsrtowcs" if test "x$ac_cv_func_mbsrtowcs" = xyes; then : $as_echo "#define HAVE_MBSRTOWCS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbschr" "ac_cv_func_mbschr" if test "x$ac_cv_func_mbschr" = xyes; then : $as_echo "#define HAVE_MBSCHR 1" >>confdefs.h else case " $LIBOBJS " in *" mbschr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mbschr.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" if test "x$ac_cv_func_wcrtomb" = xyes; then : $as_echo "#define HAVE_WCRTOMB 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll" if test "x$ac_cv_func_wcscoll" = xyes; then : $as_echo "#define HAVE_WCSCOLL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcsdup" "ac_cv_func_wcsdup" if test "x$ac_cv_func_wcsdup" = xyes; then : $as_echo "#define HAVE_WCSDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" if test "x$ac_cv_func_wcwidth" = xyes; then : $as_echo "#define HAVE_WCWIDTH 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wctype" "ac_cv_func_wctype" if test "x$ac_cv_func_wctype" = xyes; then : $as_echo "#define HAVE_WCTYPE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth" if test "x$ac_cv_func_wcswidth" = xyes; then : $as_echo "#define HAVE_WCSWIDTH 1" >>confdefs.h else case " $LIBOBJS " in *" wcswidth.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS wcswidth.$ac_objext" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 $as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } if ${ac_cv_func_mbrtowc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_mbrtowc=yes else ac_cv_func_mbrtowc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 $as_echo "$ac_cv_func_mbrtowc" >&6; } if test $ac_cv_func_mbrtowc = yes; then $as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h fi if test $ac_cv_func_mbrtowc = yes; then $as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h fi for ac_func in iswlower iswupper towlower towupper iswctype do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if ${bash_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_langinfo_codeset=yes else bash_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_langinfo_codeset" >&5 $as_echo "$bash_cv_langinfo_codeset" >&6; } if test $bash_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5 $as_echo_n "checking for wchar_t in wchar.h... " >&6; } if ${bash_cv_type_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wchar_t foo; foo = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_type_wchar_t=yes else bash_cv_type_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5 $as_echo "$bash_cv_type_wchar_t" >&6; } if test $bash_cv_type_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5 $as_echo_n "checking for wctype_t in wctype.h... " >&6; } if ${bash_cv_type_wctype_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wctype_t foo; foo = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_type_wctype_t=yes else bash_cv_type_wctype_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5 $as_echo "$bash_cv_type_wctype_t" >&6; } if test $bash_cv_type_wctype_t = yes; then $as_echo "#define HAVE_WCTYPE_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5 $as_echo_n "checking for wint_t in wctype.h... " >&6; } if ${bash_cv_type_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wint_t foo; foo = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_type_wint_t=yes else bash_cv_type_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5 $as_echo "$bash_cv_type_wint_t" >&6; } if test $bash_cv_type_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5 $as_echo_n "checking for wcwidth broken with unicode combining characters... " >&6; } if ${bash_cv_wcwidth_broken+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include main(c, v) int c; char **v; { int w; setlocale(LC_ALL, "en_US.UTF-8"); w = wcwidth (0x0301); exit (w == 0); /* exit 0 if wcwidth broken */ } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_wcwidth_broken=yes else bash_cv_wcwdith_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5 $as_echo "$bash_cv_wcwidth_broken" >&6; } if test "$bash_cv_wcwidth_broken" = yes; then $as_echo "#define WCWIDTH_BROKEN 1" >>confdefs.h fi if test "$am_cv_func_iconv" = yes; then OLDLIBS="$LIBS" LIBS="$LIBS $LIBICONV" for ac_func in locale_charset do : ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset" if test "x$ac_cv_func_locale_charset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_CHARSET 1 _ACEOF fi done LIBS="$OLDLIBS" fi case "$host_cpu" in *cray*) LOCAL_CFLAGS=-DCRAY ;; *s390*) LOCAL_CFLAGS=-fsigned-char ;; esac case "$host_os" in isc*) LOCAL_CFLAGS=-Disc386 ;; esac # shared library configuration section # # Shared object configuration section. These values are generated by # ${srcdir}/support/shobj-conf # if test -f ${srcdir}/support/shobj-conf; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking configuration for building shared libraries" >&5 $as_echo_n "checking configuration for building shared libraries... " >&6; } eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}` # case "$SHLIB_LIBS" in # *curses*|*termcap*|*termlib*) ;; # *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;; # esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIB_STATUS" >&5 $as_echo "$SHLIB_STATUS" >&6; } # SHLIB_STATUS is either `supported' or `unsupported'. If it's # `unsupported', turn off any default shared library building if test "$SHLIB_STATUS" = 'unsupported'; then opt_shared_libs=no fi # shared library versioning # quoted for m4 so I can use character classes SHLIB_MAJOR=`expr "$LIBVERSION" : '\([0-9]\)\..*'` SHLIB_MINOR=`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'` fi if test "$opt_static_libs" = "yes"; then STATIC_TARGET=static STATIC_INSTALL_TARGET=install-static fi if test "$opt_shared_libs" = "yes"; then SHARED_TARGET=shared SHARED_INSTALL_TARGET=install-shared fi case "$build_os" in msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file *) BUILD_DIR=`pwd` ;; esac case "$BUILD_DIR" in *\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;; *) ;; esac ac_config_files="$ac_config_files Makefile doc/Makefile examples/Makefile shlib/Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by readline $as_me 6.3, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ readline config.status 6.3 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "shlib/Makefile") CONFIG_FILES="$CONFIG_FILES shlib/Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) # Makefile uses this timestamp file to record whether config.h is up to date. echo > stamp-h ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi readline-6.3/configure.ac0000664000043600000240000001714212276520127014247 0ustar chetstaffdnl dnl Configure script for readline library dnl dnl report bugs to chet@po.cwru.edu dnl dnl Process this file with autoconf to produce a configure script. # Copyright (C) 1987-2014 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . AC_REVISION([for Readline 6.3, version 2.73]) AC_INIT(readline, 6.3, bug-readline@gnu.org) dnl make sure we are using a recent autoconf version AC_PREREQ(2.50) AC_CONFIG_SRCDIR(readline.h) AC_CONFIG_AUX_DIR(./support) AC_CONFIG_HEADERS(config.h) dnl update the value of RL_READLINE_VERSION in readline.h when this changes LIBVERSION=6.3 AC_CANONICAL_HOST AC_CANONICAL_BUILD dnl configure defaults opt_curses=no opt_purify=no dnl arguments to configure AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval) AC_ARG_WITH(purify, AC_HELP_STRING([--with-purify], [configure to postprocess with purify]), opt_purify=$withval) if test "$opt_curses" = "yes"; then prefer_curses=yes fi if test "$opt_purify" = yes; then PURIFY="purify" else PURIFY= fi dnl option parsing for optional features opt_multibyte=yes opt_static_libs=yes opt_shared_libs=yes AC_ARG_ENABLE(multibyte, AC_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build shared libraries [[default=YES]]]), opt_shared_libs=$enableval) AC_ARG_ENABLE(static, AC_HELP_STRING([--enable-static], [build static libraries [[default=YES]]]), opt_static_libs=$enableval) if test $opt_multibyte = no; then AC_DEFINE(NO_MULTIBYTE_SUPPORT) fi dnl load up the cross-building cache file -- add more cases and cache dnl files as necessary dnl Note that host and target machine are the same, and different than the dnl build machine. CROSS_COMPILE= if test "x$cross_compiling" = "xyes"; then case "${host}" in *-cygwin*) cross_cache=${srcdir}/cross-build/cygwin.cache ;; *-mingw*) cross_cache=${srcdir}/cross-build/mingw.cache ;; i[[3456]]86-*-beos*) cross_cache=${srcdir}/cross-build/x86-beos.cache ;; *) echo "configure: cross-compiling for $host is not supported" >&2 ;; esac if test -n "${cross_cache}" && test -r "${cross_cache}"; then echo "loading cross-build cache file ${cross_cache}" . ${cross_cache} fi unset cross_cache CROSS_COMPILE='-DCROSS_COMPILING' AC_SUBST(CROSS_COMPILE) fi echo "" echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}" echo "" # We want these before the checks, so the checks can modify their values. test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 AC_PROG_MAKE_SET AC_PROG_CC dnl AC_AIX AC_MINIX # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS. test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" AC_PROG_GCC_TRADITIONAL AC_PROG_INSTALL AC_CHECK_TOOL(AR, ar) dnl Set default for ARFLAGS, since autoconf does not have a macro for it. dnl This allows people to set it when running configure or make test -n "$ARFLAGS" || ARFLAGS="cr" AC_PROG_RANLIB MAKE_SHELL=/bin/sh AC_SUBST(MAKE_SHELL) AC_C_CONST AC_C_PROTOTYPES AC_C_CHAR_UNSIGNED AC_C_VOLATILE AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_CHECK_TYPE(ssize_t, int) AC_HEADER_STDC AC_HEADER_STAT AC_HEADER_DIRENT AC_CHECK_FUNCS(fcntl kill lstat) AC_CHECK_FUNCS(memmove putenv select setenv setlocale \ strcasecmp strpbrk tcgetattr vsnprintf) AC_CHECK_FUNCS(isascii isxdigit) AC_CHECK_FUNCS(getpwent getpwnam getpwuid) AC_FUNC_STRCOLL AC_CHECK_HEADERS(fcntl.h unistd.h stdlib.h varargs.h stdarg.h stdbool.h \ string.h strings.h \ limits.h locale.h pwd.h memory.h termcap.h termios.h termio.h) AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h) AC_CHECK_HEADERS(sys/ptem.h,,, [[ #if HAVE_SYS_STREAM_H # include #endif ]]) AC_SYS_LARGEFILE BASH_SYS_SIGNAL_VINTAGE BASH_SYS_REINSTALL_SIGHANDLERS BASH_FUNC_POSIX_SETJMP BASH_FUNC_LSTAT BASH_FUNC_STRCOLL BASH_FUNC_CTYPE_NONASCII BASH_CHECK_GETPW_FUNCS AC_HEADER_TIOCGWINSZ BASH_TYPE_SIG_ATOMIC_T BASH_TYPE_SIGHANDLER BASH_HAVE_TIOCSTAT BASH_HAVE_FIONREAD BASH_CHECK_SPEED_T BASH_STRUCT_WINSIZE BASH_STRUCT_DIRENT_D_INO BASH_STRUCT_DIRENT_D_FILENO AC_CHECK_DECLS([AUDIT_USER_TTY],,, [[#include ]]) dnl yuck case "$host_os" in aix*) prefer_curses=yes ;; esac BASH_CHECK_LIB_TERMCAP if test "$TERMCAP_LIB" = "./lib/termcap/libtermcap.a"; then if test "$prefer_curses" = yes; then TERMCAP_LIB=-lcurses else TERMCAP_LIB=-ltermcap #default fi fi BASH_CHECK_MULTIBYTE case "$host_cpu" in *cray*) LOCAL_CFLAGS=-DCRAY ;; *s390*) LOCAL_CFLAGS=-fsigned-char ;; esac case "$host_os" in isc*) LOCAL_CFLAGS=-Disc386 ;; esac # shared library configuration section # # Shared object configuration section. These values are generated by # ${srcdir}/support/shobj-conf # if test -f ${srcdir}/support/shobj-conf; then AC_MSG_CHECKING(configuration for building shared libraries) eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}` # case "$SHLIB_LIBS" in # *curses*|*termcap*|*termlib*) ;; # *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;; # esac AC_SUBST(SHOBJ_CC) AC_SUBST(SHOBJ_CFLAGS) AC_SUBST(SHOBJ_LD) AC_SUBST(SHOBJ_LDFLAGS) AC_SUBST(SHOBJ_XLDFLAGS) AC_SUBST(SHOBJ_LIBS) AC_SUBST(SHOBJ_STATUS) AC_SUBST(SHLIB_STATUS) AC_SUBST(SHLIB_XLDFLAGS) AC_SUBST(SHLIB_DOT) AC_SUBST(SHLIB_LIBPREF) AC_SUBST(SHLIB_LIBSUFF) AC_SUBST(SHLIB_LIBVERSION) AC_SUBST(SHLIB_DLLVERSION) AC_SUBST(SHLIB_LIBS) AC_MSG_RESULT($SHLIB_STATUS) # SHLIB_STATUS is either `supported' or `unsupported'. If it's # `unsupported', turn off any default shared library building if test "$SHLIB_STATUS" = 'unsupported'; then opt_shared_libs=no fi # shared library versioning # quoted for m4 so I can use character classes SHLIB_MAJOR=[`expr "$LIBVERSION" : '\([0-9]\)\..*'`] SHLIB_MINOR=[`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'`] AC_SUBST(SHLIB_MAJOR) AC_SUBST(SHLIB_MINOR) fi if test "$opt_static_libs" = "yes"; then STATIC_TARGET=static STATIC_INSTALL_TARGET=install-static fi if test "$opt_shared_libs" = "yes"; then SHARED_TARGET=shared SHARED_INSTALL_TARGET=install-shared fi AC_SUBST(STATIC_TARGET) AC_SUBST(SHARED_TARGET) AC_SUBST(STATIC_INSTALL_TARGET) AC_SUBST(SHARED_INSTALL_TARGET) case "$build_os" in msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file *) BUILD_DIR=`pwd` ;; esac case "$BUILD_DIR" in *\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;; *) ;; esac AC_SUBST(PURIFY) AC_SUBST(BUILD_DIR) AC_SUBST(CFLAGS) AC_SUBST(LOCAL_CFLAGS) AC_SUBST(LOCAL_LDFLAGS) AC_SUBST(LOCAL_DEFS) AC_SUBST(AR) AC_SUBST(ARFLAGS) AC_SUBST(host_cpu) AC_SUBST(host_os) AC_SUBST(LIBVERSION) AC_SUBST(TERMCAP_LIB) AC_OUTPUT([Makefile doc/Makefile examples/Makefile shlib/Makefile], [ # Makefile uses this timestamp file to record whether config.h is up to date. echo > stamp-h ]) readline-6.3/Makefile.in0000664000043600000240000004404312271471220014020 0ustar chetstaff## -*- text -*- ## # Master Makefile for the GNU readline library. # Copyright (C) 1994-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . RL_LIBRARY_VERSION = @LIBVERSION@ RL_LIBRARY_NAME = readline PACKAGE = @PACKAGE_NAME@ VERSION = @PACKAGE_VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ srcdir = @srcdir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ BUILD_DIR = @BUILD_DIR@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ CC = @CC@ RANLIB = @RANLIB@ AR = @AR@ ARFLAGS = @ARFLAGS@ RM = rm -f CP = cp MV = mv PURIFY = @PURIFY@ @SET_MAKE@ SHELL = @MAKE_SHELL@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ mandir = @mandir@ includedir = @includedir@ datadir = @datadir@ localedir = @localedir@ infodir = @infodir@ docdir = @docdir@ man3dir = $(mandir)/man3 # Support an alternate destination root directory for package building DESTDIR = # Programs to make tags files. ETAGS = etags CTAGS = ctags -tw CFLAGS = @CFLAGS@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ DEFS = @DEFS@ @CROSS_COMPILE@ LOCAL_DEFS = @LOCAL_DEFS@ TERMCAP_LIB = @TERMCAP_LIB@ # For libraries which include headers from other libraries. INCLUDES = -I. -I$(srcdir) XCCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) CCFLAGS = $(XCCFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) # could add -Werror here GCC_LINT_FLAGS = -ansi -Wall -Wshadow -Wpointer-arith -Wcast-qual \ -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wno-implicit -pedantic GCC_LINT_CFLAGS = $(XCCFLAGS) $(GCC_LINT_FLAGS) @CFLAGS@ @LOCAL_CFLAGS@ .c.o: ${RM} $@ $(CC) -c $(CCFLAGS) $< # The name of the main library target. LIBRARY_NAME = libreadline.a STATIC_LIBS = libreadline.a libhistory.a # The C code source files for this library. CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \ $(srcdir)/vi_mode.c $(srcdir)/parens.c $(srcdir)/rltty.c \ $(srcdir)/complete.c $(srcdir)/bind.c $(srcdir)/isearch.c \ $(srcdir)/display.c $(srcdir)/signals.c $(srcdir)/emacs_keymap.c \ $(srcdir)/vi_keymap.c $(srcdir)/util.c $(srcdir)/kill.c \ $(srcdir)/undo.c $(srcdir)/macro.c $(srcdir)/input.c \ $(srcdir)/callback.c $(srcdir)/terminal.c $(srcdir)/xmalloc.c $(srcdir)/xfree.c \ $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \ $(srcdir)/histfile.c $(srcdir)/nls.c $(srcdir)/search.c \ $(srcdir)/shell.c $(srcdir)/savestring.c $(srcdir)/tilde.c \ $(srcdir)/text.c $(srcdir)/misc.c $(srcdir)/compat.c \ $(srcdir)/mbutil.c $(srcdir)/xfree.c # The header files for this library. HSOURCES = $(srcdir)/readline.h $(srcdir)/rldefs.h $(srcdir)/chardefs.h \ $(srcdir)/keymaps.h $(srcdir)/history.h $(srcdir)/histlib.h \ $(srcdir)/posixstat.h $(srcdir)/posixdir.h $(srcdir)/posixjmp.h \ $(srcdir)/tilde.h $(srcdir)/rlconf.h $(srcdir)/rltty.h \ $(srcdir)/ansi_stdlib.h $(srcdir)/tcap.h $(srcdir)/rlstdc.h \ $(srcdir)/xmalloc.h $(srcdir)/rlprivate.h $(srcdir)/rlshell.h \ $(srcdir)/rltypedefs.h $(srcdir)/rlmbutil.h \ $(srcdir)/colors.h $(srcdir)/parse-colors.h HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o mbutil.o TILDEOBJ = tilde.o COLORSOBJ = colors.o parse-colors.o OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \ rltty.o complete.o bind.o isearch.o display.o signals.o \ util.o kill.o undo.o macro.o input.o callback.o terminal.o \ text.o nls.o misc.o $(HISTOBJ) $(TILDEOBJ) $(COLORSOBJ) \ xmalloc.o xfree.o compat.o # The texinfo files which document this library. DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo DOCOBJECT = doc/readline.dvi DOCSUPPORT = doc/Makefile DOCUMENTATION = $(DOCSOURCE) $(DOCOBJECT) $(DOCSUPPORT) CREATED_MAKEFILES = Makefile doc/Makefile examples/Makefile shlib/Makefile CREATED_CONFIGURE = config.status config.h config.cache config.log \ stamp-config stamp-h CREATED_TAGS = TAGS tags INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h \ rlstdc.h rlconf.h rltypedefs.h OTHER_DOCS = $(srcdir)/CHANGES $(srcdir)/INSTALL $(srcdir)/README OTHER_INSTALLED_DOCS = CHANGES INSTALL README ########################################################################## TARGETS = @STATIC_TARGET@ @SHARED_TARGET@ INSTALL_TARGETS = @STATIC_INSTALL_TARGET@ @SHARED_INSTALL_TARGET@ all: $(TARGETS) everything: all examples static: $(STATIC_LIBS) libreadline.a: $(OBJECTS) $(RM) $@ $(AR) $(ARFLAGS) $@ $(OBJECTS) -test -n "$(RANLIB)" && $(RANLIB) $@ libhistory.a: $(HISTOBJ) xmalloc.o xfree.o $(RM) $@ $(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o xfree.o -test -n "$(RANLIB)" && $(RANLIB) $@ # Since tilde.c is shared between readline and bash, make sure we compile # it with the right flags when it's built as part of readline tilde.o: tilde.c rm -f $@ $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -o $@ $(top_srcdir)/examples/rl.c ./libreadline.a ${TERMCAP_LIB} lint: force $(MAKE) $(MFLAGS) CCFLAGS='$(GCC_LINT_CFLAGS)' static Makefile makefile: config.status $(srcdir)/Makefile.in CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status Makefiles makefiles: config.status $(srcdir)/Makefile.in @for mf in $(CREATED_MAKEFILES); do \ CONFIG_FILES=$$mf CONFIG_HEADERS= $(SHELL) ./config.status ; \ done config.status: configure $(SHELL) ./config.status --recheck config.h: stamp-h stamp-h: config.status $(srcdir)/config.h.in CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status echo > $@ #$(srcdir)/configure: $(srcdir)/configure.ac ## Comment-me-out in distribution # cd $(srcdir) && autoconf ## Comment-me-out in distribution shared: force -test -d shlib || mkdir shlib ( cd shlib ; ${MAKE} ${MFLAGS} all ) documentation: force -test -d doc || mkdir doc -( cd doc && $(MAKE) $(MFLAGS) ) examples: force -test -d examples || mkdir examples -(cd examples && ${MAKE} ${MFLAGS} all ) force: install: $(INSTALL_TARGETS) install-headers: installdirs ${INSTALLED_HEADERS} for f in ${INSTALLED_HEADERS}; do \ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/readline ; \ done uninstall-headers: -test -n "$(includedir)" && cd $(DESTDIR)$(includedir)/readline && \ ${RM} ${INSTALLED_HEADERS} maybe-uninstall-headers: uninstall-headers install-static: installdirs $(STATIC_LIBS) install-headers install-doc install-examples -$(MV) $(DESTDIR)$(libdir)/libreadline.a $(DESTDIR)$(libdir)/libreadline.old $(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a -$(MV) $(DESTDIR)$(libdir)/libhistory.a $(DESTDIR)$(libdir)/libhistory.old $(INSTALL_DATA) libhistory.a $(DESTDIR)$(libdir)/libhistory.a -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libhistory.a installdirs: $(srcdir)/support/mkinstalldirs -$(SHELL) $(srcdir)/support/mkinstalldirs $(DESTDIR)$(includedir) \ $(DESTDIR)$(includedir)/readline $(DESTDIR)$(libdir) \ $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) $(DESTDIR)$(docdir) uninstall: uninstall-headers uninstall-doc uninstall-examples -test -n "$(DESTDIR)$(libdir)" && cd $(DESTDIR)$(libdir) && \ ${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS) -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) install-shared: installdirs install-headers shared install-doc ( cd shlib ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install ) uninstall-shared: maybe-uninstall-headers -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) install-examples: installdirs install-headers -( cd examples ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install ) uninstall-examples: maybe-uninstall-headers -( cd examples; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) install-doc: installdirs $(INSTALL_DATA) $(OTHER_DOCS) $(DESTDIR)$(docdir) -( if test -d doc ; then \ cd doc && \ ${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} install; \ fi ) uninstall-doc: -( cd $(DESTDIR)$(docdir) && ${RM} ${OTHER_INSTALLED_DOCS} ) -( if test -d doc ; then \ cd doc && \ ${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} uninstall; \ fi ) TAGS: force -( cd $(srcdir) && $(ETAGS) $(CSOURCES) $(HSOURCES) ) tags: force -( cd $(srcdir) && $(CTAGS) $(CSOURCES) $(HSOURCES) ) clean: force $(RM) $(OBJECTS) $(STATIC_LIBS) $(RM) readline readline.exe ( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) mostlyclean: clean ( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) distclean maintainer-clean: clean ( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) $(RM) Makefile $(RM) $(CREATED_CONFIGURE) $(RM) $(CREATED_TAGS) info dvi html pdf ps: -( cd doc && $(MAKE) $(MFLAGS) $@ ) install-info: install-dvi: install-html: install-pdf: install-ps: check: installcheck: dist: force @echo Readline distributions are created using $(srcdir)/support/mkdist. @echo Here is a sample of the necessary commands: @echo bash $(srcdir)/support/mkdist -m $(srcdir)/MANIFEST -s $(srcdir) -r $(RL_LIBRARY_NAME) $(RL_LIBRARY_VERSION) @echo tar cf $(RL_LIBRARY_NAME)-${RL_LIBRARY_VERSION}.tar ${RL_LIBRARY_NAME}-$(RL_LIBRARY_VERSION) @echo gzip $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION).tar # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Dependencies bind.o: ansi_stdlib.h posixstat.h bind.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h bind.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h bind.o: history.h callback.o: rlconf.h callback.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h callback.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h compat.o: rlstdc.h complete.o: ansi_stdlib.h posixdir.h posixstat.h complete.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h complete.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h display.o: ansi_stdlib.h posixstat.h display.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h display.o: tcap.h display.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h display.o: history.h rlstdc.h funmap.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h funmap.o: rlconf.h ansi_stdlib.h rlstdc.h funmap.o: ${BUILD_DIR}/config.h histexpand.o: ansi_stdlib.h histexpand.o: history.h histlib.h rlstdc.h rltypedefs.h histexpand.o: ${BUILD_DIR}/config.h histfile.o: ansi_stdlib.h histfile.o: history.h histlib.h rlstdc.h rltypedefs.h histfile.o: ${BUILD_DIR}/config.h history.o: ansi_stdlib.h history.o: history.h histlib.h rlstdc.h rltypedefs.h history.o: ${BUILD_DIR}/config.h histsearch.o: ansi_stdlib.h histsearch.o: history.h histlib.h rlstdc.h rltypedefs.h histsearch.o: ${BUILD_DIR}/config.h input.o: ansi_stdlib.h input.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h input.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h isearch.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h isearch.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h isearch.o: ansi_stdlib.h history.h rlstdc.h keymaps.o: emacs_keymap.c vi_keymap.c keymaps.o: keymaps.h rltypedefs.h chardefs.h rlconf.h ansi_stdlib.h keymaps.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h keymaps.o: ${BUILD_DIR}/config.h rlstdc.h kill.o: ansi_stdlib.h kill.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h kill.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h kill.o: history.h rlstdc.h macro.o: ansi_stdlib.h macro.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h macro.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h macro.o: history.h rlstdc.h mbutil.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h mbutil.o: readline.h keymaps.h rltypedefs.h chardefs.h rlstdc.h misc.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h misc.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h misc.o: history.h rlstdc.h ansi_stdlib.h nls.o: ansi_stdlib.h nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h nls.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h nls.o: history.h rlstdc.h parens.o: rlconf.h parens.o: ${BUILD_DIR}/config.h parens.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h readline.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h readline.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h readline.o: history.h rlstdc.h readline.o: posixstat.h ansi_stdlib.h posixjmp.h rltty.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h rltty.o: rltty.h rltty.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h search.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h search.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h search.o: ansi_stdlib.h history.h rlstdc.h shell.o: ${BUILD_DIR}/config.h shell.o: ansi_stdlib.h signals.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h signals.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h signals.o: history.h rlstdc.h terminal.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h terminal.o: tcap.h terminal.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h terminal.o: history.h rlstdc.h text.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h text.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h text.o: history.h rlstdc.h ansi_stdlib.h tilde.o: ansi_stdlib.h tilde.o: ${BUILD_DIR}/config.h tilde.o: tilde.h undo.o: ansi_stdlib.h undo.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h undo.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h undo.o: history.h rlstdc.h util.o: posixjmp.h ansi_stdlib.h util.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h util.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h vi_mode.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h vi_mode.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h vi_mode.o: history.h ansi_stdlib.h rlstdc.h xfree.o: ${BUILD_DIR}/config.h xfree.o: ansi_stdlib.h xmalloc.o: ${BUILD_DIR}/config.h xmalloc.o: ansi_stdlib.h colors.o: ${BUILD_DIR}/config.h colors.h colors.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h colors.o: rlconf.h colors.o: ansi_stdlib.h posixstat.h parse-colors.o: ${BUILD_DIR}/config.h colors.h parse-colors.h parse-colors.o: rldefs.h rlconf.h parse-colors.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h bind.o: rlshell.h histfile.o: rlshell.h nls.o: rlshell.h readline.o: rlshell.h shell.o: rlshell.h terminal.o: rlshell.h histexpand.o: rlshell.h bind.o: rlprivate.h callback.o: rlprivate.h complete.o: rlprivate.h display.o: rlprivate.h input.o: rlprivate.h isearch.o: rlprivate.h kill.o: rlprivate.h macro.o: rlprivate.h mbutil.o: rlprivate.h misc.o: rlprivate.h nls.o: rlprivate.h parens.o: rlprivate.h readline.o: rlprivate.h rltty.o: rlprivate.h search.o: rlprivate.h signals.o: rlprivate.h terminal.o: rlprivate.h text.o: rlprivate.h undo.o: rlprivate.h util.o: rlprivate.h vi_mode.o: rlprivate.h colors.o: rlprivate.h parse-colors.o: rlprivate.h bind.o: xmalloc.h callback.o: xmalloc.h complete.o: xmalloc.h display.o: xmalloc.h funmap.o: xmalloc.h histexpand.o: xmalloc.h histfile.o: xmalloc.h history.o: xmalloc.h input.o: xmalloc.h isearch.o: xmalloc.h keymaps.o: xmalloc.h kill.o: xmalloc.h macro.o: xmalloc.h mbutil.o: xmalloc.h misc.o: xmalloc.h readline.o: xmalloc.h savestring.o: xmalloc.h search.o: xmalloc.h shell.o: xmalloc.h terminal.o: xmalloc.h text.o: xmalloc.h tilde.o: xmalloc.h undo.o: xmalloc.h util.o: xmalloc.h vi_mode.o: xmalloc.h xfree.o: xmalloc.h xmalloc.o: xmalloc.h colors.o: xmalloc.h parse-colors.o: xmalloc.h complete.o: rlmbutil.h display.o: rlmbutil.h histexpand.o: rlmbutil.h input.o: rlmbutil.h isearch.o: rlmbutil.h mbutil.o: rlmbutil.h misc.o: rlmbutil.h readline.o: rlmbutil.h search.o: rlmbutil.h text.o: rlmbutil.h vi_mode.o: rlmbutil.h bind.o: $(srcdir)/bind.c callback.o: $(srcdir)/callback.c compat.o: $(srcdir)/compat.c complete.o: $(srcdir)/complete.c display.o: $(srcdir)/display.c funmap.o: $(srcdir)/funmap.c input.o: $(srcdir)/input.c isearch.o: $(srcdir)/isearch.c keymaps.o: $(srcdir)/keymaps.c $(srcdir)/emacs_keymap.c $(srcdir)/vi_keymap.c kill.o: $(srcdir)/kill.c macro.o: $(srcdir)/macro.c mbutil.o: $(srcdir)/mbutil.c misc.o: $(srcdir)/misc.c nls.o: $(srcdir)/nls.c parens.o: $(srcdir)/parens.c readline.o: $(srcdir)/readline.c rltty.o: $(srcdir)/rltty.c savestring.o: $(srcdir)/savestring.c search.o: $(srcdir)/search.c shell.o: $(srcdir)/shell.c signals.o: $(srcdir)/signals.c terminal.o: $(srcdir)/terminal.c text.o: $(srcdir)/text.c tilde.o: $(srcdir)/tilde.c undo.o: $(srcdir)/undo.c util.o: $(srcdir)/util.c vi_mode.o: $(srcdir)/vi_mode.c xfree.o: $(srcdir)/xfree.c xmalloc.o: $(srcdir)/xmalloc.c colors.o: $(srcdir)/parse-colors.c parse-colors.o: $(srcdir)/parse-colors.c histexpand.o: $(srcdir)/histexpand.c histfile.o: $(srcdir)/histfile.c history.o: $(srcdir)/history.c histsearch.o: $(srcdir)/histsearch.c bind.o: bind.c callback.o: callback.c compat.o: compat.c complete.o: complete.c display.o: display.c funmap.o: funmap.c input.o: input.c isearch.o: isearch.c keymaps.o: keymaps.c emacs_keymap.c vi_keymap.c kill.o: kill.c macro.o: macro.c mbutil.o: mbutil.c misc.o: misc.c nls.o: nls.c parens.o: parens.c readline.o: readline.c rltty.o: rltty.c savestring.o: savestring.c search.o: search.c shell.o: shell.c signals.o: signals.c terminal.o: terminal.c text.o: text.c tilde.o: tilde.c undo.o: undo.c util.o: util.c vi_mode.o: vi_mode.c xfree.o: xfree.c xmalloc.o: xmalloc.c histexpand.o: histexpand.c histfile.o: histfile.c history.o: history.c histsearch.o: histsearch.c readline-6.3/ansi_stdlib.h0000664000043600000000000000263511050314314014405 0ustar chetwheel/* ansi_stdlib.h -- An ANSI Standard stdlib.h. */ /* A minimal stdlib.h containing extern declarations for those functions that bash uses. */ /* Copyright (C) 1993 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . */ #if !defined (_STDLIB_H_) #define _STDLIB_H_ 1 /* String conversion functions. */ extern int atoi (); extern double atof (); extern double strtod (); /* Memory allocation functions. */ /* Generic pointer type. */ #ifndef PTR_T #if defined (__STDC__) # define PTR_T void * #else # define PTR_T char * #endif #endif /* PTR_T */ extern PTR_T malloc (); extern PTR_T realloc (); extern void free (); /* Other miscellaneous functions. */ extern void abort (); extern void exit (); extern char *getenv (); extern void qsort (); #endif /* _STDLIB_H */ readline-6.3/chardefs.h0000664000043600000000000001074111613416314013676 0ustar chetwheel/* chardefs.h -- Character definitions for readline. */ /* Copyright (C) 1994-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #ifndef _CHARDEFS_H_ #define _CHARDEFS_H_ #include #if defined (HAVE_CONFIG_H) # if defined (HAVE_STRING_H) # if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H) # include # endif # include # endif /* HAVE_STRING_H */ # if defined (HAVE_STRINGS_H) # include # endif /* HAVE_STRINGS_H */ #else # include #endif /* !HAVE_CONFIG_H */ #ifndef whitespace #define whitespace(c) (((c) == ' ') || ((c) == '\t')) #endif #ifdef CTRL # undef CTRL #endif #ifdef UNCTRL # undef UNCTRL #endif /* Some character stuff. */ #define control_character_threshold 0x020 /* Smaller than this is control. */ #define control_character_mask 0x1f /* 0x20 - 1 */ #define meta_character_threshold 0x07f /* Larger than this is Meta. */ #define control_character_bit 0x40 /* 0x000000, must be off. */ #define meta_character_bit 0x080 /* x0000000, must be on. */ #define largest_char 255 /* Largest character value. */ #define CTRL_CHAR(c) ((c) < control_character_threshold && (((c) & 0x80) == 0)) #define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char) #define CTRL(c) ((c) & control_character_mask) #define META(c) ((c) | meta_character_bit) #define UNMETA(c) ((c) & (~meta_character_bit)) #define UNCTRL(c) _rl_to_upper(((c)|control_character_bit)) #if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII)) # define IN_CTYPE_DOMAIN(c) 1 #else # define IN_CTYPE_DOMAIN(c) isascii(c) #endif #if !defined (isxdigit) && !defined (HAVE_ISXDIGIT) && !defined (__cplusplus) # define isxdigit(c) (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) #endif #if defined (CTYPE_NON_ASCII) # define NON_NEGATIVE(c) 1 #else # define NON_NEGATIVE(c) ((unsigned char)(c) == (c)) #endif /* Some systems define these; we want our definitions. */ #undef ISPRINT /* Beware: these only work with single-byte ASCII characters. */ #define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c)) #define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c)) #define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c)) #define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c)) #define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c)) #define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c)) #define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c)) #define _rl_lowercase_p(c) (NON_NEGATIVE(c) && ISLOWER(c)) #define _rl_uppercase_p(c) (NON_NEGATIVE(c) && ISUPPER(c)) #define _rl_digit_p(c) ((c) >= '0' && (c) <= '9') #define _rl_pure_alphabetic(c) (NON_NEGATIVE(c) && ISALPHA(c)) #define ALPHABETIC(c) (NON_NEGATIVE(c) && ISALNUM(c)) #ifndef _rl_to_upper # define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)c) : (c)) # define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)c) : (c)) #endif #ifndef _rl_digit_value # define _rl_digit_value(x) ((x) - '0') #endif #ifndef _rl_isident # define _rl_isident(c) (ISALNUM(c) || (c) == '_') #endif #ifndef ISOCTAL # define ISOCTAL(c) ((c) >= '0' && (c) <= '7') #endif #define OCTVALUE(c) ((c) - '0') #define HEXVALUE(c) \ (((c) >= 'a' && (c) <= 'f') \ ? (c)-'a'+10 \ : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0') #ifndef NEWLINE #define NEWLINE '\n' #endif #ifndef RETURN #define RETURN CTRL('M') #endif #ifndef RUBOUT #define RUBOUT 0x7f #endif #ifndef TAB #define TAB '\t' #endif #ifdef ABORT_CHAR #undef ABORT_CHAR #endif #define ABORT_CHAR CTRL('G') #ifdef PAGE #undef PAGE #endif #define PAGE CTRL('L') #ifdef SPACE #undef SPACE #endif #define SPACE ' ' /* XXX - was 0x20 */ #ifdef ESC #undef ESC #endif #define ESC CTRL('[') #endif /* _CHARDEFS_H_ */ readline-6.3/colors.h0000644000043600000000000000662212025414577013430 0ustar chetwheel/* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #ifndef _COLORS_H_ #define _COLORS_H_ #include // size_t #if defined(__TANDEM) && defined(HAVE_STDBOOL_H) && (__STDC_VERSION__ < 199901L) typedef int _Bool; #endif #if defined (HAVE_STDBOOL_H) # include // bool #else typedef int _rl_bool_t; #ifdef bool # undef bool #endif #define bool _rl_bool_t #ifndef true # define true 1 # define false 0 #endif #endif /* !HAVE_STDBOOL_H */ /* Null is a valid character in a color indicator (think about Epson printers, for example) so we have to use a length/buffer string type. */ struct bin_str { size_t len; const char *string; }; /* file type indicators (dir, sock, fifo, ...) Default value is initialized in parse-colors.c. It is then modified from the values of $LS_COLORS. */ extern struct bin_str _rl_color_indicator[]; /* The LS_COLORS variable is in a termcap-like format. */ typedef struct _color_ext_type { struct bin_str ext; /* The extension we're looking for */ struct bin_str seq; /* The sequence to output when we do */ struct _color_ext_type *next; /* Next in list */ } COLOR_EXT_TYPE; /* file extensions indicators (.txt, .log, .jpg, ...) Values are taken from $LS_COLORS in rl_parse_colors(). */ extern COLOR_EXT_TYPE *_rl_color_ext_list; #define FILETYPE_INDICATORS \ { \ C_ORPHAN, C_FIFO, C_CHR, C_DIR, C_BLK, C_FILE, \ C_LINK, C_SOCK, C_FILE, C_DIR \ } /* Whether we used any colors in the output so far. If so, we will need to restore the default color later. If not, we will need to call prep_non_filename_text before using color for the first time. */ enum indicator_no { C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK, C_FIFO, C_SOCK, C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID, C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP, C_MULTIHARDLINK, C_CLR_TO_EOL }; #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif enum filetype { unknown, fifo, chardev, directory, blockdev, normal, symbolic_link, sock, whiteout, arg_directory }; extern void _rl_put_indicator (const struct bin_str *ind); extern void _rl_set_normal_color (void); extern bool _rl_print_color_indicator (char *f); extern void _rl_prep_non_filename_text (void); #endif /* !_COLORS_H_ */ readline-6.3/history.h0000664000043600000240000002353712226767733013653 0ustar chetstaff/* history.h -- the names of functions that you can call in history. */ /* Copyright (C) 1989-2009 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. History is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with History. If not, see . */ #ifndef _HISTORY_H_ #define _HISTORY_H_ #ifdef __cplusplus extern "C" { #endif #include /* XXX - for history timestamp code */ #if defined READLINE_LIBRARY # include "rlstdc.h" # include "rltypedefs.h" #else # include # include #endif #ifdef __STDC__ typedef void *histdata_t; #else typedef char *histdata_t; #endif /* The structure used to store a history entry. */ typedef struct _hist_entry { char *line; char *timestamp; /* char * rather than time_t for read/write */ histdata_t data; } HIST_ENTRY; /* Size of the history-library-managed space in history entry HS. */ #define HISTENT_BYTES(hs) (strlen ((hs)->line) + strlen ((hs)->timestamp)) /* A structure used to pass the current state of the history stuff around. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; /* Flag values for the `flags' member of HISTORY_STATE. */ #define HS_STIFLED 0x01 /* Initialization and state management. */ /* Begin a session in which the history functions might be used. This just initializes the interactive variables. */ extern void using_history PARAMS((void)); /* Return the current HISTORY_STATE of the history. */ extern HISTORY_STATE *history_get_history_state PARAMS((void)); /* Set the state of the current history array to STATE. */ extern void history_set_history_state PARAMS((HISTORY_STATE *)); /* Manage the history list. */ /* Place STRING at the end of the history list. The associated data field (if any) is set to NULL. */ extern void add_history PARAMS((const char *)); /* Change the timestamp associated with the most recent history entry to STRING. */ extern void add_history_time PARAMS((const char *)); /* A reasonably useless function, only here for completeness. WHICH is the magic number that tells us which element to delete. The elements are numbered from 0. */ extern HIST_ENTRY *remove_history PARAMS((int)); /* Free the history entry H and return any application-specific data associated with it. */ extern histdata_t free_history_entry PARAMS((HIST_ENTRY *)); /* Make the history entry at WHICH have LINE and DATA. This returns the old entry so you can dispose of the data. In the case of an invalid WHICH, a NULL pointer is returned. */ extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t)); /* Clear the history list and start over. */ extern void clear_history PARAMS((void)); /* Stifle the history list, remembering only MAX number of entries. */ extern void stifle_history PARAMS((int)); /* Stop stifling the history. This returns the previous amount the history was stifled by. The value is positive if the history was stifled, negative if it wasn't. */ extern int unstifle_history PARAMS((void)); /* Return 1 if the history is stifled, 0 if it is not. */ extern int history_is_stifled PARAMS((void)); /* Information about the history list. */ /* Return a NULL terminated array of HIST_ENTRY which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return NULL. */ extern HIST_ENTRY **history_list PARAMS((void)); /* Returns the number which says what history element we are now looking at. */ extern int where_history PARAMS((void)); /* Return the history entry at the current position, as determined by history_offset. If there is no entry there, return a NULL pointer. */ extern HIST_ENTRY *current_history PARAMS((void)); /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ extern HIST_ENTRY *history_get PARAMS((int)); /* Return the timestamp associated with the HIST_ENTRY * passed as an argument */ extern time_t history_get_time PARAMS((HIST_ENTRY *)); /* Return the number of bytes that the primary history entries are using. This just adds up the lengths of the_history->lines. */ extern int history_total_bytes PARAMS((void)); /* Moving around the history list. */ /* Set the position in the history list to POS. */ extern int history_set_pos PARAMS((int)); /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer. */ extern HIST_ENTRY *previous_history PARAMS((void)); /* Move history_offset forward to the next item in the input_history, and return the a pointer to that entry. If there is no next entry, return a NULL pointer. */ extern HIST_ENTRY *next_history PARAMS((void)); /* Searching the history list. */ /* Search the history for STRING, starting at history_offset. If DIRECTION < 0, then the search is through previous entries, else through subsequent. If the string is found, then current_history () is the history entry, and the value of this function is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is returned. */ extern int history_search PARAMS((const char *, int)); /* Search the history for STRING, starting at history_offset. The search is anchored: matching lines must begin with string. DIRECTION is as in history_search(). */ extern int history_search_prefix PARAMS((const char *, int)); /* Search for STRING in the history list, starting at POS, an absolute index into the list. DIR, if negative, says to search backwards from POS, else forwards. Returns the absolute index of the history element where STRING was found, or -1 otherwise. */ extern int history_search_pos PARAMS((const char *, int, int)); /* Managing the history file. */ /* Add the contents of FILENAME to the history list, a line at a time. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ extern int read_history PARAMS((const char *)); /* Read a range of lines from FILENAME, adding them to the history list. Start reading at the FROM'th line and end at the TO'th. If FROM is zero, start at the beginning. If TO is less than FROM, read until the end of the file. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ extern int read_history_range PARAMS((const char *, int, int)); /* Write the current history to FILENAME. If FILENAME is NULL, then write the history list to ~/.history. Values returned are as in read_history (). */ extern int write_history PARAMS((const char *)); /* Append NELEMENT entries to FILENAME. The entries appended are from the end of the list minus NELEMENTs up to the end of the list. */ extern int append_history PARAMS((int, const char *)); /* Truncate the history file, leaving only the last NLINES lines. */ extern int history_truncate_file PARAMS((const char *, int)); /* History expansion. */ /* Expand the string STRING, placing the result into OUTPUT, a pointer to a string. Returns: 0) If no expansions took place (or, if the only change in the text was the de-slashifying of the history expansion character) 1) If expansions did take place -1) If there was an error in expansion. 2) If the returned line should just be printed. If an error occurred in expansion, then OUTPUT contains a descriptive error message. */ extern int history_expand PARAMS((char *, char **)); /* Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are broken up as in the shell. */ extern char *history_arg_extract PARAMS((int, int, const char *)); /* Return the text of the history event beginning at the current offset into STRING. Pass STRING with *INDEX equal to the history_expansion_char that begins this specification. DELIMITING_QUOTE is a character that is allowed to end the string specification for what to search for in addition to the normal characters `:', ` ', `\t', `\n', and sometimes `?'. */ extern char *get_history_event PARAMS((const char *, int *, int)); /* Return an array of tokens, much as the shell might. The tokens are parsed out of STRING. */ extern char **history_tokenize PARAMS((const char *)); /* Exported history variables. */ extern int history_base; extern int history_length; extern int history_max_entries; extern char history_expansion_char; extern char history_subst_char; extern char *history_word_delimiters; extern char history_comment_char; extern char *history_no_expand_chars; extern char *history_search_delimiter_chars; extern int history_quotes_inhibit_expansion; extern int history_write_timestamps; /* Backwards compatibility */ extern int max_input_history; /* If set, this function is called to decide whether or not a particular history expansion should be treated as a special case for the calling application and not expanded. */ extern rl_linebuf_func_t *history_inhibit_expansion_function; #ifdef __cplusplus } #endif #endif /* !_HISTORY_H_ */ readline-6.3/histlib.h0000664000043600000000000000442411130207321013544 0ustar chetwheel/* histlib.h -- internal definitions for the history library. */ /* Copyright (C) 1989-2009 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. History is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with History. If not, see . */ #if !defined (_HISTLIB_H_) #define _HISTLIB_H_ #if defined (HAVE_STRING_H) # include #else # include #endif /* !HAVE_STRING_H */ #if !defined (STREQ) #define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0)) #define STREQN(a, b, n) (((n) == 0) ? (1) \ : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) #endif #ifndef savestring #define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x)) #endif #ifndef whitespace #define whitespace(c) (((c) == ' ') || ((c) == '\t')) #endif #ifndef _rl_digit_p #define _rl_digit_p(c) ((c) >= '0' && (c) <= '9') #endif #ifndef _rl_digit_value #define _rl_digit_value(c) ((c) - '0') #endif #ifndef member # ifndef strchr extern char *strchr (); # endif #define member(c, s) ((c) ? ((char *)strchr ((s), (c)) != (char *)NULL) : 0) #endif #ifndef FREE # define FREE(x) if (x) free (x) #endif /* Possible history errors passed to hist_error. */ #define EVENT_NOT_FOUND 0 #define BAD_WORD_SPEC 1 #define SUBST_FAILED 2 #define BAD_MODIFIER 3 #define NO_PREV_SUBST 4 /* Possible definitions for history starting point specification. */ #define ANCHORED_SEARCH 1 #define NON_ANCHORED_SEARCH 0 /* Possible definitions for what style of writing the history file we want. */ #define HISTORY_APPEND 0 #define HISTORY_OVERWRITE 1 /* Some variable definitions shared across history source files. */ extern int history_offset; #endif /* !_HISTLIB_H_ */ readline-6.3/keymaps.h0000644000043600000000000000613311414753776013605 0ustar chetwheel/* keymaps.h -- Manipulation of readline keymaps. */ /* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #ifndef _KEYMAPS_H_ #define _KEYMAPS_H_ #ifdef __cplusplus extern "C" { #endif #if defined (READLINE_LIBRARY) # include "rlstdc.h" # include "chardefs.h" # include "rltypedefs.h" #else # include # include # include #endif /* A keymap contains one entry for each key in the ASCII set. Each entry consists of a type and a pointer. FUNCTION is the address of a function to run, or the address of a keymap to indirect through. TYPE says which kind of thing FUNCTION is. */ typedef struct _keymap_entry { char type; rl_command_func_t *function; } KEYMAP_ENTRY; /* This must be large enough to hold bindings for all of the characters in a desired character set (e.g, 128 for ASCII, 256 for ISO Latin-x, and so on) plus one for subsequence matching. */ #define KEYMAP_SIZE 257 #define ANYOTHERKEY KEYMAP_SIZE-1 typedef KEYMAP_ENTRY KEYMAP_ENTRY_ARRAY[KEYMAP_SIZE]; typedef KEYMAP_ENTRY *Keymap; /* The values that TYPE can have in a keymap entry. */ #define ISFUNC 0 #define ISKMAP 1 #define ISMACR 2 extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap, emacs_meta_keymap, emacs_ctlx_keymap; extern KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap; /* Return a new, empty keymap. Free it with free() when you are done. */ extern Keymap rl_make_bare_keymap PARAMS((void)); /* Return a new keymap which is a copy of MAP. */ extern Keymap rl_copy_keymap PARAMS((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. */ extern Keymap rl_make_keymap PARAMS((void)); /* Free the storage associated with a keymap. */ extern void rl_discard_keymap PARAMS((Keymap)); /* These functions actually appear in bind.c */ /* Return the keymap corresponding to a given name. Names look like `emacs' or `emacs-meta' or `vi-insert'. */ extern Keymap rl_get_keymap_by_name PARAMS((const char *)); /* Return the current keymap. */ extern Keymap rl_get_keymap PARAMS((void)); /* Set the current keymap to MAP. */ extern void rl_set_keymap PARAMS((Keymap)); #ifdef __cplusplus } #endif #endif /* _KEYMAPS_H_ */ readline-6.3/parse-colors.h0000644000043600000000000000277711741616321014542 0ustar chetwheel/* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #ifndef _PARSE_COLORS_H_ #define _PARSE_COLORS_H_ #include "readline.h" #define LEN_STR_PAIR(s) sizeof (s) - 1, s void _rl_parse_colors (void); static const char *const indicator_name[]= { "lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so", "bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st", "ow", "tw", "ca", "mh", "cl", NULL }; /* Buffer for color sequences */ static char *color_buf; #endif /* !_PARSE_COLORS_H_ */ readline-6.3/rlconf.h0000664000043600000000000000460611705560731013412 0ustar chetwheel/* rlconf.h -- readline configuration definitions */ /* Copyright (C) 1992-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RLCONF_H_) #define _RLCONF_H_ /* Define this if you want the vi-mode editing available. */ #define VI_MODE /* Define this to get an indication of file type when listing completions. */ #define VISIBLE_STATS /* Define this to get support for colors when listing completions and in other places. */ #define COLOR_SUPPORT /* This definition is needed by readline.c, rltty.c, and signals.c. */ /* If on, then readline handles signals in a way that doesn't suck. */ #define HANDLE_SIGNALS /* Ugly but working hack for binding prefix meta. */ #define PREFIX_META_HACK /* The next-to-last-ditch effort file name for a user-specific init file. */ #define DEFAULT_INPUTRC "~/.inputrc" /* The ultimate last-ditch filenname for an init file -- system-wide. */ #define SYS_INPUTRC "/etc/inputrc" /* If defined, expand tabs to spaces. */ #define DISPLAY_TABS /* If defined, use the terminal escape sequence to move the cursor forward over a character when updating the line rather than rewriting it. */ /* #define HACK_TERMCAP_MOTION */ /* The string inserted by the `insert comment' command. */ #define RL_COMMENT_BEGIN_DEFAULT "#" /* Define this if you want code that allows readline to be used in an X `callback' style. */ #define READLINE_CALLBACKS /* Define this if you want the cursor to indicate insert or overwrite mode. */ /* #define CURSOR_MODE */ /* Define this if you want to enable code that talks to the Linux kernel tty auditing system. */ #define ENABLE_TTY_AUDIT_SUPPORT #endif /* _RLCONF_H_ */ readline-6.3/posixdir.h0000664000043600000000000000440111726673644013774 0ustar chetwheel/* posixdir.h -- Posix directory reading includes and defines. */ /* Copyright (C) 1987,1991,2012 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . */ /* This file should be included instead of or . */ #if !defined (_POSIXDIR_H_) #define _POSIXDIR_H_ #if defined (HAVE_DIRENT_H) # include # if defined (HAVE_STRUCT_DIRENT_D_NAMLEN) # define D_NAMLEN(d) ((d)->d_namlen) # else # define D_NAMLEN(d) (strlen ((d)->d_name)) # endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */ #else # if defined (HAVE_SYS_NDIR_H) # include # endif # if defined (HAVE_SYS_DIR_H) # include # endif # if defined (HAVE_NDIR_H) # include # endif # if !defined (dirent) # define dirent direct # endif /* !dirent */ # define D_NAMLEN(d) ((d)->d_namlen) #endif /* !HAVE_DIRENT_H */ /* The bash code fairly consistenly uses d_fileno; make sure it's available */ #if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO) # define d_fileno d_ino #endif /* Posix does not require that the d_ino field be present, and some systems do not provide it. */ #if !defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO) # define REAL_DIR_ENTRY(dp) 1 #else # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) #endif /* _POSIX_SOURCE */ #if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (BROKEN_DIRENT_D_INO) # define D_INO_AVAILABLE #endif /* Signal the rest of the code that it can safely use dirent.d_fileno */ #if defined (D_INO_AVAILABLE) || defined (HAVE_STRUCT_DIRENT_D_FILENO) # define D_FILENO_AVAILABLE 1 #endif #endif /* !_POSIXDIR_H_ */ readline-6.3/posixjmp.h0000664000043600000000000000244112065745022013771 0ustar chetwheel/* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */ /* Copyright (C) 1987,1991 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . */ #ifndef _POSIXJMP_H_ #define _POSIXJMP_H_ #include /* This *must* be included *after* config.h */ #if defined (HAVE_POSIX_SIGSETJMP) # define procenv_t sigjmp_buf # if !defined (__OPENNT) # undef setjmp # define setjmp(x) sigsetjmp((x), 1) # define setjmp_nosigs(x) sigsetjmp((x), 0) # undef longjmp # define longjmp(x, n) siglongjmp((x), (n)) # endif /* !__OPENNT */ #else # define procenv_t jmp_buf # define setjmp_nosigs setjmp #endif #endif /* _POSIXJMP_H_ */ readline-6.3/posixselect.h0000664000043600000000000000252411172654144014466 0ustar chetwheel/* posixselect.h -- wrapper for select(2) includes and definitions */ /* Copyright (C) 2009 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . */ #ifndef _POSIXSELECT_H_ #define _POSIXSELECT_H_ #if defined (FD_SET) && !defined (HAVE_SELECT) # define HAVE_SELECT 1 #endif #if defined (HAVE_SELECT) # if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX) # include # endif #endif /* HAVE_SELECT */ #if defined (HAVE_SYS_SELECT_H) # include #endif #ifndef USEC_PER_SEC # define USEC_PER_SEC 1000000 #endif #define USEC_TO_TIMEVAL(us, tv) \ do { \ (tv).tv_sec = (us) / USEC_PER_SEC; \ (tv).tv_usec = (us) % USEC_PER_SEC; \ } while (0) #endif /* _POSIXSELECT_H_ */ readline-6.3/posixstat.h0000664000043600000000000001033611050313766014157 0ustar chetwheel/* posixstat.h -- Posix stat(2) definitions for systems that don't have them. */ /* Copyright (C) 1987,1991 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bash. If not, see . */ /* This file should be included instead of . It relies on the local sys/stat.h to work though. */ #if !defined (_POSIXSTAT_H_) #define _POSIXSTAT_H_ #include #if defined (STAT_MACROS_BROKEN) # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISREG # undef S_ISLNK #endif /* STAT_MACROS_BROKEN */ /* These are guaranteed to work only on isc386 */ #if !defined (S_IFDIR) && !defined (S_ISDIR) # define S_IFDIR 0040000 #endif /* !S_IFDIR && !S_ISDIR */ #if !defined (S_IFMT) # define S_IFMT 0170000 #endif /* !S_IFMT */ /* Posix 1003.1 5.6.1.1 file types */ /* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but do not provide the S_IS* macros that Posix requires. */ #if defined (_S_IFMT) && !defined (S_IFMT) #define S_IFMT _S_IFMT #endif #if defined (_S_IFIFO) && !defined (S_IFIFO) #define S_IFIFO _S_IFIFO #endif #if defined (_S_IFCHR) && !defined (S_IFCHR) #define S_IFCHR _S_IFCHR #endif #if defined (_S_IFDIR) && !defined (S_IFDIR) #define S_IFDIR _S_IFDIR #endif #if defined (_S_IFBLK) && !defined (S_IFBLK) #define S_IFBLK _S_IFBLK #endif #if defined (_S_IFREG) && !defined (S_IFREG) #define S_IFREG _S_IFREG #endif #if defined (_S_IFLNK) && !defined (S_IFLNK) #define S_IFLNK _S_IFLNK #endif #if defined (_S_IFSOCK) && !defined (S_IFSOCK) #define S_IFSOCK _S_IFSOCK #endif /* Test for each symbol individually and define the ones necessary (some systems claiming Posix compatibility define some but not all). */ #if defined (S_IFBLK) && !defined (S_ISBLK) #define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */ #endif #if defined (S_IFCHR) && !defined (S_ISCHR) #define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */ #endif #if defined (S_IFDIR) && !defined (S_ISDIR) #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */ #endif #if defined (S_IFREG) && !defined (S_ISREG) #define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */ #endif #if defined (S_IFIFO) && !defined (S_ISFIFO) #define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */ #endif #if defined (S_IFLNK) && !defined (S_ISLNK) #define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */ #endif #if defined (S_IFSOCK) && !defined (S_ISSOCK) #define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */ #endif /* * POSIX 1003.1 5.6.1.2 File Modes */ #if !defined (S_IRWXU) # if !defined (S_IREAD) # define S_IREAD 00400 # define S_IWRITE 00200 # define S_IEXEC 00100 # endif /* S_IREAD */ # if !defined (S_IRUSR) # define S_IRUSR S_IREAD /* read, owner */ # define S_IWUSR S_IWRITE /* write, owner */ # define S_IXUSR S_IEXEC /* execute, owner */ # define S_IRGRP (S_IREAD >> 3) /* read, group */ # define S_IWGRP (S_IWRITE >> 3) /* write, group */ # define S_IXGRP (S_IEXEC >> 3) /* execute, group */ # define S_IROTH (S_IREAD >> 6) /* read, other */ # define S_IWOTH (S_IWRITE >> 6) /* write, other */ # define S_IXOTH (S_IEXEC >> 6) /* execute, other */ # endif /* !S_IRUSR */ # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* !S_IRWXU */ /* These are non-standard, but are used in builtins.c$symbolic_umask() */ #define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH) #define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH) #define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif /* _POSIXSTAT_H_ */ readline-6.3/readline.h0000664000043600000240000011165212272473727013727 0ustar chetstaff/* Readline.h -- the names of functions callable from within readline. */ /* Copyright (C) 1987-2013 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_READLINE_H_) #define _READLINE_H_ #ifdef __cplusplus extern "C" { #endif #if defined (READLINE_LIBRARY) # include "rlstdc.h" # include "rltypedefs.h" # include "keymaps.h" # include "tilde.h" #else # include # include # include # include #endif /* Hex-encoded Readline version number. */ #define RL_READLINE_VERSION 0x0603 /* Readline 6.3 */ #define RL_VERSION_MAJOR 6 #define RL_VERSION_MINOR 3 /* Readline data structures. */ /* Maintaining the state of undo. We remember individual deletes and inserts on a chain of things to do. */ /* The actions that undo knows how to undo. Notice that UNDO_DELETE means to insert some text, and UNDO_INSERT means to delete some text. I.e., the code tells undo what to undo, not how to undo it. */ enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; /* What an element of THE_UNDO_LIST looks like. */ typedef struct undo_list { struct undo_list *next; int start, end; /* Where the change took place. */ char *text; /* The text to insert, if undoing a delete. */ enum undo_code what; /* Delete, Insert, Begin, End. */ } UNDO_LIST; /* The current undo list for RL_LINE_BUFFER. */ extern UNDO_LIST *rl_undo_list; /* The data structure for mapping textual names to code addresses. */ typedef struct _funmap { const char *name; rl_command_func_t *function; } FUNMAP; extern FUNMAP **funmap; /* **************************************************************** */ /* */ /* Functions available to bind to key sequences */ /* */ /* **************************************************************** */ /* Bindable commands for numeric arguments. */ extern int rl_digit_argument PARAMS((int, int)); extern int rl_universal_argument PARAMS((int, int)); /* Bindable commands for moving the cursor. */ extern int rl_forward_byte PARAMS((int, int)); extern int rl_forward_char PARAMS((int, int)); extern int rl_forward PARAMS((int, int)); extern int rl_backward_byte PARAMS((int, int)); extern int rl_backward_char PARAMS((int, int)); extern int rl_backward PARAMS((int, int)); extern int rl_beg_of_line PARAMS((int, int)); extern int rl_end_of_line PARAMS((int, int)); extern int rl_forward_word PARAMS((int, int)); extern int rl_backward_word PARAMS((int, int)); extern int rl_refresh_line PARAMS((int, int)); extern int rl_clear_screen PARAMS((int, int)); extern int rl_skip_csi_sequence PARAMS((int, int)); extern int rl_arrow_keys PARAMS((int, int)); /* Bindable commands for inserting and deleting text. */ extern int rl_insert PARAMS((int, int)); extern int rl_quoted_insert PARAMS((int, int)); extern int rl_tab_insert PARAMS((int, int)); extern int rl_newline PARAMS((int, int)); extern int rl_do_lowercase_version PARAMS((int, int)); extern int rl_rubout PARAMS((int, int)); extern int rl_delete PARAMS((int, int)); extern int rl_rubout_or_delete PARAMS((int, int)); extern int rl_delete_horizontal_space PARAMS((int, int)); extern int rl_delete_or_show_completions PARAMS((int, int)); extern int rl_insert_comment PARAMS((int, int)); /* Bindable commands for changing case. */ extern int rl_upcase_word PARAMS((int, int)); extern int rl_downcase_word PARAMS((int, int)); extern int rl_capitalize_word PARAMS((int, int)); /* Bindable commands for transposing characters and words. */ extern int rl_transpose_words PARAMS((int, int)); extern int rl_transpose_chars PARAMS((int, int)); /* Bindable commands for searching within a line. */ extern int rl_char_search PARAMS((int, int)); extern int rl_backward_char_search PARAMS((int, int)); /* Bindable commands for readline's interface to the command history. */ extern int rl_beginning_of_history PARAMS((int, int)); extern int rl_end_of_history PARAMS((int, int)); extern int rl_get_next_history PARAMS((int, int)); extern int rl_get_previous_history PARAMS((int, int)); /* Bindable commands for managing the mark and region. */ extern int rl_set_mark PARAMS((int, int)); extern int rl_exchange_point_and_mark PARAMS((int, int)); /* Bindable commands to set the editing mode (emacs or vi). */ extern int rl_vi_editing_mode PARAMS((int, int)); extern int rl_emacs_editing_mode PARAMS((int, int)); /* Bindable commands to change the insert mode (insert or overwrite) */ extern int rl_overwrite_mode PARAMS((int, int)); /* Bindable commands for managing key bindings. */ extern int rl_re_read_init_file PARAMS((int, int)); extern int rl_dump_functions PARAMS((int, int)); extern int rl_dump_macros PARAMS((int, int)); extern int rl_dump_variables PARAMS((int, int)); /* Bindable commands for word completion. */ extern int rl_complete PARAMS((int, int)); extern int rl_possible_completions PARAMS((int, int)); extern int rl_insert_completions PARAMS((int, int)); extern int rl_old_menu_complete PARAMS((int, int)); extern int rl_menu_complete PARAMS((int, int)); extern int rl_backward_menu_complete PARAMS((int, int)); /* Bindable commands for killing and yanking text, and managing the kill ring. */ extern int rl_kill_word PARAMS((int, int)); extern int rl_backward_kill_word PARAMS((int, int)); extern int rl_kill_line PARAMS((int, int)); extern int rl_backward_kill_line PARAMS((int, int)); extern int rl_kill_full_line PARAMS((int, int)); extern int rl_unix_word_rubout PARAMS((int, int)); extern int rl_unix_filename_rubout PARAMS((int, int)); extern int rl_unix_line_discard PARAMS((int, int)); extern int rl_copy_region_to_kill PARAMS((int, int)); extern int rl_kill_region PARAMS((int, int)); extern int rl_copy_forward_word PARAMS((int, int)); extern int rl_copy_backward_word PARAMS((int, int)); extern int rl_yank PARAMS((int, int)); extern int rl_yank_pop PARAMS((int, int)); extern int rl_yank_nth_arg PARAMS((int, int)); extern int rl_yank_last_arg PARAMS((int, int)); /* Not available unless __CYGWIN__ is defined. */ #ifdef __CYGWIN__ extern int rl_paste_from_clipboard PARAMS((int, int)); #endif /* Bindable commands for incremental searching. */ extern int rl_reverse_search_history PARAMS((int, int)); extern int rl_forward_search_history PARAMS((int, int)); /* Bindable keyboard macro commands. */ extern int rl_start_kbd_macro PARAMS((int, int)); extern int rl_end_kbd_macro PARAMS((int, int)); extern int rl_call_last_kbd_macro PARAMS((int, int)); extern int rl_print_last_kbd_macro PARAMS((int, int)); /* Bindable undo commands. */ extern int rl_revert_line PARAMS((int, int)); extern int rl_undo_command PARAMS((int, int)); /* Bindable tilde expansion commands. */ extern int rl_tilde_expand PARAMS((int, int)); /* Bindable terminal control commands. */ extern int rl_restart_output PARAMS((int, int)); extern int rl_stop_output PARAMS((int, int)); /* Miscellaneous bindable commands. */ extern int rl_abort PARAMS((int, int)); extern int rl_tty_status PARAMS((int, int)); /* Bindable commands for incremental and non-incremental history searching. */ extern int rl_history_search_forward PARAMS((int, int)); extern int rl_history_search_backward PARAMS((int, int)); extern int rl_history_substr_search_forward PARAMS((int, int)); extern int rl_history_substr_search_backward PARAMS((int, int)); extern int rl_noninc_forward_search PARAMS((int, int)); extern int rl_noninc_reverse_search PARAMS((int, int)); extern int rl_noninc_forward_search_again PARAMS((int, int)); extern int rl_noninc_reverse_search_again PARAMS((int, int)); /* Bindable command used when inserting a matching close character. */ extern int rl_insert_close PARAMS((int, int)); /* Not available unless READLINE_CALLBACKS is defined. */ extern void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *)); extern void rl_callback_read_char PARAMS((void)); extern void rl_callback_handler_remove PARAMS((void)); /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */ /* VI-mode bindable commands. */ extern int rl_vi_redo PARAMS((int, int)); extern int rl_vi_undo PARAMS((int, int)); extern int rl_vi_yank_arg PARAMS((int, int)); extern int rl_vi_fetch_history PARAMS((int, int)); extern int rl_vi_search_again PARAMS((int, int)); extern int rl_vi_search PARAMS((int, int)); extern int rl_vi_complete PARAMS((int, int)); extern int rl_vi_tilde_expand PARAMS((int, int)); extern int rl_vi_prev_word PARAMS((int, int)); extern int rl_vi_next_word PARAMS((int, int)); extern int rl_vi_end_word PARAMS((int, int)); extern int rl_vi_insert_beg PARAMS((int, int)); extern int rl_vi_append_mode PARAMS((int, int)); extern int rl_vi_append_eol PARAMS((int, int)); extern int rl_vi_eof_maybe PARAMS((int, int)); extern int rl_vi_insertion_mode PARAMS((int, int)); extern int rl_vi_insert_mode PARAMS((int, int)); extern int rl_vi_movement_mode PARAMS((int, int)); extern int rl_vi_arg_digit PARAMS((int, int)); extern int rl_vi_change_case PARAMS((int, int)); extern int rl_vi_put PARAMS((int, int)); extern int rl_vi_column PARAMS((int, int)); extern int rl_vi_delete_to PARAMS((int, int)); extern int rl_vi_change_to PARAMS((int, int)); extern int rl_vi_yank_to PARAMS((int, int)); extern int rl_vi_rubout PARAMS((int, int)); extern int rl_vi_delete PARAMS((int, int)); extern int rl_vi_back_to_indent PARAMS((int, int)); extern int rl_vi_first_print PARAMS((int, int)); extern int rl_vi_char_search PARAMS((int, int)); extern int rl_vi_match PARAMS((int, int)); extern int rl_vi_change_char PARAMS((int, int)); extern int rl_vi_subst PARAMS((int, int)); extern int rl_vi_overstrike PARAMS((int, int)); extern int rl_vi_overstrike_delete PARAMS((int, int)); extern int rl_vi_replace PARAMS((int, int)); extern int rl_vi_set_mark PARAMS((int, int)); extern int rl_vi_goto_mark PARAMS((int, int)); /* VI-mode utility functions. */ extern int rl_vi_check PARAMS((void)); extern int rl_vi_domove PARAMS((int, int *)); extern int rl_vi_bracktype PARAMS((int)); extern void rl_vi_start_inserting PARAMS((int, int, int)); /* VI-mode pseudo-bindable commands, used as utility functions. */ extern int rl_vi_fWord PARAMS((int, int)); extern int rl_vi_bWord PARAMS((int, int)); extern int rl_vi_eWord PARAMS((int, int)); extern int rl_vi_fword PARAMS((int, int)); extern int rl_vi_bword PARAMS((int, int)); extern int rl_vi_eword PARAMS((int, int)); /* **************************************************************** */ /* */ /* Well Published Functions */ /* */ /* **************************************************************** */ /* Readline functions. */ /* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */ extern char *readline PARAMS((const char *)); extern int rl_set_prompt PARAMS((const char *)); extern int rl_expand_prompt PARAMS((char *)); extern int rl_initialize PARAMS((void)); /* Undocumented; unused by readline */ extern int rl_discard_argument PARAMS((void)); /* Utility functions to bind keys to readline commands. */ extern int rl_add_defun PARAMS((const char *, rl_command_func_t *, int)); extern int rl_bind_key PARAMS((int, rl_command_func_t *)); extern int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap)); extern int rl_unbind_key PARAMS((int)); extern int rl_unbind_key_in_map PARAMS((int, Keymap)); extern int rl_bind_key_if_unbound PARAMS((int, rl_command_func_t *)); extern int rl_bind_key_if_unbound_in_map PARAMS((int, rl_command_func_t *, Keymap)); extern int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap)); extern int rl_unbind_command_in_map PARAMS((const char *, Keymap)); extern int rl_bind_keyseq PARAMS((const char *, rl_command_func_t *)); extern int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); extern int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *)); extern int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap)); extern char *rl_variable_value PARAMS((const char *)); extern int rl_variable_bind PARAMS((const char *, const char *)); /* Backwards compatibility, use rl_bind_keyseq_in_map instead. */ extern int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap)); /* Backwards compatibility, use rl_generic_bind instead. */ extern int rl_macro_bind PARAMS((const char *, const char *, Keymap)); /* Undocumented in the texinfo manual; not really useful to programs. */ extern int rl_translate_keyseq PARAMS((const char *, char *, int *)); extern char *rl_untranslate_keyseq PARAMS((int)); extern rl_command_func_t *rl_named_function PARAMS((const char *)); extern rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *)); extern void rl_list_funmap_names PARAMS((void)); extern char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap)); extern char **rl_invoking_keyseqs PARAMS((rl_command_func_t *)); extern void rl_function_dumper PARAMS((int)); extern void rl_macro_dumper PARAMS((int)); extern void rl_variable_dumper PARAMS((int)); extern int rl_read_init_file PARAMS((const char *)); extern int rl_parse_and_bind PARAMS((char *)); /* Functions for manipulating keymaps. */ extern Keymap rl_make_bare_keymap PARAMS((void)); extern Keymap rl_copy_keymap PARAMS((Keymap)); extern Keymap rl_make_keymap PARAMS((void)); extern void rl_discard_keymap PARAMS((Keymap)); extern void rl_free_keymap PARAMS((Keymap)); extern Keymap rl_get_keymap_by_name PARAMS((const char *)); extern char *rl_get_keymap_name PARAMS((Keymap)); extern void rl_set_keymap PARAMS((Keymap)); extern Keymap rl_get_keymap PARAMS((void)); /* Undocumented; used internally only. */ extern void rl_set_keymap_from_edit_mode PARAMS((void)); extern char *rl_get_keymap_name_from_edit_mode PARAMS((void)); /* Functions for manipulating the funmap, which maps command names to functions. */ extern int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *)); extern const char **rl_funmap_names PARAMS((void)); /* Undocumented, only used internally -- there is only one funmap, and this function may be called only once. */ extern void rl_initialize_funmap PARAMS((void)); /* Utility functions for managing keyboard macros. */ extern void rl_push_macro_input PARAMS((char *)); /* Functions for undoing, from undo.c */ extern void rl_add_undo PARAMS((enum undo_code, int, int, char *)); extern void rl_free_undo_list PARAMS((void)); extern int rl_do_undo PARAMS((void)); extern int rl_begin_undo_group PARAMS((void)); extern int rl_end_undo_group PARAMS((void)); extern int rl_modifying PARAMS((int, int)); /* Functions for redisplay. */ extern void rl_redisplay PARAMS((void)); extern int rl_on_new_line PARAMS((void)); extern int rl_on_new_line_with_prompt PARAMS((void)); extern int rl_forced_update_display PARAMS((void)); extern int rl_clear_message PARAMS((void)); extern int rl_reset_line_state PARAMS((void)); extern int rl_crlf PARAMS((void)); #if defined (USE_VARARGS) && defined (PREFER_STDARG) extern int rl_message (const char *, ...) __attribute__((__format__ (printf, 1, 2))); #else extern int rl_message (); #endif extern int rl_show_char PARAMS((int)); /* Undocumented in texinfo manual. */ extern int rl_character_len PARAMS((int, int)); /* Save and restore internal prompt redisplay information. */ extern void rl_save_prompt PARAMS((void)); extern void rl_restore_prompt PARAMS((void)); /* Modifying text. */ extern void rl_replace_line PARAMS((const char *, int)); extern int rl_insert_text PARAMS((const char *)); extern int rl_delete_text PARAMS((int, int)); extern int rl_kill_text PARAMS((int, int)); extern char *rl_copy_text PARAMS((int, int)); /* Terminal and tty mode management. */ extern void rl_prep_terminal PARAMS((int)); extern void rl_deprep_terminal PARAMS((void)); extern void rl_tty_set_default_bindings PARAMS((Keymap)); extern void rl_tty_unset_default_bindings PARAMS((Keymap)); extern int rl_reset_terminal PARAMS((const char *)); extern void rl_resize_terminal PARAMS((void)); extern void rl_set_screen_size PARAMS((int, int)); extern void rl_get_screen_size PARAMS((int *, int *)); extern void rl_reset_screen_size PARAMS((void)); extern char *rl_get_termcap PARAMS((const char *)); /* Functions for character input. */ extern int rl_stuff_char PARAMS((int)); extern int rl_execute_next PARAMS((int)); extern int rl_clear_pending_input PARAMS((void)); extern int rl_read_key PARAMS((void)); extern int rl_getc PARAMS((FILE *)); extern int rl_set_keyboard_input_timeout PARAMS((int)); /* `Public' utility functions . */ extern void rl_extend_line_buffer PARAMS((int)); extern int rl_ding PARAMS((void)); extern int rl_alphabetic PARAMS((int)); extern void rl_free PARAMS((void *)); /* Readline signal handling, from signals.c */ extern int rl_set_signals PARAMS((void)); extern int rl_clear_signals PARAMS((void)); extern void rl_cleanup_after_signal PARAMS((void)); extern void rl_reset_after_signal PARAMS((void)); extern void rl_free_line_state PARAMS((void)); extern void rl_echo_signal_char PARAMS((int)); extern int rl_set_paren_blink_timeout PARAMS((int)); /* History management functions. */ extern void rl_clear_history PARAMS((void)); /* Undocumented. */ extern int rl_maybe_save_line PARAMS((void)); extern int rl_maybe_unsave_line PARAMS((void)); extern int rl_maybe_replace_line PARAMS((void)); /* Completion functions. */ extern int rl_complete_internal PARAMS((int)); extern void rl_display_match_list PARAMS((char **, int, int)); extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *)); extern char *rl_username_completion_function PARAMS((const char *, int)); extern char *rl_filename_completion_function PARAMS((const char *, int)); extern int rl_completion_mode PARAMS((rl_command_func_t *)); #if 0 /* Backwards compatibility (compat.c). These will go away sometime. */ extern void free_undo_list PARAMS((void)); extern int maybe_save_line PARAMS((void)); extern int maybe_unsave_line PARAMS((void)); extern int maybe_replace_line PARAMS((void)); extern int ding PARAMS((void)); extern int alphabetic PARAMS((int)); extern int crlf PARAMS((void)); extern char **completion_matches PARAMS((char *, rl_compentry_func_t *)); extern char *username_completion_function PARAMS((const char *, int)); extern char *filename_completion_function PARAMS((const char *, int)); #endif /* **************************************************************** */ /* */ /* Well Published Variables */ /* */ /* **************************************************************** */ /* The version of this incarnation of the readline library. */ extern const char *rl_library_version; /* e.g., "4.2" */ extern int rl_readline_version; /* e.g., 0x0402 */ /* True if this is real GNU readline. */ extern int rl_gnu_readline_p; /* Flags word encapsulating the current readline state. */ extern int rl_readline_state; /* Says which editing mode readline is currently using. 1 means emacs mode; 0 means vi mode. */ extern int rl_editing_mode; /* Insert or overwrite mode for emacs mode. 1 means insert mode; 0 means overwrite mode. Reset to insert mode on each input line. */ extern int rl_insert_mode; /* The name of the calling program. You should initialize this to whatever was in argv[0]. It is used when parsing conditionals. */ extern const char *rl_readline_name; /* The prompt readline uses. This is set from the argument to readline (), and should not be assigned to directly. */ extern char *rl_prompt; /* The prompt string that is actually displayed by rl_redisplay. Public so applications can more easily supply their own redisplay functions. */ extern char *rl_display_prompt; /* The line buffer that is in use. */ extern char *rl_line_buffer; /* The location of point, and end. */ extern int rl_point; extern int rl_end; /* The mark, or saved cursor position. */ extern int rl_mark; /* Flag to indicate that readline has finished with the current input line and should return it. */ extern int rl_done; /* If set to a character value, that will be the next keystroke read. */ extern int rl_pending_input; /* Non-zero if we called this function from _rl_dispatch(). It's present so functions can find out whether they were called from a key binding or directly from an application. */ extern int rl_dispatching; /* Non-zero if the user typed a numeric argument before executing the current function. */ extern int rl_explicit_arg; /* The current value of the numeric argument specified by the user. */ extern int rl_numeric_arg; /* The address of the last command function Readline executed. */ extern rl_command_func_t *rl_last_func; /* The name of the terminal to use. */ extern const char *rl_terminal_name; /* The input and output streams. */ extern FILE *rl_instream; extern FILE *rl_outstream; /* If non-zero, Readline gives values of LINES and COLUMNS from the environment greater precedence than values fetched from the kernel when computing the screen dimensions. */ extern int rl_prefer_env_winsize; /* If non-zero, then this is the address of a function to call just before readline_internal () prints the first prompt. */ extern rl_hook_func_t *rl_startup_hook; /* If non-zero, this is the address of a function to call just before readline_internal_setup () returns and readline_internal starts reading input characters. */ extern rl_hook_func_t *rl_pre_input_hook; /* The address of a function to call periodically while Readline is awaiting character input, or NULL, for no event handling. */ extern rl_hook_func_t *rl_event_hook; /* The address of a function to call if a read is interrupted by a signal. */ extern rl_hook_func_t *rl_signal_event_hook; /* The address of a function to call if Readline needs to know whether or not there is data available from the current input source. */ extern rl_hook_func_t *rl_input_available_hook; /* The address of the function to call to fetch a character from the current Readline input stream */ extern rl_getc_func_t *rl_getc_function; extern rl_voidfunc_t *rl_redisplay_function; extern rl_vintfunc_t *rl_prep_term_function; extern rl_voidfunc_t *rl_deprep_term_function; /* Dispatch variables. */ extern Keymap rl_executing_keymap; extern Keymap rl_binding_keymap; extern int rl_executing_key; extern char *rl_executing_keyseq; extern int rl_key_sequence_length; /* Display variables. */ /* If non-zero, readline will erase the entire line, including any prompt, if the only thing typed on an otherwise-blank line is something bound to rl_newline. */ extern int rl_erase_empty_line; /* If non-zero, the application has already printed the prompt (rl_prompt) before calling readline, so readline should not output it the first time redisplay is done. */ extern int rl_already_prompted; /* A non-zero value means to read only this many characters rather than up to a character bound to accept-line. */ extern int rl_num_chars_to_read; /* The text of a currently-executing keyboard macro. */ extern char *rl_executing_macro; /* Variables to control readline signal handling. */ /* If non-zero, readline will install its own signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ extern int rl_catch_signals; /* If non-zero, readline will install a signal handler for SIGWINCH that also attempts to call any calling application's SIGWINCH signal handler. Note that the terminal is not cleaned up before the application's signal handler is called; use rl_cleanup_after_signal() to do that. */ extern int rl_catch_sigwinch; /* If non-zero, the readline SIGWINCH handler will modify LINES and COLUMNS in the environment. */ extern int rl_change_environment; /* Completion variables. */ /* Pointer to the generator function for completion_matches (). NULL means to use rl_filename_completion_function (), the default filename completer. */ extern rl_compentry_func_t *rl_completion_entry_function; /* Optional generator for menu completion. Default is rl_completion_entry_function (rl_filename_completion_function). */ extern rl_compentry_func_t *rl_menu_completion_entry_function; /* If rl_ignore_some_completions_function is non-NULL it is the address of a function to call after all of the possible matches have been generated, but before the actual completion is done to the input line. The function is called with one argument; a NULL terminated array of (char *). If your function removes any of the elements, they must be free()'ed. */ extern rl_compignore_func_t *rl_ignore_some_completions_function; /* Pointer to alternative function to create matches. 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 then call the value of rl_completion_entry_function to try to match, otherwise use the array of strings returned. */ extern rl_completion_func_t *rl_attempted_completion_function; /* The basic list of characters that signal a break between words for the completer routine. The initial contents of this variable is what breaks words in the shell, i.e. "n\"\\'`@$>". */ extern const char *rl_basic_word_break_characters; /* The list of characters that signal a break between words for rl_complete_internal. The default list is the contents of rl_basic_word_break_characters. */ extern /*const*/ char *rl_completer_word_break_characters; /* Hook function to allow an application to set the completion word break characters before readline breaks up the line. Allows position-dependent word break characters. */ extern rl_cpvfunc_t *rl_completion_word_break_hook; /* 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. */ extern const char *rl_completer_quote_characters; /* List of quote characters which cause a word break. */ extern const char *rl_basic_quote_characters; /* List of characters that need to be quoted in filenames by the completer. */ extern const char *rl_filename_quote_characters; /* List of characters that are word break characters, but should be left in TEXT when it is passed to the completion function. The shell uses this to help determine what kind of completing to do. */ extern const char *rl_special_prefixes; /* If non-zero, then this is the address of a function to call when completing on a directory name. The function is called with the address of a string (the current directory name) as an arg. It changes what is displayed when the possible completions are printed or inserted. The directory completion hook should perform any necessary dequoting. This function should return 1 if it modifies the directory name pointer passed as an argument. If the directory completion hook returns 0, it should not modify the directory name pointer passed as an argument. */ extern rl_icppfunc_t *rl_directory_completion_hook; /* If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike rl_directory_completion_hook, it only modifies the directory name used in opendir(2), not what is displayed when the possible completions are printed or inserted. If set, it takes precedence over rl_directory_completion_hook. The directory rewrite hook should perform any necessary dequoting. This function has the same return value properties as the directory_completion_hook. I'm not happy with how this works yet, so it's undocumented. I'm trying it in bash to see how well it goes. */ extern rl_icppfunc_t *rl_directory_rewrite_hook; /* If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. It should modify the directory name passed as an argument if appropriate, and return non-zero if it modifies the name. This should not worry about dequoting the filename; that has already happened by the time it gets here. */ extern rl_icppfunc_t *rl_filename_stat_hook; /* If non-zero, this is the address of a function to call when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should either return its first argument (if no conversion takes place) or newly-allocated memory. This can, for instance, convert filenames between character sets for comparison against what's typed at the keyboard. The returned value is what is added to the list of matches. The second argument is the length of the filename to be converted. */ extern rl_dequote_func_t *rl_filename_rewrite_hook; /* Backwards compatibility with previous versions of readline. */ #define rl_symbolic_link_hook rl_directory_completion_hook /* If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called instead of actually doing the display. It takes three arguments: (char **matches, int num_matches, int max_length) where MATCHES is the array of strings that matched, NUM_MATCHES is the number of strings in that array, and MAX_LENGTH is the length of the longest string in that array. */ extern rl_compdisp_func_t *rl_completion_display_matches_hook; /* 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 finder function. */ extern int rl_filename_completion_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 filename contains any characters in rl_word_break_chars. This is ALWAYS non-zero on entry, and can only be changed within a completion entry finder function. */ extern int rl_filename_quoting_desired; /* Set to a function to quote a filename in an application-specific fashion. Called with the text to quote, the type of match found (single or multiple) and a pointer to the quoting character to be used, which the function can reset if desired. */ extern rl_quote_func_t *rl_filename_quoting_function; /* Function to call to remove quoting characters from a filename. Called before completion is attempted, so the embedded quotes do not interfere with matching names in the file system. */ extern rl_dequote_func_t *rl_filename_dequoting_function; /* Function to call to decide whether or not a word break character is quoted. If a character is quoted, it does not break words for the completer. */ extern rl_linebuf_func_t *rl_char_is_quoted_p; /* Non-zero means to suppress normal filename completion after the user-specified completion function has been called. */ extern int rl_attempted_completion_over; /* Set to a character describing the type of completion being attempted by rl_complete_internal; available for use by application completion functions. */ extern int rl_completion_type; /* Set to the last key used to invoke one of the completion functions */ extern int rl_completion_invoking_key; /* 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. */ extern int rl_completion_query_items; /* Character appended to completed words when at the end of the line. The default is a space. Nothing is added if this is '\0'. */ extern int rl_completion_append_character; /* If set to non-zero by an application completion function, rl_completion_append_character will not be appended. */ extern int rl_completion_suppress_append; /* Set to any quote character readline thinks it finds before any application completion function is called. */ extern int rl_completion_quote_character; /* Set to a non-zero value if readline found quoting anywhere in the word to be completed; set before any application completion function is called. */ extern int rl_completion_found_quote; /* If non-zero, the completion functions don't append any closing quote. This is set to 0 by rl_complete_internal and may be changed by an application-specific completion function. */ extern int rl_completion_suppress_quote; /* If non-zero, readline will sort the completion matches. On by default. */ extern int rl_sort_completion_matches; /* If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the mark-directories variable (which is user-settable). This exists so that application completion functions can override the user's preference (set via the mark-symlinked-directories variable) if appropriate. It's set to the value of _rl_complete_mark_symlink_dirs in rl_complete_internal before any application-specific completion function is called, so without that function doing anything, the user's preferences are honored. */ extern int rl_completion_mark_symlink_dirs; /* If non-zero, then disallow duplicates in the matches. */ extern int rl_ignore_completion_duplicates; /* If this is non-zero, completion is (temporarily) inhibited, and the completion character will be inserted as any other. */ extern int rl_inhibit_completion; /* Input error; can be returned by (*rl_getc_function) if readline is reading a top-level command (RL_ISSTATE (RL_STATE_READCMD)). */ #define READERR (-2) /* Definitions available for use by readline clients. */ #define RL_PROMPT_START_IGNORE '\001' #define RL_PROMPT_END_IGNORE '\002' /* Possible values for do_replace argument to rl_filename_quoting_function, called by rl_complete_internal. */ #define NO_MATCH 0 #define SINGLE_MATCH 1 #define MULT_MATCH 2 /* Possible state values for rl_readline_state */ #define RL_STATE_NONE 0x000000 /* no state; before first call */ #define RL_STATE_INITIALIZING 0x0000001 /* initializing */ #define RL_STATE_INITIALIZED 0x0000002 /* initialization done */ #define RL_STATE_TERMPREPPED 0x0000004 /* terminal is prepped */ #define RL_STATE_READCMD 0x0000008 /* reading a command key */ #define RL_STATE_METANEXT 0x0000010 /* reading input after ESC */ #define RL_STATE_DISPATCHING 0x0000020 /* dispatching to a command */ #define RL_STATE_MOREINPUT 0x0000040 /* reading more input in a command function */ #define RL_STATE_ISEARCH 0x0000080 /* doing incremental search */ #define RL_STATE_NSEARCH 0x0000100 /* doing non-inc search */ #define RL_STATE_SEARCH 0x0000200 /* doing a history search */ #define RL_STATE_NUMERICARG 0x0000400 /* reading numeric argument */ #define RL_STATE_MACROINPUT 0x0000800 /* getting input from a macro */ #define RL_STATE_MACRODEF 0x0001000 /* defining keyboard macro */ #define RL_STATE_OVERWRITE 0x0002000 /* overwrite mode */ #define RL_STATE_COMPLETING 0x0004000 /* doing completion */ #define RL_STATE_SIGHANDLER 0x0008000 /* in readline sighandler */ #define RL_STATE_UNDOING 0x0010000 /* doing an undo */ #define RL_STATE_INPUTPENDING 0x0020000 /* rl_execute_next called */ #define RL_STATE_TTYCSAVED 0x0040000 /* tty special chars saved */ #define RL_STATE_CALLBACK 0x0080000 /* using the callback interface */ #define RL_STATE_VIMOTION 0x0100000 /* reading vi motion arg */ #define RL_STATE_MULTIKEY 0x0200000 /* reading multiple-key command */ #define RL_STATE_VICMDONCE 0x0400000 /* entered vi command mode at least once */ #define RL_STATE_REDISPLAYING 0x0800000 /* updating terminal display */ #define RL_STATE_DONE 0x1000000 /* done; accepted line */ #define RL_SETSTATE(x) (rl_readline_state |= (x)) #define RL_UNSETSTATE(x) (rl_readline_state &= ~(x)) #define RL_ISSTATE(x) (rl_readline_state & (x)) struct readline_state { /* line state */ int point; int end; int mark; char *buffer; int buflen; UNDO_LIST *ul; char *prompt; /* global state */ int rlstate; int done; Keymap kmap; /* input state */ rl_command_func_t *lastfunc; int insmode; int edmode; int kseqlen; FILE *inf; FILE *outf; int pendingin; char *macro; /* signal state */ int catchsigs; int catchsigwinch; /* search state */ /* completion state */ /* options state */ /* reserved for future expansion, so the struct size doesn't change */ char reserved[64]; }; extern int rl_save_state PARAMS((struct readline_state *)); extern int rl_restore_state PARAMS((struct readline_state *)); #ifdef __cplusplus } #endif #endif /* _READLINE_H_ */ readline-6.3/rldefs.h0000664000043600000000000001140412211146044013366 0ustar chetwheel/* rldefs.h -- an attempt to isolate some of the system-specific defines for readline. This should be included after any files that define system-specific constants like _POSIX_VERSION or USG. */ /* Copyright (C) 1987-2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RLDEFS_H_) #define _RLDEFS_H_ #if defined (HAVE_CONFIG_H) # include "config.h" #endif #include "rlstdc.h" #if defined (STRCOLL_BROKEN) # undef HAVE_STRCOLL #endif #if defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING) # define TERMIOS_TTY_DRIVER #else # if defined (HAVE_TERMIO_H) # define TERMIO_TTY_DRIVER # else # if !defined (__MINGW32__) # define NEW_TTY_DRIVER # else # define NO_TTY_DRIVER # endif # endif #endif /* Posix macro to check file in statbuf for directory-ness. This requires that be included before this test. */ #if defined (S_IFDIR) && !defined (S_ISDIR) # define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) #endif /* Decide which flavor of the header file describing the C library string functions to include and include it. */ #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ #if defined (PREFER_STDARG) # include #else # if defined (PREFER_VARARGS) # include # endif #endif #if defined (HAVE_STRCASECMP) #define _rl_stricmp strcasecmp #define _rl_strnicmp strncasecmp #else extern int _rl_stricmp PARAMS((const char *, const char *)); extern int _rl_strnicmp PARAMS((const char *, const char *, int)); #endif #if defined (HAVE_STRPBRK) && !defined (HAVE_MULTIBYTE) # define _rl_strpbrk(a,b) strpbrk((a),(b)) #else extern char *_rl_strpbrk PARAMS((const char *, const char *)); #endif #if !defined (emacs_mode) # define no_mode -1 # define vi_mode 0 # define emacs_mode 1 #endif #if !defined (RL_IM_INSERT) # define RL_IM_INSERT 1 # define RL_IM_OVERWRITE 0 # # define RL_IM_DEFAULT RL_IM_INSERT #endif /* If you cast map[key].function to type (Keymap) on a Cray, the compiler takes the value of map[key].function and divides it by 4 to convert between pointer types (pointers to functions and pointers to structs are different sizes). This is not what is wanted. */ #if defined (CRAY) # define FUNCTION_TO_KEYMAP(map, key) (Keymap)((int)map[key].function) # define KEYMAP_TO_FUNCTION(data) (rl_command_func_t *)((int)(data)) #else # define FUNCTION_TO_KEYMAP(map, key) (Keymap)(map[key].function) # define KEYMAP_TO_FUNCTION(data) (rl_command_func_t *)(data) #endif #ifndef savestring #define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) #endif /* Possible values for _rl_bell_preference. */ #define NO_BELL 0 #define AUDIBLE_BELL 1 #define VISIBLE_BELL 2 /* Definitions used when searching the line for characters. */ /* NOTE: it is necessary that opposite directions are inverses */ #define FTO 1 /* forward to */ #define BTO -1 /* backward to */ #define FFIND 2 /* forward find */ #define BFIND -2 /* backward find */ /* Possible values for the found_quote flags word used by the completion functions. It says what kind of (shell-like) quoting we found anywhere in the line. */ #define RL_QF_SINGLE_QUOTE 0x01 #define RL_QF_DOUBLE_QUOTE 0x02 #define RL_QF_BACKSLASH 0x04 #define RL_QF_OTHER_QUOTE 0x08 /* Default readline line buffer length. */ #define DEFAULT_BUFFER_SIZE 256 #if !defined (STREQ) #define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0)) #define STREQN(a, b, n) (((n) == 0) ? (1) \ : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) #endif #if !defined (RL_STRLEN) # define RL_STRLEN(s) (((s) && (s)[0]) ? ((s)[1] ? ((s)[2] ? strlen(s) : 2) : 1) : 0) #endif #if !defined (FREE) # define FREE(x) if (x) free (x) #endif #if !defined (SWAP) # define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) #endif /* CONFIGURATION SECTION */ #include "rlconf.h" #endif /* !_RLDEFS_H_ */ readline-6.3/rlmbutil.h0000644000043600000000000001237711565075253013767 0ustar chetwheel/* rlmbutil.h -- utility functions for multibyte characters. */ /* Copyright (C) 2001-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RL_MBUTIL_H_) #define _RL_MBUTIL_H_ #include "rlstdc.h" /************************************************/ /* check multibyte capability for I18N code */ /************************************************/ /* For platforms which support the ISO C amendement 1 functionality we support user defined character classes. */ /* Solaris 2.5 has a bug: must be included before . */ #if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H) # include # include # if defined (HAVE_ISWCTYPE) && \ defined (HAVE_ISWLOWER) && \ defined (HAVE_ISWUPPER) && \ defined (HAVE_MBSRTOWCS) && \ defined (HAVE_MBRTOWC) && \ defined (HAVE_MBRLEN) && \ defined (HAVE_TOWLOWER) && \ defined (HAVE_TOWUPPER) && \ defined (HAVE_WCHAR_T) && \ defined (HAVE_WCWIDTH) /* system is supposed to support XPG5 */ # define HANDLE_MULTIBYTE 1 # endif #endif /* If we don't want multibyte chars even on a system that supports them, let the configuring user turn multibyte support off. */ #if defined (NO_MULTIBYTE_SUPPORT) # undef HANDLE_MULTIBYTE #endif /* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ #if HANDLE_MULTIBYTE && !defined (HAVE_MBSTATE_T) # define wcsrtombs(dest, src, len, ps) (wcsrtombs) (dest, src, len, 0) # define mbsrtowcs(dest, src, len, ps) (mbsrtowcs) (dest, src, len, 0) # define wcrtomb(s, wc, ps) (wcrtomb) (s, wc, 0) # define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) # define mbrlen(s, n, ps) (mbrlen) (s, n, 0) # define mbstate_t int #endif /* Make sure MB_LEN_MAX is at least 16 on systems that claim to be able to handle multibyte chars (some systems define MB_LEN_MAX as 1) */ #ifdef HANDLE_MULTIBYTE # include # if defined(MB_LEN_MAX) && (MB_LEN_MAX < 16) # undef MB_LEN_MAX # endif # if !defined (MB_LEN_MAX) # define MB_LEN_MAX 16 # endif #endif /************************************************/ /* end of multibyte capability checks for I18N */ /************************************************/ /* * Flags for _rl_find_prev_mbchar and _rl_find_next_mbchar: * * MB_FIND_ANY find any multibyte character * MB_FIND_NONZERO find a non-zero-width multibyte character */ #define MB_FIND_ANY 0x00 #define MB_FIND_NONZERO 0x01 extern int _rl_find_prev_mbchar PARAMS((char *, int, int)); extern int _rl_find_next_mbchar PARAMS((char *, int, int, int)); #ifdef HANDLE_MULTIBYTE extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *)); extern int _rl_get_char_len PARAMS((char *, mbstate_t *)); extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *)); extern int _rl_read_mbchar PARAMS((char *, int)); extern int _rl_read_mbstring PARAMS((int, char *, int)); extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int)); extern wchar_t _rl_char_value PARAMS((char *, int)); extern int _rl_walphabetic PARAMS((wchar_t)); #define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc)) #define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc)) #define MB_NEXTCHAR(b,s,c,f) \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \ ? _rl_find_next_mbchar ((b), (s), (c), (f)) \ : ((s) + (c))) #define MB_PREVCHAR(b,s,f) \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \ ? _rl_find_prev_mbchar ((b), (s), (f)) \ : ((s) - 1)) #define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2) #define MB_NULLWCH(x) ((x) == 0) /* Unicode combining characters range from U+0300 to U+036F */ #define UNICODE_COMBINING_CHAR(x) ((x) >= 768 && (x) <= 879) #if defined (WCWIDTH_BROKEN) # define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR(wc)) ? 0 : wcwidth(wc)) #else # define WCWIDTH(wc) wcwidth(wc) #endif #else /* !HANDLE_MULTIBYTE */ #undef MB_LEN_MAX #undef MB_CUR_MAX #define MB_LEN_MAX 1 #define MB_CUR_MAX 1 #define _rl_find_prev_mbchar(b, i, f) (((i) == 0) ? (i) : ((i) - 1)) #define _rl_find_next_mbchar(b, i1, i2, f) ((i1) + (i2)) #define _rl_char_value(buf,ind) ((buf)[(ind)]) #define _rl_walphabetic(c) (rl_alphabetic (c)) #define _rl_to_wupper(c) (_rl_to_upper (c)) #define _rl_to_wlower(c) (_rl_to_lower (c)) #define MB_NEXTCHAR(b,s,c,f) ((s) + (c)) #define MB_PREVCHAR(b,s,f) ((s) - 1) #define MB_INVALIDCH(x) (0) #define MB_NULLWCH(x) (0) #endif /* !HANDLE_MULTIBYTE */ extern int rl_byte_oriented; #endif /* _RL_MBUTIL_H_ */ readline-6.3/rlprivate.h0000664000043600000000000004046512023156217014134 0ustar chetwheel/* rlprivate.h -- functions and variables global to the readline library, but not intended for use by applications. */ /* Copyright (C) 1999-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RL_PRIVATE_H_) #define _RL_PRIVATE_H_ #include "rlconf.h" /* for VISIBLE_STATS */ #include "rlstdc.h" #include "posixjmp.h" /* defines procenv_t */ /************************************************************************* * * * Convenience definitions * * * *************************************************************************/ #define EMACS_MODE() (rl_editing_mode == emacs_mode) #define VI_COMMAND_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap) #define VI_INSERT_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_insertion_keymap) #define RL_CHECK_SIGNALS() \ do { \ if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \ } while (0) #define RL_SIG_RECEIVED() (_rl_caught_signal != 0) #define RL_SIGINT_RECEIVED() (_rl_caught_signal == SIGINT) #define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay) #define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc) /************************************************************************* * * * Global structs undocumented in texinfo manual and not in readline.h * * * *************************************************************************/ /* search types */ #define RL_SEARCH_ISEARCH 0x01 /* incremental search */ #define RL_SEARCH_NSEARCH 0x02 /* non-incremental search */ #define RL_SEARCH_CSEARCH 0x04 /* intra-line char search */ /* search flags */ #define SF_REVERSE 0x01 #define SF_FOUND 0x02 #define SF_FAILED 0x04 #define SF_CHGKMAP 0x08 typedef struct __rl_search_context { int type; int sflags; char *search_string; int search_string_index; int search_string_size; char **lines; char *allocated_line; int hlen; int hindex; int save_point; int save_mark; int save_line; int last_found_line; char *prev_line_found; UNDO_LIST *save_undo_list; Keymap keymap; /* used when dispatching commands in search string */ Keymap okeymap; /* original keymap */ int history_pos; int direction; int prevc; int lastc; #if defined (HANDLE_MULTIBYTE) char mb[MB_LEN_MAX]; char pmb[MB_LEN_MAX]; #endif char *sline; int sline_len; int sline_index; char *search_terminators; } _rl_search_cxt; /* Callback data for reading numeric arguments */ #define NUM_SAWMINUS 0x01 #define NUM_SAWDIGITS 0x02 #define NUM_READONE 0x04 typedef int _rl_arg_cxt; /* A context for reading key sequences longer than a single character when using the callback interface. */ #define KSEQ_DISPATCHED 0x01 #define KSEQ_SUBSEQ 0x02 #define KSEQ_RECURSIVE 0x04 typedef struct __rl_keyseq_context { int flags; int subseq_arg; int subseq_retval; /* XXX */ Keymap dmap; Keymap oldmap; int okey; struct __rl_keyseq_context *ocxt; int childval; } _rl_keyseq_cxt; /* vi-mode commands that use result of motion command to define boundaries */ #define VIM_DELETE 0x01 #define VIM_CHANGE 0x02 #define VIM_YANK 0x04 /* various states for vi-mode commands that use motion commands. reflects RL_READLINE_STATE */ #define VMSTATE_READ 0x01 #define VMSTATE_NUMARG 0x02 typedef struct __rl_vimotion_context { int op; int state; int flags; /* reserved */ _rl_arg_cxt ncxt; int numeric_arg; int start, end; /* rl_point, rl_end */ int key, motion; /* initial key, motion command */ } _rl_vimotion_cxt; /* fill in more as needed */ /* `Generic' callback data and functions */ typedef struct __rl_callback_generic_arg { int count; int i1, i2; /* add here as needed */ } _rl_callback_generic_arg; typedef int _rl_callback_func_t PARAMS((_rl_callback_generic_arg *)); typedef void _rl_sigcleanup_func_t PARAMS((int, void *)); /************************************************************************* * * * Global functions undocumented in texinfo manual and not in readline.h * * * *************************************************************************/ /************************************************************************* * * * Global variables undocumented in texinfo manual and not in readline.h * * * *************************************************************************/ /* complete.c */ extern int rl_complete_with_tilde_expansion; #if defined (VISIBLE_STATS) extern int rl_visible_stats; #endif /* VISIBLE_STATS */ #if defined (COLOR_SUPPORT) extern int _rl_colored_stats; #endif /* readline.c */ extern int rl_line_buffer_len; extern int rl_arg_sign; extern int rl_visible_prompt_length; extern int rl_byte_oriented; /* display.c */ extern int rl_display_fixed; /* parens.c */ extern int rl_blink_matching_paren; /************************************************************************* * * * Global functions and variables unused and undocumented * * * *************************************************************************/ /* kill.c */ extern int rl_set_retained_kills PARAMS((int)); /* terminal.c */ extern void _rl_set_screen_size PARAMS((int, int)); /* undo.c */ extern int _rl_fix_last_undo_of_type PARAMS((int, int, int)); /* util.c */ extern char *_rl_savestring PARAMS((const char *)); /************************************************************************* * * * Functions and variables private to the readline library * * * *************************************************************************/ /* NOTE: Functions and variables prefixed with `_rl_' are pseudo-global: they are global so they can be shared between files in the readline library, but are not intended to be visible to readline callers. */ /************************************************************************* * Undocumented private functions * *************************************************************************/ #if defined(READLINE_CALLBACKS) /* readline.c */ extern void readline_internal_setup PARAMS((void)); extern char *readline_internal_teardown PARAMS((int)); extern int readline_internal_char PARAMS((void)); extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc PARAMS((void)); extern void _rl_keyseq_cxt_dispose PARAMS((_rl_keyseq_cxt *)); extern void _rl_keyseq_chain_dispose PARAMS((void)); extern int _rl_dispatch_callback PARAMS((_rl_keyseq_cxt *)); /* callback.c */ extern _rl_callback_generic_arg *_rl_callback_data_alloc PARAMS((int)); extern void _rl_callback_data_dispose PARAMS((_rl_callback_generic_arg *)); #endif /* READLINE_CALLBACKS */ /* bind.c */ extern char *_rl_untranslate_macro_value PARAMS((char *, int)); /* complete.c */ extern void _rl_reset_completion_state PARAMS((void)); extern char _rl_find_completion_word PARAMS((int *, int *)); extern void _rl_free_match_list PARAMS((char **)); /* display.c */ extern char *_rl_strip_prompt PARAMS((char *)); extern void _rl_reset_prompt PARAMS((void)); extern void _rl_move_cursor_relative PARAMS((int, const char *)); extern void _rl_move_vert PARAMS((int)); extern void _rl_save_prompt PARAMS((void)); extern void _rl_restore_prompt PARAMS((void)); extern char *_rl_make_prompt_for_search PARAMS((int)); extern void _rl_erase_at_end_of_line PARAMS((int)); extern void _rl_clear_to_eol PARAMS((int)); extern void _rl_clear_screen PARAMS((void)); extern void _rl_update_final PARAMS((void)); extern void _rl_redisplay_after_sigwinch PARAMS((void)); extern void _rl_clean_up_for_exit PARAMS((void)); extern void _rl_erase_entire_line PARAMS((void)); extern int _rl_current_display_line PARAMS((void)); /* input.c */ extern int _rl_any_typein PARAMS((void)); extern int _rl_input_available PARAMS((void)); extern int _rl_input_queued PARAMS((int)); extern void _rl_insert_typein PARAMS((int)); extern int _rl_unget_char PARAMS((int)); extern int _rl_pushed_input_available PARAMS((void)); /* isearch.c */ extern _rl_search_cxt *_rl_scxt_alloc PARAMS((int, int)); extern void _rl_scxt_dispose PARAMS((_rl_search_cxt *, int)); extern int _rl_isearch_dispatch PARAMS((_rl_search_cxt *, int)); extern int _rl_isearch_callback PARAMS((_rl_search_cxt *)); extern int _rl_search_getchar PARAMS((_rl_search_cxt *)); /* macro.c */ extern void _rl_with_macro_input PARAMS((char *)); extern int _rl_next_macro_key PARAMS((void)); extern int _rl_prev_macro_key PARAMS((void)); extern void _rl_push_executing_macro PARAMS((void)); extern void _rl_pop_executing_macro PARAMS((void)); extern void _rl_add_macro_char PARAMS((int)); extern void _rl_kill_kbd_macro PARAMS((void)); /* misc.c */ extern int _rl_arg_overflow PARAMS((void)); extern void _rl_arg_init PARAMS((void)); extern int _rl_arg_getchar PARAMS((void)); extern int _rl_arg_callback PARAMS((_rl_arg_cxt)); extern void _rl_reset_argument PARAMS((void)); extern void _rl_start_using_history PARAMS((void)); extern int _rl_free_saved_history_line PARAMS((void)); extern void _rl_set_insert_mode PARAMS((int, int)); extern void _rl_revert_all_lines PARAMS((void)); /* nls.c */ extern int _rl_init_eightbit PARAMS((void)); /* parens.c */ extern void _rl_enable_paren_matching PARAMS((int)); /* readline.c */ extern void _rl_init_line_state PARAMS((void)); extern void _rl_set_the_line PARAMS((void)); extern int _rl_dispatch PARAMS((int, Keymap)); extern int _rl_dispatch_subseq PARAMS((int, Keymap, int)); extern void _rl_internal_char_cleanup PARAMS((void)); /* rltty.c */ extern int _rl_disable_tty_signals PARAMS((void)); extern int _rl_restore_tty_signals PARAMS((void)); /* search.c */ extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *)); /* signals.c */ extern void _rl_signal_handler PARAMS((int)); extern void _rl_block_sigint PARAMS((void)); extern void _rl_release_sigint PARAMS((void)); extern void _rl_block_sigwinch PARAMS((void)); extern void _rl_release_sigwinch PARAMS((void)); /* terminal.c */ extern void _rl_get_screen_size PARAMS((int, int)); extern void _rl_sigwinch_resize_terminal PARAMS((void)); extern int _rl_init_terminal_io PARAMS((const char *)); #ifdef _MINIX extern void _rl_output_character_function PARAMS((int)); #else extern int _rl_output_character_function PARAMS((int)); #endif extern void _rl_output_some_chars PARAMS((const char *, int)); extern int _rl_backspace PARAMS((int)); extern void _rl_enable_meta_key PARAMS((void)); extern void _rl_disable_meta_key PARAMS((void)); extern void _rl_control_keypad PARAMS((int)); extern void _rl_set_cursor PARAMS((int, int)); /* text.c */ extern void _rl_fix_point PARAMS((int)); extern int _rl_replace_text PARAMS((const char *, int, int)); extern int _rl_forward_char_internal PARAMS((int)); extern int _rl_insert_char PARAMS((int, int)); extern int _rl_overwrite_char PARAMS((int, int)); extern int _rl_overwrite_rubout PARAMS((int, int)); extern int _rl_rubout_char PARAMS((int, int)); #if defined (HANDLE_MULTIBYTE) extern int _rl_char_search_internal PARAMS((int, int, char *, int)); #else extern int _rl_char_search_internal PARAMS((int, int, int)); #endif extern int _rl_set_mark_at_pos PARAMS((int)); /* undo.c */ extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *)); extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *)); extern void _rl_free_undo_list PARAMS((UNDO_LIST *)); /* util.c */ #if defined (USE_VARARGS) && defined (PREFER_STDARG) extern void _rl_ttymsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); extern void _rl_errmsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); extern void _rl_trace (const char *, ...) __attribute__((__format__ (printf, 1, 2))); #else extern void _rl_ttymsg (); extern void _rl_errmsg (); extern void _rl_trace (); #endif extern void _rl_audit_tty PARAMS((char *)); extern int _rl_tropen PARAMS((void)); extern int _rl_abort_internal PARAMS((void)); extern int _rl_null_function PARAMS((int, int)); extern char *_rl_strindex PARAMS((const char *, const char *)); extern int _rl_qsort_string_compare PARAMS((char **, char **)); extern int (_rl_uppercase_p) PARAMS((int)); extern int (_rl_lowercase_p) PARAMS((int)); extern int (_rl_pure_alphabetic) PARAMS((int)); extern int (_rl_digit_p) PARAMS((int)); extern int (_rl_to_lower) PARAMS((int)); extern int (_rl_to_upper) PARAMS((int)); extern int (_rl_digit_value) PARAMS((int)); /* vi_mode.c */ extern void _rl_vi_initialize_line PARAMS((void)); extern void _rl_vi_reset_last PARAMS((void)); extern void _rl_vi_set_last PARAMS((int, int, int)); extern int _rl_vi_textmod_command PARAMS((int)); extern void _rl_vi_done_inserting PARAMS((void)); extern int _rl_vi_domove_callback PARAMS((_rl_vimotion_cxt *)); /************************************************************************* * Undocumented private variables * *************************************************************************/ /* bind.c */ extern const char * const _rl_possible_control_prefixes[]; extern const char * const _rl_possible_meta_prefixes[]; /* callback.c */ extern _rl_callback_func_t *_rl_callback_func; extern _rl_callback_generic_arg *_rl_callback_data; /* complete.c */ extern int _rl_complete_show_all; extern int _rl_complete_show_unmodified; extern int _rl_complete_mark_directories; extern int _rl_complete_mark_symlink_dirs; extern int _rl_completion_prefix_display_length; extern int _rl_completion_columns; extern int _rl_print_completions_horizontally; extern int _rl_completion_case_fold; extern int _rl_completion_case_map; extern int _rl_match_hidden_files; extern int _rl_page_completions; extern int _rl_skip_completed_text; extern int _rl_menu_complete_prefix_first; /* display.c */ extern int _rl_vis_botlin; extern int _rl_last_c_pos; extern int _rl_suppress_redisplay; extern int _rl_want_redisplay; /* isearch.c */ extern char *_rl_isearch_terminators; extern _rl_search_cxt *_rl_iscxt; /* macro.c */ extern char *_rl_executing_macro; /* misc.c */ extern int _rl_history_preserve_point; extern int _rl_history_saved_point; extern _rl_arg_cxt _rl_argcxt; /* nls.c */ extern int _rl_utf8locale; /* readline.c */ extern int _rl_echoing_p; extern int _rl_horizontal_scroll_mode; extern int _rl_mark_modified_lines; extern int _rl_bell_preference; extern int _rl_meta_flag; extern int _rl_convert_meta_chars_to_ascii; extern int _rl_output_meta_chars; extern int _rl_bind_stty_chars; extern int _rl_revert_all_at_newline; extern int _rl_echo_control_chars; extern int _rl_show_mode_in_prompt; extern char *_rl_comment_begin; extern unsigned char _rl_parsing_conditionalized_out; extern Keymap _rl_keymap; extern FILE *_rl_in_stream; extern FILE *_rl_out_stream; extern int _rl_last_command_was_kill; extern int _rl_eof_char; extern procenv_t _rl_top_level; extern _rl_keyseq_cxt *_rl_kscxt; extern int _rl_keyseq_timeout; extern int _rl_executing_keyseq_size; /* search.c */ extern _rl_search_cxt *_rl_nscxt; /* signals.c */ extern int _rl_interrupt_immediately; extern int volatile _rl_caught_signal; extern _rl_sigcleanup_func_t *_rl_sigcleanup; extern void *_rl_sigcleanarg; extern int _rl_echoctl; extern int _rl_intr_char; extern int _rl_quit_char; extern int _rl_susp_char; /* terminal.c */ extern int _rl_enable_keypad; extern int _rl_enable_meta; extern char *_rl_term_clreol; extern char *_rl_term_clrpag; extern char *_rl_term_im; extern char *_rl_term_ic; extern char *_rl_term_ei; extern char *_rl_term_DC; extern char *_rl_term_up; extern char *_rl_term_dc; extern char *_rl_term_cr; extern char *_rl_term_IC; extern char *_rl_term_forward_char; extern int _rl_screenheight; extern int _rl_screenwidth; extern int _rl_screenchars; extern int _rl_terminal_can_insert; extern int _rl_term_autowrap; /* undo.c */ extern int _rl_doing_an_undo; extern int _rl_undo_group_level; /* vi_mode.c */ extern int _rl_vi_last_command; extern _rl_vimotion_cxt *_rl_vimvcxt; #endif /* _RL_PRIVATE_H_ */ readline-6.3/rlshell.h0000664000043600000000000000235211130207321013551 0ustar chetwheel/* rlshell.h -- utility functions normally provided by bash. */ /* Copyright (C) 1999-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RL_SHELL_H_) #define _RL_SHELL_H_ #include "rlstdc.h" extern char *sh_single_quote PARAMS((char *)); extern void sh_set_lines_and_columns PARAMS((int, int)); extern char *sh_get_env_value PARAMS((const char *)); extern char *sh_get_home_dir PARAMS((void)); extern int sh_unset_nodelay_mode PARAMS((int)); #endif /* _RL_SHELL_H_ */ readline-6.3/rlstdc.h0000664000043600000000000000345311543433705013421 0ustar chetwheel/* stdc.h -- macros to make source compile on both ANSI C and K&R C compilers. */ /* Copyright (C) 1993-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RL_STDC_H_) #define _RL_STDC_H_ /* Adapted from BSD /usr/include/sys/cdefs.h. */ /* A function can be defined using prototypes and compile on both ANSI C and traditional C compilers with something like this: extern char *func PARAMS((char *, char *, int)); */ #if !defined (PARAMS) # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define PARAMS(protos) protos # else # define PARAMS(protos) () # endif #endif #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) # define __attribute__(x) # endif #endif /* Moved from config.h.in because readline.h:rl_message depends on these defines. */ #if defined (__STDC__) && defined (HAVE_STDARG_H) # define PREFER_STDARG # define USE_VARARGS #else # if defined (HAVE_VARARGS_H) # define PREFER_VARARGS # define USE_VARARGS # endif #endif #endif /* !_RL_STDC_H_ */ readline-6.3/rltty.h0000664000043600000000000000474311130207321013270 0ustar chetwheel/* rltty.h - tty driver-related definitions used by some library files. */ /* Copyright (C) 1995-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RLTTY_H_) #define _RLTTY_H_ /* Posix systems use termios and the Posix signal functions. */ #if defined (TERMIOS_TTY_DRIVER) # include #endif /* TERMIOS_TTY_DRIVER */ /* System V machines use termio. */ #if defined (TERMIO_TTY_DRIVER) # include # if !defined (TCOON) # define TCOON 1 # endif #endif /* TERMIO_TTY_DRIVER */ /* Other (BSD) machines use sgtty. */ #if defined (NEW_TTY_DRIVER) # include #endif #include "rlwinsize.h" /* Define _POSIX_VDISABLE if we are not using the `new' tty driver and it is not already defined. It is used both to determine if a special character is disabled and to disable certain special characters. Posix systems should set to 0, USG systems to -1. */ #if !defined (NEW_TTY_DRIVER) && !defined (_POSIX_VDISABLE) # if defined (_SVR4_VDISABLE) # define _POSIX_VDISABLE _SVR4_VDISABLE # else # if defined (_POSIX_VERSION) # define _POSIX_VDISABLE 0 # else /* !_POSIX_VERSION */ # define _POSIX_VDISABLE -1 # endif /* !_POSIX_VERSION */ # endif /* !_SVR4_DISABLE */ #endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */ typedef struct _rl_tty_chars { unsigned char t_eof; unsigned char t_eol; unsigned char t_eol2; unsigned char t_erase; unsigned char t_werase; unsigned char t_kill; unsigned char t_reprint; unsigned char t_intr; unsigned char t_quit; unsigned char t_susp; unsigned char t_dsusp; unsigned char t_start; unsigned char t_stop; unsigned char t_lnext; unsigned char t_flush; unsigned char t_status; } _RL_TTY_CHARS; #endif /* _RLTTY_H_ */ readline-6.3/rltypedefs.h0000664000043600000000000000511111543433053014274 0ustar chetwheel/* rltypedefs.h -- Type declarations for readline functions. */ /* Copyright (C) 2000-2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #ifndef _RL_TYPEDEFS_H_ #define _RL_TYPEDEFS_H_ #ifdef __cplusplus extern "C" { #endif /* New style. */ #if !defined (_RL_FUNCTION_TYPEDEF) # define _RL_FUNCTION_TYPEDEF /* Bindable functions */ typedef int rl_command_func_t PARAMS((int, int)); /* Typedefs for the completion system */ typedef char *rl_compentry_func_t PARAMS((const char *, int)); typedef char **rl_completion_func_t PARAMS((const char *, int, int)); typedef char *rl_quote_func_t PARAMS((char *, int, char *)); typedef char *rl_dequote_func_t PARAMS((char *, int)); typedef int rl_compignore_func_t PARAMS((char **)); typedef void rl_compdisp_func_t PARAMS((char **, int, int)); /* Type for input and pre-read hook functions like rl_event_hook */ typedef int rl_hook_func_t PARAMS((void)); /* Input function type */ typedef int rl_getc_func_t PARAMS((FILE *)); /* Generic function that takes a character buffer (which could be the readline line buffer) and an index into it (which could be rl_point) and returns an int. */ typedef int rl_linebuf_func_t PARAMS((char *, int)); /* `Generic' function pointer typedefs */ typedef int rl_intfunc_t PARAMS((int)); #define rl_ivoidfunc_t rl_hook_func_t typedef int rl_icpfunc_t PARAMS((char *)); typedef int rl_icppfunc_t PARAMS((char **)); typedef void rl_voidfunc_t PARAMS((void)); typedef void rl_vintfunc_t PARAMS((int)); typedef void rl_vcpfunc_t PARAMS((char *)); typedef void rl_vcppfunc_t PARAMS((char **)); typedef char *rl_cpvfunc_t PARAMS((void)); typedef char *rl_cpifunc_t PARAMS((int)); typedef char *rl_cpcpfunc_t PARAMS((char *)); typedef char *rl_cpcppfunc_t PARAMS((char **)); #endif /* _RL_FUNCTION_TYPEDEF */ #ifdef __cplusplus } #endif #endif /* _RL_TYPEDEFS_H_ */ readline-6.3/rlwinsize.h0000664000043600000000000000423511130207321014134 0ustar chetwheel/* rlwinsize.h -- an attempt to isolate some of the system-specific defines for `struct winsize' and TIOCGWINSZ. */ /* Copyright (C) 1997-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RLWINSIZE_H_) #define _RLWINSIZE_H_ #if defined (HAVE_CONFIG_H) # include "config.h" #endif /* Try to find the definitions of `struct winsize' and TIOGCWINSZ */ #if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ) # include #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ #if defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL) # include #endif /* STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */ /* Not in either of the standard places, look around. */ #if !defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL) # if defined (HAVE_SYS_STREAM_H) # include # endif /* HAVE_SYS_STREAM_H */ # if defined (HAVE_SYS_PTEM_H) /* SVR4.2, at least, has it here */ # include # define _IO_PTEM_H /* work around SVR4.2 1.1.4 bug */ # endif /* HAVE_SYS_PTEM_H */ # if defined (HAVE_SYS_PTE_H) /* ??? */ # include # endif /* HAVE_SYS_PTE_H */ #endif /* !STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */ #if defined (M_UNIX) && !defined (_SCO_DS) && !defined (tcflow) # define tcflow(fd, action) ioctl(fd, TCXONC, action) #endif #endif /* _RL_WINSIZE_H */ readline-6.3/tcap.h0000664000043600000000000000306311130207322013034 0ustar chetwheel/* tcap.h -- termcap library functions and variables. */ /* Copyright (C) 1996-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_RLTCAP_H_) #define _RLTCAP_H_ #if defined (HAVE_CONFIG_H) # include "config.h" #endif #if defined (HAVE_TERMCAP_H) # if defined (__linux__) && !defined (SPEED_T_IN_SYS_TYPES) # include "rltty.h" # endif # include #else /* On Solaris2, sys/types.h #includes sys/reg.h, which #defines PC. Unfortunately, PC is a global variable used by the termcap library. */ #ifdef PC # undef PC #endif extern char PC; extern char *UP, *BC; extern short ospeed; extern int tgetent (); extern int tgetflag (); extern int tgetnum (); extern char *tgetstr (); extern int tputs (); extern char *tgoto (); #endif /* HAVE_TERMCAP_H */ #endif /* !_RLTCAP_H_ */ readline-6.3/tilde.h0000664000043600000000000000574611130207325013223 0ustar chetwheel/* tilde.h: Externally available variables and function in libtilde.a. */ /* Copyright (C) 1992-2009 Free Software Foundation, Inc. This file contains the Readline Library (Readline), a set of routines for providing Emacs style line input to programs that ask for it. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_TILDE_H_) # define _TILDE_H_ #ifdef __cplusplus extern "C" { #endif /* A function can be defined using prototypes and compile on both ANSI C and traditional C compilers with something like this: extern char *func PARAMS((char *, char *, int)); */ #if !defined (PARAMS) # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define PARAMS(protos) protos # else # define PARAMS(protos) () # endif #endif typedef char *tilde_hook_func_t PARAMS((char *)); /* If non-null, this contains the address of a function that the application wants called before trying the standard tilde expansions. The function is called with the text sans tilde, and returns a malloc()'ed string which is the expansion, or a NULL pointer if the expansion fails. */ extern tilde_hook_func_t *tilde_expansion_preexpansion_hook; /* If non-null, this contains the address of a function to call if the standard meaning for expanding a tilde fails. The function is called with the text (sans tilde, as in "foo"), and returns a malloc()'ed string which is the expansion, or a NULL pointer if there is no expansion. */ extern tilde_hook_func_t *tilde_expansion_failure_hook; /* When non-null, this is a NULL terminated array of strings which are duplicates for a tilde prefix. Bash uses this to expand `=~' and `:~'. */ extern char **tilde_additional_prefixes; /* When non-null, this is a NULL terminated array of strings which match the end of a username, instead of just "/". Bash sets this to `:' and `=~'. */ extern char **tilde_additional_suffixes; /* Return a new string which is the result of tilde expanding STRING. */ extern char *tilde_expand PARAMS((const char *)); /* Do the work of tilde expansion on FILENAME. FILENAME starts with a tilde. If there is no expansion, call tilde_expansion_failure_hook. */ extern char *tilde_expand_word PARAMS((const char *)); /* Find the portion of the string beginning with ~ that should be expanded. */ extern char *tilde_find_word PARAMS((const char *, int, int *)); #ifdef __cplusplus } #endif #endif /* _TILDE_H_ */ readline-6.3/xmalloc.h0000664000043600000000000000244011130207322013542 0ustar chetwheel/* xmalloc.h -- memory allocation that aborts on errors. */ /* Copyright (C) 1999-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (_XMALLOC_H_) #define _XMALLOC_H_ #if defined (READLINE_LIBRARY) # include "rlstdc.h" #else # include #endif #ifndef PTR_T #ifdef __STDC__ # define PTR_T void * #else # define PTR_T char * #endif #endif /* !PTR_T */ extern PTR_T xmalloc PARAMS((size_t)); extern PTR_T xrealloc PARAMS((void *, size_t)); extern void xfree PARAMS((void *)); #endif /* _XMALLOC_H_ */ readline-6.3/bind.c0000664000043600000000000016672012130113676013037 0ustar chetwheel/* bind.c -- key binding and startup file support for the readline library. */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #if defined (HAVE_CONFIG_H) # include #endif #include #include #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #if !defined (errno) extern int errno; #endif /* !errno */ #include "posixstat.h" /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ /* Variables exported by this file. */ Keymap rl_binding_keymap; static int _rl_skip_to_delim PARAMS((char *, int, int)); static char *_rl_read_file PARAMS((char *, size_t *)); static void _rl_init_file_error PARAMS((const char *)); static int _rl_read_init_file PARAMS((const char *, int)); static int glean_key_from_name PARAMS((char *)); static int find_boolean_var PARAMS((const char *)); static int find_string_var PARAMS((const char *)); static char *_rl_get_string_variable_value PARAMS((const char *)); static int substring_member_of_array PARAMS((const char *, const char * const *)); static int currently_reading_init_file; /* used only in this file */ static int _rl_prefer_visible_bell = 1; /* **************************************************************** */ /* */ /* Binding keys */ /* */ /* **************************************************************** */ /* rl_add_defun (char *name, rl_command_func_t *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. */ int rl_add_defun (name, function, key) const char *name; rl_command_func_t *function; int key; { if (key != -1) rl_bind_key (key, function); rl_add_funmap_entry (name, function); return 0; } /* Bind KEY to FUNCTION. Returns non-zero if KEY is out of range. */ int rl_bind_key (key, function) int key; rl_command_func_t *function; { if (key < 0) return (key); if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii) { if (_rl_keymap[ESC].type == ISKMAP) { Keymap escmap; escmap = FUNCTION_TO_KEYMAP (_rl_keymap, ESC); key = UNMETA (key); escmap[key].type = ISFUNC; escmap[key].function = function; return (0); } return (key); } _rl_keymap[key].type = ISFUNC; _rl_keymap[key].function = function; rl_binding_keymap = _rl_keymap; return (0); } /* Bind KEY to FUNCTION in MAP. Returns non-zero in case of invalid KEY. */ int rl_bind_key_in_map (key, function, map) int key; rl_command_func_t *function; Keymap map; { int result; Keymap oldmap; oldmap = _rl_keymap; _rl_keymap = map; result = rl_bind_key (key, function); _rl_keymap = oldmap; return (result); } /* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right now, this is always used to attempt to bind the arrow keys, hence the check for rl_vi_movement_mode. */ int rl_bind_key_if_unbound_in_map (key, default_func, kmap) int key; rl_command_func_t *default_func; Keymap kmap; { char keyseq[2]; keyseq[0] = (unsigned char)key; keyseq[1] = '\0'; return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap)); } int rl_bind_key_if_unbound (key, default_func) int key; rl_command_func_t *default_func; { char keyseq[2]; keyseq[0] = (unsigned char)key; keyseq[1] = '\0'; return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap)); } /* Make KEY do nothing in the currently selected keymap. Returns non-zero in case of error. */ int rl_unbind_key (key) int key; { return (rl_bind_key (key, (rl_command_func_t *)NULL)); } /* Make KEY do nothing in MAP. Returns non-zero in case of error. */ int rl_unbind_key_in_map (key, map) int key; Keymap map; { return (rl_bind_key_in_map (key, (rl_command_func_t *)NULL, map)); } /* Unbind all keys bound to FUNCTION in MAP. */ int rl_unbind_function_in_map (func, map) rl_command_func_t *func; Keymap map; { register int i, rval; for (i = rval = 0; i < KEYMAP_SIZE; i++) { if (map[i].type == ISFUNC && map[i].function == func) { map[i].function = (rl_command_func_t *)NULL; rval = 1; } } return rval; } int rl_unbind_command_in_map (command, map) const char *command; Keymap map; { rl_command_func_t *func; func = rl_named_function (command); if (func == 0) return 0; return (rl_unbind_function_in_map (func, map)); } /* Bind the key sequence represented by the string KEYSEQ to FUNCTION, starting in the current keymap. This makes new keymaps as necessary. */ int rl_bind_keyseq (keyseq, function) const char *keyseq; rl_command_func_t *function; { return (rl_generic_bind (ISFUNC, keyseq, (char *)function, _rl_keymap)); } /* Bind the key sequence represented by the string KEYSEQ to FUNCTION. This makes new keymaps as necessary. The initial place to do bindings is in MAP. */ int rl_bind_keyseq_in_map (keyseq, function, map) const char *keyseq; rl_command_func_t *function; Keymap map; { return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map)); } /* Backwards compatibility; equivalent to rl_bind_keyseq_in_map() */ int rl_set_key (keyseq, function, map) const char *keyseq; rl_command_func_t *function; Keymap map; { return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map)); } /* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right now, this is always used to attempt to bind the arrow keys, hence the check for rl_vi_movement_mode. */ int rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap) const char *keyseq; rl_command_func_t *default_func; Keymap kmap; { rl_command_func_t *func; if (keyseq) { func = rl_function_of_keyseq (keyseq, kmap, (int *)NULL); #if defined (VI_MODE) if (!func || func == rl_do_lowercase_version || func == rl_vi_movement_mode) #else if (!func || func == rl_do_lowercase_version) #endif return (rl_bind_keyseq_in_map (keyseq, default_func, kmap)); else return 1; } return 0; } int rl_bind_keyseq_if_unbound (keyseq, default_func) const char *keyseq; rl_command_func_t *default_func; { return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap)); } /* Bind the key sequence represented by the string KEYSEQ to the string of characters MACRO. This makes new keymaps as necessary. The initial place to do bindings is in MAP. */ int rl_macro_bind (keyseq, macro, map) const char *keyseq, *macro; Keymap map; { char *macro_keys; int macro_keys_len; macro_keys = (char *)xmalloc ((2 * strlen (macro)) + 1); if (rl_translate_keyseq (macro, macro_keys, ¯o_keys_len)) { xfree (macro_keys); return -1; } rl_generic_bind (ISMACR, keyseq, macro_keys, map); return 0; } /* 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, right now this can be a function (ISFUNC), a macro (ISMACR), or a keymap (ISKMAP). This makes new keymaps as necessary. The initial place to do bindings is in MAP. */ int rl_generic_bind (type, keyseq, data, map) int type; const char *keyseq; char *data; Keymap map; { char *keys; int keys_len; register int i; KEYMAP_ENTRY k; k.function = 0; /* If no keys to bind to, exit right away. */ if (keyseq == 0 || *keyseq == 0) { if (type == ISMACR) xfree (data); return -1; } keys = (char *)xmalloc (1 + (2 * strlen (keyseq))); /* Translate the ASCII representation of KEYSEQ into an array of characters. Stuff the characters into KEYS, and the length of KEYS into KEYS_LEN. */ if (rl_translate_keyseq (keyseq, keys, &keys_len)) { xfree (keys); return -1; } /* Bind keys, making new keymaps as necessary. */ for (i = 0; i < keys_len; i++) { unsigned char uc = keys[i]; int ic; ic = uc; if (ic < 0 || ic >= KEYMAP_SIZE) { xfree (keys); return -1; } if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii) { ic = UNMETA (ic); if (map[ESC].type == ISKMAP) map = FUNCTION_TO_KEYMAP (map, ESC); } if ((i + 1) < keys_len) { if (map[ic].type != ISKMAP) { /* We allow subsequences of keys. If a keymap is being created that will `shadow' an existing function or macro key binding, we save that keybinding into the ANYOTHERKEY index in the new map. The dispatch code will look there to find the function to execute if the subsequence is not matched. ANYOTHERKEY was chosen to be greater than UCHAR_MAX. */ k = map[ic]; map[ic].type = ISKMAP; map[ic].function = KEYMAP_TO_FUNCTION (rl_make_bare_keymap()); } map = FUNCTION_TO_KEYMAP (map, ic); /* The dispatch code will return this function if no matching key sequence is found in the keymap. This (with a little help from the dispatch code in readline.c) allows `a' to be mapped to something, `abc' to be mapped to something else, and the function bound to `a' to be executed when the user types `abx', leaving `bx' in the input queue. */ if (k.function && ((k.type == ISFUNC && k.function != rl_do_lowercase_version) || k.type == ISMACR)) { map[ANYOTHERKEY] = k; k.function = 0; } } else { if (map[ic].type == ISMACR) xfree ((char *)map[ic].function); else if (map[ic].type == ISKMAP) { map = FUNCTION_TO_KEYMAP (map, ic); ic = ANYOTHERKEY; /* If we're trying to override a keymap with a null function (e.g., trying to unbind it), we can't use a null pointer here because that's indistinguishable from having not been overridden. We use a special bindable function that does nothing. */ if (type == ISFUNC && data == 0) data = (char *)_rl_null_function; } map[ic].function = KEYMAP_TO_FUNCTION (data); map[ic].type = type; } rl_binding_keymap = map; } xfree (keys); return 0; } /* Translate the ASCII representation of SEQ, stuffing the values into ARRAY, an array of characters. LEN gets the final length of ARRAY. Return non-zero if there was an error parsing SEQ. */ int rl_translate_keyseq (seq, array, len) const char *seq; char *array; int *len; { register int i, c, l, temp; for (i = l = 0; c = seq[i]; i++) { if (c == '\\') { c = seq[++i]; if (c == 0) break; /* Handle \C- and \M- prefixes. */ if ((c == 'C' || c == 'M') && seq[i + 1] == '-') { /* Handle special case of backwards define. */ if (strncmp (&seq[i], "C-\\M-", 5) == 0) { array[l++] = ESC; /* ESC is meta-prefix */ i += 5; array[l++] = CTRL (_rl_to_upper (seq[i])); if (seq[i] == '\0') i--; } else if (c == 'M') { i++; /* seq[i] == '-' */ /* XXX - obey convert-meta setting */ if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP) array[l++] = ESC; /* ESC is meta-prefix */ else if (seq[i+1] == '\\' && seq[i+2] == 'C' && seq[i+3] == '-') { i += 4; temp = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i])); array[l++] = META (temp); } else { /* This doesn't yet handle things like \M-\a, which may or may not have any reasonable meaning. You're probably better off using straight octal or hex. */ i++; array[l++] = META (seq[i]); } } else if (c == 'C') { i += 2; /* Special hack for C-?... */ array[l++] = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i])); } continue; } /* Translate other backslash-escaped characters. These are the same escape sequences that bash's `echo' and `printf' builtins handle, with the addition of \d -> RUBOUT. A backslash preceding a character that is not special is stripped. */ switch (c) { case 'a': array[l++] = '\007'; break; case 'b': array[l++] = '\b'; break; case 'd': array[l++] = RUBOUT; /* readline-specific */ break; case 'e': array[l++] = ESC; break; case 'f': array[l++] = '\f'; break; case 'n': array[l++] = NEWLINE; break; case 'r': array[l++] = RETURN; break; case 't': array[l++] = TAB; break; case 'v': array[l++] = 0x0B; break; case '\\': array[l++] = '\\'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': i++; for (temp = 2, c -= '0'; ISOCTAL (seq[i]) && temp--; i++) c = (c * 8) + OCTVALUE (seq[i]); i--; /* auto-increment in for loop */ array[l++] = c & largest_char; break; case 'x': i++; for (temp = 2, c = 0; ISXDIGIT ((unsigned char)seq[i]) && temp--; i++) c = (c * 16) + HEXVALUE (seq[i]); if (temp == 2) c = 'x'; i--; /* auto-increment in for loop */ array[l++] = c & largest_char; break; default: /* backslashes before non-special chars just add the char */ array[l++] = c; break; /* the backslash is stripped */ } continue; } array[l++] = c; } *len = l; array[l] = '\0'; return (0); } static int _rl_isescape (c) int c; { switch (c) { case '\007': case '\b': case '\f': case '\n': case '\r': case TAB: case 0x0b: return (1); default: return (0); } } static int _rl_escchar (c) int c; { switch (c) { case '\007': return ('a'); case '\b': return ('b'); case '\f': return ('f'); case '\n': return ('n'); case '\r': return ('r'); case TAB: return ('t'); case 0x0b: return ('v'); default: return (c); } } char * rl_untranslate_keyseq (seq) int seq; { static char kseq[16]; int i, c; i = 0; c = seq; if (META_CHAR (c)) { kseq[i++] = '\\'; kseq[i++] = 'M'; kseq[i++] = '-'; c = UNMETA (c); } else if (c == ESC) { kseq[i++] = '\\'; c = 'e'; } else if (CTRL_CHAR (c)) { kseq[i++] = '\\'; kseq[i++] = 'C'; kseq[i++] = '-'; c = _rl_to_lower (UNCTRL (c)); } else if (c == RUBOUT) { kseq[i++] = '\\'; kseq[i++] = 'C'; kseq[i++] = '-'; c = '?'; } if (c == ESC) { kseq[i++] = '\\'; c = 'e'; } else if (c == '\\' || c == '"') { kseq[i++] = '\\'; } kseq[i++] = (unsigned char) c; kseq[i] = '\0'; return kseq; } char * _rl_untranslate_macro_value (seq, use_escapes) char *seq; int use_escapes; { char *ret, *r, *s; int c; r = ret = (char *)xmalloc (7 * strlen (seq) + 1); for (s = seq; *s; s++) { c = *s; if (META_CHAR (c)) { *r++ = '\\'; *r++ = 'M'; *r++ = '-'; c = UNMETA (c); } else if (c == ESC) { *r++ = '\\'; c = 'e'; } else if (CTRL_CHAR (c)) { *r++ = '\\'; if (use_escapes && _rl_isescape (c)) c = _rl_escchar (c); else { *r++ = 'C'; *r++ = '-'; c = _rl_to_lower (UNCTRL (c)); } } else if (c == RUBOUT) { *r++ = '\\'; *r++ = 'C'; *r++ = '-'; c = '?'; } if (c == ESC) { *r++ = '\\'; c = 'e'; } else if (c == '\\' || c == '"') *r++ = '\\'; *r++ = (unsigned char)c; } *r = '\0'; return ret; } /* Return a pointer to the function that STRING represents. If STRING doesn't have a matching function, then a NULL pointer is returned. */ rl_command_func_t * rl_named_function (string) const char *string; { register int i; rl_initialize_funmap (); for (i = 0; funmap[i]; i++) if (_rl_stricmp (funmap[i]->name, string) == 0) return (funmap[i]->function); return ((rl_command_func_t *)NULL); } /* Return the function (or macro) definition which would be invoked via KEYSEQ if executed in MAP. If MAP is NULL, then the current keymap is used. TYPE, if non-NULL, is a pointer to an int which will receive the type of the object pointed to. One of ISFUNC (function), ISKMAP (keymap), or ISMACR (macro). */ rl_command_func_t * rl_function_of_keyseq (keyseq, map, type) const char *keyseq; Keymap map; int *type; { register int i; if (map == 0) map = _rl_keymap; for (i = 0; keyseq && keyseq[i]; i++) { unsigned char ic = keyseq[i]; if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii) { if (map[ESC].type == ISKMAP) { map = FUNCTION_TO_KEYMAP (map, ESC); ic = UNMETA (ic); } /* XXX - should we just return NULL here, since this obviously doesn't match? */ else { if (type) *type = map[ESC].type; return (map[ESC].function); } } if (map[ic].type == ISKMAP) { /* If this is the last key in the key sequence, return the map. */ if (keyseq[i + 1] == '\0') { if (type) *type = ISKMAP; return (map[ic].function); } else map = FUNCTION_TO_KEYMAP (map, ic); } /* If we're not at the end of the key sequence, and the current key is bound to something other than a keymap, then the entire key sequence is not bound. */ else if (map[ic].type != ISKMAP && keyseq[i+1]) return ((rl_command_func_t *)NULL); else /* map[ic].type != ISKMAP && keyseq[i+1] == 0 */ { if (type) *type = map[ic].type; return (map[ic].function); } } return ((rl_command_func_t *) NULL); } /* The last key bindings file read. */ static char *last_readline_init_file = (char *)NULL; /* The file we're currently reading key bindings from. */ static const char *current_readline_init_file; static int current_readline_init_include_level; static int current_readline_init_lineno; /* Read FILENAME into a locally-allocated buffer and return the buffer. The size of the buffer is returned in *SIZEP. Returns NULL if any errors were encountered. */ static char * _rl_read_file (filename, sizep) char *filename; size_t *sizep; { struct stat finfo; size_t file_size; char *buffer; int i, file; if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY, 0666)) < 0) return ((char *)NULL); file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { if (file >= 0) close (file); #if defined (EFBIG) errno = EFBIG; #endif return ((char *)NULL); } /* Read the file into BUFFER. */ buffer = (char *)xmalloc (file_size + 1); i = read (file, buffer, file_size); close (file); if (i < 0) { xfree (buffer); return ((char *)NULL); } RL_CHECK_SIGNALS (); buffer[i] = '\0'; if (sizep) *sizep = i; return (buffer); } /* Re-read the current keybindings file. */ int rl_re_read_init_file (count, ignore) int count, ignore; { int r; r = rl_read_init_file ((const char *)NULL); rl_set_keymap_from_edit_mode (); return r; } /* Do key bindings from a file. If FILENAME is NULL it defaults to the first non-null filename from this list: 1. the filename used for the previous call 2. the value of the shell variable `INPUTRC' 3. ~/.inputrc 4. /etc/inputrc If the file existed and could be opened and read, 0 is returned, otherwise errno is returned. */ int rl_read_init_file (filename) const char *filename; { /* Default the filename. */ if (filename == 0) filename = last_readline_init_file; if (filename == 0) filename = sh_get_env_value ("INPUTRC"); if (filename == 0 || *filename == 0) { filename = DEFAULT_INPUTRC; /* Try to read DEFAULT_INPUTRC; fall back to SYS_INPUTRC on failure */ if (_rl_read_init_file (filename, 0) == 0) return 0; filename = SYS_INPUTRC; } #if defined (__MSDOS__) if (_rl_read_init_file (filename, 0) == 0) return 0; filename = "~/_inputrc"; #endif return (_rl_read_init_file (filename, 0)); } static int _rl_read_init_file (filename, include_level) const char *filename; int include_level; { register int i; char *buffer, *openname, *line, *end; size_t file_size; current_readline_init_file = filename; current_readline_init_include_level = include_level; openname = tilde_expand (filename); buffer = _rl_read_file (openname, &file_size); xfree (openname); RL_CHECK_SIGNALS (); if (buffer == 0) return (errno); if (include_level == 0 && filename != last_readline_init_file) { FREE (last_readline_init_file); last_readline_init_file = savestring (filename); } currently_reading_init_file = 1; /* Loop over the lines in the file. Lines that start with `#' are comments; all other lines are commands for readline initialization. */ current_readline_init_lineno = 1; line = buffer; end = buffer + file_size; while (line < end) { /* Find the end of this line. */ for (i = 0; line + i != end && line[i] != '\n'; i++); #if defined (__CYGWIN__) /* ``Be liberal in what you accept.'' */ if (line[i] == '\n' && line[i-1] == '\r') line[i - 1] = '\0'; #endif /* Mark end of line. */ line[i] = '\0'; /* Skip leading whitespace. */ while (*line && whitespace (*line)) { line++; i--; } /* If the line is not a comment, then parse it. */ if (*line && *line != '#') rl_parse_and_bind (line); /* Move to the next line. */ line += i + 1; current_readline_init_lineno++; } xfree (buffer); currently_reading_init_file = 0; return (0); } static void _rl_init_file_error (msg) const char *msg; { if (currently_reading_init_file) _rl_errmsg ("%s: line %d: %s\n", current_readline_init_file, current_readline_init_lineno, msg); else _rl_errmsg ("%s", msg); } /* **************************************************************** */ /* */ /* Parser Directives */ /* */ /* **************************************************************** */ typedef int _rl_parser_func_t PARAMS((char *)); /* Things that mean `Control'. */ const char * const _rl_possible_control_prefixes[] = { "Control-", "C-", "CTRL-", (const char *)NULL }; const char * const _rl_possible_meta_prefixes[] = { "Meta", "M-", (const char *)NULL }; /* Conditionals. */ /* Calling programs set this to have their argv[0]. */ const char *rl_readline_name = "other"; /* Stack of previous values of parsing_conditionalized_out. */ static unsigned char *if_stack = (unsigned char *)NULL; static int if_stack_depth; static int if_stack_size; /* Push _rl_parsing_conditionalized_out, and set parser state based on ARGS. */ static int parser_if (args) char *args; { register int i; /* Push parser state. */ if (if_stack_depth + 1 >= if_stack_size) { if (!if_stack) if_stack = (unsigned char *)xmalloc (if_stack_size = 20); else if_stack = (unsigned char *)xrealloc (if_stack, if_stack_size += 20); } if_stack[if_stack_depth++] = _rl_parsing_conditionalized_out; /* If parsing is turned off, then nothing can turn it back on except for finding the matching endif. In that case, return right now. */ if (_rl_parsing_conditionalized_out) return 0; /* Isolate first argument. */ for (i = 0; args[i] && !whitespace (args[i]); i++); if (args[i]) args[i++] = '\0'; /* Handle "$if term=foo" and "$if mode=emacs" constructs. If this isn't term=foo, or mode=emacs, then check to see if the first word in ARGS is the same as the value stored in rl_readline_name. */ if (rl_terminal_name && _rl_strnicmp (args, "term=", 5) == 0) { char *tem, *tname; /* Terminals like "aaa-60" are equivalent to "aaa". */ tname = savestring (rl_terminal_name); tem = strchr (tname, '-'); if (tem) *tem = '\0'; /* Test the `long' and `short' forms of the terminal name so that if someone has a `sun-cmd' and does not want to have bindings that will be executed if the terminal is a `sun', they can put `$if term=sun-cmd' into their .inputrc. */ _rl_parsing_conditionalized_out = _rl_stricmp (args + 5, tname) && _rl_stricmp (args + 5, rl_terminal_name); xfree (tname); } #if defined (VI_MODE) else if (_rl_strnicmp (args, "mode=", 5) == 0) { int mode; if (_rl_stricmp (args + 5, "emacs") == 0) mode = emacs_mode; else if (_rl_stricmp (args + 5, "vi") == 0) mode = vi_mode; else mode = no_mode; _rl_parsing_conditionalized_out = mode != rl_editing_mode; } #endif /* VI_MODE */ /* Check to see if the first word in ARGS is the same as the value stored in rl_readline_name. */ else if (_rl_stricmp (args, rl_readline_name) == 0) _rl_parsing_conditionalized_out = 0; else _rl_parsing_conditionalized_out = 1; return 0; } /* Invert the current parser state if there is anything on the stack. */ static int parser_else (args) char *args; { register int i; if (if_stack_depth == 0) { _rl_init_file_error ("$else found without matching $if"); return 0; } #if 0 /* Check the previous (n - 1) levels of the stack to make sure that we haven't previously turned off parsing. */ for (i = 0; i < if_stack_depth - 1; i++) #else /* Check the previous (n) levels of the stack to make sure that we haven't previously turned off parsing. */ for (i = 0; i < if_stack_depth; i++) #endif if (if_stack[i] == 1) return 0; /* Invert the state of parsing if at top level. */ _rl_parsing_conditionalized_out = !_rl_parsing_conditionalized_out; return 0; } /* Terminate a conditional, popping the value of _rl_parsing_conditionalized_out from the stack. */ static int parser_endif (args) char *args; { if (if_stack_depth) _rl_parsing_conditionalized_out = if_stack[--if_stack_depth]; else _rl_init_file_error ("$endif without matching $if"); return 0; } static int parser_include (args) char *args; { const char *old_init_file; char *e; int old_line_number, old_include_level, r; if (_rl_parsing_conditionalized_out) return (0); old_init_file = current_readline_init_file; old_line_number = current_readline_init_lineno; old_include_level = current_readline_init_include_level; e = strchr (args, '\n'); if (e) *e = '\0'; r = _rl_read_init_file ((const char *)args, old_include_level + 1); current_readline_init_file = old_init_file; current_readline_init_lineno = old_line_number; current_readline_init_include_level = old_include_level; return r; } /* Associate textual names with actual functions. */ static const struct { const char * const name; _rl_parser_func_t *function; } parser_directives [] = { { "if", parser_if }, { "endif", parser_endif }, { "else", parser_else }, { "include", parser_include }, { (char *)0x0, (_rl_parser_func_t *)0x0 } }; /* Handle a parser directive. STATEMENT is the line of the directive without any leading `$'. */ static int handle_parser_directive (statement) char *statement; { register int i; char *directive, *args; /* Isolate the actual directive. */ /* Skip whitespace. */ for (i = 0; whitespace (statement[i]); i++); directive = &statement[i]; for (; statement[i] && !whitespace (statement[i]); i++); if (statement[i]) statement[i++] = '\0'; for (; statement[i] && whitespace (statement[i]); i++); args = &statement[i]; /* Lookup the command, and act on it. */ for (i = 0; parser_directives[i].name; i++) if (_rl_stricmp (directive, parser_directives[i].name) == 0) { (*parser_directives[i].function) (args); return (0); } /* display an error message about the unknown parser directive */ _rl_init_file_error ("unknown parser directive"); return (1); } /* Start at STRING[START] and look for DELIM. Return I where STRING[I] == DELIM or STRING[I] == 0. DELIM is usually a double quote. */ static int _rl_skip_to_delim (string, start, delim) char *string; int start, delim; { int i, c, passc; for (i = start,passc = 0; c = string[i]; i++) { if (passc) { passc = 0; if (c == 0) break; continue; } if (c == '\\') { passc = 1; continue; } if (c == delim) break; } return i; } /* Read the binding command from STRING and perform it. A key binding command looks like: Keyname: function-name\0, a variable binding command looks like: set variable value. A new-style keybinding looks like "\C-x\C-x": exchange-point-and-mark. */ int rl_parse_and_bind (string) char *string; { char *funname, *kname; register int c, i; int key, equivalency; while (string && whitespace (*string)) string++; if (string == 0 || *string == 0 || *string == '#') return 0; /* If this is a parser directive, act on it. */ if (*string == '$') { handle_parser_directive (&string[1]); return 0; } /* If we aren't supposed to be parsing right now, then we're done. */ if (_rl_parsing_conditionalized_out) return 0; i = 0; /* If this keyname is a complex key expression surrounded by quotes, advance to after the matching close quote. This code allows the backslash to quote characters in the key expression. */ if (*string == '"') { i = _rl_skip_to_delim (string, 1, '"'); /* If we didn't find a closing quote, abort the line. */ if (string[i] == '\0') { _rl_init_file_error ("no closing `\"' in key binding"); return 1; } else i++; /* skip past closing double quote */ } /* Advance to the colon (:) or whitespace which separates the two objects. */ for (; (c = string[i]) && c != ':' && c != ' ' && c != '\t'; i++ ); equivalency = (c == ':' && string[i + 1] == '='); /* Mark the end of the command (or keyname). */ if (string[i]) string[i++] = '\0'; /* If doing assignment, skip the '=' sign as well. */ if (equivalency) string[i++] = '\0'; /* If this is a command to set a variable, then do that. */ if (_rl_stricmp (string, "set") == 0) { char *var, *value, *e; int s; var = string + i; /* Make VAR point to start of variable name. */ while (*var && whitespace (*var)) var++; /* Make VALUE point to start of value string. */ value = var; while (*value && whitespace (*value) == 0) value++; if (*value) *value++ = '\0'; while (*value && whitespace (*value)) value++; /* Strip trailing whitespace from values of boolean variables. */ if (find_boolean_var (var) >= 0) { /* remove trailing whitespace */ remove_trailing: e = value + strlen (value) - 1; while (e >= value && whitespace (*e)) e--; e++; /* skip back to whitespace or EOS */ if (*e && e >= value) *e = '\0'; } else if ((i = find_string_var (var)) >= 0) { /* Allow quoted strings in variable values */ if (*value == '"') { i = _rl_skip_to_delim (value, 1, *value); value[i] = '\0'; value++; /* skip past the quote */ } else goto remove_trailing; } rl_variable_bind (var, value); return 0; } /* Skip any whitespace between keyname and funname. */ for (; string[i] && whitespace (string[i]); i++); funname = &string[i]; /* Now isolate funname. For straight function names just look for whitespace, since that will signify the end of the string. But this could be a macro definition. In that case, the string is quoted, so skip to the matching delimiter. We allow the backslash to quote the delimiter characters in the macro body. */ /* This code exists to allow whitespace in macro expansions, which would otherwise be gobbled up by the next `for' loop.*/ /* XXX - it may be desirable to allow backslash quoting only if " is the quoted string delimiter, like the shell. */ if (*funname == '\'' || *funname == '"') { i = _rl_skip_to_delim (string, i+1, *funname); if (string[i]) i++; } /* Advance to the end of the string. */ for (; string[i] && whitespace (string[i]) == 0; i++); /* No extra whitespace at the end of the string. */ string[i] = '\0'; /* Handle equivalency bindings here. Make the left-hand side be exactly whatever the right-hand evaluates to, including keymaps. */ if (equivalency) { return 0; } /* If this is a new-style key-binding, then do the binding with rl_bind_keyseq (). Otherwise, let the older code deal with it. */ if (*string == '"') { char *seq; register int j, k, passc; seq = (char *)xmalloc (1 + strlen (string)); for (j = 1, k = passc = 0; string[j]; j++) { /* Allow backslash to quote characters, but leave them in place. This allows a string to end with a backslash quoting another backslash, or with a backslash quoting a double quote. The backslashes are left in place for rl_translate_keyseq (). */ if (passc || (string[j] == '\\')) { seq[k++] = string[j]; passc = !passc; continue; } if (string[j] == '"') break; seq[k++] = string[j]; } seq[k] = '\0'; /* Binding macro? */ if (*funname == '\'' || *funname == '"') { j = strlen (funname); /* Remove the delimiting quotes from each end of FUNNAME. */ if (j && funname[j - 1] == *funname) funname[j - 1] = '\0'; rl_macro_bind (seq, &funname[1], _rl_keymap); } else rl_bind_keyseq (seq, rl_named_function (funname)); xfree (seq); return 0; } /* Get the actual character we want to deal with. */ kname = strrchr (string, '-'); if (kname == 0) kname = string; else kname++; key = glean_key_from_name (kname); /* Add in control and meta bits. */ if (substring_member_of_array (string, _rl_possible_control_prefixes)) key = CTRL (_rl_to_upper (key)); if (substring_member_of_array (string, _rl_possible_meta_prefixes)) key = META (key); /* Temporary. Handle old-style keyname with macro-binding. */ if (*funname == '\'' || *funname == '"') { char useq[2]; int fl = strlen (funname); useq[0] = key; useq[1] = '\0'; if (fl && funname[fl - 1] == *funname) funname[fl - 1] = '\0'; rl_macro_bind (useq, &funname[1], _rl_keymap); } #if defined (PREFIX_META_HACK) /* Ugly, but working hack to keep prefix-meta around. */ else if (_rl_stricmp (funname, "prefix-meta") == 0) { char seq[2]; seq[0] = key; seq[1] = '\0'; rl_generic_bind (ISKMAP, seq, (char *)emacs_meta_keymap, _rl_keymap); } #endif /* PREFIX_META_HACK */ else rl_bind_key (key, rl_named_function (funname)); return 0; } /* Simple structure for boolean readline variables (i.e., those that can have one of two values; either "On" or 1 for truth, or "Off" or 0 for false. */ #define V_SPECIAL 0x1 static const struct { const char * const name; int *value; int flags; } boolean_varlist [] = { { "bind-tty-special-chars", &_rl_bind_stty_chars, 0 }, { "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL }, { "byte-oriented", &rl_byte_oriented, 0 }, #if defined (COLOR_SUPPORT) { "colored-stats", &_rl_colored_stats, 0 }, #endif { "completion-ignore-case", &_rl_completion_case_fold, 0 }, { "completion-map-case", &_rl_completion_case_map, 0 }, { "convert-meta", &_rl_convert_meta_chars_to_ascii, 0 }, { "disable-completion", &rl_inhibit_completion, 0 }, { "echo-control-characters", &_rl_echo_control_chars, 0 }, { "enable-keypad", &_rl_enable_keypad, 0 }, { "enable-meta-key", &_rl_enable_meta, 0 }, { "expand-tilde", &rl_complete_with_tilde_expansion, 0 }, { "history-preserve-point", &_rl_history_preserve_point, 0 }, { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 }, { "input-meta", &_rl_meta_flag, 0 }, { "mark-directories", &_rl_complete_mark_directories, 0 }, { "mark-modified-lines", &_rl_mark_modified_lines, 0 }, { "mark-symlinked-directories", &_rl_complete_mark_symlink_dirs, 0 }, { "match-hidden-files", &_rl_match_hidden_files, 0 }, { "menu-complete-display-prefix", &_rl_menu_complete_prefix_first, 0 }, { "meta-flag", &_rl_meta_flag, 0 }, { "output-meta", &_rl_output_meta_chars, 0 }, { "page-completions", &_rl_page_completions, 0 }, { "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL }, { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 }, { "revert-all-at-newline", &_rl_revert_all_at_newline, 0 }, { "show-all-if-ambiguous", &_rl_complete_show_all, 0 }, { "show-all-if-unmodified", &_rl_complete_show_unmodified, 0 }, { "show-mode-in-prompt", &_rl_show_mode_in_prompt, 0 }, { "skip-completed-text", &_rl_skip_completed_text, 0 }, #if defined (VISIBLE_STATS) { "visible-stats", &rl_visible_stats, 0 }, #endif /* VISIBLE_STATS */ { (char *)NULL, (int *)NULL, 0 } }; static int find_boolean_var (name) const char *name; { register int i; for (i = 0; boolean_varlist[i].name; i++) if (_rl_stricmp (name, boolean_varlist[i].name) == 0) return i; return -1; } /* Hooks for handling special boolean variables, where a function needs to be called or another variable needs to be changed when they're changed. */ static void hack_special_boolean_var (i) int i; { const char *name; name = boolean_varlist[i].name; if (_rl_stricmp (name, "blink-matching-paren") == 0) _rl_enable_paren_matching (rl_blink_matching_paren); else if (_rl_stricmp (name, "prefer-visible-bell") == 0) { if (_rl_prefer_visible_bell) _rl_bell_preference = VISIBLE_BELL; else _rl_bell_preference = AUDIBLE_BELL; } else if (_rl_stricmp (name, "show-mode-in-prompt") == 0) _rl_reset_prompt (); } typedef int _rl_sv_func_t PARAMS((const char *)); /* These *must* correspond to the array indices for the appropriate string variable. (Though they're not used right now.) */ #define V_BELLSTYLE 0 #define V_COMBEGIN 1 #define V_EDITMODE 2 #define V_ISRCHTERM 3 #define V_KEYMAP 4 #define V_STRING 1 #define V_INT 2 /* Forward declarations */ static int sv_bell_style PARAMS((const char *)); static int sv_combegin PARAMS((const char *)); static int sv_dispprefix PARAMS((const char *)); static int sv_compquery PARAMS((const char *)); static int sv_compwidth PARAMS((const char *)); static int sv_editmode PARAMS((const char *)); static int sv_histsize PARAMS((const char *)); static int sv_isrchterm PARAMS((const char *)); static int sv_keymap PARAMS((const char *)); static int sv_seqtimeout PARAMS((const char *)); static const struct { const char * const name; int flags; _rl_sv_func_t *set_func; } string_varlist[] = { { "bell-style", V_STRING, sv_bell_style }, { "comment-begin", V_STRING, sv_combegin }, { "completion-display-width", V_INT, sv_compwidth }, { "completion-prefix-display-length", V_INT, sv_dispprefix }, { "completion-query-items", V_INT, sv_compquery }, { "editing-mode", V_STRING, sv_editmode }, { "history-size", V_INT, sv_histsize }, { "isearch-terminators", V_STRING, sv_isrchterm }, { "keymap", V_STRING, sv_keymap }, { "keyseq-timeout", V_INT, sv_seqtimeout }, { (char *)NULL, 0, (_rl_sv_func_t *)0 } }; static int find_string_var (name) const char *name; { register int i; for (i = 0; string_varlist[i].name; i++) if (_rl_stricmp (name, string_varlist[i].name) == 0) return i; return -1; } /* A boolean value that can appear in a `set variable' command is true if the value is null or empty, `on' (case-insenstive), or "1". Any other values result in 0 (false). */ static int bool_to_int (value) const char *value; { return (value == 0 || *value == '\0' || (_rl_stricmp (value, "on") == 0) || (value[0] == '1' && value[1] == '\0')); } char * rl_variable_value (name) const char *name; { register int i; /* Check for simple variables first. */ i = find_boolean_var (name); if (i >= 0) return (*boolean_varlist[i].value ? "on" : "off"); i = find_string_var (name); if (i >= 0) return (_rl_get_string_variable_value (string_varlist[i].name)); /* Unknown variable names return NULL. */ return 0; } int rl_variable_bind (name, value) const char *name, *value; { register int i; int v; /* Check for simple variables first. */ i = find_boolean_var (name); if (i >= 0) { *boolean_varlist[i].value = bool_to_int (value); if (boolean_varlist[i].flags & V_SPECIAL) hack_special_boolean_var (i); return 0; } i = find_string_var (name); /* For the time being, unknown variable names or string names without a handler function are simply ignored. */ if (i < 0 || string_varlist[i].set_func == 0) return 0; v = (*string_varlist[i].set_func) (value); return v; } static int sv_editmode (value) const char *value; { if (_rl_strnicmp (value, "vi", 2) == 0) { #if defined (VI_MODE) _rl_keymap = vi_insertion_keymap; rl_editing_mode = vi_mode; #endif /* VI_MODE */ return 0; } else if (_rl_strnicmp (value, "emacs", 5) == 0) { _rl_keymap = emacs_standard_keymap; rl_editing_mode = emacs_mode; return 0; } return 1; } static int sv_combegin (value) const char *value; { if (value && *value) { FREE (_rl_comment_begin); _rl_comment_begin = savestring (value); return 0; } return 1; } static int sv_dispprefix (value) const char *value; { int nval = 0; if (value && *value) { nval = atoi (value); if (nval < 0) nval = 0; } _rl_completion_prefix_display_length = nval; return 0; } static int sv_compquery (value) const char *value; { int nval = 100; if (value && *value) { nval = atoi (value); if (nval < 0) nval = 0; } rl_completion_query_items = nval; return 0; } static int sv_compwidth (value) const char *value; { int nval = -1; if (value && *value) nval = atoi (value); _rl_completion_columns = nval; return 0; } static int sv_histsize (value) const char *value; { int nval; nval = 500; if (value && *value) { nval = atoi (value); if (nval < 0) { unstifle_history (); return 0; } } stifle_history (nval); return 0; } static int sv_keymap (value) const char *value; { Keymap kmap; kmap = rl_get_keymap_by_name (value); if (kmap) { rl_set_keymap (kmap); return 0; } return 1; } static int sv_seqtimeout (value) const char *value; { int nval; nval = 0; if (value && *value) { nval = atoi (value); if (nval < 0) nval = 0; } _rl_keyseq_timeout = nval; return 0; } static int sv_bell_style (value) const char *value; { if (value == 0 || *value == '\0') _rl_bell_preference = AUDIBLE_BELL; else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0) _rl_bell_preference = NO_BELL; else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0) _rl_bell_preference = AUDIBLE_BELL; else if (_rl_stricmp (value, "visible") == 0) _rl_bell_preference = VISIBLE_BELL; else return 1; return 0; } static int sv_isrchterm (value) const char *value; { int beg, end, delim; char *v; if (value == 0) return 1; /* Isolate the value and translate it into a character string. */ v = savestring (value); FREE (_rl_isearch_terminators); if (v[0] == '"' || v[0] == '\'') { delim = v[0]; for (beg = end = 1; v[end] && v[end] != delim; end++) ; } else { for (beg = end = 0; whitespace (v[end]) == 0; end++) ; } v[end] = '\0'; /* The value starts at v + beg. Translate it into a character string. */ _rl_isearch_terminators = (char *)xmalloc (2 * strlen (v) + 1); rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end); _rl_isearch_terminators[end] = '\0'; xfree (v); return 0; } /* Return the character which matches NAME. For example, `Space' returns ' '. */ typedef struct { const char * const name; int value; } assoc_list; static const assoc_list name_key_alist[] = { { "DEL", 0x7f }, { "ESC", '\033' }, { "Escape", '\033' }, { "LFD", '\n' }, { "Newline", '\n' }, { "RET", '\r' }, { "Return", '\r' }, { "Rubout", 0x7f }, { "SPC", ' ' }, { "Space", ' ' }, { "Tab", 0x09 }, { (char *)0x0, 0 } }; static int glean_key_from_name (name) char *name; { register int i; for (i = 0; name_key_alist[i].name; i++) if (_rl_stricmp (name, name_key_alist[i].name) == 0) return (name_key_alist[i].value); return (*(unsigned char *)name); /* XXX was return (*name) */ } /* Auxiliary functions to manage keymaps. */ static const struct { const char * const name; Keymap map; } keymap_names[] = { { "emacs", emacs_standard_keymap }, { "emacs-standard", emacs_standard_keymap }, { "emacs-meta", emacs_meta_keymap }, { "emacs-ctlx", emacs_ctlx_keymap }, #if defined (VI_MODE) { "vi", vi_movement_keymap }, { "vi-move", vi_movement_keymap }, { "vi-command", vi_movement_keymap }, { "vi-insert", vi_insertion_keymap }, #endif /* VI_MODE */ { (char *)0x0, (Keymap)0x0 } }; Keymap rl_get_keymap_by_name (name) const char *name; { register int i; for (i = 0; keymap_names[i].name; i++) if (_rl_stricmp (name, keymap_names[i].name) == 0) return (keymap_names[i].map); return ((Keymap) NULL); } char * rl_get_keymap_name (map) Keymap map; { register int i; for (i = 0; keymap_names[i].name; i++) if (map == keymap_names[i].map) return ((char *)keymap_names[i].name); return ((char *)NULL); } void rl_set_keymap (map) Keymap map; { if (map) _rl_keymap = map; } Keymap rl_get_keymap () { return (_rl_keymap); } void rl_set_keymap_from_edit_mode () { if (rl_editing_mode == emacs_mode) _rl_keymap = emacs_standard_keymap; #if defined (VI_MODE) else if (rl_editing_mode == vi_mode) _rl_keymap = vi_insertion_keymap; #endif /* VI_MODE */ } char * rl_get_keymap_name_from_edit_mode () { if (rl_editing_mode == emacs_mode) return "emacs"; #if defined (VI_MODE) else if (rl_editing_mode == vi_mode) return "vi"; #endif /* VI_MODE */ else return "none"; } /* **************************************************************** */ /* */ /* Key Binding and Function Information */ /* */ /* **************************************************************** */ /* Each of the following functions produces information about the state of keybindings and functions known to Readline. The info is always printed to rl_outstream, and in such a way that it can be read back in (i.e., passed to rl_parse_and_bind ()). */ /* Print the names of functions known to Readline. */ void rl_list_funmap_names () { register int i; const char **funmap_names; funmap_names = rl_funmap_names (); if (!funmap_names) return; for (i = 0; funmap_names[i]; i++) fprintf (rl_outstream, "%s\n", funmap_names[i]); xfree (funmap_names); } static char * _rl_get_keyname (key) int key; { char *keyname; int i, c; keyname = (char *)xmalloc (8); c = key; /* Since this is going to be used to write out keysequence-function pairs for possible inclusion in an inputrc file, we don't want to do any special meta processing on KEY. */ #if 1 /* XXX - Experimental */ /* We might want to do this, but the old version of the code did not. */ /* If this is an escape character, we don't want to do any more processing. Just add the special ESC key sequence and return. */ if (c == ESC) { keyname[0] = '\\'; keyname[1] = 'e'; keyname[2] = '\0'; return keyname; } #endif /* RUBOUT is translated directly into \C-? */ if (key == RUBOUT) { keyname[0] = '\\'; keyname[1] = 'C'; keyname[2] = '-'; keyname[3] = '?'; keyname[4] = '\0'; return keyname; } i = 0; /* Now add special prefixes needed for control characters. This can potentially change C. */ if (CTRL_CHAR (c)) { keyname[i++] = '\\'; keyname[i++] = 'C'; keyname[i++] = '-'; c = _rl_to_lower (UNCTRL (c)); } /* XXX experimental code. Turn the characters that are not ASCII or ISO Latin 1 (128 - 159) into octal escape sequences (\200 - \237). This changes C. */ if (c >= 128 && c <= 159) { keyname[i++] = '\\'; keyname[i++] = '2'; c -= 128; keyname[i++] = (c / 8) + '0'; c = (c % 8) + '0'; } /* Now, if the character needs to be quoted with a backslash, do that. */ if (c == '\\' || c == '"') keyname[i++] = '\\'; /* Now add the key, terminate the string, and return it. */ keyname[i++] = (char) c; keyname[i] = '\0'; return keyname; } /* Return a NULL terminated array of strings which represent the key sequences that are used to invoke FUNCTION in MAP. */ char ** rl_invoking_keyseqs_in_map (function, map) rl_command_func_t *function; Keymap map; { register int key; char **result; int result_index, result_size; result = (char **)NULL; result_index = result_size = 0; for (key = 0; key < KEYMAP_SIZE; key++) { switch (map[key].type) { case ISMACR: /* Macros match, if, and only if, the pointers are identical. Thus, they are treated exactly like functions in here. */ case ISFUNC: /* If the function in the keymap is the one we are looking for, then add the current KEY to the list of invoking keys. */ if (map[key].function == function) { char *keyname; keyname = _rl_get_keyname (key); if (result_index + 2 > result_size) { result_size += 10; result = (char **)xrealloc (result, result_size * sizeof (char *)); } result[result_index++] = keyname; result[result_index] = (char *)NULL; } break; case ISKMAP: { char **seqs; register int i; /* Find the list of keyseqs in this map which have FUNCTION as their target. Add the key sequences found to RESULT. */ if (map[key].function) seqs = rl_invoking_keyseqs_in_map (function, FUNCTION_TO_KEYMAP (map, key)); else break; if (seqs == 0) break; for (i = 0; seqs[i]; i++) { char *keyname = (char *)xmalloc (6 + strlen (seqs[i])); if (key == ESC) { /* If ESC is the meta prefix and we're converting chars with the eighth bit set to ESC-prefixed sequences, then we can use \M-. Otherwise we need to use the sequence for ESC. */ if (_rl_convert_meta_chars_to_ascii && map[ESC].type == ISKMAP) sprintf (keyname, "\\M-"); else sprintf (keyname, "\\e"); } else if (CTRL_CHAR (key)) sprintf (keyname, "\\C-%c", _rl_to_lower (UNCTRL (key))); else if (key == RUBOUT) sprintf (keyname, "\\C-?"); else if (key == '\\' || key == '"') { keyname[0] = '\\'; keyname[1] = (char) key; keyname[2] = '\0'; } else { keyname[0] = (char) key; keyname[1] = '\0'; } strcat (keyname, seqs[i]); xfree (seqs[i]); if (result_index + 2 > result_size) { result_size += 10; result = (char **)xrealloc (result, result_size * sizeof (char *)); } result[result_index++] = keyname; result[result_index] = (char *)NULL; } xfree (seqs); } break; } } return (result); } /* Return a NULL terminated array of strings which represent the key sequences that can be used to invoke FUNCTION using the current keymap. */ char ** rl_invoking_keyseqs (function) rl_command_func_t *function; { return (rl_invoking_keyseqs_in_map (function, _rl_keymap)); } /* Print all of the functions and their bindings to rl_outstream. If PRINT_READABLY is non-zero, then print the output in such a way that it can be read back in. */ void rl_function_dumper (print_readably) int print_readably; { register int i; const char **names; const char *name; names = rl_funmap_names (); fprintf (rl_outstream, "\n"); for (i = 0; name = names[i]; i++) { rl_command_func_t *function; char **invokers; function = rl_named_function (name); invokers = rl_invoking_keyseqs_in_map (function, _rl_keymap); if (print_readably) { if (!invokers) fprintf (rl_outstream, "# %s (not bound)\n", name); else { register int j; for (j = 0; invokers[j]; j++) { fprintf (rl_outstream, "\"%s\": %s\n", invokers[j], name); xfree (invokers[j]); } xfree (invokers); } } else { if (!invokers) fprintf (rl_outstream, "%s is not bound to any keys\n", name); else { register int j; fprintf (rl_outstream, "%s can be found on ", name); for (j = 0; invokers[j] && j < 5; j++) { fprintf (rl_outstream, "\"%s\"%s", invokers[j], invokers[j + 1] ? ", " : ".\n"); } if (j == 5 && invokers[j]) fprintf (rl_outstream, "...\n"); for (j = 0; invokers[j]; j++) xfree (invokers[j]); xfree (invokers); } } } xfree (names); } /* Print all of the current functions and their bindings to rl_outstream. If an explicit argument is given, then print the output in such a way that it can be read back in. */ int rl_dump_functions (count, key) int count, key; { if (rl_dispatching) fprintf (rl_outstream, "\r\n"); rl_function_dumper (rl_explicit_arg); rl_on_new_line (); return (0); } static void _rl_macro_dumper_internal (print_readably, map, prefix) int print_readably; Keymap map; char *prefix; { register int key; char *keyname, *out; int prefix_len; for (key = 0; key < KEYMAP_SIZE; key++) { switch (map[key].type) { case ISMACR: keyname = _rl_get_keyname (key); out = _rl_untranslate_macro_value ((char *)map[key].function, 0); if (print_readably) fprintf (rl_outstream, "\"%s%s\": \"%s\"\n", prefix ? prefix : "", keyname, out ? out : ""); else fprintf (rl_outstream, "%s%s outputs %s\n", prefix ? prefix : "", keyname, out ? out : ""); xfree (keyname); xfree (out); break; case ISFUNC: break; case ISKMAP: prefix_len = prefix ? strlen (prefix) : 0; if (key == ESC) { keyname = (char *)xmalloc (3 + prefix_len); if (prefix) strcpy (keyname, prefix); keyname[prefix_len] = '\\'; keyname[prefix_len + 1] = 'e'; keyname[prefix_len + 2] = '\0'; } else { keyname = _rl_get_keyname (key); if (prefix) { out = (char *)xmalloc (strlen (keyname) + prefix_len + 1); strcpy (out, prefix); strcpy (out + prefix_len, keyname); xfree (keyname); keyname = out; } } _rl_macro_dumper_internal (print_readably, FUNCTION_TO_KEYMAP (map, key), keyname); xfree (keyname); break; } } } void rl_macro_dumper (print_readably) int print_readably; { _rl_macro_dumper_internal (print_readably, _rl_keymap, (char *)NULL); } int rl_dump_macros (count, key) int count, key; { if (rl_dispatching) fprintf (rl_outstream, "\r\n"); rl_macro_dumper (rl_explicit_arg); rl_on_new_line (); return (0); } static char * _rl_get_string_variable_value (name) const char *name; { static char numbuf[32]; char *ret; if (_rl_stricmp (name, "bell-style") == 0) { switch (_rl_bell_preference) { case NO_BELL: return "none"; case VISIBLE_BELL: return "visible"; case AUDIBLE_BELL: default: return "audible"; } } else if (_rl_stricmp (name, "comment-begin") == 0) return (_rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT); else if (_rl_stricmp (name, "completion-display-width") == 0) { sprintf (numbuf, "%d", _rl_completion_columns); return (numbuf); } else if (_rl_stricmp (name, "completion-prefix-display-length") == 0) { sprintf (numbuf, "%d", _rl_completion_prefix_display_length); return (numbuf); } else if (_rl_stricmp (name, "completion-query-items") == 0) { sprintf (numbuf, "%d", rl_completion_query_items); return (numbuf); } else if (_rl_stricmp (name, "editing-mode") == 0) return (rl_get_keymap_name_from_edit_mode ()); else if (_rl_stricmp (name, "history-size") == 0) { sprintf (numbuf, "%d", history_is_stifled() ? history_max_entries : 0); return (numbuf); } else if (_rl_stricmp (name, "isearch-terminators") == 0) { if (_rl_isearch_terminators == 0) return 0; ret = _rl_untranslate_macro_value (_rl_isearch_terminators, 0); if (ret) { strncpy (numbuf, ret, sizeof (numbuf) - 1); xfree (ret); numbuf[sizeof(numbuf) - 1] = '\0'; } else numbuf[0] = '\0'; return numbuf; } else if (_rl_stricmp (name, "keymap") == 0) { ret = rl_get_keymap_name (_rl_keymap); if (ret == 0) ret = rl_get_keymap_name_from_edit_mode (); return (ret ? ret : "none"); } else if (_rl_stricmp (name, "keyseq-timeout") == 0) { sprintf (numbuf, "%d", _rl_keyseq_timeout); return (numbuf); } else return (0); } void rl_variable_dumper (print_readably) int print_readably; { int i; char *v; for (i = 0; boolean_varlist[i].name; i++) { if (print_readably) fprintf (rl_outstream, "set %s %s\n", boolean_varlist[i].name, *boolean_varlist[i].value ? "on" : "off"); else fprintf (rl_outstream, "%s is set to `%s'\n", boolean_varlist[i].name, *boolean_varlist[i].value ? "on" : "off"); } for (i = 0; string_varlist[i].name; i++) { v = _rl_get_string_variable_value (string_varlist[i].name); if (v == 0) /* _rl_isearch_terminators can be NULL */ continue; if (print_readably) fprintf (rl_outstream, "set %s %s\n", string_varlist[i].name, v); else fprintf (rl_outstream, "%s is set to `%s'\n", string_varlist[i].name, v); } } /* Print all of the current variables and their values to rl_outstream. If an explicit argument is given, then print the output in such a way that it can be read back in. */ int rl_dump_variables (count, key) int count, key; { if (rl_dispatching) fprintf (rl_outstream, "\r\n"); rl_variable_dumper (rl_explicit_arg); rl_on_new_line (); return (0); } /* Return non-zero if any members of ARRAY are a substring in STRING. */ static int substring_member_of_array (string, array) const char *string; const char * const *array; { while (*array) { if (_rl_strindex (string, *array)) return (1); array++; } return (0); } readline-6.3/callback.c0000664000043600000000000001761412020546327013655 0ustar chetwheel/* callback.c -- functions to use readline as an X `callback' mechanism. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include "rlconf.h" #if defined (READLINE_CALLBACKS) #include #ifdef HAVE_STDLIB_H # include #else # include "ansi_stdlib.h" #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "readline.h" #include "rlprivate.h" #include "xmalloc.h" /* Private data for callback registration functions. See comments in rl_callback_read_char for more details. */ _rl_callback_func_t *_rl_callback_func = 0; _rl_callback_generic_arg *_rl_callback_data = 0; /* **************************************************************** */ /* */ /* Callback Readline Functions */ /* */ /* **************************************************************** */ /* Allow using readline in situations where a program may have multiple things to handle at once, and dispatches them via select(). Call rl_callback_handler_install() with the prompt and a function to call whenever a complete line of input is ready. The user must then call rl_callback_read_char() every time some input is available, and rl_callback_read_char() will call the user's function with the complete text read in at each end of line. The terminal is kept prepped all the time, except during calls to the user's function. Signal handlers are only installed when the application calls back into readline, so readline doesn't `steal' signals from the application. */ rl_vcpfunc_t *rl_linefunc; /* user callback function */ static int in_handler; /* terminal_prepped and signals set? */ /* Make sure the terminal is set up, initialize readline, and prompt. */ static void _rl_callback_newline () { rl_initialize (); if (in_handler == 0) { in_handler = 1; if (rl_prep_term_function) (*rl_prep_term_function) (_rl_meta_flag); } readline_internal_setup (); RL_CHECK_SIGNALS (); } /* Install a readline handler, set up the terminal, and issue the prompt. */ void rl_callback_handler_install (prompt, linefunc) const char *prompt; rl_vcpfunc_t *linefunc; { rl_set_prompt (prompt); RL_SETSTATE (RL_STATE_CALLBACK); rl_linefunc = linefunc; _rl_callback_newline (); } #if defined (HANDLE_SIGNALS) #define CALLBACK_READ_RETURN() \ do { \ rl_clear_signals (); \ return; \ } while (0) #else #define CALLBACK_READ_RETURN() return #endif /* Read one character, and dispatch to the handler if it ends the line. */ void rl_callback_read_char () { char *line; int eof, jcode; static procenv_t olevel; if (rl_linefunc == NULL) { _rl_errmsg ("readline_callback_read_char() called with no handler!"); abort (); } memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t)); #if defined (HAVE_POSIX_SIGSETJMP) jcode = sigsetjmp (_rl_top_level, 0); #else jcode = setjmp (_rl_top_level); #endif if (jcode) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t)); CALLBACK_READ_RETURN (); } #if defined (HANDLE_SIGNALS) /* Install signal handlers only when readline has control. */ rl_set_signals (); #endif do { RL_CHECK_SIGNALS (); if (RL_ISSTATE (RL_STATE_ISEARCH)) { eof = _rl_isearch_callback (_rl_iscxt); if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) rl_callback_read_char (); CALLBACK_READ_RETURN (); } else if (RL_ISSTATE (RL_STATE_NSEARCH)) { eof = _rl_nsearch_callback (_rl_nscxt); CALLBACK_READ_RETURN (); } #if defined (VI_MODE) else if (RL_ISSTATE (RL_STATE_VIMOTION)) { eof = _rl_vi_domove_callback (_rl_vimvcxt); /* Should handle everything, including cleanup, numeric arguments, and turning off RL_STATE_VIMOTION */ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) _rl_internal_char_cleanup (); CALLBACK_READ_RETURN (); } #endif else if (RL_ISSTATE (RL_STATE_NUMERICARG)) { eof = _rl_arg_callback (_rl_argcxt); if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) rl_callback_read_char (); /* XXX - this should handle _rl_last_command_was_kill better */ else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) _rl_internal_char_cleanup (); CALLBACK_READ_RETURN (); } else if (RL_ISSTATE (RL_STATE_MULTIKEY)) { eof = _rl_dispatch_callback (_rl_kscxt); /* For now */ while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED)) eof = _rl_dispatch_callback (_rl_kscxt); if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0) { _rl_internal_char_cleanup (); _rl_want_redisplay = 1; } } else if (_rl_callback_func) { /* This allows functions that simply need to read an additional character (like quoted-insert) to register a function to be called when input is available. _rl_callback_data is a pointer to a struct that has the argument count originally passed to the registering function and space for any additional parameters. */ eof = (*_rl_callback_func) (_rl_callback_data); /* If the function `deregisters' itself, make sure the data is cleaned up. */ if (_rl_callback_func == 0) { if (_rl_callback_data) { _rl_callback_data_dispose (_rl_callback_data); _rl_callback_data = 0; } _rl_internal_char_cleanup (); } } else eof = readline_internal_char (); RL_CHECK_SIGNALS (); if (rl_done == 0 && _rl_want_redisplay) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; } if (rl_done) { line = readline_internal_teardown (eof); if (rl_deprep_term_function) (*rl_deprep_term_function) (); #if defined (HANDLE_SIGNALS) rl_clear_signals (); #endif in_handler = 0; (*rl_linefunc) (line); /* If the user did not clear out the line, do it for him. */ if (rl_line_buffer[0]) _rl_init_line_state (); /* Redisplay the prompt if readline_handler_{install,remove} not called. */ if (in_handler == 0 && rl_linefunc) _rl_callback_newline (); } } while (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT)); CALLBACK_READ_RETURN (); } /* Remove the handler, and make sure the terminal is in its normal state. */ void rl_callback_handler_remove () { rl_linefunc = NULL; RL_UNSETSTATE (RL_STATE_CALLBACK); RL_CHECK_SIGNALS (); if (in_handler) { in_handler = 0; if (rl_deprep_term_function) (*rl_deprep_term_function) (); #if defined (HANDLE_SIGNALS) rl_clear_signals (); #endif } } _rl_callback_generic_arg * _rl_callback_data_alloc (count) int count; { _rl_callback_generic_arg *arg; arg = (_rl_callback_generic_arg *)xmalloc (sizeof (_rl_callback_generic_arg)); arg->count = count; arg->i1 = arg->i2 = 0; return arg; } void _rl_callback_data_dispose (arg) _rl_callback_generic_arg *arg; { xfree (arg); } #endif readline-6.3/colors.c0000644000043600000000000001560112122351554013411 0ustar chetwheel/* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include "rlconf.h" #include #include "posixstat.h" // stat related macros (S_ISREG, ...) #include // S_ISUID // strlen() #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ // abort() #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "readline.h" #include "rldefs.h" #ifdef COLOR_SUPPORT #include "xmalloc.h" #include "colors.h" static bool is_colored (enum indicator_no type); static void restore_default_color (void); COLOR_EXT_TYPE *_rl_color_ext_list = 0; /* Output a color indicator (which may contain nulls). */ void _rl_put_indicator (const struct bin_str *ind) { fwrite (ind->string, ind->len, 1, rl_outstream); } static bool is_colored (enum indicator_no colored_filetype) { size_t len = _rl_color_indicator[colored_filetype].len; char const *s = _rl_color_indicator[colored_filetype].string; return ! (len == 0 || (len == 1 && strncmp (s, "0", 1) == 0) || (len == 2 && strncmp (s, "00", 2) == 0)); } static void restore_default_color (void) { _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); } void _rl_set_normal_color (void) { if (is_colored (C_NORM)) { _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (&_rl_color_indicator[C_NORM]); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); } } /* Returns whether any color sequence was printed. */ bool _rl_print_color_indicator (char *f) { enum indicator_no colored_filetype; COLOR_EXT_TYPE *ext; /* Color extension */ size_t len; /* Length of name */ const char* name; char *filename; struct stat astat; mode_t mode; int linkok; int stat_ok; name = f; /* This should already have undergone tilde expansion */ filename = 0; if (rl_filename_stat_hook) { filename = savestring (f); (*rl_filename_stat_hook) (&filename); name = filename; } #if defined (HAVE_LSTAT) stat_ok = lstat(name, &astat); #else stat_ok = stat(name, &astat); #endif if( stat_ok == 0 ) { mode = astat.st_mode; linkok = 1; //f->linkok; } else linkok = -1; /* Is this a nonexistent file? If so, linkok == -1. */ if (linkok == -1 && _rl_color_indicator[C_MISSING].string != NULL) colored_filetype = C_MISSING; else if(stat_ok != 0) { static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS; colored_filetype = filetype_indicator[normal]; //f->filetype]; } else { if (S_ISREG (mode)) { colored_filetype = C_FILE; if ((mode & S_ISUID) != 0 && is_colored (C_SETUID)) colored_filetype = C_SETUID; else if ((mode & S_ISGID) != 0 && is_colored (C_SETGID)) colored_filetype = C_SETGID; else if (is_colored (C_CAP) && 0) //f->has_capability) colored_filetype = C_CAP; else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC)) colored_filetype = C_EXEC; else if ((1 < astat.st_nlink) && is_colored (C_MULTIHARDLINK)) colored_filetype = C_MULTIHARDLINK; } else if (S_ISDIR (mode)) { colored_filetype = C_DIR; #if defined (S_ISVTX) if ((mode & S_ISVTX) && (mode & S_IWOTH) && is_colored (C_STICKY_OTHER_WRITABLE)) colored_filetype = C_STICKY_OTHER_WRITABLE; else #endif if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE)) colored_filetype = C_OTHER_WRITABLE; #if defined (S_ISVTX) else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY)) colored_filetype = C_STICKY; #endif } else if (S_ISLNK (mode)) colored_filetype = ((linkok == 0 && (!strncmp (_rl_color_indicator[C_LINK].string, "target", 6) || _rl_color_indicator[C_ORPHAN].string)) ? C_ORPHAN : C_LINK); else if (S_ISFIFO (mode)) colored_filetype = C_FIFO; else if (S_ISSOCK (mode)) colored_filetype = C_SOCK; else if (S_ISBLK (mode)) colored_filetype = C_BLK; else if (S_ISCHR (mode)) colored_filetype = C_CHR; else { /* Classify a file of some other type as C_ORPHAN. */ colored_filetype = C_ORPHAN; } } /* Check the file's suffix only if still classified as C_FILE. */ ext = NULL; if (colored_filetype == C_FILE) { /* Test if NAME has a recognized suffix. */ len = strlen (name); name += len; /* Pointer to final \0. */ for (ext = _rl_color_ext_list; ext != NULL; ext = ext->next) { if (ext->ext.len <= len && strncmp (name - ext->ext.len, ext->ext.string, ext->ext.len) == 0) break; } } free (filename); /* NULL or savestring return value */ { const struct bin_str *const s = ext ? &(ext->seq) : &_rl_color_indicator[colored_filetype]; if (s->string != NULL) { /* Need to reset so not dealing with attribute combinations */ if (is_colored (C_NORM)) restore_default_color (); _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (s); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); return 0; } else return 1; } } void _rl_prep_non_filename_text (void) { if (_rl_color_indicator[C_END].string != NULL) _rl_put_indicator (&_rl_color_indicator[C_END]); else { _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (&_rl_color_indicator[C_RESET]); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); } } #endif /* COLOR_SUPPORT */ readline-6.3/compat.c0000664000043600000000000000455511130207320013370 0ustar chetwheel/* compat.c -- backwards compatibility functions. */ /* Copyright (C) 2000-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include "rlstdc.h" #include "rltypedefs.h" extern void rl_free_undo_list PARAMS((void)); extern int rl_maybe_save_line PARAMS((void)); extern int rl_maybe_unsave_line PARAMS((void)); extern int rl_maybe_replace_line PARAMS((void)); extern int rl_crlf PARAMS((void)); extern int rl_ding PARAMS((void)); extern int rl_alphabetic PARAMS((int)); extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *)); extern char *rl_username_completion_function PARAMS((const char *, int)); extern char *rl_filename_completion_function PARAMS((const char *, int)); /* Provide backwards-compatible entry points for old function names. */ void free_undo_list () { rl_free_undo_list (); } int maybe_replace_line () { return rl_maybe_replace_line (); } int maybe_save_line () { return rl_maybe_save_line (); } int maybe_unsave_line () { return rl_maybe_unsave_line (); } int ding () { return rl_ding (); } int crlf () { return rl_crlf (); } int alphabetic (c) int c; { return rl_alphabetic (c); } char ** completion_matches (s, f) const char *s; rl_compentry_func_t *f; { return rl_completion_matches (s, f); } char * username_completion_function (s, i) const char *s; int i; { return rl_username_completion_function (s, i); } char * filename_completion_function (s, i) const char *s; int i; { return rl_filename_completion_function (s, i); } readline-6.3/complete.c0000644000043600000240000024626112226770456013750 0ustar chetstaff/* complete.c -- filename completion for readline. */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_SYS_FILE_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include #if !defined (errno) extern int errno; #endif /* !errno */ #if defined (HAVE_PWD_H) #include #endif #include "posixdir.h" #include "posixstat.h" /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Some standard library routines. */ #include "readline.h" #include "xmalloc.h" #include "rlprivate.h" #if defined (COLOR_SUPPORT) # include "colors.h" #endif #ifdef __STDC__ typedef int QSFUNC (const void *, const void *); #else typedef int QSFUNC (); #endif #ifdef HAVE_LSTAT # define LSTAT lstat #else # define LSTAT stat #endif /* Unix version of a hidden file. Could be different on other systems. */ #define HIDDEN_FILE(fname) ((fname)[0] == '.') /* Most systems don't declare getpwent in if _POSIX_SOURCE is defined. */ #if defined (HAVE_GETPWENT) && (!defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE)) extern struct passwd *getpwent PARAMS((void)); #endif /* HAVE_GETPWENT && (!HAVE_GETPW_DECLS || _POSIX_SOURCE) */ /* If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called instead of actually doing the display. It takes three arguments: (char **matches, int num_matches, int max_length) where MATCHES is the array of strings that matched, NUM_MATCHES is the number of strings in that array, and MAX_LENGTH is the length of the longest string in that array. */ rl_compdisp_func_t *rl_completion_display_matches_hook = (rl_compdisp_func_t *)NULL; #if defined (VISIBLE_STATS) || defined (COLOR_SUPPORT) # if !defined (X_OK) # define X_OK 1 # endif #endif #if defined (VISIBLE_STATS) static int stat_char PARAMS((char *)); #endif #if defined (COLOR_SUPPORT) static int colored_stat_start PARAMS((char *)); static void colored_stat_end PARAMS((void)); #endif static int path_isdir PARAMS((const char *)); static char *rl_quote_filename PARAMS((char *, int, char *)); static void _rl_complete_sigcleanup PARAMS((int, void *)); static void set_completion_defaults PARAMS((int)); static int get_y_or_n PARAMS((int)); static int _rl_internal_pager PARAMS((int)); static char *printable_part PARAMS((char *)); static int fnwidth PARAMS((const char *)); static int fnprint PARAMS((const char *, int)); static int print_filename PARAMS((char *, char *, int)); static char **gen_completion_matches PARAMS((char *, int, int, rl_compentry_func_t *, int, int)); static char **remove_duplicate_matches PARAMS((char **)); static void insert_match PARAMS((char *, int, int, char *)); static int append_to_match PARAMS((char *, int, int, int)); static void insert_all_matches PARAMS((char **, int, char *)); static int complete_fncmp PARAMS((const char *, int, const char *, int)); static void display_matches PARAMS((char **)); static int compute_lcd_of_matches PARAMS((char **, int, const char *)); static int postprocess_matches PARAMS((char ***, int)); static int complete_get_screenwidth PARAMS((void)); static char *make_quoted_replacement PARAMS((char *, int, char *)); /* **************************************************************** */ /* */ /* Completion matching, from readline's point of view. */ /* */ /* **************************************************************** */ /* Variables known only to the readline library. */ /* If non-zero, non-unique completions always show the list of matches. */ int _rl_complete_show_all = 0; /* If non-zero, non-unique completions show the list of matches, unless it is not possible to do partial completion and modify the line. */ int _rl_complete_show_unmodified = 0; /* If non-zero, completed directory names have a slash appended. */ int _rl_complete_mark_directories = 1; /* If non-zero, the symlinked directory completion behavior introduced in readline-4.2a is disabled, and symlinks that point to directories have a slash appended (subject to the value of _rl_complete_mark_directories). This is user-settable via the mark-symlinked-directories variable. */ int _rl_complete_mark_symlink_dirs = 0; /* If non-zero, completions are printed horizontally in alphabetical order, like `ls -x'. */ int _rl_print_completions_horizontally; /* Non-zero means that case is not significant in filename completion. */ #if defined (__MSDOS__) && !defined (__DJGPP__) int _rl_completion_case_fold = 1; #else int _rl_completion_case_fold = 0; #endif /* Non-zero means that `-' and `_' are equivalent when comparing filenames for completion. */ int _rl_completion_case_map = 0; /* If zero, don't match hidden files (filenames beginning with a `.' on Unix) when doing filename completion. */ int _rl_match_hidden_files = 1; /* Length in characters of a common prefix replaced with an ellipsis (`...') when displaying completion matches. Matches whose printable portion has more than this number of displaying characters in common will have the common display prefix replaced with an ellipsis. */ int _rl_completion_prefix_display_length = 0; /* The readline-private number of screen columns to use when displaying matches. If < 0 or > _rl_screenwidth, it is ignored. */ int _rl_completion_columns = -1; /* Global variables available to applications using readline. */ #if defined (VISIBLE_STATS) /* Non-zero means add an additional character to each filename displayed during listing completion iff rl_filename_completion_desired which helps to indicate the type of file being listed. */ int rl_visible_stats = 0; #endif /* VISIBLE_STATS */ #if defined (COLOR_SUPPORT) /* Non-zero means to use colors to indicate file type when listing possible completions. The colors used are taken from $LS_COLORS, if set. */ int _rl_colored_stats = 0; #endif /* If non-zero, when completing in the middle of a word, don't insert characters from the match that match characters following point in the word. This means, for instance, completing when the cursor is after the `e' in `Makefile' won't result in `Makefilefile'. */ int _rl_skip_completed_text = 0; /* If non-zero, menu completion displays the common prefix first in the cycle of possible completions instead of the last. */ int _rl_menu_complete_prefix_first = 0; /* If non-zero, then this is the address of a function to call when completing on a directory name. The function is called with the address of a string (the current directory name) as an arg. */ rl_icppfunc_t *rl_directory_completion_hook = (rl_icppfunc_t *)NULL; rl_icppfunc_t *rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; rl_icppfunc_t *rl_filename_stat_hook = (rl_icppfunc_t *)NULL; /* If non-zero, this is the address of a function to call when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should either return its first argument (if no conversion takes place) or newly-allocated memory. This can, for instance, convert filenames between character sets for comparison against what's typed at the keyboard. The returned value is what is added to the list of matches. The second argument is the length of the filename to be converted. */ rl_dequote_func_t *rl_filename_rewrite_hook = (rl_dequote_func_t *)NULL; /* Non-zero means readline completion functions perform tilde expansion. */ int rl_complete_with_tilde_expansion = 0; /* Pointer to the generator function for completion_matches (). NULL means to use rl_filename_completion_function (), the default filename completer. */ rl_compentry_func_t *rl_completion_entry_function = (rl_compentry_func_t *)NULL; /* Pointer to generator function for rl_menu_complete (). NULL means to use *rl_completion_entry_function (see above). */ rl_compentry_func_t *rl_menu_completion_entry_function = (rl_compentry_func_t *)NULL; /* Pointer to alternative function to create matches. 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 then call the value of rl_completion_entry_function to try to match, otherwise use the array of strings returned. */ rl_completion_func_t *rl_attempted_completion_function = (rl_completion_func_t *)NULL; /* Non-zero means to suppress normal filename completion after the user-specified completion function has been called. */ int rl_attempted_completion_over = 0; /* Set to a character indicating the type of completion being performed by rl_complete_internal, available for use by application completion functions. */ int rl_completion_type = 0; /* 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. A negative value means don't ask. */ int rl_completion_query_items = 100; int _rl_page_completions = 1; /* The basic list of characters that signal a break between words for the completer routine. The contents of this variable is what breaks words in the shell, i.e. " \t\n\"\\'`@$><=" */ const char *rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{("; /* }) */ /* List of basic quoting characters. */ const char *rl_basic_quote_characters = "\"'"; /* The list of characters that signal a break between words for rl_complete_internal. The default list is the contents of rl_basic_word_break_characters. */ /*const*/ char *rl_completer_word_break_characters = (/*const*/ char *)NULL; /* Hook function to allow an application to set the completion word break characters before readline breaks up the line. Allows position-dependent word break characters. */ rl_cpvfunc_t *rl_completion_word_break_hook = (rl_cpvfunc_t *)NULL; /* 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. */ const char *rl_completer_quote_characters = (const char *)NULL; /* List of characters that should be quoted in filenames by the completer. */ const char *rl_filename_quote_characters = (const char *)NULL; /* List of characters that are word break characters, but should be left in TEXT when it is passed to the completion function. The shell uses this to help determine what kind of completing to do. */ const char *rl_special_prefixes = (const char *)NULL; /* If non-zero, then disallow duplicates in the matches. */ int rl_ignore_completion_duplicates = 1; /* 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 finder function. */ int rl_filename_completion_desired = 0; /* Non-zero means that the results of the matches are to be quoted using double quotes (or an application-specific quoting mechanism) if the 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 finder function. */ int rl_filename_quoting_desired = 1; /* 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 (char**) known as matches in the code below. It consists of a NULL-terminated array of pointers to potential matching strings. The 1st element (matches[0]) is the maximal substring that is common to all matches. This function can re-arrange the list of matches as required, but all elements of the array must be free()'d if they are deleted. The main intent of this function is to implement FIGNORE a la SunOS csh. */ rl_compignore_func_t *rl_ignore_some_completions_function = (rl_compignore_func_t *)NULL; /* Set to a function to quote a filename in an application-specific fashion. Called with the text to quote, the type of match found (single or multiple) and a pointer to the quoting character to be used, which the function can reset if desired. */ rl_quote_func_t *rl_filename_quoting_function = rl_quote_filename; /* Function to call to remove quoting characters from a filename. Called before completion is attempted, so the embedded quotes do not interfere with matching names in the file system. Readline doesn't do anything with this; it's set only by applications. */ rl_dequote_func_t *rl_filename_dequoting_function = (rl_dequote_func_t *)NULL; /* Function to call to decide whether or not a word break character is quoted. If a character is quoted, it does not break words for the completer. */ rl_linebuf_func_t *rl_char_is_quoted_p = (rl_linebuf_func_t *)NULL; /* If non-zero, the completion functions don't append anything except a possible closing quote. This is set to 0 by rl_complete_internal and may be changed by an application-specific completion function. */ int rl_completion_suppress_append = 0; /* Character appended to completed words when at the end of the line. The default is a space. */ int rl_completion_append_character = ' '; /* If non-zero, the completion functions don't append any closing quote. This is set to 0 by rl_complete_internal and may be changed by an application-specific completion function. */ int rl_completion_suppress_quote = 0; /* Set to any quote character readline thinks it finds before any application completion function is called. */ int rl_completion_quote_character; /* Set to a non-zero value if readline found quoting anywhere in the word to be completed; set before any application completion function is called. */ int rl_completion_found_quote; /* If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the mark-directories variable (which is user-settable). This exists so that application completion functions can override the user's preference (set via the mark-symlinked-directories variable) if appropriate. It's set to the value of _rl_complete_mark_symlink_dirs in rl_complete_internal before any application-specific completion function is called, so without that function doing anything, the user's preferences are honored. */ int rl_completion_mark_symlink_dirs; /* If non-zero, inhibit completion (temporarily). */ int rl_inhibit_completion; /* Set to the last key used to invoke one of the completion functions */ int rl_completion_invoking_key; /* If non-zero, sort the completion matches. On by default. */ int rl_sort_completion_matches = 1; /* Variables local to this file. */ /* Local variable states what happened during the last completion attempt. */ static int completion_changed_buffer; /* The result of the query to the user about displaying completion matches */ static int completion_y_or_n; /*************************************/ /* */ /* Bindable completion functions */ /* */ /*************************************/ /* Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see rl_completion_matches ()). The default is to do filename completion. */ int rl_complete (ignore, invoking_key) int ignore, invoking_key; { rl_completion_invoking_key = invoking_key; if (rl_inhibit_completion) return (_rl_insert_char (ignore, invoking_key)); else if (rl_last_func == rl_complete && !completion_changed_buffer) return (rl_complete_internal ('?')); else if (_rl_complete_show_all) return (rl_complete_internal ('!')); else if (_rl_complete_show_unmodified) return (rl_complete_internal ('@')); else return (rl_complete_internal (TAB)); } /* List the possible completions. See description of rl_complete (). */ int rl_possible_completions (ignore, invoking_key) int ignore, invoking_key; { rl_completion_invoking_key = invoking_key; return (rl_complete_internal ('?')); } int rl_insert_completions (ignore, invoking_key) int ignore, invoking_key; { rl_completion_invoking_key = invoking_key; return (rl_complete_internal ('*')); } /* Return the correct value to pass to rl_complete_internal performing the same tests as rl_complete. This allows consecutive calls to an application's completion function to list possible completions and for an application-specific completion function to honor the show-all-if-ambiguous readline variable. */ int rl_completion_mode (cfunc) rl_command_func_t *cfunc; { if (rl_last_func == cfunc && !completion_changed_buffer) return '?'; else if (_rl_complete_show_all) return '!'; else if (_rl_complete_show_unmodified) return '@'; else return TAB; } /************************************/ /* */ /* Completion utility functions */ /* */ /************************************/ /* Reset readline state on a signal or other event. */ void _rl_reset_completion_state () { rl_completion_found_quote = 0; rl_completion_quote_character = 0; } static void _rl_complete_sigcleanup (sig, ptr) int sig; void *ptr; { if (sig == SIGINT) /* XXX - for now */ _rl_free_match_list ((char **)ptr); } /* Set default values for readline word completion. These are the variables that application completion functions can change or inspect. */ static void set_completion_defaults (what_to_do) int what_to_do; { /* Only the completion entry function can change these. */ rl_filename_completion_desired = 0; rl_filename_quoting_desired = 1; rl_completion_type = what_to_do; rl_completion_suppress_append = rl_completion_suppress_quote = 0; rl_completion_append_character = ' '; /* The completion entry function may optionally change this. */ rl_completion_mark_symlink_dirs = _rl_complete_mark_symlink_dirs; } /* The user must press "y" or "n". Non-zero return means "y" pressed. */ static int get_y_or_n (for_pager) int for_pager; { int c; /* For now, disable pager in callback mode, until we later convert to state driven functions. Have to wait until next major version to add new state definition, since it will change value of RL_STATE_DONE. */ #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) return 1; #endif for (;;) { RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c == 'y' || c == 'Y' || c == ' ') return (1); if (c == 'n' || c == 'N' || c == RUBOUT) return (0); if (c == ABORT_CHAR || c < 0) _rl_abort_internal (); if (for_pager && (c == NEWLINE || c == RETURN)) return (2); if (for_pager && (c == 'q' || c == 'Q')) return (0); rl_ding (); } } static int _rl_internal_pager (lines) int lines; { int i; fprintf (rl_outstream, "--More--"); fflush (rl_outstream); i = get_y_or_n (1); _rl_erase_entire_line (); if (i == 0) return -1; else if (i == 2) return (lines - 1); else return 0; } static int path_isdir (filename) const char *filename; { struct stat finfo; return (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode)); } #if defined (VISIBLE_STATS) /* Return the character which best describes FILENAME. `@' for symbolic links `/' for directories `*' for executables `=' for sockets `|' for FIFOs `%' for character special devices `#' for block special devices */ static int stat_char (filename) char *filename; { struct stat finfo; int character, r; char *f; const char *fn; /* Short-circuit a //server on cygwin, since that will always behave as a directory. */ #if __CYGWIN__ if (filename[0] == '/' && filename[1] == '/' && strchr (filename+2, '/') == 0) return '/'; #endif f = 0; if (rl_filename_stat_hook) { f = savestring (filename); (*rl_filename_stat_hook) (&f); fn = f; } else fn = filename; #if defined (HAVE_LSTAT) && defined (S_ISLNK) r = lstat (fn, &finfo); #else r = stat (fn, &finfo); #endif if (r == -1) return (0); character = 0; if (S_ISDIR (finfo.st_mode)) character = '/'; #if defined (S_ISCHR) else if (S_ISCHR (finfo.st_mode)) character = '%'; #endif /* S_ISCHR */ #if defined (S_ISBLK) else if (S_ISBLK (finfo.st_mode)) character = '#'; #endif /* S_ISBLK */ #if defined (S_ISLNK) else if (S_ISLNK (finfo.st_mode)) character = '@'; #endif /* S_ISLNK */ #if defined (S_ISSOCK) else if (S_ISSOCK (finfo.st_mode)) character = '='; #endif /* S_ISSOCK */ #if defined (S_ISFIFO) else if (S_ISFIFO (finfo.st_mode)) character = '|'; #endif else if (S_ISREG (finfo.st_mode)) { if (access (filename, X_OK) == 0) character = '*'; } free (f); return (character); } #endif /* VISIBLE_STATS */ #if defined (COLOR_SUPPORT) static int colored_stat_start (filename) char *filename; { _rl_set_normal_color (); return (_rl_print_color_indicator (filename)); } static void colored_stat_end () { _rl_prep_non_filename_text (); _rl_put_indicator (&_rl_color_indicator[C_CLR_TO_EOL]); } #endif /* Return the portion of PATHNAME that should be output when listing possible completions. If we are hacking filename completion, we are only interested in the basename, the portion following the final slash. Otherwise, we return what we were passed. Since printing empty strings is not very informative, if we're doing filename completion, and the basename is the empty string, we look for the previous slash and return the portion following that. If there's no previous slash, we just return what we were passed. */ static char * printable_part (pathname) char *pathname; { char *temp, *x; if (rl_filename_completion_desired == 0) /* don't need to do anything */ return (pathname); temp = strrchr (pathname, '/'); #if defined (__MSDOS__) if (temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':') temp = pathname + 1; #endif if (temp == 0 || *temp == '\0') return (pathname); /* If the basename is NULL, we might have a pathname like '/usr/src/'. Look for a previous slash and, if one is found, return the portion following that slash. If there's no previous slash, just return the pathname we were passed. */ else if (temp[1] == '\0') { for (x = temp - 1; x > pathname; x--) if (*x == '/') break; return ((*x == '/') ? x + 1 : pathname); } else return ++temp; } /* Compute width of STRING when displayed on screen by print_filename */ static int fnwidth (string) const char *string; { int width, pos; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; int left, w; size_t clen; wchar_t wc; left = strlen (string) + 1; memset (&ps, 0, sizeof (mbstate_t)); #endif width = pos = 0; while (string[pos]) { if (CTRL_CHAR (string[pos]) || string[pos] == RUBOUT) { width += 2; pos++; } else { #if defined (HANDLE_MULTIBYTE) clen = mbrtowc (&wc, string + pos, left - pos, &ps); if (MB_INVALIDCH (clen)) { width++; pos++; memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (clen)) break; else { pos += clen; w = WCWIDTH (wc); width += (w >= 0) ? w : 1; } #else width++; pos++; #endif } } return width; } #define ELLIPSIS_LEN 3 static int fnprint (to_print, prefix_bytes) const char *to_print; int prefix_bytes; { int printed_len, w; const char *s; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; const char *end; size_t tlen; int width; wchar_t wc; end = to_print + strlen (to_print) + 1; memset (&ps, 0, sizeof (mbstate_t)); #endif printed_len = 0; /* Don't print only the ellipsis if the common prefix is one of the possible completions */ if (to_print[prefix_bytes] == '\0') prefix_bytes = 0; if (prefix_bytes) { char ellipsis; ellipsis = (to_print[prefix_bytes] == '.') ? '_' : '.'; for (w = 0; w < ELLIPSIS_LEN; w++) putc (ellipsis, rl_outstream); printed_len = ELLIPSIS_LEN; } s = to_print + prefix_bytes; while (*s) { if (CTRL_CHAR (*s)) { putc ('^', rl_outstream); putc (UNCTRL (*s), rl_outstream); printed_len += 2; s++; #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); #endif } else if (*s == RUBOUT) { putc ('^', rl_outstream); putc ('?', rl_outstream); printed_len += 2; s++; #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); #endif } else { #if defined (HANDLE_MULTIBYTE) tlen = mbrtowc (&wc, s, end - s, &ps); if (MB_INVALIDCH (tlen)) { tlen = 1; width = 1; memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tlen)) break; else { w = WCWIDTH (wc); width = (w >= 0) ? w : 1; } fwrite (s, 1, tlen, rl_outstream); s += tlen; printed_len += width; #else putc (*s, rl_outstream); s++; printed_len++; #endif } } return printed_len; } /* Output TO_PRINT to rl_outstream. If VISIBLE_STATS is defined and we are using it, check for and output a single character for `special' filenames. Return the number of characters we output. */ static int print_filename (to_print, full_pathname, prefix_bytes) char *to_print, *full_pathname; int prefix_bytes; { int printed_len, extension_char, slen, tlen; char *s, c, *new_full_pathname, *dn; extension_char = 0; #if defined (COLOR_SUPPORT) /* Defer printing if we want to prefix with a color indicator */ if (_rl_colored_stats == 0 || rl_filename_completion_desired == 0) #endif printed_len = fnprint (to_print, prefix_bytes); if (rl_filename_completion_desired && ( #if defined (VISIBLE_STATS) rl_visible_stats || #endif #if defined (COLOR_SUPPORT) _rl_colored_stats || #endif _rl_complete_mark_directories)) { /* If to_print != full_pathname, to_print is the basename of the path passed. In this case, we try to expand the directory name before checking for the stat character. */ if (to_print != full_pathname) { /* Terminate the directory name. */ c = to_print[-1]; to_print[-1] = '\0'; /* If setting the last slash in full_pathname to a NUL results in full_pathname being the empty string, we are trying to complete files in the root directory. If we pass a null string to the bash directory completion hook, for example, it will expand it to the current directory. We just want the `/'. */ if (full_pathname == 0 || *full_pathname == 0) dn = "/"; else if (full_pathname[0] != '/') dn = full_pathname; else if (full_pathname[1] == 0) dn = "//"; /* restore trailing slash to `//' */ else if (full_pathname[1] == '/' && full_pathname[2] == 0) dn = "/"; /* don't turn /// into // */ else dn = full_pathname; s = tilde_expand (dn); if (rl_directory_completion_hook) (*rl_directory_completion_hook) (&s); slen = strlen (s); tlen = strlen (to_print); new_full_pathname = (char *)xmalloc (slen + tlen + 2); strcpy (new_full_pathname, s); if (s[slen - 1] == '/') slen--; else new_full_pathname[slen] = '/'; new_full_pathname[slen] = '/'; strcpy (new_full_pathname + slen + 1, to_print); #if defined (VISIBLE_STATS) if (rl_visible_stats) extension_char = stat_char (new_full_pathname); else #endif if (_rl_complete_mark_directories) { dn = 0; if (rl_directory_completion_hook == 0 && rl_filename_stat_hook) { dn = savestring (new_full_pathname); (*rl_filename_stat_hook) (&dn); free (new_full_pathname); new_full_pathname = dn; } if (path_isdir (new_full_pathname)) extension_char = '/'; } #if defined (COLOR_SUPPORT) if (_rl_colored_stats) { colored_stat_start (new_full_pathname); printed_len = fnprint (to_print, prefix_bytes); colored_stat_end (); } #endif xfree (new_full_pathname); to_print[-1] = c; } else { s = tilde_expand (full_pathname); #if defined (VISIBLE_STATS) if (rl_visible_stats) extension_char = stat_char (s); else #endif if (_rl_complete_mark_directories && path_isdir (s)) extension_char = '/'; #if defined (COLOR_SUPPORT) if (_rl_colored_stats) { colored_stat_start (s); printed_len = fnprint (to_print, prefix_bytes); colored_stat_end (); } #endif } xfree (s); if (extension_char) { putc (extension_char, rl_outstream); printed_len++; } } return printed_len; } static char * rl_quote_filename (s, rtype, qcp) char *s; int rtype; char *qcp; { char *r; r = (char *)xmalloc (strlen (s) + 2); *r = *rl_completer_quote_characters; strcpy (r + 1, s); if (qcp) *qcp = *rl_completer_quote_characters; return r; } /* Find the bounds of the current word for completion purposes, and leave rl_point set to the end of the word. This function skips quoted substrings (characters between matched pairs of characters in rl_completer_quote_characters). First we try to find an unclosed quoted substring on which to do matching. If one is not found, we use the word break characters to find the boundaries of the current word. We call an application-specific function to decide whether or not a particular word break character is quoted; if that function returns a non-zero result, the character does not break a word. This function returns the opening quote character if we found an unclosed quoted substring, '\0' otherwise. FP, if non-null, is set to a value saying which (shell-like) quote characters we found (single quote, double quote, or backslash) anywhere in the string. DP, if non-null, is set to the value of the delimiter character that caused a word break. */ char _rl_find_completion_word (fp, dp) int *fp, *dp; { int scan, end, found_quote, delimiter, pass_next, isbrk; char quote_char, *brkchars; end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; brkchars = 0; if (rl_completion_word_break_hook) brkchars = (*rl_completion_word_break_hook) (); if (brkchars == 0) brkchars = rl_completer_word_break_characters; if (rl_completer_quote_characters) { /* We have a list of characters which can be used in pairs to quote substrings for the completer. Try to find the start of an unclosed quoted substring. */ /* FOUND_QUOTE is set so we know what kind of quotes we found. */ for (scan = pass_next = 0; scan < end; scan = MB_NEXTCHAR (rl_line_buffer, scan, 1, MB_FIND_ANY)) { if (pass_next) { pass_next = 0; continue; } /* Shell-like semantics for single quotes -- don't allow backslash to quote anything in single quotes, especially not the closing quote. If you don't like this, take out the check on the value of quote_char. */ if (quote_char != '\'' && rl_line_buffer[scan] == '\\') { pass_next = 1; found_quote |= RL_QF_BACKSLASH; continue; } if (quote_char != '\0') { /* Ignore everything until the matching close quote char. */ if (rl_line_buffer[scan] == quote_char) { /* Found matching close. Abandon this substring. */ quote_char = '\0'; rl_point = end; } } else if (strchr (rl_completer_quote_characters, rl_line_buffer[scan])) { /* Found start of a quoted substring. */ quote_char = rl_line_buffer[scan]; rl_point = scan + 1; /* Shell-like quoting conventions. */ if (quote_char == '\'') found_quote |= RL_QF_SINGLE_QUOTE; else if (quote_char == '"') found_quote |= RL_QF_DOUBLE_QUOTE; else found_quote |= RL_QF_OTHER_QUOTE; } } } if (rl_point == end && quote_char == '\0') { /* We didn't find an unclosed quoted substring upon which to do completion, so use the word break characters to find the substring on which to complete. */ while (rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_ANY)) { scan = rl_line_buffer[rl_point]; if (strchr (brkchars, scan) == 0) continue; /* Call the application-specific function to tell us whether this word break character is quoted and should be skipped. */ if (rl_char_is_quoted_p && found_quote && (*rl_char_is_quoted_p) (rl_line_buffer, rl_point)) continue; /* Convoluted code, but it avoids an n^2 algorithm with calls to char_is_quoted. */ break; } } /* If we are at an unquoted word break, then advance past it. */ scan = rl_line_buffer[rl_point]; /* If there is an application-specific function to say whether or not a character is quoted and we found a quote character, let that function decide whether or not a character is a word break, even if it is found in rl_completer_word_break_characters. Don't bother if we're at the end of the line, though. */ if (scan) { if (rl_char_is_quoted_p) isbrk = (found_quote == 0 || (*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) && strchr (brkchars, scan) != 0; else isbrk = strchr (brkchars, scan) != 0; if (isbrk) { /* If the character that caused the word break was a quoting character, then remember it as the delimiter. */ if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, scan) && (end - rl_point) > 1) delimiter = scan; /* If the character isn't needed to determine something special about what kind of completion to perform, then advance past it. */ if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0) rl_point++; } } if (fp) *fp = found_quote; if (dp) *dp = delimiter; return (quote_char); } static char ** gen_completion_matches (text, start, end, our_func, found_quote, quote_char) char *text; int start, end; rl_compentry_func_t *our_func; int found_quote, quote_char; { char **matches; rl_completion_found_quote = found_quote; rl_completion_quote_character = quote_char; /* If the user wants to TRY to complete, but then wants to give up and use the default completion function, they set the variable rl_attempted_completion_function. */ if (rl_attempted_completion_function) { matches = (*rl_attempted_completion_function) (text, start, end); if (RL_SIG_RECEIVED()) { _rl_free_match_list (matches); matches = 0; RL_CHECK_SIGNALS (); } if (matches || rl_attempted_completion_over) { rl_attempted_completion_over = 0; return (matches); } } /* XXX -- filename dequoting moved into rl_filename_completion_function */ /* rl_completion_matches will check for signals as well to avoid a long delay while reading a directory. */ matches = rl_completion_matches (text, our_func); if (RL_SIG_RECEIVED()) { _rl_free_match_list (matches); matches = 0; RL_CHECK_SIGNALS (); } return matches; } /* Filter out duplicates in MATCHES. This frees up the strings in MATCHES. */ static char ** remove_duplicate_matches (matches) char **matches; { char *lowest_common; int i, j, newlen; char dead_slot; char **temp_array; /* Sort the items. */ for (i = 0; matches[i]; i++) ; /* Sort the array without matches[0], since we need it to stay in place no matter what. */ if (i && rl_sort_completion_matches) qsort (matches+1, i-1, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); /* Remember the lowest common denominator for it may be unique. */ lowest_common = savestring (matches[0]); for (i = newlen = 0; matches[i + 1]; i++) { if (strcmp (matches[i], matches[i + 1]) == 0) { xfree (matches[i]); matches[i] = (char *)&dead_slot; } else newlen++; } /* We have marked all the dead slots with (char *)&dead_slot. Copy all the non-dead entries into a new array. */ temp_array = (char **)xmalloc ((3 + newlen) * sizeof (char *)); for (i = j = 1; matches[i]; i++) { if (matches[i] != (char *)&dead_slot) temp_array[j++] = matches[i]; } temp_array[j] = (char *)NULL; if (matches[0] != (char *)&dead_slot) xfree (matches[0]); /* Place the lowest common denominator back in [0]. */ temp_array[0] = lowest_common; /* If there is one string left, and it is identical to the lowest common denominator, then the LCD is the string to insert. */ if (j == 2 && strcmp (temp_array[0], temp_array[1]) == 0) { xfree (temp_array[1]); temp_array[1] = (char *)NULL; } return (temp_array); } /* Find the common prefix of the list of matches, and put it into matches[0]. */ static int compute_lcd_of_matches (match_list, matches, text) char **match_list; int matches; const char *text; { register int i, c1, c2, si; int low; /* Count of max-matched characters. */ int lx; char *dtext; /* dequoted TEXT, if needed */ #if defined (HANDLE_MULTIBYTE) int v; size_t v1, v2; mbstate_t ps1, ps2; wchar_t wc1, wc2; #endif /* If only one match, just use that. Otherwise, compare each member of the list with the next, finding out where they stop matching. */ if (matches == 1) { match_list[0] = match_list[1]; match_list[1] = (char *)NULL; return 1; } for (i = 1, low = 100000; i < matches; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { memset (&ps1, 0, sizeof (mbstate_t)); memset (&ps2, 0, sizeof (mbstate_t)); } #endif if (_rl_completion_case_fold) { for (si = 0; (c1 = _rl_to_lower(match_list[i][si])) && (c2 = _rl_to_lower(match_list[i + 1][si])); si++) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { v1 = mbrtowc(&wc1, match_list[i]+si, strlen (match_list[i]+si), &ps1); v2 = mbrtowc (&wc2, match_list[i+1]+si, strlen (match_list[i+1]+si), &ps2); if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (c1 != c2) /* do byte comparison */ break; continue; } wc1 = towlower (wc1); wc2 = towlower (wc2); if (wc1 != wc2) break; else if (v1 > 1) si += v1 - 1; } else #endif if (c1 != c2) break; } else { for (si = 0; (c1 = match_list[i][si]) && (c2 = match_list[i + 1][si]); si++) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { mbstate_t ps_back; ps_back = ps1; if (!_rl_compare_chars (match_list[i], si, &ps1, match_list[i+1], si, &ps2)) break; else if ((v = _rl_get_char_len (&match_list[i][si], &ps_back)) > 1) si += v - 1; } else #endif if (c1 != c2) break; } if (low > si) low = si; } /* If there were multiple matches, but none matched up to even the first character, and the user typed something, use that as the value of matches[0]. */ if (low == 0 && text && *text) { match_list[0] = (char *)xmalloc (strlen (text) + 1); strcpy (match_list[0], text); } else { match_list[0] = (char *)xmalloc (low + 1); /* XXX - this might need changes in the presence of multibyte chars */ /* If we are ignoring case, try to preserve the case of the string the user typed in the face of multiple matches differing in case. */ if (_rl_completion_case_fold) { /* We're making an assumption here: IF we're completing filenames AND the application has defined a filename dequoting function AND we found a quote character AND the application has requested filename quoting THEN we assume that TEXT was dequoted before checking against the file system and needs to be dequoted here before we check against the list of matches FI */ dtext = (char *)NULL; if (rl_filename_completion_desired && rl_filename_dequoting_function && rl_completion_found_quote && rl_filename_quoting_desired) { dtext = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); text = dtext; } /* sort the list to get consistent answers. */ qsort (match_list+1, matches, sizeof(char *), (QSFUNC *)_rl_qsort_string_compare); si = strlen (text); lx = (si <= low) ? si : low; /* check shorter of text and matches */ /* Try to preserve the case of what the user typed in the presence of multiple matches: check each match for something that matches what the user typed taking case into account; use it up to common length of matches if one is found. If not, just use first match. */ for (i = 1; i <= matches; i++) if (strncmp (match_list[i], text, lx) == 0) { strncpy (match_list[0], match_list[i], low); break; } /* no casematch, use first entry */ if (i > matches) strncpy (match_list[0], match_list[1], low); FREE (dtext); } else strncpy (match_list[0], match_list[1], low); match_list[0][low] = '\0'; } return matches; } static int postprocess_matches (matchesp, matching_filenames) char ***matchesp; int matching_filenames; { char *t, **matches, **temp_matches; int nmatch, i; matches = *matchesp; if (matches == 0) return 0; /* It seems to me that in all the cases we handle we would like to ignore duplicate possibilities. Scan for the text to insert being identical to the other completions. */ if (rl_ignore_completion_duplicates) { temp_matches = remove_duplicate_matches (matches); xfree (matches); matches = temp_matches; } /* If we are matching filenames, then here is our chance to do clever processing by re-examining the list. Call the ignore function with the array as a parameter. It can munge the array, deleting matches as it desires. */ if (rl_ignore_some_completions_function && matching_filenames) { for (nmatch = 1; matches[nmatch]; nmatch++) ; (void)(*rl_ignore_some_completions_function) (matches); if (matches == 0 || matches[0] == 0) { FREE (matches); *matchesp = (char **)0; return 0; } else { /* If we removed some matches, recompute the common prefix. */ for (i = 1; matches[i]; i++) ; if (i > 1 && i < nmatch) { t = matches[0]; compute_lcd_of_matches (matches, i - 1, t); FREE (t); } } } *matchesp = matches; return (1); } static int complete_get_screenwidth () { int cols; char *envcols; cols = _rl_completion_columns; if (cols >= 0 && cols <= _rl_screenwidth) return cols; envcols = getenv ("COLUMNS"); if (envcols && *envcols) cols = atoi (envcols); if (cols >= 0 && cols <= _rl_screenwidth) return cols; return _rl_screenwidth; } /* A convenience function for displaying a list of strings in columnar format on readline's output stream. MATCHES is the list of strings, in argv format, LEN is the number of strings in MATCHES, and MAX is the length of the longest string in MATCHES. */ void rl_display_match_list (matches, len, max) char **matches; int len, max; { int count, limit, printed_len, lines, cols; int i, j, k, l, common_length, sind; char *temp, *t; /* Find the length of the prefix common to all items: length as displayed characters (common_length) and as a byte index into the matches (sind) */ common_length = sind = 0; if (_rl_completion_prefix_display_length > 0) { t = printable_part (matches[0]); temp = strrchr (t, '/'); common_length = temp ? fnwidth (temp) : fnwidth (t); sind = temp ? strlen (temp) : strlen (t); if (common_length > _rl_completion_prefix_display_length && common_length > ELLIPSIS_LEN) max -= common_length - ELLIPSIS_LEN; else common_length = sind = 0; } /* How many items of MAX length can we fit in the screen window? */ cols = complete_get_screenwidth (); max += 2; limit = cols / max; if (limit != 1 && (limit * max == cols)) limit--; /* If cols == 0, limit will end up -1 */ if (cols < _rl_screenwidth && limit < 0) limit = 1; /* Avoid a possible floating exception. If max > cols, limit will be 0 and a divide-by-zero fault will result. */ if (limit == 0) limit = 1; /* How many iterations of the printing loop? */ count = (len + (limit - 1)) / limit; /* Watch out for special case. If LEN is less than LIMIT, then just do the inner printing loop. 0 < len <= limit implies count = 1. */ /* Sort the items if they are not already sorted. */ if (rl_ignore_completion_duplicates == 0 && rl_sort_completion_matches) qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); rl_crlf (); lines = 0; if (_rl_print_completions_horizontally == 0) { /* Print the sorted items, up-and-down alphabetically, like ls. */ for (i = 1; i <= count; i++) { for (j = 0, l = i; j < limit; j++) { if (l > len || matches[l] == 0) break; else { temp = printable_part (matches[l]); printed_len = print_filename (temp, matches[l], sind); if (j + 1 < limit) for (k = 0; k < max - printed_len; k++) putc (' ', rl_outstream); } l += count; } rl_crlf (); lines++; if (_rl_page_completions && lines >= (_rl_screenheight - 1) && i < count) { lines = _rl_internal_pager (lines); if (lines < 0) return; } } } else { /* Print the sorted items, across alphabetically, like ls -x. */ for (i = 1; matches[i]; i++) { temp = printable_part (matches[i]); printed_len = print_filename (temp, matches[i], sind); /* Have we reached the end of this line? */ if (matches[i+1]) { if (limit == 1 || (i && (limit > 1) && (i % limit) == 0)) { rl_crlf (); lines++; if (_rl_page_completions && lines >= _rl_screenheight - 1) { lines = _rl_internal_pager (lines); if (lines < 0) return; } } else for (k = 0; k < max - printed_len; k++) putc (' ', rl_outstream); } } rl_crlf (); } } /* Display MATCHES, a list of matching filenames in argv format. This handles the simple case -- a single match -- first. If there is more than one match, we compute the number of strings in the list and the length of the longest string, which will be needed by the display function. If the application wants to handle displaying the list of matches itself, it sets RL_COMPLETION_DISPLAY_MATCHES_HOOK to the address of a function, and we just call it. If we're handling the display ourselves, we just call rl_display_match_list. We also check that the list of matches doesn't exceed the user-settable threshold, and ask the user if he wants to see the list if there are more matches than RL_COMPLETION_QUERY_ITEMS. */ static void display_matches (matches) char **matches; { int len, max, i; char *temp; /* Move to the last visible line of a possibly-multiple-line command. */ _rl_move_vert (_rl_vis_botlin); /* Handle simple case first. What if there is only one answer? */ if (matches[1] == 0) { temp = printable_part (matches[0]); rl_crlf (); print_filename (temp, matches[0], 0); rl_crlf (); rl_forced_update_display (); rl_display_fixed = 1; return; } /* There is more than one answer. Find out how many there are, and find the maximum printed length of a single entry. */ for (max = 0, i = 1; matches[i]; i++) { temp = printable_part (matches[i]); len = fnwidth (temp); if (len > max) max = len; } len = i - 1; /* If the caller has defined a display hook, then call that now. */ if (rl_completion_display_matches_hook) { (*rl_completion_display_matches_hook) (matches, len, max); return; } /* If there are many items, then ask the user if she really wants to see them all. */ if (rl_completion_query_items > 0 && len >= rl_completion_query_items) { rl_crlf (); fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len); fflush (rl_outstream); if ((completion_y_or_n = get_y_or_n (0)) == 0) { rl_crlf (); rl_forced_update_display (); rl_display_fixed = 1; return; } } rl_display_match_list (matches, len, max); rl_forced_update_display (); rl_display_fixed = 1; } static char * make_quoted_replacement (match, mtype, qc) char *match; int mtype; char *qc; /* Pointer to quoting character, if any */ { int should_quote, do_replace; char *replacement; /* If we are doing completion on quoted substrings, and any matches contain any of the completer_word_break_characters, then auto- matically prepend the substring with a quote character (just pick the first one from the list of such) if it does not already begin with a quote string. FIXME: Need to remove any such automatically inserted quote character when it no longer is necessary, such as if we change the string we are completing on and the new set of matches don't require a quoted substring. */ replacement = match; should_quote = match && rl_completer_quote_characters && rl_filename_completion_desired && rl_filename_quoting_desired; if (should_quote) should_quote = should_quote && (!qc || !*qc || (rl_completer_quote_characters && strchr (rl_completer_quote_characters, *qc))); if (should_quote) { /* If there is a single match, see if we need to quote it. This also checks whether the common prefix of several matches needs to be quoted. */ should_quote = rl_filename_quote_characters ? (_rl_strpbrk (match, rl_filename_quote_characters) != 0) : 0; do_replace = should_quote ? mtype : NO_MATCH; /* Quote the replacement, since we found an embedded word break character in a potential match. */ if (do_replace != NO_MATCH && rl_filename_quoting_function) replacement = (*rl_filename_quoting_function) (match, do_replace, qc); } return (replacement); } static void insert_match (match, start, mtype, qc) char *match; int start, mtype; char *qc; { char *replacement, *r; char oqc; int end, rlen; oqc = qc ? *qc : '\0'; replacement = make_quoted_replacement (match, mtype, qc); /* Now insert the match. */ if (replacement) { rlen = strlen (replacement); /* Don't double an opening quote character. */ if (qc && *qc && start && rl_line_buffer[start - 1] == *qc && replacement[0] == *qc) start--; /* If make_quoted_replacement changed the quoting character, remove the opening quote and insert the (fully-quoted) replacement. */ else if (qc && (*qc != oqc) && start && rl_line_buffer[start - 1] == oqc && replacement[0] != oqc) start--; end = rl_point - 1; /* Don't double a closing quote character */ if (qc && *qc && end && rl_line_buffer[rl_point] == *qc && replacement[rlen - 1] == *qc) end++; if (_rl_skip_completed_text) { r = replacement; while (start < rl_end && *r && rl_line_buffer[start] == *r) { start++; r++; } if (start <= end || *r) _rl_replace_text (r, start, end); rl_point = start + strlen (r); } else _rl_replace_text (replacement, start, end); if (replacement != match) xfree (replacement); } } /* Append any necessary closing quote and a separator character to the just-inserted match. If the user has specified that directories should be marked by a trailing `/', append one of those instead. The default trailing character is a space. Returns the number of characters appended. If NONTRIVIAL_MATCH is set, we test for a symlink (if the OS has them) and don't add a suffix for a symlink to a directory. A nontrivial match is one that actually adds to the word being completed. The variable rl_completion_mark_symlink_dirs controls this behavior (it's initially set to the what the user has chosen, indicated by the value of _rl_complete_mark_symlink_dirs, but may be modified by an application's completion function). */ static int append_to_match (text, delimiter, quote_char, nontrivial_match) char *text; int delimiter, quote_char, nontrivial_match; { char temp_string[4], *filename, *fn; int temp_string_index, s; struct stat finfo; temp_string_index = 0; if (quote_char && rl_point && rl_completion_suppress_quote == 0 && rl_line_buffer[rl_point - 1] != quote_char) temp_string[temp_string_index++] = quote_char; if (delimiter) temp_string[temp_string_index++] = delimiter; else if (rl_completion_suppress_append == 0 && rl_completion_append_character) temp_string[temp_string_index++] = rl_completion_append_character; temp_string[temp_string_index++] = '\0'; if (rl_filename_completion_desired) { filename = tilde_expand (text); if (rl_filename_stat_hook) { fn = savestring (filename); (*rl_filename_stat_hook) (&fn); xfree (filename); filename = fn; } s = (nontrivial_match && rl_completion_mark_symlink_dirs == 0) ? LSTAT (filename, &finfo) : stat (filename, &finfo); if (s == 0 && S_ISDIR (finfo.st_mode)) { if (_rl_complete_mark_directories /* && rl_completion_suppress_append == 0 */) { /* This is clumsy. Avoid putting in a double slash if point is at the end of the line and the previous character is a slash. */ if (rl_point && rl_line_buffer[rl_point] == '\0' && rl_line_buffer[rl_point - 1] == '/') ; else if (rl_line_buffer[rl_point] != '/') rl_insert_text ("/"); } } #ifdef S_ISLNK /* Don't add anything if the filename is a symlink and resolves to a directory. */ else if (s == 0 && S_ISLNK (finfo.st_mode) && path_isdir (filename)) ; #endif else { if (rl_point == rl_end && temp_string_index) rl_insert_text (temp_string); } xfree (filename); } else { if (rl_point == rl_end && temp_string_index) rl_insert_text (temp_string); } return (temp_string_index); } static void insert_all_matches (matches, point, qc) char **matches; int point; char *qc; { int i; char *rp; rl_begin_undo_group (); /* remove any opening quote character; make_quoted_replacement will add it back. */ if (qc && *qc && point && rl_line_buffer[point - 1] == *qc) point--; rl_delete_text (point, rl_point); rl_point = point; if (matches[1]) { for (i = 1; matches[i]; i++) { rp = make_quoted_replacement (matches[i], SINGLE_MATCH, qc); rl_insert_text (rp); rl_insert_text (" "); if (rp != matches[i]) xfree (rp); } } else { rp = make_quoted_replacement (matches[0], SINGLE_MATCH, qc); rl_insert_text (rp); rl_insert_text (" "); if (rp != matches[0]) xfree (rp); } rl_end_undo_group (); } void _rl_free_match_list (matches) char **matches; { register int i; if (matches == 0) return; for (i = 0; matches[i]; i++) xfree (matches[i]); xfree (matches); } /* Complete the word at or before point. WHAT_TO_DO says what to do with the completion. `?' means list the possible completions. TAB means do standard completion. `*' means insert all of the possible completions. `!' means to do standard completion, and list all possible completions if there is more than one. `@' means to do standard completion, and list all possible completions if there is more than one and partial completion is not possible. */ int rl_complete_internal (what_to_do) int what_to_do; { char **matches; rl_compentry_func_t *our_func; int start, end, delimiter, found_quote, i, nontrivial_lcd; char *text, *saved_line_buffer; char quote_char; #if 1 int tlen, mlen; #endif RL_SETSTATE(RL_STATE_COMPLETING); set_completion_defaults (what_to_do); saved_line_buffer = rl_line_buffer ? savestring (rl_line_buffer) : (char *)NULL; our_func = rl_completion_entry_function ? rl_completion_entry_function : rl_filename_completion_function; /* We now look backwards for the start of a filename/variable word. */ end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; if (rl_point) /* This (possibly) changes rl_point. If it returns a non-zero char, we know we have an open quote. */ quote_char = _rl_find_completion_word (&found_quote, &delimiter); start = rl_point; rl_point = end; text = rl_copy_text (start, end); matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char); /* nontrivial_lcd is set if the common prefix adds something to the word being completed. */ nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; if (what_to_do == '!' || what_to_do == '@') tlen = strlen (text); xfree (text); if (matches == 0) { rl_ding (); FREE (saved_line_buffer); completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_reset_completion_state (); return (0); } /* If we are matching filenames, the attempted completion function will have set rl_filename_completion_desired to a non-zero value. The basic rl_filename_completion_function does this. */ i = rl_filename_completion_desired; if (postprocess_matches (&matches, i) == 0) { rl_ding (); FREE (saved_line_buffer); completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_reset_completion_state (); return (0); } switch (what_to_do) { case TAB: case '!': case '@': /* Insert the first match with proper quoting. */ if (what_to_do == TAB) { if (*matches[0]) insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); } else if (*matches[0] && matches[1] == 0) /* should we perform the check only if there are multiple matches? */ insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); else if (*matches[0]) /* what_to_do != TAB && multiple matches */ { mlen = *matches[0] ? strlen (matches[0]) : 0; if (mlen >= tlen) insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); } /* If there are more matches, ring the bell to indicate. If we are in vi mode, Posix.2 says to not ring the bell. If the `show-all-if-ambiguous' variable is set, display all the matches immediately. Otherwise, if this was the only match, and we are hacking files, check the file to see if it was a directory. If so, and the `mark-directories' variable is set, add a '/' to the name. If not, and we are at the end of the line, then add a space. */ if (matches[1]) { if (what_to_do == '!') { display_matches (matches); break; } else if (what_to_do == '@') { if (nontrivial_lcd == 0) display_matches (matches); break; } else if (rl_editing_mode != vi_mode) rl_ding (); /* There are other matches remaining. */ } else append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd); break; case '*': insert_all_matches (matches, start, "e_char); break; case '?': if (rl_completion_display_matches_hook == 0) { _rl_sigcleanup = _rl_complete_sigcleanup; _rl_sigcleanarg = matches; } display_matches (matches); _rl_sigcleanup = 0; _rl_sigcleanarg = 0; break; default: _rl_ttymsg ("bad value %d for what_to_do in rl_complete", what_to_do); rl_ding (); FREE (saved_line_buffer); RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_free_match_list (matches); _rl_reset_completion_state (); return 1; } _rl_free_match_list (matches); /* Check to see if the line has changed through all of this manipulation. */ if (saved_line_buffer) { completion_changed_buffer = strcmp (rl_line_buffer, saved_line_buffer) != 0; xfree (saved_line_buffer); } RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_reset_completion_state (); return 0; } /***************************************************************/ /* */ /* Application-callable completion match generator functions */ /* */ /***************************************************************/ /* Return an array of (char *) which is a list of completions for TEXT. If there are no completions, return a NULL pointer. 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_FUNCTION is a function of two args, and returns a (char *). The first argument is TEXT. The second is a state argument; it should be zero on the first call, and non-zero on subsequent calls. It returns a NULL pointer to the caller when there are no more matches. */ char ** rl_completion_matches (text, entry_function) const char *text; rl_compentry_func_t *entry_function; { register int i; /* Number of slots in match_list. */ int match_list_size; /* The list of matches. */ char **match_list; /* Number of matches actually found. */ int matches; /* Temporary string binder. */ char *string; matches = 0; match_list_size = 10; match_list = (char **)xmalloc ((match_list_size + 1) * sizeof (char *)); match_list[1] = (char *)NULL; while (string = (*entry_function) (text, matches)) { if (RL_SIG_RECEIVED ()) { /* Start at 1 because we don't set matches[0] in this function. Only free the list members if we're building match list from rl_filename_completion_function, since we know that doesn't free the strings it returns. */ if (entry_function == rl_filename_completion_function) { for (i = 1; match_list[i]; i++) xfree (match_list[i]); } xfree (match_list); match_list = 0; match_list_size = 0; matches = 0; RL_CHECK_SIGNALS (); } if (matches + 1 >= match_list_size) match_list = (char **)xrealloc (match_list, ((match_list_size += 10) + 1) * sizeof (char *)); if (match_list == 0) return (match_list); match_list[++matches] = string; match_list[matches + 1] = (char *)NULL; } /* If there were any matches, then look through them finding out the lowest common denominator. That then becomes match_list[0]. */ if (matches) compute_lcd_of_matches (match_list, matches, text); else /* There were no matches. */ { xfree (match_list); match_list = (char **)NULL; } return (match_list); } /* A completion function for usernames. TEXT contains a partial username preceded by a random character (usually `~'). */ char * rl_username_completion_function (text, state) const char *text; int state; { #if defined (__WIN32__) || defined (__OPENNT) return (char *)NULL; #else /* !__WIN32__ && !__OPENNT) */ static char *username = (char *)NULL; static struct passwd *entry; static int namelen, first_char, first_char_loc; char *value; if (state == 0) { FREE (username); first_char = *text; first_char_loc = first_char == '~'; username = savestring (&text[first_char_loc]); namelen = strlen (username); #if defined (HAVE_GETPWENT) setpwent (); #endif } #if defined (HAVE_GETPWENT) while (entry = getpwent ()) { /* Null usernames should result in all users as possible completions. */ if (namelen == 0 || (STREQN (username, entry->pw_name, namelen))) break; } #endif if (entry == 0) { #if defined (HAVE_GETPWENT) endpwent (); #endif return ((char *)NULL); } else { value = (char *)xmalloc (2 + strlen (entry->pw_name)); *value = *text; strcpy (value + first_char_loc, entry->pw_name); if (first_char == '~') rl_filename_completion_desired = 1; return (value); } #endif /* !__WIN32__ && !__OPENNT */ } /* Return non-zero if CONVFN matches FILENAME up to the length of FILENAME (FILENAME_LEN). If _rl_completion_case_fold is set, compare without regard to the alphabetic case of characters. If _rl_completion_case_map is set, make `-' and `_' equivalent. CONVFN is the possibly-converted directory entry; FILENAME is what the user typed. */ static int complete_fncmp (convfn, convlen, filename, filename_len) const char *convfn; int convlen; const char *filename; int filename_len; { register char *s1, *s2; int d, len; #if defined (HANDLE_MULTIBYTE) size_t v1, v2; mbstate_t ps1, ps2; wchar_t wc1, wc2; #endif #if defined (HANDLE_MULTIBYTE) memset (&ps1, 0, sizeof (mbstate_t)); memset (&ps2, 0, sizeof (mbstate_t)); #endif if (filename_len == 0) return 1; if (convlen < filename_len) return 0; len = filename_len; s1 = (char *)convfn; s2 = (char *)filename; /* Otherwise, if these match up to the length of filename, then it is a match. */ if (_rl_completion_case_fold && _rl_completion_case_map) { /* Case-insensitive comparison treating _ and - as equivalent */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { do { v1 = mbrtowc (&wc1, s1, convlen, &ps1); v2 = mbrtowc (&wc2, s2, filename_len, &ps2); if (v1 == 0 && v2 == 0) return 1; else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (*s1 != *s2) /* do byte comparison */ return 0; else if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) return 0; s1++; s2++; len--; continue; } wc1 = towlower (wc1); wc2 = towlower (wc2); s1 += v1; s2 += v1; len -= v1; if ((wc1 == L'-' || wc1 == L'_') && (wc2 == L'-' || wc2 == L'_')) continue; if (wc1 != wc2) return 0; } while (len != 0); } else #endif { do { d = _rl_to_lower (*s1) - _rl_to_lower (*s2); /* *s1 == [-_] && *s2 == [-_] */ if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) d = 0; if (d != 0) return 0; s1++; s2++; /* already checked convlen >= filename_len */ } while (--len != 0); } return 1; } else if (_rl_completion_case_fold) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { do { v1 = mbrtowc (&wc1, s1, convlen, &ps1); v2 = mbrtowc (&wc2, s2, filename_len, &ps2); if (v1 == 0 && v2 == 0) return 1; else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (*s1 != *s2) /* do byte comparison */ return 0; s1++; s2++; len--; continue; } wc1 = towlower (wc1); wc2 = towlower (wc2); if (wc1 != wc2) return 0; s1 += v1; s2 += v1; len -= v1; } while (len != 0); return 1; } else #endif if ((_rl_to_lower (convfn[0]) == _rl_to_lower (filename[0])) && (convlen >= filename_len) && (_rl_strnicmp (filename, convfn, filename_len) == 0)) return 1; } else { if ((convfn[0] == filename[0]) && (convlen >= filename_len) && (strncmp (filename, convfn, filename_len) == 0)) return 1; } return 0; } /* Okay, now we write the entry_function for filename completion. In the general case. Note that completion in the shell is a little different because of all the pathnames that must be followed when looking up the completion for a command. */ char * rl_filename_completion_function (text, state) const char *text; int state; { static DIR *directory = (DIR *)NULL; static char *filename = (char *)NULL; static char *dirname = (char *)NULL; static char *users_dirname = (char *)NULL; static int filename_len; char *temp, *dentry, *convfn; int dirlen, dentlen, convlen; struct dirent *entry; /* If we don't have any state, then do some initialization. */ if (state == 0) { /* If we were interrupted before closing the directory or reading all of its contents, close it. */ if (directory) { closedir (directory); directory = (DIR *)NULL; } FREE (dirname); FREE (filename); FREE (users_dirname); filename = savestring (text); if (*text == 0) text = "."; dirname = savestring (text); temp = strrchr (dirname, '/'); #if defined (__MSDOS__) /* special hack for //X/... */ if (dirname[0] == '/' && dirname[1] == '/' && ISALPHA ((unsigned char)dirname[2]) && dirname[3] == '/') temp = strrchr (dirname + 3, '/'); #endif if (temp) { strcpy (filename, ++temp); *temp = '\0'; } #if defined (__MSDOS__) /* searches from current directory on the drive */ else if (ISALPHA ((unsigned char)dirname[0]) && dirname[1] == ':') { strcpy (filename, dirname + 2); dirname[2] = '\0'; } #endif else { dirname[0] = '.'; dirname[1] = '\0'; } /* We aren't done yet. We also support the "~user" syntax. */ /* Save the version of the directory that the user typed, dequoting it if necessary. */ if (rl_completion_found_quote && rl_filename_dequoting_function) users_dirname = (*rl_filename_dequoting_function) (dirname, rl_completion_quote_character); else users_dirname = savestring (dirname); if (*dirname == '~') { temp = tilde_expand (dirname); xfree (dirname); dirname = temp; } /* We have saved the possibly-dequoted version of the directory name the user typed. Now transform the directory name we're going to pass to opendir(2). The directory rewrite hook modifies only the directory name; the directory completion hook modifies both the directory name passed to opendir(2) and the version the user typed. Both the directory completion and rewrite hooks should perform any necessary dequoting. The hook functions return 1 if they modify the directory name argument. If either hook returns 0, it should not modify the directory name pointer passed as an argument. */ if (rl_directory_rewrite_hook) (*rl_directory_rewrite_hook) (&dirname); else if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname)) { xfree (users_dirname); users_dirname = savestring (dirname); } else if (rl_completion_found_quote && rl_filename_dequoting_function) { /* delete single and double quotes */ xfree (dirname); dirname = savestring (users_dirname); } directory = opendir (dirname); /* Now dequote a non-null filename. FILENAME will not be NULL, but may be empty. */ if (*filename && rl_completion_found_quote && rl_filename_dequoting_function) { /* delete single and double quotes */ temp = (*rl_filename_dequoting_function) (filename, rl_completion_quote_character); xfree (filename); filename = temp; } filename_len = strlen (filename); rl_filename_completion_desired = 1; } /* At this point we should entertain the possibility of hacking wildcarded filenames, like /usr/man/man/te. If the directory name contains globbing characters, then build an array of directories, and then map over that list while completing. */ /* *** UNIMPLEMENTED *** */ /* Now that we have some state, we can read the directory. */ entry = (struct dirent *)NULL; while (directory && (entry = readdir (directory))) { convfn = dentry = entry->d_name; convlen = dentlen = D_NAMLEN (entry); if (rl_filename_rewrite_hook) { convfn = (*rl_filename_rewrite_hook) (dentry, dentlen); convlen = (convfn == dentry) ? dentlen : strlen (convfn); } /* Special case for no filename. If the user has disabled the `match-hidden-files' variable, skip filenames beginning with `.'. All other entries except "." and ".." match. */ if (filename_len == 0) { if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn)) continue; if (convfn[0] != '.' || (convfn[1] && (convfn[1] != '.' || convfn[2]))) break; } else { if (complete_fncmp (convfn, convlen, filename, filename_len)) break; } } if (entry == 0) { if (directory) { closedir (directory); directory = (DIR *)NULL; } if (dirname) { xfree (dirname); dirname = (char *)NULL; } if (filename) { xfree (filename); filename = (char *)NULL; } if (users_dirname) { xfree (users_dirname); users_dirname = (char *)NULL; } return (char *)NULL; } else { /* dirname && (strcmp (dirname, ".") != 0) */ if (dirname && (dirname[0] != '.' || dirname[1])) { if (rl_complete_with_tilde_expansion && *users_dirname == '~') { dirlen = strlen (dirname); temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry)); strcpy (temp, dirname); /* Canonicalization cuts off any final slash present. We may need to add it back. */ if (dirname[dirlen - 1] != '/') { temp[dirlen++] = '/'; temp[dirlen] = '\0'; } } else { dirlen = strlen (users_dirname); temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry)); strcpy (temp, users_dirname); /* Make sure that temp has a trailing slash here. */ if (users_dirname[dirlen - 1] != '/') temp[dirlen++] = '/'; } strcpy (temp + dirlen, convfn); } else temp = savestring (convfn); if (convfn != dentry) xfree (convfn); return (temp); } } /* An initial implementation of a menu completion function a la tcsh. The first time (if the last readline command was not rl_old_menu_complete), we generate the list of matches. This code is very similar to the code in rl_complete_internal -- there should be a way to combine the two. Then, for each item in the list of matches, we insert the match in an undoable fashion, with the appropriate character appended (this happens on the second and subsequent consecutive calls to rl_old_menu_complete). When we hit the end of the match list, we restore the original unmatched text, ring the bell, and reset the counter to zero. */ int rl_old_menu_complete (count, invoking_key) int count, invoking_key; { rl_compentry_func_t *our_func; int matching_filenames, found_quote; static char *orig_text; static char **matches = (char **)0; static int match_list_index = 0; static int match_list_size = 0; static int orig_start, orig_end; static char quote_char; static int delimiter; /* The first time through, we generate the list of matches and set things up to insert them. */ if (rl_last_func != rl_old_menu_complete) { /* Clean up from previous call, if any. */ FREE (orig_text); if (matches) _rl_free_match_list (matches); match_list_index = match_list_size = 0; matches = (char **)NULL; rl_completion_invoking_key = invoking_key; RL_SETSTATE(RL_STATE_COMPLETING); /* Only the completion entry function can change these. */ set_completion_defaults ('%'); our_func = rl_menu_completion_entry_function; if (our_func == 0) our_func = rl_completion_entry_function ? rl_completion_entry_function : rl_filename_completion_function; /* We now look backwards for the start of a filename/variable word. */ orig_end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; if (rl_point) /* This (possibly) changes rl_point. If it returns a non-zero char, we know we have an open quote. */ quote_char = _rl_find_completion_word (&found_quote, &delimiter); orig_start = rl_point; rl_point = orig_end; orig_text = rl_copy_text (orig_start, orig_end); matches = gen_completion_matches (orig_text, orig_start, orig_end, our_func, found_quote, quote_char); /* If we are matching filenames, the attempted completion function will have set rl_filename_completion_desired to a non-zero value. The basic rl_filename_completion_function does this. */ matching_filenames = rl_filename_completion_desired; if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) { rl_ding (); FREE (matches); matches = (char **)0; FREE (orig_text); orig_text = (char *)0; completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); return (0); } RL_UNSETSTATE(RL_STATE_COMPLETING); for (match_list_size = 0; matches[match_list_size]; match_list_size++) ; /* matches[0] is lcd if match_list_size > 1, but the circular buffer code below should take care of it. */ if (match_list_size > 1 && _rl_complete_show_all) display_matches (matches); } /* Now we have the list of matches. Replace the text between rl_line_buffer[orig_start] and rl_line_buffer[rl_point] with matches[match_list_index], and add any necessary closing char. */ if (matches == 0 || match_list_size == 0) { rl_ding (); FREE (matches); matches = (char **)0; completion_changed_buffer = 0; return (0); } match_list_index += count; if (match_list_index < 0) { while (match_list_index < 0) match_list_index += match_list_size; } else match_list_index %= match_list_size; if (match_list_index == 0 && match_list_size > 1) { rl_ding (); insert_match (orig_text, orig_start, MULT_MATCH, "e_char); } else { insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, "e_char); append_to_match (matches[match_list_index], delimiter, quote_char, strcmp (orig_text, matches[match_list_index])); } completion_changed_buffer = 1; return (0); } int rl_menu_complete (count, ignore) int count, ignore; { rl_compentry_func_t *our_func; int matching_filenames, found_quote; static char *orig_text; static char **matches = (char **)0; static int match_list_index = 0; static int match_list_size = 0; static int nontrivial_lcd = 0; static int full_completion = 0; /* set to 1 if menu completion should reinitialize on next call */ static int orig_start, orig_end; static char quote_char; static int delimiter, cstate; /* The first time through, we generate the list of matches and set things up to insert them. */ if ((rl_last_func != rl_menu_complete && rl_last_func != rl_backward_menu_complete) || full_completion) { /* Clean up from previous call, if any. */ FREE (orig_text); if (matches) _rl_free_match_list (matches); match_list_index = match_list_size = 0; matches = (char **)NULL; full_completion = 0; RL_SETSTATE(RL_STATE_COMPLETING); /* Only the completion entry function can change these. */ set_completion_defaults ('%'); our_func = rl_menu_completion_entry_function; if (our_func == 0) our_func = rl_completion_entry_function ? rl_completion_entry_function : rl_filename_completion_function; /* We now look backwards for the start of a filename/variable word. */ orig_end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; if (rl_point) /* This (possibly) changes rl_point. If it returns a non-zero char, we know we have an open quote. */ quote_char = _rl_find_completion_word (&found_quote, &delimiter); orig_start = rl_point; rl_point = orig_end; orig_text = rl_copy_text (orig_start, orig_end); matches = gen_completion_matches (orig_text, orig_start, orig_end, our_func, found_quote, quote_char); nontrivial_lcd = matches && strcmp (orig_text, matches[0]) != 0; /* If we are matching filenames, the attempted completion function will have set rl_filename_completion_desired to a non-zero value. The basic rl_filename_completion_function does this. */ matching_filenames = rl_filename_completion_desired; if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) { rl_ding (); FREE (matches); matches = (char **)0; FREE (orig_text); orig_text = (char *)0; completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); return (0); } RL_UNSETSTATE(RL_STATE_COMPLETING); for (match_list_size = 0; matches[match_list_size]; match_list_size++) ; if (match_list_size == 0) { rl_ding (); FREE (matches); matches = (char **)0; match_list_index = 0; completion_changed_buffer = 0; return (0); } /* matches[0] is lcd if match_list_size > 1, but the circular buffer code below should take care of it. */ if (*matches[0]) { insert_match (matches[0], orig_start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); orig_end = orig_start + strlen (matches[0]); completion_changed_buffer = STREQ (orig_text, matches[0]) == 0; } if (match_list_size > 1 && _rl_complete_show_all) { display_matches (matches); /* If there are so many matches that the user has to be asked whether or not he wants to see the matches, menu completion is unwieldy. */ if (rl_completion_query_items > 0 && match_list_size >= rl_completion_query_items) { rl_ding (); FREE (matches); matches = (char **)0; full_completion = 1; return (0); } else if (_rl_menu_complete_prefix_first) { rl_ding (); return (0); } } else if (match_list_size <= 1) { append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd); full_completion = 1; return (0); } else if (_rl_menu_complete_prefix_first && match_list_size > 1) { rl_ding (); return (0); } } /* Now we have the list of matches. Replace the text between rl_line_buffer[orig_start] and rl_line_buffer[rl_point] with matches[match_list_index], and add any necessary closing char. */ if (matches == 0 || match_list_size == 0) { rl_ding (); FREE (matches); matches = (char **)0; completion_changed_buffer = 0; return (0); } match_list_index += count; if (match_list_index < 0) { while (match_list_index < 0) match_list_index += match_list_size; } else match_list_index %= match_list_size; if (match_list_index == 0 && match_list_size > 1) { rl_ding (); insert_match (matches[0], orig_start, MULT_MATCH, "e_char); } else { insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, "e_char); append_to_match (matches[match_list_index], delimiter, quote_char, strcmp (orig_text, matches[match_list_index])); } completion_changed_buffer = 1; return (0); } int rl_backward_menu_complete (count, key) int count, key; { /* Positive arguments to backward-menu-complete translate into negative arguments for menu-complete, and vice versa. */ return (rl_menu_complete (-count, key)); } readline-6.3/display.c0000644000043600000240000025146112257341260013572 0ustar chetstaff/* display.c -- readline redisplay facility. */ /* Copyright (C) 1987-2013 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #include "posixstat.h" #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #ifdef __MSDOS__ # include #endif /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Termcap library stuff. */ #include "tcap.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ static void update_line PARAMS((char *, char *, int, int, int, int)); static void space_to_eol PARAMS((int)); static void delete_chars PARAMS((int)); static void insert_some_chars PARAMS((char *, int, int)); static void open_some_spaces PARAMS((int)); static void cr PARAMS((void)); /* State of visible and invisible lines. */ struct line_state { char *line; int *lbreaks; int lbsize; #if defined (HANDLE_MULTIBYTE) int *wrapped_line; int wbsize; #endif }; /* The line display buffers. One is the line currently displayed on the screen. The other is the line about to be displayed. */ static struct line_state line_state_array[2]; static struct line_state *line_state_visible = &line_state_array[0]; static struct line_state *line_state_invisible = &line_state_array[1]; static int line_structures_initialized = 0; /* Backwards-compatible names. */ #define inv_lbreaks (line_state_invisible->lbreaks) #define inv_lbsize (line_state_invisible->lbsize) #define vis_lbreaks (line_state_visible->lbreaks) #define vis_lbsize (line_state_visible->lbsize) #define visible_line (line_state_visible->line) #define invisible_line (line_state_invisible->line) #if defined (HANDLE_MULTIBYTE) static int _rl_col_width PARAMS((const char *, int, int, int)); #else # define _rl_col_width(l, s, e, f) (((e) <= (s)) ? 0 : (e) - (s)) #endif /* Heuristic used to decide whether it is faster to move from CUR to NEW by backing up or outputting a carriage return and moving forward. CUR and NEW are either both buffer positions or absolute screen positions. */ #define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new))) /* _rl_last_c_pos is an absolute cursor position in multibyte locales and a buffer index in others. This macro is used when deciding whether the current cursor position is in the middle of a prompt string containing invisible characters. XXX - might need to take `modmark' into account. */ #define PROMPT_ENDING_INDEX \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? prompt_physical_chars : prompt_last_invisible+1) /* **************************************************************** */ /* */ /* Display stuff */ /* */ /* **************************************************************** */ /* This is the stuff that is hard for me. I never seem to write good display routines in C. Let's see how I do this time. */ /* (PWP) Well... Good for a simple line updater, but totally ignores the problems of input lines longer than the screen width. update_line and the code that calls it makes a multiple line, automatically wrapping line update. Careful attention needs to be paid to the vertical position variables. */ /* Keep two buffers; one which reflects the current contents of the screen, and the other to draw what we think the new contents should be. Then compare the buffers, and make whatever changes to the screen itself that we should. Finally, make the buffer that we just drew into be the one which reflects the current contents of the screen, and place the cursor where it belongs. Commands that want to can fix the display themselves, and then let this function know that the display has been fixed by setting the RL_DISPLAY_FIXED variable. This is good for efficiency. */ /* Application-specific redisplay function. */ rl_voidfunc_t *rl_redisplay_function = rl_redisplay; /* Global variables declared here. */ /* What YOU turn on when you have handled all redisplay yourself. */ int rl_display_fixed = 0; int _rl_suppress_redisplay = 0; int _rl_want_redisplay = 0; /* The stuff that gets printed out before the actual text of the line. This is usually pointing to rl_prompt. */ char *rl_display_prompt = (char *)NULL; /* Pseudo-global variables declared here. */ /* The visible cursor position. If you print some text, adjust this. */ /* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale supporting multibyte characters, and an absolute cursor position when in such a locale. This is an artifact of the donated multibyte support. Care must be taken when modifying its value. */ int _rl_last_c_pos = 0; int _rl_last_v_pos = 0; static int cpos_adjusted; static int cpos_buffer_position; static int displaying_prompt_first_line; static int prompt_multibyte_chars; /* Number of lines currently on screen minus 1. */ int _rl_vis_botlin = 0; /* Variables used only in this file. */ /* The last left edge of text that was displayed. This is used when doing horizontal scrolling. It shifts in thirds of a screenwidth. */ static int last_lmargin; /* A buffer for `modeline' messages. */ static char *msg_buf = 0; static int msg_bufsiz = 0; /* Non-zero forces the redisplay even if we thought it was unnecessary. */ static int forced_display; /* Default and initial buffer size. Can grow. */ static int line_size = 1024; /* Variables to keep track of the expanded prompt string, which may include invisible characters. */ static char *local_prompt, *local_prompt_prefix; static int local_prompt_len; static int prompt_visible_length, prompt_prefix_length; /* The number of invisible characters in the line currently being displayed on the screen. */ static int visible_wrap_offset; /* The number of invisible characters in the prompt string. Static so it can be shared between rl_redisplay and update_line */ static int wrap_offset; /* The index of the last invisible character in the prompt string. */ static int prompt_last_invisible; /* The length (buffer offset) of the first line of the last (possibly multi-line) buffer displayed on the screen. */ static int visible_first_line_len; /* Number of invisible characters on the first physical line of the prompt. Only valid when the number of physical characters in the prompt exceeds (or is equal to) _rl_screenwidth. */ static int prompt_invis_chars_first_line; static int prompt_last_screen_line; static int prompt_physical_chars; /* set to a non-zero value by rl_redisplay if we are marking modified history lines and the current line is so marked. */ static int modmark; /* Variables to save and restore prompt and display information. */ /* These are getting numerous enough that it's time to create a struct. */ static char *saved_local_prompt; static char *saved_local_prefix; static int saved_last_invisible; static int saved_visible_length; static int saved_prefix_length; static int saved_local_length; static int saved_invis_chars_first_line; static int saved_physical_chars; /* Return a character indicating the editing mode, for use in the prompt. */ static int prompt_modechar () { if (rl_editing_mode == emacs_mode) return '@'; else if (_rl_keymap == vi_insertion_keymap) return '+'; /* vi insert mode */ else return ':'; /* vi command mode */ } /* Expand the prompt string S and return the number of visible characters in *LP, if LP is not null. This is currently more-or-less a placeholder for expansion. LIP, if non-null is a place to store the index of the last invisible character in the returned string. NIFLP, if non-zero, is a place to store the number of invisible characters in the first prompt line. The previous are used as byte counts -- indexes into a character buffer. */ /* Current implementation: \001 (^A) start non-visible characters \002 (^B) end non-visible characters all characters except \001 and \002 (following a \001) are copied to the returned string; all characters except those between \001 and \002 are assumed to be `visible'. */ static char * expand_prompt (pmt, lp, lip, niflp, vlp) char *pmt; int *lp, *lip, *niflp, *vlp; { char *r, *ret, *p, *igstart; int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars; /* Short-circuit if we can. */ if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0) { if (pmt == rl_prompt && _rl_show_mode_in_prompt) { l = strlen (pmt); r = (char *)xmalloc (l + 2); r[0] = prompt_modechar (); strcpy (r + 1, pmt); } else r = savestring (pmt); if (lp) *lp = strlen (r); if (lip) *lip = 0; if (niflp) *niflp = 0; if (vlp) *vlp = lp ? *lp : strlen (r); return r; } l = strlen (pmt); r = ret = (char *)xmalloc (l + 2); rl = physchars = 0; /* move up here so mode show can set them */ if (pmt == rl_prompt && _rl_show_mode_in_prompt) { *r++ = prompt_modechar (); rl = physchars = 1; } invfl = 0; /* invisible chars in first line of prompt */ invflset = 0; /* we only want to set invfl once */ igstart = 0; for (ignoring = last = ninvis = 0, p = pmt; p && *p; p++) { /* This code strips the invisible character string markers RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */ if (ignoring == 0 && *p == RL_PROMPT_START_IGNORE) /* XXX - check ignoring? */ { ignoring = 1; igstart = p; continue; } else if (ignoring && *p == RL_PROMPT_END_IGNORE) { ignoring = 0; if (p != (igstart + 1)) last = r - ret - 1; continue; } else { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { pind = p - pmt; ind = _rl_find_next_mbchar (pmt, pind, 1, MB_FIND_NONZERO); l = ind - pind; while (l--) *r++ = *p++; if (!ignoring) { /* rl ends up being assigned to prompt_visible_length, which is the number of characters in the buffer that contribute to characters on the screen, which might not be the same as the number of physical characters on the screen in the presence of multibyte characters */ rl += ind - pind; physchars += _rl_col_width (pmt, pind, ind, 0); } else ninvis += ind - pind; p--; /* compensate for later increment */ } else #endif { *r++ = *p; if (!ignoring) { rl++; /* visible length byte counter */ physchars++; } else ninvis++; /* invisible chars byte counter */ } if (invflset == 0 && rl >= _rl_screenwidth) { invfl = ninvis; invflset = 1; } } } if (rl < _rl_screenwidth) invfl = ninvis; *r = '\0'; if (lp) *lp = rl; if (lip) *lip = last; if (niflp) *niflp = invfl; if (vlp) *vlp = physchars; return ret; } /* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from PMT and return the rest of PMT. */ char * _rl_strip_prompt (pmt) char *pmt; { char *ret; ret = expand_prompt (pmt, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); return ret; } void _rl_reset_prompt () { rl_visible_prompt_length = rl_expand_prompt (rl_prompt); } /* * Expand the prompt string into the various display components, if * necessary. * * local_prompt = expanded last line of string in rl_display_prompt * (portion after the final newline) * local_prompt_prefix = portion before last newline of rl_display_prompt, * expanded via expand_prompt * prompt_visible_length = number of visible characters in local_prompt * prompt_prefix_length = number of visible characters in local_prompt_prefix * * This function is called once per call to readline(). It may also be * called arbitrarily to expand the primary prompt. * * The return value is the number of visible characters on the last line * of the (possibly multi-line) prompt. */ int rl_expand_prompt (prompt) char *prompt; { char *p, *t; int c; /* Clear out any saved values. */ FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = local_prompt_prefix = (char *)0; local_prompt_len = 0; prompt_last_invisible = prompt_invis_chars_first_line = 0; prompt_visible_length = prompt_physical_chars = 0; if (prompt == 0 || *prompt == 0) return (0); p = strrchr (prompt, '\n'); if (!p) { /* The prompt is only one logical line, though it might wrap. */ local_prompt = expand_prompt (prompt, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)0; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; return (prompt_visible_length); } else { /* The prompt spans multiple lines. */ t = ++p; local_prompt = expand_prompt (p, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); c = *t; *t = '\0'; /* The portion of the prompt string up to and including the final newline is now null-terminated. */ local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length, (int *)NULL, (int *)NULL, (int *)NULL); *t = c; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; return (prompt_prefix_length); } } /* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is increased. If the lines have already been allocated, this ensures that they can hold at least MINSIZE characters. */ static void init_line_structures (minsize) int minsize; { register int n; if (invisible_line == 0) /* initialize it */ { if (line_size < minsize) line_size = minsize; visible_line = (char *)xmalloc (line_size); invisible_line = (char *)xmalloc (line_size); } else if (line_size < minsize) /* ensure it can hold MINSIZE chars */ { line_size *= 2; if (line_size < minsize) line_size = minsize; visible_line = (char *)xrealloc (visible_line, line_size); invisible_line = (char *)xrealloc (invisible_line, line_size); } for (n = minsize; n < line_size; n++) { visible_line[n] = 0; invisible_line[n] = 1; } if (vis_lbreaks == 0) { /* should be enough. */ inv_lbsize = vis_lbsize = 256; #if defined (HANDLE_MULTIBYTE) line_state_visible->wbsize = vis_lbsize; line_state_visible->wrapped_line = (int *)xmalloc (line_state_visible->wbsize * sizeof (int)); line_state_invisible->wbsize = inv_lbsize; line_state_invisible->wrapped_line = (int *)xmalloc (line_state_invisible->wbsize * sizeof (int)); #endif inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int)); vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int)); inv_lbreaks[0] = vis_lbreaks[0] = 0; } line_structures_initialized = 1; } /* Basic redisplay algorithm. */ void rl_redisplay () { register int in, out, c, linenum, cursor_linenum; register char *line; int inv_botlin, lb_botlin, lb_linenum, o_cpos; int newlines, lpos, temp, n0, num, prompt_lines_estimate; char *prompt_this_line; #if defined (HANDLE_MULTIBYTE) wchar_t wc; size_t wc_bytes; int wc_width; mbstate_t ps; int _rl_wrapped_multicolumn = 0; #endif if (_rl_echoing_p == 0) return; /* Block keyboard interrupts because this function manipulates global data structures. */ _rl_block_sigint (); RL_SETSTATE (RL_STATE_REDISPLAYING); if (!rl_display_prompt) rl_display_prompt = ""; if (line_structures_initialized == 0) { init_line_structures (0); rl_on_new_line (); } /* Draw the line into the buffer. */ cpos_buffer_position = -1; prompt_multibyte_chars = prompt_visible_length - prompt_physical_chars; line = invisible_line; out = inv_botlin = 0; /* Mark the line as modified or not. We only do this for history lines. */ modmark = 0; if (_rl_mark_modified_lines && current_history () && rl_undo_list) { line[out++] = '*'; line[out] = '\0'; modmark = 1; } /* If someone thought that the redisplay was handled, but the currently visible line has a different modification state than the one about to become visible, then correct the caller's misconception. */ if (visible_line[0] != invisible_line[0]) rl_display_fixed = 0; /* If the prompt to be displayed is the `primary' readline prompt (the one passed to readline()), use the values we have already expanded. If not, use what's already in rl_display_prompt. WRAP_OFFSET is the number of non-visible characters in the prompt string. */ if (rl_display_prompt == rl_prompt || local_prompt) { if (local_prompt_prefix && forced_display) _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix)); if (local_prompt_len > 0) { temp = local_prompt_len + out + 2; if (temp >= line_size) { line_size = (temp + 1024) - (temp % 1024); visible_line = (char *)xrealloc (visible_line, line_size); line = invisible_line = (char *)xrealloc (invisible_line, line_size); } strncpy (line + out, local_prompt, local_prompt_len); out += local_prompt_len; } line[out] = '\0'; wrap_offset = local_prompt_len - prompt_visible_length; } else { int pmtlen; prompt_this_line = strrchr (rl_display_prompt, '\n'); if (!prompt_this_line) prompt_this_line = rl_display_prompt; else { prompt_this_line++; pmtlen = prompt_this_line - rl_display_prompt; /* temp var */ if (forced_display) { _rl_output_some_chars (rl_display_prompt, pmtlen); /* Make sure we are at column zero even after a newline, regardless of the state of terminal output processing. */ if (pmtlen < 2 || prompt_this_line[-2] != '\r') cr (); } } prompt_physical_chars = pmtlen = strlen (prompt_this_line); temp = pmtlen + out + 2; if (temp >= line_size) { line_size = (temp + 1024) - (temp % 1024); visible_line = (char *)xrealloc (visible_line, line_size); line = invisible_line = (char *)xrealloc (invisible_line, line_size); } strncpy (line + out, prompt_this_line, pmtlen); out += pmtlen; line[out] = '\0'; wrap_offset = prompt_invis_chars_first_line = 0; } #define CHECK_INV_LBREAKS() \ do { \ if (newlines >= (inv_lbsize - 2)) \ { \ inv_lbsize *= 2; \ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ } \ } while (0) #if defined (HANDLE_MULTIBYTE) #define CHECK_LPOS() \ do { \ lpos++; \ if (lpos >= _rl_screenwidth) \ { \ if (newlines >= (inv_lbsize - 2)) \ { \ inv_lbsize *= 2; \ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ } \ inv_lbreaks[++newlines] = out; \ if (newlines >= (line_state_invisible->wbsize - 1)) \ { \ line_state_invisible->wbsize *= 2; \ line_state_invisible->wrapped_line = (int *)xrealloc (line_state_invisible->wrapped_line, line_state_invisible->wbsize * sizeof(int)); \ } \ line_state_invisible->wrapped_line[newlines] = _rl_wrapped_multicolumn; \ lpos = 0; \ } \ } while (0) #else #define CHECK_LPOS() \ do { \ lpos++; \ if (lpos >= _rl_screenwidth) \ { \ if (newlines >= (inv_lbsize - 2)) \ { \ inv_lbsize *= 2; \ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ } \ inv_lbreaks[++newlines] = out; \ lpos = 0; \ } \ } while (0) #endif /* inv_lbreaks[i] is where line i starts in the buffer. */ inv_lbreaks[newlines = 0] = 0; lpos = prompt_physical_chars + modmark; #if defined (HANDLE_MULTIBYTE) memset (line_state_invisible->wrapped_line, 0, line_state_invisible->wbsize * sizeof (int)); num = 0; #endif /* prompt_invis_chars_first_line is the number of invisible characters in the first physical line of the prompt. wrap_offset - prompt_invis_chars_first_line is the number of invis chars on the second (or, more generally, last) line. */ /* This is zero-based, used to set the newlines */ prompt_lines_estimate = lpos / _rl_screenwidth; /* what if lpos is already >= _rl_screenwidth before we start drawing the contents of the command line? */ while (lpos >= _rl_screenwidth) { int z; /* fix from Darin Johnson for prompt string with invisible characters that is longer than the screen width. The prompt_invis_chars_first_line variable could be made into an array saying how many invisible characters there are per line, but that's probably too much work for the benefit gained. How many people have prompts that exceed two physical lines? Additional logic fix from Edward Catmur */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) { n0 = num; temp = local_prompt_len; while (num < temp) { z = _rl_col_width (local_prompt, n0, num, 1); if (z > _rl_screenwidth) { num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY); break; } else if (z == _rl_screenwidth) break; num++; } temp = num; } else #endif /* !HANDLE_MULTIBYTE */ temp = ((newlines + 1) * _rl_screenwidth); /* Now account for invisible characters in the current line. */ /* XXX - this assumes that the invisible characters may be split, but only between the first and the last lines. */ temp += (newlines == 0) ? prompt_invis_chars_first_line : ((newlines == prompt_lines_estimate) ? wrap_offset : prompt_invis_chars_first_line); inv_lbreaks[++newlines] = temp; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) lpos -= _rl_col_width (local_prompt, n0, num, 1); else #endif lpos -= _rl_screenwidth; } prompt_last_screen_line = newlines; /* Draw the rest of the line (after the prompt) into invisible_line, keeping track of where the cursor is (cpos_buffer_position), the number of the line containing the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin). It maintains an array of line breaks for display (inv_lbreaks). This handles expanding tabs for display and displaying meta characters. */ lb_linenum = 0; #if defined (HANDLE_MULTIBYTE) in = 0; if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { memset (&ps, 0, sizeof (mbstate_t)); /* XXX - what if wc_bytes ends up <= 0? check for MB_INVALIDCH */ wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps); } else wc_bytes = 1; while (in < rl_end) #else for (in = 0; in < rl_end; in++) #endif { c = (unsigned char)rl_line_buffer[in]; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (MB_INVALIDCH (wc_bytes)) { /* Byte sequence is invalid or shortened. Assume that the first byte represents a character. */ wc_bytes = 1; /* Assume that a character occupies a single column. */ wc_width = 1; memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (wc_bytes)) break; /* Found '\0' */ else { temp = WCWIDTH (wc); wc_width = (temp >= 0) ? temp : 1; } } #endif if (out + 8 >= line_size) /* XXX - 8 for \t */ { line_size *= 2; visible_line = (char *)xrealloc (visible_line, line_size); invisible_line = (char *)xrealloc (invisible_line, line_size); line = invisible_line; } if (in == rl_point) { cpos_buffer_position = out; lb_linenum = newlines; } #if defined (HANDLE_MULTIBYTE) if (META_CHAR (c) && _rl_output_meta_chars == 0) /* XXX - clean up */ #else if (META_CHAR (c)) #endif { if (_rl_output_meta_chars == 0) { sprintf (line + out, "\\%o", c); if (lpos + 4 >= _rl_screenwidth) { temp = _rl_screenwidth - lpos; CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out + temp; lpos = 4 - temp; } else lpos += 4; out += 4; } else { line[out++] = c; CHECK_LPOS(); } } #if defined (DISPLAY_TABS) else if (c == '\t') { register int newout; #if 0 newout = (out | (int)7) + 1; #else newout = out + 8 - lpos % 8; #endif temp = newout - out; if (lpos + temp >= _rl_screenwidth) { register int temp2; temp2 = _rl_screenwidth - lpos; CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out + temp2; lpos = temp - temp2; while (out < newout) line[out++] = ' '; } else { while (out < newout) line[out++] = ' '; lpos += temp; } } #endif else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up) { line[out++] = '\0'; /* XXX - sentinel */ CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out; lpos = 0; } else if (CTRL_CHAR (c) || c == RUBOUT) { line[out++] = '^'; CHECK_LPOS(); line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?'; CHECK_LPOS(); } else { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { register int i; _rl_wrapped_multicolumn = 0; if (_rl_screenwidth < lpos + wc_width) for (i = lpos; i < _rl_screenwidth; i++) { /* The space will be removed in update_line() */ line[out++] = ' '; _rl_wrapped_multicolumn++; CHECK_LPOS(); } if (in == rl_point) { cpos_buffer_position = out; lb_linenum = newlines; } for (i = in; i < in+wc_bytes; i++) line[out++] = rl_line_buffer[i]; for (i = 0; i < wc_width; i++) CHECK_LPOS(); } else { line[out++] = c; CHECK_LPOS(); } #else line[out++] = c; CHECK_LPOS(); #endif } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { in += wc_bytes; /* XXX - what if wc_bytes ends up <= 0? check for MB_INVALIDCH */ wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps); } else in++; #endif } line[out] = '\0'; if (cpos_buffer_position < 0) { cpos_buffer_position = out; lb_linenum = newlines; } inv_botlin = lb_botlin = newlines; CHECK_INV_LBREAKS (); inv_lbreaks[newlines+1] = out; cursor_linenum = lb_linenum; /* CPOS_BUFFER_POSITION == position in buffer where cursor should be placed. CURSOR_LINENUM == line number where the cursor should be placed. */ /* PWP: now is when things get a bit hairy. The visible and invisible line buffers are really multiple lines, which would wrap every (screenwidth - 1) characters. Go through each in turn, finding the changed region and updating it. The line order is top to bottom. */ /* If we can move the cursor up and down, then use multiple lines, otherwise, let long lines display in a single terminal line, and horizontally scroll it. */ displaying_prompt_first_line = 1; if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up) { int nleft, pos, changed_screen_line, tx; if (!rl_display_fixed || forced_display) { forced_display = 0; /* If we have more than a screenful of material to display, then only display a screenful. We should display the last screen, not the first. */ if (out >= _rl_screenchars) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY); else out = _rl_screenchars - 1; } /* The first line is at character position 0 in the buffer. The second and subsequent lines start at inv_lbreaks[N], offset by OFFSET (which has already been calculated above). */ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) #define WRAP_OFFSET(line, offset) ((line == 0) \ ? (offset ? INVIS_FIRST() : 0) \ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) #define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) #define VIS_CHARS(line) (visible_line + vis_lbreaks[line]) #define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line) #define INV_LINE(line) (invisible_line + inv_lbreaks[line]) #define OLD_CPOS_IN_PROMPT() (cpos_adjusted == 0 && \ _rl_last_c_pos != o_cpos && \ _rl_last_c_pos > wrap_offset && \ o_cpos < prompt_last_invisible) /* For each line in the buffer, do the updating display. */ for (linenum = 0; linenum <= inv_botlin; linenum++) { /* This can lead us astray if we execute a program that changes the locale from a non-multibyte to a multibyte one. */ o_cpos = _rl_last_c_pos; cpos_adjusted = 0; update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum, VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin); /* update_line potentially changes _rl_last_c_pos, but doesn't take invisible characters into account, since _rl_last_c_pos is an absolute cursor position in a multibyte locale. See if compensating here is the right thing, or if we have to change update_line itself. There are several cases in which update_line adjusts _rl_last_c_pos itself (so it can pass _rl_move_cursor_relative accurate values); it communicates this back by setting cpos_adjusted. If we assume that _rl_last_c_pos is correct (an absolute cursor position) each time update_line is called, then we can assume in our calculations that o_cpos does not need to be adjusted by wrap_offset. */ if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && OLD_CPOS_IN_PROMPT()) _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) && cpos_adjusted == 0 && _rl_last_c_pos != o_cpos && _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); /* If this is the line with the prompt, we might need to compensate for invisible characters in the new line. Do this only if there is not more than one new line (which implies that we completely overwrite the old visible line) and the new line is shorter than the old. Make sure we are at the end of the new line before clearing. */ if (linenum == 0 && inv_botlin == 0 && _rl_last_c_pos == out && (wrap_offset > visible_wrap_offset) && (_rl_last_c_pos < visible_first_line_len)) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) nleft = _rl_screenwidth - _rl_last_c_pos; else nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos; if (nleft) _rl_clear_to_eol (nleft); } #if 0 /* This segment is intended to handle the case where the prompt has invisible characters on the second line and the new line to be displayed needs to clear the rest of the old characters out (e.g., when printing the i-search prompt). In general, the case of the new line being shorter than the old. Incomplete */ else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && wrap_offset != prompt_invis_chars_first_line && _rl_last_c_pos == out && #endif /* Since the new first line is now visible, save its length. */ if (linenum == 0) visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset; } /* We may have deleted some lines. If so, clear the left over blank ones at the bottom out. */ if (_rl_vis_botlin > inv_botlin) { char *tt; for (; linenum <= _rl_vis_botlin; linenum++) { tt = VIS_CHARS (linenum); _rl_move_vert (linenum); _rl_move_cursor_relative (0, tt); _rl_clear_to_eol ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth); } } _rl_vis_botlin = inv_botlin; /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a different screen line during this redisplay. */ changed_screen_line = _rl_last_v_pos != cursor_linenum; if (changed_screen_line) { _rl_move_vert (cursor_linenum); /* If we moved up to the line with the prompt using _rl_term_up, the physical cursor position on the screen stays the same, but the buffer position needs to be adjusted to account for invisible characters. */ if ((MB_CUR_MAX == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset) _rl_last_c_pos += wrap_offset; } /* We have to reprint the prompt if it contains invisible characters, since it's not generally OK to just reprint the characters from the current cursor position. But we only need to reprint it if the cursor is before the last invisible character in the prompt string. */ nleft = prompt_visible_length + wrap_offset; if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 && #if 0 _rl_last_c_pos <= PROMPT_ENDING_INDEX && local_prompt) #else _rl_last_c_pos < PROMPT_ENDING_INDEX && local_prompt) #endif { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else if (_rl_term_cr) tputs (_rl_term_cr, 1, _rl_output_character_function); #endif if (modmark) _rl_output_some_chars ("*", 1); _rl_output_some_chars (local_prompt, nleft); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft, 1) - wrap_offset + modmark; else _rl_last_c_pos = nleft + modmark; } /* Where on that line? And where does that line start in the buffer? */ pos = inv_lbreaks[cursor_linenum]; /* nleft == number of characters in the line buffer between the start of the line and the desired cursor position. */ nleft = cpos_buffer_position - pos; /* NLEFT is now a number of characters in a buffer. When in a multibyte locale, however, _rl_last_c_pos is an absolute cursor position that doesn't take invisible characters in the prompt into account. We use a fudge factor to compensate. */ /* Since _rl_backspace() doesn't know about invisible characters in the prompt, and there's no good way to tell it, we compensate for those characters here and call _rl_backspace() directly. */ if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos) { /* TX == new physical cursor position in multibyte locale. */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) tx = _rl_col_width (&visible_line[pos], 0, nleft, 1) - visible_wrap_offset; else tx = nleft; if (tx >= 0 && _rl_last_c_pos > tx) { _rl_backspace (_rl_last_c_pos - tx); /* XXX */ _rl_last_c_pos = tx; } } /* We need to note that in a multibyte locale we are dealing with _rl_last_c_pos as an absolute cursor position, but moving to a point specified by a buffer position (NLEFT) that doesn't take invisible characters into account. */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) _rl_move_cursor_relative (nleft, &invisible_line[pos]); else if (nleft != _rl_last_c_pos) _rl_move_cursor_relative (nleft, &invisible_line[pos]); } } else /* Do horizontal scrolling. */ { #define M_OFFSET(margin, offset) ((margin) == 0 ? offset : 0) int lmargin, ndisp, nleft, phys_c_pos, t; /* Always at top line. */ _rl_last_v_pos = 0; /* Compute where in the buffer the displayed line should start. This will be LMARGIN. */ /* The number of characters that will be displayed before the cursor. */ ndisp = cpos_buffer_position - wrap_offset; nleft = prompt_visible_length + wrap_offset; /* Where the new cursor position will be on the screen. This can be longer than SCREENWIDTH; if it is, lmargin will be adjusted. */ phys_c_pos = cpos_buffer_position - (last_lmargin ? last_lmargin : wrap_offset); t = _rl_screenwidth / 3; /* If the number of characters had already exceeded the screenwidth, last_lmargin will be > 0. */ /* If the number of characters to be displayed is more than the screen width, compute the starting offset so that the cursor is about two-thirds of the way across the screen. */ if (phys_c_pos > _rl_screenwidth - 2) { lmargin = cpos_buffer_position - (2 * t); if (lmargin < 0) lmargin = 0; /* If the left margin would be in the middle of a prompt with invisible characters, don't display the prompt at all. */ if (wrap_offset && lmargin > 0 && lmargin < nleft) lmargin = nleft; } else if (ndisp < _rl_screenwidth - 2) /* XXX - was -1 */ lmargin = 0; else if (phys_c_pos < 1) { /* If we are moving back towards the beginning of the line and the last margin is no longer correct, compute a new one. */ lmargin = ((cpos_buffer_position - 1) / t) * t; /* XXX */ if (wrap_offset && lmargin > 0 && lmargin < nleft) lmargin = nleft; } else lmargin = last_lmargin; displaying_prompt_first_line = lmargin < nleft; /* If the first character on the screen isn't the first character in the display line, indicate this with a special character. */ if (lmargin > 0) line[lmargin] = '<'; /* If SCREENWIDTH characters starting at LMARGIN do not encompass the whole line, indicate that with a special character at the right edge of the screen. If LMARGIN is 0, we need to take the wrap offset into account. */ t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth; if (t < out) line[t - 1] = '>'; if (rl_display_fixed == 0 || forced_display || lmargin != last_lmargin) { forced_display = 0; o_cpos = _rl_last_c_pos; cpos_adjusted = 0; update_line (&visible_line[last_lmargin], &invisible_line[lmargin], 0, _rl_screenwidth + visible_wrap_offset, _rl_screenwidth + (lmargin ? 0 : wrap_offset), 0); if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && displaying_prompt_first_line && OLD_CPOS_IN_PROMPT()) _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ /* If the visible new line is shorter than the old, but the number of invisible characters is greater, and we are at the end of the new line, we need to clear to eol. */ t = _rl_last_c_pos - M_OFFSET (lmargin, wrap_offset); if ((M_OFFSET (lmargin, wrap_offset) > visible_wrap_offset) && (_rl_last_c_pos == out) && displaying_prompt_first_line && t < visible_first_line_len) { nleft = _rl_screenwidth - t; _rl_clear_to_eol (nleft); } visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset); if (visible_first_line_len > _rl_screenwidth) visible_first_line_len = _rl_screenwidth; _rl_move_cursor_relative (cpos_buffer_position - lmargin, &invisible_line[lmargin]); last_lmargin = lmargin; } } fflush (rl_outstream); /* Swap visible and non-visible lines. */ { struct line_state *vtemp = line_state_visible; line_state_visible = line_state_invisible; line_state_invisible = vtemp; rl_display_fixed = 0; /* If we are displaying on a single line, and last_lmargin is > 0, we are not displaying any invisible characters, so set visible_wrap_offset to 0. */ if (_rl_horizontal_scroll_mode && last_lmargin) visible_wrap_offset = 0; else visible_wrap_offset = wrap_offset; } RL_UNSETSTATE (RL_STATE_REDISPLAYING); _rl_release_sigint (); } /* PWP: update_line() is based on finding the middle difference of each line on the screen; vis: /old first difference /beginning of line | /old last same /old EOL v v v v old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as new: eddie> Oh, my little buggy says to me, as lurgid as ^ ^ ^ ^ \beginning of line | \new last same \new end of line \new first difference All are character pointers for the sake of speed. Special cases for no differences, as well as for end of line additions must be handled. Could be made even smarter, but this works well enough */ static void update_line (old, new, current_line, omax, nmax, inv_botlin) register char *old, *new; int current_line, omax, nmax, inv_botlin; { register char *ofd, *ols, *oe, *nfd, *nls, *ne; int temp, lendiff, wsatend, od, nd, twidth, o_cpos; int current_invis_chars; int col_lendiff, col_temp; int bytes_to_insert; #if defined (HANDLE_MULTIBYTE) mbstate_t ps_new, ps_old; int new_offset, old_offset; #endif /* If we're at the right edge of a terminal that supports xn, we're ready to wrap around, so do so. This fixes problems with knowing the exact cursor position and cut-and-paste with certain terminal emulators. In this calculation, TEMP is the physical screen position of the cursor. */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) temp = _rl_last_c_pos; else temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode && _rl_last_v_pos == current_line - 1) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { wchar_t wc; mbstate_t ps; int tempwidth, bytes; size_t ret; /* This fixes only double-column characters, but if the wrapped character consumes more than three columns, spaces will be inserted in the string buffer. */ if (current_line < line_state_visible->wbsize && line_state_visible->wrapped_line[current_line] > 0) _rl_clear_to_eol (line_state_visible->wrapped_line[current_line]); memset (&ps, 0, sizeof (mbstate_t)); ret = mbrtowc (&wc, new, MB_CUR_MAX, &ps); if (MB_INVALIDCH (ret)) { tempwidth = 1; ret = 1; } else if (MB_NULLWCH (ret)) tempwidth = 0; else tempwidth = WCWIDTH (wc); if (tempwidth > 0) { int count, i; bytes = ret; for (count = 0; count < bytes; count++) putc (new[count], rl_outstream); _rl_last_c_pos = tempwidth; _rl_last_v_pos++; memset (&ps, 0, sizeof (mbstate_t)); ret = mbrtowc (&wc, old, MB_CUR_MAX, &ps); if (ret != 0 && bytes != 0) { if (MB_INVALIDCH (ret)) ret = 1; memmove (old+bytes, old+ret, strlen (old+ret)); memcpy (old, new, bytes); /* Fix up indices if we copy data from one line to another */ omax += bytes - ret; for (i = current_line+1; i <= inv_botlin+1; i++) vis_lbreaks[i] += bytes - ret; } } else { putc (' ', rl_outstream); _rl_last_c_pos = 1; _rl_last_v_pos++; if (old[0] && new[0]) old[0] = new[0]; } } else #endif { if (new[0]) putc (new[0], rl_outstream); else putc (' ', rl_outstream); _rl_last_c_pos = 1; _rl_last_v_pos++; if (old[0] && new[0]) old[0] = new[0]; } } /* Find first difference. */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { /* See if the old line is a subset of the new line, so that the only change is adding characters. */ temp = (omax < nmax) ? omax : nmax; if (memcmp (old, new, temp) == 0) /* adding at the end */ { new_offset = old_offset = temp; ofd = old + temp; nfd = new + temp; } else { memset (&ps_new, 0, sizeof(mbstate_t)); memset (&ps_old, 0, sizeof(mbstate_t)); if (omax == nmax && STREQN (new, old, omax)) { old_offset = omax; new_offset = nmax; ofd = old + omax; nfd = new + nmax; } else { new_offset = old_offset = 0; for (ofd = old, nfd = new; (ofd - old < omax) && *ofd && _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); ) { old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY); new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY); ofd = old + old_offset; nfd = new + new_offset; } } } } else #endif for (ofd = old, nfd = new; (ofd - old < omax) && *ofd && (*ofd == *nfd); ofd++, nfd++) ; /* Move to the end of the screen line. ND and OD are used to keep track of the distance between ne and new and oe and old, respectively, to move a subtraction out of each loop. */ for (od = ofd - old, oe = ofd; od < omax && *oe; oe++, od++); for (nd = nfd - new, ne = nfd; nd < nmax && *ne; ne++, nd++); /* If no difference, continue to next line. */ if (ofd == oe && nfd == ne) return; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0 && _rl_utf8locale) { wchar_t wc; mbstate_t ps = { 0 }; int t; /* If the first character in the difference is a zero-width character, assume it's a combining character and back one up so the two base characters no longer compare equivalently. */ t = mbrtowc (&wc, ofd, MB_CUR_MAX, &ps); if (t > 0 && UNICODE_COMBINING_CHAR (wc) && WCWIDTH (wc) == 0) { old_offset = _rl_find_prev_mbchar (old, ofd - old, MB_FIND_ANY); new_offset = _rl_find_prev_mbchar (new, nfd - new, MB_FIND_ANY); ofd = old + old_offset; /* equal by definition */ nfd = new + new_offset; } } #endif wsatend = 1; /* flag for trailing whitespace */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY); nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY); while ((ols > ofd) && (nls > nfd)) { memset (&ps_old, 0, sizeof (mbstate_t)); memset (&ps_new, 0, sizeof (mbstate_t)); #if 0 /* On advice from jir@yamato.ibm.com */ _rl_adjust_point (old, ols - old, &ps_old); _rl_adjust_point (new, nls - new, &ps_new); #endif if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0) break; if (*ols == ' ') wsatend = 0; ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY); nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY); } } else { #endif /* HANDLE_MULTIBYTE */ ols = oe - 1; /* find last same */ nls = ne - 1; while ((ols > ofd) && (nls > nfd) && (*ols == *nls)) { if (*ols != ' ') wsatend = 0; ols--; nls--; } #if defined (HANDLE_MULTIBYTE) } #endif if (wsatend) { ols = oe; nls = ne; } #if defined (HANDLE_MULTIBYTE) /* This may not work for stateful encoding, but who cares? To handle stateful encoding properly, we have to scan each string from the beginning and compare. */ else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0) #else else if (*ols != *nls) #endif { if (*ols) /* don't step past the NUL */ { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ols = old + _rl_find_next_mbchar (old, ols - old, 1, MB_FIND_ANY); else ols++; } if (*nls) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) nls = new + _rl_find_next_mbchar (new, nls - new, 1, MB_FIND_ANY); else nls++; } } /* count of invisible characters in the current invisible line. */ current_invis_chars = W_OFFSET (current_line, wrap_offset); if (_rl_last_v_pos != current_line) { _rl_move_vert (current_line); if ((MB_CUR_MAX == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset) _rl_last_c_pos += visible_wrap_offset; } /* If this is the first line and there are invisible characters in the prompt string, and the prompt string has not changed, and the current cursor position is before the last invisible character in the prompt, and the index of the character to move to is past the end of the prompt string, then redraw the entire prompt string. We can only do this reliably if the terminal supports a `cr' capability. This is not an efficiency hack -- there is a problem with redrawing portions of the prompt string if they contain terminal escape sequences (like drawing the `unbold' sequence without a corresponding `bold') that manifests itself on certain terminals. */ lendiff = local_prompt_len; od = ofd - old; /* index of first difference in visible line */ if (current_line == 0 && !_rl_horizontal_scroll_mode && _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 && od >= lendiff && _rl_last_c_pos < PROMPT_ENDING_INDEX) { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif if (modmark) _rl_output_some_chars ("*", 1); _rl_output_some_chars (local_prompt, lendiff); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { /* We take wrap_offset into account here so we can pass correct information to _rl_move_cursor_relative. */ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff, 1) - wrap_offset + modmark; cpos_adjusted = 1; } else _rl_last_c_pos = lendiff + modmark; } o_cpos = _rl_last_c_pos; /* When this function returns, _rl_last_c_pos is correct, and an absolute cursor position in multibyte mode, but a buffer index when not in a multibyte locale. */ _rl_move_cursor_relative (od, old); #if defined (HANDLE_MULTIBYTE) /* We need to indicate that the cursor position is correct in the presence of invisible characters in the prompt string. Let's see if setting this when we make sure we're at the end of the drawn prompt string works. */ if (current_line == 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0 && (_rl_last_c_pos > 0 || o_cpos > 0) && _rl_last_c_pos == prompt_physical_chars) cpos_adjusted = 1; #endif /* if (len (new) > len (old)) lendiff == difference in buffer (bytes) col_lendiff == difference on screen (columns) When not using multibyte characters, these are equal */ lendiff = (nls - nfd) - (ols - ofd); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) col_lendiff = _rl_col_width (new, nfd - new, nls - new, 1) - _rl_col_width (old, ofd - old, ols - old, 1); else col_lendiff = lendiff; /* If we are changing the number of invisible characters in a line, and the spot of first difference is before the end of the invisible chars, lendiff needs to be adjusted. */ if (current_line == 0 && !_rl_horizontal_scroll_mode && current_invis_chars != visible_wrap_offset) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { lendiff += visible_wrap_offset - current_invis_chars; col_lendiff += visible_wrap_offset - current_invis_chars; } else { lendiff += visible_wrap_offset - current_invis_chars; col_lendiff = lendiff; } } /* We use temp as a count of the number of bytes from the first difference to the end of the new line. col_temp is the corresponding number of screen columns. A `dumb' update moves to the spot of first difference and writes TEMP bytes. */ /* Insert (diff (len (old), len (new)) ch. */ temp = ne - nfd; if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) col_temp = _rl_col_width (new, nfd - new, ne - new, 1); else col_temp = temp; /* how many bytes from the new line buffer to write to the display */ bytes_to_insert = nls - nfd; /* col_lendiff > 0 if we are adding characters to the line */ if (col_lendiff > 0) /* XXX - was lendiff */ { /* Non-zero if we're increasing the number of lines. */ int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; /* If col_lendiff is > 0, implying that the new string takes up more screen real estate than the old, but lendiff is < 0, meaning that it takes fewer bytes, we need to just output the characters starting from the first difference. These will overwrite what is on the display, so there's no reason to do a smart update. This can really only happen in a multibyte environment. */ if (lendiff < 0) { _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* XXX - was _rl_col_width (nfd, 0, temp, 1); */ /* If nfd begins before any invisible characters in the prompt, adjust _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to let the caller know. */ if (current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } return; } /* Sometimes it is cheaper to print the characters rather than use the terminal's capabilities. If we're growing the number of lines, make sure we actually cause the new line to wrap around on auto-wrapping terminals. */ else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) { /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and _rl_horizontal_scroll_mode == 1, inserting the characters with _rl_term_IC or _rl_term_ic will screw up the screen because of the invisible characters. We need to just draw them. */ /* The same thing happens if we're trying to draw before the last invisible character in the prompt string or we're increasing the number of invisible characters in the line and we're not drawing the entire prompt string. */ if (*ols && ((_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 && lendiff > prompt_visible_length && current_invis_chars > 0) == 0) && (((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible) && (col_lendiff < prompt_visible_length)) == 0) && (visible_wrap_offset >= current_invis_chars)) { open_some_spaces (col_lendiff); _rl_output_some_chars (nfd, bytes_to_insert); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) _rl_last_c_pos += _rl_col_width (nfd, 0, bytes_to_insert, 1); else _rl_last_c_pos += bytes_to_insert; } else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0) { /* At the end of a line the characters do not have to be "inserted". They can just be placed on the screen. */ _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; return; } else /* just write from first difference to end of new line */ { _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* If nfd begins before the last invisible character in the prompt, adjust _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to let the caller know. */ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } return; } if (bytes_to_insert > lendiff) { /* If nfd begins before the last invisible character in the prompt, adjust _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to let the caller know. */ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } } } else { /* cannot insert chars, write to EOL */ _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* If we're in a multibyte locale and were before the last invisible char in the current line (which implies we just output some invisible characters) we need to adjust _rl_last_c_pos, since it represents a physical character position. */ if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) && current_line == prompt_last_screen_line && wrap_offset && displaying_prompt_first_line && wrap_offset != prompt_invis_chars_first_line && ((nfd-new) < (prompt_last_invisible-(current_line*_rl_screenwidth)))) { _rl_last_c_pos -= wrap_offset - prompt_invis_chars_first_line; cpos_adjusted = 1; } } } else /* Delete characters from line. */ { /* If possible and inexpensive to use terminal deletion, then do so. */ if (_rl_term_dc && (2 * col_temp) >= -col_lendiff) { /* If all we're doing is erasing the invisible characters in the prompt string, don't bother. It screws up the assumptions about what's on the screen. */ if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 && displaying_prompt_first_line && -lendiff == visible_wrap_offset) col_lendiff = 0; /* If we have moved lmargin and we're shrinking the line, we've already moved the cursor to the first character of the new line, so deleting -col_lendiff characters will mess up the cursor position calculation */ if (_rl_horizontal_scroll_mode && displaying_prompt_first_line == 0 && col_lendiff && _rl_last_c_pos < -col_lendiff) col_lendiff = 0; if (col_lendiff) delete_chars (-col_lendiff); /* delete (diff) characters */ /* Copy (new) chars to screen from first diff to last match, overwriting what is there. */ if (bytes_to_insert > 0) { /* If nfd begins at the prompt, or before the invisible characters in the prompt, we need to adjust _rl_last_c_pos in a multibyte locale to account for the wrap offset and set cpos_adjusted accordingly. */ _rl_output_some_chars (nfd, bytes_to_insert); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { _rl_last_c_pos += _rl_col_width (nfd, 0, bytes_to_insert, 1); if (current_line == 0 && wrap_offset && displaying_prompt_first_line && _rl_last_c_pos > wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } } else _rl_last_c_pos += bytes_to_insert; if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) goto clear_rest_of_line; } } /* Otherwise, print over the existing material. */ else { if (temp > 0) { /* If nfd begins at the prompt, or before the invisible characters in the prompt, we need to adjust _rl_last_c_pos in a multibyte locale to account for the wrap offset and set cpos_adjusted accordingly. */ _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* XXX */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (current_line == 0 && wrap_offset && displaying_prompt_first_line && _rl_last_c_pos > wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } } } clear_rest_of_line: lendiff = (oe - old) - (ne - new); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) col_lendiff = _rl_col_width (old, 0, oe - old, 1) - _rl_col_width (new, 0, ne - new, 1); else col_lendiff = lendiff; /* If we've already printed over the entire width of the screen, including the old material, then col_lendiff doesn't matter and space_to_eol will insert too many spaces. XXX - maybe we should adjust col_lendiff based on the difference between _rl_last_c_pos and _rl_screenwidth */ if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth))) { if (_rl_term_autowrap && current_line < inv_botlin) space_to_eol (col_lendiff); else _rl_clear_to_eol (col_lendiff); } } } } /* Tell the update routines that we have moved onto a new (empty) line. */ int rl_on_new_line () { if (visible_line) visible_line[0] = '\0'; _rl_last_c_pos = _rl_last_v_pos = 0; _rl_vis_botlin = last_lmargin = 0; if (vis_lbreaks) vis_lbreaks[0] = vis_lbreaks[1] = 0; visible_wrap_offset = 0; return 0; } /* Tell the update routines that we have moved onto a new line with the prompt already displayed. Code originally from the version of readline distributed with CLISP. rl_expand_prompt must have already been called (explicitly or implicitly). This still doesn't work exactly right. */ int rl_on_new_line_with_prompt () { int prompt_size, i, l, real_screenwidth, newlines; char *prompt_last_line, *lprompt; /* Initialize visible_line and invisible_line to ensure that they can hold the already-displayed prompt. */ prompt_size = strlen (rl_prompt) + 1; init_line_structures (prompt_size); /* Make sure the line structures hold the already-displayed prompt for redisplay. */ lprompt = local_prompt ? local_prompt : rl_prompt; strcpy (visible_line, lprompt); strcpy (invisible_line, lprompt); /* If the prompt contains newlines, take the last tail. */ prompt_last_line = strrchr (rl_prompt, '\n'); if (!prompt_last_line) prompt_last_line = rl_prompt; l = strlen (prompt_last_line); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l, 1); /* XXX */ else _rl_last_c_pos = l; /* Dissect prompt_last_line into screen lines. Note that here we have to use the real screenwidth. Readline's notion of screenwidth might be one less, see terminal.c. */ real_screenwidth = _rl_screenwidth + (_rl_term_autowrap ? 0 : 1); _rl_last_v_pos = l / real_screenwidth; /* If the prompt length is a multiple of real_screenwidth, we don't know whether the cursor is at the end of the last line, or already at the beginning of the next line. Output a newline just to be safe. */ if (l > 0 && (l % real_screenwidth) == 0) _rl_output_some_chars ("\n", 1); last_lmargin = 0; newlines = 0; i = 0; while (i <= l) { _rl_vis_botlin = newlines; vis_lbreaks[newlines++] = i; i += real_screenwidth; } vis_lbreaks[newlines] = l; visible_wrap_offset = 0; rl_display_prompt = rl_prompt; /* XXX - make sure it's set */ return 0; } /* Actually update the display, period. */ int rl_forced_update_display () { register char *temp; if (visible_line) { temp = visible_line; while (*temp) *temp++ = '\0'; } rl_on_new_line (); forced_display++; (*rl_redisplay_function) (); return 0; } /* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices. (Well, when we don't have multibyte characters, _rl_last_c_pos is a buffer index.) DATA is the contents of the screen line of interest; i.e., where the movement is being done. */ void _rl_move_cursor_relative (new, data) int new; const char *data; { register int i; int woff; /* number of invisible chars on current line */ int cpos, dpos; /* current and desired cursor positions */ int adjust; woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); cpos = _rl_last_c_pos; if (cpos == 0 && cpos == new) return; #if defined (HANDLE_MULTIBYTE) /* If we have multibyte characters, NEW is indexed by the buffer point in a multibyte string, but _rl_last_c_pos is the display position. In this case, NEW's display position is not obvious and must be calculated. We need to account for invisible characters in this line, as long as we are past them and they are counted by _rl_col_width. */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { adjust = 1; /* Try to short-circuit common cases and eliminate a bunch of multibyte character function calls. */ /* 1. prompt string */ if (new == local_prompt_len && memcmp (data, local_prompt, new) == 0) { dpos = prompt_physical_chars; cpos_adjusted = 1; adjust = 0; } /* 2. prompt_string + line contents */ else if (new > local_prompt_len && local_prompt && memcmp (data, local_prompt, local_prompt_len) == 0) { dpos = prompt_physical_chars + _rl_col_width (data, local_prompt_len, new, 1); cpos_adjusted = 1; adjust = 0; } else dpos = _rl_col_width (data, 0, new, 1); if (displaying_prompt_first_line == 0) adjust = 0; /* Use NEW when comparing against the last invisible character in the prompt string, since they're both buffer indices and DPOS is a desired display position. */ if (adjust && ((new > prompt_last_invisible) || /* XXX - don't use woff here */ (prompt_physical_chars >= _rl_screenwidth && _rl_last_v_pos == prompt_last_screen_line && wrap_offset >= woff && dpos >= woff && new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))) /* XXX last comparison might need to be >= */ { dpos -= woff; /* Since this will be assigned to _rl_last_c_pos at the end (more precisely, _rl_last_c_pos == dpos when this function returns), let the caller know. */ cpos_adjusted = 1; } } else #endif dpos = new; /* If we don't have to do anything, then return. */ if (cpos == dpos) return; /* It may be faster to output a CR, and then move forwards instead of moving backwards. */ /* i == current physical cursor position. */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) i = _rl_last_c_pos; else #endif i = _rl_last_c_pos - woff; if (dpos == 0 || CR_FASTER (dpos, _rl_last_c_pos) || (_rl_term_autowrap && i == _rl_screenwidth)) { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif /* !__MSDOS__ */ cpos = _rl_last_c_pos = 0; } if (cpos < dpos) { /* Move the cursor forward. We do it by printing the command to move the cursor forward if there is one, else print that portion of the output buffer again. Which is cheaper? */ /* The above comment is left here for posterity. It is faster to print one character (non-control) than to print a control sequence telling the terminal to move forward one character. That kind of control is for people who don't know what the data is underneath the cursor. */ /* However, we need a handle on where the current display position is in the buffer for the immediately preceding comment to be true. In multibyte locales, we don't currently have that info available. Without it, we don't know where the data we have to display begins in the buffer and we have to go back to the beginning of the screen line. In this case, we can use the terminal sequence to move forward if it's available. */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (_rl_term_forward_char) { for (i = cpos; i < dpos; i++) tputs (_rl_term_forward_char, 1, _rl_output_character_function); } else { tputs (_rl_term_cr, 1, _rl_output_character_function); for (i = 0; i < new; i++) putc (data[i], rl_outstream); } } else for (i = cpos; i < new; i++) putc (data[i], rl_outstream); } #if defined (HANDLE_MULTIBYTE) /* NEW points to the buffer point, but _rl_last_c_pos is the display point. The byte length of the string is probably bigger than the column width of the string, which means that if NEW == _rl_last_c_pos, then NEW's display point is less than _rl_last_c_pos. */ #endif else if (cpos > dpos) _rl_backspace (cpos - dpos); _rl_last_c_pos = dpos; } /* PWP: move the cursor up or down. */ void _rl_move_vert (to) int to; { register int delta, i; if (_rl_last_v_pos == to || to > _rl_screenheight) return; if ((delta = to - _rl_last_v_pos) > 0) { for (i = 0; i < delta; i++) putc ('\n', rl_outstream); #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; } else { /* delta < 0 */ #ifdef __DJGPP__ int row, col; fflush (rl_outstream); ScreenGetCursor (&row, &col); ScreenSetCursor (row + delta, col); i = -delta; #else if (_rl_term_up && *_rl_term_up) for (i = 0; i < -delta; i++) tputs (_rl_term_up, 1, _rl_output_character_function); #endif /* !__DJGPP__ */ } _rl_last_v_pos = to; /* Now TO is here */ } /* Physically print C on rl_outstream. This is for functions which know how to optimize the display. Return the number of characters output. */ int rl_show_char (c) int c; { int n = 1; if (META_CHAR (c) && (_rl_output_meta_chars == 0)) { fprintf (rl_outstream, "M-"); n += 2; c = UNMETA (c); } #if defined (DISPLAY_TABS) if ((CTRL_CHAR (c) && c != '\t') || c == RUBOUT) #else if (CTRL_CHAR (c) || c == RUBOUT) #endif /* !DISPLAY_TABS */ { fprintf (rl_outstream, "C-"); n += 2; c = CTRL_CHAR (c) ? UNCTRL (c) : '?'; } putc (c, rl_outstream); fflush (rl_outstream); return n; } int rl_character_len (c, pos) register int c, pos; { unsigned char uc; uc = (unsigned char)c; if (META_CHAR (uc)) return ((_rl_output_meta_chars == 0) ? 4 : 1); if (uc == '\t') { #if defined (DISPLAY_TABS) return (((pos | 7) + 1) - pos); #else return (2); #endif /* !DISPLAY_TABS */ } if (CTRL_CHAR (c) || c == RUBOUT) return (2); return ((ISPRINT (uc)) ? 1 : 2); } /* How to print things in the "echo-area". The prompt is treated as a mini-modeline. */ static int msg_saved_prompt = 0; #if defined (USE_VARARGS) int #if defined (PREFER_STDARG) rl_message (const char *format, ...) #else rl_message (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (HAVE_VSNPRINTF) int bneed; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif if (msg_buf == 0) msg_buf = xmalloc (msg_bufsiz = 128); #if defined (HAVE_VSNPRINTF) bneed = vsnprintf (msg_buf, msg_bufsiz - 1, format, args); if (bneed >= msg_bufsiz - 1) { msg_bufsiz = bneed + 1; msg_buf = xrealloc (msg_buf, msg_bufsiz); va_end (args); #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif vsnprintf (msg_buf, msg_bufsiz - 1, format, args); } #else vsprintf (msg_buf, format, args); msg_buf[msg_bufsiz - 1] = '\0'; /* overflow? */ #endif va_end (args); if (saved_local_prompt == 0) { rl_save_prompt (); msg_saved_prompt = 1; } else if (local_prompt != saved_local_prompt) { FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = (char *)NULL; } rl_display_prompt = msg_buf; local_prompt = expand_prompt (msg_buf, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)NULL; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; (*rl_redisplay_function) (); return 0; } #else /* !USE_VARARGS */ int rl_message (format, arg1, arg2) char *format; { if (msg_buf == 0) msg_buf = xmalloc (msg_bufsiz = 128); sprintf (msg_buf, format, arg1, arg2); msg_buf[msg_bufsiz - 1] = '\0'; /* overflow? */ rl_display_prompt = msg_buf; if (saved_local_prompt == 0) { rl_save_prompt (); msg_saved_prompt = 1; } else if (local_prompt != saved_local_prompt) { FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = (char *)NULL; } local_prompt = expand_prompt (msg_buf, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)NULL; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; (*rl_redisplay_function) (); return 0; } #endif /* !USE_VARARGS */ /* How to clear things from the "echo-area". */ int rl_clear_message () { rl_display_prompt = rl_prompt; if (msg_saved_prompt) { rl_restore_prompt (); msg_saved_prompt = 0; } (*rl_redisplay_function) (); return 0; } int rl_reset_line_state () { rl_on_new_line (); rl_display_prompt = rl_prompt ? rl_prompt : ""; forced_display = 1; return 0; } void rl_save_prompt () { saved_local_prompt = local_prompt; saved_local_prefix = local_prompt_prefix; saved_prefix_length = prompt_prefix_length; saved_local_length = local_prompt_len; saved_last_invisible = prompt_last_invisible; saved_visible_length = prompt_visible_length; saved_invis_chars_first_line = prompt_invis_chars_first_line; saved_physical_chars = prompt_physical_chars; local_prompt = local_prompt_prefix = (char *)0; local_prompt_len = 0; prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0; prompt_invis_chars_first_line = prompt_physical_chars = 0; } void rl_restore_prompt () { FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = saved_local_prompt; local_prompt_prefix = saved_local_prefix; local_prompt_len = saved_local_length; prompt_prefix_length = saved_prefix_length; prompt_last_invisible = saved_last_invisible; prompt_visible_length = saved_visible_length; prompt_invis_chars_first_line = saved_invis_chars_first_line; prompt_physical_chars = saved_physical_chars; /* can test saved_local_prompt to see if prompt info has been saved. */ saved_local_prompt = saved_local_prefix = (char *)0; saved_local_length = 0; saved_last_invisible = saved_visible_length = saved_prefix_length = 0; saved_invis_chars_first_line = saved_physical_chars = 0; } char * _rl_make_prompt_for_search (pchar) int pchar; { int len; char *pmt, *p; rl_save_prompt (); /* We've saved the prompt, and can do anything with the various prompt strings we need before they're restored. We want the unexpanded portion of the prompt string after any final newline. */ p = rl_prompt ? strrchr (rl_prompt, '\n') : 0; if (p == 0) { len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0; pmt = (char *)xmalloc (len + 2); if (len) strcpy (pmt, rl_prompt); pmt[len] = pchar; pmt[len+1] = '\0'; } else { p++; len = strlen (p); pmt = (char *)xmalloc (len + 2); if (len) strcpy (pmt, p); pmt[len] = pchar; pmt[len+1] = '\0'; } /* will be overwritten by expand_prompt, called from rl_message */ prompt_physical_chars = saved_physical_chars + 1; return pmt; } /* Quick redisplay hack when erasing characters at the end of the line. */ void _rl_erase_at_end_of_line (l) int l; { register int i; _rl_backspace (l); for (i = 0; i < l; i++) putc (' ', rl_outstream); _rl_backspace (l); for (i = 0; i < l; i++) visible_line[--_rl_last_c_pos] = '\0'; rl_display_fixed++; } /* Clear to the end of the line. COUNT is the minimum number of character spaces to clear, */ void _rl_clear_to_eol (count) int count; { #ifndef __MSDOS__ if (_rl_term_clreol) tputs (_rl_term_clreol, 1, _rl_output_character_function); else #endif if (count) space_to_eol (count); } /* Clear to the end of the line using spaces. COUNT is the minimum number of character spaces to clear, */ static void space_to_eol (count) int count; { register int i; for (i = 0; i < count; i++) putc (' ', rl_outstream); _rl_last_c_pos += count; } void _rl_clear_screen () { #ifndef __DJGPP__ if (_rl_term_clrpag) tputs (_rl_term_clrpag, 1, _rl_output_character_function); else rl_crlf (); #else ScreenClear (); ScreenSetCursor (0, 0); #endif /* __DJGPP__ */ } /* Insert COUNT characters from STRING to the output stream at column COL. */ static void insert_some_chars (string, count, col) char *string; int count, col; { open_some_spaces (col); _rl_output_some_chars (string, count); } /* Insert COL spaces, keeping the cursor at the same position. We follow the ncurses documentation and use either im/ei with explicit spaces, or IC/ic by itself. We assume there will either be ei or we don't need to use it. */ static void open_some_spaces (col) int col; { #if !defined (__MSDOS__) && !defined (__MINGW32__) char *buffer; register int i; /* If IC is defined, then we do not have to "enter" insert mode. */ if (_rl_term_IC) { buffer = tgoto (_rl_term_IC, 0, col); tputs (buffer, 1, _rl_output_character_function); } else if (_rl_term_im && *_rl_term_im) { tputs (_rl_term_im, 1, _rl_output_character_function); /* just output the desired number of spaces */ for (i = col; i--; ) _rl_output_character_function (' '); /* If there is a string to turn off insert mode, use it now. */ if (_rl_term_ei && *_rl_term_ei) tputs (_rl_term_ei, 1, _rl_output_character_function); /* and move back the right number of spaces */ _rl_backspace (col); } else if (_rl_term_ic && *_rl_term_ic) { /* If there is a special command for inserting characters, then use that first to open up the space. */ for (i = col; i--; ) tputs (_rl_term_ic, 1, _rl_output_character_function); } #endif /* !__MSDOS__ && !__MINGW32__ */ } /* Delete COUNT characters from the display line. */ static void delete_chars (count) int count; { if (count > _rl_screenwidth) /* XXX */ return; #if !defined (__MSDOS__) && !defined (__MINGW32__) if (_rl_term_DC && *_rl_term_DC) { char *buffer; buffer = tgoto (_rl_term_DC, count, count); tputs (buffer, count, _rl_output_character_function); } else { if (_rl_term_dc && *_rl_term_dc) while (count--) tputs (_rl_term_dc, 1, _rl_output_character_function); } #endif /* !__MSDOS__ && !__MINGW32__ */ } void _rl_update_final () { int full_lines; full_lines = 0; /* If the cursor is the only thing on an otherwise-blank last line, compensate so we don't print an extra CRLF. */ if (_rl_vis_botlin && _rl_last_c_pos == 0 && visible_line[vis_lbreaks[_rl_vis_botlin]] == 0) { _rl_vis_botlin--; full_lines = 1; } _rl_move_vert (_rl_vis_botlin); /* If we've wrapped lines, remove the final xterm line-wrap flag. */ if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == _rl_screenwidth)) { char *last_line; last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; cpos_buffer_position = -1; /* don't know where we are in buffer */ _rl_move_cursor_relative (_rl_screenwidth - 1, last_line); /* XXX */ _rl_clear_to_eol (0); putc (last_line[_rl_screenwidth - 1], rl_outstream); } _rl_vis_botlin = 0; rl_crlf (); fflush (rl_outstream); rl_display_fixed++; } /* Move to the start of the current line. */ static void cr () { if (_rl_term_cr) { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; } } /* Redraw the last line of a multi-line prompt that may possibly contain terminal escape sequences. Called with the cursor at column 0 of the line to draw the prompt on. */ static void redraw_prompt (t) char *t; { char *oldp; oldp = rl_display_prompt; rl_save_prompt (); rl_display_prompt = t; local_prompt = expand_prompt (t, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)NULL; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; rl_forced_update_display (); rl_display_prompt = oldp; rl_restore_prompt(); } /* Redisplay the current line after a SIGWINCH is received. */ void _rl_redisplay_after_sigwinch () { char *t; /* Clear the last line (assuming that the screen size change will result in either more or fewer characters on that line only) and put the cursor at column 0. Make sure the right thing happens if we have wrapped to a new screen line. */ if (_rl_term_cr) { _rl_move_vert (_rl_vis_botlin); #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; #if defined (__MSDOS__) space_to_eol (_rl_screenwidth); putc ('\r', rl_outstream); #else if (_rl_term_clreol) tputs (_rl_term_clreol, 1, _rl_output_character_function); else { space_to_eol (_rl_screenwidth); tputs (_rl_term_cr, 1, _rl_output_character_function); } #endif if (_rl_last_v_pos > 0) _rl_move_vert (0); } else rl_crlf (); /* Redraw only the last line of a multi-line prompt. */ t = strrchr (rl_display_prompt, '\n'); if (t) redraw_prompt (++t); else rl_forced_update_display (); } void _rl_clean_up_for_exit () { if (_rl_echoing_p) { _rl_move_vert (_rl_vis_botlin); _rl_vis_botlin = 0; fflush (rl_outstream); rl_restart_output (1, 0); } } void _rl_erase_entire_line () { cr (); _rl_clear_to_eol (0); cr (); fflush (rl_outstream); } /* return the `current display line' of the cursor -- the number of lines to move up to get to the first screen line of the current readline line. */ int _rl_current_display_line () { int ret, nleft; /* Find out whether or not there might be invisible characters in the editing buffer. */ if (rl_display_prompt == rl_prompt) nleft = _rl_last_c_pos - _rl_screenwidth - rl_visible_prompt_length; else nleft = _rl_last_c_pos - _rl_screenwidth; if (nleft > 0) ret = 1 + nleft / _rl_screenwidth; else ret = 0; return ret; } #if defined (HANDLE_MULTIBYTE) /* Calculate the number of screen columns occupied by STR from START to END. In the case of multibyte characters with stateful encoding, we have to scan from the beginning of the string to take the state into account. */ static int _rl_col_width (str, start, end, flags) const char *str; int start, end, flags; { wchar_t wc; mbstate_t ps; int tmp, point, width, max; if (end <= start) return 0; if (MB_CUR_MAX == 1 || rl_byte_oriented) /* this can happen in some cases where it's inconvenient to check */ return (end - start); memset (&ps, 0, sizeof (mbstate_t)); point = 0; max = end; /* Try to short-circuit common cases. The adjustment to remove wrap_offset is done by the caller. */ /* 1. prompt string */ if (flags && start == 0 && end == local_prompt_len && memcmp (str, local_prompt, local_prompt_len) == 0) return (prompt_physical_chars + wrap_offset); /* 2. prompt string + line contents */ else if (flags && start == 0 && local_prompt_len > 0 && end > local_prompt_len && local_prompt && memcmp (str, local_prompt, local_prompt_len) == 0) { tmp = prompt_physical_chars + wrap_offset; /* XXX - try to call ourselves recursively with non-prompt portion */ tmp += _rl_col_width (str, local_prompt_len, end, flags); return (tmp); } while (point < start) { tmp = mbrlen (str + point, max, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* In this case, the bytes are invalid or too short to compose a multibyte character, so we assume that the first byte represents a single character. */ point++; max--; /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tmp)) break; /* Found '\0' */ else { point += tmp; max -= tmp; } } /* If START is not a byte that starts a character, then POINT will be greater than START. In this case, assume that (POINT - START) gives a byte count that is the number of columns of difference. */ width = point - start; while (point < end) { tmp = mbrtowc (&wc, str + point, max, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* In this case, the bytes are invalid or too short to compose a multibyte character, so we assume that the first byte represents a single character. */ point++; max--; /* and assume that the byte occupies a single column. */ width++; /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tmp)) break; /* Found '\0' */ else { point += tmp; max -= tmp; tmp = WCWIDTH(wc); width += (tmp >= 0) ? tmp : 1; } } width += point - end; return width; } #endif /* HANDLE_MULTIBYTE */ readline-6.3/emacs_keymap.c0000664000043600000000000011141311130207320014533 0ustar chetwheel/* emacs_keymap.c -- the keymap for emacs_mode in readline (). */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (BUFSIZ) #include #endif /* !BUFSIZ */ #include "readline.h" /* An array of function pointers, one for each possible key. If the type byte is ISKMAP, then the pointer is the address of a keymap. */ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = { /* Control keys. */ { ISFUNC, rl_set_mark }, /* Control-@ */ { ISFUNC, rl_beg_of_line }, /* Control-a */ { ISFUNC, rl_backward_char }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, rl_delete }, /* Control-d */ { ISFUNC, rl_end_of_line }, /* Control-e */ { ISFUNC, rl_forward_char }, /* Control-f */ { ISFUNC, rl_abort }, /* Control-g */ { ISFUNC, rl_rubout }, /* Control-h */ { ISFUNC, rl_complete }, /* Control-i */ { ISFUNC, rl_newline }, /* Control-j */ { ISFUNC, rl_kill_line }, /* Control-k */ { ISFUNC, rl_clear_screen }, /* Control-l */ { ISFUNC, rl_newline }, /* Control-m */ { ISFUNC, rl_get_next_history }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, rl_get_previous_history }, /* Control-p */ { ISFUNC, rl_quoted_insert }, /* Control-q */ { ISFUNC, rl_reverse_search_history }, /* Control-r */ { ISFUNC, rl_forward_search_history }, /* Control-s */ { ISFUNC, rl_transpose_chars }, /* Control-t */ { ISFUNC, rl_unix_line_discard }, /* Control-u */ { ISFUNC, rl_quoted_insert }, /* Control-v */ { ISFUNC, rl_unix_word_rubout }, /* Control-w */ { ISKMAP, (rl_command_func_t *)emacs_ctlx_keymap }, /* Control-x */ { ISFUNC, rl_yank }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISKMAP, (rl_command_func_t *)emacs_meta_keymap }, /* Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, rl_char_search }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, rl_undo_command }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_insert }, /* SPACE */ { ISFUNC, rl_insert }, /* ! */ { ISFUNC, rl_insert }, /* " */ { ISFUNC, rl_insert }, /* # */ { ISFUNC, rl_insert }, /* $ */ { ISFUNC, rl_insert }, /* % */ { ISFUNC, rl_insert }, /* & */ { ISFUNC, rl_insert }, /* ' */ { ISFUNC, rl_insert }, /* ( */ { ISFUNC, rl_insert }, /* ) */ { ISFUNC, rl_insert }, /* * */ { ISFUNC, rl_insert }, /* + */ { ISFUNC, rl_insert }, /* , */ { ISFUNC, rl_insert }, /* - */ { ISFUNC, rl_insert }, /* . */ { ISFUNC, rl_insert }, /* / */ /* Regular digits. */ { ISFUNC, rl_insert }, /* 0 */ { ISFUNC, rl_insert }, /* 1 */ { ISFUNC, rl_insert }, /* 2 */ { ISFUNC, rl_insert }, /* 3 */ { ISFUNC, rl_insert }, /* 4 */ { ISFUNC, rl_insert }, /* 5 */ { ISFUNC, rl_insert }, /* 6 */ { ISFUNC, rl_insert }, /* 7 */ { ISFUNC, rl_insert }, /* 8 */ { ISFUNC, rl_insert }, /* 9 */ /* A little more punctuation. */ { ISFUNC, rl_insert }, /* : */ { ISFUNC, rl_insert }, /* ; */ { ISFUNC, rl_insert }, /* < */ { ISFUNC, rl_insert }, /* = */ { ISFUNC, rl_insert }, /* > */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_insert }, /* A */ { ISFUNC, rl_insert }, /* B */ { ISFUNC, rl_insert }, /* C */ { ISFUNC, rl_insert }, /* D */ { ISFUNC, rl_insert }, /* E */ { ISFUNC, rl_insert }, /* F */ { ISFUNC, rl_insert }, /* G */ { ISFUNC, rl_insert }, /* H */ { ISFUNC, rl_insert }, /* I */ { ISFUNC, rl_insert }, /* J */ { ISFUNC, rl_insert }, /* K */ { ISFUNC, rl_insert }, /* L */ { ISFUNC, rl_insert }, /* M */ { ISFUNC, rl_insert }, /* N */ { ISFUNC, rl_insert }, /* O */ { ISFUNC, rl_insert }, /* P */ { ISFUNC, rl_insert }, /* Q */ { ISFUNC, rl_insert }, /* R */ { ISFUNC, rl_insert }, /* S */ { ISFUNC, rl_insert }, /* T */ { ISFUNC, rl_insert }, /* U */ { ISFUNC, rl_insert }, /* V */ { ISFUNC, rl_insert }, /* W */ { ISFUNC, rl_insert }, /* X */ { ISFUNC, rl_insert }, /* Y */ { ISFUNC, rl_insert }, /* Z */ /* Some more punctuation. */ { ISFUNC, rl_insert }, /* [ */ { ISFUNC, rl_insert }, /* \ */ { ISFUNC, rl_insert }, /* ] */ { ISFUNC, rl_insert }, /* ^ */ { ISFUNC, rl_insert }, /* _ */ { ISFUNC, rl_insert }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, rl_insert }, /* a */ { ISFUNC, rl_insert }, /* b */ { ISFUNC, rl_insert }, /* c */ { ISFUNC, rl_insert }, /* d */ { ISFUNC, rl_insert }, /* e */ { ISFUNC, rl_insert }, /* f */ { ISFUNC, rl_insert }, /* g */ { ISFUNC, rl_insert }, /* h */ { ISFUNC, rl_insert }, /* i */ { ISFUNC, rl_insert }, /* j */ { ISFUNC, rl_insert }, /* k */ { ISFUNC, rl_insert }, /* l */ { ISFUNC, rl_insert }, /* m */ { ISFUNC, rl_insert }, /* n */ { ISFUNC, rl_insert }, /* o */ { ISFUNC, rl_insert }, /* p */ { ISFUNC, rl_insert }, /* q */ { ISFUNC, rl_insert }, /* r */ { ISFUNC, rl_insert }, /* s */ { ISFUNC, rl_insert }, /* t */ { ISFUNC, rl_insert }, /* u */ { ISFUNC, rl_insert }, /* v */ { ISFUNC, rl_insert }, /* w */ { ISFUNC, rl_insert }, /* x */ { ISFUNC, rl_insert }, /* y */ { ISFUNC, rl_insert }, /* z */ /* Final punctuation. */ { ISFUNC, rl_insert }, /* { */ { ISFUNC, rl_insert }, /* | */ { ISFUNC, rl_insert }, /* } */ { ISFUNC, rl_insert }, /* ~ */ { ISFUNC, rl_rubout }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Pure 8-bit characters (128 - 159). These might be used in some character sets. */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ /* ISO Latin-1 characters (160 - 255) */ { ISFUNC, rl_insert }, /* No-break space */ { ISFUNC, rl_insert }, /* Inverted exclamation mark */ { ISFUNC, rl_insert }, /* Cent sign */ { ISFUNC, rl_insert }, /* Pound sign */ { ISFUNC, rl_insert }, /* Currency sign */ { ISFUNC, rl_insert }, /* Yen sign */ { ISFUNC, rl_insert }, /* Broken bar */ { ISFUNC, rl_insert }, /* Section sign */ { ISFUNC, rl_insert }, /* Diaeresis */ { ISFUNC, rl_insert }, /* Copyright sign */ { ISFUNC, rl_insert }, /* Feminine ordinal indicator */ { ISFUNC, rl_insert }, /* Left pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Not sign */ { ISFUNC, rl_insert }, /* Soft hyphen */ { ISFUNC, rl_insert }, /* Registered sign */ { ISFUNC, rl_insert }, /* Macron */ { ISFUNC, rl_insert }, /* Degree sign */ { ISFUNC, rl_insert }, /* Plus-minus sign */ { ISFUNC, rl_insert }, /* Superscript two */ { ISFUNC, rl_insert }, /* Superscript three */ { ISFUNC, rl_insert }, /* Acute accent */ { ISFUNC, rl_insert }, /* Micro sign */ { ISFUNC, rl_insert }, /* Pilcrow sign */ { ISFUNC, rl_insert }, /* Middle dot */ { ISFUNC, rl_insert }, /* Cedilla */ { ISFUNC, rl_insert }, /* Superscript one */ { ISFUNC, rl_insert }, /* Masculine ordinal indicator */ { ISFUNC, rl_insert }, /* Right pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Vulgar fraction one quarter */ { ISFUNC, rl_insert }, /* Vulgar fraction one half */ { ISFUNC, rl_insert }, /* Vulgar fraction three quarters */ { ISFUNC, rl_insert }, /* Inverted questionk mark */ { ISFUNC, rl_insert }, /* Latin capital letter a with grave */ { ISFUNC, rl_insert }, /* Latin capital letter a with acute */ { ISFUNC, rl_insert }, /* Latin capital letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter a with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter a with ring above */ { ISFUNC, rl_insert }, /* Latin capital letter ae */ { ISFUNC, rl_insert }, /* Latin capital letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin capital letter e with grave */ { ISFUNC, rl_insert }, /* Latin capital letter e with acute */ { ISFUNC, rl_insert }, /* Latin capital letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter i with grave */ { ISFUNC, rl_insert }, /* Latin capital letter i with acute */ { ISFUNC, rl_insert }, /* Latin capital letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin capital letter n with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with grave */ { ISFUNC, rl_insert }, /* Latin capital letter o with acute */ { ISFUNC, rl_insert }, /* Latin capital letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter o with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with diaeresis */ { ISFUNC, rl_insert }, /* Multiplication sign */ { ISFUNC, rl_insert }, /* Latin capital letter o with stroke */ { ISFUNC, rl_insert }, /* Latin capital letter u with grave */ { ISFUNC, rl_insert }, /* Latin capital letter u with acute */ { ISFUNC, rl_insert }, /* Latin capital letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */ { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */ { ISFUNC, rl_insert }, /* Latin small letter a with grave */ { ISFUNC, rl_insert }, /* Latin small letter a with acute */ { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter a with tilde */ { ISFUNC, rl_insert }, /* Latin small letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter a with ring above */ { ISFUNC, rl_insert }, /* Latin small letter ae */ { ISFUNC, rl_insert }, /* Latin small letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin small letter e with grave */ { ISFUNC, rl_insert }, /* Latin small letter e with acute */ { ISFUNC, rl_insert }, /* Latin small letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter i with grave */ { ISFUNC, rl_insert }, /* Latin small letter i with acute */ { ISFUNC, rl_insert }, /* Latin small letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter n with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with grave */ { ISFUNC, rl_insert }, /* Latin small letter o with acute */ { ISFUNC, rl_insert }, /* Latin small letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter o with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with diaeresis */ { ISFUNC, rl_insert }, /* Division sign */ { ISFUNC, rl_insert }, /* Latin small letter o with stroke */ { ISFUNC, rl_insert }, /* Latin small letter u with grave */ { ISFUNC, rl_insert }, /* Latin small letter u with acute */ { ISFUNC, rl_insert }, /* Latin small letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter y with acute */ { ISFUNC, rl_insert }, /* Latin small letter thorn (Icelandic) */ { ISFUNC, rl_insert } /* Latin small letter y with diaeresis */ #endif /* KEYMAP_SIZE > 128 */ }; KEYMAP_ENTRY_ARRAY emacs_meta_keymap = { /* Meta keys. Just like above, but the high bit is set. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-f */ { ISFUNC, rl_abort }, /* Meta-Control-g */ { ISFUNC, rl_backward_kill_word }, /* Meta-Control-h */ { ISFUNC, rl_tab_insert }, /* Meta-Control-i */ { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-l */ { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-q */ { ISFUNC, rl_revert_line }, /* Meta-Control-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-x */ { ISFUNC, rl_yank_nth_arg }, /* Meta-Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-z */ { ISFUNC, rl_complete }, /* Meta-Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-\ */ { ISFUNC, rl_backward_char_search }, /* Meta-Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_set_mark }, /* Meta-SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-" */ { ISFUNC, rl_insert_comment }, /* Meta-# */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-$ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-% */ { ISFUNC, rl_tilde_expand }, /* Meta-& */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-' */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-( */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-) */ { ISFUNC, rl_insert_completions }, /* Meta-* */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-+ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-, */ { ISFUNC, rl_digit_argument }, /* Meta-- */ { ISFUNC, rl_yank_last_arg}, /* Meta-. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-/ */ /* Regular digits. */ { ISFUNC, rl_digit_argument }, /* Meta-0 */ { ISFUNC, rl_digit_argument }, /* Meta-1 */ { ISFUNC, rl_digit_argument }, /* Meta-2 */ { ISFUNC, rl_digit_argument }, /* Meta-3 */ { ISFUNC, rl_digit_argument }, /* Meta-4 */ { ISFUNC, rl_digit_argument }, /* Meta-5 */ { ISFUNC, rl_digit_argument }, /* Meta-6 */ { ISFUNC, rl_digit_argument }, /* Meta-7 */ { ISFUNC, rl_digit_argument }, /* Meta-8 */ { ISFUNC, rl_digit_argument }, /* Meta-9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-: */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-; */ { ISFUNC, rl_beginning_of_history }, /* Meta-< */ { ISFUNC, rl_possible_completions }, /* Meta-= */ { ISFUNC, rl_end_of_history }, /* Meta-> */ { ISFUNC, rl_possible_completions }, /* Meta-? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-@ */ /* Uppercase alphabet. */ { ISFUNC, rl_do_lowercase_version }, /* Meta-A */ { ISFUNC, rl_do_lowercase_version }, /* Meta-B */ { ISFUNC, rl_do_lowercase_version }, /* Meta-C */ { ISFUNC, rl_do_lowercase_version }, /* Meta-D */ { ISFUNC, rl_do_lowercase_version }, /* Meta-E */ { ISFUNC, rl_do_lowercase_version }, /* Meta-F */ { ISFUNC, rl_do_lowercase_version }, /* Meta-G */ { ISFUNC, rl_do_lowercase_version }, /* Meta-H */ { ISFUNC, rl_do_lowercase_version }, /* Meta-I */ { ISFUNC, rl_do_lowercase_version }, /* Meta-J */ { ISFUNC, rl_do_lowercase_version }, /* Meta-K */ { ISFUNC, rl_do_lowercase_version }, /* Meta-L */ { ISFUNC, rl_do_lowercase_version }, /* Meta-M */ { ISFUNC, rl_do_lowercase_version }, /* Meta-N */ { ISFUNC, rl_do_lowercase_version }, /* Meta-O */ { ISFUNC, rl_do_lowercase_version }, /* Meta-P */ { ISFUNC, rl_do_lowercase_version }, /* Meta-Q */ { ISFUNC, rl_do_lowercase_version }, /* Meta-R */ { ISFUNC, rl_do_lowercase_version }, /* Meta-S */ { ISFUNC, rl_do_lowercase_version }, /* Meta-T */ { ISFUNC, rl_do_lowercase_version }, /* Meta-U */ { ISFUNC, rl_do_lowercase_version }, /* Meta-V */ { ISFUNC, rl_do_lowercase_version }, /* Meta-W */ { ISFUNC, rl_do_lowercase_version }, /* Meta-X */ { ISFUNC, rl_do_lowercase_version }, /* Meta-Y */ { ISFUNC, rl_do_lowercase_version }, /* Meta-Z */ /* Some more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-[ */ /* was rl_arrow_keys */ { ISFUNC, rl_delete_horizontal_space }, /* Meta-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-^ */ { ISFUNC, rl_yank_last_arg }, /* Meta-_ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-` */ /* Lowercase alphabet. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-a */ { ISFUNC, rl_backward_word }, /* Meta-b */ { ISFUNC, rl_capitalize_word }, /* Meta-c */ { ISFUNC, rl_kill_word }, /* Meta-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-e */ { ISFUNC, rl_forward_word }, /* Meta-f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-k */ { ISFUNC, rl_downcase_word }, /* Meta-l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-m */ { ISFUNC, rl_noninc_forward_search }, /* Meta-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-o */ /* was rl_arrow_keys */ { ISFUNC, rl_noninc_reverse_search }, /* Meta-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-q */ { ISFUNC, rl_revert_line }, /* Meta-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-s */ { ISFUNC, rl_transpose_words }, /* Meta-t */ { ISFUNC, rl_upcase_word }, /* Meta-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-x */ { ISFUNC, rl_yank_pop }, /* Meta-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-{ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-| */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-} */ { ISFUNC, rl_tilde_expand }, /* Meta-~ */ { ISFUNC, rl_backward_kill_word }, /* Meta-rubout */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; KEYMAP_ENTRY_ARRAY emacs_ctlx_keymap = { /* Control keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-f */ { ISFUNC, rl_abort }, /* Control-g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-q */ { ISFUNC, rl_re_read_init_file }, /* Control-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-t */ { ISFUNC, rl_undo_command }, /* Control-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-w */ { ISFUNC, rl_exchange_point_and_mark }, /* Control-x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* " */ { ISFUNC, (rl_command_func_t *)0x0 }, /* # */ { ISFUNC, (rl_command_func_t *)0x0 }, /* $ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* % */ { ISFUNC, (rl_command_func_t *)0x0 }, /* & */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ' */ { ISFUNC, rl_start_kbd_macro }, /* ( */ { ISFUNC, rl_end_kbd_macro }, /* ) */ { ISFUNC, (rl_command_func_t *)0x0 }, /* * */ { ISFUNC, (rl_command_func_t *)0x0 }, /* + */ { ISFUNC, (rl_command_func_t *)0x0 }, /* , */ { ISFUNC, (rl_command_func_t *)0x0 }, /* - */ { ISFUNC, (rl_command_func_t *)0x0 }, /* . */ { ISFUNC, (rl_command_func_t *)0x0 }, /* / */ /* Regular digits. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 0 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 1 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 2 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 3 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 4 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 5 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 6 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 7 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 8 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* : */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ; */ { ISFUNC, (rl_command_func_t *)0x0 }, /* < */ { ISFUNC, (rl_command_func_t *)0x0 }, /* = */ { ISFUNC, (rl_command_func_t *)0x0 }, /* > */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_do_lowercase_version }, /* A */ { ISFUNC, rl_do_lowercase_version }, /* B */ { ISFUNC, rl_do_lowercase_version }, /* C */ { ISFUNC, rl_do_lowercase_version }, /* D */ { ISFUNC, rl_do_lowercase_version }, /* E */ { ISFUNC, rl_do_lowercase_version }, /* F */ { ISFUNC, rl_do_lowercase_version }, /* G */ { ISFUNC, rl_do_lowercase_version }, /* H */ { ISFUNC, rl_do_lowercase_version }, /* I */ { ISFUNC, rl_do_lowercase_version }, /* J */ { ISFUNC, rl_do_lowercase_version }, /* K */ { ISFUNC, rl_do_lowercase_version }, /* L */ { ISFUNC, rl_do_lowercase_version }, /* M */ { ISFUNC, rl_do_lowercase_version }, /* N */ { ISFUNC, rl_do_lowercase_version }, /* O */ { ISFUNC, rl_do_lowercase_version }, /* P */ { ISFUNC, rl_do_lowercase_version }, /* Q */ { ISFUNC, rl_do_lowercase_version }, /* R */ { ISFUNC, rl_do_lowercase_version }, /* S */ { ISFUNC, rl_do_lowercase_version }, /* T */ { ISFUNC, rl_do_lowercase_version }, /* U */ { ISFUNC, rl_do_lowercase_version }, /* V */ { ISFUNC, rl_do_lowercase_version }, /* W */ { ISFUNC, rl_do_lowercase_version }, /* X */ { ISFUNC, rl_do_lowercase_version }, /* Y */ { ISFUNC, rl_do_lowercase_version }, /* Z */ /* Some more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* [ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* \ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* _ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* d */ { ISFUNC, rl_call_last_kbd_macro }, /* e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* q */ { ISFUNC, (rl_command_func_t *)0x0 }, /* r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* { */ { ISFUNC, (rl_command_func_t *)0x0 }, /* | */ { ISFUNC, (rl_command_func_t *)0x0 }, /* } */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ~ */ { ISFUNC, rl_backward_kill_line }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; readline-6.3/funmap.c0000664000043600000000000002222211674503605013404 0ustar chetwheel/* funmap.c -- attach names to functions. */ /* Copyright (C) 1987-2010 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if !defined (BUFSIZ) #include #endif /* BUFSIZ */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "rlconf.h" #include "readline.h" #include "xmalloc.h" #ifdef __STDC__ typedef int QSFUNC (const void *, const void *); #else typedef int QSFUNC (); #endif extern int _rl_qsort_string_compare PARAMS((char **, char **)); FUNMAP **funmap; static int funmap_size; static int funmap_entry; /* After initializing the function map, this is the index of the first program specific function. */ int funmap_program_specific_entry_start; static const FUNMAP default_funmap[] = { { "abort", rl_abort }, { "accept-line", rl_newline }, { "arrow-key-prefix", rl_arrow_keys }, { "backward-byte", rl_backward_byte }, { "backward-char", rl_backward_char }, { "backward-delete-char", rl_rubout }, { "backward-kill-line", rl_backward_kill_line }, { "backward-kill-word", rl_backward_kill_word }, { "backward-word", rl_backward_word }, { "beginning-of-history", rl_beginning_of_history }, { "beginning-of-line", rl_beg_of_line }, { "call-last-kbd-macro", rl_call_last_kbd_macro }, { "capitalize-word", rl_capitalize_word }, { "character-search", rl_char_search }, { "character-search-backward", rl_backward_char_search }, { "clear-screen", rl_clear_screen }, { "complete", rl_complete }, { "copy-backward-word", rl_copy_backward_word }, { "copy-forward-word", rl_copy_forward_word }, { "copy-region-as-kill", rl_copy_region_to_kill }, { "delete-char", rl_delete }, { "delete-char-or-list", rl_delete_or_show_completions }, { "delete-horizontal-space", rl_delete_horizontal_space }, { "digit-argument", rl_digit_argument }, { "do-lowercase-version", rl_do_lowercase_version }, { "downcase-word", rl_downcase_word }, { "dump-functions", rl_dump_functions }, { "dump-macros", rl_dump_macros }, { "dump-variables", rl_dump_variables }, { "emacs-editing-mode", rl_emacs_editing_mode }, { "end-kbd-macro", rl_end_kbd_macro }, { "end-of-history", rl_end_of_history }, { "end-of-line", rl_end_of_line }, { "exchange-point-and-mark", rl_exchange_point_and_mark }, { "forward-backward-delete-char", rl_rubout_or_delete }, { "forward-byte", rl_forward_byte }, { "forward-char", rl_forward_char }, { "forward-search-history", rl_forward_search_history }, { "forward-word", rl_forward_word }, { "history-search-backward", rl_history_search_backward }, { "history-search-forward", rl_history_search_forward }, { "history-substring-search-backward", rl_history_substr_search_backward }, { "history-substring-search-forward", rl_history_substr_search_forward }, { "insert-comment", rl_insert_comment }, { "insert-completions", rl_insert_completions }, { "kill-whole-line", rl_kill_full_line }, { "kill-line", rl_kill_line }, { "kill-region", rl_kill_region }, { "kill-word", rl_kill_word }, { "menu-complete", rl_menu_complete }, { "menu-complete-backward", rl_backward_menu_complete }, { "next-history", rl_get_next_history }, { "non-incremental-forward-search-history", rl_noninc_forward_search }, { "non-incremental-reverse-search-history", rl_noninc_reverse_search }, { "non-incremental-forward-search-history-again", rl_noninc_forward_search_again }, { "non-incremental-reverse-search-history-again", rl_noninc_reverse_search_again }, { "old-menu-complete", rl_old_menu_complete }, { "overwrite-mode", rl_overwrite_mode }, #ifdef __CYGWIN__ { "paste-from-clipboard", rl_paste_from_clipboard }, #endif { "possible-completions", rl_possible_completions }, { "previous-history", rl_get_previous_history }, { "print-last-kbd-macro", rl_print_last_kbd_macro }, { "quoted-insert", rl_quoted_insert }, { "re-read-init-file", rl_re_read_init_file }, { "redraw-current-line", rl_refresh_line}, { "reverse-search-history", rl_reverse_search_history }, { "revert-line", rl_revert_line }, { "self-insert", rl_insert }, { "set-mark", rl_set_mark }, { "skip-csi-sequence", rl_skip_csi_sequence }, { "start-kbd-macro", rl_start_kbd_macro }, { "tab-insert", rl_tab_insert }, { "tilde-expand", rl_tilde_expand }, { "transpose-chars", rl_transpose_chars }, { "transpose-words", rl_transpose_words }, { "tty-status", rl_tty_status }, { "undo", rl_undo_command }, { "universal-argument", rl_universal_argument }, { "unix-filename-rubout", rl_unix_filename_rubout }, { "unix-line-discard", rl_unix_line_discard }, { "unix-word-rubout", rl_unix_word_rubout }, { "upcase-word", rl_upcase_word }, { "yank", rl_yank }, { "yank-last-arg", rl_yank_last_arg }, { "yank-nth-arg", rl_yank_nth_arg }, { "yank-pop", rl_yank_pop }, #if defined (VI_MODE) { "vi-append-eol", rl_vi_append_eol }, { "vi-append-mode", rl_vi_append_mode }, { "vi-arg-digit", rl_vi_arg_digit }, { "vi-back-to-indent", rl_vi_back_to_indent }, { "vi-backward-bigword", rl_vi_bWord }, { "vi-backward-word", rl_vi_bword }, { "vi-bWord", rl_vi_bWord }, { "vi-bword", rl_vi_bword }, { "vi-change-case", rl_vi_change_case }, { "vi-change-char", rl_vi_change_char }, { "vi-change-to", rl_vi_change_to }, { "vi-char-search", rl_vi_char_search }, { "vi-column", rl_vi_column }, { "vi-complete", rl_vi_complete }, { "vi-delete", rl_vi_delete }, { "vi-delete-to", rl_vi_delete_to }, { "vi-eWord", rl_vi_eWord }, { "vi-editing-mode", rl_vi_editing_mode }, { "vi-end-bigword", rl_vi_eWord }, { "vi-end-word", rl_vi_end_word }, { "vi-eof-maybe", rl_vi_eof_maybe }, { "vi-eword", rl_vi_eword }, { "vi-fWord", rl_vi_fWord }, { "vi-fetch-history", rl_vi_fetch_history }, { "vi-first-print", rl_vi_first_print }, { "vi-forward-bigword", rl_vi_fWord }, { "vi-forward-word", rl_vi_fword }, { "vi-fword", rl_vi_fword }, { "vi-goto-mark", rl_vi_goto_mark }, { "vi-insert-beg", rl_vi_insert_beg }, { "vi-insertion-mode", rl_vi_insertion_mode }, { "vi-match", rl_vi_match }, { "vi-movement-mode", rl_vi_movement_mode }, { "vi-next-word", rl_vi_next_word }, { "vi-overstrike", rl_vi_overstrike }, { "vi-overstrike-delete", rl_vi_overstrike_delete }, { "vi-prev-word", rl_vi_prev_word }, { "vi-put", rl_vi_put }, { "vi-redo", rl_vi_redo }, { "vi-replace", rl_vi_replace }, { "vi-rubout", rl_vi_rubout }, { "vi-search", rl_vi_search }, { "vi-search-again", rl_vi_search_again }, { "vi-set-mark", rl_vi_set_mark }, { "vi-subst", rl_vi_subst }, { "vi-tilde-expand", rl_vi_tilde_expand }, { "vi-yank-arg", rl_vi_yank_arg }, { "vi-yank-to", rl_vi_yank_to }, #endif /* VI_MODE */ {(char *)NULL, (rl_command_func_t *)NULL } }; int rl_add_funmap_entry (name, function) const char *name; rl_command_func_t *function; { if (funmap_entry + 2 >= funmap_size) { funmap_size += 64; funmap = (FUNMAP **)xrealloc (funmap, funmap_size * sizeof (FUNMAP *)); } funmap[funmap_entry] = (FUNMAP *)xmalloc (sizeof (FUNMAP)); funmap[funmap_entry]->name = name; funmap[funmap_entry]->function = function; funmap[++funmap_entry] = (FUNMAP *)NULL; return funmap_entry; } static int funmap_initialized; /* Make the funmap contain all of the default entries. */ void rl_initialize_funmap () { register int i; if (funmap_initialized) return; for (i = 0; default_funmap[i].name; i++) rl_add_funmap_entry (default_funmap[i].name, default_funmap[i].function); funmap_initialized = 1; funmap_program_specific_entry_start = i; } /* Produce a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free () the array when you done, but not the pointers. */ const char ** rl_funmap_names () { const char **result; int result_size, result_index; /* Make sure that the function map has been initialized. */ rl_initialize_funmap (); for (result_index = result_size = 0, result = (const char **)NULL; funmap[result_index]; result_index++) { if (result_index + 2 > result_size) { result_size += 20; result = (const char **)xrealloc (result, result_size * sizeof (char *)); } result[result_index] = funmap[result_index]->name; result[result_index + 1] = (char *)NULL; } qsort (result, result_index, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); return (result); } readline-6.3/input.c0000644000043600000240000003337212264051354013263 0ustar chetstaff/* input.c -- character input functions for readline. */ /* Copyright (C) 1994-2013 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include "posixselect.h" #if defined (FIONREAD_IN_SYS_IOCTL) # include #endif #include #include #if !defined (errno) extern int errno; #endif /* !errno */ /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Some standard library routines. */ #include "readline.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" /* What kind of non-blocking I/O do we have? */ #if !defined (O_NDELAY) && defined (O_NONBLOCK) # define O_NDELAY O_NONBLOCK /* Posix style */ #endif /* Non-null means it is a pointer to a function to run while waiting for character input. */ rl_hook_func_t *rl_event_hook = (rl_hook_func_t *)NULL; /* A function to call if a read(2) is interrupted by a signal. */ rl_hook_func_t *rl_signal_event_hook = (rl_hook_func_t *)NULL; /* A function to replace _rl_input_available for applications using the callback interface. */ rl_hook_func_t *rl_input_available_hook = (rl_hook_func_t *)NULL; rl_getc_func_t *rl_getc_function = rl_getc; static int _keyboard_input_timeout = 100000; /* 0.1 seconds; it's in usec */ static int ibuffer_space PARAMS((void)); static int rl_get_char PARAMS((int *)); static int rl_gather_tyi PARAMS((void)); /* **************************************************************** */ /* */ /* Character Input Buffering */ /* */ /* **************************************************************** */ static int pop_index, push_index; static unsigned char ibuffer[512]; static int ibuffer_len = sizeof (ibuffer) - 1; #define any_typein (push_index != pop_index) int _rl_any_typein () { return any_typein; } int _rl_pushed_input_available () { return (push_index != pop_index); } /* Return the amount of space available in the buffer for stuffing characters. */ static int ibuffer_space () { if (pop_index > push_index) return (pop_index - push_index - 1); else return (ibuffer_len - (push_index - pop_index)); } /* Get a key from the buffer of characters to be read. Return the key in KEY. Result is non-zero if there was a key, or 0 if there wasn't. */ static int rl_get_char (key) int *key; { if (push_index == pop_index) return (0); *key = ibuffer[pop_index++]; #if 0 if (pop_index >= ibuffer_len) #else if (pop_index > ibuffer_len) #endif pop_index = 0; return (1); } /* Stuff KEY into the *front* of the input buffer. Returns non-zero if successful, zero if there is no space left in the buffer. */ int _rl_unget_char (key) int key; { if (ibuffer_space ()) { pop_index--; if (pop_index < 0) pop_index = ibuffer_len; ibuffer[pop_index] = key; return (1); } return (0); } /* If a character is available to be read, then read it and stuff it into IBUFFER. Otherwise, just return. Returns number of characters read (0 if none available) and -1 on error (EIO). */ static int rl_gather_tyi () { int tty; register int tem, result; int chars_avail, k; char input; #if defined(HAVE_SELECT) fd_set readfds, exceptfds; struct timeval timeout; #endif chars_avail = 0; tty = fileno (rl_instream); #if defined (HAVE_SELECT) FD_ZERO (&readfds); FD_ZERO (&exceptfds); FD_SET (tty, &readfds); FD_SET (tty, &exceptfds); USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout); result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout); if (result <= 0) return 0; /* Nothing to read. */ #endif result = -1; #if defined (FIONREAD) errno = 0; result = ioctl (tty, FIONREAD, &chars_avail); if (result == -1 && errno == EIO) return -1; #endif #if defined (O_NDELAY) if (result == -1) { tem = fcntl (tty, F_GETFL, 0); fcntl (tty, F_SETFL, (tem | O_NDELAY)); chars_avail = read (tty, &input, 1); fcntl (tty, F_SETFL, tem); if (chars_avail == -1 && errno == EAGAIN) return 0; if (chars_avail == 0) /* EOF */ { rl_stuff_char (EOF); return (0); } } #endif /* O_NDELAY */ #if defined (__MINGW32__) /* Use getch/_kbhit to check for available console input, in the same way that we read it normally. */ chars_avail = isatty (tty) ? _kbhit () : 0; result = 0; #endif /* If there's nothing available, don't waste time trying to read something. */ if (chars_avail <= 0) return 0; tem = ibuffer_space (); if (chars_avail > tem) chars_avail = tem; /* One cannot read all of the available input. I can only read a single character at a time, or else programs which require input can be thwarted. If the buffer is larger than one character, I lose. Damn! */ if (tem < ibuffer_len) chars_avail = 0; if (result != -1) { while (chars_avail--) { RL_CHECK_SIGNALS (); k = (*rl_getc_function) (rl_instream); if (rl_stuff_char (k) == 0) break; /* some problem; no more room */ if (k == NEWLINE || k == RETURN) break; } } else { if (chars_avail) rl_stuff_char (input); } return 1; } int rl_set_keyboard_input_timeout (u) int u; { int o; o = _keyboard_input_timeout; if (u >= 0) _keyboard_input_timeout = u; return (o); } /* Is there input available to be read on the readline input file descriptor? Only works if the system has select(2) or FIONREAD. Uses the value of _keyboard_input_timeout as the timeout; if another readline function wants to specify a timeout and not leave it up to the user, it should use _rl_input_queued(timeout_value_in_microseconds) instead. */ int _rl_input_available () { #if defined(HAVE_SELECT) fd_set readfds, exceptfds; struct timeval timeout; #endif #if !defined (HAVE_SELECT) && defined(FIONREAD) int chars_avail; #endif int tty; if (rl_input_available_hook) return (*rl_input_available_hook) (); tty = fileno (rl_instream); #if defined (HAVE_SELECT) FD_ZERO (&readfds); FD_ZERO (&exceptfds); FD_SET (tty, &readfds); FD_SET (tty, &exceptfds); timeout.tv_sec = 0; timeout.tv_usec = _keyboard_input_timeout; return (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) > 0); #else #if defined (FIONREAD) if (ioctl (tty, FIONREAD, &chars_avail) == 0) return (chars_avail); #endif #endif #if defined (__MINGW32__) if (isatty (tty)) return (_kbhit ()); #endif return 0; } int _rl_input_queued (t) int t; { int old_timeout, r; old_timeout = rl_set_keyboard_input_timeout (t); r = _rl_input_available (); rl_set_keyboard_input_timeout (old_timeout); return r; } void _rl_insert_typein (c) int c; { int key, t, i; char *string; i = key = 0; string = (char *)xmalloc (ibuffer_len + 1); string[i++] = (char) c; while ((t = rl_get_char (&key)) && _rl_keymap[key].type == ISFUNC && _rl_keymap[key].function == rl_insert) string[i++] = key; if (t) _rl_unget_char (key); string[i] = '\0'; rl_insert_text (string); xfree (string); } /* Add KEY to the buffer of characters to be read. Returns 1 if the character was stuffed correctly; 0 otherwise. */ int rl_stuff_char (key) int key; { if (ibuffer_space () == 0) return 0; if (key == EOF) { key = NEWLINE; rl_pending_input = EOF; RL_SETSTATE (RL_STATE_INPUTPENDING); } ibuffer[push_index++] = key; #if 0 if (push_index >= ibuffer_len) #else if (push_index > ibuffer_len) #endif push_index = 0; return 1; } /* Make C be the next command to be executed. */ int rl_execute_next (c) int c; { rl_pending_input = c; RL_SETSTATE (RL_STATE_INPUTPENDING); return 0; } /* Clear any pending input pushed with rl_execute_next() */ int rl_clear_pending_input () { rl_pending_input = 0; RL_UNSETSTATE (RL_STATE_INPUTPENDING); return 0; } /* **************************************************************** */ /* */ /* Character Input */ /* */ /* **************************************************************** */ /* Read a key, including pending input. */ int rl_read_key () { int c, r; if (rl_pending_input) { c = rl_pending_input; rl_clear_pending_input (); } else { /* If input is coming from a macro, then use that. */ if (c = _rl_next_macro_key ()) return (c); /* If the user has an event function, then call it periodically. */ if (rl_event_hook) { while (rl_event_hook) { if (rl_get_char (&c) != 0) break; if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */ { rl_done = 1; return ('\n'); } else if (r > 0) /* read something */ continue; RL_CHECK_SIGNALS (); if (rl_done) /* XXX - experimental */ return ('\n'); (*rl_event_hook) (); } } else { if (rl_get_char (&c) == 0) c = (*rl_getc_function) (rl_instream); /* fprintf(stderr, "rl_read_key: calling RL_CHECK_SIGNALS: _rl_caught_signal = %d", _rl_caught_signal); */ RL_CHECK_SIGNALS (); } } return (c); } int rl_getc (stream) FILE *stream; { int result; unsigned char c; while (1) { RL_CHECK_SIGNALS (); /* We know at this point that _rl_caught_signal == 0 */ #if defined (__MINGW32__) if (isatty (fileno (stream))) return (getch ()); #endif result = read (fileno (stream), &c, sizeof (unsigned char)); if (result == sizeof (unsigned char)) return (c); /* If zero characters are returned, then the file that we are reading from is empty! Return EOF in that case. */ if (result == 0) return (EOF); #if defined (__BEOS__) if (errno == EINTR) continue; #endif #if defined (EWOULDBLOCK) # define X_EWOULDBLOCK EWOULDBLOCK #else # define X_EWOULDBLOCK -99 #endif #if defined (EAGAIN) # define X_EAGAIN EAGAIN #else # define X_EAGAIN -99 #endif if (errno == X_EWOULDBLOCK || errno == X_EAGAIN) { if (sh_unset_nodelay_mode (fileno (stream)) < 0) return (EOF); continue; } #undef X_EWOULDBLOCK #undef X_EAGAIN /* fprintf(stderr, "rl_getc: result = %d errno = %d\n", result, errno); */ /* If the error that we received was EINTR, then try again, this is simply an interrupted system call to read (). We allow the read to be interrupted if we caught SIGHUP or SIGTERM (but not SIGINT; let the signal handler deal with that), but if the application sets an event hook, call it for other signals. Otherwise (not EINTR), some error occurred, also signifying EOF. */ if (errno != EINTR) return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM) return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT) RL_CHECK_SIGNALS (); if (rl_signal_event_hook) (*rl_signal_event_hook) (); } } #if defined (HANDLE_MULTIBYTE) /* read multibyte char */ int _rl_read_mbchar (mbchar, size) char *mbchar; int size; { int mb_len, c; size_t mbchar_bytes_length; wchar_t wc; mbstate_t ps, ps_back; memset(&ps, 0, sizeof (mbstate_t)); memset(&ps_back, 0, sizeof (mbstate_t)); mb_len = 0; while (mb_len < size) { RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) break; mbchar[mb_len++] = c; mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); if (mbchar_bytes_length == (size_t)(-1)) break; /* invalid byte sequence for the current locale */ else if (mbchar_bytes_length == (size_t)(-2)) { /* shorted bytes */ ps = ps_back; continue; } else if (mbchar_bytes_length == 0) { mbchar[0] = '\0'; /* null wide character */ mb_len = 1; break; } else if (mbchar_bytes_length > (size_t)(0)) break; } return mb_len; } /* Read a multibyte-character string whose first character is FIRST into the buffer MB of length MLEN. Returns the last character read, which may be FIRST. Used by the search functions, among others. Very similar to _rl_read_mbchar. */ int _rl_read_mbstring (first, mb, mlen) int first; char *mb; int mlen; { int i, c; mbstate_t ps; c = first; memset (mb, 0, mlen); for (i = 0; c >= 0 && i < mlen; i++) { mb[i] = (char)c; memset (&ps, 0, sizeof (mbstate_t)); if (_rl_get_char_len (mb, &ps) == -2) { /* Read more for multibyte character */ RL_SETSTATE (RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE (RL_STATE_MOREINPUT); } else break; } return c; } #endif /* HANDLE_MULTIBYTE */ readline-6.3/isearch.c0000664000043600000240000005553512226766330013556 0ustar chetstaff/* isearch.c - incremental searching */ /* **************************************************************** */ /* */ /* I-Search and Searching */ /* */ /* **************************************************************** */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif #include "rldefs.h" #include "rlmbutil.h" #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" /* Variables exported to other files in the readline library. */ char *_rl_isearch_terminators = (char *)NULL; _rl_search_cxt *_rl_iscxt = 0; /* Variables imported from other files in the readline library. */ extern HIST_ENTRY *_rl_saved_line_for_history; static int rl_search_history PARAMS((int, int)); static _rl_search_cxt *_rl_isearch_init PARAMS((int)); static void _rl_isearch_fini PARAMS((_rl_search_cxt *)); static int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int)); /* Last line found by the current incremental search, so we don't `find' identical lines many times in a row. Now part of isearch context. */ /* static char *prev_line_found; */ /* Last search string and its length. */ static char *last_isearch_string; static int last_isearch_string_len; static char * const default_isearch_terminators = "\033\012"; _rl_search_cxt * _rl_scxt_alloc (type, flags) int type, flags; { _rl_search_cxt *cxt; cxt = (_rl_search_cxt *)xmalloc (sizeof (_rl_search_cxt)); cxt->type = type; cxt->sflags = flags; cxt->search_string = 0; cxt->search_string_size = cxt->search_string_index = 0; cxt->lines = 0; cxt->allocated_line = 0; cxt->hlen = cxt->hindex = 0; cxt->save_point = rl_point; cxt->save_mark = rl_mark; cxt->save_line = where_history (); cxt->last_found_line = cxt->save_line; cxt->prev_line_found = 0; cxt->save_undo_list = 0; cxt->keymap = _rl_keymap; cxt->okeymap = _rl_keymap; cxt->history_pos = 0; cxt->direction = 0; cxt->prevc = cxt->lastc = 0; cxt->sline = 0; cxt->sline_len = cxt->sline_index = 0; cxt->search_terminators = 0; return cxt; } void _rl_scxt_dispose (cxt, flags) _rl_search_cxt *cxt; int flags; { FREE (cxt->search_string); FREE (cxt->allocated_line); FREE (cxt->lines); xfree (cxt); } /* Search backwards through the history looking for a string which is typed interactively. Start with the current line. */ int rl_reverse_search_history (sign, key) int sign, key; { return (rl_search_history (-sign, key)); } /* Search forwards through the history looking for a string which is typed interactively. Start with the current line. */ int rl_forward_search_history (sign, key) int sign, key; { return (rl_search_history (sign, key)); } /* Display the current state of the search in the echo-area. SEARCH_STRING contains the string that is being searched for, DIRECTION is zero for forward, or non-zero for reverse, WHERE is the history list number of the current line. If it is -1, then this line is the starting one. */ static void rl_display_search (search_string, flags, where) char *search_string; int flags, where; { char *message; int msglen, searchlen; searchlen = (search_string && *search_string) ? strlen (search_string) : 0; message = (char *)xmalloc (searchlen + 64); msglen = 0; #if defined (NOTDEF) if (where != -1) { sprintf (message, "[%d]", where + history_base); msglen = strlen (message); } #endif /* NOTDEF */ message[msglen++] = '('; if (flags & SF_FAILED) { strcpy (message + msglen, "failed "); msglen += 7; } if (flags & SF_REVERSE) { strcpy (message + msglen, "reverse-"); msglen += 8; } strcpy (message + msglen, "i-search)`"); msglen += 10; if (search_string) { strcpy (message + msglen, search_string); msglen += searchlen; } strcpy (message + msglen, "': "); rl_message ("%s", message); xfree (message); (*rl_redisplay_function) (); } static _rl_search_cxt * _rl_isearch_init (direction) int direction; { _rl_search_cxt *cxt; register int i; HIST_ENTRY **hlist; cxt = _rl_scxt_alloc (RL_SEARCH_ISEARCH, 0); if (direction < 0) cxt->sflags |= SF_REVERSE; cxt->search_terminators = _rl_isearch_terminators ? _rl_isearch_terminators : default_isearch_terminators; /* Create an array of pointers to the lines that we want to search. */ hlist = history_list (); rl_maybe_replace_line (); i = 0; if (hlist) for (i = 0; hlist[i]; i++); /* Allocate space for this many lines, +1 for the current input line, and remember those lines. */ cxt->lines = (char **)xmalloc ((1 + (cxt->hlen = i)) * sizeof (char *)); for (i = 0; i < cxt->hlen; i++) cxt->lines[i] = hlist[i]->line; if (_rl_saved_line_for_history) cxt->lines[i] = _rl_saved_line_for_history->line; else { /* Keep track of this so we can free it. */ cxt->allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer)); strcpy (cxt->allocated_line, &rl_line_buffer[0]); cxt->lines[i] = cxt->allocated_line; } cxt->hlen++; /* The line where we start the search. */ cxt->history_pos = cxt->save_line; rl_save_prompt (); /* Initialize search parameters. */ cxt->search_string = (char *)xmalloc (cxt->search_string_size = 128); cxt->search_string[cxt->search_string_index = 0] = '\0'; /* Normalize DIRECTION into 1 or -1. */ cxt->direction = (direction >= 0) ? 1 : -1; cxt->sline = rl_line_buffer; cxt->sline_len = strlen (cxt->sline); cxt->sline_index = rl_point; _rl_iscxt = cxt; /* save globally */ return cxt; } static void _rl_isearch_fini (cxt) _rl_search_cxt *cxt; { /* First put back the original state. */ strcpy (rl_line_buffer, cxt->lines[cxt->save_line]); rl_restore_prompt (); /* Save the search string for possible later use. */ FREE (last_isearch_string); last_isearch_string = cxt->search_string; last_isearch_string_len = cxt->search_string_index; cxt->search_string = 0; if (cxt->last_found_line < cxt->save_line) rl_get_previous_history (cxt->save_line - cxt->last_found_line, 0); else rl_get_next_history (cxt->last_found_line - cxt->save_line, 0); /* If the string was not found, put point at the end of the last matching line. If last_found_line == orig_line, we didn't find any matching history lines at all, so put point back in its original position. */ if (cxt->sline_index < 0) { if (cxt->last_found_line == cxt->save_line) cxt->sline_index = cxt->save_point; else cxt->sline_index = strlen (rl_line_buffer); rl_mark = cxt->save_mark; } rl_point = cxt->sline_index; /* Don't worry about where to put the mark here; rl_get_previous_history and rl_get_next_history take care of it. */ rl_clear_message (); } int _rl_search_getchar (cxt) _rl_search_cxt *cxt; { int c; /* Read a key and decide how to proceed. */ RL_SETSTATE(RL_STATE_MOREINPUT); c = cxt->lastc = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); #if defined (HANDLE_MULTIBYTE) /* This ends up with C (and LASTC) being set to the last byte of the multibyte character. In most cases c == lastc == mb[0] */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX); #endif RL_CHECK_SIGNALS (); return c; } #define ENDSRCH_CHAR(c) \ ((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G'))) /* Process just-read character C according to isearch context CXT. Return -1 if the caller should just free the context and return, 0 if we should break out of the loop, and 1 if we should continue to read characters. */ int _rl_isearch_dispatch (cxt, c) _rl_search_cxt *cxt; int c; { int n, wstart, wlen, limit, cval; rl_command_func_t *f; f = (rl_command_func_t *)NULL; if (c < 0) { cxt->sflags |= SF_FAILED; cxt->history_pos = cxt->last_found_line; return -1; } /* If we are moving into a new keymap, modify cxt->keymap and go on. This can be a problem if c == ESC and we want to terminate the incremental search, so we check */ if (c >= 0 && cxt->keymap[c].type == ISKMAP && strchr (cxt->search_terminators, cxt->lastc) == 0) { /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued takes microseconds, so multiply by 1000. If we don't get any additional input and this keymap shadows another function, process that key as if it was all we read. */ if (_rl_keyseq_timeout > 0 && RL_ISSTATE (RL_STATE_CALLBACK) == 0 && RL_ISSTATE (RL_STATE_INPUTPENDING) == 0 && _rl_pushed_input_available () == 0 && ((Keymap)(cxt->keymap[c].function))[ANYOTHERKEY].function && _rl_input_queued (_rl_keyseq_timeout*1000) == 0) goto add_character; cxt->okeymap = cxt->keymap; cxt->keymap = FUNCTION_TO_KEYMAP (cxt->keymap, c); cxt->sflags |= SF_CHGKMAP; /* XXX - we should probably save this sequence, so we can do something useful if this doesn't end up mapping to a command we interpret here. Right now we just save the most recent character that caused the index into a new keymap. */ cxt->prevc = c; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (cxt->mb[1] == 0) { cxt->pmb[0] = c; /* XXX should be == cxt->mb[0] */ cxt->pmb[1] = '\0'; } else memcpy (cxt->pmb, cxt->mb, sizeof (cxt->pmb)); } #endif return 1; } add_character: /* Translate the keys we do something with to opcodes. */ if (c >= 0 && cxt->keymap[c].type == ISFUNC) { f = cxt->keymap[c].function; if (f == rl_reverse_search_history) cxt->lastc = (cxt->sflags & SF_REVERSE) ? -1 : -2; else if (f == rl_forward_search_history) cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1; else if (f == rl_rubout) cxt->lastc = -3; else if (c == CTRL ('G') || f == rl_abort) cxt->lastc = -4; else if (c == CTRL ('W') || f == rl_unix_word_rubout) /* XXX */ cxt->lastc = -5; else if (c == CTRL ('Y') || f == rl_yank) /* XXX */ cxt->lastc = -6; } /* If we changed the keymap earlier while translating a key sequence into a command, restore it now that we've succeeded. */ if (cxt->sflags & SF_CHGKMAP) { cxt->keymap = cxt->okeymap; cxt->sflags &= ~SF_CHGKMAP; /* If we indexed into a new keymap, but didn't map to a command that affects the search (lastc > 0), and the character that mapped to a new keymap would have ended the search (ENDSRCH_CHAR(cxt->prevc)), handle that now as if the previous char would have ended the search and we would have read the current character. */ /* XXX - should we check cxt->mb? */ if (cxt->lastc > 0 && ENDSRCH_CHAR (cxt->prevc)) { rl_stuff_char (cxt->lastc); rl_execute_next (cxt->prevc); /* XXX - do we insert everything in cxt->pmb? */ return (0); } /* Otherwise, if the current character is mapped to self-insert or nothing (i.e., not an editing command), and the previous character was a keymap index, then we need to insert both the previous character and the current character into the search string. */ else if (cxt->lastc > 0 && cxt->prevc > 0 && cxt->keymap[cxt->prevc].type == ISKMAP && (f == 0 || f == rl_insert)) { /* Make lastc be the next character read */ /* XXX - do we insert everything in cxt->mb? */ rl_execute_next (cxt->lastc); /* Dispatch on the previous character (insert into search string) */ cxt->lastc = cxt->prevc; #if defined (HANDLE_MULTIBYTE) /* Have to overwrite cxt->mb here because dispatch uses it below */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (cxt->pmb[1] == 0) { cxt->mb[0] = cxt->lastc; /* == cxt->prevc */ cxt->mb[1] = '\0'; } else memcpy (cxt->mb, cxt->pmb, sizeof (cxt->mb)); } #endif cxt->prevc = 0; } else if (cxt->lastc > 0 && cxt->prevc > 0 && f && f != rl_insert) { rl_stuff_char (cxt->lastc); rl_execute_next (cxt->prevc); /* XXX - do we insert everything in cxt->pmb? */ return (0); } } /* The characters in isearch_terminators (set from the user-settable variable isearch-terminators) are used to terminate the search but not subsequently execute the character as a command. The default value is "\033\012" (ESC and C-J). */ if (cxt->lastc > 0 && strchr (cxt->search_terminators, cxt->lastc)) { /* ESC still terminates the search, but if there is pending input or if input arrives within 0.1 seconds (on systems with select(2)) it is used as a prefix character with rl_execute_next. WATCH OUT FOR THIS! This is intended to allow the arrow keys to be used like ^F and ^B are used to terminate the search and execute the movement command. XXX - since _rl_input_available depends on the application- settable keyboard timeout value, this could alternatively use _rl_input_queued(100000) */ if (cxt->lastc == ESC && (_rl_pushed_input_available () || _rl_input_available ())) rl_execute_next (ESC); return (0); } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (cxt->lastc >= 0 && (cxt->mb[0] && cxt->mb[1] == '\0') && ENDSRCH_CHAR (cxt->lastc)) { /* This sets rl_pending_input to LASTC; it will be picked up the next time rl_read_key is called. */ rl_execute_next (cxt->lastc); return (0); } } else #endif if (cxt->lastc >= 0 && ENDSRCH_CHAR (cxt->lastc)) { /* This sets rl_pending_input to LASTC; it will be picked up the next time rl_read_key is called. */ rl_execute_next (cxt->lastc); return (0); } /* Now dispatch on the character. `Opcodes' affect the search string or state. Other characters are added to the string. */ switch (cxt->lastc) { /* search again */ case -1: if (cxt->search_string_index == 0) { if (last_isearch_string) { cxt->search_string_size = 64 + last_isearch_string_len; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); strcpy (cxt->search_string, last_isearch_string); cxt->search_string_index = last_isearch_string_len; rl_display_search (cxt->search_string, cxt->sflags, -1); break; } return (1); } else if (cxt->sflags & SF_REVERSE) cxt->sline_index--; else if (cxt->sline_index != cxt->sline_len) cxt->sline_index++; else rl_ding (); break; /* switch directions */ case -2: cxt->direction = -cxt->direction; if (cxt->direction < 0) cxt->sflags |= SF_REVERSE; else cxt->sflags &= ~SF_REVERSE; break; /* delete character from search string. */ case -3: /* C-H, DEL */ /* This is tricky. To do this right, we need to keep a stack of search positions for the current search, with sentinels marking the beginning and end. But this will do until we have a real isearch-undo. */ if (cxt->search_string_index == 0) rl_ding (); else cxt->search_string[--cxt->search_string_index] = '\0'; break; case -4: /* C-G, abort */ rl_replace_line (cxt->lines[cxt->save_line], 0); rl_point = cxt->save_point; rl_mark = cxt->save_mark; rl_restore_prompt(); rl_clear_message (); return -1; case -5: /* C-W */ /* skip over portion of line we already matched and yank word */ wstart = rl_point + cxt->search_string_index; if (wstart >= rl_end) { rl_ding (); break; } /* if not in a word, move to one. */ cval = _rl_char_value (rl_line_buffer, wstart); if (_rl_walphabetic (cval) == 0) { rl_ding (); break; } n = MB_NEXTCHAR (rl_line_buffer, wstart, 1, MB_FIND_NONZERO);; while (n < rl_end) { cval = _rl_char_value (rl_line_buffer, n); if (_rl_walphabetic (cval) == 0) break; n = MB_NEXTCHAR (rl_line_buffer, n, 1, MB_FIND_NONZERO);; } wlen = n - wstart + 1; if (cxt->search_string_index + wlen + 1 >= cxt->search_string_size) { cxt->search_string_size += wlen + 1; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); } for (; wstart < n; wstart++) cxt->search_string[cxt->search_string_index++] = rl_line_buffer[wstart]; cxt->search_string[cxt->search_string_index] = '\0'; break; case -6: /* C-Y */ /* skip over portion of line we already matched and yank rest */ wstart = rl_point + cxt->search_string_index; if (wstart >= rl_end) { rl_ding (); break; } n = rl_end - wstart + 1; if (cxt->search_string_index + n + 1 >= cxt->search_string_size) { cxt->search_string_size += n + 1; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); } for (n = wstart; n < rl_end; n++) cxt->search_string[cxt->search_string_index++] = rl_line_buffer[n]; cxt->search_string[cxt->search_string_index] = '\0'; break; /* Add character to search string and continue search. */ default: if (cxt->search_string_index + 2 >= cxt->search_string_size) { cxt->search_string_size += 128; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int j, l; if (cxt->mb[0] == 0 || cxt->mb[1] == 0) cxt->search_string[cxt->search_string_index++] = cxt->mb[0]; else for (j = 0, l = RL_STRLEN (cxt->mb); j < l; ) cxt->search_string[cxt->search_string_index++] = cxt->mb[j++]; } else #endif cxt->search_string[cxt->search_string_index++] = cxt->lastc; /* XXX - was c instead of lastc */ cxt->search_string[cxt->search_string_index] = '\0'; break; } for (cxt->sflags &= ~(SF_FOUND|SF_FAILED);; ) { limit = cxt->sline_len - cxt->search_string_index + 1; /* Search the current line. */ while ((cxt->sflags & SF_REVERSE) ? (cxt->sline_index >= 0) : (cxt->sline_index < limit)) { if (STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index)) { cxt->sflags |= SF_FOUND; break; } else cxt->sline_index += cxt->direction; } if (cxt->sflags & SF_FOUND) break; /* Move to the next line, but skip new copies of the line we just found and lines shorter than the string we're searching for. */ do { /* Move to the next line. */ cxt->history_pos += cxt->direction; /* At limit for direction? */ if ((cxt->sflags & SF_REVERSE) ? (cxt->history_pos < 0) : (cxt->history_pos == cxt->hlen)) { cxt->sflags |= SF_FAILED; break; } /* We will need these later. */ cxt->sline = cxt->lines[cxt->history_pos]; cxt->sline_len = strlen (cxt->sline); } while ((cxt->prev_line_found && STREQ (cxt->prev_line_found, cxt->lines[cxt->history_pos])) || (cxt->search_string_index > cxt->sline_len)); if (cxt->sflags & SF_FAILED) break; /* Now set up the line for searching... */ cxt->sline_index = (cxt->sflags & SF_REVERSE) ? cxt->sline_len - cxt->search_string_index : 0; } if (cxt->sflags & SF_FAILED) { /* We cannot find the search string. Ding the bell. */ rl_ding (); cxt->history_pos = cxt->last_found_line; rl_display_search (cxt->search_string, cxt->sflags, (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos); return 1; } /* We have found the search string. Just display it. But don't actually move there in the history list until the user accepts the location. */ if (cxt->sflags & SF_FOUND) { cxt->prev_line_found = cxt->lines[cxt->history_pos]; rl_replace_line (cxt->lines[cxt->history_pos], 0); rl_point = cxt->sline_index; cxt->last_found_line = cxt->history_pos; rl_display_search (cxt->search_string, cxt->sflags, (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos); } return 1; } static int _rl_isearch_cleanup (cxt, r) _rl_search_cxt *cxt; int r; { if (r >= 0) _rl_isearch_fini (cxt); _rl_scxt_dispose (cxt, 0); _rl_iscxt = 0; RL_UNSETSTATE(RL_STATE_ISEARCH); return (r != 0); } /* Search through the history looking for an interactively typed string. This is analogous to i-search. We start the search in the current line. DIRECTION is which direction to search; >= 0 means forward, < 0 means backwards. */ static int rl_search_history (direction, invoking_key) int direction, invoking_key; { _rl_search_cxt *cxt; /* local for now, but saved globally */ int c, r; RL_SETSTATE(RL_STATE_ISEARCH); cxt = _rl_isearch_init (direction); rl_display_search (cxt->search_string, cxt->sflags, -1); /* If we are using the callback interface, all we do is set up here and return. The key is that we leave RL_STATE_ISEARCH set. */ if (RL_ISSTATE (RL_STATE_CALLBACK)) return (0); r = -1; for (;;) { c = _rl_search_getchar (cxt); /* We might want to handle EOF here (c == 0) */ r = _rl_isearch_dispatch (cxt, cxt->lastc); if (r <= 0) break; } /* The searching is over. The user may have found the string that she was looking for, or else she may have exited a failing search. If LINE_INDEX is -1, then that shows that the string searched for was not found. We use this to determine where to place rl_point. */ return (_rl_isearch_cleanup (cxt, r)); } #if defined (READLINE_CALLBACKS) /* Called from the callback functions when we are ready to read a key. The callback functions know to call this because RL_ISSTATE(RL_STATE_ISEARCH). If _rl_isearch_dispatch finishes searching, this function is responsible for turning off RL_STATE_ISEARCH, which it does using _rl_isearch_cleanup. */ int _rl_isearch_callback (cxt) _rl_search_cxt *cxt; { int c, r; c = _rl_search_getchar (cxt); /* We might want to handle EOF here */ r = _rl_isearch_dispatch (cxt, cxt->lastc); return (r <= 0) ? _rl_isearch_cleanup (cxt, r) : 0; } #endif readline-6.3/keymaps.c0000664000043600000000000000734411423126040013561 0ustar chetwheel/* keymaps.c -- Functions and keymaps for the GNU Readline library. */ /* Copyright (C) 1988,1989-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* for FILE * definition for readline.h */ #include "readline.h" #include "rlconf.h" #include "emacs_keymap.c" #if defined (VI_MODE) #include "vi_keymap.c" #endif #include "xmalloc.h" /* **************************************************************** */ /* */ /* Functions for manipulating Keymaps. */ /* */ /* **************************************************************** */ /* Return a new, empty keymap. Free it with free() when you are done. */ Keymap rl_make_bare_keymap () { register int i; Keymap keymap; keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY)); for (i = 0; i < KEYMAP_SIZE; i++) { keymap[i].type = ISFUNC; keymap[i].function = (rl_command_func_t *)NULL; } #if 0 for (i = 'A'; i < ('Z' + 1); i++) { keymap[i].type = ISFUNC; keymap[i].function = rl_do_lowercase_version; } #endif return (keymap); } /* Return a new keymap which is a copy of MAP. Just copies pointers, does not copy text of macros or descend into child keymaps. */ Keymap rl_copy_keymap (map) Keymap map; { register int i; Keymap temp; temp = rl_make_bare_keymap (); for (i = 0; i < KEYMAP_SIZE; i++) { temp[i].type = map[i].type; temp[i].function = map[i].function; } return (temp); } /* Return a new keymap with the printing characters bound to rl_insert, the uppercase Meta characters bound to run their lowercase equivalents, and the Meta digits bound to produce numeric arguments. */ Keymap rl_make_keymap () { register int i; Keymap newmap; newmap = rl_make_bare_keymap (); /* All ASCII printing characters are self-inserting. */ for (i = ' '; i < 127; i++) newmap[i].function = rl_insert; newmap[TAB].function = rl_insert; newmap[RUBOUT].function = rl_rubout; /* RUBOUT == 127 */ newmap[CTRL('H')].function = rl_rubout; #if KEYMAP_SIZE > 128 /* Printing characters in ISO Latin-1 and some 8-bit character sets. */ for (i = 128; i < 256; i++) newmap[i].function = rl_insert; #endif /* KEYMAP_SIZE > 128 */ return (newmap); } /* Free the storage associated with MAP. */ void rl_discard_keymap (map) Keymap map; { int i; if (map == 0) return; for (i = 0; i < KEYMAP_SIZE; i++) { switch (map[i].type) { case ISFUNC: break; case ISKMAP: rl_discard_keymap ((Keymap)map[i].function); xfree ((char *)map[i].function); break; case ISMACR: xfree ((char *)map[i].function); break; } } } /* Convenience function that discards, then frees, MAP. */ void rl_free_keymap (map) Keymap map; { rl_discard_keymap (map); xfree ((char *)map); } readline-6.3/kill.c0000644000043600000000000003643211477301612013052 0ustar chetwheel/* kill.c -- kill ring management. */ /* Copyright (C) 1994 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" /* **************************************************************** */ /* */ /* Killing Mechanism */ /* */ /* **************************************************************** */ /* What we assume for a max number of kills. */ #define DEFAULT_MAX_KILLS 10 /* The real variable to look at to find out when to flush kills. */ static int rl_max_kills = DEFAULT_MAX_KILLS; /* Where to store killed text. */ static char **rl_kill_ring = (char **)NULL; /* Where we are in the kill ring. */ static int rl_kill_index; /* How many slots we have in the kill ring. */ static int rl_kill_ring_length; static int _rl_copy_to_kill_ring PARAMS((char *, int)); static int region_kill_internal PARAMS((int)); static int _rl_copy_word_as_kill PARAMS((int, int)); static int rl_yank_nth_arg_internal PARAMS((int, int, int)); /* How to say that you only want to save a certain amount of kill material. */ int rl_set_retained_kills (num) int num; { return 0; } /* Add TEXT to the kill ring, allocating a new kill ring slot as necessary. This uses TEXT directly, so the caller must not free it. If APPEND is non-zero, and the last command was a kill, the text is appended to the current kill ring slot, otherwise prepended. */ static int _rl_copy_to_kill_ring (text, append) char *text; int append; { char *old, *new; int slot; /* First, find the slot to work with. */ if (_rl_last_command_was_kill == 0) { /* Get a new slot. */ if (rl_kill_ring == 0) { /* If we don't have any defined, then make one. */ rl_kill_ring = (char **) xmalloc (((rl_kill_ring_length = 1) + 1) * sizeof (char *)); rl_kill_ring[slot = 0] = (char *)NULL; } else { /* We have to add a new slot on the end, unless we have exceeded the max limit for remembering kills. */ slot = rl_kill_ring_length; if (slot == rl_max_kills) { register int i; xfree (rl_kill_ring[0]); for (i = 0; i < slot; i++) rl_kill_ring[i] = rl_kill_ring[i + 1]; } else { slot = rl_kill_ring_length += 1; rl_kill_ring = (char **)xrealloc (rl_kill_ring, slot * sizeof (char *)); } rl_kill_ring[--slot] = (char *)NULL; } } else slot = rl_kill_ring_length - 1; /* If the last command was a kill, prepend or append. */ if (_rl_last_command_was_kill && rl_editing_mode != vi_mode) { old = rl_kill_ring[slot]; new = (char *)xmalloc (1 + strlen (old) + strlen (text)); if (append) { strcpy (new, old); strcat (new, text); } else { strcpy (new, text); strcat (new, old); } xfree (old); xfree (text); rl_kill_ring[slot] = new; } else rl_kill_ring[slot] = text; rl_kill_index = slot; return 0; } /* The way to kill something. This appends or prepends to the last kill, if the last command was a kill command. if FROM is less than TO, then the text is appended, otherwise prepended. If the last command was not a kill command, then a new slot is made for this kill. */ int rl_kill_text (from, to) int from, to; { char *text; /* Is there anything to kill? */ if (from == to) { _rl_last_command_was_kill++; return 0; } text = rl_copy_text (from, to); /* Delete the copied text from the line. */ rl_delete_text (from, to); _rl_copy_to_kill_ring (text, from < to); _rl_last_command_was_kill++; return 0; } /* Now REMEMBER! In order to do prepending or appending correctly, kill commands always make rl_point's original position be the FROM argument, and rl_point's extent be the TO argument. */ /* **************************************************************** */ /* */ /* Killing Commands */ /* */ /* **************************************************************** */ /* Delete the word at point, saving the text in the kill ring. */ int rl_kill_word (count, key) int count, key; { int orig_point; if (count < 0) return (rl_backward_kill_word (-count, key)); else { orig_point = rl_point; rl_forward_word (count, key); if (rl_point != orig_point) rl_kill_text (orig_point, rl_point); rl_point = orig_point; if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Rubout the word before point, placing it on the kill ring. */ int rl_backward_kill_word (count, ignore) int count, ignore; { int orig_point; if (count < 0) return (rl_kill_word (-count, ignore)); else { orig_point = rl_point; rl_backward_word (count, ignore); if (rl_point != orig_point) rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Kill from here to the end of the line. If DIRECTION is negative, kill back to the line start instead. */ int rl_kill_line (direction, ignore) int direction, ignore; { int orig_point; if (direction < 0) return (rl_backward_kill_line (1, ignore)); else { orig_point = rl_point; rl_end_of_line (1, ignore); if (orig_point != rl_point) rl_kill_text (orig_point, rl_point); rl_point = orig_point; if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Kill backwards to the start of the line. If DIRECTION is negative, kill forwards to the line end instead. */ int rl_backward_kill_line (direction, ignore) int direction, ignore; { int orig_point; if (direction < 0) return (rl_kill_line (1, ignore)); else { if (!rl_point) rl_ding (); else { orig_point = rl_point; rl_beg_of_line (1, ignore); if (rl_point != orig_point) rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } } return 0; } /* Kill the whole line, no matter where point is. */ int rl_kill_full_line (count, ignore) int count, ignore; { rl_begin_undo_group (); rl_point = 0; rl_kill_text (rl_point, rl_end); rl_mark = 0; rl_end_undo_group (); return 0; } /* The next two functions mimic unix line editing behaviour, except they save the deleted text on the kill ring. This is safer than not saving it, and since we have a ring, nobody should get screwed. */ /* This does what C-w does in Unix. We can't prevent people from using behaviour that they expect. */ int rl_unix_word_rubout (count, key) int count, key; { int orig_point; if (rl_point == 0) rl_ding (); else { orig_point = rl_point; if (count <= 0) count = 1; while (count--) { while (rl_point && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; while (rl_point && (whitespace (rl_line_buffer[rl_point - 1]) == 0)) rl_point--; } rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* This deletes one filename component in a Unix pathname. That is, it deletes backward to directory separator (`/') or whitespace. */ int rl_unix_filename_rubout (count, key) int count, key; { int orig_point, c; if (rl_point == 0) rl_ding (); else { orig_point = rl_point; if (count <= 0) count = 1; while (count--) { c = rl_line_buffer[rl_point - 1]; while (rl_point && (whitespace (c) || c == '/')) { rl_point--; c = rl_line_buffer[rl_point - 1]; } while (rl_point && (whitespace (c) == 0) && c != '/') { rl_point--; c = rl_line_buffer[rl_point - 1]; } } rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Here is C-u doing what Unix does. You don't *have* to use these key-bindings. We have a choice of killing the entire line, or killing from where we are to the start of the line. We choose the latter, because if you are a Unix weenie, then you haven't backspaced into the line at all, and if you aren't, then you know what you are doing. */ int rl_unix_line_discard (count, key) int count, key; { if (rl_point == 0) rl_ding (); else { rl_kill_text (rl_point, 0); rl_point = 0; if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Copy the text in the `region' to the kill ring. If DELETE is non-zero, delete the text from the line as well. */ static int region_kill_internal (delete) int delete; { char *text; if (rl_mark != rl_point) { text = rl_copy_text (rl_point, rl_mark); if (delete) rl_delete_text (rl_point, rl_mark); _rl_copy_to_kill_ring (text, rl_point < rl_mark); } _rl_last_command_was_kill++; return 0; } /* Copy the text in the region to the kill ring. */ int rl_copy_region_to_kill (count, ignore) int count, ignore; { return (region_kill_internal (0)); } /* Kill the text between the point and mark. */ int rl_kill_region (count, ignore) int count, ignore; { int r, npoint; npoint = (rl_point < rl_mark) ? rl_point : rl_mark; r = region_kill_internal (1); _rl_fix_point (1); rl_point = npoint; return r; } /* Copy COUNT words to the kill ring. DIR says which direction we look to find the words. */ static int _rl_copy_word_as_kill (count, dir) int count, dir; { int om, op, r; om = rl_mark; op = rl_point; if (dir > 0) rl_forward_word (count, 0); else rl_backward_word (count, 0); rl_mark = rl_point; if (dir > 0) rl_backward_word (count, 0); else rl_forward_word (count, 0); r = region_kill_internal (0); rl_mark = om; rl_point = op; return r; } int rl_copy_forward_word (count, key) int count, key; { if (count < 0) return (rl_copy_backward_word (-count, key)); return (_rl_copy_word_as_kill (count, 1)); } int rl_copy_backward_word (count, key) int count, key; { if (count < 0) return (rl_copy_forward_word (-count, key)); return (_rl_copy_word_as_kill (count, -1)); } /* Yank back the last killed text. This ignores arguments. */ int rl_yank (count, ignore) int count, ignore; { if (rl_kill_ring == 0) { _rl_abort_internal (); return -1; } _rl_set_mark_at_pos (rl_point); rl_insert_text (rl_kill_ring[rl_kill_index]); return 0; } /* If the last command was yank, or yank_pop, and the text just before point is identical to the current kill item, then delete that text from the line, rotate the index down, and yank back some other text. */ int rl_yank_pop (count, key) int count, key; { int l, n; if (((rl_last_func != rl_yank_pop) && (rl_last_func != rl_yank)) || !rl_kill_ring) { _rl_abort_internal (); return -1; } l = strlen (rl_kill_ring[rl_kill_index]); n = rl_point - l; if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l)) { rl_delete_text (n, rl_point); rl_point = n; rl_kill_index--; if (rl_kill_index < 0) rl_kill_index = rl_kill_ring_length - 1; rl_yank (1, 0); return 0; } else { _rl_abort_internal (); return -1; } } /* Yank the COUNTh argument from the previous history line, skipping HISTORY_SKIP lines before looking for the `previous line'. */ static int rl_yank_nth_arg_internal (count, ignore, history_skip) int count, ignore, history_skip; { register HIST_ENTRY *entry; char *arg; int i, pos; pos = where_history (); if (history_skip) { for (i = 0; i < history_skip; i++) entry = previous_history (); } entry = previous_history (); history_set_pos (pos); if (entry == 0) { rl_ding (); return -1; } arg = history_arg_extract (count, count, entry->line); if (!arg || !*arg) { rl_ding (); FREE (arg); return -1; } rl_begin_undo_group (); _rl_set_mark_at_pos (rl_point); #if defined (VI_MODE) /* Vi mode always inserts a space before yanking the argument, and it inserts it right *after* rl_point. */ if (rl_editing_mode == vi_mode) { rl_vi_append_mode (1, ignore); rl_insert_text (" "); } #endif /* VI_MODE */ rl_insert_text (arg); xfree (arg); rl_end_undo_group (); return 0; } /* Yank the COUNTth argument from the previous history line. */ int rl_yank_nth_arg (count, ignore) int count, ignore; { return (rl_yank_nth_arg_internal (count, ignore, 0)); } /* Yank the last argument from the previous history line. This `knows' how rl_yank_nth_arg treats a count of `$'. With an argument, this behaves the same as rl_yank_nth_arg. */ int rl_yank_last_arg (count, key) int count, key; { static int history_skip = 0; static int explicit_arg_p = 0; static int count_passed = 1; static int direction = 1; static int undo_needed = 0; int retval; if (rl_last_func != rl_yank_last_arg) { history_skip = 0; explicit_arg_p = rl_explicit_arg; count_passed = count; direction = 1; } else { if (undo_needed) rl_do_undo (); if (count < 0) /* XXX - was < 1 */ direction = -direction; history_skip += direction; if (history_skip < 0) history_skip = 0; } if (explicit_arg_p) retval = rl_yank_nth_arg_internal (count_passed, key, history_skip); else retval = rl_yank_nth_arg_internal ('$', key, history_skip); undo_needed = retval == 0; return retval; } /* A special paste command for users of Cygnus's cygwin32. */ #if defined (__CYGWIN__) #include int rl_paste_from_clipboard (count, key) int count, key; { char *data, *ptr; int len; if (OpenClipboard (NULL) == 0) return (0); data = (char *)GetClipboardData (CF_TEXT); if (data) { ptr = strchr (data, '\r'); if (ptr) { len = ptr - data; ptr = (char *)xmalloc (len + 1); ptr[len] = '\0'; strncpy (ptr, data, len); } else ptr = data; _rl_set_mark_at_pos (rl_point); rl_insert_text (ptr); if (ptr != data) xfree (ptr); CloseClipboard (); } return (0); } #endif /* __CYGWIN__ */ readline-6.3/macro.c0000664000043600000000000001647212010331607013213 0ustar chetwheel/* macro.c -- keyboard macros for readline. */ /* Copyright (C) 1994-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" /* **************************************************************** */ /* */ /* Hacking Keyboard Macros */ /* */ /* **************************************************************** */ /* The currently executing macro string. If this is non-zero, then it is a malloc ()'ed string where input is coming from. */ char *rl_executing_macro = (char *)NULL; /* The offset in the above string to the next character to be read. */ static int executing_macro_index; /* The current macro string being built. Characters get stuffed in here by add_macro_char (). */ static char *current_macro = (char *)NULL; /* The size of the buffer allocated to current_macro. */ static int current_macro_size; /* The index at which characters are being added to current_macro. */ static int current_macro_index; /* A structure used to save nested macro strings. It is a linked list of string/index for each saved macro. */ struct saved_macro { struct saved_macro *next; char *string; int sindex; }; /* The list of saved macros. */ static struct saved_macro *macro_list = (struct saved_macro *)NULL; /* Set up to read subsequent input from STRING. STRING is free ()'ed when we are done with it. */ void _rl_with_macro_input (string) char *string; { _rl_push_executing_macro (); rl_executing_macro = string; executing_macro_index = 0; RL_SETSTATE(RL_STATE_MACROINPUT); } /* Return the next character available from a macro, or 0 if there are no macro characters. */ int _rl_next_macro_key () { int c; if (rl_executing_macro == 0) return (0); if (rl_executing_macro[executing_macro_index] == 0) { _rl_pop_executing_macro (); return (_rl_next_macro_key ()); } #if defined (READLINE_CALLBACKS) c = rl_executing_macro[executing_macro_index++]; if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_READCMD|RL_STATE_MOREINPUT) && rl_executing_macro[executing_macro_index] == 0) _rl_pop_executing_macro (); return c; #else return (rl_executing_macro[executing_macro_index++]); #endif } int _rl_prev_macro_key () { if (rl_executing_macro == 0) return (0); if (executing_macro_index == 0) return (0); executing_macro_index--; return (rl_executing_macro[executing_macro_index]); } /* Save the currently executing macro on a stack of saved macros. */ void _rl_push_executing_macro () { struct saved_macro *saver; saver = (struct saved_macro *)xmalloc (sizeof (struct saved_macro)); saver->next = macro_list; saver->sindex = executing_macro_index; saver->string = rl_executing_macro; macro_list = saver; } /* Discard the current macro, replacing it with the one on the top of the stack of saved macros. */ void _rl_pop_executing_macro () { struct saved_macro *macro; FREE (rl_executing_macro); rl_executing_macro = (char *)NULL; executing_macro_index = 0; if (macro_list) { macro = macro_list; rl_executing_macro = macro_list->string; executing_macro_index = macro_list->sindex; macro_list = macro_list->next; xfree (macro); } if (rl_executing_macro == 0) RL_UNSETSTATE(RL_STATE_MACROINPUT); } /* Add a character to the macro being built. */ void _rl_add_macro_char (c) int c; { if (current_macro_index + 1 >= current_macro_size) { if (current_macro == 0) current_macro = (char *)xmalloc (current_macro_size = 25); else current_macro = (char *)xrealloc (current_macro, current_macro_size += 25); } current_macro[current_macro_index++] = c; current_macro[current_macro_index] = '\0'; } void _rl_kill_kbd_macro () { if (current_macro) { xfree (current_macro); current_macro = (char *) NULL; } current_macro_size = current_macro_index = 0; FREE (rl_executing_macro); rl_executing_macro = (char *) NULL; executing_macro_index = 0; RL_UNSETSTATE(RL_STATE_MACRODEF); } /* Begin defining a keyboard macro. Keystrokes are recorded as they are executed. End the definition with rl_end_kbd_macro (). If a numeric argument was explicitly typed, then append this definition to the end of the existing macro, and start by re-executing the existing macro. */ int rl_start_kbd_macro (ignore1, ignore2) int ignore1, ignore2; { if (RL_ISSTATE (RL_STATE_MACRODEF)) { _rl_abort_internal (); return -1; } if (rl_explicit_arg) { if (current_macro) _rl_with_macro_input (savestring (current_macro)); } else current_macro_index = 0; RL_SETSTATE(RL_STATE_MACRODEF); return 0; } /* Stop defining a keyboard macro. A numeric argument says to execute the macro right now, that many times, counting the definition as the first time. */ int rl_end_kbd_macro (count, ignore) int count, ignore; { if (RL_ISSTATE (RL_STATE_MACRODEF) == 0) { _rl_abort_internal (); return -1; } current_macro_index -= rl_key_sequence_length; current_macro[current_macro_index] = '\0'; RL_UNSETSTATE(RL_STATE_MACRODEF); return (rl_call_last_kbd_macro (--count, 0)); } /* Execute the most recently defined keyboard macro. COUNT says how many times to execute it. */ int rl_call_last_kbd_macro (count, ignore) int count, ignore; { if (current_macro == 0) _rl_abort_internal (); if (RL_ISSTATE (RL_STATE_MACRODEF)) { rl_ding (); /* no recursive macros */ current_macro[--current_macro_index] = '\0'; /* erase this char */ return 0; } while (count--) _rl_with_macro_input (savestring (current_macro)); return 0; } int rl_print_last_kbd_macro (count, ignore) int count, ignore; { char *m; if (current_macro == 0) { rl_ding (); return 0; } m = _rl_untranslate_macro_value (current_macro, 1); rl_crlf (); printf ("%s", m); fflush (stdout); rl_crlf (); FREE (m); rl_forced_update_display (); rl_display_fixed = 1; return 0; } void rl_push_macro_input (macro) char *macro; { _rl_with_macro_input (macro); } readline-6.3/mbutil.c0000644000043600000000000002146611770101366013414 0ustar chetwheel/* mbutil.c -- readline multibyte character utility functions */ /* Copyright (C) 2001-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #include "posixjmp.h" #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (TIOCSTAT_IN_SYS_IOCTL) # include #endif /* TIOCSTAT_IN_SYS_IOCTL */ /* Some standard library routines. */ #include "readline.h" #include "rlprivate.h" #include "xmalloc.h" /* Declared here so it can be shared between the readline and history libraries. */ #if defined (HANDLE_MULTIBYTE) int rl_byte_oriented = 0; #else int rl_byte_oriented = 1; #endif /* Ditto */ int _rl_utf8locale = 0; /* **************************************************************** */ /* */ /* Multibyte Character Utility Functions */ /* */ /* **************************************************************** */ #if defined(HANDLE_MULTIBYTE) static int _rl_find_next_mbchar_internal (string, seed, count, find_non_zero) char *string; int seed, count, find_non_zero; { size_t tmp, len; mbstate_t ps; int point; wchar_t wc; tmp = 0; memset(&ps, 0, sizeof (mbstate_t)); if (seed < 0) seed = 0; if (count <= 0) return seed; point = seed + _rl_adjust_point (string, seed, &ps); /* if this is true, means that seed was not pointing to a byte indicating the beginning of a multibyte character. Correct the point and consume one char. */ if (seed < point) count--; while (count > 0) { len = strlen (string + point); if (len == 0) break; tmp = mbrtowc (&wc, string+point, len, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* invalid bytes. assume a byte represents a character */ point++; count--; /* reset states. */ memset(&ps, 0, sizeof(mbstate_t)); } else if (MB_NULLWCH (tmp)) break; /* found wide '\0' */ else { /* valid bytes */ point += tmp; if (find_non_zero) { if (WCWIDTH (wc) == 0) continue; else count--; } else count--; } } if (find_non_zero) { tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && WCWIDTH (wc) == 0) { point += tmp; tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); } } return point; } static int _rl_find_prev_mbchar_internal (string, seed, find_non_zero) char *string; int seed, find_non_zero; { mbstate_t ps; int prev, non_zero_prev, point, length; size_t tmp; wchar_t wc; memset(&ps, 0, sizeof(mbstate_t)); length = strlen(string); if (seed < 0) return 0; else if (length < seed) return length; prev = non_zero_prev = point = 0; while (point < seed) { tmp = mbrtowc (&wc, string + point, length - point, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* in this case, bytes are invalid or shorted to compose multibyte char, so assume that the first byte represents a single character anyway. */ tmp = 1; /* clear the state of the byte sequence, because in this case effect of mbstate is undefined */ memset(&ps, 0, sizeof (mbstate_t)); /* Since we're assuming that this byte represents a single non-zero-width character, don't forget about it. */ prev = point; } else if (MB_NULLWCH (tmp)) break; /* Found '\0' char. Can this happen? */ else { if (find_non_zero) { if (WCWIDTH (wc) != 0) prev = point; } else prev = point; } point += tmp; } return prev; } /* return the number of bytes parsed from the multibyte sequence starting at src, if a non-L'\0' wide character was recognized. It returns 0, if a L'\0' wide character was recognized. It returns (size_t)(-1), if an invalid multibyte sequence was encountered. It returns (size_t)(-2) if it couldn't parse a complete multibyte character. */ int _rl_get_char_len (src, ps) char *src; mbstate_t *ps; { size_t tmp; tmp = mbrlen((const char *)src, (size_t)strlen (src), ps); if (tmp == (size_t)(-2)) { /* shorted to compose multibyte char */ if (ps) memset (ps, 0, sizeof(mbstate_t)); return -2; } else if (tmp == (size_t)(-1)) { /* invalid to compose multibyte char */ /* initialize the conversion state */ if (ps) memset (ps, 0, sizeof(mbstate_t)); return -1; } else if (tmp == (size_t)0) return 0; else return (int)tmp; } /* compare the specified two characters. If the characters matched, return 1. Otherwise return 0. */ int _rl_compare_chars (buf1, pos1, ps1, buf2, pos2, ps2) char *buf1; int pos1; mbstate_t *ps1; char *buf2; int pos2; mbstate_t *ps2; { int i, w1, w2; if ((w1 = _rl_get_char_len (&buf1[pos1], ps1)) <= 0 || (w2 = _rl_get_char_len (&buf2[pos2], ps2)) <= 0 || (w1 != w2) || (buf1[pos1] != buf2[pos2])) return 0; for (i = 1; i < w1; i++) if (buf1[pos1+i] != buf2[pos2+i]) return 0; return 1; } /* adjust pointed byte and find mbstate of the point of string. adjusted point will be point <= adjusted_point, and returns differences of the byte(adjusted_point - point). if point is invalied (point < 0 || more than string length), it returns -1 */ int _rl_adjust_point (string, point, ps) char *string; int point; mbstate_t *ps; { size_t tmp = 0; int length; int pos = 0; length = strlen(string); if (point < 0) return -1; if (length < point) return -1; while (pos < point) { tmp = mbrlen (string + pos, length - pos, ps); if (MB_INVALIDCH ((size_t)tmp)) { /* in this case, bytes are invalid or shorted to compose multibyte char, so assume that the first byte represents a single character anyway. */ pos++; /* clear the state of the byte sequence, because in this case effect of mbstate is undefined */ if (ps) memset (ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tmp)) pos++; else pos += tmp; } return (pos - point); } int _rl_is_mbchar_matched (string, seed, end, mbchar, length) char *string; int seed, end; char *mbchar; int length; { int i; if ((end - seed) < length) return 0; for (i = 0; i < length; i++) if (string[seed + i] != mbchar[i]) return 0; return 1; } wchar_t _rl_char_value (buf, ind) char *buf; int ind; { size_t tmp; wchar_t wc; mbstate_t ps; int l; if (MB_LEN_MAX == 1 || rl_byte_oriented) return ((wchar_t) buf[ind]); l = strlen (buf); if (ind >= l - 1) return ((wchar_t) buf[ind]); memset (&ps, 0, sizeof (mbstate_t)); tmp = mbrtowc (&wc, buf + ind, l - ind, &ps); if (MB_INVALIDCH (tmp) || MB_NULLWCH (tmp)) return ((wchar_t) buf[ind]); return wc; } #endif /* HANDLE_MULTIBYTE */ /* Find next `count' characters started byte point of the specified seed. If flags is MB_FIND_NONZERO, we look for non-zero-width multibyte characters. */ #undef _rl_find_next_mbchar int _rl_find_next_mbchar (string, seed, count, flags) char *string; int seed, count, flags; { #if defined (HANDLE_MULTIBYTE) return _rl_find_next_mbchar_internal (string, seed, count, flags); #else return (seed + count); #endif } /* Find previous character started byte point of the specified seed. Returned point will be point <= seed. If flags is MB_FIND_NONZERO, we look for non-zero-width multibyte characters. */ #undef _rl_find_prev_mbchar int _rl_find_prev_mbchar (string, seed, flags) char *string; int seed, flags; { #if defined (HANDLE_MULTIBYTE) return _rl_find_prev_mbchar_internal (string, seed, flags); #else return ((seed == 0) ? seed : seed - 1); #endif } readline-6.3/misc.c0000664000043600000000000004043412020503037013037 0ustar chetwheel/* misc.c -- miscellaneous bindable readline functions. */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" static int rl_digit_loop PARAMS((void)); static void _rl_history_set_point PARAMS((void)); extern int history_offset; /* Forward declarations used in this file */ void _rl_free_history_entry PARAMS((HIST_ENTRY *)); /* If non-zero, rl_get_previous_history and rl_get_next_history attempt to preserve the value of rl_point from line to line. */ int _rl_history_preserve_point = 0; _rl_arg_cxt _rl_argcxt; /* Saved target point for when _rl_history_preserve_point is set. Special value of -1 means that point is at the end of the line. */ int _rl_history_saved_point = -1; /* **************************************************************** */ /* */ /* Numeric Arguments */ /* */ /* **************************************************************** */ int _rl_arg_overflow () { if (rl_numeric_arg > 1000000) { _rl_argcxt = 0; rl_explicit_arg = rl_numeric_arg = 0; rl_ding (); rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); return 1; } return 0; } void _rl_arg_init () { rl_save_prompt (); _rl_argcxt = 0; RL_SETSTATE(RL_STATE_NUMERICARG); } int _rl_arg_getchar () { int c; rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg); RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); return c; } /* Process C as part of the current numeric argument. Return -1 if the argument should be aborted, 0 if we should not read any more chars, and 1 if we should continue to read chars. */ int _rl_arg_dispatch (cxt, c) _rl_arg_cxt cxt; int c; { int key, r; key = c; /* If we see a key bound to `universal-argument' after seeing digits, it ends the argument but is otherwise ignored. */ if (_rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument) { if ((cxt & NUM_SAWDIGITS) == 0) { rl_numeric_arg *= 4; return 1; } else if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_argcxt |= NUM_READONE; return 0; /* XXX */ } else { RL_SETSTATE(RL_STATE_MOREINPUT); key = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); if (key < 0) return -1; return (_rl_dispatch (key, _rl_keymap)); } } c = UNMETA (c); if (_rl_digit_p (c)) { r = _rl_digit_value (c); rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + r : r; rl_explicit_arg = 1; _rl_argcxt |= NUM_SAWDIGITS; } else if (c == '-' && rl_explicit_arg == 0) { rl_numeric_arg = 1; _rl_argcxt |= NUM_SAWMINUS; rl_arg_sign = -1; } else { /* Make M-- command equivalent to M--1 command. */ if ((_rl_argcxt & NUM_SAWMINUS) && rl_numeric_arg == 1 && rl_explicit_arg == 0) rl_explicit_arg = 1; rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); r = _rl_dispatch (key, _rl_keymap); if (RL_ISSTATE (RL_STATE_CALLBACK)) { /* At worst, this will cause an extra redisplay. Otherwise, we have to wait until the next character comes in. */ if (rl_done == 0) (*rl_redisplay_function) (); r = 0; } return r; } return 1; } /* Handle C-u style numeric args, as well as M--, and M-digits. */ static int rl_digit_loop () { int c, r; while (1) { if (_rl_arg_overflow ()) return 1; c = _rl_arg_getchar (); if (c < 0) { _rl_abort_internal (); return -1; } r = _rl_arg_dispatch (_rl_argcxt, c); if (r <= 0 || (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) break; } return r; } /* Create a default argument. */ void _rl_reset_argument () { rl_numeric_arg = rl_arg_sign = 1; rl_explicit_arg = 0; _rl_argcxt = 0; } /* Start a numeric argument with initial value KEY */ int rl_digit_argument (ignore, key) int ignore, key; { _rl_arg_init (); if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_arg_dispatch (_rl_argcxt, key); rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg); return 0; } else { rl_execute_next (key); return (rl_digit_loop ()); } } /* C-u, universal argument. Multiply the current argument by 4. Read a key. If the key has nothing to do with arguments, then dispatch on it. If the key is the abort character then abort. */ int rl_universal_argument (count, key) int count, key; { _rl_arg_init (); rl_numeric_arg *= 4; return (RL_ISSTATE (RL_STATE_CALLBACK) ? 0 : rl_digit_loop ()); } int _rl_arg_callback (cxt) _rl_arg_cxt cxt; { int c, r; c = _rl_arg_getchar (); if (_rl_argcxt & NUM_READONE) { _rl_argcxt &= ~NUM_READONE; rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); rl_execute_next (c); return 0; } r = _rl_arg_dispatch (cxt, c); return (r != 1); } /* What to do when you abort reading an argument. */ int rl_discard_argument () { rl_ding (); rl_clear_message (); _rl_reset_argument (); return 0; } /* **************************************************************** */ /* */ /* History Utilities */ /* */ /* **************************************************************** */ /* We already have a history library, and that is what we use to control the history features of readline. This is our local interface to the history mechanism. */ /* While we are editing the history, this is the saved version of the original line. */ HIST_ENTRY *_rl_saved_line_for_history = (HIST_ENTRY *)NULL; /* Set the history pointer back to the last entry in the history. */ void _rl_start_using_history () { using_history (); if (_rl_saved_line_for_history) _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } /* Free the contents (and containing structure) of a HIST_ENTRY. */ void _rl_free_history_entry (entry) HIST_ENTRY *entry; { if (entry == 0) return; FREE (entry->line); FREE (entry->timestamp); xfree (entry); } /* Perhaps put back the current line if it has changed. */ int rl_maybe_replace_line () { HIST_ENTRY *temp; temp = current_history (); /* If the current line has changed, save the changes. */ if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list)) { temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list); xfree (temp->line); FREE (temp->timestamp); xfree (temp); } return 0; } /* Restore the _rl_saved_line_for_history if there is one. */ int rl_maybe_unsave_line () { if (_rl_saved_line_for_history) { /* Can't call with `1' because rl_undo_list might point to an undo list from a history entry, as in rl_replace_from_history() below. */ rl_replace_line (_rl_saved_line_for_history->line, 0); rl_undo_list = (UNDO_LIST *)_rl_saved_line_for_history->data; _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; rl_point = rl_end; /* rl_replace_line sets rl_end */ } else rl_ding (); return 0; } /* Save the current line in _rl_saved_line_for_history. */ int rl_maybe_save_line () { if (_rl_saved_line_for_history == 0) { _rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); _rl_saved_line_for_history->line = savestring (rl_line_buffer); _rl_saved_line_for_history->timestamp = (char *)NULL; _rl_saved_line_for_history->data = (char *)rl_undo_list; } return 0; } int _rl_free_saved_history_line () { if (_rl_saved_line_for_history) { _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } return 0; } static void _rl_history_set_point () { rl_point = (_rl_history_preserve_point && _rl_history_saved_point != -1) ? _rl_history_saved_point : rl_end; if (rl_point > rl_end) rl_point = rl_end; #if defined (VI_MODE) if (rl_editing_mode == vi_mode && _rl_keymap != vi_insertion_keymap) rl_point = 0; #endif /* VI_MODE */ if (rl_editing_mode == emacs_mode) rl_mark = (rl_point == rl_end ? 0 : rl_end); } void rl_replace_from_history (entry, flags) HIST_ENTRY *entry; int flags; /* currently unused */ { /* Can't call with `1' because rl_undo_list might point to an undo list from a history entry, just like we're setting up here. */ rl_replace_line (entry->line, 0); rl_undo_list = (UNDO_LIST *)entry->data; rl_point = rl_end; rl_mark = 0; #if defined (VI_MODE) if (rl_editing_mode == vi_mode) { rl_point = 0; rl_mark = rl_end; } #endif } /* Process and free undo lists attached to each history entry prior to the current entry, inclusive, reverting each line to its saved state. This is destructive, and state about the current line is lost. This is not intended to be called while actively editing, and the current line is not assumed to have been added to the history list. */ void _rl_revert_all_lines () { int hpos; HIST_ENTRY *entry; UNDO_LIST *ul, *saved_undo_list; char *lbuf; lbuf = savestring (rl_line_buffer); saved_undo_list = rl_undo_list; hpos = where_history (); entry = (hpos == history_length) ? previous_history () : current_history (); while (entry) { if (ul = (UNDO_LIST *)entry->data) { if (ul == saved_undo_list) saved_undo_list = 0; /* Set up rl_line_buffer and other variables from history entry */ rl_replace_from_history (entry, 0); /* entry->line is now current */ /* Undo all changes to this history entry */ while (rl_undo_list) rl_do_undo (); /* And copy the reverted line back to the history entry, preserving the timestamp. */ FREE (entry->line); entry->line = savestring (rl_line_buffer); entry->data = 0; } entry = previous_history (); } /* Restore history state */ rl_undo_list = saved_undo_list; /* may have been set to null */ history_set_pos (hpos); /* reset the line buffer */ rl_replace_line (lbuf, 0); _rl_set_the_line (); /* and clean up */ xfree (lbuf); } /* Free the history list, including private readline data and take care of pointer aliases to history data. Resets rl_undo_list if it points to an UNDO_LIST * saved as some history entry's data member. This should not be called while editing is active. */ void rl_clear_history () { HIST_ENTRY **hlist, *hent; register int i; UNDO_LIST *ul, *saved_undo_list; saved_undo_list = rl_undo_list; hlist = history_list (); /* direct pointer, not copy */ for (i = 0; i < history_length; i++) { hent = hlist[i]; if (ul = (UNDO_LIST *)hent->data) { if (ul == saved_undo_list) saved_undo_list = 0; _rl_free_undo_list (ul); hent->data = 0; } _rl_free_history_entry (hent); } history_offset = history_length = 0; rl_undo_list = saved_undo_list; /* should be NULL */ } /* **************************************************************** */ /* */ /* History Commands */ /* */ /* **************************************************************** */ /* Meta-< goes to the start of the history. */ int rl_beginning_of_history (count, key) int count, key; { return (rl_get_previous_history (1 + where_history (), key)); } /* Meta-> goes to the end of the history. (The current line). */ int rl_end_of_history (count, key) int count, key; { rl_maybe_replace_line (); using_history (); rl_maybe_unsave_line (); return 0; } /* Move down to the next history line. */ int rl_get_next_history (count, key) int count, key; { HIST_ENTRY *temp; if (count < 0) return (rl_get_previous_history (-count, key)); if (count == 0) return 0; rl_maybe_replace_line (); /* either not saved by rl_newline or at end of line, so set appropriately. */ if (_rl_history_saved_point == -1 && (rl_point || rl_end)) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; temp = (HIST_ENTRY *)NULL; while (count) { temp = next_history (); if (!temp) break; --count; } if (temp == 0) rl_maybe_unsave_line (); else { rl_replace_from_history (temp, 0); _rl_history_set_point (); } return 0; } /* Get the previous item out of our interactive history, making it the current line. If there is no previous history, just ding. */ int rl_get_previous_history (count, key) int count, key; { HIST_ENTRY *old_temp, *temp; if (count < 0) return (rl_get_next_history (-count, key)); if (count == 0) return 0; /* either not saved by rl_newline or at end of line, so set appropriately. */ if (_rl_history_saved_point == -1 && (rl_point || rl_end)) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; /* If we don't have a line saved, then save this one. */ rl_maybe_save_line (); /* If the current line has changed, save the changes. */ rl_maybe_replace_line (); temp = old_temp = (HIST_ENTRY *)NULL; while (count) { temp = previous_history (); if (temp == 0) break; old_temp = temp; --count; } /* If there was a large argument, and we moved back to the start of the history, that is not an error. So use the last value found. */ if (!temp && old_temp) temp = old_temp; if (temp == 0) rl_ding (); else { rl_replace_from_history (temp, 0); _rl_history_set_point (); } return 0; } /* **************************************************************** */ /* */ /* Editing Modes */ /* */ /* **************************************************************** */ /* How to toggle back and forth between editing modes. */ int rl_vi_editing_mode (count, key) int count, key; { #if defined (VI_MODE) _rl_set_insert_mode (RL_IM_INSERT, 1); /* vi mode ignores insert mode */ rl_editing_mode = vi_mode; rl_vi_insert_mode (1, key); #endif /* VI_MODE */ return 0; } int rl_emacs_editing_mode (count, key) int count, key; { rl_editing_mode = emacs_mode; _rl_set_insert_mode (RL_IM_INSERT, 1); /* emacs mode default is insert mode */ _rl_keymap = emacs_standard_keymap; if (_rl_show_mode_in_prompt) _rl_reset_prompt (); return 0; } /* Function for the rest of the library to use to set insert/overwrite mode. */ void _rl_set_insert_mode (im, force) int im, force; { #ifdef CURSOR_MODE _rl_set_cursor (im, force); #endif rl_insert_mode = im; } /* Toggle overwrite mode. A positive explicit argument selects overwrite mode. A negative or zero explicit argument selects insert mode. */ int rl_overwrite_mode (count, key) int count, key; { if (rl_explicit_arg == 0) _rl_set_insert_mode (rl_insert_mode ^ 1, 0); else if (count > 0) _rl_set_insert_mode (RL_IM_OVERWRITE, 0); else _rl_set_insert_mode (RL_IM_INSERT, 0); return 0; } readline-6.3/nls.c0000664000043600000000000001474512116711256012720 0ustar chetwheel/* nls.c -- skeletal internationalization code. */ /* Copyright (C) 1996-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #if defined (HAVE_LANGINFO_CODESET) # include #endif #include #include "rldefs.h" #include "readline.h" #include "rlshell.h" #include "rlprivate.h" static int utf8locale PARAMS((char *)); #if !defined (HAVE_SETLOCALE) /* A list of legal values for the LANG or LC_CTYPE environment variables. If a locale name in this list is the value for the LC_ALL, LC_CTYPE, or LANG environment variable (using the first of those with a value), readline eight-bit mode is enabled. */ static char *legal_lang_values[] = { "iso88591", "iso88592", "iso88593", "iso88594", "iso88595", "iso88596", "iso88597", "iso88598", "iso88599", "iso885910", "koi8r", 0 }; static char *normalize_codeset PARAMS((char *)); #endif /* !HAVE_SETLOCALE */ static char *find_codeset PARAMS((char *, size_t *)); static char *_rl_get_locale_var PARAMS((const char *)); static char * _rl_get_locale_var (v) const char *v; { char *lspec; lspec = sh_get_env_value ("LC_ALL"); if (lspec == 0 || *lspec == 0) lspec = sh_get_env_value (v); if (lspec == 0 || *lspec == 0) lspec = sh_get_env_value ("LANG"); return lspec; } static int utf8locale (lspec) char *lspec; { char *cp; size_t len; #if HAVE_LANGINFO_CODESET cp = nl_langinfo (CODESET); return (STREQ (cp, "UTF-8") || STREQ (cp, "utf8")); #else cp = find_codeset (lspec, &len); if (cp == 0 || len < 4 || len > 5) return 0; return ((len == 5) ? strncmp (cp, "UTF-8", len) == 0 : strncmp (cp, "utf8", 4) == 0); #endif } /* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value to decide the defaults for 8-bit character input and output. Returns 1 if we set eight-bit mode. */ int _rl_init_eightbit () { /* If we have setlocale(3), just check the current LC_CTYPE category value, and go into eight-bit mode if it's not C or POSIX. */ #if defined (HAVE_SETLOCALE) char *lspec, *t; /* Set the LC_CTYPE locale category from environment variables. */ lspec = _rl_get_locale_var ("LC_CTYPE"); /* Since _rl_get_locale_var queries the right environment variables, we query the current locale settings with setlocale(), and, if that doesn't return anything, we set lspec to the empty string to force the subsequent call to setlocale() to define the `native' environment. */ if (lspec == 0 || *lspec == 0) lspec = setlocale (LC_CTYPE, (char *)NULL); if (lspec == 0) lspec = ""; t = setlocale (LC_CTYPE, lspec); if (t && *t) _rl_utf8locale = utf8locale (t); if (t && *t && (t[0] != 'C' || t[1]) && (STREQ (t, "POSIX") == 0)) { _rl_meta_flag = 1; _rl_convert_meta_chars_to_ascii = 0; _rl_output_meta_chars = 1; return (1); } else return (0); #else /* !HAVE_SETLOCALE */ char *lspec, *t; int i; /* We don't have setlocale. Finesse it. Check the environment for the appropriate variables and set eight-bit mode if they have the right values. */ lspec = _rl_get_locale_var ("LC_CTYPE"); if (lspec == 0 || (t = normalize_codeset (lspec)) == 0) return (0); for (i = 0; t && legal_lang_values[i]; i++) if (STREQ (t, legal_lang_values[i])) { _rl_meta_flag = 1; _rl_convert_meta_chars_to_ascii = 0; _rl_output_meta_chars = 1; break; } xfree (t); return (legal_lang_values[i] ? 1 : 0); #endif /* !HAVE_SETLOCALE */ } #if !defined (HAVE_SETLOCALE) static char * normalize_codeset (codeset) char *codeset; { size_t namelen, i; int len, all_digits; char *wp, *retval; codeset = find_codeset (codeset, &namelen); if (codeset == 0) return (codeset); all_digits = 1; for (len = 0, i = 0; i < namelen; i++) { if (ISALNUM ((unsigned char)codeset[i])) { len++; all_digits &= _rl_digit_p (codeset[i]); } } retval = (char *)malloc ((all_digits ? 3 : 0) + len + 1); if (retval == 0) return ((char *)0); wp = retval; /* Add `iso' to beginning of an all-digit codeset */ if (all_digits) { *wp++ = 'i'; *wp++ = 's'; *wp++ = 'o'; } for (i = 0; i < namelen; i++) if (ISALPHA ((unsigned char)codeset[i])) *wp++ = _rl_to_lower (codeset[i]); else if (_rl_digit_p (codeset[i])) *wp++ = codeset[i]; *wp = '\0'; return retval; } #endif /* !HAVE_SETLOCALE */ /* Isolate codeset portion of locale specification. */ static char * find_codeset (name, lenp) char *name; size_t *lenp; { char *cp, *language, *result; cp = language = name; result = (char *)0; while (*cp && *cp != '_' && *cp != '@' && *cp != '+' && *cp != ',') cp++; /* This does not make sense: language has to be specified. As an exception we allow the variable to contain only the codeset name. Perhaps there are funny codeset names. */ if (language == cp) { *lenp = strlen (language); result = language; } else { /* Next is the territory. */ if (*cp == '_') do ++cp; while (*cp && *cp != '.' && *cp != '@' && *cp != '+' && *cp != ',' && *cp != '_'); /* Now, finally, is the codeset. */ result = cp; if (*cp == '.') do ++cp; while (*cp && *cp != '@'); if (cp - result > 2) { result++; *lenp = cp - result; } else { *lenp = strlen (language); result = language; } } return result; } readline-6.3/parens.c0000664000043600000000000001063511172655546013420 0ustar chetwheel/* parens.c -- implementation of matching parentheses feature. */ /* Copyright (C) 1987, 1989, 1992-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #include "rlconf.h" #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif #include "posixselect.h" #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ #include "readline.h" #include "rlprivate.h" static int find_matching_open PARAMS((char *, int, int)); /* Non-zero means try to blink the matching open parenthesis when the close parenthesis is inserted. */ #if defined (HAVE_SELECT) int rl_blink_matching_paren = 1; #else /* !HAVE_SELECT */ int rl_blink_matching_paren = 0; #endif /* !HAVE_SELECT */ static int _paren_blink_usec = 500000; /* Change emacs_standard_keymap to have bindings for paren matching when ON_OR_OFF is 1, change them back to self_insert when ON_OR_OFF == 0. */ void _rl_enable_paren_matching (on_or_off) int on_or_off; { if (on_or_off) { /* ([{ */ rl_bind_key_in_map (')', rl_insert_close, emacs_standard_keymap); rl_bind_key_in_map (']', rl_insert_close, emacs_standard_keymap); rl_bind_key_in_map ('}', rl_insert_close, emacs_standard_keymap); } else { /* ([{ */ rl_bind_key_in_map (')', rl_insert, emacs_standard_keymap); rl_bind_key_in_map (']', rl_insert, emacs_standard_keymap); rl_bind_key_in_map ('}', rl_insert, emacs_standard_keymap); } } int rl_set_paren_blink_timeout (u) int u; { int o; o = _paren_blink_usec; if (u > 0) _paren_blink_usec = u; return (o); } int rl_insert_close (count, invoking_key) int count, invoking_key; { if (rl_explicit_arg || !rl_blink_matching_paren) _rl_insert_char (count, invoking_key); else { #if defined (HAVE_SELECT) int orig_point, match_point, ready; struct timeval timer; fd_set readfds; _rl_insert_char (1, invoking_key); (*rl_redisplay_function) (); match_point = find_matching_open (rl_line_buffer, rl_point - 2, invoking_key); /* Emacs might message or ring the bell here, but I don't. */ if (match_point < 0) return -1; FD_ZERO (&readfds); FD_SET (fileno (rl_instream), &readfds); USEC_TO_TIMEVAL (_paren_blink_usec, timer); orig_point = rl_point; rl_point = match_point; (*rl_redisplay_function) (); ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer); rl_point = orig_point; #else /* !HAVE_SELECT */ _rl_insert_char (count, invoking_key); #endif /* !HAVE_SELECT */ } return 0; } static int find_matching_open (string, from, closer) char *string; int from, closer; { register int i; int opener, level, delimiter; switch (closer) { case ']': opener = '['; break; case '}': opener = '{'; break; case ')': opener = '('; break; default: return (-1); } level = 1; /* The closer passed in counts as 1. */ delimiter = 0; /* Delimited state unknown. */ for (i = from; i > -1; i--) { if (delimiter && (string[i] == delimiter)) delimiter = 0; else if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, string[i])) delimiter = string[i]; else if (!delimiter && (string[i] == closer)) level++; else if (!delimiter && (string[i] == opener)) level--; if (!level) break; } return (i); } readline-6.3/parse-colors.c0000644000043600001200000003143712252727344014525 0ustar chetadmin/* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include // strdup() / strcpy() #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ // abort() #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "rldefs.h" // STREQ, savestring #include "readline.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #include "colors.h" #include "parse-colors.h" #if defined (COLOR_SUPPORT) static bool get_funky_string (char **dest, const char **src, bool equals_end, size_t *output_count); struct bin_str _rl_color_indicator[] = { { LEN_STR_PAIR ("\033[") }, // lc: Left of color sequence { LEN_STR_PAIR ("m") }, // rc: Right of color sequence { 0, NULL }, // ec: End color (replaces lc+no+rc) { LEN_STR_PAIR ("0") }, // rs: Reset to ordinary colors { 0, NULL }, // no: Normal { 0, NULL }, // fi: File: default { LEN_STR_PAIR ("01;34") }, // di: Directory: bright blue { LEN_STR_PAIR ("01;36") }, // ln: Symlink: bright cyan { LEN_STR_PAIR ("33") }, // pi: Pipe: yellow/brown { LEN_STR_PAIR ("01;35") }, // so: Socket: bright magenta { LEN_STR_PAIR ("01;33") }, // bd: Block device: bright yellow { LEN_STR_PAIR ("01;33") }, // cd: Char device: bright yellow { 0, NULL }, // mi: Missing file: undefined { 0, NULL }, // or: Orphaned symlink: undefined { LEN_STR_PAIR ("01;32") }, // ex: Executable: bright green { LEN_STR_PAIR ("01;35") }, // do: Door: bright magenta { LEN_STR_PAIR ("37;41") }, // su: setuid: white on red { LEN_STR_PAIR ("30;43") }, // sg: setgid: black on yellow { LEN_STR_PAIR ("37;44") }, // st: sticky: black on blue { LEN_STR_PAIR ("34;42") }, // ow: other-writable: blue on green { LEN_STR_PAIR ("30;42") }, // tw: ow w/ sticky: black on green { LEN_STR_PAIR ("30;41") }, // ca: black on red { 0, NULL }, // mh: disabled by default { LEN_STR_PAIR ("\033[K") }, // cl: clear to end of line }; /* Parse a string as part of the LS_COLORS variable; this may involve decoding all kinds of escape characters. If equals_end is set an unescaped equal sign ends the string, otherwise only a : or \0 does. Set *OUTPUT_COUNT to the number of bytes output. Return true if successful. The resulting string is *not* null-terminated, but may contain embedded nulls. Note that both dest and src are char **; on return they point to the first free byte after the array and the character that ended the input string, respectively. */ static bool get_funky_string (char **dest, const char **src, bool equals_end, size_t *output_count) { char num; /* For numerical codes */ size_t count; /* Something to count with */ enum { ST_GND, ST_BACKSLASH, ST_OCTAL, ST_HEX, ST_CARET, ST_END, ST_ERROR } state; const char *p; char *q; p = *src; /* We don't want to double-indirect */ q = *dest; /* the whole darn time. */ count = 0; /* No characters counted in yet. */ num = 0; state = ST_GND; /* Start in ground state. */ while (state < ST_END) { switch (state) { case ST_GND: /* Ground state (no escapes) */ switch (*p) { case ':': case '\0': state = ST_END; /* End of string */ break; case '\\': state = ST_BACKSLASH; /* Backslash scape sequence */ ++p; break; case '^': state = ST_CARET; /* Caret escape */ ++p; break; case '=': if (equals_end) { state = ST_END; /* End */ break; } /* else fall through */ default: *(q++) = *(p++); ++count; break; } break; case ST_BACKSLASH: /* Backslash escaped character */ switch (*p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': state = ST_OCTAL; /* Octal sequence */ num = *p - '0'; break; case 'x': case 'X': state = ST_HEX; /* Hex sequence */ num = 0; break; case 'a': /* Bell */ num = '\a'; break; case 'b': /* Backspace */ num = '\b'; break; case 'e': /* Escape */ num = 27; break; case 'f': /* Form feed */ num = '\f'; break; case 'n': /* Newline */ num = '\n'; break; case 'r': /* Carriage return */ num = '\r'; break; case 't': /* Tab */ num = '\t'; break; case 'v': /* Vtab */ num = '\v'; break; case '?': /* Delete */ num = 127; break; case '_': /* Space */ num = ' '; break; case '\0': /* End of string */ state = ST_ERROR; /* Error! */ break; default: /* Escaped character like \ ^ : = */ num = *p; break; } if (state == ST_BACKSLASH) { *(q++) = num; ++count; state = ST_GND; } ++p; break; case ST_OCTAL: /* Octal sequence */ if (*p < '0' || *p > '7') { *(q++) = num; ++count; state = ST_GND; } else num = (num << 3) + (*(p++) - '0'); break; case ST_HEX: /* Hex sequence */ switch (*p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': num = (num << 4) + (*(p++) - '0'); break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': num = (num << 4) + (*(p++) - 'a') + 10; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': num = (num << 4) + (*(p++) - 'A') + 10; break; default: *(q++) = num; ++count; state = ST_GND; break; } break; case ST_CARET: /* Caret escape */ state = ST_GND; /* Should be the next state... */ if (*p >= '@' && *p <= '~') { *(q++) = *(p++) & 037; ++count; } else if (*p == '?') { *(q++) = 127; ++count; } else state = ST_ERROR; break; default: /* should we ? */ /* abort (); no, we should not */ state = ST_ERROR; break; } } *dest = q; *src = p; *output_count = count; return state != ST_ERROR; } #endif /* COLOR_SUPPORT */ void _rl_parse_colors() { #if defined (COLOR_SUPPORT) const char *p; /* Pointer to character being parsed */ char *buf; /* color_buf buffer pointer */ int state; /* State of parser */ int ind_no; /* Indicator number */ char label[3]; /* Indicator label */ COLOR_EXT_TYPE *ext; /* Extension we are working on */ p = sh_get_env_value ("LS_COLORS"); if (p == 0 || *p == '\0') { _rl_color_ext_list = NULL; return; } ext = NULL; strcpy (label, "??"); /* This is an overly conservative estimate, but any possible LS_COLORS string will *not* generate a color_buf longer than itself, so it is a safe way of allocating a buffer in advance. */ buf = color_buf = savestring (p); state = 1; while (state > 0) { switch (state) { case 1: /* First label character */ switch (*p) { case ':': ++p; break; case '*': /* Allocate new extension block and add to head of linked list (this way a later definition will override an earlier one, which can be useful for having terminal-specific defs override global). */ ext = (COLOR_EXT_TYPE *)xmalloc (sizeof *ext); ext->next = _rl_color_ext_list; _rl_color_ext_list = ext; ++p; ext->ext.string = buf; state = (get_funky_string (&buf, &p, true, &ext->ext.len) ? 4 : -1); break; case '\0': state = 0; /* Done! */ break; default: /* Assume it is file type label */ label[0] = *(p++); state = 2; break; } break; case 2: /* Second label character */ if (*p) { label[1] = *(p++); state = 3; } else state = -1; /* Error */ break; case 3: /* Equal sign after indicator label */ state = -1; /* Assume failure... */ if (*(p++) == '=')/* It *should* be... */ { for (ind_no = 0; indicator_name[ind_no] != NULL; ++ind_no) { if (STREQ (label, indicator_name[ind_no])) { _rl_color_indicator[ind_no].string = buf; state = (get_funky_string (&buf, &p, false, &_rl_color_indicator[ind_no].len) ? 1 : -1); break; } } if (state == -1) { _rl_errmsg ("LS_COLORS: unrecognized prefix: %s", label); /* recover from an unrecognized prefix */ while (p && *p && *p != ':') p++; if (p && *p == ':') state = 1; else if (p && *p == 0) state = 0; } } break; case 4: /* Equal sign after *.ext */ if (*(p++) == '=') { ext->seq.string = buf; state = (get_funky_string (&buf, &p, false, &ext->seq.len) ? 1 : -1); } else state = -1; /* XXX - recover here as with an unrecognized prefix? */ if (state == -1 && ext->ext.string) _rl_errmsg ("LS_COLORS: syntax error: %s", ext->ext.string); break; } } if (state < 0) { COLOR_EXT_TYPE *e; COLOR_EXT_TYPE *e2; _rl_errmsg ("unparsable value for LS_COLORS environment variable"); free (color_buf); for (e = _rl_color_ext_list; e != NULL; /* empty */) { e2 = e; e = e->next; free (e2); } _rl_color_ext_list = NULL; _rl_colored_stats = 0; /* can't have colored stats without colors */ } #else /* !COLOR_SUPPORT */ ; #endif /* !COLOR_SUPPORT */ } readline-6.3/readline.c0000664000043600001200000011126612233531676013700 0ustar chetadmin/* readline.c -- a general facility for reading lines of input with emacs style editing and completion. */ /* Copyright (C) 1987-2013 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include "posixstat.h" #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include #include "posixjmp.h" #include #if !defined (errno) extern int errno; #endif /* !errno */ /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (__EMX__) # define INCL_DOSPROCESS # include #endif /* __EMX__ */ /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #ifndef RL_LIBRARY_VERSION # define RL_LIBRARY_VERSION "5.1" #endif #ifndef RL_READLINE_VERSION # define RL_READLINE_VERSION 0x0501 #endif extern void _rl_free_history_entry PARAMS((HIST_ENTRY *)); #if defined (COLOR_SUPPORT) extern void _rl_parse_colors PARAMS((void)); /* XXX */ #endif /* Forward declarations used in this file. */ static char *readline_internal PARAMS((void)); static void readline_initialize_everything PARAMS((void)); static void bind_arrow_keys_internal PARAMS((Keymap)); static void bind_arrow_keys PARAMS((void)); static void readline_default_bindings PARAMS((void)); static void reset_default_bindings PARAMS((void)); static int _rl_subseq_result PARAMS((int, Keymap, int, int)); static int _rl_subseq_getchar PARAMS((int)); /* **************************************************************** */ /* */ /* Line editing input utility */ /* */ /* **************************************************************** */ const char *rl_library_version = RL_LIBRARY_VERSION; int rl_readline_version = RL_READLINE_VERSION; /* True if this is `real' readline as opposed to some stub substitute. */ int rl_gnu_readline_p = 1; /* A pointer to the keymap that is currently in use. By default, it is the standard emacs keymap. */ Keymap _rl_keymap = emacs_standard_keymap; /* The current style of editing. */ int rl_editing_mode = emacs_mode; /* The current insert mode: input (the default) or overwrite */ int rl_insert_mode = RL_IM_DEFAULT; /* Non-zero if we called this function from _rl_dispatch(). It's present so functions can find out whether they were called from a key binding or directly from an application. */ int rl_dispatching; /* Non-zero if the previous command was a kill command. */ int _rl_last_command_was_kill = 0; /* The current value of the numeric argument specified by the user. */ int rl_numeric_arg = 1; /* Non-zero if an argument was typed. */ int rl_explicit_arg = 0; /* Temporary value used while generating the argument. */ int rl_arg_sign = 1; /* Non-zero means we have been called at least once before. */ static int rl_initialized; #if 0 /* If non-zero, this program is running in an EMACS buffer. */ static int running_in_emacs; #endif /* Flags word encapsulating the current readline state. */ int rl_readline_state = RL_STATE_NONE; /* The current offset in the current input line. */ int rl_point; /* Mark in the current input line. */ int rl_mark; /* Length of the current input line. */ int rl_end; /* Make this non-zero to return the current input_line. */ int rl_done; /* The last function executed by readline. */ rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL; /* Top level environment for readline_internal (). */ procenv_t _rl_top_level; /* The streams we interact with. */ FILE *_rl_in_stream, *_rl_out_stream; /* The names of the streams that we do input and output to. */ FILE *rl_instream = (FILE *)NULL; FILE *rl_outstream = (FILE *)NULL; /* Non-zero means echo characters as they are read. Defaults to no echo; set to 1 if there is a controlling terminal, we can get its attributes, and the attributes include `echo'. Look at rltty.c:prepare_terminal_settings for the code that sets it. */ int _rl_echoing_p = 0; /* Current prompt. */ char *rl_prompt = (char *)NULL; int rl_visible_prompt_length = 0; /* Set to non-zero by calling application if it has already printed rl_prompt and does not want readline to do it the first time. */ int rl_already_prompted = 0; /* The number of characters read in order to type this complete command. */ int rl_key_sequence_length = 0; /* If non-zero, then this is the address of a function to call just before readline_internal_setup () prints the first prompt. */ rl_hook_func_t *rl_startup_hook = (rl_hook_func_t *)NULL; /* If non-zero, this is the address of a function to call just before readline_internal_setup () returns and readline_internal starts reading input characters. */ rl_hook_func_t *rl_pre_input_hook = (rl_hook_func_t *)NULL; /* What we use internally. You should always refer to RL_LINE_BUFFER. */ static char *the_line; /* The character that can generate an EOF. Really read from the terminal driver... just defaulted here. */ int _rl_eof_char = CTRL ('D'); /* Non-zero makes this the next keystroke to read. */ int rl_pending_input = 0; /* Pointer to a useful terminal name. */ const char *rl_terminal_name = (const char *)NULL; /* Non-zero means to always use horizontal scrolling in line display. */ int _rl_horizontal_scroll_mode = 0; /* Non-zero means to display an asterisk at the starts of history lines which have been modified. */ int _rl_mark_modified_lines = 0; /* The style of `bell' notification preferred. This can be set to NO_BELL, AUDIBLE_BELL, or VISIBLE_BELL. */ int _rl_bell_preference = AUDIBLE_BELL; /* String inserted into the line by rl_insert_comment (). */ char *_rl_comment_begin; /* Keymap holding the function currently being executed. */ Keymap rl_executing_keymap; /* Keymap we're currently using to dispatch. */ Keymap _rl_dispatching_keymap; /* Non-zero means to erase entire line, including prompt, on empty input lines. */ int rl_erase_empty_line = 0; /* Non-zero means to read only this many characters rather than up to a character bound to accept-line. */ int rl_num_chars_to_read; /* Line buffer and maintenance. */ char *rl_line_buffer = (char *)NULL; int rl_line_buffer_len = 0; /* Key sequence `contexts' */ _rl_keyseq_cxt *_rl_kscxt = 0; int rl_executing_key; char *rl_executing_keyseq = 0; int _rl_executing_keyseq_size = 0; /* Timeout (specified in milliseconds) when reading characters making up an ambiguous multiple-key sequence */ int _rl_keyseq_timeout = 500; #define RESIZE_KEYSEQ_BUFFER() \ do \ { \ if (rl_key_sequence_length + 2 >= _rl_executing_keyseq_size) \ { \ _rl_executing_keyseq_size += 16; \ rl_executing_keyseq = xrealloc (rl_executing_keyseq, _rl_executing_keyseq_size); \ } \ } \ while (0); /* Forward declarations used by the display, termcap, and history code. */ /* **************************************************************** */ /* */ /* `Forward' declarations */ /* */ /* **************************************************************** */ /* Non-zero means do not parse any lines other than comments and parser directives. */ unsigned char _rl_parsing_conditionalized_out = 0; /* Non-zero means to convert characters with the meta bit set to escape-prefixed characters so we can indirect through emacs_meta_keymap or vi_escape_keymap. */ int _rl_convert_meta_chars_to_ascii = 1; /* Non-zero means to output characters with the meta bit set directly rather than as a meta-prefixed escape sequence. */ int _rl_output_meta_chars = 0; /* Non-zero means to look at the termios special characters and bind them to equivalent readline functions at startup. */ int _rl_bind_stty_chars = 1; /* Non-zero means to go through the history list at every newline (or whenever rl_done is set and readline returns) and revert each line to its initial state. */ int _rl_revert_all_at_newline = 0; /* Non-zero means to honor the termios ECHOCTL bit and echo control characters corresponding to keyboard-generated signals. */ int _rl_echo_control_chars = 1; /* Non-zero means to prefix the displayed prompt with a character indicating the editing mode: @ for emacs, : for vi-command, + for vi-insert. */ int _rl_show_mode_in_prompt = 0; /* **************************************************************** */ /* */ /* Top Level Functions */ /* */ /* **************************************************************** */ /* Non-zero means treat 0200 bit in terminal input as Meta bit. */ int _rl_meta_flag = 0; /* Forward declaration */ /* Set up the prompt and expand it. Called from readline() and rl_callback_handler_install (). */ int rl_set_prompt (prompt) const char *prompt; { FREE (rl_prompt); rl_prompt = prompt ? savestring (prompt) : (char *)NULL; rl_display_prompt = rl_prompt ? rl_prompt : ""; rl_visible_prompt_length = rl_expand_prompt (rl_prompt); return 0; } /* Read a line of input. Prompt with PROMPT. An empty PROMPT means none. A return value of NULL means that EOF was encountered. */ char * readline (prompt) const char *prompt; { char *value; #if 0 int in_callback; #endif /* If we are at EOF return a NULL string. */ if (rl_pending_input == EOF) { rl_clear_pending_input (); return ((char *)NULL); } #if 0 /* If readline() is called after installing a callback handler, temporarily turn off the callback state to avoid ensuing messiness. Patch supplied by the gdb folks. XXX -- disabled. This can be fooled and readline left in a strange state by a poorly-timed longjmp. */ if (in_callback = RL_ISSTATE (RL_STATE_CALLBACK)) RL_UNSETSTATE (RL_STATE_CALLBACK); #endif rl_set_prompt (prompt); rl_initialize (); if (rl_prep_term_function) (*rl_prep_term_function) (_rl_meta_flag); #if defined (HANDLE_SIGNALS) rl_set_signals (); #endif value = readline_internal (); if (rl_deprep_term_function) (*rl_deprep_term_function) (); #if defined (HANDLE_SIGNALS) rl_clear_signals (); #endif #if 0 if (in_callback) RL_SETSTATE (RL_STATE_CALLBACK); #endif #if HAVE_DECL_AUDIT_TTY && defined (ENABLE_TTY_AUDIT_SUPPORT) if (value) _rl_audit_tty (value); #endif return (value); } #if defined (READLINE_CALLBACKS) # define STATIC_CALLBACK #else # define STATIC_CALLBACK static #endif STATIC_CALLBACK void readline_internal_setup () { char *nprompt; _rl_in_stream = rl_instream; _rl_out_stream = rl_outstream; /* Enable the meta key only for the duration of readline(), if this terminal has one and the terminal has been initialized */ if (_rl_enable_meta & RL_ISSTATE (RL_STATE_TERMPREPPED)) _rl_enable_meta_key (); if (rl_startup_hook) (*rl_startup_hook) (); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) rl_vi_insertion_mode (1, 'i'); /* don't want to reset last */ #endif /* VI_MODE */ /* If we're not echoing, we still want to at least print a prompt, because rl_redisplay will not do it for us. If the calling application has a custom redisplay function, though, let that function handle it. */ if (_rl_echoing_p == 0 && rl_redisplay_function == rl_redisplay) { if (rl_prompt && rl_already_prompted == 0) { nprompt = _rl_strip_prompt (rl_prompt); fprintf (_rl_out_stream, "%s", nprompt); fflush (_rl_out_stream); xfree (nprompt); } } else { if (rl_prompt && rl_already_prompted) rl_on_new_line_with_prompt (); else rl_on_new_line (); (*rl_redisplay_function) (); } if (rl_pre_input_hook) (*rl_pre_input_hook) (); RL_CHECK_SIGNALS (); } STATIC_CALLBACK char * readline_internal_teardown (eof) int eof; { char *temp; HIST_ENTRY *entry; RL_CHECK_SIGNALS (); /* Restore the original of this history line, iff the line that we are editing was originally in the history, AND the line has changed. */ entry = current_history (); if (entry && rl_undo_list) { temp = savestring (the_line); rl_revert_line (1, 0); entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL); _rl_free_history_entry (entry); strcpy (the_line, temp); xfree (temp); } if (_rl_revert_all_at_newline) _rl_revert_all_lines (); /* At any rate, it is highly likely that this line has an undo list. Get rid of it now. */ if (rl_undo_list) rl_free_undo_list (); /* Disable the meta key, if this terminal has one and we were told to use it. The check whether or not we sent the enable string is in _rl_disable_meta_key(); the flag is set in _rl_enable_meta_key */ _rl_disable_meta_key (); /* Restore normal cursor, if available. */ _rl_set_insert_mode (RL_IM_INSERT, 0); return (eof ? (char *)NULL : savestring (the_line)); } void _rl_internal_char_cleanup () { #if defined (VI_MODE) /* In vi mode, when you exit insert mode, the cursor moves back over the previous character. We explicitly check for that here. */ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap) rl_vi_check (); #endif /* VI_MODE */ if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; rl_newline (1, '\n'); } if (rl_done == 0) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; } /* If the application writer has told us to erase the entire line if the only character typed was something bound to rl_newline, do so. */ if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline && rl_point == 0 && rl_end == 0) _rl_erase_entire_line (); } STATIC_CALLBACK int #if defined (READLINE_CALLBACKS) readline_internal_char () #else readline_internal_charloop () #endif { static int lastc, eof_found; int c, code, lk; lastc = -1; eof_found = 0; #if !defined (READLINE_CALLBACKS) while (rl_done == 0) { #endif lk = _rl_last_command_was_kill; #if defined (HAVE_POSIX_SIGSETJMP) code = sigsetjmp (_rl_top_level, 0); #else code = setjmp (_rl_top_level); #endif if (code) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; /* If we get here, we're not being called from something dispatched from _rl_callback_read_char(), which sets up its own value of _rl_top_level (saving and restoring the old, of course), so we can just return here. */ if (RL_ISSTATE (RL_STATE_CALLBACK)) return (0); } if (rl_pending_input == 0) { /* Then initialize the argument and number of keys read. */ _rl_reset_argument (); rl_key_sequence_length = 0; rl_executing_keyseq[0] = 0; } RL_SETSTATE(RL_STATE_READCMD); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_READCMD); /* look at input.c:rl_getc() for the circumstances under which this will be returned; punt immediately on read error without converting it to a newline; assume that rl_read_key has already called the signal handler. */ if (c == READERR) { #if defined (READLINE_CALLBACKS) RL_SETSTATE(RL_STATE_DONE); return (rl_done = 1); #else eof_found = 1; break; #endif } /* EOF typed to a non-blank line is a . If we want to change this, to force any existing line to be ignored when read(2) reads EOF, for example, this is the place to change. */ if (c == EOF && rl_end) c = NEWLINE; /* The character _rl_eof_char typed to blank line, and not as the previous character is interpreted as EOF. */ if (((c == _rl_eof_char && lastc != c) || c == EOF) && !rl_end) { #if defined (READLINE_CALLBACKS) RL_SETSTATE(RL_STATE_DONE); return (rl_done = 1); #else eof_found = 1; break; #endif } lastc = c; _rl_dispatch ((unsigned char)c, _rl_keymap); RL_CHECK_SIGNALS (); /* If there was no change in _rl_last_command_was_kill, then no kill has taken place. Note that if input is pending we are reading a prefix command, so nothing has changed yet. */ if (rl_pending_input == 0 && lk == _rl_last_command_was_kill) _rl_last_command_was_kill = 0; _rl_internal_char_cleanup (); #if defined (READLINE_CALLBACKS) return 0; #else } return (eof_found); #endif } #if defined (READLINE_CALLBACKS) static int readline_internal_charloop () { int eof = 1; while (rl_done == 0) eof = readline_internal_char (); return (eof); } #endif /* READLINE_CALLBACKS */ /* Read a line of input from the global rl_instream, doing output on the global rl_outstream. If rl_prompt is non-null, then that is our prompt. */ static char * readline_internal () { int eof; readline_internal_setup (); eof = readline_internal_charloop (); return (readline_internal_teardown (eof)); } void _rl_init_line_state () { rl_point = rl_end = rl_mark = 0; the_line = rl_line_buffer; the_line[0] = 0; } void _rl_set_the_line () { the_line = rl_line_buffer; } #if defined (READLINE_CALLBACKS) _rl_keyseq_cxt * _rl_keyseq_cxt_alloc () { _rl_keyseq_cxt *cxt; cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt)); cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0; cxt->okey = 0; cxt->ocxt = _rl_kscxt; cxt->childval = 42; /* sentinel value */ return cxt; } void _rl_keyseq_cxt_dispose (cxt) _rl_keyseq_cxt *cxt; { xfree (cxt); } void _rl_keyseq_chain_dispose () { _rl_keyseq_cxt *cxt; while (_rl_kscxt) { cxt = _rl_kscxt; _rl_kscxt = _rl_kscxt->ocxt; _rl_keyseq_cxt_dispose (cxt); } } #endif static int _rl_subseq_getchar (key) int key; { int k; if (key == ESC) RL_SETSTATE(RL_STATE_METANEXT); RL_SETSTATE(RL_STATE_MOREINPUT); k = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (key == ESC) RL_UNSETSTATE(RL_STATE_METANEXT); return k; } #if defined (READLINE_CALLBACKS) int _rl_dispatch_callback (cxt) _rl_keyseq_cxt *cxt; { int nkey, r; /* For now */ /* The first time this context is used, we want to read input and dispatch on it. When traversing the chain of contexts back `up', we want to use the value from the next context down. We're simulating recursion using a chain of contexts. */ if ((cxt->flags & KSEQ_DISPATCHED) == 0) { nkey = _rl_subseq_getchar (cxt->okey); if (nkey < 0) { _rl_abort_internal (); return -1; } r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); cxt->flags |= KSEQ_DISPATCHED; } else r = cxt->childval; /* For now */ if (r != -3) /* don't do this if we indicate there will be other matches */ r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); RL_CHECK_SIGNALS (); if (r == 0) /* success! */ { _rl_keyseq_chain_dispose (); RL_UNSETSTATE (RL_STATE_MULTIKEY); return r; } if (r != -3) /* magic value that says we added to the chain */ _rl_kscxt = cxt->ocxt; if (_rl_kscxt) _rl_kscxt->childval = r; if (r != -3) _rl_keyseq_cxt_dispose (cxt); return r; } #endif /* READLINE_CALLBACKS */ /* Do the command associated with KEY in MAP. If the associated command is really a keymap, then read another key, and dispatch into that map. */ int _rl_dispatch (key, map) register int key; Keymap map; { _rl_dispatching_keymap = map; return _rl_dispatch_subseq (key, map, 0); } int _rl_dispatch_subseq (key, map, got_subseq) register int key; Keymap map; int got_subseq; { int r, newkey; char *macro; rl_command_func_t *func; #if defined (READLINE_CALLBACKS) _rl_keyseq_cxt *cxt; #endif if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii) { if (map[ESC].type == ISKMAP) { if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (ESC); RESIZE_KEYSEQ_BUFFER (); rl_executing_keyseq[rl_key_sequence_length++] = ESC; map = FUNCTION_TO_KEYMAP (map, ESC); key = UNMETA (key); return (_rl_dispatch (key, map)); } else rl_ding (); return 0; } if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (key); r = 0; switch (map[key].type) { case ISFUNC: func = map[key].function; if (func) { /* Special case rl_do_lowercase_version (). */ if (func == rl_do_lowercase_version) /* Should we do anything special if key == ANYOTHERKEY? */ return (_rl_dispatch (_rl_to_lower (key), map)); rl_executing_keymap = map; rl_executing_key = key; RESIZE_KEYSEQ_BUFFER(); rl_executing_keyseq[rl_key_sequence_length++] = key; rl_executing_keyseq[rl_key_sequence_length] = '\0'; rl_dispatching = 1; RL_SETSTATE(RL_STATE_DISPATCHING); r = (*func) (rl_numeric_arg * rl_arg_sign, key); RL_UNSETSTATE(RL_STATE_DISPATCHING); rl_dispatching = 0; /* If we have input pending, then the last command was a prefix command. Don't change the state of rl_last_func. Otherwise, remember the last command executed in this variable. */ if (rl_pending_input == 0 && map[key].function != rl_digit_argument) rl_last_func = map[key].function; RL_CHECK_SIGNALS (); } else if (map[ANYOTHERKEY].function) { /* OK, there's no function bound in this map, but there is a shadow function that was overridden when the current keymap was created. Return -2 to note that. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); return -2; } else if (got_subseq) { /* Return -1 to note that we're in a subsequence, but we don't have a matching key, nor was one overridden. This means we need to back up the recursion chain and find the last subsequence that is bound to a function. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); return -1; } else { #if defined (READLINE_CALLBACKS) RL_UNSETSTATE (RL_STATE_MULTIKEY); _rl_keyseq_chain_dispose (); #endif _rl_abort_internal (); return -1; } break; case ISKMAP: if (map[key].function != 0) { #if defined (VI_MODE) /* The only way this test will be true is if a subsequence has been bound starting with ESC, generally the arrow keys. What we do is check whether there's input in the queue, which there generally will be if an arrow key has been pressed, and, if there's not, just dispatch to (what we assume is) rl_vi_movement_mode right away. This is essentially an input test with a zero timeout (by default) or a timeout determined by the value of `keyseq-timeout' */ /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued takes microseconds, so multiply by 1000 */ if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap && _rl_input_queued ((_rl_keyseq_timeout > 0) ? _rl_keyseq_timeout*1000 : 0) == 0) return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key))); #endif RESIZE_KEYSEQ_BUFFER (); rl_executing_keyseq[rl_key_sequence_length++] = key; _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key); /* Allocate new context here. Use linked contexts (linked through cxt->ocxt) to simulate recursion */ #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { /* Return 0 only the first time, to indicate success to _rl_callback_read_char. The rest of the time, we're called from _rl_dispatch_callback, so we return -3 to indicate special handling is necessary. */ r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0; cxt = _rl_keyseq_cxt_alloc (); if (got_subseq) cxt->flags |= KSEQ_SUBSEQ; cxt->okey = key; cxt->oldmap = map; cxt->dmap = _rl_dispatching_keymap; cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function; RL_SETSTATE (RL_STATE_MULTIKEY); _rl_kscxt = cxt; return r; /* don't indicate immediate success */ } #endif /* Tentative inter-character timeout for potential multi-key sequences? If no input within timeout, abort sequence and act as if we got non-matching input. */ /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued takes microseconds, so multiply by 1000 */ if (_rl_keyseq_timeout > 0 && (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available () == 0 && _rl_dispatching_keymap[ANYOTHERKEY].function && _rl_input_queued (_rl_keyseq_timeout*1000) == 0) return (_rl_subseq_result (-2, map, key, got_subseq)); newkey = _rl_subseq_getchar (key); if (newkey < 0) { _rl_abort_internal (); return -1; } r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function); return _rl_subseq_result (r, map, key, got_subseq); } else { _rl_abort_internal (); return -1; } break; case ISMACR: if (map[key].function != 0) { rl_executing_keyseq[rl_key_sequence_length] = '\0'; macro = savestring ((char *)map[key].function); _rl_with_macro_input (macro); return 0; } break; } #if defined (VI_MODE) if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && key != ANYOTHERKEY && rl_key_sequence_length == 1 && /* XXX */ _rl_vi_textmod_command (key)) _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); #endif return (r); } static int _rl_subseq_result (r, map, key, got_subseq) int r; Keymap map; int key, got_subseq; { Keymap m; int type, nt; rl_command_func_t *func, *nf; if (r == -2) /* We didn't match anything, and the keymap we're indexed into shadowed a function previously bound to that prefix. Call the function. The recursive call to _rl_dispatch_subseq has already taken care of pushing any necessary input back onto the input queue with _rl_unget_char. */ { m = _rl_dispatching_keymap; type = m[ANYOTHERKEY].type; func = m[ANYOTHERKEY].function; if (type == ISFUNC && func == rl_do_lowercase_version) r = _rl_dispatch (_rl_to_lower (key), map); else if (type == ISFUNC && func == rl_insert) { /* If the function that was shadowed was self-insert, we somehow need a keymap with map[key].func == self-insert. Let's use this one. */ nt = m[key].type; nf = m[key].function; m[key].type = type; m[key].function = func; r = _rl_dispatch (key, m); m[key].type = nt; m[key].function = nf; } else r = _rl_dispatch (ANYOTHERKEY, m); } else if (r && map[ANYOTHERKEY].function) { /* We didn't match (r is probably -1), so return something to tell the caller that it should try ANYOTHERKEY for an overridden function. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); _rl_dispatching_keymap = map; return -2; } else if (r && got_subseq) { /* OK, back up the chain. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); _rl_dispatching_keymap = map; return -1; } return r; } /* **************************************************************** */ /* */ /* Initializations */ /* */ /* **************************************************************** */ /* Initialize readline (and terminal if not already). */ int rl_initialize () { /* If we have never been called before, initialize the terminal and data structures. */ if (!rl_initialized) { RL_SETSTATE(RL_STATE_INITIALIZING); readline_initialize_everything (); RL_UNSETSTATE(RL_STATE_INITIALIZING); rl_initialized++; RL_SETSTATE(RL_STATE_INITIALIZED); } /* Initialize the current line information. */ _rl_init_line_state (); /* We aren't done yet. We haven't even gotten started yet! */ rl_done = 0; RL_UNSETSTATE(RL_STATE_DONE); /* Tell the history routines what is going on. */ _rl_start_using_history (); /* Make the display buffer match the state of the line. */ rl_reset_line_state (); /* No such function typed yet. */ rl_last_func = (rl_command_func_t *)NULL; /* Parsing of key-bindings begins in an enabled state. */ _rl_parsing_conditionalized_out = 0; #if defined (VI_MODE) if (rl_editing_mode == vi_mode) _rl_vi_initialize_line (); #endif /* Each line starts in insert mode (the default). */ _rl_set_insert_mode (RL_IM_DEFAULT, 1); return 0; } #if 0 #if defined (__EMX__) static void _emx_build_environ () { TIB *tibp; PIB *pibp; char *t, **tp; int c; DosGetInfoBlocks (&tibp, &pibp); t = pibp->pib_pchenv; for (c = 1; *t; c++) t += strlen (t) + 1; tp = environ = (char **)xmalloc ((c + 1) * sizeof (char *)); t = pibp->pib_pchenv; while (*t) { *tp++ = t; t += strlen (t) + 1; } *tp = 0; } #endif /* __EMX__ */ #endif /* Initialize the entire state of the world. */ static void readline_initialize_everything () { #if 0 #if defined (__EMX__) if (environ == 0) _emx_build_environ (); #endif #endif #if 0 /* Find out if we are running in Emacs -- UNUSED. */ running_in_emacs = sh_get_env_value ("EMACS") != (char *)0; #endif /* Set up input and output if they are not already set up. */ if (!rl_instream) rl_instream = stdin; if (!rl_outstream) rl_outstream = stdout; /* Bind _rl_in_stream and _rl_out_stream immediately. These values may change, but they may also be used before readline_internal () is called. */ _rl_in_stream = rl_instream; _rl_out_stream = rl_outstream; /* Allocate data structures. */ if (rl_line_buffer == 0) rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE); /* Initialize the terminal interface. */ if (rl_terminal_name == 0) rl_terminal_name = sh_get_env_value ("TERM"); _rl_init_terminal_io (rl_terminal_name); /* Bind tty characters to readline functions. */ readline_default_bindings (); /* Initialize the function names. */ rl_initialize_funmap (); /* Decide whether we should automatically go into eight-bit mode. */ _rl_init_eightbit (); /* Read in the init file. */ rl_read_init_file ((char *)NULL); /* XXX */ if (_rl_horizontal_scroll_mode && _rl_term_autowrap) { _rl_screenwidth--; _rl_screenchars -= _rl_screenheight; } /* Override the effect of any `set keymap' assignments in the inputrc file. */ rl_set_keymap_from_edit_mode (); /* Try to bind a common arrow key prefix, if not already bound. */ bind_arrow_keys (); /* If the completion parser's default word break characters haven't been set yet, then do so now. */ if (rl_completer_word_break_characters == (char *)NULL) rl_completer_word_break_characters = (char *)rl_basic_word_break_characters; #if defined (COLOR_SUPPORT) if (_rl_colored_stats) _rl_parse_colors (); #endif rl_executing_keyseq = malloc (_rl_executing_keyseq_size = 16); if (rl_executing_keyseq) rl_executing_keyseq[0] = '\0'; } /* If this system allows us to look at the values of the regular input editing characters, then bind them to their readline equivalents, iff the characters are not bound to keymaps. */ static void readline_default_bindings () { if (_rl_bind_stty_chars) rl_tty_set_default_bindings (_rl_keymap); } /* Reset the default bindings for the terminal special characters we're interested in back to rl_insert and read the new ones. */ static void reset_default_bindings () { if (_rl_bind_stty_chars) { rl_tty_unset_default_bindings (_rl_keymap); rl_tty_set_default_bindings (_rl_keymap); } } /* Bind some common arrow key sequences in MAP. */ static void bind_arrow_keys_internal (map) Keymap map; { Keymap xkeymap; xkeymap = _rl_keymap; _rl_keymap = map; #if defined (__MSDOS__) rl_bind_keyseq_if_unbound ("\033[0A", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\033[0B", rl_backward_char); rl_bind_keyseq_if_unbound ("\033[0C", rl_forward_char); rl_bind_keyseq_if_unbound ("\033[0D", rl_get_next_history); #endif rl_bind_keyseq_if_unbound ("\033[A", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\033[B", rl_get_next_history); rl_bind_keyseq_if_unbound ("\033[C", rl_forward_char); rl_bind_keyseq_if_unbound ("\033[D", rl_backward_char); rl_bind_keyseq_if_unbound ("\033[H", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\033[F", rl_end_of_line); rl_bind_keyseq_if_unbound ("\033OA", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\033OB", rl_get_next_history); rl_bind_keyseq_if_unbound ("\033OC", rl_forward_char); rl_bind_keyseq_if_unbound ("\033OD", rl_backward_char); rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line); #if defined (__MINGW32__) rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history); rl_bind_keyseq_if_unbound ("\340M", rl_forward_char); rl_bind_keyseq_if_unbound ("\340K", rl_backward_char); rl_bind_keyseq_if_unbound ("\340G", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\340O", rl_end_of_line); rl_bind_keyseq_if_unbound ("\340S", rl_delete); rl_bind_keyseq_if_unbound ("\340R", rl_overwrite_mode); /* These may or may not work because of the embedded NUL. */ rl_bind_keyseq_if_unbound ("\\000H", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\\000P", rl_get_next_history); rl_bind_keyseq_if_unbound ("\\000M", rl_forward_char); rl_bind_keyseq_if_unbound ("\\000K", rl_backward_char); rl_bind_keyseq_if_unbound ("\\000G", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\\000O", rl_end_of_line); rl_bind_keyseq_if_unbound ("\\000S", rl_delete); rl_bind_keyseq_if_unbound ("\\000R", rl_overwrite_mode); #endif _rl_keymap = xkeymap; } /* Try and bind the common arrow key prefixes after giving termcap and the inputrc file a chance to bind them and create `real' keymaps for the arrow key prefix. */ static void bind_arrow_keys () { bind_arrow_keys_internal (emacs_standard_keymap); #if defined (VI_MODE) bind_arrow_keys_internal (vi_movement_keymap); /* Unbind vi_movement_keymap[ESC] to allow users to repeatedly hit ESC in vi command mode while still allowing the arrow keys to work. */ if (vi_movement_keymap[ESC].type == ISKMAP) rl_bind_keyseq_in_map ("\033", (rl_command_func_t *)NULL, vi_movement_keymap); bind_arrow_keys_internal (vi_insertion_keymap); #endif } /* **************************************************************** */ /* */ /* Saving and Restoring Readline's state */ /* */ /* **************************************************************** */ int rl_save_state (sp) struct readline_state *sp; { if (sp == 0) return -1; sp->point = rl_point; sp->end = rl_end; sp->mark = rl_mark; sp->buffer = rl_line_buffer; sp->buflen = rl_line_buffer_len; sp->ul = rl_undo_list; sp->prompt = rl_prompt; sp->rlstate = rl_readline_state; sp->done = rl_done; sp->kmap = _rl_keymap; sp->lastfunc = rl_last_func; sp->insmode = rl_insert_mode; sp->edmode = rl_editing_mode; sp->kseqlen = rl_key_sequence_length; sp->inf = rl_instream; sp->outf = rl_outstream; sp->pendingin = rl_pending_input; sp->macro = rl_executing_macro; sp->catchsigs = rl_catch_signals; sp->catchsigwinch = rl_catch_sigwinch; return (0); } int rl_restore_state (sp) struct readline_state *sp; { if (sp == 0) return -1; rl_point = sp->point; rl_end = sp->end; rl_mark = sp->mark; the_line = rl_line_buffer = sp->buffer; rl_line_buffer_len = sp->buflen; rl_undo_list = sp->ul; rl_prompt = sp->prompt; rl_readline_state = sp->rlstate; rl_done = sp->done; _rl_keymap = sp->kmap; rl_last_func = sp->lastfunc; rl_insert_mode = sp->insmode; rl_editing_mode = sp->edmode; rl_key_sequence_length = sp->kseqlen; rl_instream = sp->inf; rl_outstream = sp->outf; rl_pending_input = sp->pendingin; rl_executing_macro = sp->macro; rl_catch_signals = sp->catchsigs; rl_catch_sigwinch = sp->catchsigwinch; return (0); } readline-6.3/rltty.c0000644000043600000000000005426512206467641013307 0ustar chetwheel/* rltty.c -- functions to prepare and restore the terminal for readline's use. */ /* Copyright (C) 1992-2005 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #include #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #include "rldefs.h" #if defined (GWINSZ_IN_SYS_IOCTL) # include #endif /* GWINSZ_IN_SYS_IOCTL */ #include "rltty.h" #include "readline.h" #include "rlprivate.h" #if !defined (errno) extern int errno; #endif /* !errno */ rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal; rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal; static void set_winsize PARAMS((int)); /* **************************************************************** */ /* */ /* Saving and Restoring the TTY */ /* */ /* **************************************************************** */ /* Non-zero means that the terminal is in a prepped state. */ static int terminal_prepped; static _RL_TTY_CHARS _rl_tty_chars, _rl_last_tty_chars; /* If non-zero, means that this process has called tcflow(fd, TCOOFF) and output is suspended. */ #if defined (__ksr1__) static int ksrflow; #endif /* Dummy call to force a backgrounded readline to stop before it tries to get the tty settings. */ static void set_winsize (tty) int tty; { #if defined (TIOCGWINSZ) struct winsize w; if (ioctl (tty, TIOCGWINSZ, &w) == 0) (void) ioctl (tty, TIOCSWINSZ, &w); #endif /* TIOCGWINSZ */ } #if defined (NO_TTY_DRIVER) /* Nothing */ #elif defined (NEW_TTY_DRIVER) /* Values for the `flags' field of a struct bsdtty. This tells which elements of the struct bsdtty have been fetched from the system and are valid. */ #define SGTTY_SET 0x01 #define LFLAG_SET 0x02 #define TCHARS_SET 0x04 #define LTCHARS_SET 0x08 struct bsdtty { struct sgttyb sgttyb; /* Basic BSD tty driver information. */ int lflag; /* Local mode flags, like LPASS8. */ #if defined (TIOCGETC) struct tchars tchars; /* Terminal special characters, including ^S and ^Q. */ #endif #if defined (TIOCGLTC) struct ltchars ltchars; /* 4.2 BSD editing characters */ #endif int flags; /* Bitmap saying which parts of the struct are valid. */ }; #define TIOTYPE struct bsdtty static TIOTYPE otio; static void save_tty_chars PARAMS((TIOTYPE *)); static int _get_tty_settings PARAMS((int, TIOTYPE *)); static int get_tty_settings PARAMS((int, TIOTYPE *)); static int _set_tty_settings PARAMS((int, TIOTYPE *)); static int set_tty_settings PARAMS((int, TIOTYPE *)); static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *)); static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *)); static void save_tty_chars (tiop) TIOTYPE *tiop; { _rl_last_tty_chars = _rl_tty_chars; if (tiop->flags & SGTTY_SET) { _rl_tty_chars.t_erase = tiop->sgttyb.sg_erase; _rl_tty_chars.t_kill = tiop->sgttyb.sg_kill; } if (tiop->flags & TCHARS_SET) { _rl_intr_char = _rl_tty_chars.t_intr = tiop->tchars.t_intrc; _rl_quit_char = _rl_tty_chars.t_quit = tiop->tchars.t_quitc; _rl_tty_chars.t_start = tiop->tchars.t_startc; _rl_tty_chars.t_stop = tiop->tchars.t_stopc; _rl_tty_chars.t_eof = tiop->tchars.t_eofc; _rl_tty_chars.t_eol = '\n'; _rl_tty_chars.t_eol2 = tiop->tchars.t_brkc; } if (tiop->flags & LTCHARS_SET) { _rl_susp_char = _rl_tty_chars.t_susp = tiop->ltchars.t_suspc; _rl_tty_chars.t_dsusp = tiop->ltchars.t_dsuspc; _rl_tty_chars.t_reprint = tiop->ltchars.t_rprntc; _rl_tty_chars.t_flush = tiop->ltchars.t_flushc; _rl_tty_chars.t_werase = tiop->ltchars.t_werasc; _rl_tty_chars.t_lnext = tiop->ltchars.t_lnextc; } _rl_tty_chars.t_status = -1; } static int get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { set_winsize (tty); tiop->flags = tiop->lflag = 0; errno = 0; if (ioctl (tty, TIOCGETP, &(tiop->sgttyb)) < 0) return -1; tiop->flags |= SGTTY_SET; #if defined (TIOCLGET) if (ioctl (tty, TIOCLGET, &(tiop->lflag)) == 0) tiop->flags |= LFLAG_SET; #endif #if defined (TIOCGETC) if (ioctl (tty, TIOCGETC, &(tiop->tchars)) == 0) tiop->flags |= TCHARS_SET; #endif #if defined (TIOCGLTC) if (ioctl (tty, TIOCGLTC, &(tiop->ltchars)) == 0) tiop->flags |= LTCHARS_SET; #endif return 0; } static int set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { if (tiop->flags & SGTTY_SET) { ioctl (tty, TIOCSETN, &(tiop->sgttyb)); tiop->flags &= ~SGTTY_SET; } _rl_echoing_p = 1; #if defined (TIOCLSET) if (tiop->flags & LFLAG_SET) { ioctl (tty, TIOCLSET, &(tiop->lflag)); tiop->flags &= ~LFLAG_SET; } #endif #if defined (TIOCSETC) if (tiop->flags & TCHARS_SET) { ioctl (tty, TIOCSETC, &(tiop->tchars)); tiop->flags &= ~TCHARS_SET; } #endif #if defined (TIOCSLTC) if (tiop->flags & LTCHARS_SET) { ioctl (tty, TIOCSLTC, &(tiop->ltchars)); tiop->flags &= ~LTCHARS_SET; } #endif return 0; } static void prepare_terminal_settings (meta_flag, oldtio, tiop) int meta_flag; TIOTYPE oldtio, *tiop; { _rl_echoing_p = (oldtio.sgttyb.sg_flags & ECHO); _rl_echoctl = (oldtio.sgttyb.sg_flags & ECHOCTL); /* Copy the original settings to the structure we're going to use for our settings. */ tiop->sgttyb = oldtio.sgttyb; tiop->lflag = oldtio.lflag; #if defined (TIOCGETC) tiop->tchars = oldtio.tchars; #endif #if defined (TIOCGLTC) tiop->ltchars = oldtio.ltchars; #endif tiop->flags = oldtio.flags; /* First, the basic settings to put us into character-at-a-time, no-echo input mode. */ tiop->sgttyb.sg_flags &= ~(ECHO | CRMOD); tiop->sgttyb.sg_flags |= CBREAK; /* If this terminal doesn't care how the 8th bit is used, then we can use it for the meta-key. If only one of even or odd parity is specified, then the terminal is using parity, and we cannot. */ #if !defined (ANYP) # define ANYP (EVENP | ODDP) #endif if (((oldtio.sgttyb.sg_flags & ANYP) == ANYP) || ((oldtio.sgttyb.sg_flags & ANYP) == 0)) { tiop->sgttyb.sg_flags |= ANYP; /* Hack on local mode flags if we can. */ #if defined (TIOCLGET) # if defined (LPASS8) tiop->lflag |= LPASS8; # endif /* LPASS8 */ #endif /* TIOCLGET */ } #if defined (TIOCGETC) # if defined (USE_XON_XOFF) /* Get rid of terminal output start and stop characters. */ tiop->tchars.t_stopc = -1; /* C-s */ tiop->tchars.t_startc = -1; /* C-q */ /* If there is an XON character, bind it to restart the output. */ if (oldtio.tchars.t_startc != -1) rl_bind_key (oldtio.tchars.t_startc, rl_restart_output); # endif /* USE_XON_XOFF */ /* If there is an EOF char, bind _rl_eof_char to it. */ if (oldtio.tchars.t_eofc != -1) _rl_eof_char = oldtio.tchars.t_eofc; # if defined (NO_KILL_INTR) /* Get rid of terminal-generated SIGQUIT and SIGINT. */ tiop->tchars.t_quitc = -1; /* C-\ */ tiop->tchars.t_intrc = -1; /* C-c */ # endif /* NO_KILL_INTR */ #endif /* TIOCGETC */ #if defined (TIOCGLTC) /* Make the interrupt keys go away. Just enough to make people happy. */ tiop->ltchars.t_dsuspc = -1; /* C-y */ tiop->ltchars.t_lnextc = -1; /* C-v */ #endif /* TIOCGLTC */ } #else /* !defined (NEW_TTY_DRIVER) */ #if !defined (VMIN) # define VMIN VEOF #endif #if !defined (VTIME) # define VTIME VEOL #endif #if defined (TERMIOS_TTY_DRIVER) # define TIOTYPE struct termios # define DRAIN_OUTPUT(fd) tcdrain (fd) # define GETATTR(tty, tiop) (tcgetattr (tty, tiop)) # ifdef M_UNIX # define SETATTR(tty, tiop) (tcsetattr (tty, TCSANOW, tiop)) # else # define SETATTR(tty, tiop) (tcsetattr (tty, TCSADRAIN, tiop)) # endif /* !M_UNIX */ #else # define TIOTYPE struct termio # define DRAIN_OUTPUT(fd) # define GETATTR(tty, tiop) (ioctl (tty, TCGETA, tiop)) # define SETATTR(tty, tiop) (ioctl (tty, TCSETAW, tiop)) #endif /* !TERMIOS_TTY_DRIVER */ static TIOTYPE otio; static void save_tty_chars PARAMS((TIOTYPE *)); static int _get_tty_settings PARAMS((int, TIOTYPE *)); static int get_tty_settings PARAMS((int, TIOTYPE *)); static int _set_tty_settings PARAMS((int, TIOTYPE *)); static int set_tty_settings PARAMS((int, TIOTYPE *)); static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *)); static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *)); static void _rl_bind_tty_special_chars PARAMS((Keymap, TIOTYPE)); #if defined (FLUSHO) # define OUTPUT_BEING_FLUSHED(tp) (tp->c_lflag & FLUSHO) #else # define OUTPUT_BEING_FLUSHED(tp) 0 #endif static void save_tty_chars (tiop) TIOTYPE *tiop; { _rl_last_tty_chars = _rl_tty_chars; _rl_tty_chars.t_eof = tiop->c_cc[VEOF]; _rl_tty_chars.t_eol = tiop->c_cc[VEOL]; #ifdef VEOL2 _rl_tty_chars.t_eol2 = tiop->c_cc[VEOL2]; #endif _rl_tty_chars.t_erase = tiop->c_cc[VERASE]; #ifdef VWERASE _rl_tty_chars.t_werase = tiop->c_cc[VWERASE]; #endif _rl_tty_chars.t_kill = tiop->c_cc[VKILL]; #ifdef VREPRINT _rl_tty_chars.t_reprint = tiop->c_cc[VREPRINT]; #endif _rl_intr_char = _rl_tty_chars.t_intr = tiop->c_cc[VINTR]; _rl_quit_char = _rl_tty_chars.t_quit = tiop->c_cc[VQUIT]; #ifdef VSUSP _rl_susp_char = _rl_tty_chars.t_susp = tiop->c_cc[VSUSP]; #endif #ifdef VDSUSP _rl_tty_chars.t_dsusp = tiop->c_cc[VDSUSP]; #endif #ifdef VSTART _rl_tty_chars.t_start = tiop->c_cc[VSTART]; #endif #ifdef VSTOP _rl_tty_chars.t_stop = tiop->c_cc[VSTOP]; #endif #ifdef VLNEXT _rl_tty_chars.t_lnext = tiop->c_cc[VLNEXT]; #endif #ifdef VDISCARD _rl_tty_chars.t_flush = tiop->c_cc[VDISCARD]; #endif #ifdef VSTATUS _rl_tty_chars.t_status = tiop->c_cc[VSTATUS]; #endif } #if defined (_AIX) || defined (_AIX41) /* Currently this is only used on AIX */ static void rltty_warning (msg) char *msg; { _rl_errmsg ("warning: %s", msg); } #endif #if defined (_AIX) void setopost(tp) TIOTYPE *tp; { if ((tp->c_oflag & OPOST) == 0) { _rl_errmsg ("warning: turning on OPOST for terminal\r"); tp->c_oflag |= OPOST|ONLCR; } } #endif static int _get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { int ioctl_ret; while (1) { ioctl_ret = GETATTR (tty, tiop); if (ioctl_ret < 0) { if (errno != EINTR) return -1; else continue; } if (OUTPUT_BEING_FLUSHED (tiop)) { #if defined (FLUSHO) _rl_errmsg ("warning: turning off output flushing"); tiop->c_lflag &= ~FLUSHO; break; #else continue; #endif } break; } return 0; } static int get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { set_winsize (tty); errno = 0; if (_get_tty_settings (tty, tiop) < 0) return -1; #if defined (_AIX) setopost(tiop); #endif return 0; } static int _set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { while (SETATTR (tty, tiop) < 0) { if (errno != EINTR) return -1; errno = 0; } return 0; } static int set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { if (_set_tty_settings (tty, tiop) < 0) return -1; #if 0 #if defined (TERMIOS_TTY_DRIVER) # if defined (__ksr1__) if (ksrflow) { ksrflow = 0; tcflow (tty, TCOON); } # else /* !ksr1 */ tcflow (tty, TCOON); /* Simulate a ^Q. */ # endif /* !ksr1 */ #else ioctl (tty, TCXONC, 1); /* Simulate a ^Q. */ #endif /* !TERMIOS_TTY_DRIVER */ #endif /* 0 */ return 0; } static void prepare_terminal_settings (meta_flag, oldtio, tiop) int meta_flag; TIOTYPE oldtio, *tiop; { _rl_echoing_p = (oldtio.c_lflag & ECHO); #if defined (ECHOCTL) _rl_echoctl = (oldtio.c_lflag & ECHOCTL); #endif tiop->c_lflag &= ~(ICANON | ECHO); if ((unsigned char) oldtio.c_cc[VEOF] != (unsigned char) _POSIX_VDISABLE) _rl_eof_char = oldtio.c_cc[VEOF]; #if defined (USE_XON_XOFF) #if defined (IXANY) tiop->c_iflag &= ~(IXON | IXANY); #else /* `strict' Posix systems do not define IXANY. */ tiop->c_iflag &= ~IXON; #endif /* IXANY */ #endif /* USE_XON_XOFF */ /* Only turn this off if we are using all 8 bits. */ if (((tiop->c_cflag & CSIZE) == CS8) || meta_flag) tiop->c_iflag &= ~(ISTRIP | INPCK); /* Make sure we differentiate between CR and NL on input. */ tiop->c_iflag &= ~(ICRNL | INLCR); #if !defined (HANDLE_SIGNALS) tiop->c_lflag &= ~ISIG; #else tiop->c_lflag |= ISIG; #endif tiop->c_cc[VMIN] = 1; tiop->c_cc[VTIME] = 0; #if defined (FLUSHO) if (OUTPUT_BEING_FLUSHED (tiop)) { tiop->c_lflag &= ~FLUSHO; oldtio.c_lflag &= ~FLUSHO; } #endif /* Turn off characters that we need on Posix systems with job control, just to be sure. This includes ^Y and ^V. This should not really be necessary. */ #if defined (TERMIOS_TTY_DRIVER) && defined (_POSIX_VDISABLE) #if defined (VLNEXT) tiop->c_cc[VLNEXT] = _POSIX_VDISABLE; #endif #if defined (VDSUSP) tiop->c_cc[VDSUSP] = _POSIX_VDISABLE; #endif #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */ } #endif /* !NEW_TTY_DRIVER */ /* Put the terminal in CBREAK mode so that we can detect key presses. */ #if defined (NO_TTY_DRIVER) void rl_prep_terminal (meta_flag) int meta_flag; { _rl_echoing_p = 1; } void rl_deprep_terminal () { } #else /* ! NO_TTY_DRIVER */ void rl_prep_terminal (meta_flag) int meta_flag; { int tty; TIOTYPE tio; if (terminal_prepped) return; /* Try to keep this function from being INTerrupted. */ _rl_block_sigint (); tty = rl_instream ? fileno (rl_instream) : fileno (stdin); if (get_tty_settings (tty, &tio) < 0) { #if defined (ENOTSUP) /* MacOS X and Linux, at least, lie about the value of errno if tcgetattr fails. */ if (errno == ENOTTY || errno == EINVAL || errno == ENOTSUP) #else if (errno == ENOTTY || errno == EINVAL) #endif _rl_echoing_p = 1; /* XXX */ _rl_release_sigint (); return; } otio = tio; if (_rl_bind_stty_chars) { #if defined (VI_MODE) /* If editing in vi mode, make sure we restore the bindings in the insertion keymap no matter what keymap we ended up in. */ if (rl_editing_mode == vi_mode) rl_tty_unset_default_bindings (vi_insertion_keymap); else #endif rl_tty_unset_default_bindings (_rl_keymap); } save_tty_chars (&otio); RL_SETSTATE(RL_STATE_TTYCSAVED); if (_rl_bind_stty_chars) { #if defined (VI_MODE) /* If editing in vi mode, make sure we set the bindings in the insertion keymap no matter what keymap we ended up in. */ if (rl_editing_mode == vi_mode) _rl_bind_tty_special_chars (vi_insertion_keymap, tio); else #endif _rl_bind_tty_special_chars (_rl_keymap, tio); } prepare_terminal_settings (meta_flag, otio, &tio); if (set_tty_settings (tty, &tio) < 0) { _rl_release_sigint (); return; } if (_rl_enable_keypad) _rl_control_keypad (1); fflush (rl_outstream); terminal_prepped = 1; RL_SETSTATE(RL_STATE_TERMPREPPED); _rl_release_sigint (); } /* Restore the terminal's normal settings and modes. */ void rl_deprep_terminal () { int tty; if (!terminal_prepped) return; /* Try to keep this function from being interrupted. */ _rl_block_sigint (); tty = rl_instream ? fileno (rl_instream) : fileno (stdin); if (_rl_enable_keypad) _rl_control_keypad (0); fflush (rl_outstream); if (set_tty_settings (tty, &otio) < 0) { _rl_release_sigint (); return; } terminal_prepped = 0; RL_UNSETSTATE(RL_STATE_TERMPREPPED); _rl_release_sigint (); } #endif /* !NO_TTY_DRIVER */ /* **************************************************************** */ /* */ /* Bogus Flow Control */ /* */ /* **************************************************************** */ int rl_restart_output (count, key) int count, key; { #if defined (__MINGW32__) return 0; #else /* !__MING32__ */ int fildes = fileno (rl_outstream); #if defined (TIOCSTART) #if defined (apollo) ioctl (&fildes, TIOCSTART, 0); #else ioctl (fildes, TIOCSTART, 0); #endif /* apollo */ #else /* !TIOCSTART */ # if defined (TERMIOS_TTY_DRIVER) # if defined (__ksr1__) if (ksrflow) { ksrflow = 0; tcflow (fildes, TCOON); } # else /* !ksr1 */ tcflow (fildes, TCOON); /* Simulate a ^Q. */ # endif /* !ksr1 */ # else /* !TERMIOS_TTY_DRIVER */ # if defined (TCXONC) ioctl (fildes, TCXONC, TCOON); # endif /* TCXONC */ # endif /* !TERMIOS_TTY_DRIVER */ #endif /* !TIOCSTART */ return 0; #endif /* !__MINGW32__ */ } int rl_stop_output (count, key) int count, key; { #if defined (__MINGW32__) return 0; #else int fildes = fileno (rl_instream); #if defined (TIOCSTOP) # if defined (apollo) ioctl (&fildes, TIOCSTOP, 0); # else ioctl (fildes, TIOCSTOP, 0); # endif /* apollo */ #else /* !TIOCSTOP */ # if defined (TERMIOS_TTY_DRIVER) # if defined (__ksr1__) ksrflow = 1; # endif /* ksr1 */ tcflow (fildes, TCOOFF); # else # if defined (TCXONC) ioctl (fildes, TCXONC, TCOON); # endif /* TCXONC */ # endif /* !TERMIOS_TTY_DRIVER */ #endif /* !TIOCSTOP */ return 0; #endif /* !__MINGW32__ */ } /* **************************************************************** */ /* */ /* Default Key Bindings */ /* */ /* **************************************************************** */ #if !defined (NO_TTY_DRIVER) #define SET_SPECIAL(sc, func) set_special_char(kmap, &ttybuff, sc, func) #endif #if defined (NO_TTY_DRIVER) #define SET_SPECIAL(sc, func) #define RESET_SPECIAL(c) #elif defined (NEW_TTY_DRIVER) static void set_special_char (kmap, tiop, sc, func) Keymap kmap; TIOTYPE *tiop; int sc; rl_command_func_t *func; { if (sc != -1 && kmap[(unsigned char)sc].type == ISFUNC) kmap[(unsigned char)sc].function = func; } #define RESET_SPECIAL(c) \ if (c != -1 && kmap[(unsigned char)c].type == ISFUNC) \ kmap[(unsigned char)c].function = rl_insert; static void _rl_bind_tty_special_chars (kmap, ttybuff) Keymap kmap; TIOTYPE ttybuff; { if (ttybuff.flags & SGTTY_SET) { SET_SPECIAL (ttybuff.sgttyb.sg_erase, rl_rubout); SET_SPECIAL (ttybuff.sgttyb.sg_kill, rl_unix_line_discard); } # if defined (TIOCGLTC) if (ttybuff.flags & LTCHARS_SET) { SET_SPECIAL (ttybuff.ltchars.t_werasc, rl_unix_word_rubout); SET_SPECIAL (ttybuff.ltchars.t_lnextc, rl_quoted_insert); } # endif /* TIOCGLTC */ } #else /* !NEW_TTY_DRIVER */ static void set_special_char (kmap, tiop, sc, func) Keymap kmap; TIOTYPE *tiop; int sc; rl_command_func_t *func; { unsigned char uc; uc = tiop->c_cc[sc]; if (uc != (unsigned char)_POSIX_VDISABLE && kmap[uc].type == ISFUNC) kmap[uc].function = func; } /* used later */ #define RESET_SPECIAL(uc) \ if (uc != (unsigned char)_POSIX_VDISABLE && kmap[uc].type == ISFUNC) \ kmap[uc].function = rl_insert; static void _rl_bind_tty_special_chars (kmap, ttybuff) Keymap kmap; TIOTYPE ttybuff; { SET_SPECIAL (VERASE, rl_rubout); SET_SPECIAL (VKILL, rl_unix_line_discard); # if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER) SET_SPECIAL (VLNEXT, rl_quoted_insert); # endif /* VLNEXT && TERMIOS_TTY_DRIVER */ # if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER) SET_SPECIAL (VWERASE, rl_unix_word_rubout); # endif /* VWERASE && TERMIOS_TTY_DRIVER */ } #endif /* !NEW_TTY_DRIVER */ /* Set the system's default editing characters to their readline equivalents in KMAP. Should be static, now that we have rl_tty_set_default_bindings. */ void rltty_set_default_bindings (kmap) Keymap kmap; { #if !defined (NO_TTY_DRIVER) TIOTYPE ttybuff; int tty; tty = fileno (rl_instream); if (get_tty_settings (tty, &ttybuff) == 0) _rl_bind_tty_special_chars (kmap, ttybuff); #endif } /* New public way to set the system default editing chars to their readline equivalents. */ void rl_tty_set_default_bindings (kmap) Keymap kmap; { rltty_set_default_bindings (kmap); } /* Rebind all of the tty special chars that readline worries about back to self-insert. Call this before saving the current terminal special chars with save_tty_chars(). This only works on POSIX termios or termio systems. */ void rl_tty_unset_default_bindings (kmap) Keymap kmap; { /* Don't bother before we've saved the tty special chars at least once. */ if (RL_ISSTATE(RL_STATE_TTYCSAVED) == 0) return; RESET_SPECIAL (_rl_tty_chars.t_erase); RESET_SPECIAL (_rl_tty_chars.t_kill); # if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER) RESET_SPECIAL (_rl_tty_chars.t_lnext); # endif /* VLNEXT && TERMIOS_TTY_DRIVER */ # if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER) RESET_SPECIAL (_rl_tty_chars.t_werase); # endif /* VWERASE && TERMIOS_TTY_DRIVER */ } #if defined (HANDLE_SIGNALS) #if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER) int _rl_disable_tty_signals () { return 0; } int _rl_restore_tty_signals () { return 0; } #else static TIOTYPE sigstty, nosigstty; static int tty_sigs_disabled = 0; int _rl_disable_tty_signals () { if (tty_sigs_disabled) return 0; if (_get_tty_settings (fileno (rl_instream), &sigstty) < 0) return -1; nosigstty = sigstty; nosigstty.c_lflag &= ~ISIG; nosigstty.c_iflag &= ~IXON; if (_set_tty_settings (fileno (rl_instream), &nosigstty) < 0) return (_set_tty_settings (fileno (rl_instream), &sigstty)); tty_sigs_disabled = 1; return 0; } int _rl_restore_tty_signals () { int r; if (tty_sigs_disabled == 0) return 0; r = _set_tty_settings (fileno (rl_instream), &sigstty); if (r == 0) tty_sigs_disabled = 0; return r; } #endif /* !NEW_TTY_DRIVER */ #endif /* HANDLE_SIGNALS */ readline-6.3/savestring.c0000664000043600000000000000241211425731104014271 0ustar chetwheel/* savestring.c - function version of savestring for backwards compatibility */ /* Copyright (C) 1998,2003 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #include #ifdef HAVE_STRING_H # include #endif #include "xmalloc.h" /* Backwards compatibility, now that savestring has been removed from all `public' readline header files. */ char * savestring (s) const char *s; { char *ret; ret = (char *)xmalloc (strlen (s) + 1); strcpy (ret, s); return ret; } readline-6.3/search.c0000664000043600000240000004036112247114073013366 0ustar chetstaff/* search.c - code for non-incremental searching in emacs and vi modes. */ /* Copyright (C) 1992-2013 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif #include "rldefs.h" #include "rlmbutil.h" #include "readline.h" #include "history.h" #include "histlib.h" #include "rlprivate.h" #include "xmalloc.h" #ifdef abs # undef abs #endif #define abs(x) (((x) >= 0) ? (x) : -(x)) _rl_search_cxt *_rl_nscxt = 0; extern HIST_ENTRY *_rl_saved_line_for_history; /* Functions imported from the rest of the library. */ extern int _rl_free_history_entry PARAMS((HIST_ENTRY *)); static char *noninc_search_string = (char *) NULL; static int noninc_history_pos; static char *prev_line_found = (char *) NULL; static int rl_history_search_len; static int rl_history_search_pos; static int rl_history_search_flags; static char *history_search_string; static int history_string_size; static void make_history_line_current PARAMS((HIST_ENTRY *)); static int noninc_search_from_pos PARAMS((char *, int, int)); static int noninc_dosearch PARAMS((char *, int)); static int noninc_search PARAMS((int, int)); static int rl_history_search_internal PARAMS((int, int)); static void rl_history_search_reinit PARAMS((int)); static _rl_search_cxt *_rl_nsearch_init PARAMS((int, int)); static int _rl_nsearch_cleanup PARAMS((_rl_search_cxt *, int)); static void _rl_nsearch_abort PARAMS((_rl_search_cxt *)); static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int)); /* Make the data from the history entry ENTRY be the contents of the current line. This doesn't do anything with rl_point; the caller must set it. */ static void make_history_line_current (entry) HIST_ENTRY *entry; { _rl_replace_text (entry->line, 0, rl_end); _rl_fix_point (1); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) /* POSIX.2 says that the `U' command doesn't affect the copy of any command lines to the edit line. We're going to implement that by making the undo list start after the matching line is copied to the current editing buffer. */ rl_free_undo_list (); #endif if (_rl_saved_line_for_history) _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } /* Search the history list for STRING starting at absolute history position POS. If STRING begins with `^', the search must match STRING at the beginning of a history line, otherwise a full substring match is performed for STRING. DIR < 0 means to search backwards through the history list, DIR >= 0 means to search forward. */ static int noninc_search_from_pos (string, pos, dir) char *string; int pos, dir; { int ret, old; if (pos < 0) return -1; old = where_history (); if (history_set_pos (pos) == 0) return -1; RL_SETSTATE(RL_STATE_SEARCH); if (*string == '^') ret = history_search_prefix (string + 1, dir); else ret = history_search (string, dir); RL_UNSETSTATE(RL_STATE_SEARCH); if (ret != -1) ret = where_history (); history_set_pos (old); return (ret); } /* Search for a line in the history containing STRING. If DIR is < 0, the search is backwards through previous entries, else through subsequent entries. Returns 1 if the search was successful, 0 otherwise. */ static int noninc_dosearch (string, dir) char *string; int dir; { int oldpos, pos; HIST_ENTRY *entry; if (string == 0 || *string == '\0' || noninc_history_pos < 0) { rl_ding (); return 0; } pos = noninc_search_from_pos (string, noninc_history_pos + dir, dir); if (pos == -1) { /* Search failed, current history position unchanged. */ rl_maybe_unsave_line (); rl_clear_message (); rl_point = 0; rl_ding (); return 0; } noninc_history_pos = pos; oldpos = where_history (); history_set_pos (noninc_history_pos); entry = current_history (); /* will never be NULL after successful search */ #if defined (VI_MODE) if (rl_editing_mode != vi_mode) #endif history_set_pos (oldpos); make_history_line_current (entry); rl_point = 0; rl_mark = rl_end; rl_clear_message (); return 1; } static _rl_search_cxt * _rl_nsearch_init (dir, pchar) int dir, pchar; { _rl_search_cxt *cxt; char *p; cxt = _rl_scxt_alloc (RL_SEARCH_NSEARCH, 0); if (dir < 0) cxt->sflags |= SF_REVERSE; /* not strictly needed */ cxt->direction = dir; cxt->history_pos = cxt->save_line; rl_maybe_save_line (); /* Clear the undo list, since reading the search string should create its own undo list, and the whole list will end up being freed when we finish reading the search string. */ rl_undo_list = 0; /* Use the line buffer to read the search string. */ rl_line_buffer[0] = 0; rl_end = rl_point = 0; p = _rl_make_prompt_for_search (pchar ? pchar : ':'); rl_message ("%s", p); xfree (p); RL_SETSTATE(RL_STATE_NSEARCH); _rl_nscxt = cxt; return cxt; } static int _rl_nsearch_cleanup (cxt, r) _rl_search_cxt *cxt; int r; { _rl_scxt_dispose (cxt, 0); _rl_nscxt = 0; RL_UNSETSTATE(RL_STATE_NSEARCH); return (r != 1); } static void _rl_nsearch_abort (cxt) _rl_search_cxt *cxt; { rl_maybe_unsave_line (); rl_clear_message (); rl_point = cxt->save_point; rl_mark = cxt->save_mark; rl_restore_prompt (); RL_UNSETSTATE (RL_STATE_NSEARCH); } /* Process just-read character C according to search context CXT. Return -1 if the caller should abort the search, 0 if we should break out of the loop, and 1 if we should continue to read characters. */ static int _rl_nsearch_dispatch (cxt, c) _rl_search_cxt *cxt; int c; { switch (c) { case CTRL('W'): rl_unix_word_rubout (1, c); break; case CTRL('U'): rl_unix_line_discard (1, c); break; case RETURN: case NEWLINE: return 0; case CTRL('H'): case RUBOUT: if (rl_point == 0) { _rl_nsearch_abort (cxt); return -1; } _rl_rubout_char (1, c); break; case CTRL('C'): case CTRL('G'): rl_ding (); _rl_nsearch_abort (cxt); return -1; default: #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_insert_text (cxt->mb); else #endif _rl_insert_char (1, c); break; } (*rl_redisplay_function) (); return 1; } /* Perform one search according to CXT, using NONINC_SEARCH_STRING. Return -1 if the search should be aborted, any other value means to clean up using _rl_nsearch_cleanup (). Returns 1 if the search was successful, 0 otherwise. */ static int _rl_nsearch_dosearch (cxt) _rl_search_cxt *cxt; { rl_mark = cxt->save_mark; /* If rl_point == 0, we want to re-use the previous search string and start from the saved history position. If there's no previous search string, punt. */ if (rl_point == 0) { if (noninc_search_string == 0) { rl_ding (); rl_restore_prompt (); RL_UNSETSTATE (RL_STATE_NSEARCH); return -1; } } else { /* We want to start the search from the current history position. */ noninc_history_pos = cxt->save_line; FREE (noninc_search_string); noninc_search_string = savestring (rl_line_buffer); /* If we don't want the subsequent undo list generated by the search matching a history line to include the contents of the search string, we need to clear rl_line_buffer here. For now, we just clear the undo list generated by reading the search string. (If the search fails, the old undo list will be restored by rl_maybe_unsave_line.) */ rl_free_undo_list (); } rl_restore_prompt (); return (noninc_dosearch (noninc_search_string, cxt->direction)); } /* Search non-interactively through the history list. DIR < 0 means to search backwards through the history of previous commands; otherwise the search is for commands subsequent to the current position in the history list. PCHAR is the character to use for prompting when reading the search string; if not specified (0), it defaults to `:'. */ static int noninc_search (dir, pchar) int dir; int pchar; { _rl_search_cxt *cxt; int c, r; cxt = _rl_nsearch_init (dir, pchar); if (RL_ISSTATE (RL_STATE_CALLBACK)) return (0); /* Read the search string. */ r = 0; while (1) { c = _rl_search_getchar (cxt); if (c == 0) break; r = _rl_nsearch_dispatch (cxt, c); if (r < 0) return 1; else if (r == 0) break; } r = _rl_nsearch_dosearch (cxt); return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1)); } /* Search forward through the history list for a string. If the vi-mode code calls this, KEY will be `?'. */ int rl_noninc_forward_search (count, key) int count, key; { return noninc_search (1, (key == '?') ? '?' : 0); } /* Reverse search the history list for a string. If the vi-mode code calls this, KEY will be `/'. */ int rl_noninc_reverse_search (count, key) int count, key; { return noninc_search (-1, (key == '/') ? '/' : 0); } /* Search forward through the history list for the last string searched for. If there is no saved search string, abort. */ int rl_noninc_forward_search_again (count, key) int count, key; { int r; if (!noninc_search_string) { rl_ding (); return (-1); } r = noninc_dosearch (noninc_search_string, 1); return (r != 1); } /* Reverse search in the history list for the last string searched for. If there is no saved search string, abort. */ int rl_noninc_reverse_search_again (count, key) int count, key; { int r; if (!noninc_search_string) { rl_ding (); return (-1); } r = noninc_dosearch (noninc_search_string, -1); return (r != 1); } #if defined (READLINE_CALLBACKS) int _rl_nsearch_callback (cxt) _rl_search_cxt *cxt; { int c, r; c = _rl_search_getchar (cxt); r = _rl_nsearch_dispatch (cxt, c); if (r != 0) return 1; r = _rl_nsearch_dosearch (cxt); return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1)); } #endif static int rl_history_search_internal (count, dir) int count, dir; { HIST_ENTRY *temp; int ret, oldpos; char *t; rl_maybe_save_line (); temp = (HIST_ENTRY *)NULL; /* Search COUNT times through the history for a line matching history_search_string. If history_search_string[0] == '^', the line must match from the start; otherwise any substring can match. When this loop finishes, TEMP, if non-null, is the history line to copy into the line buffer. */ while (count) { RL_CHECK_SIGNALS (); ret = noninc_search_from_pos (history_search_string, rl_history_search_pos + dir, dir); if (ret == -1) break; /* Get the history entry we found. */ rl_history_search_pos = ret; oldpos = where_history (); history_set_pos (rl_history_search_pos); temp = current_history (); /* will never be NULL after successful search */ history_set_pos (oldpos); /* Don't find multiple instances of the same line. */ if (prev_line_found && STREQ (prev_line_found, temp->line)) continue; prev_line_found = temp->line; count--; } /* If we didn't find anything at all, return. */ if (temp == 0) { rl_maybe_unsave_line (); rl_ding (); /* If you don't want the saved history line (last match) to show up in the line buffer after the search fails, change the #if 0 to #if 1 */ #if 0 if (rl_point > rl_history_search_len) { rl_point = rl_end = rl_history_search_len; rl_line_buffer[rl_end] = '\0'; rl_mark = 0; } #else rl_point = rl_history_search_len; /* rl_maybe_unsave_line changes it */ rl_mark = rl_end; #endif return 1; } /* Copy the line we found into the current line buffer. */ make_history_line_current (temp); if (rl_history_search_flags & ANCHORED_SEARCH) rl_point = rl_history_search_len; /* easy case */ else { t = strstr (rl_line_buffer, history_search_string); rl_point = t ? (int)(t - rl_line_buffer) + rl_history_search_len : rl_end; } rl_mark = rl_end; return 0; } static void rl_history_search_reinit (flags) int flags; { int sind; rl_history_search_pos = where_history (); rl_history_search_len = rl_point; rl_history_search_flags = flags; prev_line_found = (char *)NULL; if (rl_point) { /* Allocate enough space for anchored and non-anchored searches */ if (rl_history_search_len >= history_string_size - 2) { history_string_size = rl_history_search_len + 2; history_search_string = (char *)xrealloc (history_search_string, history_string_size); } sind = 0; if (flags & ANCHORED_SEARCH) history_search_string[sind++] = '^'; strncpy (history_search_string + sind, rl_line_buffer, rl_point); history_search_string[rl_point + sind] = '\0'; } _rl_free_saved_history_line (); } /* Search forward in the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. The search is anchored to the beginning of the history line. */ int rl_history_search_forward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_search_forward && rl_last_func != rl_history_search_backward) rl_history_search_reinit (ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_next_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1)); } /* Search backward through the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. */ int rl_history_search_backward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_search_forward && rl_last_func != rl_history_search_backward) rl_history_search_reinit (ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_previous_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1)); } /* Search forward in the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. The search succeeds if the search string is present anywhere in the history line. */ int rl_history_substr_search_forward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_substr_search_forward && rl_last_func != rl_history_substr_search_backward) rl_history_search_reinit (NON_ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_next_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1)); } /* Search backward through the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. */ int rl_history_substr_search_backward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_substr_search_forward && rl_last_func != rl_history_substr_search_backward) rl_history_search_reinit (NON_ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_previous_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1)); } readline-6.3/shell.c0000664000043600000000000001127612120105134013212 0ustar chetwheel/* shell.c -- readline utility functions that are normally provided by bash when readline is linked as part of the shell. */ /* Copyright (C) 1997-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_STRING_H) # include #else # include #endif /* !HAVE_STRING_H */ #if defined (HAVE_LIMITS_H) # include #endif #if defined (HAVE_FCNTL_H) #include #endif #if defined (HAVE_PWD_H) #include #endif #include #include "rlstdc.h" #include "rlshell.h" #include "rldefs.h" #include "xmalloc.h" #if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS) extern struct passwd *getpwuid PARAMS((uid_t)); #endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */ #ifndef NULL # define NULL 0 #endif #ifndef CHAR_BIT # define CHAR_BIT 8 #endif /* Nonzero if the integer type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Bound on length of the string representing an integer value of type T. Subtract one for the sign bit if T is signed; 302 / 1000 is log10 (2) rounded up; add one for integer division truncation; add one more for a minus sign if t is signed. */ #define INT_STRLEN_BOUND(t) \ ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \ + 1 + TYPE_SIGNED (t)) /* All of these functions are resolved from bash if we are linking readline as part of bash. */ /* Does shell-like quoting using single quotes. */ char * sh_single_quote (string) char *string; { register int c; char *result, *r, *s; result = (char *)xmalloc (3 + (4 * strlen (string))); r = result; *r++ = '\''; for (s = string; s && (c = *s); s++) { *r++ = c; if (c == '\'') { *r++ = '\\'; /* insert escaped single quote */ *r++ = '\''; *r++ = '\''; /* start new quoted string */ } } *r++ = '\''; *r = '\0'; return (result); } /* Set the environment variables LINES and COLUMNS to lines and cols, respectively. */ static char setenv_buf[INT_STRLEN_BOUND (int) + 1]; static char putenv_buf1[INT_STRLEN_BOUND (int) + 6 + 1]; /* sizeof("LINES=") == 6 */ static char putenv_buf2[INT_STRLEN_BOUND (int) + 8 + 1]; /* sizeof("COLUMNS=") == 8 */ void sh_set_lines_and_columns (lines, cols) int lines, cols; { #if defined (HAVE_SETENV) sprintf (setenv_buf, "%d", lines); setenv ("LINES", setenv_buf, 1); sprintf (setenv_buf, "%d", cols); setenv ("COLUMNS", setenv_buf, 1); #else /* !HAVE_SETENV */ # if defined (HAVE_PUTENV) sprintf (putenv_buf1, "LINES=%d", lines); putenv (putenv_buf1); sprintf (putenv_buf2, "COLUMNS=%d", cols); putenv (putenv_buf2); # endif /* HAVE_PUTENV */ #endif /* !HAVE_SETENV */ } char * sh_get_env_value (varname) const char *varname; { return ((char *)getenv (varname)); } char * sh_get_home_dir () { static char *home_dir = (char *)NULL; struct passwd *entry; if (home_dir) return (home_dir); home_dir = (char *)NULL; #if defined (HAVE_GETPWUID) # if defined (__TANDEM) entry = getpwnam (getlogin ()); # else entry = getpwuid (getuid ()); # endif if (entry) home_dir = savestring (entry->pw_dir); #endif #if defined (HAVE_GETPWENT) endpwent (); /* some systems need this */ #endif return (home_dir); } #if !defined (O_NDELAY) # if defined (FNDELAY) # define O_NDELAY FNDELAY # endif #endif int sh_unset_nodelay_mode (fd) int fd; { #if defined (HAVE_FCNTL) int flags, bflags; if ((flags = fcntl (fd, F_GETFL, 0)) < 0) return -1; bflags = 0; #ifdef O_NONBLOCK bflags |= O_NONBLOCK; #endif #ifdef O_NDELAY bflags |= O_NDELAY; #endif if (flags & bflags) { flags &= ~bflags; return (fcntl (fd, F_SETFL, flags)); } #endif return 0; } readline-6.3/signals.c0000644000043600000240000004420612264051330013554 0ustar chetstaff/* signals.c -- signal handling support for readline. */ /* Copyright (C) 1987-2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include /* Just for NULL. Yuck. */ #include #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ /* System-specific feature definitions and include files. */ #include "rldefs.h" #if defined (GWINSZ_IN_SYS_IOCTL) # include #endif /* GWINSZ_IN_SYS_IOCTL */ /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #if defined (HANDLE_SIGNALS) #if !defined (RETSIGTYPE) # if defined (VOID_SIGHANDLER) # define RETSIGTYPE void # else # define RETSIGTYPE int # endif /* !VOID_SIGHANDLER */ #endif /* !RETSIGTYPE */ #if defined (VOID_SIGHANDLER) # define SIGHANDLER_RETURN return #else # define SIGHANDLER_RETURN return (0) #endif /* This typedef is equivalent to the one for Function; it allows us to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */ typedef RETSIGTYPE SigHandler (); #if defined (HAVE_POSIX_SIGNALS) typedef struct sigaction sighandler_cxt; # define rl_sigaction(s, nh, oh) sigaction(s, nh, oh) #else typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt; # define sigemptyset(m) #endif /* !HAVE_POSIX_SIGNALS */ #ifndef SA_RESTART # define SA_RESTART 0 #endif static SigHandler *rl_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *)); static void rl_maybe_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *)); static void rl_maybe_restore_sighandler PARAMS((int, sighandler_cxt *)); static RETSIGTYPE rl_signal_handler PARAMS((int)); static RETSIGTYPE _rl_handle_signal PARAMS((int)); /* Exported variables for use by applications. */ /* If non-zero, readline will install its own signal handlers for SIGINT, SIGTERM, SIGHUP, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ int rl_catch_signals = 1; /* If non-zero, readline will install a signal handler for SIGWINCH. */ #ifdef SIGWINCH int rl_catch_sigwinch = 1; #else int rl_catch_sigwinch = 0; /* for the readline state struct in readline.c */ #endif /* Private variables. */ int _rl_interrupt_immediately = 0; int volatile _rl_caught_signal = 0; /* should be sig_atomic_t, but that requires including everywhere */ /* If non-zero, print characters corresponding to received signals as long as the user has indicated his desire to do so (_rl_echo_control_chars). */ int _rl_echoctl = 0; int _rl_intr_char = 0; int _rl_quit_char = 0; int _rl_susp_char = 0; static int signals_set_flag; static int sigwinch_set_flag; /* **************************************************************** */ /* */ /* Signal Handling */ /* */ /* **************************************************************** */ static sighandler_cxt old_int, old_term, old_hup, old_alrm, old_quit; #if defined (SIGTSTP) static sighandler_cxt old_tstp, old_ttou, old_ttin; #endif #if defined (SIGWINCH) static sighandler_cxt old_winch; #endif _rl_sigcleanup_func_t *_rl_sigcleanup; void *_rl_sigcleanarg; /* Readline signal handler functions. */ /* Called from RL_CHECK_SIGNALS() macro */ RETSIGTYPE _rl_signal_handler (sig) int sig; { _rl_caught_signal = 0; /* XXX */ #if defined (SIGWINCH) if (sig == SIGWINCH) { rl_resize_terminal (); /* XXX - experimental for now */ /* Call a signal hook because though we called the original signal handler in rl_sigwinch_handler below, we will not resend the signal to ourselves. */ if (rl_signal_event_hook) (*rl_signal_event_hook) (); } else #endif _rl_handle_signal (sig); SIGHANDLER_RETURN; } static RETSIGTYPE rl_signal_handler (sig) int sig; { if (_rl_interrupt_immediately) { _rl_interrupt_immediately = 0; _rl_handle_signal (sig); } else _rl_caught_signal = sig; SIGHANDLER_RETURN; } static RETSIGTYPE _rl_handle_signal (sig) int sig; { #if defined (HAVE_POSIX_SIGNALS) sigset_t set; #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) long omask; # else /* !HAVE_BSD_SIGNALS */ sighandler_cxt dummy_cxt; /* needed for rl_set_sighandler call */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ RL_SETSTATE(RL_STATE_SIGHANDLER); #if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS) /* Since the signal will not be blocked while we are in the signal handler, ignore it until rl_clear_signals resets the catcher. */ # if defined (SIGALRM) if (sig == SIGINT || sig == SIGALRM) # else if (sig == SIGINT) # endif rl_set_sighandler (sig, SIG_IGN, &dummy_cxt); #endif /* !HAVE_BSD_SIGNALS && !HAVE_POSIX_SIGNALS */ /* If there's a sig cleanup function registered, call it and `deregister' the cleanup function to avoid multiple calls */ if (_rl_sigcleanup) { (*_rl_sigcleanup) (sig, _rl_sigcleanarg); _rl_sigcleanup = 0; _rl_sigcleanarg = 0; } switch (sig) { case SIGINT: _rl_reset_completion_state (); rl_free_line_state (); /* FALLTHROUGH */ case SIGTERM: case SIGHUP: #if defined (SIGTSTP) case SIGTSTP: case SIGTTOU: case SIGTTIN: #endif /* SIGTSTP */ #if defined (SIGALRM) case SIGALRM: #endif #if defined (SIGQUIT) case SIGQUIT: #endif rl_echo_signal_char (sig); rl_cleanup_after_signal (); #if defined (HAVE_POSIX_SIGNALS) sigemptyset (&set); sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set); sigdelset (&set, sig); #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) omask = sigblock (0); # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ #if defined (__EMX__) signal (sig, SIG_ACK); #endif #if defined (HAVE_KILL) kill (getpid (), sig); #else raise (sig); /* assume we have raise */ #endif /* Let the signal that we just sent through. */ #if defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &set, (sigset_t *)NULL); #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) sigsetmask (omask & ~(sigmask (sig))); # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ rl_reset_after_signal (); } RL_UNSETSTATE(RL_STATE_SIGHANDLER); SIGHANDLER_RETURN; } #if defined (SIGWINCH) static RETSIGTYPE rl_sigwinch_handler (sig) int sig; { SigHandler *oh; #if defined (MUST_REINSTALL_SIGHANDLERS) sighandler_cxt dummy_winch; /* We don't want to change old_winch -- it holds the state of SIGWINCH disposition set by the calling application. We need this state because we call the application's SIGWINCH handler after updating our own idea of the screen size. */ rl_set_sighandler (SIGWINCH, rl_sigwinch_handler, &dummy_winch); #endif RL_SETSTATE(RL_STATE_SIGHANDLER); _rl_caught_signal = sig; /* If another sigwinch handler has been installed, call it. */ oh = (SigHandler *)old_winch.sa_handler; if (oh && oh != (SigHandler *)SIG_IGN && oh != (SigHandler *)SIG_DFL) (*oh) (sig); RL_UNSETSTATE(RL_STATE_SIGHANDLER); SIGHANDLER_RETURN; } #endif /* SIGWINCH */ /* Functions to manage signal handling. */ #if !defined (HAVE_POSIX_SIGNALS) static int rl_sigaction (sig, nh, oh) int sig; sighandler_cxt *nh, *oh; { oh->sa_handler = signal (sig, nh->sa_handler); return 0; } #endif /* !HAVE_POSIX_SIGNALS */ /* Set up a readline-specific signal handler, saving the old signal information in OHANDLER. Return the old signal handler, like signal(). */ static SigHandler * rl_set_sighandler (sig, handler, ohandler) int sig; SigHandler *handler; sighandler_cxt *ohandler; { sighandler_cxt old_handler; #if defined (HAVE_POSIX_SIGNALS) struct sigaction act; act.sa_handler = handler; # if defined (SIGWINCH) act.sa_flags = (sig == SIGWINCH) ? SA_RESTART : 0; # else act.sa_flags = 0; # endif /* SIGWINCH */ sigemptyset (&act.sa_mask); sigemptyset (&ohandler->sa_mask); sigaction (sig, &act, &old_handler); #else old_handler.sa_handler = (SigHandler *)signal (sig, handler); #endif /* !HAVE_POSIX_SIGNALS */ /* XXX -- assume we have memcpy */ /* If rl_set_signals is called twice in a row, don't set the old handler to rl_signal_handler, because that would cause infinite recursion. */ if (handler != rl_signal_handler || old_handler.sa_handler != rl_signal_handler) memcpy (ohandler, &old_handler, sizeof (sighandler_cxt)); return (ohandler->sa_handler); } /* Set disposition of SIG to HANDLER, returning old state in OHANDLER. Don't change disposition if OHANDLER indicates the signal was ignored. */ static void rl_maybe_set_sighandler (sig, handler, ohandler) int sig; SigHandler *handler; sighandler_cxt *ohandler; { sighandler_cxt dummy; SigHandler *oh; sigemptyset (&dummy.sa_mask); dummy.sa_flags = 0; oh = rl_set_sighandler (sig, handler, ohandler); if (oh == (SigHandler *)SIG_IGN) rl_sigaction (sig, ohandler, &dummy); } /* Set the disposition of SIG to HANDLER, if HANDLER->sa_handler indicates the signal was not being ignored. MUST only be called for signals whose disposition was changed using rl_maybe_set_sighandler or for which the SIG_IGN check was performed inline (e.g., SIGALRM below). */ static void rl_maybe_restore_sighandler (sig, handler) int sig; sighandler_cxt *handler; { sighandler_cxt dummy; sigemptyset (&dummy.sa_mask); dummy.sa_flags = 0; if (handler->sa_handler != SIG_IGN) rl_sigaction (sig, handler, &dummy); } int rl_set_signals () { sighandler_cxt dummy; SigHandler *oh; #if defined (HAVE_POSIX_SIGNALS) static int sigmask_set = 0; static sigset_t bset, oset; #endif #if defined (HAVE_POSIX_SIGNALS) if (rl_catch_signals && sigmask_set == 0) { sigemptyset (&bset); sigaddset (&bset, SIGINT); sigaddset (&bset, SIGTERM); sigaddset (&bset, SIGHUP); #if defined (SIGQUIT) sigaddset (&bset, SIGQUIT); #endif #if defined (SIGALRM) sigaddset (&bset, SIGALRM); #endif #if defined (SIGTSTP) sigaddset (&bset, SIGTSTP); #endif #if defined (SIGTTIN) sigaddset (&bset, SIGTTIN); #endif #if defined (SIGTTOU) sigaddset (&bset, SIGTTOU); #endif sigmask_set = 1; } #endif /* HAVE_POSIX_SIGNALS */ if (rl_catch_signals && signals_set_flag == 0) { #if defined (HAVE_POSIX_SIGNALS) sigemptyset (&oset); sigprocmask (SIG_BLOCK, &bset, &oset); #endif rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int); rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term); rl_maybe_set_sighandler (SIGHUP, rl_signal_handler, &old_hup); #if defined (SIGQUIT) rl_maybe_set_sighandler (SIGQUIT, rl_signal_handler, &old_quit); #endif #if defined (SIGALRM) oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm); if (oh == (SigHandler *)SIG_IGN) rl_sigaction (SIGALRM, &old_alrm, &dummy); #if defined (HAVE_POSIX_SIGNALS) && defined (SA_RESTART) /* If the application using readline has already installed a signal handler with SA_RESTART, SIGALRM will cause reads to be restarted automatically, so readline should just get out of the way. Since we tested for SIG_IGN above, we can just test for SIG_DFL here. */ if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART)) rl_sigaction (SIGALRM, &old_alrm, &dummy); #endif /* HAVE_POSIX_SIGNALS */ #endif /* SIGALRM */ #if defined (SIGTSTP) rl_maybe_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp); #endif /* SIGTSTP */ #if defined (SIGTTOU) rl_maybe_set_sighandler (SIGTTOU, rl_signal_handler, &old_ttou); #endif /* SIGTTOU */ #if defined (SIGTTIN) rl_maybe_set_sighandler (SIGTTIN, rl_signal_handler, &old_ttin); #endif /* SIGTTIN */ signals_set_flag = 1; #if defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL); #endif } #if defined (SIGWINCH) if (rl_catch_sigwinch && sigwinch_set_flag == 0) { rl_maybe_set_sighandler (SIGWINCH, rl_sigwinch_handler, &old_winch); sigwinch_set_flag = 1; } #endif /* SIGWINCH */ return 0; } int rl_clear_signals () { sighandler_cxt dummy; if (rl_catch_signals && signals_set_flag == 1) { sigemptyset (&dummy.sa_mask); /* Since rl_maybe_set_sighandler doesn't override a SIG_IGN handler, we should in theory not have to restore a handler where old_xxx.sa_handler == SIG_IGN. That's what rl_maybe_restore_sighandler does. Fewer system calls should reduce readline's per-line overhead */ rl_maybe_restore_sighandler (SIGINT, &old_int); rl_maybe_restore_sighandler (SIGTERM, &old_term); rl_maybe_restore_sighandler (SIGHUP, &old_hup); #if defined (SIGQUIT) rl_maybe_restore_sighandler (SIGQUIT, &old_quit); #endif #if defined (SIGALRM) rl_maybe_restore_sighandler (SIGALRM, &old_alrm); #endif #if defined (SIGTSTP) rl_maybe_restore_sighandler (SIGTSTP, &old_tstp); #endif /* SIGTSTP */ #if defined (SIGTTOU) rl_maybe_restore_sighandler (SIGTTOU, &old_ttou); #endif /* SIGTTOU */ #if defined (SIGTTIN) rl_maybe_restore_sighandler (SIGTTIN, &old_ttin); #endif /* SIGTTIN */ signals_set_flag = 0; } #if defined (SIGWINCH) if (rl_catch_sigwinch && sigwinch_set_flag == 1) { sigemptyset (&dummy.sa_mask); rl_sigaction (SIGWINCH, &old_winch, &dummy); sigwinch_set_flag = 0; } #endif return 0; } /* Clean up the terminal and readline state after catching a signal, before resending it to the calling application. */ void rl_cleanup_after_signal () { _rl_clean_up_for_exit (); if (rl_deprep_term_function) (*rl_deprep_term_function) (); rl_clear_pending_input (); rl_clear_signals (); } /* Reset the terminal and readline state after a signal handler returns. */ void rl_reset_after_signal () { if (rl_prep_term_function) (*rl_prep_term_function) (_rl_meta_flag); rl_set_signals (); } /* Free up the readline variable line state for the current line (undo list, any partial history entry, any keyboard macros in progress, and any numeric arguments in process) after catching a signal, before calling rl_cleanup_after_signal(). */ void rl_free_line_state () { register HIST_ENTRY *entry; rl_free_undo_list (); entry = current_history (); if (entry) entry->data = (char *)NULL; _rl_kill_kbd_macro (); rl_clear_message (); _rl_reset_argument (); } #endif /* HANDLE_SIGNALS */ /* **************************************************************** */ /* */ /* SIGINT Management */ /* */ /* **************************************************************** */ #if defined (HAVE_POSIX_SIGNALS) static sigset_t sigint_set, sigint_oset; static sigset_t sigwinch_set, sigwinch_oset; #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) static int sigint_oldmask; static int sigwinch_oldmask; # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ static int sigint_blocked; static int sigwinch_blocked; /* Cause SIGINT to not be delivered until the corresponding call to release_sigint(). */ void _rl_block_sigint () { if (sigint_blocked) return; sigint_blocked = 1; } /* Allow SIGINT to be delivered. */ void _rl_release_sigint () { if (sigint_blocked == 0) return; sigint_blocked = 0; RL_CHECK_SIGNALS (); } /* Cause SIGWINCH to not be delivered until the corresponding call to release_sigwinch(). */ void _rl_block_sigwinch () { if (sigwinch_blocked) return; #if defined (SIGWINCH) #if defined (HAVE_POSIX_SIGNALS) sigemptyset (&sigwinch_set); sigemptyset (&sigwinch_oset); sigaddset (&sigwinch_set, SIGWINCH); sigprocmask (SIG_BLOCK, &sigwinch_set, &sigwinch_oset); #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) sigwinch_oldmask = sigblock (sigmask (SIGWINCH)); # else /* !HAVE_BSD_SIGNALS */ # if defined (HAVE_USG_SIGHOLD) sighold (SIGWINCH); # endif /* HAVE_USG_SIGHOLD */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ #endif /* SIGWINCH */ sigwinch_blocked = 1; } /* Allow SIGWINCH to be delivered. */ void _rl_release_sigwinch () { if (sigwinch_blocked == 0) return; #if defined (SIGWINCH) #if defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &sigwinch_oset, (sigset_t *)NULL); #else # if defined (HAVE_BSD_SIGNALS) sigsetmask (sigwinch_oldmask); # else /* !HAVE_BSD_SIGNALS */ # if defined (HAVE_USG_SIGHOLD) sigrelse (SIGWINCH); # endif /* HAVE_USG_SIGHOLD */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ #endif /* SIGWINCH */ sigwinch_blocked = 0; } /* **************************************************************** */ /* */ /* Echoing special control characters */ /* */ /* **************************************************************** */ void rl_echo_signal_char (sig) int sig; { char cstr[3]; int cslen, c; if (_rl_echoctl == 0 || _rl_echo_control_chars == 0) return; switch (sig) { case SIGINT: c = _rl_intr_char; break; #if defined (SIGQUIT) case SIGQUIT: c = _rl_quit_char; break; #endif #if defined (SIGTSTP) case SIGTSTP: c = _rl_susp_char; break; #endif default: return; } if (CTRL_CHAR (c) || c == RUBOUT) { cstr[0] = '^'; cstr[1] = CTRL_CHAR (c) ? UNCTRL (c) : '?'; cstr[cslen = 2] = '\0'; } else { cstr[0] = c; cstr[cslen = 1] = '\0'; } _rl_output_some_chars (cstr, cslen); } readline-6.3/terminal.c0000664000043600000000000004760012216323241013725 0ustar chetwheel/* terminal.c -- controlling the terminal with termcap. */ /* Copyright (C) 1996-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include "posixstat.h" #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ) # include #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ #ifdef __MSDOS__ # include #endif #include "rltty.h" #include "tcap.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #if defined (__MINGW32__) # include # include static void _win_get_screensize PARAMS((int *, int *)); #endif #if defined (__EMX__) static void _emx_get_screensize PARAMS((int *, int *)); #endif /* If the calling application sets this to a non-zero value, readline will use the $LINES and $COLUMNS environment variables to set its idea of the window size before interrogating the kernel. */ int rl_prefer_env_winsize = 0; /* If this is non-zero, readline will set LINES and COLUMNS in the environment when it handles SIGWINCH. */ int rl_change_environment = 1; /* **************************************************************** */ /* */ /* Terminal and Termcap */ /* */ /* **************************************************************** */ #ifndef __MSDOS__ static char *term_buffer = (char *)NULL; static char *term_string_buffer = (char *)NULL; #endif static int tcap_initialized; #if !defined (__linux__) && !defined (NCURSES_VERSION) # if defined (__EMX__) || defined (NEED_EXTERN_PC) extern # endif /* __EMX__ || NEED_EXTERN_PC */ char PC, *BC, *UP; #endif /* !__linux__ && !NCURSES_VERSION */ /* Some strings to control terminal actions. These are output by tputs (). */ char *_rl_term_clreol; char *_rl_term_clrpag; char *_rl_term_cr; char *_rl_term_backspace; char *_rl_term_goto; char *_rl_term_pc; /* Non-zero if we determine that the terminal can do character insertion. */ int _rl_terminal_can_insert = 0; /* How to insert characters. */ char *_rl_term_im; char *_rl_term_ei; char *_rl_term_ic; char *_rl_term_ip; char *_rl_term_IC; /* How to delete characters. */ char *_rl_term_dc; char *_rl_term_DC; char *_rl_term_forward_char; /* How to go up a line. */ char *_rl_term_up; /* A visible bell; char if the terminal can be made to flash the screen. */ static char *_rl_visible_bell; /* Non-zero means the terminal can auto-wrap lines. */ int _rl_term_autowrap = -1; /* Non-zero means that this terminal has a meta key. */ static int term_has_meta; /* The sequences to write to turn on and off the meta key, if this terminal has one. */ static char *_rl_term_mm; static char *_rl_term_mo; /* The key sequences output by the arrow keys, if this terminal has any. */ static char *_rl_term_ku; static char *_rl_term_kd; static char *_rl_term_kr; static char *_rl_term_kl; /* How to initialize and reset the arrow keys, if this terminal has any. */ static char *_rl_term_ks; static char *_rl_term_ke; /* The key sequences sent by the Home and End keys, if any. */ static char *_rl_term_kh; static char *_rl_term_kH; static char *_rl_term_at7; /* @7 */ /* Delete key */ static char *_rl_term_kD; /* Insert key */ static char *_rl_term_kI; /* Cursor control */ static char *_rl_term_vs; /* very visible */ static char *_rl_term_ve; /* normal */ static void bind_termcap_arrow_keys PARAMS((Keymap)); /* Variables that hold the screen dimensions, used by the display code. */ int _rl_screenwidth, _rl_screenheight, _rl_screenchars; /* Non-zero means the user wants to enable the keypad. */ int _rl_enable_keypad; /* Non-zero means the user wants to enable a meta key. */ int _rl_enable_meta = 1; #if defined (__EMX__) static void _emx_get_screensize (swp, shp) int *swp, *shp; { int sz[2]; _scrsize (sz); if (swp) *swp = sz[0]; if (shp) *shp = sz[1]; } #endif #if defined (__MINGW32__) static void _win_get_screensize (swp, shp) int *swp, *shp; { HANDLE hConOut; CONSOLE_SCREEN_BUFFER_INFO scr; hConOut = GetStdHandle (STD_OUTPUT_HANDLE); if (hConOut != INVALID_HANDLE_VALUE) { if (GetConsoleScreenBufferInfo (hConOut, &scr)) { *swp = scr.dwSize.X; *shp = scr.srWindow.Bottom - scr.srWindow.Top + 1; } } } #endif /* Get readline's idea of the screen size. TTY is a file descriptor open to the terminal. If IGNORE_ENV is true, we do not pay attention to the values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being non-null serve to check whether or not we have initialized termcap. */ void _rl_get_screen_size (tty, ignore_env) int tty, ignore_env; { char *ss; #if defined (TIOCGWINSZ) struct winsize window_size; #endif /* TIOCGWINSZ */ int wr, wc; wr = wc = -1; #if defined (TIOCGWINSZ) if (ioctl (tty, TIOCGWINSZ, &window_size) == 0) { wc = (int) window_size.ws_col; wr = (int) window_size.ws_row; } #endif /* TIOCGWINSZ */ #if defined (__EMX__) _emx_get_screensize (&wc, &wr); #elif defined (__MINGW32__) _win_get_screensize (&wc, &wr); #endif if (ignore_env || rl_prefer_env_winsize == 0) { _rl_screenwidth = wc; _rl_screenheight = wr; } else _rl_screenwidth = _rl_screenheight = -1; /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV is unset. If we prefer the environment, check it first before assigning the value returned by the kernel. */ if (_rl_screenwidth <= 0) { if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS"))) _rl_screenwidth = atoi (ss); if (_rl_screenwidth <= 0) _rl_screenwidth = wc; #if defined (__DJGPP__) if (_rl_screenwidth <= 0) _rl_screenwidth = ScreenCols (); #else if (_rl_screenwidth <= 0 && term_string_buffer) _rl_screenwidth = tgetnum ("co"); #endif } /* Environment variable LINES overrides setting of "li" if IGNORE_ENV is unset. */ if (_rl_screenheight <= 0) { if (ignore_env == 0 && (ss = sh_get_env_value ("LINES"))) _rl_screenheight = atoi (ss); if (_rl_screenheight <= 0) _rl_screenheight = wr; #if defined (__DJGPP__) if (_rl_screenheight <= 0) _rl_screenheight = ScreenRows (); #else if (_rl_screenheight <= 0 && term_string_buffer) _rl_screenheight = tgetnum ("li"); #endif } /* If all else fails, default to 80x24 terminal. */ if (_rl_screenwidth <= 1) _rl_screenwidth = 80; if (_rl_screenheight <= 0) _rl_screenheight = 24; /* If we're being compiled as part of bash, set the environment variables $LINES and $COLUMNS to new values. Otherwise, just do a pair of putenv () or setenv () calls. */ if (rl_change_environment) sh_set_lines_and_columns (_rl_screenheight, _rl_screenwidth); if (_rl_term_autowrap == 0) _rl_screenwidth--; _rl_screenchars = _rl_screenwidth * _rl_screenheight; } void _rl_set_screen_size (rows, cols) int rows, cols; { if (_rl_term_autowrap == -1) _rl_init_terminal_io (rl_terminal_name); if (rows > 0) _rl_screenheight = rows; if (cols > 0) { _rl_screenwidth = cols; if (_rl_term_autowrap == 0) _rl_screenwidth--; } if (rows > 0 || cols > 0) _rl_screenchars = _rl_screenwidth * _rl_screenheight; } void rl_set_screen_size (rows, cols) int rows, cols; { _rl_set_screen_size (rows, cols); } void rl_get_screen_size (rows, cols) int *rows, *cols; { if (rows) *rows = _rl_screenheight; if (cols) *cols = _rl_screenwidth; } void rl_reset_screen_size () { _rl_get_screen_size (fileno (rl_instream), 0); } void _rl_sigwinch_resize_terminal () { _rl_get_screen_size (fileno (rl_instream), 1); } void rl_resize_terminal () { _rl_get_screen_size (fileno (rl_instream), 1); if (_rl_echoing_p) { if (CUSTOM_REDISPLAY_FUNC ()) rl_forced_update_display (); else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0) _rl_redisplay_after_sigwinch (); } } struct _tc_string { const char * const tc_var; char **tc_value; }; /* This should be kept sorted, just in case we decide to change the search algorithm to something smarter. */ static const struct _tc_string tc_strings[] = { { "@7", &_rl_term_at7 }, { "DC", &_rl_term_DC }, { "IC", &_rl_term_IC }, { "ce", &_rl_term_clreol }, { "cl", &_rl_term_clrpag }, { "cr", &_rl_term_cr }, { "dc", &_rl_term_dc }, { "ei", &_rl_term_ei }, { "ic", &_rl_term_ic }, { "im", &_rl_term_im }, { "kD", &_rl_term_kD }, /* delete */ { "kH", &_rl_term_kH }, /* home down ?? */ { "kI", &_rl_term_kI }, /* insert */ { "kd", &_rl_term_kd }, { "ke", &_rl_term_ke }, /* end keypad mode */ { "kh", &_rl_term_kh }, /* home */ { "kl", &_rl_term_kl }, { "kr", &_rl_term_kr }, { "ks", &_rl_term_ks }, /* start keypad mode */ { "ku", &_rl_term_ku }, { "le", &_rl_term_backspace }, { "mm", &_rl_term_mm }, { "mo", &_rl_term_mo }, { "nd", &_rl_term_forward_char }, { "pc", &_rl_term_pc }, { "up", &_rl_term_up }, { "vb", &_rl_visible_bell }, { "vs", &_rl_term_vs }, { "ve", &_rl_term_ve }, }; #define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string)) /* Read the desired terminal capability strings into BP. The capabilities are described in the TC_STRINGS table. */ static void get_term_capabilities (bp) char **bp; { #if !defined (__DJGPP__) /* XXX - doesn't DJGPP have a termcap library? */ register int i; for (i = 0; i < NUM_TC_STRINGS; i++) *(tc_strings[i].tc_value) = tgetstr ((char *)tc_strings[i].tc_var, bp); #endif tcap_initialized = 1; } int _rl_init_terminal_io (terminal_name) const char *terminal_name; { const char *term; char *buffer; int tty, tgetent_ret; term = terminal_name ? terminal_name : sh_get_env_value ("TERM"); _rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL; tty = rl_instream ? fileno (rl_instream) : 0; if (term == 0) term = "dumb"; #ifdef __MSDOS__ _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL; _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL; _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL; _rl_term_mm = _rl_term_mo = (char *)NULL; _rl_terminal_can_insert = term_has_meta = _rl_term_autowrap = 0; _rl_term_cr = "\r"; _rl_term_clreol = _rl_term_clrpag = _rl_term_backspace = (char *)NULL; _rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL; _rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL; _rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL; #if defined(HACK_TERMCAP_MOTION) _rl_term_forward_char = (char *)NULL; #endif _rl_get_screen_size (tty, 0); #else /* !__MSDOS__ */ /* I've separated this out for later work on not calling tgetent at all if the calling application has supplied a custom redisplay function, (and possibly if the application has supplied a custom input function). */ if (CUSTOM_REDISPLAY_FUNC()) { tgetent_ret = -1; } else { if (term_string_buffer == 0) term_string_buffer = (char *)xmalloc(2032); if (term_buffer == 0) term_buffer = (char *)xmalloc(4080); buffer = term_string_buffer; tgetent_ret = tgetent (term_buffer, term); } if (tgetent_ret <= 0) { FREE (term_string_buffer); FREE (term_buffer); buffer = term_buffer = term_string_buffer = (char *)NULL; _rl_term_autowrap = 0; /* used by _rl_get_screen_size */ /* Allow calling application to set default height and width, using rl_set_screen_size */ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0) { #if defined (__EMX__) _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight); _rl_screenwidth--; #else /* !__EMX__ */ _rl_get_screen_size (tty, 0); #endif /* !__EMX__ */ } /* Defaults. */ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0) { _rl_screenwidth = 79; _rl_screenheight = 24; } /* Everything below here is used by the redisplay code (tputs). */ _rl_screenchars = _rl_screenwidth * _rl_screenheight; _rl_term_cr = "\r"; _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL; _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL; _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL; _rl_term_kh = _rl_term_kH = _rl_term_kI = _rl_term_kD = (char *)NULL; _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL; _rl_term_mm = _rl_term_mo = (char *)NULL; _rl_term_ve = _rl_term_vs = (char *)NULL; _rl_term_forward_char = (char *)NULL; _rl_terminal_can_insert = term_has_meta = 0; /* Reasonable defaults for tgoto(). Readline currently only uses tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we change that later... */ PC = '\0'; BC = _rl_term_backspace = "\b"; UP = _rl_term_up; return 0; } get_term_capabilities (&buffer); /* Set up the variables that the termcap library expects the application to provide. */ PC = _rl_term_pc ? *_rl_term_pc : 0; BC = _rl_term_backspace; UP = _rl_term_up; if (!_rl_term_cr) _rl_term_cr = "\r"; _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn"); /* Allow calling application to set default height and width, using rl_set_screen_size */ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0) _rl_get_screen_size (tty, 0); /* "An application program can assume that the terminal can do character insertion if *any one of* the capabilities `IC', `im', `ic' or `ip' is provided." But we can't do anything if only `ip' is provided, so... */ _rl_terminal_can_insert = (_rl_term_IC || _rl_term_im || _rl_term_ic); /* Check to see if this terminal has a meta key and clear the capability variables if there is none. */ term_has_meta = tgetflag ("km") != 0; if (term_has_meta == 0) _rl_term_mm = _rl_term_mo = (char *)NULL; #endif /* !__MSDOS__ */ /* Attempt to find and bind the arrow keys. Do not override already bound keys in an overzealous attempt, however. */ bind_termcap_arrow_keys (emacs_standard_keymap); #if defined (VI_MODE) bind_termcap_arrow_keys (vi_movement_keymap); bind_termcap_arrow_keys (vi_insertion_keymap); #endif /* VI_MODE */ return 0; } /* Bind the arrow key sequences from the termcap description in MAP. */ static void bind_termcap_arrow_keys (map) Keymap map; { Keymap xkeymap; xkeymap = _rl_keymap; _rl_keymap = map; rl_bind_keyseq_if_unbound (_rl_term_ku, rl_get_previous_history); rl_bind_keyseq_if_unbound (_rl_term_kd, rl_get_next_history); rl_bind_keyseq_if_unbound (_rl_term_kr, rl_forward_char); rl_bind_keyseq_if_unbound (_rl_term_kl, rl_backward_char); rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line); /* Home */ rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line); /* End */ rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete); _rl_keymap = xkeymap; } char * rl_get_termcap (cap) const char *cap; { register int i; if (tcap_initialized == 0) return ((char *)NULL); for (i = 0; i < NUM_TC_STRINGS; i++) { if (tc_strings[i].tc_var[0] == cap[0] && strcmp (tc_strings[i].tc_var, cap) == 0) return *(tc_strings[i].tc_value); } return ((char *)NULL); } /* Re-initialize the terminal considering that the TERM/TERMCAP variable has changed. */ int rl_reset_terminal (terminal_name) const char *terminal_name; { _rl_screenwidth = _rl_screenheight = 0; _rl_init_terminal_io (terminal_name); return 0; } /* A function for the use of tputs () */ #ifdef _MINIX void _rl_output_character_function (c) int c; { putc (c, _rl_out_stream); } #else /* !_MINIX */ int _rl_output_character_function (c) int c; { return putc (c, _rl_out_stream); } #endif /* !_MINIX */ /* Write COUNT characters from STRING to the output stream. */ void _rl_output_some_chars (string, count) const char *string; int count; { fwrite (string, 1, count, _rl_out_stream); } /* Move the cursor back. */ int _rl_backspace (count) int count; { register int i; #ifndef __MSDOS__ if (_rl_term_backspace) for (i = 0; i < count; i++) tputs (_rl_term_backspace, 1, _rl_output_character_function); else #endif for (i = 0; i < count; i++) putc ('\b', _rl_out_stream); return 0; } /* Move to the start of the next line. */ int rl_crlf () { #if defined (NEW_TTY_DRIVER) || defined (__MINT__) if (_rl_term_cr) tputs (_rl_term_cr, 1, _rl_output_character_function); #endif /* NEW_TTY_DRIVER || __MINT__ */ putc ('\n', _rl_out_stream); return 0; } /* Ring the terminal bell. */ int rl_ding () { if (_rl_echoing_p) { switch (_rl_bell_preference) { case NO_BELL: default: break; case VISIBLE_BELL: if (_rl_visible_bell) { #ifdef __DJGPP__ ScreenVisualBell (); #else tputs (_rl_visible_bell, 1, _rl_output_character_function); #endif break; } /* FALLTHROUGH */ case AUDIBLE_BELL: fprintf (stderr, "\007"); fflush (stderr); break; } return (0); } return (-1); } /* **************************************************************** */ /* */ /* Controlling the Meta Key and Keypad */ /* */ /* **************************************************************** */ static int enabled_meta = 0; /* flag indicating we enabled meta mode */ void _rl_enable_meta_key () { #if !defined (__DJGPP__) if (term_has_meta && _rl_term_mm) { tputs (_rl_term_mm, 1, _rl_output_character_function); enabled_meta = 1; } #endif } void _rl_disable_meta_key () { #if !defined (__DJGPP__) if (term_has_meta && _rl_term_mo && enabled_meta) { tputs (_rl_term_mo, 1, _rl_output_character_function); enabled_meta = 0; } #endif } void _rl_control_keypad (on) int on; { #if !defined (__DJGPP__) if (on && _rl_term_ks) tputs (_rl_term_ks, 1, _rl_output_character_function); else if (!on && _rl_term_ke) tputs (_rl_term_ke, 1, _rl_output_character_function); #endif } /* **************************************************************** */ /* */ /* Controlling the Cursor */ /* */ /* **************************************************************** */ /* Set the cursor appropriately depending on IM, which is one of the insert modes (insert or overwrite). Insert mode gets the normal cursor. Overwrite mode gets a very visible cursor. Only does anything if we have both capabilities. */ void _rl_set_cursor (im, force) int im, force; { #ifndef __MSDOS__ if (_rl_term_ve && _rl_term_vs) { if (force || im != rl_insert_mode) { if (im == RL_IM_OVERWRITE) tputs (_rl_term_vs, 1, _rl_output_character_function); else tputs (_rl_term_ve, 1, _rl_output_character_function); } } #endif } readline-6.3/text.c0000664000043600000240000011221412226770261013106 0ustar chetstaff/* text.c -- text handling commands for readline. */ /* Copyright (C) 1987-2010 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (__EMX__) # define INCL_DOSPROCESS # include #endif /* __EMX__ */ /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" /* Forward declarations. */ static int rl_change_case PARAMS((int, int)); static int _rl_char_search PARAMS((int, int, int)); #if defined (READLINE_CALLBACKS) static int _rl_insert_next_callback PARAMS((_rl_callback_generic_arg *)); static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *)); #endif /* The largest chunk of text that can be inserted in one call to rl_insert_text. Text blocks larger than this are divided. */ #define TEXT_COUNT_MAX 1024 /* **************************************************************** */ /* */ /* Insert and Delete */ /* */ /* **************************************************************** */ /* Insert a string of text into the line at point. This is the only way that you should do insertion. _rl_insert_char () calls this function. Returns the number of characters inserted. */ int rl_insert_text (string) const char *string; { register int i, l; l = (string && *string) ? strlen (string) : 0; if (l == 0) return 0; if (rl_end + l >= rl_line_buffer_len) rl_extend_line_buffer (rl_end + l); for (i = rl_end; i >= rl_point; i--) rl_line_buffer[i + l] = rl_line_buffer[i]; strncpy (rl_line_buffer + rl_point, string, l); /* Remember how to undo this if we aren't undoing something. */ if (_rl_doing_an_undo == 0) { /* If possible and desirable, concatenate the undos. */ if ((l == 1) && rl_undo_list && (rl_undo_list->what == UNDO_INSERT) && (rl_undo_list->end == rl_point) && (rl_undo_list->end - rl_undo_list->start < 20)) rl_undo_list->end++; else rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *)NULL); } rl_point += l; rl_end += l; rl_line_buffer[rl_end] = '\0'; return l; } /* Delete the string between FROM and TO. FROM is inclusive, TO is not. Returns the number of characters deleted. */ int rl_delete_text (from, to) int from, to; { register char *text; register int diff, i; /* Fix it if the caller is confused. */ if (from > to) SWAP (from, to); /* fix boundaries */ if (to > rl_end) { to = rl_end; if (from > to) from = to; } if (from < 0) from = 0; text = rl_copy_text (from, to); /* Some versions of strncpy() can't handle overlapping arguments. */ diff = to - from; for (i = from; i < rl_end - diff; i++) rl_line_buffer[i] = rl_line_buffer[i + diff]; /* Remember how to undo this delete. */ if (_rl_doing_an_undo == 0) rl_add_undo (UNDO_DELETE, from, to, text); else xfree (text); rl_end -= diff; rl_line_buffer[rl_end] = '\0'; return (diff); } /* Fix up point so that it is within the line boundaries after killing text. If FIX_MARK_TOO is non-zero, the mark is forced within line boundaries also. */ #define _RL_FIX_POINT(x) \ do { \ if (x > rl_end) \ x = rl_end; \ else if (x < 0) \ x = 0; \ } while (0) void _rl_fix_point (fix_mark_too) int fix_mark_too; { _RL_FIX_POINT (rl_point); if (fix_mark_too) _RL_FIX_POINT (rl_mark); } #undef _RL_FIX_POINT /* Replace the contents of the line buffer between START and END with TEXT. The operation is undoable. To replace the entire line in an undoable mode, use _rl_replace_text(text, 0, rl_end); */ int _rl_replace_text (text, start, end) const char *text; int start, end; { int n; n = 0; rl_begin_undo_group (); if (start <= end) rl_delete_text (start, end + 1); rl_point = start; if (*text) n = rl_insert_text (text); rl_end_undo_group (); return n; } /* Replace the current line buffer contents with TEXT. If CLEAR_UNDO is non-zero, we free the current undo list. */ void rl_replace_line (text, clear_undo) const char *text; int clear_undo; { int len; len = strlen (text); if (len >= rl_line_buffer_len) rl_extend_line_buffer (len); strcpy (rl_line_buffer, text); rl_end = len; if (clear_undo) rl_free_undo_list (); _rl_fix_point (1); } /* **************************************************************** */ /* */ /* Readline character functions */ /* */ /* **************************************************************** */ /* This is not a gap editor, just a stupid line input routine. No hair is involved in writing any of the functions, and none should be. */ /* Note that: rl_end is the place in the string that we would place '\0'; i.e., it is always safe to place '\0' there. rl_point is the place in the string where the cursor is. Sometimes this is the same as rl_end. Any command that is called interactively receives two arguments. The first is a count: the numeric arg passed to this command. The second is the key which invoked this command. */ /* **************************************************************** */ /* */ /* Movement Commands */ /* */ /* **************************************************************** */ /* Note that if you `optimize' the display for these functions, you cannot use said functions in other functions which do not do optimizing display. I.e., you will have to update the data base for rl_redisplay, and you might as well let rl_redisplay do that job. */ /* Move forward COUNT bytes. */ int rl_forward_byte (count, key) int count, key; { if (count < 0) return (rl_backward_byte (-count, key)); if (count > 0) { int end, lend; end = rl_point + count; #if defined (VI_MODE) lend = rl_end > 0 ? rl_end - (VI_COMMAND_MODE()) : rl_end; #else lend = rl_end; #endif if (end > lend) { rl_point = lend; rl_ding (); } else rl_point = end; } if (rl_end < 0) rl_end = 0; return 0; } int _rl_forward_char_internal (count) int count; { int point; #if defined (HANDLE_MULTIBYTE) point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); #if defined (VI_MODE) if (point >= rl_end && VI_COMMAND_MODE()) point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO); #endif if (rl_end < 0) rl_end = 0; #else point = rl_point + count; if (point > rl_end) point = rl_end; #endif return (point); } #if defined (HANDLE_MULTIBYTE) /* Move forward COUNT characters. */ int rl_forward_char (count, key) int count, key; { int point; if (MB_CUR_MAX == 1 || rl_byte_oriented) return (rl_forward_byte (count, key)); if (count < 0) return (rl_backward_char (-count, key)); if (count > 0) { if (rl_point == rl_end && EMACS_MODE()) { rl_ding (); return 0; } point = _rl_forward_char_internal (count); if (rl_point == point) rl_ding (); rl_point = point; } return 0; } #else /* !HANDLE_MULTIBYTE */ int rl_forward_char (count, key) int count, key; { return (rl_forward_byte (count, key)); } #endif /* !HANDLE_MULTIBYTE */ /* Backwards compatibility. */ int rl_forward (count, key) int count, key; { return (rl_forward_char (count, key)); } /* Move backward COUNT bytes. */ int rl_backward_byte (count, key) int count, key; { if (count < 0) return (rl_forward_byte (-count, key)); if (count > 0) { if (rl_point < count) { rl_point = 0; rl_ding (); } else rl_point -= count; } if (rl_point < 0) rl_point = 0; return 0; } #if defined (HANDLE_MULTIBYTE) /* Move backward COUNT characters. */ int rl_backward_char (count, key) int count, key; { int point; if (MB_CUR_MAX == 1 || rl_byte_oriented) return (rl_backward_byte (count, key)); if (count < 0) return (rl_forward_char (-count, key)); if (count > 0) { point = rl_point; while (count > 0 && point > 0) { point = _rl_find_prev_mbchar (rl_line_buffer, point, MB_FIND_NONZERO); count--; } if (count > 0) { rl_point = 0; rl_ding (); } else rl_point = point; } return 0; } #else int rl_backward_char (count, key) int count, key; { return (rl_backward_byte (count, key)); } #endif /* Backwards compatibility. */ int rl_backward (count, key) int count, key; { return (rl_backward_char (count, key)); } /* Move to the beginning of the line. */ int rl_beg_of_line (count, key) int count, key; { rl_point = 0; return 0; } /* Move to the end of the line. */ int rl_end_of_line (count, key) int count, key; { rl_point = rl_end; return 0; } /* Move forward a word. We do what Emacs does. Handles multibyte chars. */ int rl_forward_word (count, key) int count, key; { int c; if (count < 0) return (rl_backward_word (-count, key)); while (count) { if (rl_point == rl_end) return 0; /* If we are not in a word, move forward until we are in one. Then, move forward until we hit a non-alphabetic character. */ c = _rl_char_value (rl_line_buffer, rl_point); if (_rl_walphabetic (c) == 0) { rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); while (rl_point < rl_end) { c = _rl_char_value (rl_line_buffer, rl_point); if (_rl_walphabetic (c)) break; rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); } } if (rl_point == rl_end) return 0; rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); while (rl_point < rl_end) { c = _rl_char_value (rl_line_buffer, rl_point); if (_rl_walphabetic (c) == 0) break; rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); } --count; } return 0; } /* Move backward a word. We do what Emacs does. Handles multibyte chars. */ int rl_backward_word (count, key) int count, key; { int c, p; if (count < 0) return (rl_forward_word (-count, key)); while (count) { if (rl_point == 0) return 0; /* Like rl_forward_word (), except that we look at the characters just before point. */ p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); c = _rl_char_value (rl_line_buffer, p); if (_rl_walphabetic (c) == 0) { rl_point = p; while (rl_point > 0) { p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); c = _rl_char_value (rl_line_buffer, p); if (_rl_walphabetic (c)) break; rl_point = p; } } while (rl_point) { p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); c = _rl_char_value (rl_line_buffer, p); if (_rl_walphabetic (c) == 0) break; else rl_point = p; } --count; } return 0; } /* Clear the current line. Numeric argument to C-l does this. */ int rl_refresh_line (ignore1, ignore2) int ignore1, ignore2; { int curr_line; curr_line = _rl_current_display_line (); _rl_move_vert (curr_line); _rl_move_cursor_relative (0, rl_line_buffer); /* XXX is this right */ _rl_clear_to_eol (0); /* arg of 0 means to not use spaces */ rl_forced_update_display (); rl_display_fixed = 1; return 0; } /* C-l typed to a line without quoting clears the screen, and then reprints the prompt and the current input line. Given a numeric arg, redraw only the current line. */ int rl_clear_screen (count, key) int count, key; { if (rl_explicit_arg) { rl_refresh_line (count, key); return 0; } _rl_clear_screen (); /* calls termcap function to clear screen */ rl_forced_update_display (); rl_display_fixed = 1; return 0; } int rl_skip_csi_sequence (count, key) int count, key; { int ch; RL_SETSTATE (RL_STATE_MOREINPUT); do ch = rl_read_key (); while (ch >= 0x20 && ch < 0x40); RL_UNSETSTATE (RL_STATE_MOREINPUT); return 0; } int rl_arrow_keys (count, c) int count, c; { int ch; RL_SETSTATE(RL_STATE_MOREINPUT); ch = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); switch (_rl_to_upper (ch)) { case 'A': rl_get_previous_history (count, ch); break; case 'B': rl_get_next_history (count, ch); break; case 'C': if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_forward_char (count, ch); else rl_forward_byte (count, ch); break; case 'D': if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_backward_char (count, ch); else rl_backward_byte (count, ch); break; default: rl_ding (); } return 0; } /* **************************************************************** */ /* */ /* Text commands */ /* */ /* **************************************************************** */ #ifdef HANDLE_MULTIBYTE static char pending_bytes[MB_LEN_MAX]; static int pending_bytes_length = 0; static mbstate_t ps = {0}; #endif /* Insert the character C at the current location, moving point forward. If C introduces a multibyte sequence, we read the whole sequence and then insert the multibyte char into the line buffer. */ int _rl_insert_char (count, c) int count, c; { register int i; char *string; #ifdef HANDLE_MULTIBYTE int string_size; char incoming[MB_LEN_MAX + 1]; int incoming_length = 0; mbstate_t ps_back; static int stored_count = 0; #endif if (count <= 0) return 0; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX == 1 || rl_byte_oriented) { incoming[0] = c; incoming[1] = '\0'; incoming_length = 1; } else { wchar_t wc; size_t ret; if (stored_count <= 0) stored_count = count; else count = stored_count; ps_back = ps; pending_bytes[pending_bytes_length++] = c; ret = mbrtowc (&wc, pending_bytes, pending_bytes_length, &ps); if (ret == (size_t)-2) { /* Bytes too short to compose character, try to wait for next byte. Restore the state of the byte sequence, because in this case the effect of mbstate is undefined. */ ps = ps_back; return 1; } else if (ret == (size_t)-1) { /* Invalid byte sequence for the current locale. Treat first byte as a single character. */ incoming[0] = pending_bytes[0]; incoming[1] = '\0'; incoming_length = 1; pending_bytes_length--; memmove (pending_bytes, pending_bytes + 1, pending_bytes_length); /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else if (ret == (size_t)0) { incoming[0] = '\0'; incoming_length = 0; pending_bytes_length--; /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else { /* We successfully read a single multibyte character. */ memcpy (incoming, pending_bytes, pending_bytes_length); incoming[pending_bytes_length] = '\0'; incoming_length = pending_bytes_length; pending_bytes_length = 0; } } #endif /* HANDLE_MULTIBYTE */ /* If we can optimize, then do it. But don't let people crash readline because of extra large arguments. */ if (count > 1 && count <= TEXT_COUNT_MAX) { #if defined (HANDLE_MULTIBYTE) string_size = count * incoming_length; string = (char *)xmalloc (1 + string_size); i = 0; while (i < string_size) { strncpy (string + i, incoming, incoming_length); i += incoming_length; } incoming_length = 0; stored_count = 0; #else /* !HANDLE_MULTIBYTE */ string = (char *)xmalloc (1 + count); for (i = 0; i < count; i++) string[i] = c; #endif /* !HANDLE_MULTIBYTE */ string[i] = '\0'; rl_insert_text (string); xfree (string); return 0; } if (count > TEXT_COUNT_MAX) { int decreaser; #if defined (HANDLE_MULTIBYTE) string_size = incoming_length * TEXT_COUNT_MAX; string = (char *)xmalloc (1 + string_size); i = 0; while (i < string_size) { strncpy (string + i, incoming, incoming_length); i += incoming_length; } while (count) { decreaser = (count > TEXT_COUNT_MAX) ? TEXT_COUNT_MAX : count; string[decreaser*incoming_length] = '\0'; rl_insert_text (string); count -= decreaser; } xfree (string); incoming_length = 0; stored_count = 0; #else /* !HANDLE_MULTIBYTE */ char str[TEXT_COUNT_MAX+1]; for (i = 0; i < TEXT_COUNT_MAX; i++) str[i] = c; while (count) { decreaser = (count > TEXT_COUNT_MAX ? TEXT_COUNT_MAX : count); str[decreaser] = '\0'; rl_insert_text (str); count -= decreaser; } #endif /* !HANDLE_MULTIBYTE */ return 0; } if (MB_CUR_MAX == 1 || rl_byte_oriented) { /* We are inserting a single character. If there is pending input, then make a string of all of the pending characters that are bound to rl_insert, and insert them all. Don't do this if we're current reading input from a macro. */ if ((RL_ISSTATE (RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available ()) _rl_insert_typein (c); else { /* Inserting a single character. */ char str[2]; str[1] = '\0'; str[0] = c; rl_insert_text (str); } } #if defined (HANDLE_MULTIBYTE) else { rl_insert_text (incoming); stored_count = 0; } #endif return 0; } /* Overwrite the character at point (or next COUNT characters) with C. If C introduces a multibyte character sequence, read the entire sequence before starting the overwrite loop. */ int _rl_overwrite_char (count, c) int count, c; { int i; #if defined (HANDLE_MULTIBYTE) char mbkey[MB_LEN_MAX]; int k; /* Read an entire multibyte character sequence to insert COUNT times. */ if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0) k = _rl_read_mbstring (c, mbkey, MB_LEN_MAX); #endif rl_begin_undo_group (); for (i = 0; i < count; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_insert_text (mbkey); else #endif _rl_insert_char (1, c); if (rl_point < rl_end) rl_delete (1, c); } rl_end_undo_group (); return 0; } int rl_insert (count, c) int count, c; { return (rl_insert_mode == RL_IM_INSERT ? _rl_insert_char (count, c) : _rl_overwrite_char (count, c)); } /* Insert the next typed character verbatim. */ static int _rl_insert_next (count) int count; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return -1; if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (c); #if defined (HANDLE_SIGNALS) if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) _rl_restore_tty_signals (); #endif return (_rl_insert_char (count, c)); } #if defined (READLINE_CALLBACKS) static int _rl_insert_next_callback (data) _rl_callback_generic_arg *data; { int count; count = data->count; /* Deregister function, let rl_callback_read_char deallocate data */ _rl_callback_func = 0; _rl_want_redisplay = 1; return _rl_insert_next (count); } #endif int rl_quoted_insert (count, key) int count, key; { /* Let's see...should the callback interface futz with signal handling? */ #if defined (HANDLE_SIGNALS) if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) _rl_disable_tty_signals (); #endif #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_func = _rl_insert_next_callback; return (0); } #endif return _rl_insert_next (count); } /* Insert a tab character. */ int rl_tab_insert (count, key) int count, key; { return (_rl_insert_char (count, '\t')); } /* What to do when a NEWLINE is pressed. We accept the whole line. KEY is the key that invoked this command. I guess it could have meaning in the future. */ int rl_newline (count, key) int count, key; { rl_done = 1; if (_rl_history_preserve_point) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; RL_SETSTATE(RL_STATE_DONE); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) { _rl_vi_done_inserting (); if (_rl_vi_textmod_command (_rl_vi_last_command) == 0) /* XXX */ _rl_vi_reset_last (); } #endif /* VI_MODE */ /* If we've been asked to erase empty lines, suppress the final update, since _rl_update_final calls rl_crlf(). */ if (rl_erase_empty_line && rl_point == 0 && rl_end == 0) return 0; if (_rl_echoing_p) _rl_update_final (); return 0; } /* What to do for some uppercase characters, like meta characters, and some characters appearing in emacs_ctlx_keymap. This function is just a stub, you bind keys to it and the code in _rl_dispatch () is special cased. */ int rl_do_lowercase_version (ignore1, ignore2) int ignore1, ignore2; { return 0; } /* This is different from what vi does, so the code's not shared. Emacs rubout in overwrite mode has one oddity: it replaces a control character that's displayed as two characters (^X) with two spaces. */ int _rl_overwrite_rubout (count, key) int count, key; { int opoint; int i, l; if (rl_point == 0) { rl_ding (); return 1; } opoint = rl_point; /* L == number of spaces to insert */ for (i = l = 0; i < count; i++) { rl_backward_char (1, key); l += rl_character_len (rl_line_buffer[rl_point], rl_point); /* not exactly right */ } rl_begin_undo_group (); if (count > 1 || rl_explicit_arg) rl_kill_text (opoint, rl_point); else rl_delete_text (opoint, rl_point); /* Emacs puts point at the beginning of the sequence of spaces. */ if (rl_point < rl_end) { opoint = rl_point; _rl_insert_char (l, ' '); rl_point = opoint; } rl_end_undo_group (); return 0; } /* Rubout the character behind point. */ int rl_rubout (count, key) int count, key; { if (count < 0) return (rl_delete (-count, key)); if (!rl_point) { rl_ding (); return -1; } if (rl_insert_mode == RL_IM_OVERWRITE) return (_rl_overwrite_rubout (count, key)); return (_rl_rubout_char (count, key)); } int _rl_rubout_char (count, key) int count, key; { int orig_point; unsigned char c; /* Duplicated code because this is called from other parts of the library. */ if (count < 0) return (rl_delete (-count, key)); if (rl_point == 0) { rl_ding (); return -1; } orig_point = rl_point; if (count > 1 || rl_explicit_arg) { rl_backward_char (count, key); rl_kill_text (orig_point, rl_point); } else if (MB_CUR_MAX == 1 || rl_byte_oriented) { c = rl_line_buffer[--rl_point]; rl_delete_text (rl_point, orig_point); /* The erase-at-end-of-line hack is of questionable merit now. */ if (rl_point == rl_end && ISPRINT (c) && _rl_last_c_pos) { int l; l = rl_character_len (c, rl_point); _rl_erase_at_end_of_line (l); } } else { rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); rl_delete_text (rl_point, orig_point); } return 0; } /* Delete the character under the cursor. Given a numeric argument, kill that many characters instead. */ int rl_delete (count, key) int count, key; { int xpoint; if (count < 0) return (_rl_rubout_char (-count, key)); if (rl_point == rl_end) { rl_ding (); return -1; } if (count > 1 || rl_explicit_arg) { xpoint = rl_point; if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_forward_char (count, key); else rl_forward_byte (count, key); rl_kill_text (xpoint, rl_point); rl_point = xpoint; } else { xpoint = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); rl_delete_text (rl_point, xpoint); } return 0; } /* Delete the character under the cursor, unless the insertion point is at the end of the line, in which case the character behind the cursor is deleted. COUNT is obeyed and may be used to delete forward or backward that many characters. */ int rl_rubout_or_delete (count, key) int count, key; { if (rl_end != 0 && rl_point == rl_end) return (_rl_rubout_char (count, key)); else return (rl_delete (count, key)); } /* Delete all spaces and tabs around point. */ int rl_delete_horizontal_space (count, ignore) int count, ignore; { int start; while (rl_point && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; start = rl_point; while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; if (start != rl_point) { rl_delete_text (start, rl_point); rl_point = start; } if (rl_point < 0) rl_point = 0; return 0; } /* Like the tcsh editing function delete-char-or-list. The eof character is caught before this is invoked, so this really does the same thing as delete-char-or-list-or-eof, as long as it's bound to the eof character. */ int rl_delete_or_show_completions (count, key) int count, key; { if (rl_end != 0 && rl_point == rl_end) return (rl_possible_completions (count, key)); else return (rl_delete (count, key)); } #ifndef RL_COMMENT_BEGIN_DEFAULT #define RL_COMMENT_BEGIN_DEFAULT "#" #endif /* Turn the current line into a comment in shell history. A K*rn shell style function. */ int rl_insert_comment (count, key) int count, key; { char *rl_comment_text; int rl_comment_len; rl_beg_of_line (1, key); rl_comment_text = _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT; if (rl_explicit_arg == 0) rl_insert_text (rl_comment_text); else { rl_comment_len = strlen (rl_comment_text); if (STREQN (rl_comment_text, rl_line_buffer, rl_comment_len)) rl_delete_text (rl_point, rl_point + rl_comment_len); else rl_insert_text (rl_comment_text); } (*rl_redisplay_function) (); rl_newline (1, '\n'); return (0); } /* **************************************************************** */ /* */ /* Changing Case */ /* */ /* **************************************************************** */ /* The three kinds of things that we know how to do. */ #define UpCase 1 #define DownCase 2 #define CapCase 3 /* Uppercase the word at point. */ int rl_upcase_word (count, key) int count, key; { return (rl_change_case (count, UpCase)); } /* Lowercase the word at point. */ int rl_downcase_word (count, key) int count, key; { return (rl_change_case (count, DownCase)); } /* Upcase the first letter, downcase the rest. */ int rl_capitalize_word (count, key) int count, key; { return (rl_change_case (count, CapCase)); } /* The meaty function. Change the case of COUNT words, performing OP on them. OP is one of UpCase, DownCase, or CapCase. If a negative argument is given, leave point where it started, otherwise, leave it where it moves to. */ static int rl_change_case (count, op) int count, op; { int start, next, end; int inword, c, nc, nop; #if defined (HANDLE_MULTIBYTE) wchar_t wc, nwc; char mb[MB_LEN_MAX+1]; int mlen; size_t m; mbstate_t mps; #endif start = rl_point; rl_forward_word (count, 0); end = rl_point; if (op != UpCase && op != DownCase && op != CapCase) { rl_ding (); return -1; } if (count < 0) SWAP (start, end); #if defined (HANDLE_MULTIBYTE) memset (&mps, 0, sizeof (mbstate_t)); #endif /* We are going to modify some text, so let's prepare to undo it. */ rl_modifying (start, end); inword = 0; while (start < end) { c = _rl_char_value (rl_line_buffer, start); /* This assumes that the upper and lower case versions are the same width. */ next = MB_NEXTCHAR (rl_line_buffer, start, 1, MB_FIND_NONZERO); if (_rl_walphabetic (c) == 0) { inword = 0; start = next; continue; } if (op == CapCase) { nop = inword ? DownCase : UpCase; inword = 1; } else nop = op; if (MB_CUR_MAX == 1 || rl_byte_oriented || isascii (c)) { nc = (nop == UpCase) ? _rl_to_upper (c) : _rl_to_lower (c); rl_line_buffer[start] = nc; } #if defined (HANDLE_MULTIBYTE) else { m = mbrtowc (&wc, rl_line_buffer + start, end - start, &mps); if (MB_INVALIDCH (m)) wc = (wchar_t)rl_line_buffer[start]; else if (MB_NULLWCH (m)) wc = L'\0'; nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc); if (nwc != wc) /* just skip unchanged characters */ { mlen = wcrtomb (mb, nwc, &mps); if (mlen > 0) mb[mlen] = '\0'; /* Assume the same width */ strncpy (rl_line_buffer + start, mb, mlen); } } #endif start = next; } rl_point = end; return 0; } /* **************************************************************** */ /* */ /* Transposition */ /* */ /* **************************************************************** */ /* Transpose the words at point. If point is at the end of the line, transpose the two words before point. */ int rl_transpose_words (count, key) int count, key; { char *word1, *word2; int w1_beg, w1_end, w2_beg, w2_end; int orig_point = rl_point; if (!count) return 0; /* Find the two words. */ rl_forward_word (count, key); w2_end = rl_point; rl_backward_word (1, key); w2_beg = rl_point; rl_backward_word (count, key); w1_beg = rl_point; rl_forward_word (1, key); w1_end = rl_point; /* Do some check to make sure that there really are two words. */ if ((w1_beg == w2_beg) || (w2_beg < w1_end)) { rl_ding (); rl_point = orig_point; return -1; } /* Get the text of the words. */ word1 = rl_copy_text (w1_beg, w1_end); word2 = rl_copy_text (w2_beg, w2_end); /* We are about to do many insertions and deletions. Remember them as one operation. */ rl_begin_undo_group (); /* Do the stuff at word2 first, so that we don't have to worry about word1 moving. */ rl_point = w2_beg; rl_delete_text (w2_beg, w2_end); rl_insert_text (word1); rl_point = w1_beg; rl_delete_text (w1_beg, w1_end); rl_insert_text (word2); /* This is exactly correct since the text before this point has not changed in length. */ rl_point = w2_end; /* I think that does it. */ rl_end_undo_group (); xfree (word1); xfree (word2); return 0; } /* Transpose the characters at point. If point is at the end of the line, then transpose the characters before point. */ int rl_transpose_chars (count, key) int count, key; { #if defined (HANDLE_MULTIBYTE) char *dummy; int i; #else char dummy[2]; #endif int char_length, prev_point; if (count == 0) return 0; if (!rl_point || rl_end < 2) { rl_ding (); return -1; } rl_begin_undo_group (); if (rl_point == rl_end) { rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); count = 1; } prev_point = rl_point; rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); #if defined (HANDLE_MULTIBYTE) char_length = prev_point - rl_point; dummy = (char *)xmalloc (char_length + 1); for (i = 0; i < char_length; i++) dummy[i] = rl_line_buffer[rl_point + i]; dummy[i] = '\0'; #else dummy[0] = rl_line_buffer[rl_point]; dummy[char_length = 1] = '\0'; #endif rl_delete_text (rl_point, rl_point + char_length); rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); _rl_fix_point (0); rl_insert_text (dummy); rl_end_undo_group (); #if defined (HANDLE_MULTIBYTE) xfree (dummy); #endif return 0; } /* **************************************************************** */ /* */ /* Character Searching */ /* */ /* **************************************************************** */ int #if defined (HANDLE_MULTIBYTE) _rl_char_search_internal (count, dir, smbchar, len) int count, dir; char *smbchar; int len; #else _rl_char_search_internal (count, dir, schar) int count, dir, schar; #endif { int pos, inc; #if defined (HANDLE_MULTIBYTE) int prepos; #endif if (dir == 0) return -1; pos = rl_point; inc = (dir < 0) ? -1 : 1; while (count) { if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= rl_end)) { rl_ding (); return -1; } #if defined (HANDLE_MULTIBYTE) pos = (inc > 0) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY) : _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY); #else pos += inc; #endif do { #if defined (HANDLE_MULTIBYTE) if (_rl_is_mbchar_matched (rl_line_buffer, pos, rl_end, smbchar, len)) #else if (rl_line_buffer[pos] == schar) #endif { count--; if (dir < 0) rl_point = (dir == BTO) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY) : pos; else rl_point = (dir == FTO) ? _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY) : pos; break; } #if defined (HANDLE_MULTIBYTE) prepos = pos; #endif } #if defined (HANDLE_MULTIBYTE) while ((dir < 0) ? (pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY)) != prepos : (pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)) != prepos); #else while ((dir < 0) ? pos-- : ++pos < rl_end); #endif } return (0); } /* Search COUNT times for a character read from the current input stream. FDIR is the direction to search if COUNT is non-negative; otherwise the search goes in BDIR. So much is dependent on HANDLE_MULTIBYTE that there are two separate versions of this function. */ #if defined (HANDLE_MULTIBYTE) static int _rl_char_search (count, fdir, bdir) int count, fdir, bdir; { char mbchar[MB_LEN_MAX]; int mb_len; mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); if (mb_len <= 0) return -1; if (count < 0) return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); else return (_rl_char_search_internal (count, fdir, mbchar, mb_len)); } #else /* !HANDLE_MULTIBYTE */ static int _rl_char_search (count, fdir, bdir) int count, fdir, bdir; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return -1; if (count < 0) return (_rl_char_search_internal (-count, bdir, c)); else return (_rl_char_search_internal (count, fdir, c)); } #endif /* !HANDLE_MULTIBYTE */ #if defined (READLINE_CALLBACKS) static int _rl_char_search_callback (data) _rl_callback_generic_arg *data; { _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_char_search (data->count, data->i1, data->i2)); } #endif int rl_char_search (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_data->i1 = FFIND; _rl_callback_data->i2 = BFIND; _rl_callback_func = _rl_char_search_callback; return (0); } #endif return (_rl_char_search (count, FFIND, BFIND)); } int rl_backward_char_search (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_data->i1 = BFIND; _rl_callback_data->i2 = FFIND; _rl_callback_func = _rl_char_search_callback; return (0); } #endif return (_rl_char_search (count, BFIND, FFIND)); } /* **************************************************************** */ /* */ /* The Mark and the Region. */ /* */ /* **************************************************************** */ /* Set the mark at POSITION. */ int _rl_set_mark_at_pos (position) int position; { if (position > rl_end) return -1; rl_mark = position; return 0; } /* A bindable command to set the mark. */ int rl_set_mark (count, key) int count, key; { return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point)); } /* Exchange the position of mark and point. */ int rl_exchange_point_and_mark (count, key) int count, key; { if (rl_mark > rl_end) rl_mark = -1; if (rl_mark == -1) { rl_ding (); return -1; } else SWAP (rl_point, rl_mark); return 0; } readline-6.3/tilde.c0000664000043600000000000003161011423127665013220 0ustar chetwheel/* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */ /* Copyright (C) 1988-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_UNISTD_H) # ifdef _MINIX # include # endif # include #endif #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #if defined (HAVE_PWD_H) #include #endif #include "tilde.h" #if defined (TEST) || defined (STATIC_MALLOC) static void *xmalloc (), *xrealloc (); #else # include "xmalloc.h" #endif /* TEST || STATIC_MALLOC */ #if !defined (HAVE_GETPW_DECLS) # if defined (HAVE_GETPWUID) extern struct passwd *getpwuid PARAMS((uid_t)); # endif # if defined (HAVE_GETPWNAM) extern struct passwd *getpwnam PARAMS((const char *)); # endif #endif /* !HAVE_GETPW_DECLS */ #if !defined (savestring) #define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) #endif /* !savestring */ #if !defined (NULL) # if defined (__STDC__) # define NULL ((void *) 0) # else # define NULL 0x0 # endif /* !__STDC__ */ #endif /* !NULL */ /* If being compiled as part of bash, these will be satisfied from variables.o. If being compiled as part of readline, they will be satisfied from shell.o. */ extern char *sh_get_home_dir PARAMS((void)); extern char *sh_get_env_value PARAMS((const char *)); /* The default value of tilde_additional_prefixes. This is set to whitespace preceding a tilde so that simple programs which do not perform any word separation get desired behaviour. */ static const char *default_prefixes[] = { " ~", "\t~", (const char *)NULL }; /* The default value of tilde_additional_suffixes. This is set to whitespace or newline so that simple programs which do not perform any word separation get desired behaviour. */ static const char *default_suffixes[] = { " ", "\n", (const char *)NULL }; /* If non-null, this contains the address of a function that the application wants called before trying the standard tilde expansions. The function is called with the text sans tilde, and returns a malloc()'ed string which is the expansion, or a NULL pointer if the expansion fails. */ tilde_hook_func_t *tilde_expansion_preexpansion_hook = (tilde_hook_func_t *)NULL; /* If non-null, this contains the address of a function to call if the standard meaning for expanding a tilde fails. The function is called with the text (sans tilde, as in "foo"), and returns a malloc()'ed string which is the expansion, or a NULL pointer if there is no expansion. */ tilde_hook_func_t *tilde_expansion_failure_hook = (tilde_hook_func_t *)NULL; /* When non-null, this is a NULL terminated array of strings which are duplicates for a tilde prefix. Bash uses this to expand `=~' and `:~'. */ char **tilde_additional_prefixes = (char **)default_prefixes; /* When non-null, this is a NULL terminated array of strings which match the end of a username, instead of just "/". Bash sets this to `:' and `=~'. */ char **tilde_additional_suffixes = (char **)default_suffixes; static int tilde_find_prefix PARAMS((const char *, int *)); static int tilde_find_suffix PARAMS((const char *)); static char *isolate_tilde_prefix PARAMS((const char *, int *)); static char *glue_prefix_and_suffix PARAMS((char *, const char *, int)); /* Find the start of a tilde expansion in STRING, and return the index of the tilde which starts the expansion. Place the length of the text which identified this tilde starter in LEN, excluding the tilde itself. */ static int tilde_find_prefix (string, len) const char *string; int *len; { register int i, j, string_len; register char **prefixes; prefixes = tilde_additional_prefixes; string_len = strlen (string); *len = 0; if (*string == '\0' || *string == '~') return (0); if (prefixes) { for (i = 0; i < string_len; i++) { for (j = 0; prefixes[j]; j++) { if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0) { *len = strlen (prefixes[j]) - 1; return (i + *len); } } } } return (string_len); } /* Find the end of a tilde expansion in STRING, and return the index of the character which ends the tilde definition. */ static int tilde_find_suffix (string) const char *string; { register int i, j, string_len; register char **suffixes; suffixes = tilde_additional_suffixes; string_len = strlen (string); for (i = 0; i < string_len; i++) { #if defined (__MSDOS__) if (string[i] == '/' || string[i] == '\\' /* || !string[i] */) #else if (string[i] == '/' /* || !string[i] */) #endif break; for (j = 0; suffixes && suffixes[j]; j++) { if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0) return (i); } } return (i); } /* Return a new string which is the result of tilde expanding STRING. */ char * tilde_expand (string) const char *string; { char *result; int result_size, result_index; result_index = result_size = 0; if (result = strchr (string, '~')) result = (char *)xmalloc (result_size = (strlen (string) + 16)); else result = (char *)xmalloc (result_size = (strlen (string) + 1)); /* Scan through STRING expanding tildes as we come to them. */ while (1) { register int start, end; char *tilde_word, *expansion; int len; /* Make START point to the tilde which starts the expansion. */ start = tilde_find_prefix (string, &len); /* Copy the skipped text into the result. */ if ((result_index + start + 1) > result_size) result = (char *)xrealloc (result, 1 + (result_size += (start + 20))); strncpy (result + result_index, string, start); result_index += start; /* Advance STRING to the starting tilde. */ string += start; /* Make END be the index of one after the last character of the username. */ end = tilde_find_suffix (string); /* If both START and END are zero, we are all done. */ if (!start && !end) break; /* Expand the entire tilde word, and copy it into RESULT. */ tilde_word = (char *)xmalloc (1 + end); strncpy (tilde_word, string, end); tilde_word[end] = '\0'; string += end; expansion = tilde_expand_word (tilde_word); xfree (tilde_word); len = strlen (expansion); #ifdef __CYGWIN__ /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when $HOME for `user' is /. On cygwin, // denotes a network drive. */ if (len > 1 || *expansion != '/' || *string != '/') #endif { if ((result_index + len + 1) > result_size) result = (char *)xrealloc (result, 1 + (result_size += (len + 20))); strcpy (result + result_index, expansion); result_index += len; } xfree (expansion); } result[result_index] = '\0'; return (result); } /* Take FNAME and return the tilde prefix we want expanded. If LENP is non-null, the index of the end of the prefix into FNAME is returned in the location it points to. */ static char * isolate_tilde_prefix (fname, lenp) const char *fname; int *lenp; { char *ret; int i; ret = (char *)xmalloc (strlen (fname)); #if defined (__MSDOS__) for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++) #else for (i = 1; fname[i] && fname[i] != '/'; i++) #endif ret[i - 1] = fname[i]; ret[i - 1] = '\0'; if (lenp) *lenp = i; return ret; } #if 0 /* Public function to scan a string (FNAME) beginning with a tilde and find the portion of the string that should be passed to the tilde expansion function. Right now, it just calls tilde_find_suffix and allocates new memory, but it can be expanded to do different things later. */ char * tilde_find_word (fname, flags, lenp) const char *fname; int flags, *lenp; { int x; char *r; x = tilde_find_suffix (fname); if (x == 0) { r = savestring (fname); if (lenp) *lenp = 0; } else { r = (char *)xmalloc (1 + x); strncpy (r, fname, x); r[x] = '\0'; if (lenp) *lenp = x; } return r; } #endif /* Return a string that is PREFIX concatenated with SUFFIX starting at SUFFIND. */ static char * glue_prefix_and_suffix (prefix, suffix, suffind) char *prefix; const char *suffix; int suffind; { char *ret; int plen, slen; plen = (prefix && *prefix) ? strlen (prefix) : 0; slen = strlen (suffix + suffind); ret = (char *)xmalloc (plen + slen + 1); if (plen) strcpy (ret, prefix); strcpy (ret + plen, suffix + suffind); return ret; } /* Do the work of tilde expansion on FILENAME. FILENAME starts with a tilde. If there is no expansion, call tilde_expansion_failure_hook. This always returns a newly-allocated string, never static storage. */ char * tilde_expand_word (filename) const char *filename; { char *dirname, *expansion, *username; int user_len; struct passwd *user_entry; if (filename == 0) return ((char *)NULL); if (*filename != '~') return (savestring (filename)); /* A leading `~/' or a bare `~' is *always* translated to the value of $HOME or the home directory of the current user, regardless of any preexpansion hook. */ if (filename[1] == '\0' || filename[1] == '/') { /* Prefix $HOME to the rest of the string. */ expansion = sh_get_env_value ("HOME"); /* If there is no HOME variable, look up the directory in the password database. */ if (expansion == 0) expansion = sh_get_home_dir (); return (glue_prefix_and_suffix (expansion, filename, 1)); } username = isolate_tilde_prefix (filename, &user_len); if (tilde_expansion_preexpansion_hook) { expansion = (*tilde_expansion_preexpansion_hook) (username); if (expansion) { dirname = glue_prefix_and_suffix (expansion, filename, user_len); xfree (username); xfree (expansion); return (dirname); } } /* No preexpansion hook, or the preexpansion hook failed. Look in the password database. */ dirname = (char *)NULL; #if defined (HAVE_GETPWNAM) user_entry = getpwnam (username); #else user_entry = 0; #endif if (user_entry == 0) { /* If the calling program has a special syntax for expanding tildes, and we couldn't find a standard expansion, then let them try. */ if (tilde_expansion_failure_hook) { expansion = (*tilde_expansion_failure_hook) (username); if (expansion) { dirname = glue_prefix_and_suffix (expansion, filename, user_len); xfree (expansion); } } /* If we don't have a failure hook, or if the failure hook did not expand the tilde, return a copy of what we were passed. */ if (dirname == 0) dirname = savestring (filename); } #if defined (HAVE_GETPWENT) else dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len); #endif xfree (username); #if defined (HAVE_GETPWENT) endpwent (); #endif return (dirname); } #if defined (TEST) #undef NULL #include main (argc, argv) int argc; char **argv; { char *result, line[512]; int done = 0; while (!done) { printf ("~expand: "); fflush (stdout); if (!gets (line)) strcpy (line, "done"); if ((strcmp (line, "done") == 0) || (strcmp (line, "quit") == 0) || (strcmp (line, "exit") == 0)) { done = 1; break; } result = tilde_expand (line); printf (" --> %s\n", result); free (result); } exit (0); } static void memory_error_and_abort (); static void * xmalloc (bytes) size_t bytes; { void *temp = (char *)malloc (bytes); if (!temp) memory_error_and_abort (); return (temp); } static void * xrealloc (pointer, bytes) void *pointer; int bytes; { void *temp; if (!pointer) temp = malloc (bytes); else temp = realloc (pointer, bytes); if (!temp) memory_error_and_abort (); return (temp); } static void memory_error_and_abort () { fprintf (stderr, "readline: out of virtual memory\n"); abort (); } /* * Local variables: * compile-command: "gcc -g -DTEST -o tilde tilde.c" * end: */ #endif /* TEST */ readline-6.3/undo.c0000664000043600001200000001671412273527362013065 0ustar chetadmin/* readline.c -- a general facility for reading lines of input with emacs style editing and completion. */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" extern void replace_history_data PARAMS((int, histdata_t *, histdata_t *)); /* Non-zero tells rl_delete_text and rl_insert_text to not add to the undo list. */ int _rl_doing_an_undo = 0; /* How many unclosed undo groups we currently have. */ int _rl_undo_group_level = 0; /* The current undo list for THE_LINE. */ UNDO_LIST *rl_undo_list = (UNDO_LIST *)NULL; /* **************************************************************** */ /* */ /* Undo, and Undoing */ /* */ /* **************************************************************** */ static UNDO_LIST * alloc_undo_entry (what, start, end, text) enum undo_code what; int start, end; char *text; { UNDO_LIST *temp; temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST)); temp->what = what; temp->start = start; temp->end = end; temp->text = text; temp->next = (UNDO_LIST *)NULL; return temp; } /* Remember how to undo something. Concatenate some undos if that seems right. */ void rl_add_undo (what, start, end, text) enum undo_code what; int start, end; char *text; { UNDO_LIST *temp; temp = alloc_undo_entry (what, start, end, text); temp->next = rl_undo_list; rl_undo_list = temp; } /* Free an UNDO_LIST */ void _rl_free_undo_list (ul) UNDO_LIST *ul; { UNDO_LIST *release; while (ul) { release = ul; ul = ul->next; if (release->what == UNDO_DELETE) xfree (release->text); xfree (release); } } /* Free the existing undo list. */ void rl_free_undo_list () { UNDO_LIST *release, *orig_list; orig_list = rl_undo_list; _rl_free_undo_list (rl_undo_list); rl_undo_list = (UNDO_LIST *)NULL; replace_history_data (-1, (histdata_t *)orig_list, (histdata_t *)NULL); } UNDO_LIST * _rl_copy_undo_entry (entry) UNDO_LIST *entry; { UNDO_LIST *new; new = alloc_undo_entry (entry->what, entry->start, entry->end, (char *)NULL); new->text = entry->text ? savestring (entry->text) : 0; return new; } UNDO_LIST * _rl_copy_undo_list (head) UNDO_LIST *head; { UNDO_LIST *list, *new, *roving, *c; if (head == 0) return head; list = head; new = 0; while (list) { c = _rl_copy_undo_entry (list); if (new == 0) roving = new = c; else { roving->next = c; roving = roving->next; } list = list->next; } roving->next = 0; return new; } /* Undo the next thing in the list. Return 0 if there is nothing to undo, or non-zero if there was. */ int rl_do_undo () { UNDO_LIST *release; int waiting_for_begin, start, end; HIST_ENTRY *cur, *temp; #define TRANS(i) ((i) == -1 ? rl_point : ((i) == -2 ? rl_end : (i))) start = end = waiting_for_begin = 0; do { if (rl_undo_list == 0) return (0); _rl_doing_an_undo = 1; RL_SETSTATE(RL_STATE_UNDOING); /* To better support vi-mode, a start or end value of -1 means rl_point, and a value of -2 means rl_end. */ if (rl_undo_list->what == UNDO_DELETE || rl_undo_list->what == UNDO_INSERT) { start = TRANS (rl_undo_list->start); end = TRANS (rl_undo_list->end); } switch (rl_undo_list->what) { /* Undoing deletes means inserting some text. */ case UNDO_DELETE: rl_point = start; rl_insert_text (rl_undo_list->text); xfree (rl_undo_list->text); break; /* Undoing inserts means deleting some text. */ case UNDO_INSERT: rl_delete_text (start, end); rl_point = start; break; /* Undoing an END means undoing everything 'til we get to a BEGIN. */ case UNDO_END: waiting_for_begin++; break; /* Undoing a BEGIN means that we are done with this group. */ case UNDO_BEGIN: if (waiting_for_begin) waiting_for_begin--; else rl_ding (); break; } _rl_doing_an_undo = 0; RL_UNSETSTATE(RL_STATE_UNDOING); release = rl_undo_list; rl_undo_list = rl_undo_list->next; /* If we are editing a history entry, make sure the change is replicated in the history entry's line */ cur = current_history (); if (cur && cur->data && (UNDO_LIST *)cur->data == release) { temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list); xfree (temp->line); FREE (temp->timestamp); xfree (temp); } replace_history_data (-1, (histdata_t *)release, (histdata_t *)rl_undo_list); xfree (release); } while (waiting_for_begin); return (1); } #undef TRANS int _rl_fix_last_undo_of_type (type, start, end) int type, start, end; { UNDO_LIST *rl; for (rl = rl_undo_list; rl; rl = rl->next) { if (rl->what == type) { rl->start = start; rl->end = end; return 0; } } return 1; } /* Begin a group. Subsequent undos are undone as an atomic operation. */ int rl_begin_undo_group () { rl_add_undo (UNDO_BEGIN, 0, 0, 0); _rl_undo_group_level++; return 0; } /* End an undo group started with rl_begin_undo_group (). */ int rl_end_undo_group () { rl_add_undo (UNDO_END, 0, 0, 0); _rl_undo_group_level--; return 0; } /* Save an undo entry for the text from START to END. */ int rl_modifying (start, end) int start, end; { if (start > end) { SWAP (start, end); } if (start != end) { char *temp = rl_copy_text (start, end); rl_begin_undo_group (); rl_add_undo (UNDO_DELETE, start, end, temp); rl_add_undo (UNDO_INSERT, start, end, (char *)NULL); rl_end_undo_group (); } return 0; } /* Revert the current line to its previous state. */ int rl_revert_line (count, key) int count, key; { if (rl_undo_list == 0) rl_ding (); else { while (rl_undo_list) rl_do_undo (); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) rl_point = rl_mark = 0; /* rl_end should be set correctly */ #endif } return 0; } /* Do some undoing of things that were done. */ int rl_undo_command (count, key) int count, key; { if (count < 0) return 0; /* Nothing to do. */ while (count) { if (rl_do_undo ()) count--; else { rl_ding (); break; } } return 0; } readline-6.3/util.c0000664000043600000000000002744412211146214013071 0ustar chetwheel/* util.c -- readline utility functions */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #include "posixjmp.h" #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (TIOCSTAT_IN_SYS_IOCTL) # include #endif /* TIOCSTAT_IN_SYS_IOCTL */ /* Some standard library routines. */ #include "readline.h" #include "rlprivate.h" #include "xmalloc.h" /* **************************************************************** */ /* */ /* Utility Functions */ /* */ /* **************************************************************** */ /* Return 0 if C is not a member of the class of characters that belong in words, or 1 if it is. */ int _rl_allow_pathname_alphabetic_chars = 0; static const char * const pathname_alphabetic_chars = "/-_=~.#$"; int rl_alphabetic (c) int c; { if (ALPHABETIC (c)) return (1); return (_rl_allow_pathname_alphabetic_chars && strchr (pathname_alphabetic_chars, c) != NULL); } #if defined (HANDLE_MULTIBYTE) int _rl_walphabetic (wchar_t wc) { int c; if (iswalnum (wc)) return (1); c = wc & 0177; return (_rl_allow_pathname_alphabetic_chars && strchr (pathname_alphabetic_chars, c) != NULL); } #endif /* How to abort things. */ int _rl_abort_internal () { rl_ding (); rl_clear_message (); _rl_reset_argument (); rl_clear_pending_input (); RL_UNSETSTATE (RL_STATE_MACRODEF); while (rl_executing_macro) _rl_pop_executing_macro (); rl_last_func = (rl_command_func_t *)NULL; #if defined (HAVE_POSIX_SIGSETJMP) siglongjmp (_rl_top_level, 1); #else longjmp (_rl_top_level, 1); #endif return (0); } int rl_abort (count, key) int count, key; { return (_rl_abort_internal ()); } int _rl_null_function (count, key) int count, key; { return 0; } int rl_tty_status (count, key) int count, key; { #if defined (TIOCSTAT) ioctl (1, TIOCSTAT, (char *)0); rl_refresh_line (count, key); #else rl_ding (); #endif return 0; } /* Return a copy of the string between FROM and TO. FROM is inclusive, TO is not. */ char * rl_copy_text (from, to) int from, to; { register int length; char *copy; /* Fix it if the caller is confused. */ if (from > to) SWAP (from, to); length = to - from; copy = (char *)xmalloc (1 + length); strncpy (copy, rl_line_buffer + from, length); copy[length] = '\0'; return (copy); } /* Increase the size of RL_LINE_BUFFER until it has enough space to hold LEN characters. */ void rl_extend_line_buffer (len) int len; { while (len >= rl_line_buffer_len) { rl_line_buffer_len += DEFAULT_BUFFER_SIZE; rl_line_buffer = (char *)xrealloc (rl_line_buffer, rl_line_buffer_len); } _rl_set_the_line (); } /* A function for simple tilde expansion. */ int rl_tilde_expand (ignore, key) int ignore, key; { register int start, end; char *homedir, *temp; int len; end = rl_point; start = end - 1; if (rl_point == rl_end && rl_line_buffer[rl_point] == '~') { homedir = tilde_expand ("~"); _rl_replace_text (homedir, start, end); xfree (homedir); return (0); } else if (rl_line_buffer[start] != '~') { for (; !whitespace (rl_line_buffer[start]) && start >= 0; start--) ; start++; } end = start; do end++; while (whitespace (rl_line_buffer[end]) == 0 && end < rl_end); if (whitespace (rl_line_buffer[end]) || end >= rl_end) end--; /* If the first character of the current word is a tilde, perform tilde expansion and insert the result. If not a tilde, do nothing. */ if (rl_line_buffer[start] == '~') { len = end - start + 1; temp = (char *)xmalloc (len + 1); strncpy (temp, rl_line_buffer + start, len); temp[len] = '\0'; homedir = tilde_expand (temp); xfree (temp); _rl_replace_text (homedir, start, end); xfree (homedir); } return (0); } #if defined (USE_VARARGS) void #if defined (PREFER_STDARG) _rl_ttymsg (const char *format, ...) #else _rl_ttymsg (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif fprintf (stderr, "readline: "); vfprintf (stderr, format, args); fprintf (stderr, "\n"); fflush (stderr); va_end (args); rl_forced_update_display (); } void #if defined (PREFER_STDARG) _rl_errmsg (const char *format, ...) #else _rl_errmsg (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif fprintf (stderr, "readline: "); vfprintf (stderr, format, args); fprintf (stderr, "\n"); fflush (stderr); va_end (args); } #else /* !USE_VARARGS */ void _rl_ttymsg (format, arg1, arg2) char *format; { fprintf (stderr, "readline: "); fprintf (stderr, format, arg1, arg2); fprintf (stderr, "\n"); rl_forced_update_display (); } void _rl_errmsg (format, arg1, arg2) char *format; { fprintf (stderr, "readline: "); fprintf (stderr, format, arg1, arg2); fprintf (stderr, "\n"); } #endif /* !USE_VARARGS */ /* **************************************************************** */ /* */ /* String Utility Functions */ /* */ /* **************************************************************** */ /* Determine if s2 occurs in s1. If so, return a pointer to the match in s1. The compare is case insensitive. */ char * _rl_strindex (s1, s2) register const char *s1, *s2; { register int i, l, len; for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++) if (_rl_strnicmp (s1 + i, s2, l) == 0) return ((char *) (s1 + i)); return ((char *)NULL); } #ifndef HAVE_STRPBRK /* Find the first occurrence in STRING1 of any character from STRING2. Return a pointer to the character in STRING1. */ char * _rl_strpbrk (string1, string2) const char *string1, *string2; { register const char *scan; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; register int i, v; memset (&ps, 0, sizeof (mbstate_t)); #endif for (; *string1; string1++) { for (scan = string2; *scan; scan++) { if (*string1 == *scan) return ((char *)string1); } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { v = _rl_get_char_len (string1, &ps); if (v > 1) string1 += v - 1; /* -1 to account for auto-increment in loop */ } #endif } return ((char *)NULL); } #endif #if !defined (HAVE_STRCASECMP) /* Compare at most COUNT characters from string1 to string2. Case doesn't matter (strncasecmp). */ int _rl_strnicmp (string1, string2, count) const char *string1; const char *string2; int count; { register const char *s1; register const char *s2; register int d; if (count <= 0 || (string1 == string2)) return 0; s1 = string1; s2 = string2; do { d = _rl_to_lower (*s1) - _rl_to_lower (*s2); /* XXX - cast to unsigned char? */ if (d != 0) return d; if (*s1++ == '\0') break; s2++; } while (--count != 0); return (0); } /* strcmp (), but caseless (strcasecmp). */ int _rl_stricmp (string1, string2) const char *string1; const char *string2; { register const char *s1; register const char *s2; register int d; s1 = string1; s2 = string2; if (s1 == s2) return 0; while ((d = _rl_to_lower (*s1) - _rl_to_lower (*s2)) == 0) { if (*s1++ == '\0') return 0; s2++; } return (d); } #endif /* !HAVE_STRCASECMP */ /* Stupid comparison routine for qsort () ing strings. */ int _rl_qsort_string_compare (s1, s2) char **s1, **s2; { #if defined (HAVE_STRCOLL) return (strcoll (*s1, *s2)); #else int result; result = **s1 - **s2; if (result == 0) result = strcmp (*s1, *s2); return result; #endif } /* Function equivalents for the macros defined in chardefs.h. */ #define FUNCTION_FOR_MACRO(f) int (f) (c) int c; { return f (c); } FUNCTION_FOR_MACRO (_rl_digit_p) FUNCTION_FOR_MACRO (_rl_digit_value) FUNCTION_FOR_MACRO (_rl_lowercase_p) FUNCTION_FOR_MACRO (_rl_pure_alphabetic) FUNCTION_FOR_MACRO (_rl_to_lower) FUNCTION_FOR_MACRO (_rl_to_upper) FUNCTION_FOR_MACRO (_rl_uppercase_p) /* A convenience function, to force memory deallocation to be performed by readline. DLLs on Windows apparently require this. */ void rl_free (mem) void *mem; { if (mem) free (mem); } /* Backwards compatibility, now that savestring has been removed from all `public' readline header files. */ #undef _rl_savestring char * _rl_savestring (s) const char *s; { return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s))); } #if defined (USE_VARARGS) static FILE *_rl_tracefp; void #if defined (PREFER_STDARG) _rl_trace (const char *format, ...) #else _rl_trace (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif if (_rl_tracefp == 0) _rl_tropen (); vfprintf (_rl_tracefp, format, args); fprintf (_rl_tracefp, "\n"); fflush (_rl_tracefp); va_end (args); } int _rl_tropen () { char fnbuf[128]; if (_rl_tracefp) fclose (_rl_tracefp); sprintf (fnbuf, "/var/tmp/rltrace.%ld", (long)getpid()); unlink(fnbuf); _rl_tracefp = fopen (fnbuf, "w+"); return _rl_tracefp != 0; } int _rl_trclose () { int r; r = fclose (_rl_tracefp); _rl_tracefp = 0; return r; } void _rl_settracefp (fp) FILE *fp; { _rl_tracefp = fp; } #endif #if HAVE_DECL_AUDIT_USER_TTY && defined (ENABLE_TTY_AUDIT_SUPPORT) #include #include #include /* Report STRING to the audit system. */ void _rl_audit_tty (string) char *string; { struct sockaddr_nl addr; struct msghdr msg; struct nlmsghdr nlm; struct iovec iov[2]; size_t size; int fd; fd = socket (AF_NETLINK, SOCK_RAW, NETLINK_AUDIT); if (fd < 0) return; size = strlen (string) + 1; nlm.nlmsg_len = NLMSG_LENGTH (size); nlm.nlmsg_type = AUDIT_USER_TTY; nlm.nlmsg_flags = NLM_F_REQUEST; nlm.nlmsg_seq = 0; nlm.nlmsg_pid = 0; iov[0].iov_base = &nlm; iov[0].iov_len = sizeof (nlm); iov[1].iov_base = string; iov[1].iov_len = size; addr.nl_family = AF_NETLINK; addr.nl_pid = 0; addr.nl_groups = 0; msg.msg_name = &addr; msg.msg_namelen = sizeof (addr); msg.msg_iov = iov; msg.msg_iovlen = 2; msg.msg_control = NULL; msg.msg_controllen = 0; msg.msg_flags = 0; (void)sendmsg (fd, &msg, 0); close (fd); } #endif readline-6.3/vi_keymap.c0000664000043600000000000010725311663774337014124 0ustar chetwheel/* vi_keymap.c -- the keymap for vi_mode in readline (). */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #if !defined (BUFSIZ) #include #endif /* !BUFSIZ */ #include "readline.h" #if 0 extern KEYMAP_ENTRY_ARRAY vi_escape_keymap; #endif /* The keymap arrays for handling vi mode. */ KEYMAP_ENTRY_ARRAY vi_movement_keymap = { /* The regular control keys come first. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, rl_vi_eof_maybe }, /* Control-d */ { ISFUNC, rl_emacs_editing_mode }, /* Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-f */ { ISFUNC, rl_abort }, /* Control-g */ { ISFUNC, rl_backward_char }, /* Control-h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-i */ { ISFUNC, rl_newline }, /* Control-j */ { ISFUNC, rl_kill_line }, /* Control-k */ { ISFUNC, rl_clear_screen }, /* Control-l */ { ISFUNC, rl_newline }, /* Control-m */ { ISFUNC, rl_get_next_history }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, rl_get_previous_history }, /* Control-p */ { ISFUNC, rl_quoted_insert }, /* Control-q */ { ISFUNC, rl_reverse_search_history }, /* Control-r */ { ISFUNC, rl_forward_search_history }, /* Control-s */ { ISFUNC, rl_transpose_chars }, /* Control-t */ { ISFUNC, rl_unix_line_discard }, /* Control-u */ { ISFUNC, rl_quoted_insert }, /* Control-v */ { ISFUNC, rl_unix_word_rubout }, /* Control-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-x */ { ISFUNC, rl_yank }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-[ */ /* vi_escape_keymap */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, rl_vi_undo }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_forward_char }, /* SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* " */ { ISFUNC, rl_insert_comment }, /* # */ { ISFUNC, rl_end_of_line }, /* $ */ { ISFUNC, rl_vi_match }, /* % */ { ISFUNC, rl_vi_tilde_expand }, /* & */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ' */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ( */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ) */ { ISFUNC, rl_vi_complete }, /* * */ { ISFUNC, rl_get_next_history}, /* + */ { ISFUNC, rl_vi_char_search }, /* , */ { ISFUNC, rl_get_previous_history }, /* - */ { ISFUNC, rl_vi_redo }, /* . */ { ISFUNC, rl_vi_search }, /* / */ /* Regular digits. */ { ISFUNC, rl_beg_of_line }, /* 0 */ { ISFUNC, rl_vi_arg_digit }, /* 1 */ { ISFUNC, rl_vi_arg_digit }, /* 2 */ { ISFUNC, rl_vi_arg_digit }, /* 3 */ { ISFUNC, rl_vi_arg_digit }, /* 4 */ { ISFUNC, rl_vi_arg_digit }, /* 5 */ { ISFUNC, rl_vi_arg_digit }, /* 6 */ { ISFUNC, rl_vi_arg_digit }, /* 7 */ { ISFUNC, rl_vi_arg_digit }, /* 8 */ { ISFUNC, rl_vi_arg_digit }, /* 9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* : */ { ISFUNC, rl_vi_char_search }, /* ; */ { ISFUNC, (rl_command_func_t *)0x0 }, /* < */ { ISFUNC, rl_vi_complete }, /* = */ { ISFUNC, (rl_command_func_t *)0x0 }, /* > */ { ISFUNC, rl_vi_search }, /* ? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_vi_append_eol }, /* A */ { ISFUNC, rl_vi_prev_word}, /* B */ { ISFUNC, rl_vi_change_to }, /* C */ { ISFUNC, rl_vi_delete_to }, /* D */ { ISFUNC, rl_vi_end_word }, /* E */ { ISFUNC, rl_vi_char_search }, /* F */ { ISFUNC, rl_vi_fetch_history }, /* G */ { ISFUNC, (rl_command_func_t *)0x0 }, /* H */ { ISFUNC, rl_vi_insert_beg }, /* I */ { ISFUNC, (rl_command_func_t *)0x0 }, /* J */ { ISFUNC, (rl_command_func_t *)0x0 }, /* K */ { ISFUNC, (rl_command_func_t *)0x0 }, /* L */ { ISFUNC, (rl_command_func_t *)0x0 }, /* M */ { ISFUNC, rl_vi_search_again }, /* N */ { ISFUNC, (rl_command_func_t *)0x0 }, /* O */ { ISFUNC, rl_vi_put }, /* P */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Q */ { ISFUNC, rl_vi_replace }, /* R */ { ISFUNC, rl_vi_subst }, /* S */ { ISFUNC, rl_vi_char_search }, /* T */ { ISFUNC, rl_revert_line }, /* U */ { ISFUNC, (rl_command_func_t *)0x0 }, /* V */ { ISFUNC, rl_vi_next_word }, /* W */ { ISFUNC, rl_vi_rubout }, /* X */ { ISFUNC, rl_vi_yank_to }, /* Y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Z */ /* Some more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* [ */ { ISFUNC, rl_vi_complete }, /* \ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ] */ { ISFUNC, rl_vi_first_print }, /* ^ */ { ISFUNC, rl_vi_yank_arg }, /* _ */ { ISFUNC, rl_vi_goto_mark }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, rl_vi_append_mode }, /* a */ { ISFUNC, rl_vi_prev_word }, /* b */ { ISFUNC, rl_vi_change_to }, /* c */ { ISFUNC, rl_vi_delete_to }, /* d */ { ISFUNC, rl_vi_end_word }, /* e */ { ISFUNC, rl_vi_char_search }, /* f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ { ISFUNC, rl_backward_char }, /* h */ { ISFUNC, rl_vi_insert_mode }, /* i */ { ISFUNC, rl_get_next_history }, /* j */ { ISFUNC, rl_get_previous_history }, /* k */ { ISFUNC, rl_forward_char }, /* l */ { ISFUNC, rl_vi_set_mark }, /* m */ { ISFUNC, rl_vi_search_again }, /* n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* o */ { ISFUNC, rl_vi_put }, /* p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* q */ { ISFUNC, rl_vi_change_char }, /* r */ { ISFUNC, rl_vi_subst }, /* s */ { ISFUNC, rl_vi_char_search }, /* t */ { ISFUNC, rl_vi_undo }, /* u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* v */ { ISFUNC, rl_vi_next_word }, /* w */ { ISFUNC, rl_vi_delete }, /* x */ { ISFUNC, rl_vi_yank_to }, /* y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* { */ { ISFUNC, rl_vi_column }, /* | */ { ISFUNC, (rl_command_func_t *)0x0 }, /* } */ { ISFUNC, rl_vi_change_case }, /* ~ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; KEYMAP_ENTRY_ARRAY vi_insertion_keymap = { /* The regular control keys come first. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, rl_insert }, /* Control-a */ { ISFUNC, rl_insert }, /* Control-b */ { ISFUNC, rl_insert }, /* Control-c */ { ISFUNC, rl_vi_eof_maybe }, /* Control-d */ { ISFUNC, rl_insert }, /* Control-e */ { ISFUNC, rl_insert }, /* Control-f */ { ISFUNC, rl_insert }, /* Control-g */ { ISFUNC, rl_rubout }, /* Control-h */ { ISFUNC, rl_complete }, /* Control-i */ { ISFUNC, rl_newline }, /* Control-j */ { ISFUNC, rl_insert }, /* Control-k */ { ISFUNC, rl_insert }, /* Control-l */ { ISFUNC, rl_newline }, /* Control-m */ { ISFUNC, rl_menu_complete}, /* Control-n */ { ISFUNC, rl_insert }, /* Control-o */ { ISFUNC, rl_backward_menu_complete }, /* Control-p */ { ISFUNC, rl_insert }, /* Control-q */ { ISFUNC, rl_reverse_search_history }, /* Control-r */ { ISFUNC, rl_forward_search_history }, /* Control-s */ { ISFUNC, rl_transpose_chars }, /* Control-t */ { ISFUNC, rl_unix_line_discard }, /* Control-u */ { ISFUNC, rl_quoted_insert }, /* Control-v */ { ISFUNC, rl_unix_word_rubout }, /* Control-w */ { ISFUNC, rl_insert }, /* Control-x */ { ISFUNC, rl_yank }, /* Control-y */ { ISFUNC, rl_insert }, /* Control-z */ { ISFUNC, rl_vi_movement_mode }, /* Control-[ */ { ISFUNC, rl_insert }, /* Control-\ */ { ISFUNC, rl_insert }, /* Control-] */ { ISFUNC, rl_insert }, /* Control-^ */ { ISFUNC, rl_vi_undo }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_insert }, /* SPACE */ { ISFUNC, rl_insert }, /* ! */ { ISFUNC, rl_insert }, /* " */ { ISFUNC, rl_insert }, /* # */ { ISFUNC, rl_insert }, /* $ */ { ISFUNC, rl_insert }, /* % */ { ISFUNC, rl_insert }, /* & */ { ISFUNC, rl_insert }, /* ' */ { ISFUNC, rl_insert }, /* ( */ { ISFUNC, rl_insert }, /* ) */ { ISFUNC, rl_insert }, /* * */ { ISFUNC, rl_insert }, /* + */ { ISFUNC, rl_insert }, /* , */ { ISFUNC, rl_insert }, /* - */ { ISFUNC, rl_insert }, /* . */ { ISFUNC, rl_insert }, /* / */ /* Regular digits. */ { ISFUNC, rl_insert }, /* 0 */ { ISFUNC, rl_insert }, /* 1 */ { ISFUNC, rl_insert }, /* 2 */ { ISFUNC, rl_insert }, /* 3 */ { ISFUNC, rl_insert }, /* 4 */ { ISFUNC, rl_insert }, /* 5 */ { ISFUNC, rl_insert }, /* 6 */ { ISFUNC, rl_insert }, /* 7 */ { ISFUNC, rl_insert }, /* 8 */ { ISFUNC, rl_insert }, /* 9 */ /* A little more punctuation. */ { ISFUNC, rl_insert }, /* : */ { ISFUNC, rl_insert }, /* ; */ { ISFUNC, rl_insert }, /* < */ { ISFUNC, rl_insert }, /* = */ { ISFUNC, rl_insert }, /* > */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_insert }, /* A */ { ISFUNC, rl_insert }, /* B */ { ISFUNC, rl_insert }, /* C */ { ISFUNC, rl_insert }, /* D */ { ISFUNC, rl_insert }, /* E */ { ISFUNC, rl_insert }, /* F */ { ISFUNC, rl_insert }, /* G */ { ISFUNC, rl_insert }, /* H */ { ISFUNC, rl_insert }, /* I */ { ISFUNC, rl_insert }, /* J */ { ISFUNC, rl_insert }, /* K */ { ISFUNC, rl_insert }, /* L */ { ISFUNC, rl_insert }, /* M */ { ISFUNC, rl_insert }, /* N */ { ISFUNC, rl_insert }, /* O */ { ISFUNC, rl_insert }, /* P */ { ISFUNC, rl_insert }, /* Q */ { ISFUNC, rl_insert }, /* R */ { ISFUNC, rl_insert }, /* S */ { ISFUNC, rl_insert }, /* T */ { ISFUNC, rl_insert }, /* U */ { ISFUNC, rl_insert }, /* V */ { ISFUNC, rl_insert }, /* W */ { ISFUNC, rl_insert }, /* X */ { ISFUNC, rl_insert }, /* Y */ { ISFUNC, rl_insert }, /* Z */ /* Some more punctuation. */ { ISFUNC, rl_insert }, /* [ */ { ISFUNC, rl_insert }, /* \ */ { ISFUNC, rl_insert }, /* ] */ { ISFUNC, rl_insert }, /* ^ */ { ISFUNC, rl_insert }, /* _ */ { ISFUNC, rl_insert }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, rl_insert }, /* a */ { ISFUNC, rl_insert }, /* b */ { ISFUNC, rl_insert }, /* c */ { ISFUNC, rl_insert }, /* d */ { ISFUNC, rl_insert }, /* e */ { ISFUNC, rl_insert }, /* f */ { ISFUNC, rl_insert }, /* g */ { ISFUNC, rl_insert }, /* h */ { ISFUNC, rl_insert }, /* i */ { ISFUNC, rl_insert }, /* j */ { ISFUNC, rl_insert }, /* k */ { ISFUNC, rl_insert }, /* l */ { ISFUNC, rl_insert }, /* m */ { ISFUNC, rl_insert }, /* n */ { ISFUNC, rl_insert }, /* o */ { ISFUNC, rl_insert }, /* p */ { ISFUNC, rl_insert }, /* q */ { ISFUNC, rl_insert }, /* r */ { ISFUNC, rl_insert }, /* s */ { ISFUNC, rl_insert }, /* t */ { ISFUNC, rl_insert }, /* u */ { ISFUNC, rl_insert }, /* v */ { ISFUNC, rl_insert }, /* w */ { ISFUNC, rl_insert }, /* x */ { ISFUNC, rl_insert }, /* y */ { ISFUNC, rl_insert }, /* z */ /* Final punctuation. */ { ISFUNC, rl_insert }, /* { */ { ISFUNC, rl_insert }, /* | */ { ISFUNC, rl_insert }, /* } */ { ISFUNC, rl_insert }, /* ~ */ { ISFUNC, rl_rubout }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Pure 8-bit characters (128 - 159). These might be used in some character sets. */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ /* ISO Latin-1 characters (160 - 255) */ { ISFUNC, rl_insert }, /* No-break space */ { ISFUNC, rl_insert }, /* Inverted exclamation mark */ { ISFUNC, rl_insert }, /* Cent sign */ { ISFUNC, rl_insert }, /* Pound sign */ { ISFUNC, rl_insert }, /* Currency sign */ { ISFUNC, rl_insert }, /* Yen sign */ { ISFUNC, rl_insert }, /* Broken bar */ { ISFUNC, rl_insert }, /* Section sign */ { ISFUNC, rl_insert }, /* Diaeresis */ { ISFUNC, rl_insert }, /* Copyright sign */ { ISFUNC, rl_insert }, /* Feminine ordinal indicator */ { ISFUNC, rl_insert }, /* Left pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Not sign */ { ISFUNC, rl_insert }, /* Soft hyphen */ { ISFUNC, rl_insert }, /* Registered sign */ { ISFUNC, rl_insert }, /* Macron */ { ISFUNC, rl_insert }, /* Degree sign */ { ISFUNC, rl_insert }, /* Plus-minus sign */ { ISFUNC, rl_insert }, /* Superscript two */ { ISFUNC, rl_insert }, /* Superscript three */ { ISFUNC, rl_insert }, /* Acute accent */ { ISFUNC, rl_insert }, /* Micro sign */ { ISFUNC, rl_insert }, /* Pilcrow sign */ { ISFUNC, rl_insert }, /* Middle dot */ { ISFUNC, rl_insert }, /* Cedilla */ { ISFUNC, rl_insert }, /* Superscript one */ { ISFUNC, rl_insert }, /* Masculine ordinal indicator */ { ISFUNC, rl_insert }, /* Right pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Vulgar fraction one quarter */ { ISFUNC, rl_insert }, /* Vulgar fraction one half */ { ISFUNC, rl_insert }, /* Vulgar fraction three quarters */ { ISFUNC, rl_insert }, /* Inverted questionk mark */ { ISFUNC, rl_insert }, /* Latin capital letter a with grave */ { ISFUNC, rl_insert }, /* Latin capital letter a with acute */ { ISFUNC, rl_insert }, /* Latin capital letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter a with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter a with ring above */ { ISFUNC, rl_insert }, /* Latin capital letter ae */ { ISFUNC, rl_insert }, /* Latin capital letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin capital letter e with grave */ { ISFUNC, rl_insert }, /* Latin capital letter e with acute */ { ISFUNC, rl_insert }, /* Latin capital letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter i with grave */ { ISFUNC, rl_insert }, /* Latin capital letter i with acute */ { ISFUNC, rl_insert }, /* Latin capital letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin capital letter n with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with grave */ { ISFUNC, rl_insert }, /* Latin capital letter o with acute */ { ISFUNC, rl_insert }, /* Latin capital letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter o with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with diaeresis */ { ISFUNC, rl_insert }, /* Multiplication sign */ { ISFUNC, rl_insert }, /* Latin capital letter o with stroke */ { ISFUNC, rl_insert }, /* Latin capital letter u with grave */ { ISFUNC, rl_insert }, /* Latin capital letter u with acute */ { ISFUNC, rl_insert }, /* Latin capital letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */ { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */ { ISFUNC, rl_insert }, /* Latin small letter a with grave */ { ISFUNC, rl_insert }, /* Latin small letter a with acute */ { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter a with tilde */ { ISFUNC, rl_insert }, /* Latin small letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter a with ring above */ { ISFUNC, rl_insert }, /* Latin small letter ae */ { ISFUNC, rl_insert }, /* Latin small letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin small letter e with grave */ { ISFUNC, rl_insert }, /* Latin small letter e with acute */ { ISFUNC, rl_insert }, /* Latin small letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter i with grave */ { ISFUNC, rl_insert }, /* Latin small letter i with acute */ { ISFUNC, rl_insert }, /* Latin small letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter n with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with grave */ { ISFUNC, rl_insert }, /* Latin small letter o with acute */ { ISFUNC, rl_insert }, /* Latin small letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter o with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with diaeresis */ { ISFUNC, rl_insert }, /* Division sign */ { ISFUNC, rl_insert }, /* Latin small letter o with stroke */ { ISFUNC, rl_insert }, /* Latin small letter u with grave */ { ISFUNC, rl_insert }, /* Latin small letter u with acute */ { ISFUNC, rl_insert }, /* Latin small letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter y with acute */ { ISFUNC, rl_insert }, /* Latin small letter thorn (Icelandic) */ { ISFUNC, rl_insert } /* Latin small letter y with diaeresis */ #endif /* KEYMAP_SIZE > 128 */ }; /* Unused for the time being. */ #if 0 KEYMAP_ENTRY_ARRAY vi_escape_keymap = { /* The regular control keys come first. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-h */ { ISFUNC, rl_tab_insert}, /* Control-i */ { ISFUNC, rl_emacs_editing_mode}, /* Control-j */ { ISFUNC, rl_kill_line }, /* Control-k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-l */ { ISFUNC, rl_emacs_editing_mode}, /* Control-m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-q */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISFUNC, rl_vi_movement_mode }, /* Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, rl_vi_undo }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* " */ { ISFUNC, (rl_command_func_t *)0x0 }, /* # */ { ISFUNC, (rl_command_func_t *)0x0 }, /* $ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* % */ { ISFUNC, (rl_command_func_t *)0x0 }, /* & */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ' */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ( */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ) */ { ISFUNC, (rl_command_func_t *)0x0 }, /* * */ { ISFUNC, (rl_command_func_t *)0x0 }, /* + */ { ISFUNC, (rl_command_func_t *)0x0 }, /* , */ { ISFUNC, (rl_command_func_t *)0x0 }, /* - */ { ISFUNC, (rl_command_func_t *)0x0 }, /* . */ { ISFUNC, (rl_command_func_t *)0x0 }, /* / */ /* Regular digits. */ { ISFUNC, rl_vi_arg_digit }, /* 0 */ { ISFUNC, rl_vi_arg_digit }, /* 1 */ { ISFUNC, rl_vi_arg_digit }, /* 2 */ { ISFUNC, rl_vi_arg_digit }, /* 3 */ { ISFUNC, rl_vi_arg_digit }, /* 4 */ { ISFUNC, rl_vi_arg_digit }, /* 5 */ { ISFUNC, rl_vi_arg_digit }, /* 6 */ { ISFUNC, rl_vi_arg_digit }, /* 7 */ { ISFUNC, rl_vi_arg_digit }, /* 8 */ { ISFUNC, rl_vi_arg_digit }, /* 9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* : */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ; */ { ISFUNC, (rl_command_func_t *)0x0 }, /* < */ { ISFUNC, (rl_command_func_t *)0x0 }, /* = */ { ISFUNC, (rl_command_func_t *)0x0 }, /* > */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_do_lowercase_version }, /* A */ { ISFUNC, rl_do_lowercase_version }, /* B */ { ISFUNC, rl_do_lowercase_version }, /* C */ { ISFUNC, rl_do_lowercase_version }, /* D */ { ISFUNC, rl_do_lowercase_version }, /* E */ { ISFUNC, rl_do_lowercase_version }, /* F */ { ISFUNC, rl_do_lowercase_version }, /* G */ { ISFUNC, rl_do_lowercase_version }, /* H */ { ISFUNC, rl_do_lowercase_version }, /* I */ { ISFUNC, rl_do_lowercase_version }, /* J */ { ISFUNC, rl_do_lowercase_version }, /* K */ { ISFUNC, rl_do_lowercase_version }, /* L */ { ISFUNC, rl_do_lowercase_version }, /* M */ { ISFUNC, rl_do_lowercase_version }, /* N */ { ISFUNC, rl_do_lowercase_version }, /* O */ { ISFUNC, rl_do_lowercase_version }, /* P */ { ISFUNC, rl_do_lowercase_version }, /* Q */ { ISFUNC, rl_do_lowercase_version }, /* R */ { ISFUNC, rl_do_lowercase_version }, /* S */ { ISFUNC, rl_do_lowercase_version }, /* T */ { ISFUNC, rl_do_lowercase_version }, /* U */ { ISFUNC, rl_do_lowercase_version }, /* V */ { ISFUNC, rl_do_lowercase_version }, /* W */ { ISFUNC, rl_do_lowercase_version }, /* X */ { ISFUNC, rl_do_lowercase_version }, /* Y */ { ISFUNC, rl_do_lowercase_version }, /* Z */ /* Some more punctuation. */ { ISFUNC, rl_arrow_keys }, /* [ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* \ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* _ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* n */ { ISFUNC, rl_arrow_keys }, /* o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* q */ { ISFUNC, (rl_command_func_t *)0x0 }, /* r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* { */ { ISFUNC, (rl_command_func_t *)0x0 }, /* | */ { ISFUNC, (rl_command_func_t *)0x0 }, /* } */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ~ */ { ISFUNC, rl_backward_kill_word }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; #endif readline-6.3/vi_mode.c0000664000043600000000000013606012020511142013523 0ustar chetwheel/* vi_mode.c -- A vi emulation mode for Bash. Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */ /* Copyright (C) 1987-2012 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY /* **************************************************************** */ /* */ /* VI Emulation Mode */ /* */ /* **************************************************************** */ #include "rlconf.h" #if defined (VI_MODE) #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # include #endif #include /* Some standard library routines. */ #include "rldefs.h" #include "rlmbutil.h" #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" #ifndef member #define member(c, s) ((c) ? (char *)strchr ((s), (c)) != (char *)NULL : 0) #endif int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */ _rl_vimotion_cxt *_rl_vimvcxt = 0; /* Non-zero means enter insertion mode. */ static int _rl_vi_doing_insert; /* Command keys which do movement for xxx_to commands. */ static const char * const vi_motion = " hl^$0ftFT;,%wbeWBE|`"; /* Keymap used for vi replace characters. Created dynamically since rarely used. */ static Keymap vi_replace_map; /* The number of characters inserted in the last replace operation. */ static int vi_replace_count; /* If non-zero, we have text inserted after a c[motion] command that put us implicitly into insert mode. Some people want this text to be attached to the command so that it is `redoable' with `.'. */ static int vi_continued_command; static char *vi_insert_buffer; static int vi_insert_buffer_size; static int _rl_vi_last_repeat = 1; static int _rl_vi_last_arg_sign = 1; static int _rl_vi_last_motion; #if defined (HANDLE_MULTIBYTE) static char _rl_vi_last_search_mbchar[MB_LEN_MAX]; static int _rl_vi_last_search_mblen; #else static int _rl_vi_last_search_char; #endif static int _rl_vi_last_replacement; static int _rl_vi_last_key_before_insert; static int vi_redoing; /* Text modification commands. These are the `redoable' commands. */ static const char * const vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; /* Arrays for the saved marks. */ static int vi_mark_chars['z' - 'a' + 1]; static void _rl_vi_replace_insert PARAMS((int)); static void _rl_vi_save_replace PARAMS((void)); static void _rl_vi_stuff_insert PARAMS((int)); static void _rl_vi_save_insert PARAMS((UNDO_LIST *)); static void vi_save_insert_buffer PARAMS ((int, int)); static void _rl_vi_backup PARAMS((void)); static int _rl_vi_arg_dispatch PARAMS((int)); static int rl_digit_loop1 PARAMS((void)); static int _rl_vi_set_mark PARAMS((void)); static int _rl_vi_goto_mark PARAMS((void)); static void _rl_vi_append_forward PARAMS((int)); static int _rl_vi_callback_getchar PARAMS((char *, int)); #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_set_mark PARAMS((_rl_callback_generic_arg *)); static int _rl_vi_callback_goto_mark PARAMS((_rl_callback_generic_arg *)); static int _rl_vi_callback_change_char PARAMS((_rl_callback_generic_arg *)); static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *)); #endif static int rl_domove_read_callback PARAMS((_rl_vimotion_cxt *)); static int rl_domove_motion_callback PARAMS((_rl_vimotion_cxt *)); static int rl_vi_domove_getchar PARAMS((_rl_vimotion_cxt *)); static int vi_change_dispatch PARAMS((_rl_vimotion_cxt *)); static int vi_delete_dispatch PARAMS((_rl_vimotion_cxt *)); static int vi_yank_dispatch PARAMS((_rl_vimotion_cxt *)); static int vidomove_dispatch PARAMS((_rl_vimotion_cxt *)); void _rl_vi_initialize_line () { register int i, n; n = sizeof (vi_mark_chars) / sizeof (vi_mark_chars[0]); for (i = 0; i < n; i++) vi_mark_chars[i] = -1; RL_UNSETSTATE(RL_STATE_VICMDONCE); } void _rl_vi_reset_last () { _rl_vi_last_command = 'i'; _rl_vi_last_repeat = 1; _rl_vi_last_arg_sign = 1; _rl_vi_last_motion = 0; } void _rl_vi_set_last (key, repeat, sign) int key, repeat, sign; { _rl_vi_last_command = key; _rl_vi_last_repeat = repeat; _rl_vi_last_arg_sign = sign; } /* A convenience function that calls _rl_vi_set_last to save the last command information and enters insertion mode. */ void rl_vi_start_inserting (key, repeat, sign) int key, repeat, sign; { _rl_vi_set_last (key, repeat, sign); rl_vi_insertion_mode (1, key); } /* Is the command C a VI mode text modification command? */ int _rl_vi_textmod_command (c) int c; { return (member (c, vi_textmod)); } static void _rl_vi_replace_insert (count) int count; { int nchars; nchars = strlen (vi_insert_buffer); rl_begin_undo_group (); while (count--) /* nchars-1 to compensate for _rl_replace_text using `end+1' in call to rl_delete_text */ _rl_replace_text (vi_insert_buffer, rl_point, rl_point+nchars-1); rl_end_undo_group (); } static void _rl_vi_stuff_insert (count) int count; { rl_begin_undo_group (); while (count--) rl_insert_text (vi_insert_buffer); rl_end_undo_group (); } /* Bound to `.'. Called from command mode, so we know that we have to redo a text modification command. The default for _rl_vi_last_command puts you back into insert mode. */ int rl_vi_redo (count, c) int count, c; { int r; if (rl_explicit_arg == 0) { rl_numeric_arg = _rl_vi_last_repeat; rl_arg_sign = _rl_vi_last_arg_sign; } r = 0; vi_redoing = 1; /* If we're redoing an insert with `i', stuff in the inserted text and do not go into insertion mode. */ if (_rl_vi_last_command == 'i' && vi_insert_buffer && *vi_insert_buffer) { _rl_vi_stuff_insert (count); /* And back up point over the last character inserted. */ if (rl_point > 0) _rl_vi_backup (); } else if (_rl_vi_last_command == 'R' && vi_insert_buffer && *vi_insert_buffer) { _rl_vi_replace_insert (count); /* And back up point over the last character inserted. */ if (rl_point > 0) _rl_vi_backup (); } /* Ditto for redoing an insert with `I', but move to the beginning of the line like the `I' command does. */ else if (_rl_vi_last_command == 'I' && vi_insert_buffer && *vi_insert_buffer) { rl_beg_of_line (1, 'I'); _rl_vi_stuff_insert (count); if (rl_point > 0) _rl_vi_backup (); } /* Ditto for redoing an insert with `a', but move forward a character first like the `a' command does. */ else if (_rl_vi_last_command == 'a' && vi_insert_buffer && *vi_insert_buffer) { _rl_vi_append_forward ('a'); _rl_vi_stuff_insert (count); if (rl_point > 0) _rl_vi_backup (); } /* Ditto for redoing an insert with `A', but move to the end of the line like the `A' command does. */ else if (_rl_vi_last_command == 'A' && vi_insert_buffer && *vi_insert_buffer) { rl_end_of_line (1, 'A'); _rl_vi_stuff_insert (count); if (rl_point > 0) _rl_vi_backup (); } else r = _rl_dispatch (_rl_vi_last_command, _rl_keymap); vi_redoing = 0; return (r); } /* A placeholder for further expansion. */ int rl_vi_undo (count, key) int count, key; { return (rl_undo_command (count, key)); } /* Yank the nth arg from the previous line into this line at point. */ int rl_vi_yank_arg (count, key) int count, key; { /* Readline thinks that the first word on a line is the 0th, while vi thinks the first word on a line is the 1st. Compensate. */ if (rl_explicit_arg) rl_yank_nth_arg (count - 1, 0); else rl_yank_nth_arg ('$', 0); return (0); } /* With an argument, move back that many history lines, else move to the beginning of history. */ int rl_vi_fetch_history (count, c) int count, c; { int wanted; /* Giving an argument of n means we want the nth command in the history file. The command number is interpreted the same way that the bash `history' command does it -- that is, giving an argument count of 450 to this command would get the command listed as number 450 in the output of `history'. */ if (rl_explicit_arg) { wanted = history_base + where_history () - count; if (wanted <= 0) rl_beginning_of_history (0, 0); else rl_get_previous_history (wanted, c); } else rl_beginning_of_history (count, 0); return (0); } /* Search again for the last thing searched for. */ int rl_vi_search_again (count, key) int count, key; { switch (key) { case 'n': rl_noninc_reverse_search_again (count, key); break; case 'N': rl_noninc_forward_search_again (count, key); break; } return (0); } /* Do a vi style search. */ int rl_vi_search (count, key) int count, key; { switch (key) { case '?': _rl_free_saved_history_line (); rl_noninc_forward_search (count, key); break; case '/': _rl_free_saved_history_line (); rl_noninc_reverse_search (count, key); break; default: rl_ding (); break; } return (0); } /* Completion, from vi's point of view. */ int rl_vi_complete (ignore, key) int ignore, key; { if ((rl_point < rl_end) && (!whitespace (rl_line_buffer[rl_point]))) { if (!whitespace (rl_line_buffer[rl_point + 1])) rl_vi_end_word (1, 'E'); rl_point++; } if (key == '*') rl_complete_internal ('*'); /* Expansion and replacement. */ else if (key == '=') rl_complete_internal ('?'); /* List possible completions. */ else if (key == '\\') rl_complete_internal (TAB); /* Standard Readline completion. */ else rl_complete (0, key); if (key == '*' || key == '\\') rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } /* Tilde expansion for vi mode. */ int rl_vi_tilde_expand (ignore, key) int ignore, key; { rl_tilde_expand (0, key); rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } /* Previous word in vi mode. */ int rl_vi_prev_word (count, key) int count, key; { if (count < 0) return (rl_vi_next_word (-count, key)); if (rl_point == 0) { rl_ding (); return (0); } if (_rl_uppercase_p (key)) rl_vi_bWord (count, key); else rl_vi_bword (count, key); return (0); } /* Next word in vi mode. */ int rl_vi_next_word (count, key) int count, key; { if (count < 0) return (rl_vi_prev_word (-count, key)); if (rl_point >= (rl_end - 1)) { rl_ding (); return (0); } if (_rl_uppercase_p (key)) rl_vi_fWord (count, key); else rl_vi_fword (count, key); return (0); } /* Move to the end of the ?next? word. */ int rl_vi_end_word (count, key) int count, key; { if (count < 0) { rl_ding (); return -1; } if (_rl_uppercase_p (key)) rl_vi_eWord (count, key); else rl_vi_eword (count, key); return (0); } /* Move forward a word the way that 'W' does. */ int rl_vi_fWord (count, ignore) int count, ignore; { while (count-- && rl_point < (rl_end - 1)) { /* Skip until whitespace. */ while (!whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; /* Now skip whitespace. */ while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } return (0); } int rl_vi_bWord (count, ignore) int count, ignore; { while (count-- && rl_point > 0) { /* If we are at the start of a word, move back to whitespace so we will go back to the start of the previous word. */ if (!whitespace (rl_line_buffer[rl_point]) && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; while (rl_point > 0 && whitespace (rl_line_buffer[rl_point])) rl_point--; if (rl_point > 0) { while (--rl_point >= 0 && !whitespace (rl_line_buffer[rl_point])); rl_point++; } } return (0); } int rl_vi_eWord (count, ignore) int count, ignore; { while (count-- && rl_point < (rl_end - 1)) { if (!whitespace (rl_line_buffer[rl_point])) rl_point++; /* Move to the next non-whitespace character (to the start of the next word). */ while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; if (rl_point && rl_point < rl_end) { /* Skip whitespace. */ while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; /* Skip until whitespace. */ while (rl_point < rl_end && !whitespace (rl_line_buffer[rl_point])) rl_point++; /* Move back to the last character of the word. */ rl_point--; } } return (0); } int rl_vi_fword (count, ignore) int count, ignore; { while (count-- && rl_point < (rl_end - 1)) { /* Move to white space (really non-identifer). */ if (_rl_isident (rl_line_buffer[rl_point])) { while (_rl_isident (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } else /* if (!whitespace (rl_line_buffer[rl_point])) */ { while (!_rl_isident (rl_line_buffer[rl_point]) && !whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } /* Move past whitespace. */ while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } return (0); } int rl_vi_bword (count, ignore) int count, ignore; { while (count-- && rl_point > 0) { int last_is_ident; /* If we are at the start of a word, move back to whitespace so we will go back to the start of the previous word. */ if (!whitespace (rl_line_buffer[rl_point]) && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; /* If this character and the previous character are `opposite', move back so we don't get messed up by the rl_point++ down there in the while loop. Without this code, words like `l;' screw up the function. */ last_is_ident = _rl_isident (rl_line_buffer[rl_point - 1]); if ((_rl_isident (rl_line_buffer[rl_point]) && !last_is_ident) || (!_rl_isident (rl_line_buffer[rl_point]) && last_is_ident)) rl_point--; while (rl_point > 0 && whitespace (rl_line_buffer[rl_point])) rl_point--; if (rl_point > 0) { if (_rl_isident (rl_line_buffer[rl_point])) while (--rl_point >= 0 && _rl_isident (rl_line_buffer[rl_point])); else while (--rl_point >= 0 && !_rl_isident (rl_line_buffer[rl_point]) && !whitespace (rl_line_buffer[rl_point])); rl_point++; } } return (0); } int rl_vi_eword (count, ignore) int count, ignore; { while (count-- && rl_point < rl_end - 1) { if (!whitespace (rl_line_buffer[rl_point])) rl_point++; while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; if (rl_point < rl_end) { if (_rl_isident (rl_line_buffer[rl_point])) while (++rl_point < rl_end && _rl_isident (rl_line_buffer[rl_point])); else while (++rl_point < rl_end && !_rl_isident (rl_line_buffer[rl_point]) && !whitespace (rl_line_buffer[rl_point])); } rl_point--; } return (0); } int rl_vi_insert_beg (count, key) int count, key; { rl_beg_of_line (1, key); rl_vi_insert_mode (1, key); return (0); } static void _rl_vi_append_forward (key) int key; { int point; if (rl_point < rl_end) { if (MB_CUR_MAX == 1 || rl_byte_oriented) rl_point++; else { point = rl_point; #if 0 rl_forward_char (1, key); #else rl_point = _rl_forward_char_internal (1); #endif if (point == rl_point) rl_point = rl_end; } } } int rl_vi_append_mode (count, key) int count, key; { _rl_vi_append_forward (key); rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } int rl_vi_append_eol (count, key) int count, key; { rl_end_of_line (1, key); rl_vi_append_mode (1, key); return (0); } /* What to do in the case of C-d. */ int rl_vi_eof_maybe (count, c) int count, c; { return (rl_newline (1, '\n')); } /* Insertion mode stuff. */ /* Switching from one mode to the other really just involves switching keymaps. */ int rl_vi_insertion_mode (count, key) int count, key; { _rl_keymap = vi_insertion_keymap; _rl_vi_last_key_before_insert = key; if (_rl_show_mode_in_prompt) _rl_reset_prompt (); return (0); } int rl_vi_insert_mode (count, key) int count, key; { rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } static void vi_save_insert_buffer (start, len) int start, len; { /* Same code as _rl_vi_save_insert below */ if (len >= vi_insert_buffer_size) { vi_insert_buffer_size += (len + 32) - (len % 32); vi_insert_buffer = (char *)xrealloc (vi_insert_buffer, vi_insert_buffer_size); } strncpy (vi_insert_buffer, rl_line_buffer + start, len - 1); vi_insert_buffer[len-1] = '\0'; } static void _rl_vi_save_replace () { int len, start, end; UNDO_LIST *up; up = rl_undo_list; if (up == 0 || up->what != UNDO_END || vi_replace_count <= 0) { if (vi_insert_buffer_size >= 1) vi_insert_buffer[0] = '\0'; return; } /* Let's try it the quick and easy way for now. This should essentially accommodate every UNDO_INSERT and save the inserted text to vi_insert_buffer */ end = rl_point; start = end - vi_replace_count + 1; len = vi_replace_count + 1; vi_save_insert_buffer (start, len); } static void _rl_vi_save_insert (up) UNDO_LIST *up; { int len, start, end; if (up == 0 || up->what != UNDO_INSERT) { if (vi_insert_buffer_size >= 1) vi_insert_buffer[0] = '\0'; return; } start = up->start; end = up->end; len = end - start + 1; vi_save_insert_buffer (start, len); } void _rl_vi_done_inserting () { if (_rl_vi_doing_insert) { /* The `C', `s', and `S' commands set this. */ rl_end_undo_group (); /* Now, the text between rl_undo_list->next->start and rl_undo_list->next->end is what was inserted while in insert mode. It gets copied to VI_INSERT_BUFFER because it depends on absolute indices into the line which may change (though they probably will not). */ _rl_vi_doing_insert = 0; if (_rl_vi_last_key_before_insert == 'R') _rl_vi_save_replace (); /* Half the battle */ else _rl_vi_save_insert (rl_undo_list->next); vi_continued_command = 1; } else { if (rl_undo_list && (_rl_vi_last_key_before_insert == 'i' || _rl_vi_last_key_before_insert == 'a' || _rl_vi_last_key_before_insert == 'I' || _rl_vi_last_key_before_insert == 'A')) _rl_vi_save_insert (rl_undo_list); /* XXX - Other keys probably need to be checked. */ else if (_rl_vi_last_key_before_insert == 'C') rl_end_undo_group (); while (_rl_undo_group_level > 0) rl_end_undo_group (); vi_continued_command = 0; } } int rl_vi_movement_mode (count, key) int count, key; { if (rl_point > 0) rl_backward_char (1, key); _rl_keymap = vi_movement_keymap; _rl_vi_done_inserting (); /* This is how POSIX.2 says `U' should behave -- everything up until the first time you go into command mode should not be undone. */ if (RL_ISSTATE (RL_STATE_VICMDONCE) == 0) rl_free_undo_list (); if (_rl_show_mode_in_prompt) _rl_reset_prompt (); RL_SETSTATE (RL_STATE_VICMDONCE); return (0); } int rl_vi_arg_digit (count, c) int count, c; { if (c == '0' && rl_numeric_arg == 1 && !rl_explicit_arg) return (rl_beg_of_line (1, c)); else return (rl_digit_argument (count, c)); } /* Change the case of the next COUNT characters. */ #if defined (HANDLE_MULTIBYTE) static int _rl_vi_change_mbchar_case (count) int count; { wchar_t wc; char mb[MB_LEN_MAX+1]; int mlen, p; size_t m; mbstate_t ps; memset (&ps, 0, sizeof (mbstate_t)); if (_rl_adjust_point (rl_line_buffer, rl_point, &ps) > 0) count--; while (count-- && rl_point < rl_end) { m = mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps); if (MB_INVALIDCH (m)) wc = (wchar_t)rl_line_buffer[rl_point]; else if (MB_NULLWCH (m)) wc = L'\0'; if (iswupper (wc)) wc = towlower (wc); else if (iswlower (wc)) wc = towupper (wc); else { /* Just skip over chars neither upper nor lower case */ rl_forward_char (1, 0); continue; } /* Vi is kind of strange here. */ if (wc) { p = rl_point; mlen = wcrtomb (mb, wc, &ps); if (mlen >= 0) mb[mlen] = '\0'; rl_begin_undo_group (); rl_vi_delete (1, 0); if (rl_point < p) /* Did we retreat at EOL? */ rl_point++; /* XXX - should we advance more than 1 for mbchar? */ rl_insert_text (mb); rl_end_undo_group (); rl_vi_check (); } else rl_forward_char (1, 0); } return 0; } #endif int rl_vi_change_case (count, ignore) int count, ignore; { int c, p; /* Don't try this on an empty line. */ if (rl_point >= rl_end) return (0); c = 0; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) return (_rl_vi_change_mbchar_case (count)); #endif while (count-- && rl_point < rl_end) { if (_rl_uppercase_p (rl_line_buffer[rl_point])) c = _rl_to_lower (rl_line_buffer[rl_point]); else if (_rl_lowercase_p (rl_line_buffer[rl_point])) c = _rl_to_upper (rl_line_buffer[rl_point]); else { /* Just skip over characters neither upper nor lower case. */ rl_forward_char (1, c); continue; } /* Vi is kind of strange here. */ if (c) { p = rl_point; rl_begin_undo_group (); rl_vi_delete (1, c); if (rl_point < p) /* Did we retreat at EOL? */ rl_point++; _rl_insert_char (1, c); rl_end_undo_group (); rl_vi_check (); } else rl_forward_char (1, c); } return (0); } int rl_vi_put (count, key) int count, key; { if (!_rl_uppercase_p (key) && (rl_point + 1 <= rl_end)) rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); while (count--) rl_yank (1, key); rl_backward_char (1, key); return (0); } static void _rl_vi_backup () { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); else rl_point--; } int rl_vi_check () { if (rl_point && rl_point == rl_end) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); else rl_point--; } return (0); } int rl_vi_column (count, key) int count, key; { if (count > rl_end) rl_end_of_line (1, key); else rl_point = count - 1; return (0); } /* Process C as part of the current numeric argument. Return -1 if the argument should be aborted, 0 if we should not read any more chars, and 1 if we should continue to read chars. */ static int _rl_vi_arg_dispatch (c) int c; { int key; key = c; if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument) { rl_numeric_arg *= 4; return 1; } c = UNMETA (c); if (_rl_digit_p (c)) { if (rl_explicit_arg) rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c); else rl_numeric_arg = _rl_digit_value (c); rl_explicit_arg = 1; return 1; /* keep going */ } else { rl_clear_message (); rl_stuff_char (key); return 0; /* done */ } } /* A simplified loop for vi. Don't dispatch key at end. Don't recognize minus sign? Should this do rl_save_prompt/rl_restore_prompt? */ static int rl_digit_loop1 () { int c, r; while (1) { if (_rl_arg_overflow ()) return 1; c = _rl_arg_getchar (); r = _rl_vi_arg_dispatch (c); if (r <= 0) break; } RL_UNSETSTATE(RL_STATE_NUMERICARG); return (0); } static void _rl_mvcxt_init (m, op, key) _rl_vimotion_cxt *m; int op, key; { m->op = op; m->state = m->flags = 0; m->ncxt = 0; m->numeric_arg = -1; m->start = rl_point; m->end = rl_end; m->key = key; m->motion = -1; } static _rl_vimotion_cxt * _rl_mvcxt_alloc (op, key) int op, key; { _rl_vimotion_cxt *m; m = xmalloc (sizeof (_rl_vimotion_cxt)); _rl_mvcxt_init (m, op, key); return m; } static void _rl_mvcxt_dispose (m) _rl_vimotion_cxt *m; { xfree (m); } static int rl_domove_motion_callback (m) _rl_vimotion_cxt *m; { int c, save, r; int old_end; _rl_vi_last_motion = c = m->motion; /* Append a blank character temporarily so that the motion routines work right at the end of the line. */ old_end = rl_end; rl_line_buffer[rl_end++] = ' '; rl_line_buffer[rl_end] = '\0'; _rl_dispatch (c, _rl_keymap); /* Remove the blank that we added. */ rl_end = old_end; rl_line_buffer[rl_end] = '\0'; if (rl_point > rl_end) rl_point = rl_end; /* No change in position means the command failed. */ if (rl_mark == rl_point) return (-1); /* rl_vi_f[wW]ord () leaves the cursor on the first character of the next word. If we are not at the end of the line, and we are on a non-whitespace character, move back one (presumably to whitespace). */ if ((_rl_to_upper (c) == 'W') && rl_point < rl_end && rl_point > rl_mark && !whitespace (rl_line_buffer[rl_point])) rl_point--; /* If cw or cW, back up to the end of a word, so the behaviour of ce or cE is the actual result. Brute-force, no subtlety. */ if (m->key == 'c' && rl_point >= rl_mark && (_rl_to_upper (c) == 'W')) { /* Don't move farther back than where we started. */ while (rl_point > rl_mark && whitespace (rl_line_buffer[rl_point])) rl_point--; /* Posix.2 says that if cw or cW moves the cursor towards the end of the line, the character under the cursor should be deleted. */ if (rl_point == rl_mark) rl_point++; else { /* Move past the end of the word so that the kill doesn't remove the last letter of the previous word. Only do this if we are not at the end of the line. */ if (rl_point >= 0 && rl_point < (rl_end - 1) && !whitespace (rl_line_buffer[rl_point])) rl_point++; } } if (rl_mark < rl_point) SWAP (rl_point, rl_mark); #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) (*rl_redisplay_function)(); /* make sure motion is displayed */ #endif r = vidomove_dispatch (m); return (r); } #define RL_VIMOVENUMARG() (RL_ISSTATE (RL_STATE_VIMOTION) && RL_ISSTATE (RL_STATE_NUMERICARG)) static int rl_domove_read_callback (m) _rl_vimotion_cxt *m; { int c, save; c = m->motion; if (member (c, vi_motion)) { #if defined (READLINE_CALLBACKS) /* If we just read a vi-mode motion command numeric argument, turn off the `reading numeric arg' state */ if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG()) RL_UNSETSTATE (RL_STATE_NUMERICARG); #endif /* Should do everything, including turning off RL_STATE_VIMOTION */ return (rl_domove_motion_callback (m)); } else if (m->key == c && (m->key == 'd' || m->key == 'y' || m->key == 'c')) { rl_mark = rl_end; rl_beg_of_line (1, c); _rl_vi_last_motion = c; RL_UNSETSTATE (RL_STATE_VIMOTION); return (vidomove_dispatch (m)); } #if defined (READLINE_CALLBACKS) /* XXX - these need to handle rl_universal_argument bindings */ /* Reading vi motion char continuing numeric argument */ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG()) { return (_rl_vi_arg_dispatch (c)); } /* Readine vi motion char starting numeric argument */ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_VIMOTION) && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) { RL_SETSTATE (RL_STATE_NUMERICARG); return (_rl_vi_arg_dispatch (c)); } #endif else if (_rl_digit_p (c)) { /* This code path taken when not in callback mode */ save = rl_numeric_arg; rl_numeric_arg = _rl_digit_value (c); rl_explicit_arg = 1; RL_SETSTATE (RL_STATE_NUMERICARG); rl_digit_loop1 (); rl_numeric_arg *= save; c = rl_vi_domove_getchar (m); if (c < 0) { m->motion = 0; return -1; } m->motion = c; return (rl_domove_motion_callback (m)); } else { RL_UNSETSTATE (RL_STATE_VIMOTION); RL_UNSETSTATE (RL_STATE_NUMERICARG); return (1); } } static int rl_vi_domove_getchar (m) _rl_vimotion_cxt *m; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); return c; } #if defined (READLINE_CALLBACKS) int _rl_vi_domove_callback (m) _rl_vimotion_cxt *m; { int c, r; m->motion = c = rl_vi_domove_getchar (m); /* XXX - what to do if this returns -1? Should we return 1 for eof to callback code? */ r = rl_domove_read_callback (m); return ((r == 0) ? r : 1); /* normalize return values */ } #endif /* This code path taken when not in callback mode. */ int rl_vi_domove (x, ignore) int x, *ignore; { int r; _rl_vimotion_cxt *m; m = _rl_vimvcxt; *ignore = m->motion = rl_vi_domove_getchar (m); if (m->motion < 0) { m->motion = 0; return -1; } return (rl_domove_read_callback (m)); } static int vi_delete_dispatch (m) _rl_vimotion_cxt *m; { /* These are the motion commands that do not require adjusting the mark. */ if (((strchr (" l|h^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) && (rl_mark < rl_end)) rl_mark++; rl_kill_text (rl_point, rl_mark); return (0); } int rl_vi_delete_to (count, key) int count, key; { int c, r; _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key); _rl_vimvcxt->start = rl_point; rl_mark = rl_point; if (_rl_uppercase_p (key)) { _rl_vimvcxt->motion = '$'; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */ { _rl_vimvcxt->motion = _rl_vi_last_motion; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (vi_redoing) /* handle redoing `dd' here */ { _rl_vimvcxt->motion = _rl_vi_last_motion; rl_mark = rl_end; rl_beg_of_line (1, key); RL_UNSETSTATE (RL_STATE_VIMOTION); r = vidomove_dispatch (_rl_vimvcxt); } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { RL_SETSTATE (RL_STATE_VIMOTION); return (0); } #endif else r = rl_vi_domove (key, &c); if (r < 0) { rl_ding (); r = -1; } _rl_mvcxt_dispose (_rl_vimvcxt); _rl_vimvcxt = 0; return r; } static int vi_change_dispatch (m) _rl_vimotion_cxt *m; { /* These are the motion commands that do not require adjusting the mark. c[wW] are handled by special-case code in rl_vi_domove(), and already leave the mark at the correct location. */ if (((strchr (" l|hwW^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) && (rl_mark < rl_end)) rl_mark++; /* The cursor never moves with c[wW]. */ if ((_rl_to_upper (m->motion) == 'W') && rl_point < m->start) rl_point = m->start; if (vi_redoing) { if (vi_insert_buffer && *vi_insert_buffer) rl_begin_undo_group (); rl_delete_text (rl_point, rl_mark); if (vi_insert_buffer && *vi_insert_buffer) { rl_insert_text (vi_insert_buffer); rl_end_undo_group (); } } else { rl_begin_undo_group (); /* to make the `u' command work */ rl_kill_text (rl_point, rl_mark); /* `C' does not save the text inserted for undoing or redoing. */ if (_rl_uppercase_p (m->key) == 0) _rl_vi_doing_insert = 1; /* XXX -- TODO -- use m->numericarg? */ rl_vi_start_inserting (m->key, rl_numeric_arg, rl_arg_sign); } return (0); } int rl_vi_change_to (count, key) int count, key; { int c, r; _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key); _rl_vimvcxt->start = rl_point; rl_mark = rl_point; if (_rl_uppercase_p (key)) { _rl_vimvcxt->motion = '$'; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */ { _rl_vimvcxt->motion = _rl_vi_last_motion; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (vi_redoing) /* handle redoing `cc' here */ { _rl_vimvcxt->motion = _rl_vi_last_motion; rl_mark = rl_end; rl_beg_of_line (1, key); RL_UNSETSTATE (RL_STATE_VIMOTION); r = vidomove_dispatch (_rl_vimvcxt); } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { RL_SETSTATE (RL_STATE_VIMOTION); return (0); } #endif else r = rl_vi_domove (key, &c); if (r < 0) { rl_ding (); r = -1; /* normalize return value */ } _rl_mvcxt_dispose (_rl_vimvcxt); _rl_vimvcxt = 0; return r; } static int vi_yank_dispatch (m) _rl_vimotion_cxt *m; { /* These are the motion commands that do not require adjusting the mark. */ if (((strchr (" l|h^0%bBFT`", m->motion) == 0) && (rl_point >= m->start)) && (rl_mark < rl_end)) rl_mark++; rl_begin_undo_group (); rl_kill_text (rl_point, rl_mark); rl_end_undo_group (); rl_do_undo (); rl_point = m->start; return (0); } int rl_vi_yank_to (count, key) int count, key; { int c, r; _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key); _rl_vimvcxt->start = rl_point; rl_mark = rl_point; if (_rl_uppercase_p (key)) { _rl_vimvcxt->motion = '$'; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */ { _rl_vimvcxt->motion = _rl_vi_last_motion; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (vi_redoing) /* handle redoing `yy' here */ { _rl_vimvcxt->motion = _rl_vi_last_motion; rl_mark = rl_end; rl_beg_of_line (1, key); RL_UNSETSTATE (RL_STATE_VIMOTION); r = vidomove_dispatch (_rl_vimvcxt); } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { RL_SETSTATE (RL_STATE_VIMOTION); return (0); } #endif else r = rl_vi_domove (key, &c); if (r < 0) { rl_ding (); r = -1; } _rl_mvcxt_dispose (_rl_vimvcxt); _rl_vimvcxt = 0; return r; } static int vidomove_dispatch (m) _rl_vimotion_cxt *m; { int r; switch (m->op) { case VIM_DELETE: r = vi_delete_dispatch (m); break; case VIM_CHANGE: r = vi_change_dispatch (m); break; case VIM_YANK: r = vi_yank_dispatch (m); break; default: _rl_errmsg ("vidomove_dispatch: unknown operator %d", m->op); r = 1; break; } RL_UNSETSTATE (RL_STATE_VIMOTION); return r; } int rl_vi_rubout (count, key) int count, key; { int opoint; if (count < 0) return (rl_vi_delete (-count, key)); if (rl_point == 0) { rl_ding (); return -1; } opoint = rl_point; if (count > 1 && MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_backward_char (count, key); else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); else rl_point -= count; if (rl_point < 0) rl_point = 0; rl_kill_text (rl_point, opoint); return (0); } int rl_vi_delete (count, key) int count, key; { int end; if (count < 0) return (rl_vi_rubout (-count, key)); if (rl_end == 0) { rl_ding (); return -1; } if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) end = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); else end = rl_point + count; if (end >= rl_end) end = rl_end; rl_kill_text (rl_point, end); if (rl_point > 0 && rl_point == rl_end) rl_backward_char (1, key); return (0); } int rl_vi_back_to_indent (count, key) int count, key; { rl_beg_of_line (1, key); while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; return (0); } int rl_vi_first_print (count, key) int count, key; { return (rl_vi_back_to_indent (1, key)); } static int _rl_cs_dir, _rl_cs_orig_dir; #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_char_search (data) _rl_callback_generic_arg *data; { int c; #if defined (HANDLE_MULTIBYTE) c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); #else RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); #endif if (c <= 0) return -1; #if !defined (HANDLE_MULTIBYTE) _rl_vi_last_search_char = c; #endif _rl_callback_func = 0; _rl_want_redisplay = 1; #if defined (HANDLE_MULTIBYTE) return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_mbchar, _rl_vi_last_search_mblen)); #else return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_char)); #endif } #endif int rl_vi_char_search (count, key) int count, key; { int c; #if defined (HANDLE_MULTIBYTE) static char *target; static int tlen; #else static char target; #endif if (key == ';' || key == ',') { if (_rl_cs_orig_dir == 0) return -1; #if defined (HANDLE_MULTIBYTE) if (_rl_vi_last_search_mblen == 0) return -1; #else if (_rl_vi_last_search_char == 0) return -1; #endif _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir; } else { switch (key) { case 't': _rl_cs_orig_dir = _rl_cs_dir = FTO; break; case 'T': _rl_cs_orig_dir = _rl_cs_dir = BTO; break; case 'f': _rl_cs_orig_dir = _rl_cs_dir = FFIND; break; case 'F': _rl_cs_orig_dir = _rl_cs_dir = BFIND; break; } if (vi_redoing) { /* set target and tlen below */ } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_data->i1 = _rl_cs_dir; _rl_callback_func = _rl_vi_callback_char_search; return (0); } #endif else { #if defined (HANDLE_MULTIBYTE) c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); if (c <= 0) return -1; _rl_vi_last_search_mblen = c; #else RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return -1; _rl_vi_last_search_char = c; #endif } } #if defined (HANDLE_MULTIBYTE) target = _rl_vi_last_search_mbchar; tlen = _rl_vi_last_search_mblen; #else target = _rl_vi_last_search_char; #endif #if defined (HANDLE_MULTIBYTE) return (_rl_char_search_internal (count, _rl_cs_dir, target, tlen)); #else return (_rl_char_search_internal (count, _rl_cs_dir, target)); #endif } /* Match brackets */ int rl_vi_match (ignore, key) int ignore, key; { int count = 1, brack, pos, tmp, pre; pos = rl_point; if ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0) { pre = rl_point; rl_forward_char (1, key); if (pre == rl_point) break; } } else while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0 && rl_point < rl_end - 1) rl_forward_char (1, key); if (brack <= 0) { rl_point = pos; rl_ding (); return -1; } } pos = rl_point; if (brack < 0) { while (count) { tmp = pos; if (MB_CUR_MAX == 1 || rl_byte_oriented) pos--; else { pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY); if (tmp == pos) pos--; } if (pos >= 0) { int b = rl_vi_bracktype (rl_line_buffer[pos]); if (b == -brack) count--; else if (b == brack) count++; } else { rl_ding (); return -1; } } } else { /* brack > 0 */ while (count) { if (MB_CUR_MAX == 1 || rl_byte_oriented) pos++; else pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY); if (pos < rl_end) { int b = rl_vi_bracktype (rl_line_buffer[pos]); if (b == -brack) count--; else if (b == brack) count++; } else { rl_ding (); return -1; } } } rl_point = pos; return (0); } int rl_vi_bracktype (c) int c; { switch (c) { case '(': return 1; case ')': return -1; case '[': return 2; case ']': return -2; case '{': return 3; case '}': return -3; default: return 0; } } static int _rl_vi_change_char (count, c, mb) int count, c; char *mb; { int p; if (c == '\033' || c == CTRL ('C')) return -1; rl_begin_undo_group (); while (count-- && rl_point < rl_end) { p = rl_point; rl_vi_delete (1, c); if (rl_point < p) /* Did we retreat at EOL? */ rl_point++; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_insert_text (mb); else #endif _rl_insert_char (1, c); } /* The cursor shall be left on the last character changed. */ rl_backward_char (1, c); rl_end_undo_group (); return (0); } static int _rl_vi_callback_getchar (mb, mlen) char *mb; int mlen; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return -1; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) c = _rl_read_mbstring (c, mb, mlen); #endif return c; } #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_change_char (data) _rl_callback_generic_arg *data; { int c; char mb[MB_LEN_MAX]; _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); if (c < 0) return -1; _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_vi_change_char (data->count, c, mb)); } #endif int rl_vi_change_char (count, key) int count, key; { int c; char mb[MB_LEN_MAX]; if (vi_redoing) { c = _rl_vi_last_replacement; mb[0] = c; mb[1] = '\0'; } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_func = _rl_vi_callback_change_char; return (0); } #endif else _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); if (c < 0) return -1; return (_rl_vi_change_char (count, c, mb)); } int rl_vi_subst (count, key) int count, key; { /* If we are redoing, rl_vi_change_to will stuff the last motion char */ if (vi_redoing == 0) rl_stuff_char ((key == 'S') ? 'c' : 'l'); /* `S' == `cc', `s' == `cl' */ return (rl_vi_change_to (count, 'c')); } int rl_vi_overstrike (count, key) int count, key; { if (_rl_vi_doing_insert == 0) { _rl_vi_doing_insert = 1; rl_begin_undo_group (); } if (count > 0) { _rl_overwrite_char (count, key); vi_replace_count += count; } return (0); } int rl_vi_overstrike_delete (count, key) int count, key; { int i, s; for (i = 0; i < count; i++) { if (vi_replace_count == 0) { rl_ding (); break; } s = rl_point; if (rl_do_undo ()) vi_replace_count--; if (rl_point == s) rl_backward_char (1, key); } if (vi_replace_count == 0 && _rl_vi_doing_insert) { rl_end_undo_group (); rl_do_undo (); _rl_vi_doing_insert = 0; } return (0); } int rl_vi_replace (count, key) int count, key; { int i; vi_replace_count = 0; if (vi_replace_map == 0) { vi_replace_map = rl_make_bare_keymap (); for (i = 0; i < ' '; i++) if (vi_insertion_keymap[i].type == ISFUNC) vi_replace_map[i].function = vi_insertion_keymap[i].function; for (i = ' '; i < KEYMAP_SIZE; i++) vi_replace_map[i].function = rl_vi_overstrike; vi_replace_map[RUBOUT].function = rl_vi_overstrike_delete; /* Make sure these are what we want. */ vi_replace_map[ESC].function = rl_vi_movement_mode; vi_replace_map[RETURN].function = rl_newline; vi_replace_map[NEWLINE].function = rl_newline; /* If the normal vi insertion keymap has ^H bound to erase, do the same here. Probably should remove the assignment to RUBOUT up there, but I don't think it will make a difference in real life. */ if (vi_insertion_keymap[CTRL ('H')].type == ISFUNC && vi_insertion_keymap[CTRL ('H')].function == rl_rubout) vi_replace_map[CTRL ('H')].function = rl_vi_overstrike_delete; } rl_vi_start_inserting (key, 1, rl_arg_sign); _rl_vi_last_key_before_insert = key; _rl_keymap = vi_replace_map; return (0); } #if 0 /* Try to complete the word we are standing on or the word that ends with the previous character. A space matches everything. Word delimiters are space and ;. */ int rl_vi_possible_completions() { int save_pos = rl_point; if (rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';') { while (rl_point < rl_end && rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';') rl_point++; } else if (rl_line_buffer[rl_point - 1] == ';') { rl_ding (); return (0); } rl_possible_completions (); rl_point = save_pos; return (0); } #endif /* Functions to save and restore marks. */ static int _rl_vi_set_mark () { int ch; RL_SETSTATE(RL_STATE_MOREINPUT); ch = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ { rl_ding (); return -1; } ch -= 'a'; vi_mark_chars[ch] = rl_point; return 0; } #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_set_mark (data) _rl_callback_generic_arg *data; { _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_vi_set_mark ()); } #endif int rl_vi_set_mark (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = 0; _rl_callback_func = _rl_vi_callback_set_mark; return (0); } #endif return (_rl_vi_set_mark ()); } static int _rl_vi_goto_mark () { int ch; RL_SETSTATE(RL_STATE_MOREINPUT); ch = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (ch == '`') { rl_point = rl_mark; return 0; } else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ { rl_ding (); return -1; } ch -= 'a'; if (vi_mark_chars[ch] == -1) { rl_ding (); return -1; } rl_point = vi_mark_chars[ch]; return 0; } #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_goto_mark (data) _rl_callback_generic_arg *data; { _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_vi_goto_mark ()); } #endif int rl_vi_goto_mark (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = 0; _rl_callback_func = _rl_vi_callback_goto_mark; return (0); } #endif return (_rl_vi_goto_mark ()); } #endif /* VI_MODE */ readline-6.3/xfree.c0000664000043600000000000000300311423124177013216 0ustar chetwheel/* xfree.c -- safe version of free that ignores attempts to free NUL */ /* Copyright (C) 1991-2010 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) #include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "xmalloc.h" /* **************************************************************** */ /* */ /* Memory Deallocation. */ /* */ /* **************************************************************** */ /* Use this as the function to call when adding unwind protects so we don't need to know what free() returns. */ void xfree (string) PTR_T string; { if (string) free (string); } readline-6.3/xmalloc.c0000664000043600000000000000401411423124212013535 0ustar chetwheel/* xmalloc.c -- safe versions of malloc and realloc */ /* Copyright (C) 1991-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) #include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "xmalloc.h" /* **************************************************************** */ /* */ /* Memory Allocation and Deallocation. */ /* */ /* **************************************************************** */ static void memory_error_and_abort (fname) char *fname; { fprintf (stderr, "%s: out of virtual memory\n", fname); exit (2); } /* Return a pointer to free()able block of memory large enough to hold BYTES number of bytes. If the memory cannot be allocated, print an error message and abort. */ PTR_T xmalloc (bytes) size_t bytes; { PTR_T temp; temp = malloc (bytes); if (temp == 0) memory_error_and_abort ("xmalloc"); return (temp); } PTR_T xrealloc (pointer, bytes) PTR_T pointer; size_t bytes; { PTR_T temp; temp = pointer ? realloc (pointer, bytes) : malloc (bytes); if (temp == 0) memory_error_and_abort ("xrealloc"); return (temp); } readline-6.3/history.c0000664000043600000000000003074112166547540013627 0ustar chetwheel/* history.c -- standalone history library */ /* Copyright (C) 1989-2011 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. History is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with History. If not, see . */ /* The goal is to make the implementation transparent, so that you don't have to know what data types are used, just what functions you can call. I think I have done that. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # ifdef _MINIX # include # endif # include #endif #include "history.h" #include "histlib.h" #include "xmalloc.h" /* The number of slots to increase the_history by. */ #define DEFAULT_HISTORY_GROW_SIZE 50 static char *hist_inittime PARAMS((void)); /* **************************************************************** */ /* */ /* History Functions */ /* */ /* **************************************************************** */ /* An array of HIST_ENTRY. This is where we store the history. */ static HIST_ENTRY **the_history = (HIST_ENTRY **)NULL; /* Non-zero means that we have enforced a limit on the amount of history that we save. */ static int history_stifled; /* The current number of slots allocated to the input_history. */ static int history_size; /* If HISTORY_STIFLED is non-zero, then this is the maximum number of entries to remember. */ int history_max_entries; int max_input_history; /* backwards compatibility */ /* The current location of the interactive history pointer. Just makes life easier for outside callers. */ int history_offset; /* The number of strings currently stored in the history list. */ int history_length; /* The logical `base' of the history array. It defaults to 1. */ int history_base = 1; /* Return the current HISTORY_STATE of the history. */ HISTORY_STATE * history_get_history_state () { HISTORY_STATE *state; state = (HISTORY_STATE *)xmalloc (sizeof (HISTORY_STATE)); state->entries = the_history; state->offset = history_offset; state->length = history_length; state->size = history_size; state->flags = 0; if (history_stifled) state->flags |= HS_STIFLED; return (state); } /* Set the state of the current history array to STATE. */ void history_set_history_state (state) HISTORY_STATE *state; { the_history = state->entries; history_offset = state->offset; history_length = state->length; history_size = state->size; if (state->flags & HS_STIFLED) history_stifled = 1; } /* Begin a session in which the history functions might be used. This initializes interactive variables. */ void using_history () { history_offset = history_length; } /* Return the number of bytes that the primary history entries are using. This just adds up the lengths of the_history->lines and the associated timestamps. */ int history_total_bytes () { register int i, result; for (i = result = 0; the_history && the_history[i]; i++) result += HISTENT_BYTES (the_history[i]); return (result); } /* Returns the magic number which says what history element we are looking at now. In this implementation, it returns history_offset. */ int where_history () { return (history_offset); } /* Make the current history item be the one at POS, an absolute index. Returns zero if POS is out of range, else non-zero. */ int history_set_pos (pos) int pos; { if (pos > history_length || pos < 0 || !the_history) return (0); history_offset = pos; return (1); } /* Return the current history array. The caller has to be careful, since this is the actual array of data, and could be bashed or made corrupt easily. The array is terminated with a NULL pointer. */ HIST_ENTRY ** history_list () { return (the_history); } /* Return the history entry at the current position, as determined by history_offset. If there is no entry there, return a NULL pointer. */ HIST_ENTRY * current_history () { return ((history_offset == history_length) || the_history == 0) ? (HIST_ENTRY *)NULL : the_history[history_offset]; } /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry then return a NULL pointer. */ HIST_ENTRY * previous_history () { return history_offset ? the_history[--history_offset] : (HIST_ENTRY *)NULL; } /* Move history_offset forward to the next history entry, and return a pointer to that entry. If there is no next entry then return a NULL pointer. */ HIST_ENTRY * next_history () { return (history_offset == history_length) ? (HIST_ENTRY *)NULL : the_history[++history_offset]; } /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ HIST_ENTRY * history_get (offset) int offset; { int local_index; local_index = offset - history_base; return (local_index >= history_length || local_index < 0 || the_history == 0) ? (HIST_ENTRY *)NULL : the_history[local_index]; } HIST_ENTRY * alloc_history_entry (string, ts) char *string; char *ts; { HIST_ENTRY *temp; temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); temp->line = string ? savestring (string) : string; temp->data = (char *)NULL; temp->timestamp = ts; return temp; } time_t history_get_time (hist) HIST_ENTRY *hist; { char *ts; time_t t; if (hist == 0 || hist->timestamp == 0) return 0; ts = hist->timestamp; if (ts[0] != history_comment_char) return 0; t = (time_t) strtol (ts + 1, (char **)NULL, 10); /* XXX - should use strtol() here */ return t; } static char * hist_inittime () { time_t t; char ts[64], *ret; t = (time_t) time ((time_t *)0); #if defined (HAVE_VSNPRINTF) /* assume snprintf if vsnprintf exists */ snprintf (ts, sizeof (ts) - 1, "X%lu", (unsigned long) t); #else sprintf (ts, "X%lu", (unsigned long) t); #endif ret = savestring (ts); ret[0] = history_comment_char; return ret; } /* Place STRING at the end of the history list. The data field is set to NULL. */ void add_history (string) const char *string; { HIST_ENTRY *temp; if (history_stifled && (history_length == history_max_entries)) { register int i; /* If the history is stifled, and history_length is zero, and it equals history_max_entries, we don't save items. */ if (history_length == 0) return; /* If there is something in the slot, then remove it. */ if (the_history[0]) (void) free_history_entry (the_history[0]); /* Copy the rest of the entries, moving down one slot. */ for (i = 0; i < history_length; i++) the_history[i] = the_history[i + 1]; history_base++; } else { if (history_size == 0) { history_size = DEFAULT_HISTORY_GROW_SIZE; the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); history_length = 1; } else { if (history_length == (history_size - 1)) { history_size += DEFAULT_HISTORY_GROW_SIZE; the_history = (HIST_ENTRY **) xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); } history_length++; } } temp = alloc_history_entry (string, hist_inittime ()); the_history[history_length] = (HIST_ENTRY *)NULL; the_history[history_length - 1] = temp; } /* Change the time stamp of the most recent history entry to STRING. */ void add_history_time (string) const char *string; { HIST_ENTRY *hs; if (string == 0 || history_length < 1) return; hs = the_history[history_length - 1]; FREE (hs->timestamp); hs->timestamp = savestring (string); } /* Free HIST and return the data so the calling application can free it if necessary and desired. */ histdata_t free_history_entry (hist) HIST_ENTRY *hist; { histdata_t x; if (hist == 0) return ((histdata_t) 0); FREE (hist->line); FREE (hist->timestamp); x = hist->data; xfree (hist); return (x); } HIST_ENTRY * copy_history_entry (hist) HIST_ENTRY *hist; { HIST_ENTRY *ret; char *ts; if (hist == 0) return hist; ret = alloc_history_entry (hist->line, (char *)NULL); ts = hist->timestamp ? savestring (hist->timestamp) : hist->timestamp; ret->timestamp = ts; ret->data = hist->data; return ret; } /* Make the history entry at WHICH have LINE and DATA. This returns the old entry so you can dispose of the data. In the case of an invalid WHICH, a NULL pointer is returned. */ HIST_ENTRY * replace_history_entry (which, line, data) int which; const char *line; histdata_t data; { HIST_ENTRY *temp, *old_value; if (which < 0 || which >= history_length) return ((HIST_ENTRY *)NULL); temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); old_value = the_history[which]; temp->line = savestring (line); temp->data = data; temp->timestamp = savestring (old_value->timestamp); the_history[which] = temp; return (old_value); } /* Replace the DATA in the specified history entries, replacing OLD with NEW. WHICH says which one(s) to replace: WHICH == -1 means to replace all of the history entries where entry->data == OLD; WHICH == -2 means to replace the `newest' history entry where entry->data == OLD; and WHICH >= 0 means to replace that particular history entry's data, as long as it matches OLD. */ void replace_history_data (which, old, new) int which; histdata_t *old, *new; { HIST_ENTRY *entry; register int i, last; if (which < -2 || which >= history_length || history_length == 0 || the_history == 0) return; if (which >= 0) { entry = the_history[which]; if (entry && entry->data == old) entry->data = new; return; } last = -1; for (i = 0; i < history_length; i++) { entry = the_history[i]; if (entry == 0) continue; if (entry->data == old) { last = i; if (which == -1) entry->data = new; } } if (which == -2 && last >= 0) { entry = the_history[last]; entry->data = new; /* XXX - we don't check entry->old */ } } /* Remove history element WHICH from the history. The removed element is returned to you so you can free the line, data, and containing structure. */ HIST_ENTRY * remove_history (which) int which; { HIST_ENTRY *return_value; register int i; if (which < 0 || which >= history_length || history_length == 0 || the_history == 0) return ((HIST_ENTRY *)NULL); return_value = the_history[which]; for (i = which; i < history_length; i++) the_history[i] = the_history[i + 1]; history_length--; return (return_value); } /* Stifle the history list, remembering only MAX number of lines. */ void stifle_history (max) int max; { register int i, j; if (max < 0) max = 0; if (history_length > max) { /* This loses because we cannot free the data. */ for (i = 0, j = history_length - max; i < j; i++) free_history_entry (the_history[i]); history_base = i; for (j = 0, i = history_length - max; j < max; i++, j++) the_history[j] = the_history[i]; the_history[j] = (HIST_ENTRY *)NULL; history_length = j; } history_stifled = 1; max_input_history = history_max_entries = max; } /* Stop stifling the history. This returns the previous maximum number of history entries. The value is positive if the history was stifled, negative if it wasn't. */ int unstifle_history () { if (history_stifled) { history_stifled = 0; return (history_max_entries); } else return (-history_max_entries); } int history_is_stifled () { return (history_stifled); } void clear_history () { register int i; /* This loses because we cannot free the data. */ for (i = 0; i < history_length; i++) { free_history_entry (the_history[i]); the_history[i] = (HIST_ENTRY *)NULL; } history_offset = history_length = 0; } readline-6.3/histexpand.c0000644000043600000240000011776112247113646014304 0ustar chetstaff/* histexpand.c -- history expansion. */ /* Copyright (C) 1989-2012 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. History is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with History. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # ifndef _MINIX # include # endif # include #endif #include "rlmbutil.h" #include "history.h" #include "histlib.h" #include "rlshell.h" #include "xmalloc.h" #define HISTORY_WORD_DELIMITERS " \t\n;&()|<>" #define HISTORY_QUOTE_CHARACTERS "\"'`" #define slashify_in_quotes "\\`\"$" typedef int _hist_search_func_t PARAMS((const char *, int)); static char error_pointer; static char *subst_lhs; static char *subst_rhs; static int subst_lhs_len; static int subst_rhs_len; static char *get_history_word_specifier PARAMS((char *, char *, int *)); static int history_tokenize_word PARAMS((const char *, int)); static char **history_tokenize_internal PARAMS((const char *, int, int *)); static char *history_substring PARAMS((const char *, int, int)); static void freewords PARAMS((char **, int)); static char *history_find_word PARAMS((char *, int)); static char *quote_breaks PARAMS((char *)); /* Variables exported by this file. */ /* The character that represents the start of a history expansion request. This is usually `!'. */ char history_expansion_char = '!'; /* The character that invokes word substitution if found at the start of a line. This is usually `^'. */ char history_subst_char = '^'; /* During tokenization, if this character is seen as the first character of a word, then it, and all subsequent characters upto a newline are ignored. For a Bourne shell, this should be '#'. Bash special cases the interactive comment character to not be a comment delimiter. */ char history_comment_char = '\0'; /* The list of characters which inhibit the expansion of text if found immediately following history_expansion_char. */ char *history_no_expand_chars = " \t\n\r="; /* If set to a non-zero value, single quotes inhibit history expansion. The default is 0. */ int history_quotes_inhibit_expansion = 0; /* Used to split words by history_tokenize_internal. */ char *history_word_delimiters = HISTORY_WORD_DELIMITERS; /* If set, this points to a function that is called to verify that a particular history expansion should be performed. */ rl_linebuf_func_t *history_inhibit_expansion_function; /* **************************************************************** */ /* */ /* History Expansion */ /* */ /* **************************************************************** */ /* Hairy history expansion on text, not tokens. This is of general use, and thus belongs in this library. */ /* The last string searched for by a !?string? search. */ static char *search_string; /* The last string matched by a !?string? search. */ static char *search_match; /* Return the event specified at TEXT + OFFSET modifying OFFSET to point to after the event specifier. Just a pointer to the history line is returned; NULL is returned in the event of a bad specifier. You pass STRING with *INDEX equal to the history_expansion_char that begins this specification. DELIMITING_QUOTE is a character that is allowed to end the string specification for what to search for in addition to the normal characters `:', ` ', `\t', `\n', and sometimes `?'. So you might call this function like: line = get_history_event ("!echo:p", &index, 0); */ char * get_history_event (string, caller_index, delimiting_quote) const char *string; int *caller_index; int delimiting_quote; { register int i; register char c; HIST_ENTRY *entry; int which, sign, local_index, substring_okay; _hist_search_func_t *search_func; char *temp; /* The event can be specified in a number of ways. !! the previous command !n command line N !-n current command-line minus N !str the most recent command starting with STR !?str[?] the most recent command containing STR All values N are determined via HISTORY_BASE. */ i = *caller_index; if (string[i] != history_expansion_char) return ((char *)NULL); /* Move on to the specification. */ i++; sign = 1; substring_okay = 0; #define RETURN_ENTRY(e, w) \ return ((e = history_get (w)) ? e->line : (char *)NULL) /* Handle !! case. */ if (string[i] == history_expansion_char) { i++; which = history_base + (history_length - 1); *caller_index = i; RETURN_ENTRY (entry, which); } /* Hack case of numeric line specification. */ if (string[i] == '-') { sign = -1; i++; } if (_rl_digit_p (string[i])) { /* Get the extent of the digits and compute the value. */ for (which = 0; _rl_digit_p (string[i]); i++) which = (which * 10) + _rl_digit_value (string[i]); *caller_index = i; if (sign < 0) which = (history_length + history_base) - which; RETURN_ENTRY (entry, which); } /* This must be something to search for. If the spec begins with a '?', then the string may be anywhere on the line. Otherwise, the string must be found at the start of a line. */ if (string[i] == '?') { substring_okay++; i++; } /* Only a closing `?' or a newline delimit a substring search string. */ for (local_index = i; c = string[i]; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int v; mbstate_t ps; memset (&ps, 0, sizeof (mbstate_t)); /* These produce warnings because we're passing a const string to a function that takes a non-const string. */ _rl_adjust_point ((char *)string, i, &ps); if ((v = _rl_get_char_len ((char *)string + i, &ps)) > 1) { i += v - 1; continue; } } #endif /* HANDLE_MULTIBYTE */ if ((!substring_okay && (whitespace (c) || c == ':' || (history_search_delimiter_chars && member (c, history_search_delimiter_chars)) || string[i] == delimiting_quote)) || string[i] == '\n' || (substring_okay && string[i] == '?')) break; } which = i - local_index; temp = (char *)xmalloc (1 + which); if (which) strncpy (temp, string + local_index, which); temp[which] = '\0'; if (substring_okay && string[i] == '?') i++; *caller_index = i; #define FAIL_SEARCH() \ do { \ history_offset = history_length; xfree (temp) ; return (char *)NULL; \ } while (0) /* If there is no search string, try to use the previous search string, if one exists. If not, fail immediately. */ if (*temp == '\0' && substring_okay) { if (search_string) { xfree (temp); temp = savestring (search_string); } else FAIL_SEARCH (); } search_func = substring_okay ? history_search : history_search_prefix; while (1) { local_index = (*search_func) (temp, -1); if (local_index < 0) FAIL_SEARCH (); if (local_index == 0 || substring_okay) { entry = current_history (); if (entry == 0) FAIL_SEARCH (); history_offset = history_length; /* If this was a substring search, then remember the string that we matched for word substitution. */ if (substring_okay) { FREE (search_string); search_string = temp; FREE (search_match); search_match = history_find_word (entry->line, local_index); } else xfree (temp); return (entry->line); } if (history_offset) history_offset--; else FAIL_SEARCH (); } #undef FAIL_SEARCH #undef RETURN_ENTRY } /* Function for extracting single-quoted strings. Used for inhibiting history expansion within single quotes. */ /* Extract the contents of STRING as if it is enclosed in single quotes. SINDEX, when passed in, is the offset of the character immediately following the opening single quote; on exit, SINDEX is left pointing to the closing single quote. FLAGS currently used to allow backslash to escape a single quote (e.g., for bash $'...'). */ static void hist_string_extract_single_quoted (string, sindex, flags) char *string; int *sindex, flags; { register int i; for (i = *sindex; string[i] && string[i] != '\''; i++) { if ((flags & 1) && string[i] == '\\' && string[i+1]) i++; } *sindex = i; } static char * quote_breaks (s) char *s; { register char *p, *r; char *ret; int len = 3; for (p = s; p && *p; p++, len++) { if (*p == '\'') len += 3; else if (whitespace (*p) || *p == '\n') len += 2; } r = ret = (char *)xmalloc (len); *r++ = '\''; for (p = s; p && *p; ) { if (*p == '\'') { *r++ = '\''; *r++ = '\\'; *r++ = '\''; *r++ = '\''; p++; } else if (whitespace (*p) || *p == '\n') { *r++ = '\''; *r++ = *p++; *r++ = '\''; } else *r++ = *p++; } *r++ = '\''; *r = '\0'; return ret; } static char * hist_error(s, start, current, errtype) char *s; int start, current, errtype; { char *temp; const char *emsg; int ll, elen; ll = current - start; switch (errtype) { case EVENT_NOT_FOUND: emsg = "event not found"; elen = 15; break; case BAD_WORD_SPEC: emsg = "bad word specifier"; elen = 18; break; case SUBST_FAILED: emsg = "substitution failed"; elen = 19; break; case BAD_MODIFIER: emsg = "unrecognized history modifier"; elen = 29; break; case NO_PREV_SUBST: emsg = "no previous substitution"; elen = 24; break; default: emsg = "unknown expansion error"; elen = 23; break; } temp = (char *)xmalloc (ll + elen + 3); strncpy (temp, s + start, ll); temp[ll] = ':'; temp[ll + 1] = ' '; strcpy (temp + ll + 2, emsg); return (temp); } /* Get a history substitution string from STR starting at *IPTR and return it. The length is returned in LENPTR. A backslash can quote the delimiter. If the string is the empty string, the previous pattern is used. If there is no previous pattern for the lhs, the last history search string is used. If IS_RHS is 1, we ignore empty strings and set the pattern to "" anyway. subst_lhs is not changed if the lhs is empty; subst_rhs is allowed to be set to the empty string. */ static char * get_subst_pattern (str, iptr, delimiter, is_rhs, lenptr) char *str; int *iptr, delimiter, is_rhs, *lenptr; { register int si, i, j, k; char *s; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; #endif s = (char *)NULL; i = *iptr; #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); _rl_adjust_point (str, i, &ps); #endif for (si = i; str[si] && str[si] != delimiter; si++) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int v; if ((v = _rl_get_char_len (str + si, &ps)) > 1) si += v - 1; else if (str[si] == '\\' && str[si + 1] == delimiter) si++; } else #endif /* HANDLE_MULTIBYTE */ if (str[si] == '\\' && str[si + 1] == delimiter) si++; if (si > i || is_rhs) { s = (char *)xmalloc (si - i + 1); for (j = 0, k = i; k < si; j++, k++) { /* Remove a backslash quoting the search string delimiter. */ if (str[k] == '\\' && str[k + 1] == delimiter) k++; s[j] = str[k]; } s[j] = '\0'; if (lenptr) *lenptr = j; } i = si; if (str[i]) i++; *iptr = i; return s; } static void postproc_subst_rhs () { char *new; int i, j, new_size; new = (char *)xmalloc (new_size = subst_rhs_len + subst_lhs_len); for (i = j = 0; i < subst_rhs_len; i++) { if (subst_rhs[i] == '&') { if (j + subst_lhs_len >= new_size) new = (char *)xrealloc (new, (new_size = new_size * 2 + subst_lhs_len)); strcpy (new + j, subst_lhs); j += subst_lhs_len; } else { /* a single backslash protects the `&' from lhs interpolation */ if (subst_rhs[i] == '\\' && subst_rhs[i + 1] == '&') i++; if (j >= new_size) new = (char *)xrealloc (new, new_size *= 2); new[j++] = subst_rhs[i]; } } new[j] = '\0'; xfree (subst_rhs); subst_rhs = new; subst_rhs_len = j; } /* Expand the bulk of a history specifier starting at STRING[START]. Returns 0 if everything is OK, -1 if an error occurred, and 1 if the `p' modifier was supplied and the caller should just print the returned string. Returns the new index into string in *END_INDEX_PTR, and the expanded specifier in *RET_STRING. */ static int history_expand_internal (string, start, qc, end_index_ptr, ret_string, current_line) char *string; int start, qc, *end_index_ptr; char **ret_string; char *current_line; /* for !# */ { int i, n, starting_index; int substitute_globally, subst_bywords, want_quotes, print_only; char *event, *temp, *result, *tstr, *t, c, *word_spec; int result_len; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; memset (&ps, 0, sizeof (mbstate_t)); #endif result = (char *)xmalloc (result_len = 128); i = start; /* If it is followed by something that starts a word specifier, then !! is implied as the event specifier. */ if (member (string[i + 1], ":$*%^")) { char fake_s[3]; int fake_i = 0; i++; fake_s[0] = fake_s[1] = history_expansion_char; fake_s[2] = '\0'; event = get_history_event (fake_s, &fake_i, 0); } else if (string[i + 1] == '#') { i += 2; event = current_line; } else event = get_history_event (string, &i, qc); if (event == 0) { *ret_string = hist_error (string, start, i, EVENT_NOT_FOUND); xfree (result); return (-1); } /* If a word specifier is found, then do what that requires. */ starting_index = i; word_spec = get_history_word_specifier (string, event, &i); /* There is no such thing as a `malformed word specifier'. However, it is possible for a specifier that has no match. In that case, we complain. */ if (word_spec == (char *)&error_pointer) { *ret_string = hist_error (string, starting_index, i, BAD_WORD_SPEC); xfree (result); return (-1); } /* If no word specifier, than the thing of interest was the event. */ temp = word_spec ? savestring (word_spec) : savestring (event); FREE (word_spec); /* Perhaps there are other modifiers involved. Do what they say. */ want_quotes = substitute_globally = subst_bywords = print_only = 0; starting_index = i; while (string[i] == ':') { c = string[i + 1]; if (c == 'g' || c == 'a') { substitute_globally = 1; i++; c = string[i + 1]; } else if (c == 'G') { subst_bywords = 1; i++; c = string[i + 1]; } switch (c) { default: *ret_string = hist_error (string, i+1, i+2, BAD_MODIFIER); xfree (result); xfree (temp); return -1; case 'q': want_quotes = 'q'; break; case 'x': want_quotes = 'x'; break; /* :p means make this the last executed line. So we return an error state after adding this line to the history. */ case 'p': print_only++; break; /* :t discards all but the last part of the pathname. */ case 't': tstr = strrchr (temp, '/'); if (tstr) { tstr++; t = savestring (tstr); xfree (temp); temp = t; } break; /* :h discards the last part of a pathname. */ case 'h': tstr = strrchr (temp, '/'); if (tstr) *tstr = '\0'; break; /* :r discards the suffix. */ case 'r': tstr = strrchr (temp, '.'); if (tstr) *tstr = '\0'; break; /* :e discards everything but the suffix. */ case 'e': tstr = strrchr (temp, '.'); if (tstr) { t = savestring (tstr); xfree (temp); temp = t; } break; /* :s/this/that substitutes `that' for the first occurrence of `this'. :gs/this/that substitutes `that' for each occurrence of `this'. :& repeats the last substitution. :g& repeats the last substitution globally. */ case '&': case 's': { char *new_event; int delimiter, failed, si, l_temp, ws, we; if (c == 's') { if (i + 2 < (int)strlen (string)) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { _rl_adjust_point (string, i + 2, &ps); if (_rl_get_char_len (string + i + 2, &ps) > 1) delimiter = 0; else delimiter = string[i + 2]; } else #endif /* HANDLE_MULTIBYTE */ delimiter = string[i + 2]; } else break; /* no search delimiter */ i += 3; t = get_subst_pattern (string, &i, delimiter, 0, &subst_lhs_len); /* An empty substitution lhs with no previous substitution uses the last search string as the lhs. */ if (t) { FREE (subst_lhs); subst_lhs = t; } else if (!subst_lhs) { if (search_string && *search_string) { subst_lhs = savestring (search_string); subst_lhs_len = strlen (subst_lhs); } else { subst_lhs = (char *) NULL; subst_lhs_len = 0; } } FREE (subst_rhs); subst_rhs = get_subst_pattern (string, &i, delimiter, 1, &subst_rhs_len); /* If `&' appears in the rhs, it's supposed to be replaced with the lhs. */ if (member ('&', subst_rhs)) postproc_subst_rhs (); } else i += 2; /* If there is no lhs, the substitution can't succeed. */ if (subst_lhs_len == 0) { *ret_string = hist_error (string, starting_index, i, NO_PREV_SUBST); xfree (result); xfree (temp); return -1; } l_temp = strlen (temp); /* Ignore impossible cases. */ if (subst_lhs_len > l_temp) { *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); xfree (result); xfree (temp); return (-1); } /* Find the first occurrence of THIS in TEMP. */ /* Substitute SUBST_RHS for SUBST_LHS in TEMP. There are three cases to consider: 1. substitute_globally == subst_bywords == 0 2. substitute_globally == 1 && subst_bywords == 0 3. substitute_globally == 0 && subst_bywords == 1 In the first case, we substitute for the first occurrence only. In the second case, we substitute for every occurrence. In the third case, we tokenize into words and substitute the first occurrence of each word. */ si = we = 0; for (failed = 1; (si + subst_lhs_len) <= l_temp; si++) { /* First skip whitespace and find word boundaries if we're past the end of the word boundary we found the last time. */ if (subst_bywords && si > we) { for (; temp[si] && whitespace (temp[si]); si++) ; ws = si; we = history_tokenize_word (temp, si); } if (STREQN (temp+si, subst_lhs, subst_lhs_len)) { int len = subst_rhs_len - subst_lhs_len + l_temp; new_event = (char *)xmalloc (1 + len); strncpy (new_event, temp, si); strncpy (new_event + si, subst_rhs, subst_rhs_len); strncpy (new_event + si + subst_rhs_len, temp + si + subst_lhs_len, l_temp - (si + subst_lhs_len)); new_event[len] = '\0'; xfree (temp); temp = new_event; failed = 0; if (substitute_globally) { /* Reported to fix a bug that causes it to skip every other match when matching a single character. Was si += subst_rhs_len previously. */ si += subst_rhs_len - 1; l_temp = strlen (temp); substitute_globally++; continue; } else if (subst_bywords) { si = we; l_temp = strlen (temp); continue; } else break; } } if (substitute_globally > 1) { substitute_globally = 0; continue; /* don't want to increment i */ } if (failed == 0) continue; /* don't want to increment i */ *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); xfree (result); xfree (temp); return (-1); } } i += 2; } /* Done with modifiers. */ /* Believe it or not, we have to back the pointer up by one. */ --i; if (want_quotes) { char *x; if (want_quotes == 'q') x = sh_single_quote (temp); else if (want_quotes == 'x') x = quote_breaks (temp); else x = savestring (temp); xfree (temp); temp = x; } n = strlen (temp); if (n >= result_len) result = (char *)xrealloc (result, n + 2); strcpy (result, temp); xfree (temp); *end_index_ptr = i; *ret_string = result; return (print_only); } /* Expand the string STRING, placing the result into OUTPUT, a pointer to a string. Returns: -1) If there was an error in expansion. 0) If no expansions took place (or, if the only change in the text was the de-slashifying of the history expansion character) 1) If expansions did take place 2) If the `p' modifier was given and the caller should print the result If an error ocurred in expansion, then OUTPUT contains a descriptive error message. */ #define ADD_STRING(s) \ do \ { \ int sl = strlen (s); \ j += sl; \ if (j >= result_len) \ { \ while (j >= result_len) \ result_len += 128; \ result = (char *)xrealloc (result, result_len); \ } \ strcpy (result + j - sl, s); \ } \ while (0) #define ADD_CHAR(c) \ do \ { \ if (j >= result_len - 1) \ result = (char *)xrealloc (result, result_len += 64); \ result[j++] = c; \ result[j] = '\0'; \ } \ while (0) int history_expand (hstring, output) char *hstring; char **output; { register int j; int i, r, l, passc, cc, modified, eindex, only_printing, dquote, squote, flag; char *string; /* The output string, and its length. */ int result_len; char *result; #if defined (HANDLE_MULTIBYTE) char mb[MB_LEN_MAX]; mbstate_t ps; #endif /* Used when adding the string. */ char *temp; if (output == 0) return 0; /* Setting the history expansion character to 0 inhibits all history expansion. */ if (history_expansion_char == 0) { *output = savestring (hstring); return (0); } /* Prepare the buffer for printing error messages. */ result = (char *)xmalloc (result_len = 256); result[0] = '\0'; only_printing = modified = 0; l = strlen (hstring); /* Grovel the string. Only backslash and single quotes can quote the history escape character. We also handle arg specifiers. */ /* Before we grovel forever, see if the history_expansion_char appears anywhere within the text. */ /* The quick substitution character is a history expansion all right. That is to say, "^this^that^" is equivalent to "!!:s^this^that^", and in fact, that is the substitution that we do. */ if (hstring[0] == history_subst_char) { string = (char *)xmalloc (l + 5); string[0] = string[1] = history_expansion_char; string[2] = ':'; string[3] = 's'; strcpy (string + 4, hstring); l += 4; } else { #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); #endif string = hstring; /* If not quick substitution, still maybe have to do expansion. */ /* `!' followed by one of the characters in history_no_expand_chars is NOT an expansion. */ for (i = dquote = squote = 0; string[i]; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int v; v = _rl_get_char_len (string + i, &ps); if (v > 1) { i += v - 1; continue; } } #endif /* HANDLE_MULTIBYTE */ cc = string[i + 1]; /* The history_comment_char, if set, appearing at the beginning of a word signifies that the rest of the line should not have history expansion performed on it. Skip the rest of the line and break out of the loop. */ if (history_comment_char && string[i] == history_comment_char && (i == 0 || member (string[i - 1], history_word_delimiters))) { while (string[i]) i++; break; } else if (string[i] == history_expansion_char) { if (cc == 0 || member (cc, history_no_expand_chars)) continue; /* DQUOTE won't be set unless history_quotes_inhibit_expansion is set. The idea here is to treat double-quoted strings the same as the word outside double quotes; in effect making the double quote part of history_no_expand_chars when DQUOTE is set. */ else if (dquote && cc == '"') continue; /* If the calling application has set history_inhibit_expansion_function to a function that checks for special cases that should not be history expanded, call the function and skip the expansion if it returns a non-zero value. */ else if (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i)) continue; else break; } /* Shell-like quoting: allow backslashes to quote double quotes inside a double-quoted string. */ else if (dquote && string[i] == '\\' && cc == '"') i++; /* More shell-like quoting: if we're paying attention to single quotes and letting them quote the history expansion character, then we need to pay attention to double quotes, because single quotes are not special inside double-quoted strings. */ else if (history_quotes_inhibit_expansion && string[i] == '"') { dquote = 1 - dquote; } else if (dquote == 0 && history_quotes_inhibit_expansion && string[i] == '\'') { /* If this is bash, single quotes inhibit history expansion. */ flag = (i > 0 && string[i - 1] == '$'); i++; hist_string_extract_single_quoted (string, &i, flag); } else if (history_quotes_inhibit_expansion && string[i] == '\\') { /* If this is bash, allow backslashes to quote single quotes and the history expansion character. */ if (cc == '\'' || cc == history_expansion_char) i++; } } if (string[i] != history_expansion_char) { xfree (result); *output = savestring (string); return (0); } } /* Extract and perform the substitution. */ for (passc = dquote = squote = i = j = 0; i < l; i++) { int qc, tchar = string[i]; if (passc) { passc = 0; ADD_CHAR (tchar); continue; } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int k, c; c = tchar; memset (mb, 0, sizeof (mb)); for (k = 0; k < MB_LEN_MAX; k++) { mb[k] = (char)c; memset (&ps, 0, sizeof (mbstate_t)); if (_rl_get_char_len (mb, &ps) == -2) c = string[++i]; else break; } if (strlen (mb) > 1) { ADD_STRING (mb); continue; } } #endif /* HANDLE_MULTIBYTE */ if (tchar == history_expansion_char) tchar = -3; else if (tchar == history_comment_char) tchar = -2; switch (tchar) { default: ADD_CHAR (string[i]); break; case '\\': passc++; ADD_CHAR (tchar); break; case '"': dquote = 1 - dquote; ADD_CHAR (tchar); break; case '\'': { /* If history_quotes_inhibit_expansion is set, single quotes inhibit history expansion, otherwise they are treated like double quotes. */ if (squote) { squote = 0; ADD_CHAR (tchar); } else if (dquote == 0 && history_quotes_inhibit_expansion) { int quote, slen; flag = (i > 0 && string[i - 1] == '$'); quote = i++; hist_string_extract_single_quoted (string, &i, flag); slen = i - quote + 2; temp = (char *)xmalloc (slen); strncpy (temp, string + quote, slen); temp[slen - 1] = '\0'; ADD_STRING (temp); xfree (temp); } else if (dquote == 0 && squote == 0 && history_quotes_inhibit_expansion == 0) { squote = 1; ADD_CHAR (string[i]); } else ADD_CHAR (string[i]); break; } case -2: /* history_comment_char */ if (i == 0 || member (string[i - 1], history_word_delimiters)) { temp = (char *)xmalloc (l - i + 1); strcpy (temp, string + i); ADD_STRING (temp); xfree (temp); i = l; } else ADD_CHAR (string[i]); break; case -3: /* history_expansion_char */ cc = string[i + 1]; /* If the history_expansion_char is followed by one of the characters in history_no_expand_chars, then it is not a candidate for expansion of any kind. */ if (cc == 0 || member (cc, history_no_expand_chars) || (dquote && cc == '"') || (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i))) { ADD_CHAR (string[i]); break; } #if defined (NO_BANG_HASH_MODIFIERS) /* There is something that is listed as a `word specifier' in csh documentation which means `the expanded text to this point'. That is not a word specifier, it is an event specifier. If we don't want to allow modifiers with `!#', just stick the current output line in again. */ if (cc == '#') { if (result) { temp = (char *)xmalloc (1 + strlen (result)); strcpy (temp, result); ADD_STRING (temp); xfree (temp); } i++; break; } #endif qc = squote ? '\'' : (dquote ? '"' : 0); r = history_expand_internal (string, i, qc, &eindex, &temp, result); if (r < 0) { *output = temp; xfree (result); if (string != hstring) xfree (string); return -1; } else { if (temp) { modified++; if (*temp) ADD_STRING (temp); xfree (temp); } only_printing = r == 1; i = eindex; } break; } } *output = result; if (string != hstring) xfree (string); if (only_printing) { #if 0 add_history (result); #endif return (2); } return (modified != 0); } /* Return a consed string which is the word specified in SPEC, and found in FROM. NULL is returned if there is no spec. The address of ERROR_POINTER is returned if the word specified cannot be found. CALLER_INDEX is the offset in SPEC to start looking; it is updated to point to just after the last character parsed. */ static char * get_history_word_specifier (spec, from, caller_index) char *spec, *from; int *caller_index; { register int i = *caller_index; int first, last; int expecting_word_spec = 0; char *result; /* The range of words to return doesn't exist yet. */ first = last = 0; result = (char *)NULL; /* If we found a colon, then this *must* be a word specification. If it isn't, then it is an error. */ if (spec[i] == ':') { i++; expecting_word_spec++; } /* Handle special cases first. */ /* `%' is the word last searched for. */ if (spec[i] == '%') { *caller_index = i + 1; return (search_match ? savestring (search_match) : savestring ("")); } /* `*' matches all of the arguments, but not the command. */ if (spec[i] == '*') { *caller_index = i + 1; result = history_arg_extract (1, '$', from); return (result ? result : savestring ("")); } /* `$' is last arg. */ if (spec[i] == '$') { *caller_index = i + 1; return (history_arg_extract ('$', '$', from)); } /* Try to get FIRST and LAST figured out. */ if (spec[i] == '-') first = 0; else if (spec[i] == '^') { first = 1; i++; } else if (_rl_digit_p (spec[i]) && expecting_word_spec) { for (first = 0; _rl_digit_p (spec[i]); i++) first = (first * 10) + _rl_digit_value (spec[i]); } else return ((char *)NULL); /* no valid `first' for word specifier */ if (spec[i] == '^' || spec[i] == '*') { last = (spec[i] == '^') ? 1 : '$'; /* x* abbreviates x-$ */ i++; } else if (spec[i] != '-') last = first; else { i++; if (_rl_digit_p (spec[i])) { for (last = 0; _rl_digit_p (spec[i]); i++) last = (last * 10) + _rl_digit_value (spec[i]); } else if (spec[i] == '$') { i++; last = '$'; } #if 0 else if (!spec[i] || spec[i] == ':') /* check against `:' because there could be a modifier separator */ #else else /* csh seems to allow anything to terminate the word spec here, leaving it as an abbreviation. */ #endif last = -1; /* x- abbreviates x-$ omitting word `$' */ } *caller_index = i; if (last >= first || last == '$' || last < 0) result = history_arg_extract (first, last, from); return (result ? result : (char *)&error_pointer); } /* Extract the args specified, starting at FIRST, and ending at LAST. The args are taken from STRING. If either FIRST or LAST is < 0, then make that arg count from the right (subtract from the number of tokens, so that FIRST = -1 means the next to last token on the line). If LAST is `$' the last arg from STRING is used. */ char * history_arg_extract (first, last, string) int first, last; const char *string; { register int i, len; char *result; int size, offset; char **list; /* XXX - think about making history_tokenize return a struct array, each struct in array being a string and a length to avoid the calls to strlen below. */ if ((list = history_tokenize (string)) == NULL) return ((char *)NULL); for (len = 0; list[len]; len++) ; if (last < 0) last = len + last - 1; if (first < 0) first = len + first - 1; if (last == '$') last = len - 1; if (first == '$') first = len - 1; last++; if (first >= len || last > len || first < 0 || last < 0 || first > last) result = ((char *)NULL); else { for (size = 0, i = first; i < last; i++) size += strlen (list[i]) + 1; result = (char *)xmalloc (size + 1); result[0] = '\0'; for (i = first, offset = 0; i < last; i++) { strcpy (result + offset, list[i]); offset += strlen (list[i]); if (i + 1 < last) { result[offset++] = ' '; result[offset] = 0; } } } for (i = 0; i < len; i++) xfree (list[i]); xfree (list); return (result); } static int history_tokenize_word (string, ind) const char *string; int ind; { register int i; int delimiter, nestdelim, delimopen; i = ind; delimiter = nestdelim = 0; if (member (string[i], "()\n")) { i++; return i; } if (member (string[i], "<>;&|$")) { int peek = string[i + 1]; if (peek == string[i] && peek != '$') { if (peek == '<' && string[i + 2] == '-') i++; else if (peek == '<' && string[i + 2] == '<') i++; i += 2; return i; } else if ((peek == '&' && (string[i] == '>' || string[i] == '<')) || (peek == '>' && string[i] == '&')) { i += 2; return i; } /* XXX - separated out for later -- bash-4.2 */ else if ((peek == '(' && (string[i] == '>' || string[i] == '<')) || /* ) */ (peek == '(' && string[i] == '$')) /*)*/ { i += 2; delimopen = '('; delimiter = ')'; nestdelim = 1; goto get_word; } #if 0 else if (peek == '\'' && string[i] == '$') { i += 2; /* XXX */ return i; } #endif if (string[i] != '$') { i++; return i; } } /* same code also used for $(...)/<(...)/>(...) above */ if (member (string[i], "!@?+*")) { int peek = string[i + 1]; if (peek == '(') /*)*/ { /* Shell extended globbing patterns */ i += 2; delimopen = '('; delimiter = ')'; /* XXX - not perfect */ nestdelim = 1; } } get_word: /* Get word from string + i; */ if (delimiter == 0 && member (string[i], HISTORY_QUOTE_CHARACTERS)) delimiter = string[i++]; for (; string[i]; i++) { if (string[i] == '\\' && string[i + 1] == '\n') { i++; continue; } if (string[i] == '\\' && delimiter != '\'' && (delimiter != '"' || member (string[i], slashify_in_quotes))) { i++; continue; } /* delimiter must be set and set to something other than a quote if nestdelim is set, so these tests are safe. */ if (nestdelim && string[i] == delimopen) { nestdelim++; continue; } if (nestdelim && string[i] == delimiter) { nestdelim--; if (nestdelim == 0) delimiter = 0; continue; } if (delimiter && string[i] == delimiter) { delimiter = 0; continue; } if (delimiter == 0 && (member (string[i], history_word_delimiters))) break; if (delimiter == 0 && member (string[i], HISTORY_QUOTE_CHARACTERS)) delimiter = string[i]; } return i; } static char * history_substring (string, start, end) const char *string; int start, end; { register int len; register char *result; len = end - start; result = (char *)xmalloc (len + 1); strncpy (result, string + start, len); result[len] = '\0'; return result; } /* Parse STRING into tokens and return an array of strings. If WIND is not -1 and INDP is not null, we also want the word surrounding index WIND. The position in the returned array of strings is returned in *INDP. */ static char ** history_tokenize_internal (string, wind, indp) const char *string; int wind, *indp; { char **result; register int i, start, result_index, size; /* If we're searching for a string that's not part of a word (e.g., " "), make sure we set *INDP to a reasonable value. */ if (indp && wind != -1) *indp = -1; /* Get a token, and stuff it into RESULT. The tokens are split exactly where the shell would split them. */ for (i = result_index = size = 0, result = (char **)NULL; string[i]; ) { /* Skip leading whitespace. */ for (; string[i] && whitespace (string[i]); i++) ; if (string[i] == 0 || string[i] == history_comment_char) return (result); start = i; i = history_tokenize_word (string, start); /* If we have a non-whitespace delimiter character (which would not be skipped by the loop above), use it and any adjacent delimiters to make a separate field. Any adjacent white space will be skipped the next time through the loop. */ if (i == start && history_word_delimiters) { i++; while (string[i] && member (string[i], history_word_delimiters)) i++; } /* If we are looking for the word in which the character at a particular index falls, remember it. */ if (indp && wind != -1 && wind >= start && wind < i) *indp = result_index; if (result_index + 2 >= size) result = (char **)xrealloc (result, ((size += 10) * sizeof (char *))); result[result_index++] = history_substring (string, start, i); result[result_index] = (char *)NULL; } return (result); } /* Return an array of tokens, much as the shell might. The tokens are parsed out of STRING. */ char ** history_tokenize (string) const char *string; { return (history_tokenize_internal (string, -1, (int *)NULL)); } /* Free members of WORDS from START to an empty string */ static void freewords (words, start) char **words; int start; { register int i; for (i = start; words[i]; i++) xfree (words[i]); } /* Find and return the word which contains the character at index IND in the history line LINE. Used to save the word matched by the last history !?string? search. */ static char * history_find_word (line, ind) char *line; int ind; { char **words, *s; int i, wind; words = history_tokenize_internal (line, ind, &wind); if (wind == -1 || words == 0) { if (words) freewords (words, 0); FREE (words); return ((char *)NULL); } s = words[wind]; for (i = 0; i < wind; i++) xfree (words[i]); freewords (words, wind + 1); xfree (words); return s; } readline-6.3/histfile.c0000664000043600000000000003444512172227115013730 0ustar chetwheel/* histfile.c - functions to manipulate the history file. */ /* Copyright (C) 1989-2010 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. History is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with History. If not, see . */ /* The goal is to make the implementation transparent, so that you don't have to know what data types are used, just what functions you can call. I think I have done that. */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #if defined (HAVE_CONFIG_H) # include #endif #include #include #if ! defined (_MINIX) && defined (HAVE_SYS_FILE_H) # include #endif #include "posixstat.h" #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # include #endif #include #if defined (__EMX__) # undef HAVE_MMAP #endif #ifdef HISTORY_USE_MMAP # include # ifdef MAP_FILE # define MAP_RFLAGS (MAP_FILE|MAP_PRIVATE) # define MAP_WFLAGS (MAP_FILE|MAP_SHARED) # else # define MAP_RFLAGS MAP_PRIVATE # define MAP_WFLAGS MAP_SHARED # endif # ifndef MAP_FAILED # define MAP_FAILED ((void *)-1) # endif #endif /* HISTORY_USE_MMAP */ /* If we're compiling for __EMX__ (OS/2) or __CYGWIN__ (cygwin32 environment on win 95/98/nt), we want to open files with O_BINARY mode so that there is no \n -> \r\n conversion performed. On other systems, we don't want to mess around with O_BINARY at all, so we ensure that it's defined to 0. */ #if defined (__EMX__) || defined (__CYGWIN__) # ifndef O_BINARY # define O_BINARY 0 # endif #else /* !__EMX__ && !__CYGWIN__ */ # undef O_BINARY # define O_BINARY 0 #endif /* !__EMX__ && !__CYGWIN__ */ #include #if !defined (errno) extern int errno; #endif /* !errno */ #include "history.h" #include "histlib.h" #include "rlshell.h" #include "xmalloc.h" /* If non-zero, we write timestamps to the history file in history_do_write() */ int history_write_timestamps = 0; /* Does S look like the beginning of a history timestamp entry? Placeholder for more extensive tests. */ #define HIST_TIMESTAMP_START(s) (*(s) == history_comment_char && isdigit ((s)[1]) ) /* Return the string that should be used in the place of this filename. This only matters when you don't specify the filename to read_history (), or write_history (). */ static char * history_filename (filename) const char *filename; { char *return_val; const char *home; int home_len; return_val = filename ? savestring (filename) : (char *)NULL; if (return_val) return (return_val); home = sh_get_env_value ("HOME"); if (home == 0) return (NULL); else home_len = strlen (home); return_val = (char *)xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */ strcpy (return_val, home); return_val[home_len] = '/'; #if defined (__MSDOS__) strcpy (return_val + home_len + 1, "_history"); #else strcpy (return_val + home_len + 1, ".history"); #endif return (return_val); } static char * history_backupfile (filename) const char *filename; { char *ret; size_t len; len = strlen (filename); ret = xmalloc (len + 2); strcpy (ret, filename); ret[len] = '-'; ret[len+1] = '\0'; return ret; } /* Add the contents of FILENAME to the history list, a line at a time. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ int read_history (filename) const char *filename; { return (read_history_range (filename, 0, -1)); } /* Read a range of lines from FILENAME, adding them to the history list. Start reading at the FROM'th line and end at the TO'th. If FROM is zero, start at the beginning. If TO is less than FROM, read until the end of the file. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ int read_history_range (filename, from, to) const char *filename; int from, to; { register char *line_start, *line_end, *p; char *input, *buffer, *bufend, *last_ts; int file, current_line, chars_read; struct stat finfo; size_t file_size; #if defined (EFBIG) int overflow_errno = EFBIG; #elif defined (EOVERFLOW) int overflow_errno = EOVERFLOW; #else int overflow_errno = EIO; #endif buffer = last_ts = (char *)NULL; input = history_filename (filename); file = input ? open (input, O_RDONLY|O_BINARY, 0666) : -1; if ((file < 0) || (fstat (file, &finfo) == -1)) goto error_and_exit; file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { errno = overflow_errno; goto error_and_exit; } #ifdef HISTORY_USE_MMAP /* We map read/write and private so we can change newlines to NULs without affecting the underlying object. */ buffer = (char *)mmap (0, file_size, PROT_READ|PROT_WRITE, MAP_RFLAGS, file, 0); if ((void *)buffer == MAP_FAILED) { errno = overflow_errno; goto error_and_exit; } chars_read = file_size; #else buffer = (char *)malloc (file_size + 1); if (buffer == 0) { errno = overflow_errno; goto error_and_exit; } chars_read = read (file, buffer, file_size); #endif if (chars_read < 0) { error_and_exit: if (errno != 0) chars_read = errno; else chars_read = EIO; if (file >= 0) close (file); FREE (input); #ifndef HISTORY_USE_MMAP FREE (buffer); #endif return (chars_read); } close (file); /* Set TO to larger than end of file if negative. */ if (to < 0) to = chars_read; /* Start at beginning of file, work to end. */ bufend = buffer + chars_read; current_line = 0; /* Skip lines until we are at FROM. */ for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) if (*line_end == '\n') { p = line_end + 1; /* If we see something we think is a timestamp, continue with this line. We should check more extensively here... */ if (HIST_TIMESTAMP_START(p) == 0) current_line++; line_start = p; } /* If there are lines left to gobble, then gobble them now. */ for (line_end = line_start; line_end < bufend; line_end++) if (*line_end == '\n') { /* Change to allow Windows-like \r\n end of line delimiter. */ if (line_end > line_start && line_end[-1] == '\r') line_end[-1] = '\0'; else *line_end = '\0'; if (*line_start) { if (HIST_TIMESTAMP_START(line_start) == 0) { add_history (line_start); if (last_ts) { add_history_time (last_ts); last_ts = NULL; } } else { last_ts = line_start; current_line--; } } current_line++; if (current_line >= to) break; line_start = line_end + 1; } FREE (input); #ifndef HISTORY_USE_MMAP FREE (buffer); #else munmap (buffer, file_size); #endif return (0); } /* Truncate the history file FNAME, leaving only LINES trailing lines. If FNAME is NULL, then use ~/.history. Returns 0 on success, errno on failure. */ int history_truncate_file (fname, lines) const char *fname; int lines; { char *buffer, *filename, *bp, *bp1; /* bp1 == bp+1 */ int file, chars_read, rv; struct stat finfo; size_t file_size; buffer = (char *)NULL; filename = history_filename (fname); file = filename ? open (filename, O_RDONLY|O_BINARY, 0666) : -1; rv = 0; /* Don't try to truncate non-regular files. */ if (file == -1 || fstat (file, &finfo) == -1) { rv = errno; if (file != -1) close (file); goto truncate_exit; } if (S_ISREG (finfo.st_mode) == 0) { close (file); #ifdef EFTYPE rv = EFTYPE; #else rv = EINVAL; #endif goto truncate_exit; } file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { close (file); #if defined (EFBIG) rv = errno = EFBIG; #elif defined (EOVERFLOW) rv = errno = EOVERFLOW; #else rv = errno = EINVAL; #endif goto truncate_exit; } buffer = (char *)malloc (file_size + 1); if (buffer == 0) { close (file); goto truncate_exit; } chars_read = read (file, buffer, file_size); close (file); if (chars_read <= 0) { rv = (chars_read < 0) ? errno : 0; goto truncate_exit; } /* Count backwards from the end of buffer until we have passed LINES lines. bp1 is set funny initially. But since bp[1] can't be a comment character (since it's off the end) and *bp can't be both a newline and the history comment character, it should be OK. */ for (bp1 = bp = buffer + chars_read - 1; lines && bp > buffer; bp--) { if (*bp == '\n' && HIST_TIMESTAMP_START(bp1) == 0) lines--; bp1 = bp; } /* If this is the first line, then the file contains exactly the number of lines we want to truncate to, so we don't need to do anything. It's the first line if we don't find a newline between the current value of i and 0. Otherwise, write from the start of this line until the end of the buffer. */ for ( ; bp > buffer; bp--) { if (*bp == '\n' && HIST_TIMESTAMP_START(bp1) == 0) { bp++; break; } bp1 = bp; } /* Write only if there are more lines in the file than we want to truncate to. */ if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1)) { if (write (file, bp, chars_read - (bp - buffer)) < 0) rv = errno; #if defined (__BEOS__) /* BeOS ignores O_TRUNC. */ ftruncate (file, chars_read - (bp - buffer)); #endif if (close (file) < 0 && rv == 0) rv = errno; } truncate_exit: FREE (buffer); xfree (filename); return rv; } /* Workhorse function for writing history. Writes NELEMENT entries from the history list to FILENAME. OVERWRITE is non-zero if you wish to replace FILENAME with the entries. */ static int history_do_write (filename, nelements, overwrite) const char *filename; int nelements, overwrite; { register int i; char *output, *bakname; int file, mode, rv; #ifdef HISTORY_USE_MMAP size_t cursize; mode = overwrite ? O_RDWR|O_CREAT|O_TRUNC|O_BINARY : O_RDWR|O_APPEND|O_BINARY; #else mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY; #endif output = history_filename (filename); bakname = (overwrite && output) ? history_backupfile (output) : 0; if (output && bakname) rename (output, bakname); file = output ? open (output, mode, 0600) : -1; rv = 0; if (file == -1) { rv = errno; if (output && bakname) rename (bakname, output); FREE (output); FREE (bakname); return (rv); } #ifdef HISTORY_USE_MMAP cursize = overwrite ? 0 : lseek (file, 0, SEEK_END); #endif if (nelements > history_length) nelements = history_length; /* Build a buffer of all the lines to write, and write them in one syscall. Suggested by Peter Ho (peter@robosts.oxford.ac.uk). */ { HIST_ENTRY **the_history; /* local */ register int j; int buffer_size; char *buffer; the_history = history_list (); /* Calculate the total number of bytes to write. */ for (buffer_size = 0, i = history_length - nelements; i < history_length; i++) #if 0 buffer_size += 2 + HISTENT_BYTES (the_history[i]); #else { if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0]) buffer_size += strlen (the_history[i]->timestamp) + 1; buffer_size += strlen (the_history[i]->line) + 1; } #endif /* Allocate the buffer, and fill it. */ #ifdef HISTORY_USE_MMAP if (ftruncate (file, buffer_size+cursize) == -1) goto mmap_error; buffer = (char *)mmap (0, buffer_size, PROT_READ|PROT_WRITE, MAP_WFLAGS, file, cursize); if ((void *)buffer == MAP_FAILED) { mmap_error: rv = errno; close (file); if (output && bakname) rename (bakname, output); FREE (output); FREE (bakname); return rv; } #else buffer = (char *)malloc (buffer_size); if (buffer == 0) { rv = errno; close (file); if (output && bakname) rename (bakname, output); FREE (output); FREE (bakname); return rv; } #endif for (j = 0, i = history_length - nelements; i < history_length; i++) { if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0]) { strcpy (buffer + j, the_history[i]->timestamp); j += strlen (the_history[i]->timestamp); buffer[j++] = '\n'; } strcpy (buffer + j, the_history[i]->line); j += strlen (the_history[i]->line); buffer[j++] = '\n'; } #ifdef HISTORY_USE_MMAP if (msync (buffer, buffer_size, 0) != 0 || munmap (buffer, buffer_size) != 0) rv = errno; #else if (write (file, buffer, buffer_size) < 0) rv = errno; xfree (buffer); #endif } if (close (file) < 0 && rv == 0) rv = errno; if (rv != 0 && output && bakname) rename (bakname, output); else if (rv == 0 && bakname) unlink (bakname); FREE (output); FREE (bakname); return (rv); } /* Append NELEMENT entries to FILENAME. The entries appended are from the end of the list minus NELEMENTs up to the end of the list. */ int append_history (nelements, filename) int nelements; const char *filename; { return (history_do_write (filename, nelements, HISTORY_APPEND)); } /* Overwrite FILENAME with the current history. If FILENAME is NULL, then write the history list to ~/.history. Values returned are as in read_history ().*/ int write_history (filename) const char *filename; { return (history_do_write (filename, history_length, HISTORY_OVERWRITE)); } readline-6.3/histsearch.c0000664000043600000000000001140011130207321014226 0ustar chetwheel/* histsearch.c -- searching the history list. */ /* Copyright (C) 1989, 1992-2009 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. History is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with History. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # ifdef _MINIX # include # endif # include #endif #include "history.h" #include "histlib.h" /* The list of alternate characters that can delimit a history search string. */ char *history_search_delimiter_chars = (char *)NULL; static int history_search_internal PARAMS((const char *, int, int)); /* Search the history for STRING, starting at history_offset. If DIRECTION < 0, then the search is through previous entries, else through subsequent. If ANCHORED is non-zero, the string must appear at the beginning of a history line, otherwise, the string may appear anywhere in the line. If the string is found, then current_history () is the history entry, and the value of this function is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is returned. */ static int history_search_internal (string, direction, anchored) const char *string; int direction, anchored; { register int i, reverse; register char *line; register int line_index; int string_len; HIST_ENTRY **the_history; /* local */ i = history_offset; reverse = (direction < 0); /* Take care of trivial cases first. */ if (string == 0 || *string == '\0') return (-1); if (!history_length || ((i >= history_length) && !reverse)) return (-1); if (reverse && (i >= history_length)) i = history_length - 1; #define NEXT_LINE() do { if (reverse) i--; else i++; } while (0) the_history = history_list (); string_len = strlen (string); while (1) { /* Search each line in the history list for STRING. */ /* At limit for direction? */ if ((reverse && i < 0) || (!reverse && i == history_length)) return (-1); line = the_history[i]->line; line_index = strlen (line); /* If STRING is longer than line, no match. */ if (string_len > line_index) { NEXT_LINE (); continue; } /* Handle anchored searches first. */ if (anchored == ANCHORED_SEARCH) { if (STREQN (string, line, string_len)) { history_offset = i; return (0); } NEXT_LINE (); continue; } /* Do substring search. */ if (reverse) { line_index -= string_len; while (line_index >= 0) { if (STREQN (string, line + line_index, string_len)) { history_offset = i; return (line_index); } line_index--; } } else { register int limit; limit = line_index - string_len + 1; line_index = 0; while (line_index < limit) { if (STREQN (string, line + line_index, string_len)) { history_offset = i; return (line_index); } line_index++; } } NEXT_LINE (); } } /* Do a non-anchored search for STRING through the history in DIRECTION. */ int history_search (string, direction) const char *string; int direction; { return (history_search_internal (string, direction, NON_ANCHORED_SEARCH)); } /* Do an anchored search for string through the history in DIRECTION. */ int history_search_prefix (string, direction) const char *string; int direction; { return (history_search_internal (string, direction, ANCHORED_SEARCH)); } /* Search for STRING in the history list. DIR is < 0 for searching backwards. POS is an absolute index into the history list at which point to begin searching. */ int history_search_pos (string, dir, pos) const char *string; int dir, pos; { int ret, old; old = where_history (); history_set_pos (pos); if (history_search (string, dir) == -1) { history_set_pos (old); return (-1); } ret = where_history (); history_set_pos (old); return ret; } readline-6.3/patchlevel0000664000043600000240000000006112241416557014026 0ustar chetstaff# Do not edit -- exists only for use by patch 5