[Anet-checkins] CVS: Documentation/design/latex Makefile,NONE,1.1 anet.bib,NONE,1.1 anetdesign.tex,N
Status: Abandoned
Brought to you by:
benad
From: Christopher J. <cwj...@us...> - 2001-12-29 00:40:34
|
Update of /cvsroot/anet/Documentation/design/latex In directory usw-pr-cvs1:/tmp/cvs-serv20957/design/latex Added Files: Makefile anet.bib anetdesign.tex appendix.sty daemon.eps url.sty Log Message: Initial checkin of latex design docs --- NEW FILE: Makefile --- # Christopher Jensen # Makefile that produces documents in many formats # Sep 9, 2001 PROJECT=anetdesign BIBFILE=anet.bib TEXFILE=$(PROJECT).tex DVIFILE=$(PROJECT).dvi PSFILE=$(PROJECT).ps all: dvi dvi: latex $(TEXFILE) latex $(TEXFILE) bibtex $(PROJECT) makeindex $(PROJECT) latex $(TEXFILE) latex $(TEXFILE) ps: dvi dvips $(DVIFILE) -o $(PSFILE) pdf: dvi ps2pdf $(PSFILE) html: dvi latex2html -transparent $(TEXFILE) zip: tar cvzf $(PROJECT).tgz $(TEXFILE) $(BIBFILE) Makefile clean: rm *.cache *~ *.dvi *.toc *.bbl *.blg *.ilg *.ind *.idx *.lof *.log *.lot *.toc *.aux $(PSFILE) *.pdf -rf $(PROJECT)/ --- NEW FILE: anet.bib --- % file: anet.bib % ANet bibtex file % Note: there is no special entry-type for web sites. % Misc is recommended by http://www.tex.ac.uk/cgi-bin/texfaq2html?question=89 % To typeset url's you will need the url.sty package that should be provided with the source % The makefile should take care of generating the bibliography correctly. @Misc{w3xml, OPTkey = {}, OPTauthor = {}, title = {The World Wide Web Consortium: ``Extensible Markup Language (XML)''}, howpublished = {\url"http://www.w3.org/XML"}, OPTmonth = {}, OPTyear = {}, OPTnote = {}, OPTannote = {} } @Misc{macmem, OPTkey = {}, OPTauthor = {}, title = {Inside Macintosh: Memory}, howpublished = {\url"http://developer.apple.com/techpubs/mac/Memory/Memory-2.html"}, OPTmonth = {}, OPTyear = {}, OPTnote = {}, OPTannote = {} } @Misc{perl, OPTkey = {}, OPTauthor = {}, title = {Perl Mongers}, howpublished = {\url"http://www.perl.org"}, OPTmonth = {}, OPTyear = {}, OPTnote = {}, OPTannote = {} } --- NEW FILE: anetdesign.tex --- %===================================================================== % Christopher Jensen % file: highdesign.tex % latex source file % %===================================================================== %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Editing Rules % % - If you add macros document them. % - If you use packages don't forget to add them in the directory. % - Please make your editor wrap the text. It's easier to read. I % speak for myself, I like having a split screen with 2 views on the % document. Under emacs this easily done with the auto-fill-mode. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %=====================================================================% % Preamble % % % %=====================================================================% \documentclass[letterpaper]{report} \usepackage{latexsym} % Use special symbols. \usepackage{makeidx} % Make an index. \usepackage{url} \usepackage{appendix} %\usepackage{fancyhdr} %\usepackage{pandora} % use the pandora fonts, they seem more modern \usepackage{concrete} \usepackage[dvips]{graphicx} % needed to load the correct driver when including graphics \makeindex % Dimensions for 8.5" x 11" paper \textwidth 6.5in \textheight 9in % The default top margin is 1". The following command adjusts it to 0.5". \topmargin -0.5in % There are two margin widths to allow for two-sided printing. \oddsidemargin 0pt \evensidemargin 0pt \topmargin 0pt % \parskip is the vertical space between paragraphs. % \parindent is the horizontal indentation at the beginning of a paragraph. \parskip 1.5ex plus 1ex minus 0.5ex %\parindent 0em % Let Latex write the pages headings. \pagestyle{headings} % Number all sections, but include only section and subsections in the ToC. \setcounter{secnumdepth}{5} \setcounter{tocdepth}{2} % Cross-reference commands. \newcommand{\xf}[1]{Figure~\ref{#1}} \newcommand{\xp}[1]{page~\pageref{#1}} \newcommand{\xs}[1]{Section~\ref{#1}} \newcommand{\xa}[1]{Appendix~\ref{#1}} \newcommand{\tx}{\TeX} \newcommand{\ltx}{\LaTeX2e} \newcommand{\la}{\mathopen{<}} \newcommand{\ra}{\mathopen{>}} \newcounter{exnum} \newenvironment{example}[1]{\penalty-2000\vskip1.5\parskip \refstepcounter{exnum}{\bfseries Example \arabic{exnum}: #1}% \penalty 10000\vskip0.5\parskip}% {$\Box$} % New environments defined specifically for this document. \newenvironment{prog}{\def\-{\hskip 1em}\penalty-1000\vskip\parskip \parskip0pt\leftskip2em\obeylines\ttfamily}{\par} \title{ANet Software Design Document} \author{Benoit Nadeau\thanks{thanks to Christopher Jensen for porting the HTML documentation to beautiful \ltx}} \date{\today} \begin{document} \maketitle \tableofcontents \listoffigures \listoftables \begin{abstract} Blah Blah put all the ANet abstract here. \end{abstract} % Since I wanted an appendix and I thought we would combine both h-l & % l-l designs, I thought we would need more sectionning, thus came the % report document style and the \part. The problem is the \part % sectionning does not affect the counter in the table of contents, % resulting with section numbers 0.1, 0.2. In reports only the % the level above \section is \chapter. But the \chapter command makes % a big bold chapter heading like in a book ( we don't want that). % Anyways I'm leaving it there for the time being. I'll try to % figure something out later. \setcounter{chapter}{1} \part{High-Level Design} \label{part:hld} \index{high-level design} This is the High-Level Design for ANet. It presents a non-technical view of the different components of ANet, how they work, how they interact with each other and how they will be implemented. \section{Run-Time Wrapper} \label{sec:rtw} \index{run-time wrapper} Manages the creation, destruction and the communication of the different modules of ANet. Makes an abstraction of memory and file management. Maitains configuration files. \subsection{Design} \subsubsection{The Wrapper} \index{wrapper} The ``wrapper'' is, simply said, the program that the user has to launch to run the ANet daemon. Actually, is is the running program, because it controls the data flow inside the daemon. The actual implementation in done within what we call ``Modules'', so the wrapper has to load, set-up and run those modules. Also, it has to transfer the data between the different modules. The wrapper might run as a single thread. Thus, any long Input/Output should be done asynchronously, or the whole process will be blocked. The data flow is done in ``passes'', in two directions: upwards, from the network to the client interface, and downwards, in the other direction. \subsubsection{What is a Module?} A module is an isolated group of code that can have one or more running instances in the ANet daemon. It is isolated by not being able to make any assumption about its environment, other than the run-time wrapper and the other modules it is allowed to communicate with. A module can be stored in a static library, a dynamic loading library (DLL) or compiled with the rest of the daemon. A module can have multiple running instances in the daemon by having more than one ``context''. The context is some global data, unique for each different instance, and maintained by the wrapper. \subsubsection{Loading Modules} First, the wrapper has to load the code of the module. It does so by assuming that all modules will implement a function that returns a list of the function names supported by the module, the name of the module and its version. Secondly, the wrapper has to load instances of the module. It does that by calling an initialization function, if implemented\footnote{From the previous step, the wrapper already ``knows'' all the functions that are implemented, so it already ``knows'' if the initialization function exists.}, in the module, and then assigns an unique number, the module instance ID, to the new instance. Thirdly, it has to assign some ``global space'' (more on this below) to the module instance. Whenever a function in a module is called, the module instance ID is passed to the function, allowing it to restore the global space of the current instance. \subsubsection{Memory Management} I know. Everybody loves the ``new'' operator in C++. Or the ``malloc'' function in C. But then, in something as modular as ANet, using them could break up the whole program. This is not only for controlling memory leaks,but especially to control, at all times, the entire data used by modules outside the program stack. An example. Let's say you want to close the ANet daemon for 5 minutes, then restore ANet to its exact same state as before. If every module does its own memory management, then the modules may not be ``smart'' enough to store to the hard disk the data they allocated themselves. More importantly, each module has multiple instances running in ANet, and thus the data used by a module, that should stay in memory between calls to the module, has to be maintained by whatever ``knows'' what are those instances. To solve all of these problems, the run-time wrapper has to do two things. First, no module should do any memory management other than the one offered by the run-time wrapper. Given a module instance ID and the size of the wanted memory block, the wrapper can create a new ``memory tag'' that can be used to get the memory location of the memory block. Only those ``memory tags'' should be remembered, as the actual memory locations can change between the different calls to a module. A module can change the size of a memory block, lock its position in memory, mark it as temporary so its memory could be freed if memory is tight, and so on.\footnote{This was ``inspired'' by, you know \ldots\cite{macmem}} Second, whenever a function in a module is called, the module instance ID is passed to the function. With that, the module instance can get the address of its own ``global space''. A module instance's global space is a small block of memory that is created when the instance is created. The module instance can get its global space with no other information than its own ID (which it always gets), and, for obvious reasons, the global space cannot be marked as temporary or deleted. Usually, instances should use their global space to store the other memory tags that they allocated\footnote{Unless you're already having some fun time making memory leaks \ldots}. \subsubsection{File Management} The wrapper will allow modules to do several things with the file system: \begin{description} \item Files: create, open, read, write, close and delete. \item Directories: create, read, delete \end{description} Once opened, files and directories are identified by an ID. The files and directories can be identified on the file system with three kind of paths: \begin{description} \item[UNIX] \verb|/directory/directory/.../file.| \\Up one directory: .. \item[MacOS] \verb|Disk:folder:folder:...:file.| \\Up one directory: :: \item[Win32] \verb|Disk:\directory\directory\...\file.ext.| \\Upone directory: .. \end{description} Those three kind of paths will be supported on all operating systems that ANet will support, with the following restrictions: \begin{description} \item Win32 systems assume that there is a file extension. If none is given, a generic one will be added when the file is created. The generic file extension for ANet can be changed in the configuration files. \item The ``Disk'' part of the Win32 paths will be ignored on UNIX systems, except Mac OS X. \item On Mac OS 9, the file type and creator will be based on the file name extension. If the extension is missing, a generic type/creator pair will be given to the file when created. The default pair can be changed in the configuration file. \item Files and directories will be created with the default access privileges, which can be changed in the configuration file. \end{description} As said before, the wrapper could be a single thread. So, all the file management functions are only asynchronous; they won't have any synchronous version. This is to make sure that no module will block the entire daemon because it is waiting for some Input/Output from the file system. Obviously, some timing functions will be available, so that modules can know when their I/O functions have timed out. \subsubsection{Configuration Management} The run-time wrapper will also manage the configuration files. The configuration files are XML\cite{w3xml} files\footnote{Why XML? The first thing is that I don't want the ANet configuration files to be too difficult to edit. Since ANet needs to have a structured configuration file, anything else won't be as good. Also, you can use multiple XML files that will ``patch'' each other, in the order they are loaded. Finally, with all the hype around XML (why all this hype anyways?), a lot of tools and code is already available.}. At least one of these files has to contain the root element, which represents the whole ANet daemon, and contains the settings of the run-time wrapper. All module instances have their settings in the XML files. Thus, when an instance is initialized, it is given access to their XML tags. The instance is free to change their own XML tag and the tags it contains, and the modified XML can be seen or saved back to the hard disk, if the user wants it. \subsubsection{Log Management} The run-time wrapper will also offer functions that will allow module instances to log messages to the hard disk. The wrapper will try to write those logs as fast as possible, so the write cache will be small. This can really help if you want to log something before crashing. Because of this small cache, even if the output to the disk is asynchronous, it could result is a severe speed hit if abused, by being too ``verbose''. So, don't abuse of it. Speaking of crashes, module instances can call a ``die'' function, which logs something before terminating the module instance\footnote{A bit like the ``die'' function in Perl\cite{perl}.}. Since the global space and all memory allocated to the instance is destroyed, the instance should return from the function call as soon as possible. \subsubsection{Inter-Module Communication} Finally, the run-time wrapper will allow module instances to exchange information through function calls in ways that are not explicitly required by the wrapper. Basically, an instance tells the wrapper ``I want to call function X with arguments Y in module instance M''. Then, the wrapper will call a function in M that will return true only if, for the given information from the calling instance, M accepts to get called by the other module. Then, if that's the case, then function will be called with the arguments. Actually, before trying to make an inter-module call, the instance will have to ask from the wrapper a list of instances that can accept inter-module calls. Based on that information, the instance decides which instance to call. \subsection{Implementation Notes} Ideally, the wrapper would be multi-threaded. But that would really make everything more complex. But then, cooperative multitasking (or ``fibers'' in Win32) is easy to implement. The only problem is that it has to be an explicit function call, made from time to time in all the modules. Even if it is too easy to forget to call that function from time to time, it might be the best way to do multitasking, so this will become a requirement in all the modules. The memory management functions could simply be wrappers around the ``malloc'' function, and its related functions. A simple hash table and a linked list are also needed. There are several open-source XML parsers and checkers out there, but surprisingly, most of them are not under the GNU Public Licence. So, we can use them, as long as they're not in the same ``package'' as the rest of the source code from ANet. The Inter-Module Communication system could be as complex or as simple as we want. We should aim for simple, as it won't be used much, except for weird optimizations (hacks) when modules ``know'' about each other. \subsection{DTD} See the complete DTD for more information see \xs{sec:dtd}. \begin{verbatim} <!-- Root element --> <!ELEMENT ANet (ClientConnection)+, BandwidthManager, (ClusterGroup)+, CoreModules, (Cluster)+> <!ATTLIST ANet %security;> \end{verbatim} \section{Client Connection Modules} \label{sec:ccm} Communication bridge between the ANet daemon and the clients. \section{Data Transformation Modules} \label{sec:dtm} Transform some data. \section{Client SDK} \label{sec:csdk} Group of libraries to simplify the process of building clients for ANet. \section{Cluster Group Modules} \label{sec:cgm} Define data duplication between different clusters. \section{Cluster Filter Modules} \label{sec:clus} Define data filtering for a cluster. \section{ANet Core} \label{sec:ac} Does the actual data duplication within a cluster. Contains the query, static data and TWDT modules. \section{Handshaking Protocol Modules} \label{sec:hpm} Define what and how connections should be made and manage resumed connections. \section{Packet Protocol Modules} \label{sec:ppm} Define the way the data will be streamed between two nodes. \section{Connection Protocol Modules} \label{sec:cpm} Define how network connections, from a low-level point of view, should be made between two nodes. \section{Bandwidth Manager Module} \label{sec:bbm} Monitors the network connections to maintain bandwidth statistics. \section{Document Type Definition (DTD)} \label{sec:dtd} This is the DTD file for the ANet configuration files. \setcounter{chapter}{2} \part{Low-Level Design} %\chapter{Low-Level Design} \bibliographystyle{plain} \bibliography{anet} \appendix \appendixpage \addappheadtotoc \chapter{Graphs} \begin{figure}[!h] \begin{center} \includegraphics[scale=.5]{daemon} \end{center} \label{fig:daemon} \caption{High-Level Structure of the ANet Daemon} \end{figure} \printindex \end{document} --- NEW FILE: appendix.sty --- %% %% This is file `appendix.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% appendix.dtx (with options: `usc') %% %% Author: Peter Wilson (CUA and NIST) %% now at: pet...@bo... %% %% Copyright 1998 Peter R. Wilson %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{appendix}[2001/03/15 v1.1 extra appendix facilities] \RequirePackage{ifthen} \newif\if@chapter@pp\@chapter@ppfalse \newif\if@knownclass@pp\@knownclass@ppfalse \@ifundefined{chapter}{% \@ifundefined{section}{}{\@knownclass@pptrue}}{% \@chapter@pptrue\@knownclass@pptrue} \newif\if@dotoc@pp\@dotoc@ppfalse \newif\if@dotitle@pp\@dotitle@ppfalse \newif\if@dotitletoc@pp\@dotitletoc@ppfalse \newif\if@dohead@pp\@dohead@ppfalse \newif\if@dopage@pp\@dopage@ppfalse \DeclareOption{toc}{\@dotoc@pptrue} \DeclareOption{title}{\@dotitle@pptrue} \DeclareOption{titletoc}{\@dotitletoc@pptrue} \DeclareOption{header}{\@dohead@pptrue} \DeclareOption{page}{\@dopage@pptrue} \ProcessOptions\relax \newcommand{\@ppendinput}{} \if@knownclass@pp\else \PackageWarningNoLine{appendix}% {There is no \protect\chapter\space or \protect\section\space command.\MessageBreak The appendix package will not be used} \renewcommand{\@ppendinput}{\endinput} \fi \@ppendinput \newcounter{@ppsavesec} \newcounter{@ppsaveapp} \setcounter{@ppsaveapp}{0} \newcommand{\@ppsavesec}{% \if@chapter@pp \setcounter{@ppsavesec}{\value{chapter}} \else \setcounter{@ppsavesec}{\value{section}} \fi} \newcommand{\@pprestoresec}{% \if@chapter@pp \setcounter{chapter}{\value{@ppsavesec}} \else \setcounter{section}{\value{@ppsavesec}} \fi} \newcommand{\@ppsaveapp}{% \if@chapter@pp \setcounter{@ppsaveapp}{\value{chapter}} \else \setcounter{@ppsaveapp}{\value{section}} \fi} \newcommand{\restoreapp}{% \if@chapter@pp \setcounter{chapter}{\value{@ppsaveapp}} \else \setcounter{section}{\value{@ppsaveapp}} \fi} \providecommand{\appendixname}{Appendix} \newcommand{\appendixtocname}{Appendices} \newcommand{\appendixpagename}{Appendices} \newcommand{\appendixpage}{% \if@chapter@pp \@chap@pppage \else \@sec@pppage \fi } \newcommand{\clear@ppage}{% \if@openright\cleardoublepage\else\clearpage\fi} \newcommand{\@chap@pppage}{% \clear@ppage \thispagestyle{plain}% \if@twocolumn\onecolumn\@tempswatrue\else\@tempswafalse\fi \null\vfil \markboth{}{}% {\centering \interlinepenalty \@M \normalfont \Huge \bfseries \appendixpagename\par}% \vfil\newpage \if@twoside \if@openright \null \thispagestyle{empty}% \newpage \fi \fi \if@tempswa \twocolumn \fi } \newcommand{\@sec@pppage}{% \par \addvspace{4ex}% \@afterindentfalse {\parindent \z@ \raggedright \interlinepenalty \@M \normalfont \huge \bfseries \appendixpagename% \markboth{}{}\par}% \nobreak \vskip 3ex \@afterheading } \newcommand{\addappheadtotoc}{% \if@chapter@pp \addcontentsline{toc}{chapter}{\appendixtocname} \else \addcontentsline{toc}{section}{\appendixtocname} \fi } \newcommand{\@resets@pp}{ \par \@ppsavesec \setcounter{section}{0} \if@chapter@pp \setcounter{chapter}{0} \renewcommand\@chapapp{\appendixname} \renewcommand\thechapter{\@Alph\c@chapter} \else \setcounter{subsection}{0} \renewcommand\thesection{\@Alph\c@section} \fi \restoreapp } \newenvironment{appendices}{% \@resets@pp \if@dotoc@pp \if@dopage@pp % both page and toc \if@chapter@pp % chapters \clear@ppage \addappheadtotoc\appendixpage \else % non-chaptered \appendixpage\addappheadtotoc \fi \else % toc only \if@chapter@pp % chapters \clear@ppage \fi \addappheadtotoc \fi \else \if@dopage@pp % page only \appendixpage \fi \fi \if@chapter@pp \if@dotitletoc@pp \@redotocentry@pp{chapter} \fi \else \if@dotitletoc@pp \@redotocentry@pp{section} \fi \if@dohead@pp \def\sectionmark##1{% \if@twoside \markboth{\@formatsecmark@pp{##1}}{} \else \markright{\@formatsecmark@pp{##1}}{} \fi} \fi \if@dotitle@pp \def\sectionname{\appendixname} \def\@seccntformat##1{\@ifundefined{##1name}{}{\csname ##1name\endcsname\ }% \csname the##1\endcsname\quad} \fi \fi}{% \@ppsaveapp\@pprestoresec} \newcommand{\setthesection}{\thechapter.\Alph{section}} \newcommand{\setthesubsection}{\thesection.\Alph{subsection}} \newcommand{\@resets@ppsub}{ \par \if@chapter@pp \setcounter{section}{0} \renewcommand{\thesection}{\setthesection} \else \setcounter{subsection}{0} \renewcommand{\thesubsection}{\setthesubsection} \fi } \newenvironment{subappendices}{% \@resets@ppsub \if@chapter@pp \if@dotitletoc@pp \@redotocentry@pp{section} \fi \if@dotitle@pp \def\sectionname{\appendixname} \def\@seccntformat##1{\@ifundefined{##1name}{}{\csname ##1name\endcsname\ }% \csname the##1\endcsname\quad} \fi \else \if@dotitletoc@pp \@redotocentry@pp{subsection} \fi \if@dotitle@pp \def\subsectionname{\appendixname} \def\@seccntformat##1{\@ifundefined{##1name}{}{\csname ##1name\endcsname\ }% \csname the##1\endcsname\quad} \fi \fi}{} \newcommand{\@formatsecmark@pp}[1]{% \MakeUppercase{\appendixname\space \ifnum \c@secnumdepth >\z@ \thesection\quad \fi #1}} \newcommand{\@redotocentry@pp}[1]{% \let\oldacl@pp=\addcontentsline \def\addcontentsline##1##2##3{% \ifthenelse{\equal{##1}{toc}}{% \ifthenelse{\equal{##2}{#1}}{% \addtocontents{##1}{\protect\contentsline{##2}% {\appendixname\space ##3}{\thepage}}}% {\oldacl@pp{##1}{##2}{##3}}}% {\oldacl@pp{##1}{##2}{##3}}}} \endinput %% %% End of file `appendix.sty'. --- NEW FILE: daemon.eps --- %!PS-Adobe-2.0 EPSF-2.0 %%Title: daemon.dia %%Creator: Dia v0.88.1 %%CreationDate: Thu Dec 27 12:35:37 2001 %%For: cjensen %%Magnification: 1.0000 %%Orientation: Portrait %%BoundingBox: 0 0 986 1106 %%Pages: 1 %%BeginSetup %%EndSetup %%EndComments %%BeginProlog [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.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 /asciicircum /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 /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /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] /isolatin1encoding exch def /Times-Roman-latin1 /Times-Roman findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Times-Italic-latin1 /Times-Italic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Times-Bold-latin1 /Times-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Times-BoldItalic-latin1 /Times-BoldItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /AvantGarde-Book-latin1 /AvantGarde-Book findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /AvantGarde-BookOblique-latin1 /AvantGarde-BookOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /AvantGarde-Demi-latin1 /AvantGarde-Demi findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /AvantGarde-DemiOblique-latin1 /AvantGarde-DemiOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Bookman-Light-latin1 /Bookman-Light findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Bookman-LightItalic-latin1 /Bookman-LightItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Bookman-Demi-latin1 /Bookman-Demi findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Bookman-DemiItalic-latin1 /Bookman-DemiItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Courier-latin1 /Courier findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Courier-Oblique-latin1 /Courier-Oblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Courier-Bold-latin1 /Courier-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Courier-BoldOblique-latin1 /Courier-BoldOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-latin1 /Helvetica findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-Oblique-latin1 /Helvetica-Oblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-Bold-latin1 /Helvetica-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-BoldOblique-latin1 /Helvetica-BoldOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-Narrow-latin1 /Helvetica-Narrow findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-Narrow-Oblique-latin1 /Helvetica-Narrow-Oblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-Narrow-Bold-latin1 /Helvetica-Narrow-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Helvetica-Narrow-BoldOblique-latin1 /Helvetica-Narrow-BoldOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /NewCenturySchoolbook-Roman-latin1 /NewCenturySchoolbook-Roman findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /NewCenturySchoolbook-Italic-latin1 /NewCenturySchoolbook-Italic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /NewCenturySchoolbook-Bold-latin1 /NewCenturySchoolbook-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /NewCenturySchoolbook-BoldItalic-latin1 /NewCenturySchoolbook-BoldItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Palatino-Roman-latin1 /Palatino-Roman findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Palatino-Italic-latin1 /Palatino-Italic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Palatino-Bold-latin1 /Palatino-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Palatino-BoldItalic-latin1 /Palatino-BoldItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /Symbol-latin1 /Symbol findfont definefont pop /ZapfChancery-MediumItalic-latin1 /ZapfChancery-MediumItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /ZapfDingbats-latin1 /ZapfDingbats findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding isolatin1encoding def currentdict end definefont pop /cp {closepath} bind def /c {curveto} bind def /f {fill} bind def /a {arc} bind def /ef {eofill} bind def /ex {exch} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth pop} bind def /tr {translate} bind def /ellipsedict 8 dict def ellipsedict /mtrx matrix put /ellipse { ellipsedict begin /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc savematrix setmatrix end } def /mergeprocs { dup length 3 -1 roll dup length dup 5 1 roll 3 -1 roll add array cvx dup 3 -1 roll 0 exch putinterval dup 4 2 roll putinterval } bind def 28.346000 -28.346000 scale 0.750000 -36.250000 translate %%EndProlog /Times-Roman-latin1 ff 0.700000 scf sf 0.000000 0.000000 0.000000 srgb (Anonymous Distributed Networking Protocol \(ANet\) Daemon ) dup sw 2 div 17.000000 ex sub -1.000000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 12.000000 3.500000 m 12.000000 4.500000 l 13.000000 4.500000 l 13.000000 3.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 12.000000 3.500000 m 12.000000 4.500000 l 13.000000 4.500000 l 13.000000 3.500000 l cp s 1.000000 1.000000 1.000000 srgb n 15.000000 3.500000 m 15.000000 4.500000 l 16.000000 4.500000 l 16.000000 3.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 15.000000 3.500000 m 15.000000 4.500000 l 16.000000 4.500000 l 16.000000 3.500000 l cp s 1.000000 1.000000 1.000000 srgb n 18.000000 3.500000 m 18.000000 4.500000 l 19.000000 4.500000 l 19.000000 3.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 18.000000 3.500000 m 18.000000 4.500000 l 19.000000 4.500000 l 19.000000 3.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (IPC or local TCP/IP) dup sw 2 div 15.500000 ex sub 2.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 23.000000 3.500000 m 23.000000 4.500000 l 24.000000 4.500000 l 24.000000 3.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 23.000000 3.500000 m 23.000000 4.500000 l 24.000000 4.500000 l 24.000000 3.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (TCP/IP) dup sw 2 div 23.500000 ex sub 2.500000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (Other ANet Daemon) dup sw 2 div 29.500000 ex sub 2.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 29.000000 3.500000 m 29.000000 4.500000 l 30.000000 4.500000 l 30.000000 3.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 29.000000 3.500000 m 29.000000 4.500000 l 30.000000 4.500000 l 30.000000 3.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Client) dup sw 9.500000 ex sub 8.000000 m gs 1 -1 sc sh gr (Connection) dup sw 9.500000 ex sub 8.700000 m gs 1 -1 sc sh gr (Modules) dup sw 9.500000 ex sub 9.400000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 23.500000 4.500000 m 23.000000 7.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 22.802721 6.858844 m 23.000000 7.500000 l 23.394558 6.957483 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 29.500000 4.500000 m 30.000000 7.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 29.605442 6.957483 m 30.000000 7.500000 l 30.197279 6.858844 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 12.500000 4.500000 m 14.500000 7.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 13.917565 7.167180 m 14.500000 7.500000 l 14.416795 6.834360 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 15.500000 4.500000 m 15.500000 7.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 15.200000 6.900000 m 15.500000 7.500000 l 15.800000 6.900000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 18.500000 4.500000 m 16.500000 7.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 16.583205 6.834360 m 16.500000 7.500000 l 17.082435 7.167180 l s 1.000000 1.000000 1.000000 srgb n 0.400000 3.000000 m 0.400000 5.000000 l 3.600000 5.000000 l 3.600000 3.000000 l f n 0.400000 3.400000 m 0.400000 3.400000 0.400000 0.400000 180.000000 270.000000 ellipse f n 3.600000 3.400000 m 3.600000 3.400000 0.400000 0.400000 270.000000 360.000000 ellipse f n 0.000000 3.400000 m 0.000000 4.600000 l 4.000000 4.600000 l 4.000000 3.400000 l f n 0.400000 4.600000 m 0.400000 4.600000 0.400000 0.400000 90.000000 180.000000 ellipse f n 3.600000 4.600000 m 3.600000 4.600000 0.400000 0.400000 0.000000 90.000000 ellipse f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 0.400000 3.000000 m 3.600000 3.000000 l s n 0.400000 5.000000 m 3.600000 5.000000 l s n 0.400000 3.400000 0.400000 0.400000 180.000000 270.000000 ellipse s n 3.600000 3.400000 0.400000 0.400000 270.000000 360.000000 ellipse s n 0.000000 3.400000 m 0.000000 4.600000 l s n 4.000000 3.400000 m 4.000000 4.600000 l s n 0.400000 4.600000 0.400000 0.400000 90.000000 180.000000 ellipse s n 3.600000 4.600000 0.400000 0.400000 0.000000 90.000000 ellipse s /Times-Italic-latin1 ff 0.700000 scf sf (Clients) dup sw 2 div 2.000000 ex sub 4.000000 m gs 1 -1 sc sh gr (\(add/drop\)) dup sw 2 div 2.000000 ex sub 4.700000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 7.000000 m 11.000000 7.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 7.000000 m 10.000000 10.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 10.000000 m 11.000000 10.000000 l s 1.000000 1.000000 1.000000 srgb n 14.500000 7.500000 m 14.500000 9.000000 l 16.500000 9.000000 l 16.500000 7.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 14.500000 7.500000 m 14.500000 9.000000 l 16.500000 9.000000 l 16.500000 7.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Local) dup sw 2 div 15.500000 ex sub 8.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 20.500000 7.500000 m 20.500000 9.000000 l 25.500000 9.000000 l 25.500000 7.500000 l f n 20.500000 7.500000 m 20.500000 7.500000 0.000000 0.000000 180.000000 270.000000 ellipse f n 25.500000 7.500000 m 25.500000 7.500000 0.000000 0.000000 270.000000 360.000000 ellipse f n 20.500000 7.500000 m 20.500000 9.000000 l 25.500000 9.000000 l 25.500000 7.500000 l f n 20.500000 9.000000 m 20.500000 9.000000 0.000000 0.000000 90.000000 180.000000 ellipse f n 25.500000 9.000000 m 25.500000 9.000000 0.000000 0.000000 0.000000 90.000000 ellipse f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 20.500000 7.500000 m 25.500000 7.500000 l s n 20.500000 9.000000 m 25.500000 9.000000 l s n 20.500000 7.500000 0.000000 0.000000 180.000000 270.000000 ellipse s n 25.500000 7.500000 0.000000 0.000000 270.000000 360.000000 ellipse s n 20.500000 7.500000 m 20.500000 9.000000 l s n 25.500000 7.500000 m 25.500000 9.000000 l s n 20.500000 9.000000 0.000000 0.000000 90.000000 180.000000 ellipse s n 25.500000 9.000000 0.000000 0.000000 0.000000 90.000000 ellipse s /Times-Roman-latin1 ff 0.700000 scf sf (TCP/IP remote) dup sw 2 div 23.000000 ex sub 8.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 28.000000 7.500000 m 28.000000 9.000000 l 32.000000 9.000000 l 32.000000 7.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 28.000000 7.500000 m 28.000000 9.000000 l 32.000000 9.000000 l 32.000000 7.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Gateway) dup sw 2 div 30.000000 ex sub 8.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 0.400000 8.000000 m 0.400000 9.500000 l 4.600000 9.500000 l 4.600000 8.000000 l f n 0.400000 8.400000 m 0.400000 8.400000 0.400000 0.400000 180.000000 270.000000 ellipse f n 4.600000 8.400000 m 4.600000 8.400000 0.400000 0.400000 270.000000 360.000000 ellipse f n 0.000000 8.400000 m 0.000000 9.100000 l 5.000000 9.100000 l 5.000000 8.400000 l f n 0.400000 9.100000 m 0.400000 9.100000 0.400000 0.400000 90.000000 180.000000 ellipse f n 4.600000 9.100000 m 4.600000 9.100000 0.400000 0.400000 0.000000 90.000000 ellipse f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 0.400000 8.000000 m 4.600000 8.000000 l s n 0.400000 9.500000 m 4.600000 9.500000 l s n 0.400000 8.400000 0.400000 0.400000 180.000000 270.000000 ellipse s n 4.600000 8.400000 0.400000 0.400000 270.000000 360.000000 ellipse s n 0.000000 8.400000 m 0.000000 9.100000 l s n 5.000000 8.400000 m 5.000000 9.100000 l s n 0.400000 9.100000 0.400000 0.400000 90.000000 180.000000 ellipse s n 4.600000 9.100000 0.400000 0.400000 0.000000 90.000000 ellipse s /Times-Italic-latin1 ff 0.700000 scf sf ("Server" Layer) dup sw 2 div 2.500000 ex sub 9.000000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (Cluster) dup sw 9.500000 ex sub 13.500000 m gs 1 -1 sc sh gr (Groups) dup sw 9.500000 ex sub 14.200000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 12.000000 m 11.000000 12.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 12.000000 m 10.000000 15.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 15.000000 m 11.000000 15.000000 l s 1.000000 1.000000 1.000000 srgb n 0.400000 13.000000 m 0.400000 14.500000 l 5.600000 14.500000 l 5.600000 13.000000 l f n 0.400000 13.400000 m 0.400000 13.400000 0.400000 0.400000 180.000000 270.000000 ellipse f n 5.600000 13.400000 m 5.600000 13.400000 0.400000 0.400000 270.000000 360.000000 ellipse f n 0.000000 13.400000 m 0.000000 14.100000 l 6.000000 14.100000 l 6.000000 13.400000 l f n 0.400000 14.100000 m 0.400000 14.100000 0.400000 0.400000 90.000000 180.000000 ellipse f n 5.600000 14.100000 m 5.600000 14.100000 0.400000 0.400000 0.000000 90.000000 ellipse f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 0.400000 13.000000 m 5.600000 13.000000 l s n 0.400000 14.500000 m 5.600000 14.500000 l s n 0.400000 13.400000 0.400000 0.400000 180.000000 270.000000 ellipse s n 5.600000 13.400000 0.400000 0.400000 270.000000 360.000000 ellipse s n 0.000000 13.400000 m 0.000000 14.100000 l s n 6.000000 13.400000 m 6.000000 14.100000 l s n 0.400000 14.100000 0.400000 0.400000 90.000000 180.000000 ellipse s n 5.600000 14.100000 0.400000 0.400000 0.000000 90.000000 ellipse s /Times-Italic-latin1 ff 0.700000 scf sf (Data Duplication) dup sw 2 div 3.000000 ex sub 14.000000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 16.500000 12.500000 m 16.500000 14.000000 l 18.500000 14.000000 l 18.500000 12.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 16.500000 12.500000 m 16.500000 14.000000 l 18.500000 14.000000 l 18.500000 12.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Chat) dup sw 2 div 17.500000 ex sub 13.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 26.000000 12.500000 m 26.000000 14.000000 l 28.000000 14.000000 l 28.000000 12.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 26.000000 12.500000 m 26.000000 14.000000 l 28.000000 14.000000 l 28.000000 12.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (FTP) dup sw 2 div 27.000000 ex sub 13.500000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 15.500000 9.000000 m 17.500000 12.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 16.941844 12.127896 m 17.500000 12.500000 l 17.462790 11.830212 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 15.500000 9.000000 m 26.000000 12.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 25.335922 12.594868 m 26.000000 12.500000 l 25.525658 12.025658 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 23.000000 9.000000 m 18.500000 12.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 18.789429 11.894830 m 18.500000 12.500000 l 19.157794 12.368441 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 23.000000 9.000000 m 27.000000 12.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 26.350903 12.330670 m 27.000000 12.500000 l 26.746005 11.879124 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 30.000000 9.000000 m 28.000000 12.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 28.037210 11.830212 m 28.000000 12.500000 l 28.558156 12.127896 l s 1.000000 1.000000 1.000000 srgb n 0.400000 17.500000 m 0.400000 19.000000 l 4.600000 19.000000 l 4.600000 17.500000 l f n 0.400000 17.900000 m 0.400000 17.900000 0.400000 0.400000 180.000000 270.000000 ellipse f n 4.600000 17.900000 m 4.600000 17.900000 0.400000 0.400000 270.000000 360.000000 ellipse f n 0.000000 17.900000 m 0.000000 18.600000 l 5.000000 18.600000 l 5.000000 17.900000 l f n 0.400000 18.600000 m 0.400000 18.600000 0.400000 0.400000 90.000000 180.000000 ellipse f n 4.600000 18.600000 m 4.600000 18.600000 0.400000 0.400000 0.000000 90.000000 ellipse f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 0.400000 17.500000 m 4.600000 17.500000 l s n 0.400000 19.000000 m 4.600000 19.000000 l s n 0.400000 17.900000 0.400000 0.400000 180.000000 270.000000 ellipse s n 4.600000 17.900000 0.400000 0.400000 270.000000 360.000000 ellipse s n 0.000000 17.900000 m 0.000000 18.600000 l s n 5.000000 17.900000 m 5.000000 18.600000 l s n 0.400000 18.600000 0.400000 0.400000 90.000000 180.000000 ellipse s n 4.600000 18.600000 0.400000 0.400000 0.000000 90.000000 ellipse s /Times-Italic-latin1 ff 0.700000 scf sf (Data Filtering) dup sw 2 div 2.500000 ex sub 18.500000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (Clusters) dup sw 9.500000 ex sub 18.500000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 17.000000 m 11.000000 17.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 17.000000 m 10.000000 20.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 20.000000 m 11.000000 20.000000 l s 1.000000 1.000000 1.000000 srgb n 28.000000 17.500000 m 28.000000 19.000000 l 32.000000 19.000000 l 32.000000 17.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 28.000000 17.500000 m 28.000000 19.000000 l 32.000000 19.000000 l 32.000000 17.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (FTP only) dup sw 2 div 30.000000 ex sub 18.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 21.500000 17.500000 m 21.500000 19.000000 l 24.500000 19.000000 l 24.500000 17.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 21.500000 17.500000 m 21.500000 19.000000 l 24.500000 19.000000 l 24.500000 17.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Generic) dup sw 2 div 23.000000 ex sub 18.500000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 13.500000 17.500000 m 13.500000 19.000000 l 17.500000 19.000000 l 17.500000 17.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 13.500000 17.500000 m 13.500000 19.000000 l 17.500000 19.000000 l 17.500000 17.500000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Chat only) dup sw 2 div 15.500000 ex sub 18.500000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 17.500000 14.000000 m 15.500000 17.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 15.537210 16.830212 m 15.500000 17.500000 l 16.058156 17.127896 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 17.500000 14.000000 m 21.500000 17.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 20.850903 17.330670 m 21.500000 17.500000 l 21.246005 16.879124 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 27.000000 14.000000 m 24.500000 17.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 24.604623 16.837388 m 24.500000 17.500000 l 25.092863 17.186131 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 27.000000 14.000000 m 30.000000 17.500000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 29.381748 17.239683 m 30.000000 17.500000 l 29.837302 16.849209 l s 1.000000 1.000000 1.000000 srgb n 0.400000 22.500000 m 0.400000 24.000000 l 4.600000 24.000000 l 4.600000 22.500000 l f n 0.400000 22.900000 m 0.400000 22.900000 0.400000 0.400000 180.000000 270.000000 ellipse f n 4.600000 22.900000 m 4.600000 22.900000 0.400000 0.400000 270.000000 360.000000 ellipse f n 0.000000 22.900000 m 0.000000 23.600000 l 5.000000 23.600000 l 5.000000 22.900000 l f n 0.400000 23.600000 m 0.400000 23.600000 0.400000 0.400000 90.000000 180.000000 ellipse f n 4.600000 23.600000 m 4.600000 23.600000 0.400000 0.400000 0.000000 90.000000 ellipse f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 0.400000 22.500000 m 4.600000 22.500000 l s n 0.400000 24.000000 m 4.600000 24.000000 l s n 0.400000 22.900000 0.400000 0.400000 180.000000 270.000000 ellipse s n 4.600000 22.900000 0.400000 0.400000 270.000000 360.000000 ellipse s n 0.000000 22.900000 m 0.000000 23.600000 l s n 5.000000 22.900000 m 5.000000 23.600000 l s n 0.400000 23.600000 0.400000 0.400000 90.000000 180.000000 ellipse s n 4.600000 23.600000 0.400000 0.400000 0.000000 90.000000 ellipse s /Times-Italic-latin1 ff 0.700000 scf sf (Transmission) dup sw 2 div 2.500000 ex sub 23.500000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (Connections) dup sw 2 div 7.500000 ex sub 23.500000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (Packet) dup sw 2 div 15.500000 ex sub 23.500000 m gs 1 -1 sc sh gr (Protocol) dup sw 2 div 15.500000 ex sub 24.200000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (Connection) dup sw 2 div 26.750000 ex sub 23.500000 m gs 1 -1 sc sh gr (Protocol) dup sw 2 div 26.750000 ex sub 24.200000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 14.250000 29.000000 m 14.250000 30.000000 l 16.750000 30.000000 l 16.750000 29.000000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 14.250000 29.000000 m 14.250000 30.000000 l 16.750000 30.000000 l 16.750000 29.000000 l cp s /Times-Roman-latin1 ff 0.600000 scf sf (Gateway) dup sw 2 div 15.500000 ex sub 29.750000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 14.250000 27.500000 m 14.250000 28.500000 l 16.750000 28.500000 l 16.750000 27.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 14.250000 27.500000 m 14.250000 28.500000 l 16.750000 28.500000 l 16.750000 27.500000 l cp s /Times-Roman-latin1 ff 0.600000 scf sf (Gnutella) dup sw 2 div 15.500000 ex sub 28.250000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 14.750000 26.000000 m 14.750000 27.000000 l 16.250000 27.000000 l 16.250000 26.000000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 14.750000 26.000000 m 14.750000 27.000000 l 16.250000 27.000000 l 16.250000 26.000000 l cp s /Times-Roman-latin1 ff 0.600000 scf sf (ANet) dup sw 2 div 15.500000 ex sub 26.750000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (...) dup sw 2 div 15.500000 ex sub 31.250000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 24.250000 25.500000 m 24.250000 25.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 24.250000 25.000000 m 29.250000 25.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 29.250000 25.000000 m 29.250000 25.500000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 13.000000 25.500000 m 13.000000 25.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 13.000000 25.000000 m 18.000000 25.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 18.000000 25.000000 m 18.000000 25.500000 l s 1.000000 1.000000 1.000000 srgb n 26.000000 26.000000 m 26.000000 27.000000 l 27.500000 27.000000 l 27.500000 26.000000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 26.000000 26.000000 m 26.000000 27.000000 l 27.500000 27.000000 l 27.500000 26.000000 l cp s /Times-Roman-latin1 ff 0.600000 scf sf (TCP) dup sw 2 div 26.750000 ex sub 26.750000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 26.000000 27.500000 m 26.000000 28.500000 l 27.500000 28.500000 l 27.500000 27.500000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 26.000000 27.500000 m 26.000000 28.500000 l 27.500000 28.500000 l 27.500000 27.500000 l cp s /Times-Roman-latin1 ff 0.600000 scf sf (UDP) dup sw 2 div 26.750000 ex sub 28.250000 m gs 1 -1 sc sh gr 1.000000 1.000000 1.000000 srgb n 25.750000 29.000000 m 25.750000 30.000000 l 27.750000 30.000000 l 27.750000 29.000000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 25.750000 29.000000 m 25.750000 30.000000 l 27.750000 30.000000 l 27.750000 29.000000 l cp s /Times-Roman-latin1 ff 0.600000 scf sf (HTTP) dup sw 2 div 26.750000 ex sub 29.750000 m gs 1 -1 sc sh gr /Times-Roman-latin1 ff 0.700000 scf sf (...) dup sw 2 div 26.750000 ex sub 31.250000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 20.250000 26.000000 m 22.250000 28.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 22.250000 26.000000 m 20.250000 28.000000 l s 1.000000 1.000000 1.000000 srgb n 19.500000 33.250000 m 19.500000 34.750000 l 23.000000 34.750000 l 23.000000 33.250000 l f 0.070000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 19.500000 33.250000 m 19.500000 34.750000 l 23.000000 34.750000 l 23.000000 33.250000 l cp s /Times-Roman-latin1 ff 0.700000 scf sf (Network) dup sw 2 div 21.250000 ex sub 34.250000 m gs 1 -1 sc sh gr 0.070000 slw [] 0 sd [] 0 sd 0 slc n 21.250000 28.500000 m 21.250000 33.250000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 21.550000 29.100000 m 21.250000 28.500000 l 20.950000 29.100000 l s 0.070000 slw [] 0 sd 0 slj 0 slc n 20.950000 32.650000 m 21.250000 33.250000 l 21.550000 32.650000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 23.000000 m 11.000000 23.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 23.000000 m 10.000000 32.000000 l s 0.070000 slw [] 0 sd [] 0 sd 0 slc n 10.000000 32.000000 m 11.000000 32.000000 l s 1.000000 1.000000 1.000000 srgb n 33.000000 35.000000 m 33.000000 36.250000 l 34.000000 36.250000 l 34.000000 35.000000 l f 0.000000 slw [] 0 sd [] 0 sd 0 slj n 33.000000 35.000000 m 33.000000 36.250000 l 34.000000 36.250000 l 34.000000 35.000000 l cp s n -0.750000 -2.750000 m -0.750000 -1.500000 l 0.250000 -1.500000 l 0.250000 -2.750000 l f 0.000000 slw [] 0 sd [] 0 sd 0 slj n -0.750000 -2.750000 m -0.750000 -1.500000 l 0.250000 -1.500000 l 0.250000 -2.750000 l cp s showpage --- NEW FILE: url.sty --- % url.sty ver 1.5 28-Mar-1999 Donald Arseneau as...@tr... % Copyright 1996-1999 Donald Arseneau, Vancouver, Canada. % This program can be used, distributed, and modified under the terms % of the LaTeX Project Public License. % % A form of \verb that allows linebreaks at certain characters or % combinations of characters, accepts reconfiguration, and can usually % be used in the argument to another command. It is intended for email % addresses, hypertext links, directories/paths, etc., which normally % have no spaces. The font may be selected using the \urlstyle command, % and new url-like commands can be defined using \urldef. % % Usage: Conditions: % \url{ } If the argument contains any "%", "#", or "^^", or ends with % "\", it can't be used in the argument to another command. % The argument must not contain unbalanced braces. % \url| | ...where "|" is any character not used in the argument and not % "{" or a space. The same restrictions as above except that the % argument may contain unbalanced braces. % \xyz for "\xyz" a defined-url; this can be used anywhere, no matter % what characters it contains. % % See further instructions after "\endinput" % \def\Url@ttdo{% style assignments for tt fonts or T1 encoding \def\UrlBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\%\do\;\do\>\do\]% \do\)\do\,\do\?\do\'\do\+\do\=\do\#}% \def\UrlBigBreaks{\do\:\do@url@hyp}% \def\UrlNoBreaks{\do\(\do\[\do\{\do\<}% (unnecessary) \def\UrlSpecials{\do\ {\ }}% \def\UrlOrds{\do\*\do\-\do\~}% any ordinary characters that aren't usually } \def\Url@do{% style assignments for OT1 fonts except tt \def\UrlBreaks{\do\.\do\@\do\/\do\!\do\%\do\;\do\]\do\)\do\,\do\?\do\+% \do\=\do\#}\def\UrlBigBreaks{\do\:\do@url@hyp}% \def\UrlNoBreaks{\do\(\do\[\do\{}% prevents breaks after *next* character \def\UrlSpecials{\do\<{\langle}\do\>{\mathbin{\rangle}}\do\_{\_% \penalty\@m}\do\|{\mid}\do\{{\lbrace}\do\}{\mathbin{\rbrace}}\do \\{\mathbin{\backslash}}\do\~{\raise.6ex\hbox{\m@th$\scriptstyle\sim$}}\do \ {\ }}% \def\UrlOrds{\do\'\do\"\do\-}% } \def\url@ttstyle{% \@ifundefined{selectfont}{\def\UrlFont{\tt}}{\def\UrlFont{\ttfamily}}\Url@ttdo } \def\url@rmstyle{% \@ifundefined{selectfont}{\def\UrlFont{\rm}}{\def\UrlFont{\rmfamily}}\Url@do } \def\url@sfstyle{% \@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\sffamily}}\Url@do } \def\url@samestyle{\ifdim\fontdimen\thr@@\font=\z@ \url@ttstyle \else \url@rmstyle \fi \def\UrlFont{}} \@ifundefined{strip@prefix}{\def\strip@prefix#1>{}}{} \@ifundefined{verbatim@nolig@list}{\def\verbatim@nolig@list{\do\`}}{} \def\Url{% \begingroup \let\url@moving\relax\relax \endgroup \ifmmode\@nomatherr$\fi \UrlFont $\fam\z@ \textfont\z@\font \let\do\@makeother \dospecials % verbatim catcodes \catcode`{\@ne \catcode`}\tw@ \catcode`\ 10 % except braces and spaces \medmuskip\Urlmuskip \thickmuskip\medmuskip \thinmuskip0mu% \relpenalty\UrlBreakPenalty \binoppenalty\UrlBigBreakPenalty \@tempcnta\fam\multiply\@tempcnta\@cclvi \let\do\set@mathcode \UrlOrds % ordinary characters that were special \advance\@tempcnta 8192 \UrlBreaks % bin \advance\@tempcnta 4096 \UrlBigBreaks % rel \advance\@tempcnta 4096 \UrlNoBreaks % open \let\do\set@mathact \UrlSpecials % active \let\do\set@mathnolig \verbatim@nolig@list % prevent ligatures \@ifnextchar\bgroup\Url@z\Url@y} \def\Url@y#1{\catcode`{11 \catcode`}11 \def\@tempa##1#1{\Url@z{##1}}\@tempa} \def\Url@z#1{\def\@tempa{#1}\expandafter\expandafter\expandafter\Url@Hook \expandafter\strip@prefix\meaning\@tempa\UrlRight\m@th$\endgroup} \def\Url@Hook{\UrlLeft} \let\UrlRight\@empty \let\UrlLeft\@empty \def\set@mathcode#1{\count@`#1\advance\count@\@tempcnta\mathcode`#1\count@} \def\set@mathact#1#2{\mathcode`#132768 \lccode`\~`#1\lowercase{\def~{#2}}} \def\set@mathnolig#1{\ifnum\mathcode`#1<32768 \lccode`\~`#1\lowercase{\edef~{\mathchar\number\mathcode`#1_{\/}}}% \mathcode`#132768 \fi} \def\urldef#1#2{\begingroup \setbox\z@\hbox\bgroup \def\Url@z{\Url@def{#1}{#2}}#2} \expandafter\ifx\csname DeclareRobustCommand\endcsname\relax \def\Url@def#1#2#3{\m@th$\endgroup\egroup\endgroup \def#1{#2{#3}}} \else \def\Url@def#1#2#3{\m@th$\endgroup\egroup\endgroup \DeclareRobustCommand{#1}{#2{#3}}} \fi \def\urlstyle#1{\csname url@#1style\endcsname} % Sample (and default) configuration: % \newcommand\url{\begingroup \Url} % \newmuskip\Urlmuskip \Urlmuskip=0mu \mathchardef\UrlBigBreakPenalty=\binoppenalty \mathchardef\UrlBreakPenalty=\relpenalty % % picTeX defines \path, so declare it optionally: \@ifundefined{path}{\newcommand\path{\begingroup \urlstyle{tt}\Url}}{} % % too many styles define \email like \address, so I will not define it. % \newcommand\email{\begingroup \urls... [truncated message content] |