From feb6702489243f9c3f0bac7827ab2f477ed7b414 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 7 Aug 2008 17:15:16 +0000 Subject: nachrichtenuebertragungszeitenmittelwerte funktionieren. mehr geschrieben. --- LaTeX/argouml.zargo | Bin 29363 -> 29381 bytes LaTeX/bib/references.bib | 7 + LaTeX/chapters/entwicklung.tex | 478 -- LaTeX/chapters/header.tex | 6 + LaTeX/chapters/implementierung.tex | 485 ++ LaTeX/chapters/introduction.tex | 35 +- LaTeX/chapters/simulator.tex | 383 +- LaTeX/chapters/titlepage.tex | 25 +- LaTeX/diplomarbeit.pdf | 7967 +++++++++++++++--------------- LaTeX/diplomarbeit.tex | 2 +- ROADMAP | 1 - sources/prefs/VSDefaultPrefs.java | 1 + sources/simulator/VSSimulatorCanvas.java | 6 + 13 files changed, 4762 insertions(+), 4634 deletions(-) delete mode 100644 LaTeX/chapters/entwicklung.tex create mode 100644 LaTeX/chapters/implementierung.tex diff --git a/LaTeX/argouml.zargo b/LaTeX/argouml.zargo index 217201f..566ce43 100644 Binary files a/LaTeX/argouml.zargo and b/LaTeX/argouml.zargo differ diff --git a/LaTeX/bib/references.bib b/LaTeX/bib/references.bib index ebc06df..197dc53 100644 --- a/LaTeX/bib/references.bib +++ b/LaTeX/bib/references.bib @@ -19,4 +19,11 @@ howpublished={Vorlesung}, note={} } +@misc{Games, + author={David Brackeen}, + title={Developing Games in Java}, + year={2003}, + howpublished={Buch}, + note={ISBN-13: 978-1592730056} +} diff --git a/LaTeX/chapters/entwicklung.tex b/LaTeX/chapters/entwicklung.tex deleted file mode 100644 index 71090ff..0000000 --- a/LaTeX/chapters/entwicklung.tex +++ /dev/null @@ -1,478 +0,0 @@ -\chapter{Die Implementierung} - -In diesem Kapitel wird auf die Implementierung des Simulators eingegangen. Der Simulator wurde in der Programmiersprache Java entwickelt. Bei der Betrachtung der Zielgruppe wird klar, dass Java f\"{u}r die gestellte Aufgabe die geigneste Programmiersprache ist. Der Simulator ist somit auf jeder Platform verf\"{u}gbar, f\"{u}r die es die JRE (Java Runtime Environment) gibt und erstreckt sich somit \"{u}ber alle g\"{a}ngigen Betriebssysteme. Da an der Fachhochschule Aachen auch Java gelehrt wird, sollten hier die meisten Studenten auch eigene Erweiterungen, wie eigene Protokolle, entwerfen k\"{o}nnen. Der Simulator wurde mit dem derzeit aktuellsten Java SDK (Software Development Kit) in der Version 6 (1.6) entwickelt. - -\begin{table} - \fbox{ - \begin{tabular}{l|l} - \textbf{Paketname} & \textbf{Beschreibung} \\ - \hline - \textit{core} & Klassen f\"{u}r Prozesse und Nachrichten\\ - \textit{core.time} & Klassen f\"{u}r Zeitformate\\ - \textit{events} & Basisklassen f\"{u}r Ereignisse\\ - \textit{events.implementations} & Implementierungen von Ereignissen\\ - \textit{events.internal} & Implementierungen von internen Ereignissen\\ - \textit{exceptions} & Klassen f\"{u}r Fehlerbehandlungen\\ - \textit{prefs} & Klassen f\"{u}r die Einstellungen\\ - \textit{prefs.editors} & Klassen f\"{u}r die Editoren\\ - \textit{protocols} & Basisklassen f\"{u}r Protokolle\\ - \textit{protocols.implementations} & Implementierungen von Protokollen\\ - \textit{serialize} & Helferklassen f\"{u}r die Serialisierung von Simulationen\\ - \textit{simulator} & Klassen f\"{u}r die GUI und die Visualisierung\\ - \textit{utils} & Diverse Helferklassen\\ - \end{tabular} - } - \caption{Die Paketstruktur} - \label{tb:Pakete} -\end{table} - -Da es sonst den Rahmen sprengen w\"{u}rde, soll im Folgenden der komplette Quelltext nicht bis in das letzte Detail behandelt werden. Der Quelltext erstreckt sich n\"{a}mlich, einschlielich Kommentare, auf \"{u}ber 15.000 Zeilen und \"{u}ber 60 Dateien. Zudem ist die generierte Quelltext-Dokumentation (Javadoc) \"{u}ber 2MB gro. Alle folgenden UML-Diagramme stellen aufgrund der \"{U}bersichtlichkeit lediglich die wesentlichen Dinge dar. Alle Details lassen sich im Quelltext und der dazugeh\"{o}rigen Dokumentation einsehen. Die Paketstruktur des Quelltextes ist in Tabelle \ref{tb:Pakete} in alphanumerischer Reihenfolge aufgef\"{u}hrt. - -\section{Programmierrichtlinien} - -Die Programmierrichtlinien entsprechen in den meisten F\"{a}llen denen aus der Vorlesung \cite{OOS}. Die Main-Methode befindet sich in der Klasse \textit{simulator.VSMain}. - -\begin{itemize} - \item Alle Klassen- und Interfacenamen beginnen mit groen Buchstaben, w\"{a}hrend alle Variablen-, Methoden- und Attributnamen mit kleinen Buchstaben beginnen. Namen statischer Variablen und Attribute sind komplett in Grobuchstaben gehalten. - \item Alle Quelltext-Dateien besitzen einen Header, der Informationen der verwendeten Lizenz angibt. - \item Alle Quelltext-Dateien sind vollst\"{a}ndig mit Javadoc dokumentiert worden. - \item Der komplette Quelltext inklusive Dokumentation wurde in englischer Sprache verfasst. - \item Eine Quelltext-Datei hat eine maximale Zeilenl\"{a}nge von 80 Zeichen. Eine Ausnahme stellt die Klasse \textit{prefs.VSDefaultPrefs} dar, denn hier befinden sich auch l\"{a}ngere Texte die in Strings abgespeichert werden, wo manuelle Zeilenumbr\"{u}che wenig Sinn ergeben. - \item Es werden zuerst Klassen aus der Java-Standardbibliothek importiert, bevor Klassen aus dem VS-Simulator selbst importiert werden. - \item F\"{u}r die Einr\"{u}ckung des Quelltextes wird das Tool \textit{astyle} mit den Aufrufparametern \textit{--style=java --mode=java} verwendet. Hierbei wird eine Einr\"{u}ckungsl\"{a}nge von 4 Zeichen verwendet. - \item Namen abstrakter Klassen tragen stets das Prefix \textit{VSAbstract}. - \item Namen aller Klassen und Interfaces tragen als Prefix stets \textit{VS}, was f\"{u}r Verteilte Systeme steht. -\end{itemize} - - - -\section{Einstellungen und Editoren} - -Eine Simulation ist von einer Vielzahl von Einstellungen abh\"{a}ngig. Da auf diese Einstellungen in den weiteren Teilkapitel sets zur\"{u}ckgegriffen wird, macht es Sinn die dazugeh\"{o}rigen Klassen zuerst zu betrachten. - -\subsubsection{Das Paket \textit{prefs}} - -\begin{figure}[htbp] - \centering - \includegraphics[width=7cm]{images/prefs} - \caption{Das Paket \textit{prefs}} - \label{fig:PackagePrefs} -\end{figure} - -Auf Abbilung \ref{fig:PackagePrefs} ist der Aufbau des Pakets \textit{prefs} zu sehen. In einer Instanz der Klasse \textit{VSPrefs} lassen sich viele verschiedene Daten als Variablen f\"{u}r eine sp\"{a}tere Verwendung dynamisch ablegen und stellt somit einen Container f\"{u}r diese Daten dar. In einem \textit{VSPrefs}-Objekt speichert der Simulator alle seine Einstellungen ab. Zudem besitzt jedes Prozessobjekt und jedes Protokollobjekt f\"{u}r lokale Einstellungen seine eigene Instanz von \textit{VSPrefs}. Selbst Nachrichtenobjekte besitzt hiervon eine eigene Instanz, wobei hier die zu verschickenden Daten abgelegt werden k\"{o}nnen. - -Jede Variable besteht aus einen Datentypen, einen Variablenamen und einer optionalen Beschreibung. Einige Datentypen unterst\"{u}tzen auch die Angabe von Minimum- und Maximumwerten (zum Beispiel besteht eine Prozentangabe aus einen Integerwert zwischen \textit{0} und \textit{100}), was mithilfe der \textit{VSPrefsRestriction}-Klasse implementiert wird. Da man beispielsweise bei Prozent ein \textit{\%} und bei Millisekunden ein \textit{ms} hinter der Variable sehen m\"{o}chte, kann f\"{u}r jede Variable auch ein optionaler Einheiten-String abgespeichert werden. Alle verf\"{u}gbaren Typen wurden bereits in Tabelle \ref{tb:VariablenDatentypen} aufgelistet. \textit{VSPrefs} stellt f\"{u}r alle Variablen entsprechende Zugriffsmethoden zur Verf\"{u}gung. - -Im Folgenden werden nicht alle exisierenden Methoden aufgelistet, da diese auch in der Quelltext-Dokumentation (Javadoc) eingesehen werden k\"{o}nnen. Die Methoden werden nun nur anhand des Integer-Datentyps verdeutlicht. F\"{u}r alle anderen Typen gilt fast alles analog. F\"{u}r Integer stehen in \textit{VSPrefs} folgende Methoden zur Verf\"{u}gung: - -\begin{itemize} - \setlength{\itemsep}{-2mm} - \item \textit{void setInteger(String key, Integer val)} - \item \textit{void setInteger(String key, Integer val, String descr)} - \item \textit{void setInteger(String key, int val)} - \item \textit{void setInteger(String key, int val, String descr)} - \item \textit{Integer getIntegerObj(String key)} - \item \textit{int getInteger(String key)} - \item \textit{java.util.Set getIntegerKeySet()} - \item \textit{void initInteger(String key, int val) } - \item \textit{void initInteger(String key, int val, String descr) } - \item \textit{void initInteger(String key, int val, String descr, int minValue, int maxValue) } - \item \textit{void initInteger(String key, int val, String descr, int minValue, int maxValue, String unit) } - \item \textit{void initInteger(String key, int val, String descr, VSPrefsRestriction.VSIntegerPrefsRestriction r) } - \item \textit{void initInteger(String key, int val, String descr, VSPrefsRestriction.VSIntegerPrefsRestriction r, String unit) } -\end{itemize} - -Hierbei stellt \textit{key} den Variablennamen- und \textit{val} den Variablenwert dar. \textit{descr} ist eine optionale Variablenbeschreibung. Wenn f\"{u}r eine Variable keine Beschreibung existiert so wird, wie auf Abbildung \ref{fig:SimulationseinstellungenExperten} anhand der Farbvariablen schon gesehen wurde, f\"{u}r die Anzeige f\"{u}r eine Variable der Datentyp und der Variablenname verwendet. Es k\"{o}nnen sowohl Java's Integer-Objekte, als auch Java's primitiver Integer-Typ \textit{int} verwendet werden. Ein \textit{int}-Wert wird intern allerdings als Integer-Objekt abgespeichert und macht somit keinen groen Unterschied. Die Methode \textit{getIntegerKeySet} gibt alle vorhandenen Integer-Variablennamen (\textit{key}s) als \textit{Set} zur\"{u}ck. - -\textit{VSPrefs} bietet auch eine Reihe von \textit{initInteger}-Methoden an, welche sich von den \textit{setInteger}-Methoden dadurch unterscheiden, dass sie eine Variable nur einen Wert zuweisen, wenn sie vorher noch nicht initialisiert wurde, was durch \textit{setInteger} oder \textit{initInteger} selbst geschehen sein kann. Eine komplette \"{U}bersicht aller Methoden (auch f\"{u}r andere Datentypen) gibt es in der Quelltext-Dokumentation. - -\textit{VSPrefs} speichert alle Integervariablen in einem \textit{HashMap}-Objekt ab, wobei der String-Wert den Variablenamen \textit{key} angibt. F\"{u}r die Beschreibung \textit{descr}, den Einheiten-String \textit{unit} sowie m\"{o}glichen Minimum- und Maximumwerte werden separate Instanzen von \textit{HashMap} verwendet. Da alle \textit{HashMap}-Objekte synchronisiert sind, k\"{o}nnen alle Methoden von verschiednenen Threads gleichzeitig verwendet werden. - -Die Klasse \textit{VSDefaultPrefs} erweitert \textit{VSPrefs} und initialisiert bei Instanzierung automatisch alle verf\"{u}gbaren Simulationsvariablen mit ihren Standardwerten. Dort sind auch alle Spracheinstellungen abgelegt. Sollte jemand den Simulator in eine andere Sprache, zum Beispiel ins Englische, \"{u}bersetzen wollen, so mu er lediglich diese Datei und die Protokoll-Klassen (mehr dazu sp\"{a}ter) editieren. Die Spracheinstellungen sind n\"{a}mlich in einem \textit{VSPrefs}--Objekt als versteckte String-Variablen abgespeichert. Spracheinstellungen f\"{u}r Protokolle wurden in den Protokollklassen direkt angegeben, da dies mehr Komfort f\"{u}r den Protokollentwickler bietet und f\"{u}r jede neue Textausgabe nicht st\"{a}ndig \textit{VSDefaultPrefs.java} editiert werden muss. - -\begin{table} - \fbox{ - \begin{tabular}{c|l|l} - \textbf{Variablen-Prefix} & \textbf{Beschreibung} & \textbf{Beispiel}\\ - \hline - \textit{col} & Farbvariablen & \textit{Color: col.background = Color-Objekt}\\ - \textit{div} & Diverse versteckte Variablen & \textit{Integer: div.window.loggsize = 300} \\ - \textit{keyevent} & Variablen, die Tastaturk\"{u}rzel definieren & \textit{Integer: keyevent.close = KeyEvent.VK\_C} \\ - \textit{lang} & Variablen, die Text beinhalten & \textit{String: lang.activate = aktivieren}\\ - \textit{message} & Variablen, die Nachrichten betreffen & \textit{Integer: message.prob.outage = 0}\\ - \textit{process} & Variablen, die Prozesse betreffen & \textit{Integer: process.prob.crash = 0}\\ - \textit{sim} & Allgemeine Simulationsvariablen & \textit{Integer: sim.process.num = 3}\\ - \end{tabular} - } - \caption{Konventionen f\"{u}r Variablennamen-Prefixe in \textit{VSDefautPrefs}} - \label{tb:VariablenPrefixe} -\end{table} - -Alle Variablen die als Prefix \textit{lang}, \textit{keyevent}, \textit{div} oder \textit{col} tragen, sind versteckte Variablen und werden in einem Editor nicht angezeigt. Im Expertenmodus sind hingegen nur Variablen die mit \textit{lang} und \textit{keyevent} beginnen versteckt. Somit lassen sich im Expertenmodus weitere Variablen vom Anwender editieren. - -\subsubsection{Das Paket \textit{prefs.editors}} -\begin{figure}[htbp] - \centering - \includegraphics[width=11cm]{images/prefs-editors} - \caption{Das Paket \textit{prefs.editors}} - \label{fig:PackagePrefsEditors} -\end{figure} - -Wie Variablen intern abgespeichert werden ist bereits bekannt. F\"{u}r das Editieren der Variablen werden Editor-Objekte verwendet. Auf Abbildung \ref{fig:PackagePrefsEditors} ist die Klassenstruktur des dazugeh\"{o}rigen Paketes \textit{prefs.editors} angegeben. - -Die Basis eines Editors stellt die abstrakte Klasse \textit{VSAbstractEditor} dar, dem ein \textit{VSPrefs} Objekt zum Editieren \"{u}bergeben wird. Ein Editor stellt alle verf\"{u}gbaren und nicht-versteckten Variablen des \textit{VSPrefs}-Objektes im GUI dar und bietet gleichzeitig die M\"{o}glichkeit alle Variablen dar\"{u}ber zu editieren an. F\"{u}r das Editieren von Farbwerten wird auf \textit{VSColorChooser} zur\"{u}ckgegriffen. Die Klasse \textit{VSEditorTable} ist f\"{u}r das \textit{JTable}-Objekt aus Java's Swing-Bibliothek zust\"{a}ndig, welches bei der graphischen Darstellung aller Variablen eingesetzt wird. Die abstrakte Klasse \textit{VSAbstractBetterEditor} wurde, wegen der \"{U}bersicht, als Zwischenschritt eingef\"{u}gt. - -Die Klasse \textit{VSSimulatorEditor} dient f\"{u}r das Editieren der globalen Simulationseinstellungen und \textit{VSProcessEditor} f\"{u}r das Editieren der Prozesseinstellungen sowie der dazugeh\"{o}rigen Protokollvariablen. Da diese beiden Klassen von \textit{VSAbstractBetterEditor} erben, k\"{o}nnen sie mithilfe von \textit{VSEditorFrame} in einem separaten Fenster angezeigt werden. Alternativ k\"{o}nnen die Editoren auch in der Sidebar im Tab ``Variablen'' angezeigt werden. Auf Abbildung \ref{fig:Simulationseinstellungen} wurde bereits ein \textit{VSEditorFrame} in Aktion gesehen. - -F\"{u}r Protokolle gibt es keine separate Editor-Klasse, da sie bereits vom Prozesseditor aus editiert werden k\"{o}nnen. Dabei iteriert der Prozesseditor \"{u}ber alle f\"{u}r den jeweiligen Prozess verf\"{u}gbaren Protokollobjekte und f\"{u}gt deren Variablen zus\"{a}tzlich in den Prozesseditor ein. Somit erscheinen die Prozess- und die dazugeh\"{o}rigen Protokollvariablen im selben Editor, womit dem Benutzer eine bessere \"{U}bersicht geboten wird. - -\section{Ereignisse} - -\subsection{Die Funktionsweise von Ereignissen} - -F\"{u}r jedes Ereignis existiert eine dazugeh\"{o}rige Klasse, welche die auszuf\"{u}hrenden Aktionen implementiert. Eine Instanz davon wird, f\"{u}r eine sp\"{a}tere Ausf\"{u}hrung, in einem \textit{VSTask}-Objekt verpackt dem Task-Manager \"{u}bergeben. Auf den Task-Manager wird sp\"{a}ter noch genauer eingegangen. -\begin{figure}[htbp] - \centering - \includegraphics[width=13.5cm]{images/events} - \caption{Die Pakete \textit{events} und \textit{events.*}} - \label{fig:PackageEvents} -\end{figure} - -Jedes programmierbare Ereignis mu, bevor es vom Simulator verwendet werden kann, in der statischen Klasse \textit{VSRegisteredEvents} registriert werden. Da sich die Anzahl der verf\"{u}gbaren Ereignisse bei Laufzeit des Simulators nicht \"{a}ndert, gibt es keine Instanzen von \textit{VSRegisteredEvents}. Alle Methoden und Klassenattribute sind hier statisch. Wenn beispielsweise eigene Ereignisse implementiert werden, dann m\"{u}ssen alle neuen Ereignisse per Hand in die Datei \textit{VSRegisteredEvents.java} \"{u}bernommen- und der Simulator erneut kompiliert werden. - -In der Implementierung wird zwischen drei Haupttypen von Ereignissen unterschieden, die jeweils in verschiedenen Paketen liegen: - -\begin{enumerate} - \item \textit{events.implementations}: In diesem Paket befinden sich alle Ereignisse, die ohne weitere Spezialbehanldung im Simulator eingesetzt werden k\"{o}nnen und vom Benutzer direkt im Ereigniseditor programmierbar sind. - \begin{itemize} - \item \textit{VSProcessCrashEvent}: Dieses Ereignis l\"{a}sst den dazugeh\"{o}rigen Prozess abst\"{u}rzen. - \item \textit{VSProcessRecoverEvent}: Dieses Ereignis l\"{a}sst den dazugeh\"{o}rigen Prozess wiederbeleben. - \end{itemize} - - \item \textit{events.internal}: In diesem Paket befinden sich alle Ereignisse, die vom Simulator intern verwendet werden und dadurch eine direkte Programmierung via Ereigniseditor ausschlieen. - \begin{itemize} - \item \textit{VSAbstractInternalEvent}: Diese Klasse stellt weitere Methoden zur Verf\"{u}gung, die von allen internen Ereignissen ben\"{o}tigt werden. Derzeit betrifft dies nur Methoden zur Serialisierung der gegebenen Objekte. Auf die Serialisierung (Abspeichern/Laden) von Simulationen wird sp\"{a}ter noch genauer eingegangen. - \item \textit{VSMessageReceiveEvent}: Diese Klasse wird f\"{u}r die Ankunft einer Nachricht bei einem Empf\"{a}ngerprozess ben\"{o}tigt. Sie kapselt die eigentliche Nachricht und \"{u}berpr\"{u}ft, ob der Empf\"{a}ngerprozess das zur Nachricht dazugeh\"{o}rige Protokoll versteht. Diese Klasse \"{u}berpr\"{u}ft auch die Simulationseinstellung ``Nur relevante Nachrichten anzeigen'' und entscheidet, ob die Nachricht nach Eintreffen in der Visualisierung und im Loggfenster ber\"{u}cksichtigt werden soll oder nicht. - \item \textit{VSProtocolEvent}: Diese Klasse implementiert gleichzeitig vier verschiedene Ereignisse: Das Aktivieren/Deaktivieren eines Servers/Clients eines gegebenen Protokolls. Der Ereigniseditor berechnet anhand der verf\"{u}gbaren Protokolle automatisch alle m\"{o}glichen Kombinationen und bietet sie dem Anwender in seiner Auswahl an. F\"{u}r alle dieser vier Ereignisse wird jeweils ein Objekt von \textit{VSProtocolEvent} verwendet, jedoch mit jeweils anderen Attributwerten. - \item \textit{VSProtocolScheduleEvent}: Diese Klasse wird f\"{u}r die Wecker-Ereignisse ben\"{o}tigt. Wecker-Ereignisse k\"{o}nnen nur von Protokollen (mehr dazu sp\"{a}ter) erstellt werden. \textit{VSProtocolScheduleEvent} besitzt eine Referenz auf das gegebene Protokoll und ruft bei Ereigniseintrittszeit entweder die Methode \textit{onServerScheduleStart} bei einem Server- oder \textit{onClientScheduleStart} bei einem Clientprotokoll auf. - \end{itemize} - \item \textit{protocols.implementations}: In diesem Paket befinden sich alle Protokollimplementierung. Jedes Protokoll besitzt hier seine eigene Klasse. Alle Protokolle erben hierbei von der auf Abbildung \ref{fig:PackageEvents} zu sehenden Klasse \textit{protocols.VSAbstractProtocol}. Da \textit{protocols.VSAbstractProtocol} von \textit{events.VSAbstractEvent} erbt, kann ein Protokollobjekt auch als Ereignis eingesetzt werden. Ein solches Ereignis ruft bei Eintritt entweder die Methode \textit{onServerStart} oder die Methode \textit{onClientStart} des Protokolls auf, was einer Server- beziehungsweise einer Clientanfrage entspricht. Die Implementierung von Protokollen wird sp\"{a}ter genauer behandelt. -\end{enumerate} - -Alle Ereignisse, die das Interface \textit{VSCopyableEvent} implementieren, k\"{o}nnen vom Anwender im Ereigniseditor mit einem Rechtsklick kopiert werden und m\"{u}ssen die Methode \textit{initCopy(VSAbstractEvent copy)} implementieren. Dort werden alle relevanten Attribute in das neue Ereignis \textit{copy} kopiert. - -Alle Ereignisklassen erweitern die abstrakte Klasse \textit{VSAbstractEvent} und m\"{u}ssen folgende abstrakten Methoden implementieren: - -\begin{itemize} - \item \textit{abstract public void onInit()}: Bevor ein Ereignisobjekt vom Simulator verwendet werden kann, mu es initialisiert werden. Je nach Ereignis k\"{o}nnen hier verschiedene Werte initialisiert werden. Diese Methode wird pro Ereignisobjekt nach Erstellung nur ein einziges Mal ausgef\"{u}hrt. - \item \textit{abstract public void onStart()}: Diese Methode wird jedes Mal ausgef\"{u}hrt, wenn das Ereignis eintritt. Sie stellt somit das Kernst\"{u}ck eines Ereignisses dar. -\end{itemize} - -Des Weiteren werden folgende nicht-abstrakte Methoden von \textit{VSAbstractEvent} vererbt: - -\begin{itemize} - \item \textit{public void logg(String message)}: Diese Methode schreibt eine Loggnachricht in das Simulationsloggfenster. - \item \textit{public VSAbstractEvent getCopy()}: Diese Methode erstellt vom aktuellen Ereignis eine Kopie, wovon eine Referenz zur\"{u}ckgegeben wird. Alle Ereignisse die kopiert werden k\"{o}nnen m\"{u}ssen ebenso das Interface \textit{VSCopyableEvent} implementieren. Wenn ein Ereignis dies nicht tut und \textit{getCopy()} aufgerufen wird, dann wird von Java die Ausnahme \textit{exceptions.VSEventNotCopyable} geworfen. - \item \textit{public VSAbstractEvent getCopy(VSInternalProcess process)}: Diese Methode erstellt vom aktuellen Ereignis ebenfalls eine Kopie, jedoch mit dem Unterschied, dass das Ereignis einem anderen Prozess zugewiesen wird. -\end{itemize} - -Jede Ereiginsklasse hat zudem Zugriff auf folgende Attribute, die von \textit{VSAbstractEvent} vererbt werden: - -\begin{itemize} - \item \textit{protected VSPrefs prefs}: Eine Referenz auf das Simulationseinstellungsobjekt. Hier\"{u}ber lassen sich alle Simulationseinstellungen beziehen. - \item \textit{protected VSAbstractProcess process}: Eine Referenz auf das Prozessobjekt des jeweiligen Prozesses, auf welches das Ereignis angewendet wird. -\end{itemize} - -\subsection{Beispielimplementierung eines Ereignisses} - -Im Folgenden wird als Beispiel die Implementierung des Prozessabsturzereignisses \textit{VSProcessCrashEvent} behandelt. Da die dazugeh\"{o}rige Klasse keine Attribute besitzt, verleibt hier auch die \textit{initCopy}-Methode mit leerem Rumpf. Jede Ereignisklasse muss in \textit{onInit()} mit \textit{setClassname} den eigenen Klassennamen mitteilen. In \textit{onStart()} wird das eigentliche Ereignis ausgef\"{u}hrt. Hier wird obligatorisch \"{u}berpr\"{u}ft, ob der Prozess bereits abgest\"{u}rzt (hier eigentlich nicht Notwendig, verbessert aber die Lesbarkeit der Logik) ist und gegebenenfalls wird der Prozess dann zum Absturz bewegt. Der Task-Manager \"{u}berpr\"{u}ft bereits, ob der Prozess abgest\"{u}rzt ist oder nicht, d.h. ein Ereignis wird bei einem abgest\"{u}rztem Prozess gar nicht erst ausgef\"{u}hrt. Die einzige Ausnahme bildet ein Wiederbelebungsereignis (\text{VSProcessRecover}), welches vom Task-Manager ausgef\"{u}hrt wird, auch wenn der Prozess abgest\"{u}rzt ist. Mit \textit{logg} wird eine Nachricht in das Loggfenster geschrieben, welche ueber das \textit{VSPrefs}-Objekt \textit{prefs} bezogen wird: -\begin{code} -package events.implementations; - -import events.*; - -public class VSProcessCrashEvent -extends VSAbstractEvent implements VSCopyableEvent { - private static final long serialVersionUID = 1L; - - public void initCopy(VSAbstractEvent copy) { - } - - public void onInit() { - setClassname(getClass().toString()); - } - - public void onStart() { - if (!process.isCrashed()) { - process.isCrashed(true); - logg(prefs.getString("lang.crashed")); - } - } -} -\end{code} - -\section{Zeitformate, Prozesse, Nachrichten sowie Task-Manager} - -\subsection{Funktionsweise} - -Das Paket \textit{core.time} auf Abbildung \ref{fig:PackageCoreTime} stellt lediglich die Klassen f\"{u}r die Vektor- und Lamportzeitstempel zur Verf\"{u}gung. F\"{u}r die normale lokale Prozesszeit wird aus Performancegr\"{u}nden keine eigene Klasse, sondern ein einfaches \textit{long}-Attribut des Prozessobjektes verwendet. - -\begin{figure}[htbp] - \centering - \includegraphics[width=7cm]{images/core-time} - \caption{Das Paket \textit{core.time}} - \label{fig:PackageCoreTime} -\end{figure} - -Auf Abbildung \ref{fig:PackageCore} ist stark vereinfacht (in Wirklichkeit existieren in den angegebenen Klassen viel mehr Attribute und Methoden) das Paket \textit{core} dargestellt. F\"{u}r jedes auszuf\"{u}hrendes Ereignis wird eine Instanz von \textit{VSTask} ben\"{o}tigt, welche die Ereigniseintrittszeit als Attribut abgespeichert hat sowie eine Referenz auf das Objekt des auszuf\"{u}hrenden Ereignisses (\textit{VSAbstractEvent}) und dem Prozessobjekt besitzt. Geplante \textit{VSTask}-Instanzen werden f\"{u}r eine sp\"{a}tere Ausf\"{u}hrung dem Task-Manager \"{u}bergeben. - -Die Kapselung eines \textit{VSAbstractEvent}-Objektes in einem \textit{VSTask}-Objekt erlaubt es, dass die selbe \textit{VSAbstractEvent}-Instanz mehrmals auf einmal im Task-Manager geplant werden kann. Ohne dieser Kapselung g\"{a}be es f\"{u}r jedes Ereignis lediglich nur eine einzige m\"{o}gliche Eintrittszeit. Von dieser M\"{o}glichkeit wird zum Beispiel bei den Server- und Clientanfragen eines Protokollobjektes Gebrauch gemacht. F\"{u}r jedes Protokoll kann der Anwender in einer Simulation beliebig viele Anfragen programmieren, wobei f\"{u}r jede Anfrage stets das selbe Protokollobjekt als Ereignis verwendet wird. - -Jede Simulation besitzt genau eine Instanz von \textit{VSTaskManager}. Eine Instanz dieser Klasse stellt den Task-Manager dar. Er verwaltet alle \textit{VSTask}-Instanzen und \"{u}berpr\"{u}ft periodisch, ob es auszuf\"{u}hrende Ereignisse gibt. Der Task-Manager unterscheidet zwischen globalen und lokalen Ereignissen. Hierbei werden alle globalen Ereignisse (gekapselt in einem \textit{VSTask}-Objekt) in einer Priorit\"{a}ts-Warteschlange abgelegt. Die Priorit\"{a}ts-Warteschlange stellt hierbei die korrekte Ereigniseintrittsreihenfolge sicher. Da sich die lokalen Zeiten aller beteiligten Prozesse voneinander unterscheiden k\"{o}nnen, muss f\"{u}r jeden Prozess eine separate lokale Priorit\"{a}ts-Warteschlange verwendet werden, auf die jedes Prozessobjekt seine eigene Referenz hat. In den lokalen Warteschlangen sind die geplanten lokalen Ereignisse (auch gekapselt in einem \textit{VSTask}-Objekt) abgelegt. Der Task-Manager greift \"{u}ber eine \textit{java.util.ArrayList} auf alle Prozessobjekte zu und kann somit auch auf alle lokalen Warteschlangen zugreifen und diese verwalten. - -\begin{figure}[htbp] - \centering - \includegraphics[width=10.0cm]{images/core} - \caption{Das Paket \textit{core}} - \label{fig:PackageCore} -\end{figure} - -Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. F\"{u}r jedes Versenden einer Nachricht wird hiervon eine Instanz gebildet, wo der Senderprozess die zu verschickende Daten ablegt. Da \textit{VSMessage} von \textit{VSPrefs} erbt, k\"{o}nnen zwischen zwei Prozessen beliebige Datentypen (Tabelle \ref{tb:VariablenDatentypen}) \"{u}ber eine Nachricht verschickt werden. Anschlieend wird f\"{u}r jeden Empf\"{a}ngerprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welche eine Referenz der verschickten Nachricht besitzt. Danach wird ein \textit{VSTask}-Objekt instanziert, wo die Referenz auf das Ereignisobjekt und das dazugeh\"{o}rige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager "{u}bergeben, der das dazugeh\"{o}rige Ereignis ausf\"{u}hrt, wenn die Ereigniseintrittszeit eingetroffen ist. - -Via Java-Polymorphie wird das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt. Die dazugeh\"{o}rige Ereigniseintrittszeit $t_e$ wird jeweils wie folgt bestimmt: - -\begin{equation*} - t_e := TODO -\end{equation*} - -Erw\"{a}hnentswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden von \textit{VSMessage} im Protokoll-API, welches f\"{u}r die Erstellung eigener Protokolle dient. Der Protokoll-Entwickler soll m\"{o}glichst nichts falsch machen k\"{o}nnen und deswegen soll den Protokoll-API ein eingeschr\"{a}nkter Funktionsumpfang zur Verf\"{u}rung gestellt werden. Da sich \textit{VSMessageStub} im selben Paket wie \textit{VSMessage} befindet, kann \textit{VSMessageStub} auf paket-private Methoden (diejenigen Methoden, die weder als \textit{private}, \textit{protected} noch \textit{public} gekennzeichnet sind) von \textit{VSMessage} zugreifen. Protokolle hingegen werden in einem anderen Paket implementiert und haben somit keinen Zugriff auf diese paket-privaten Methoden. Zwar kann der Protokollentwickler ein eigenes \textit{VSMessageStub}-Objekt anlegen, jedoch kann er auf diese Weise besser unterscheiden, auf welche Mehhoden er zugreifen sollte und auf welche nicht. Das Protokoll-API wird sp\"{a}ter genauer behandelt. - -Der Task-Manager speichert anschlieend die Empfangsereignisse in den lokalen Warteschlangen der Empf\"{a}ngerprozesse. Die Nachricht kommt bei einem Empf\"{a}ngerprozess an, sobald das Ereignis f\"{u}r den Empfang eintritt. F\"{u}r die korrekte Implementierung der Lamport- und Vektor-Zeitstempel wird jeder Nachricht automatisch eine Referenz auf die Lamport- sowie auf die Vektorzeit des sendenden Prozesses als Attribut beigef\"{u}gt. F\"{u}r die \"{U}berpr\"{u}fung des Protokolls wird in jeder Nachricht auch der Klassenname des jeweiligen Protokolls abgespeichert. - -Eine Instanz von \textit{VSInternalProcess} repr\"{a}sentiert einen simulierten Prozess. Ein \textit{VSInternalProcess} stellt alle vom Simulator intern verwendeten Methoden zur Verf\"{u}gung, w\"{a}hrend ein \textit{VSAbstractProcess} lediglich Methoden hat, die man im Protokoll-API f\"{u}r die Erstellung eigener Protokolle verwenden darf. Da \textit{VSAbstractProcess} abstrakt ist und hiervon keine Instanz gebildet werden darf, muss f\"{u}r einen neuen Prozesses stets ein \textit{VSInternalProcess}-Objekt erstellt werden. Via Polymorphie wird dieses Objekt nach \textit{VSAbstractProcess} umgewandelt und so dem Protokoll-API zur Verf\"{u}gung gestellt. Beispielsweise darf mit \textit{getTasks()} nur vom Simulator intern auf die Priorit\"{a}ts-Warteschlangen zugegriffen werden, w\"{a}hrend man im Protokoll-API selbiges vermeiden sollte und auch gar nicht direkt m\"{o}glich ist. Hierf\"{u}r h\"{a}tte man auch ein Stub-Objekt \textit{VSProcessStub} verwenden k\"{o}nnen. Da aber so gut wie alle paar Millisekunden auf die Methoden von \textit{VSInternalProcess} zugegriffen wird, wurde hier aus Performancegr\"{u}nden der Weg \"{u}ber eine Vererbungungsstufe preferiert. - -Alle einstellbaren Prozessvariablen werden von der Klasse \textit{VSPrefs} vererbt. Damit bei Neuberechnungen die Variablen nicht dauernd \"{u}ber eine \textit{HashMap} von \textit{VSPrefs} zugregriffen werden mu, speichert \textit{VSInternalProcess} aus Performancegr\"{u}nden einige Variablen als lokale Kopie ab. Zum Beispiel wird f\"{u}r die lokale Prozesszeit nicht auf das \textit{HashMap}-Objekt von \textit{VSPrefs}, sondern auf das Klassenattribut \textit{private long localTime} zugegriffen. Vor- und nach dem Editieren \"{u}ber den Prozesseditor werden die \textit{VSPrefs} beziehungsweise die lokalen Kopien auf den neusten Stand gebracht. Selbiges gilt f\"{u}r weitere Variablen wie zum Beispiel der Uhrabweichung eines Prozesses. - -\subsection{Beispiel f\"{u}r die Erstellung von Prozessereignissen} - -Anhand der Prozessabsturz- und Wiederbelebungsereignisse l\"{a}t sich wie folgt sehr gut demonstieren, wie intern Ereignisse angelegt werden k\"{o}nnen: -\begin{code} -void createCrashAndRecoverExample(VSTaskManager taskManager, - VSInternalProcess process) { - VSAbstractEvent crashEvent = new VSProcessCrashEvent(); - VSTask localTask = new VSTask(process.getTime()+500, process, - crashEvent, VSTask.LOCAL); - taksManager.addTask(localTask); - - VSAbstractEvent recoverEvent = new VSProcessRecoverEvent(); - VSTask globalTask = new VSTask(2000, process, - recoverEvent, VSTask.GLOBAL); - taksManager.addTask(globalTask); -} -\end{code} - -In diesem Beispiel wurden zwei Ereignisse (Absturz- und Wiederbelebung eines gegebenen Prozesses) angelegt. Das Absturzereignis tritt bei der aktuellen lokalen Prozesszeit plus \textit{500ms} ein, w\"{a}hrend das Wiederbelebungsereignis bei einer globalen Zeit von \textit{2000ms} stattfindet. F\"{u}r den Fall, dass das Wiederbelebungsereignis vor dem Absturzereignis eintritt, wird es nicht ausgef\"{u}hrt, da der Prozess noch nicht abgest\"{u}rzt ist. - -\section{Protokolle} - -\subsection{Die Funktionsweise des Protokoll-APIs} - -\begin{figure}[htbp] - \centering - \includegraphics[width=12cm]{images/protocols} - \caption{Die Pakete \textit{protocols} und \textit{protocols.*}} - \label{fig:PackageProtocols} -\end{figure} - -In diesem Abschnitt wird auf die Implementierung der Protokolle eingegangen. Auf Abbildung \ref{fig:PackageProtocols} sind die Pakete \textit{protocols} und \textit{protocols.implementations} dargestellt, welche f\"{u}r die Protokollimplementierungen zust\"{a}ndig sind. \textit{VSAbstractProtocol} stellt lediglich gemeinsame Methoden und Attribute zur Verf\"{u}gung, die von allen Protokollen verwendet werden k\"{o}nnen. Jedes Protokoll hat im Paket \textit{protocols.implementations} seine eigene Klasse, die von \textit{VSAbstractProtocol} erbt. Wie bereits erw\"{a}hnt erbt \textit{VSAbstractProtocol} von \textit{VSAbstractEvent}, sodass jedes Protokoll auch als Ereignis (Server- beziehnungsweise Clientanfrage starten) eingesetzt werden kann. - -Jede Protokollklasse mu die folgenden Methoden implementieren: - -\begin{itemize} - \item Einen \"{o}ffentlichen (\textit{public}) Konstruktor. Der Konstruktor mu angeben, ob bei dem gegebene Protokoll der Client oder der Server die Anfragen startet. - \item \textit{abstract public void onClientInit()}: Bevor das Protokollobjekt benutzt werden kann, mu es initialisiert werden. Diese Methode wird vor dem ersten Verwenden des Protokolls innerhalb einer Simulation ausgef\"{u}hrt. In der Regel werden hier Protokollvariablen unter Verwendung von \textit{VSPrefs} und Attribute der Protokollklasse initialisiert. Die hier initialisierten Protokollvariablen lassen sich vom Benutzer im Prozesseditor des jeweiligen Prozesses editieren. - \item \textit{abstract public void onClientReset()}: Dese Methode wird jedes Mal ausgef\"{u}hrt, wenn die Simulation zur\"{u}ckgesetzt wird. - \item \textit{abstract public void onClientStart()}: Diese Methode wird nur ben\"{o}tigt, wenn der Client immer die Anfragen startet. Diese Methode generiert in der Regel immer eine Clientanfrage, die via \textit{VSMessage}-Objekt an alle beteiligten Prozesse verschickt wird. - \item \textit{abstract public void onClientRecv(VSMessage message)}: Diese Methode wird jedes Mal Ausgef\"{u}hrt, wenn eine Servernachricht \textit{message} bei dem Client eintrifft. - \item \textit{abstract public void onClientSchedule()}: Diese Methode wird jedes Mal ausgef\"{u}hrt, wenn ein Wecker-Ereignis eintritt. - \item \textit{public String toString()}: Diese Methode ist nur optional. Hiermit lassen sich die Loggnachrichten eines Protokolls anpassen. Wenn diese Methode in einer Protokollimplementierung ausgelassen wird, so wird stets die \textit{toString}-Methode der Mutterklasse \textit{VSAbstractProtocol} verwendet. -\end{itemize} - -F\"{u}r alle hier aufgelisteten Client-Methoden sind auch die korespondierenen Server-Methoden anzugeben. Die Server-Methoden sind analog zu den Client-Methoden aufgebaut. - -\subsection{Beispielimplementierung eines Protokolls} - -Im Folgenden wird die Implementierung des zuverl\"{a}ssigen Multicast-Protokolls \textit{VSReliableMulticastProtocol.java} als Beispiel aufgef\"{u}hrt. Die Funktionsweise des Protokolls wurde bereits in Kapitel 2.5.10 beschrieben. Client- und Serverseite werden in der selben Klasse implementiert. - -Im Konstruktor mu stets angegeben werden, ob beim gegebenen Protokoll der Client oder der Server die Anfragen startet. Mit \textit{HAS\_ON\_CLIENT\_START} wird dem API mitgeteilt, dass der Client die Anfragen startet. F\"{u}r \textit{HAS\_ON\_SERVER\_START} und Serveranfragen gilt Selbiges analog: - -\begin{code} -package protocols.implementations; - -import java.util.ArrayList; -import java.util.Vector; -import protocols.VSAbstractProtocol; -import core.VSMessage; - -public class VSReliableMulticastProtocol - extends VSAbstractProtocol { - public VSReliableMulticastProtocol() { - super(VSAbstractProtocol.HAS_ON_CLIENT_START); - setClassname(getClass().toString()); - } -\end{code} - -\subsubsection{Clientseite des Protokolls} - -Das private Klassenattribut \textit{pids} wird f\"{u}r die Zwischenspeicherung beteiligter PIDs ben\"{o}tigt. Hier sind alle PIDs abgelegt, von denen noch Best\"{a}tigungsnachrichten erwartet werden. Hier werden als Standard-PIDs \textit{1} und \textit{3} verwendet. Die Methoden \textit{initVector} und \textit{initLong} wurden von \textit{VSPrefs} vererbt und initialisieren die Protokollvariablen \textit{pids} und \textit{timeout}, welche vom Benutzer im Prozesseditor editiert werden k\"{o}nnen: -\begin{code} - private ArrayList pids; - - public void onClientInit() { - Vector vec = new Vector(); - vec.add(1); vec.add(3); - initVector("pids", vec, "PIDs beteilitger Prozesse"); - initLong("timeout", 2500, - "Zeit bis erneute Anfrage", "ms"); - } -\end{code} - -Wenn die Simulation zur\"{u}ckgesetzt wird, dann wird auch \textit{pids} reinitialisiert: -\begin{code} - public void onClientReset() { - pids.clear(); - pids.addAll(getVector("pids")); - } -\end{code} - -In \textit{onClientStart} wird gepr\"{u}ft, ob eine Clientanfrage gestartet werden soll. Wenn dies der Fall ist (wenn von mindestens einem beteiligten Prozess noch keine Best\"{a}tigung erhalten wurde), wird ein neues Nachrichtenobjekt erstellt, und mit dem Inhalt \textit{Boolean: isMulticast=true} verschickt (intern wird hier f\"{u}r jeden Empf\"{a}ngerprozess ein \textit{VSMessageReceiveEvent} erzeugt). Mit \textit{scheduleAt} wird ein Wecker festgelegt, zur welchen lokalen Prozesszeit die Methode \textit{onClientSchedule} aufgerufen werden soll (intern wird hier ein \textit{VSProtocolScheduleEvent} erzeugt): -\begin{code} - public void onClientStart() { - if (pids.size() != 0) { - long timeout = getLong("timeout") + process.getTime(); - scheduleAt(timeout); - - VSMessage message = new VSMessage(); - message.setBoolean("isMulticast", true); - sendMessage(message); - } - } -\end{code} - -Wenn eine Serverantwort eintrifft, dann wird \textit{onClientRecv} aufgerufen. Hier wird \"{u}berpr\"{u}ft, ob \"{u}berhaupt noch Multicast-Best\"{a}tigungen ben\"{o}tigt werden. Wenn dies der Fall ist, dann wird geschaut, ob es sich bei der Antwort um eine noch nicht eingetroffene Best\"{a}tigung handelt. Gegebenenfalls wird die jeweilige PID aus \textit{pids} entfernt. Wenn \textit{pids} leer ist, dann wurde von allen beteiligten Prozessen eine Best\"{a}tigung erhalten und der Client entfernt mit \textit{removeSchedules} alle seine derzeit programmierten Wecker. - -\begin{code} - public void onClientRecv(VSMessage recvMessage) { - if (pids.size() != 0 && recvMessage.getBoolean("isAck")) { - Integer pid = recvMessage.getIntegerObj("pid"); - - if (pids.contains(pid)) - pids.remove(pid); - else - return; - - logg("ACK von Prozess " + pid + " erhalten!"); - - if (pids.size() == 0) { - logg("ACKs von allen beteiligten Prozessen " + - "erhalten!"); - - removeSchedules(); - } - } - } -\end{code} - -F\"{u}r das erneute Verschicken einer Clientanfrage ruft \textit{onClientSchedule} lediglich die Methode \textit{onClientStart} auf, die wiederum einen neuen Wecker planen kann: -\begin{code} - public void onClientSchedule() { - onClientStart(); - } -\end{code} - -\subsubsection{Serverseite des Protokolls} - -Die Serverseite des Protokolls speichert im Attribut \textit{ackSent} ab, ob es bereits eine Best\"{a}tigung des Multicasts verschickt hat oder nicht. In diesem Protokoll werden in \textit{onServerInit} keine Initialisierungen vorgenommen. Demach gibt es f\"{u}r den Benutzer auch keine serverseitigen Protokollvariablen zu editieren. Beim Zur\"{u}cksetzen der Simulation wird lediglich \textit{ackSent} auf den Ursprungswert gesetzt: -\begin{code} - private boolean ackSent; - - public void onServerInit() { } - - public void onServerReset() { - ackSent = false; - } -\end{code} - -Wenn der Server eine Clientanfrage erhalten hat, so \"{u}berpr\"{u}ft der Server, ob es sich um eine Multicast-Nachricht handelte. Anschlieend wird gegebenenfalls die Best\"{a}tigungsnachricht mit \textit{Boolean: isAck=true} und der Server-PID verschickt. Jenachdem ob bereits eine Best\"{a}tigung verschickt wurde oder nicht wird eine andere Nachricht geloggt: -\begin{code} - public void onServerRecv(VSMessage recvMessage) { - if (recvMessage.getBoolean("isMulticast")) { - VSMessage message = new VSMessage(); - message.setBoolean("isAck", true); - message.setInteger("pid", process.getProcessID()); - sendMessage(message); - - if (ackSent) { - logg("ACK erneut versendet"); - } else { - logg("ACK versendet"); - ackSent = true; - } - } - } -\end{code} - -Der Server benutzt in diesem Beispiel keinen Wecker. Dementsprechend hat die Methode \textit{onServerSchedule} auch einen leeren Rumpf: -\begin{code} - public void onServerSchedule() { } -} -\end{code} - -\subsection{Erstellung eigener Protokolle} - -\section{GUI} - -\section{Serialisierung von Simulationen} - -\subsection{R\"{u}ckw\"{a}rtskompatibel} - -\section{Weiteres} - -exceptions, utils - -\section{Entwicklungsumgebung} - -In diesem Teilkapitel soll ein kleiner Einblick in die Umgebung, in der der Simulator entwickelt wurde, gew\"{a}hrt werden. F\"{u}r diese Diplomarbeit wurde ausschlielich Open Source Software verwendet. Die einzige Ausnahme stellt Microsoft Windows XP dar, worauf der Simulator zus\"{a}tzlich getestet wurde. Der Simulator wurde jedoch haupts\"{a}chlich unter dem Betriebssystem FreeBSD 7.0, was ein open source Unix-Derivat ist, programmiert. - -Wie bereits bekannt ist, wurde Sun's Java, was mittlerweile auch Open Source Software ist, in der Version 6 (1.6) als die Implementierungssprache gew\"{a}hlt und f\"{u}r die Quelltextdokumentation kam Javadoc und f\"{u}r die automatische Quelltexteinr\"{u}ckung astyle zum Einsatz. Als Built-Tool wurde hier auf Apache Ant gesetzt. F\"{u}r die Erstellung dieses PDF-Dokumentes wurde LaTeX in Verbindung mit dem Built-Tool GNU Make und Rubber verwendet. Eine Rechtschreib\"{u}berpr\"{u}fung wurde mit aspell durchgef\"{u}hrt. xPDF diente als PDF-Anzeigeprogramm. - -Als Versionierungssystem wurde SVN (Subversion) verwendet. F\"{u}r den Zugriff auf das SVN-Repository mittels HTTPS (Hypertext Transfer Protocol Secure) wurde der Apache-Websever mit WebDAV-Plugin verwendet. Zudem kam WebSVN als Webschnitstelle des SVN-Repositories zum Einsatz. Als SSL Zertifikat diente ein Kostenloses von CaCert (\url{http://www.CaCert.org}). Mozilla Firefox diente f\"{u}r das Betrachten der Javadocs und der WebSVN-Oberfl\"{a}che. - -F\"{u}r schreiben von Java-Quelltext wurde GVim (Graphical Vi IMproved) sowie Eclipse verwendet. Eclipse unterst\"{u}tzt bessere Code-Refactoring-Methoden, w\"{a}hrend GVim mit seiner Flexibilit\"{a}t und schnelleren Editierm\"{o}glichkeiten und mit Vim-Script, der eigenen Script-Engine, gl\"{a}nzt. Es wurden ausserdem das JAutoDoc- (f\"{u}r die Erstellung von Javadoc-Kommentate) und das Subversion-Eclipse-Plugin verwendet. Je nach Zweck wurde zwischen diesen beiden Umgebungen gewechselt. F\"{u}r das Verfassen des LaTeX-Dokumentes wurde GVim verwendet. - -S\"{a}mtliche UML-Diagramme wurden mit ArgoUML angefertigt und die Screenshots mit The GIMP (GNU Image Manipulation Program) sowie ImageMagick nachbearbeitet. Mit zip wurden alle VS-Simulator Distributionen eingepackt. - -\subsubsection{Linkliste der verwendeten Software} - -\begin{itemize} - \setlength{\itemsep}{-2mm} - \item Apache Webserver - \url{http://httpd.apache.org} - \item ArgoUML - \url{http://argouml.tigris.org} - \item Eclipse - \url{http://www.eclipse.org} - \item FreeBSD - \url{http://www.FreeBSD.org} - \item GNU Make - \url{http://www.gnu.org/software/make} - \item GVim - \url{http://www.vim.org} - \item ImageMagick - \url{http://www.imagemagick.org} - \item Javadoc - \url{http://java.sun.com/j2s2/javadoc} - \item Mozilla Firefox - \url{http://www.mozilla.com} - \item Rubber - \url{http://www.pps.jussieu.fr/~beffara/soft/rubber} - \item Sun Java - \url{http://java.sun.com} - \item The GIMP - \url{http://www.gimp.org} - \item WebDAV - \url{http://httpd.apache.org/docs/2.0/mod/mod\_dav.html} - \item WebSVN - \url{http://websvn.tigris.org} - \item aspell - \url{http://aspell.sourceforge.net} - \item astyle - \url{http://astyle.sourceforge.net} - \item xPDF - \url{http://www.foolabs.com/xpdf} - \item zip - \url{http://www.info-zip.org/Zip.html} -\end{itemize} - diff --git a/LaTeX/chapters/header.tex b/LaTeX/chapters/header.tex index fa16243..5286aa9 100644 --- a/LaTeX/chapters/header.tex +++ b/LaTeX/chapters/header.tex @@ -123,6 +123,12 @@ \usepackage[dvipsnames]{color} \usepackage[dvipsnames,svgnames]{pstricks} +% Fuer bilder am seitenrand +%\usepackage{sidecap} +%\usepackage{floatfit} +%\usepackage{float} + + % % Paket fr Links innerhalb des PDF Dokuments % diff --git a/LaTeX/chapters/implementierung.tex b/LaTeX/chapters/implementierung.tex new file mode 100644 index 0000000..f0b8685 --- /dev/null +++ b/LaTeX/chapters/implementierung.tex @@ -0,0 +1,485 @@ +\chapter{Die Implementierung} + +In diesem Kapitel wird auf die Implementierung des Simulators eingegangen. Der Simulator wurde in der Programmiersprache Java entwickelt. Bei der Betrachtung der Zielgruppe wird klar, dass Java f\"{u}r die gestellte Aufgabe die geigneste Programmiersprache ist. Der Simulator ist somit auf jeder Platform verf\"{u}gbar, f\"{u}r die es die JRE (Java Runtime Environment) gibt und erstreckt sich somit \"{u}ber alle g\"{a}ngigen Betriebssysteme. Da an der Fachhochschule Aachen auch Java gelehrt wird, sollten hier die meisten Studenten auch eigene Erweiterungen, wie eigene Protokolle, entwerfen k\"{o}nnen. Der Simulator wurde mit dem derzeit aktuellsten Java SDK (Software Development Kit) in der Version 6 (1.6) entwickelt. + +\begin{table} + \fbox{ + \begin{tabular}{l|l} + \textbf{Paketname} & \textbf{Beschreibung} \\ + \hline + \textit{core} & Klassen f\"{u}r Prozesse und Nachrichten\\ + \textit{core.time} & Klassen f\"{u}r Zeitformate\\ + \textit{events} & Basisklassen f\"{u}r Ereignisse\\ + \textit{events.implementations} & Implementierungen von Ereignissen\\ + \textit{events.internal} & Implementierungen von internen Ereignissen\\ + \textit{exceptions} & Klassen f\"{u}r Fehlerbehandlungen\\ + \textit{prefs} & Klassen f\"{u}r die Einstellungen\\ + \textit{prefs.editors} & Klassen f\"{u}r die Editoren\\ + \textit{protocols} & Basisklassen f\"{u}r Protokolle\\ + \textit{protocols.implementations} & Implementierungen von Protokollen\\ + \textit{serialize} & Helferklassen f\"{u}r die Serialisierung von Simulationen\\ + \textit{simulator} & Klassen f\"{u}r die GUI und die Visualisierung\\ + \textit{utils} & Diverse Helferklassen\\ + \end{tabular} + } + \caption{Die Paketstruktur} + \label{tb:Pakete} +\end{table} + +Da es sonst den Rahmen sprengen w\"{u}rde, soll im Folgenden der komplette Quelltext nicht bis in das letzte Detail behandelt werden. Der Quelltext erstreckt sich n\"{a}mlich, einschlielich Kommentare, auf \"{u}ber 15.000 Zeilen und \"{u}ber 60 Dateien. Zudem ist die generierte Quelltext-Dokumentation (Javadoc) \"{u}ber 2MB gro. Alle folgenden UML-Diagramme stellen aufgrund der \"{U}bersichtlichkeit lediglich die wesentlichen Dinge dar. Alle Details lassen sich im Quelltext und der dazugeh\"{o}rigen Dokumentation einsehen. Die Paketstruktur des Quelltextes ist in Tabelle \ref{tb:Pakete} in alphanumerischer Reihenfolge aufgef\"{u}hrt. + +\section{Programmierrichtlinien} + +Die Programmierrichtlinien entsprechen in den meisten F\"{a}llen denen aus der Vorlesung \cite{OOS}. Die Main-Methode befindet sich in der Klasse \textit{simulator.VSMain}. + +\begin{itemize} + \item Alle Klassen- und Interfacenamen beginnen mit groen Buchstaben, w\"{a}hrend alle Variablen-, Methoden- und Attributnamen mit kleinen Buchstaben beginnen. Namen statischer Variablen und Attribute sind komplett in Grobuchstaben gehalten. + \item Alle Quelltext-Dateien besitzen einen Header, der Informationen der verwendeten Lizenz angibt. + \item Alle Quelltext-Dateien sind vollst\"{a}ndig mit Javadoc dokumentiert worden. + \item Der komplette Quelltext inklusive Dokumentation wurde in englischer Sprache verfasst. + \item Eine Quelltext-Datei hat eine maximale Zeilenl\"{a}nge von 80 Zeichen. Eine Ausnahme stellt die Klasse \textit{prefs.VSDefaultPrefs} dar, denn hier befinden sich auch l\"{a}ngere Texte die in Strings abgespeichert werden, wo manuelle Zeilenumbr\"{u}che wenig Sinn ergeben. + \item Es werden zuerst Klassen aus der Java-Standardbibliothek importiert, bevor Klassen aus dem VS-Simulator selbst importiert werden. + \item F\"{u}r die Einr\"{u}ckung des Quelltextes wird das Tool \textit{astyle} mit den Aufrufparametern \textit{--style=java --mode=java} verwendet. Hierbei wird eine Einr\"{u}ckungsl\"{a}nge von 4 Zeichen verwendet. + \item Namen abstrakter Klassen tragen stets das Prefix \textit{VSAbstract}. + \item Namen aller Klassen und Interfaces tragen als Prefix stets \textit{VS}, was f\"{u}r Verteilte Systeme steht. +\end{itemize} + + + +\section{Einstellungen und Editoren} + +Eine Simulation ist von einer Vielzahl von Einstellungen abh\"{a}ngig. Da auf diese Einstellungen in den weiteren Teilkapitel sets zur\"{u}ckgegriffen wird, macht es Sinn die dazugeh\"{o}rigen Klassen zuerst zu betrachten. + +\subsection{Einstellungsobjekte} + +Auf Abbilung \ref{fig:PackagePrefs} ist der Aufbau des Pakets \textit{prefs} zu sehen. In einer Instanz der Klasse \textit{VSPrefs} lassen sich viele verschiedene Daten als Variablen f\"{u}r eine sp\"{a}tere Verwendung dynamisch ablegen und stellt somit einen Container f\"{u}r diese Daten dar. In einem \textit{VSPrefs}-Objekt speichert der Simulator alle seine Einstellungen ab. Zudem besitzt jedes Prozessobjekt und jedes Protokollobjekt f\"{u}r lokale Einstellungen seine eigene Instanz von \textit{VSPrefs}. Selbst Nachrichtenobjekte besitzt hiervon eine eigene Instanz, wobei hier die zu verschickenden Daten abgelegt werden k\"{o}nnen. + +\begin{figure}[h] + \centering + \includegraphics[width=7cm]{images/prefs} + \caption{Das Paket \textit{prefs}} + \label{fig:PackagePrefs} +\end{figure} + +Jede Variable besteht aus einen Datentypen, einen Variablenamen und einer optionalen Beschreibung sowie einen Wert. Einige Datentypen unterst\"{u}tzen auch die Angabe von Minimum- und Maximumwerten (zum Beispiel besteht eine Prozentangabe aus einen Integerwert zwischen \textit{0} und \textit{100}), was mithilfe der \textit{VSPrefsRestriction}-Klasse implementiert wird. Da man beispielsweise bei Prozent ein \textit{\%} und bei Millisekunden ein \textit{ms} hinter der Variable sehen m\"{o}chte, kann f\"{u}r jede Variable auch ein optionaler Einheiten-String abgespeichert werden. + +Eine Variablenbeschreibung wird f\"{u}r die Darstellung im GUI verwendet, w\"{a}hrend der Variablenname eher f\"{u}r die interne Verwendung vom Simulator verwendet wird. Zum Beispiel hat die Variable \textit{message.prob.outage} (Verlustwahrscheinlichkeit einer Nachricht) die Variablenbeschreibung ``Nachrichtenverlustw'keit''. Wenn f\"{u}r eine Variable keine Beschreibung existiert so wird, wie auf Abbildung \ref{fig:SimulationseinstellungenExperten} anhand der Farbvariablen schon gesehen wurde, f\"{u}r die Anzeige f\"{u}r eine Variable der Datentyp und der Variablenname verwendet. Variablennamen verwenden die auf Tabelle \ref{tb:VariablenPrefixe} angegebenen Prefixe. Alle verf\"{u}gbaren Typen wurden bereits in Tabelle \ref{tb:VariablenDatentypen} aufgelistet. \textit{VSPrefs} stellt f\"{u}r alle Variablen entsprechende Zugriffsmethoden zur Verf\"{u}gung. + +Im Folgenden werden nicht alle exisierenden Methoden aufgelistet, da diese auch in der Quelltext-Dokumentation (Javadoc) eingesehen werden k\"{o}nnen. Die Methoden werden nun nur anhand des Integer-Datentyps verdeutlicht. F\"{u}r alle anderen Typen gilt fast alles analog. F\"{u}r Integer stehen in \textit{VSPrefs} folgende Methoden zur Verf\"{u}gung: + +\begin{itemize} + \setlength{\itemsep}{-2mm} + \item \textit{void setInteger(String key, Integer val)} + \item \textit{void setInteger(String key, Integer val, String descr)} + \item \textit{void setInteger(String key, int val)} + \item \textit{void setInteger(String key, int val, String descr)} + \item \textit{Integer getIntegerObj(String key)} + \item \textit{int getInteger(String key)} + \item \textit{java.util.Set getIntegerKeySet()} + \item \textit{void initInteger(String key, int val) } + \item \textit{void initInteger(String key, int val, String descr) } + \item \textit{void initInteger(String key, int val, String descr, int minValue, int maxValue) } + \item \textit{void initInteger(String key, int val, String descr, int minValue, int maxValue, String unit) } + \item \textit{void initInteger(String key, int val, String descr, VSPrefsRestriction.VSIntegerPrefsRestriction r) } + \item \textit{void initInteger(String key, int val, String descr, VSPrefsRestriction.VSIntegerPrefsRestriction r, String unit) } +\end{itemize} + +\begin{table} + \fbox{ + \begin{tabular}{c|l|l} + \textbf{Variablen-Prefix} & \textbf{Beschreibung} & \textbf{Beispiel}\\ + \hline + \textit{col} & Farbvariablen & \textit{Color: col.background = Color-Objekt}\\ + \textit{div} & Diverse versteckte Variablen & \textit{Integer: div.window.loggsize = 300} \\ + \textit{keyevent} & Variablen, die Tastaturk\"{u}rzel definieren & \textit{Integer: keyevent.close = KeyEvent.VK\_C} \\ + \textit{lang} & Variablen, die Text beinhalten & \textit{String: lang.activate = aktivieren}\\ + \textit{message} & Variablen, die Nachrichten betreffen & \textit{Integer: message.prob.outage = 0}\\ + \textit{process} & Variablen, die Prozesse betreffen & \textit{Integer: process.prob.crash = 0}\\ + \textit{sim} & Allgemeine Simulationsvariablen & \textit{Integer: sim.process.num = 3}\\ + \end{tabular} + } + \caption{Konventionen f\"{u}r Variablennamen-Prefixe in \textit{VSDefautPrefs}} + \label{tb:VariablenPrefixe} +\end{table} + +Hierbei stellt \textit{key} den Variablennamen- und \textit{val} den Variablenwert dar. \textit{descr} ist eine optionale Variablenbeschreibung. Es k\"{o}nnen sowohl Java's Integer-Objekte, als auch Java's primitiver Integer-Typ \textit{int} verwendet werden. Ein \textit{int}-Wert wird intern allerdings als Integer-Objekt abgespeichert und macht somit keinen groen Unterschied. Die Methode \textit{getIntegerKeySet} gibt alle vorhandenen Integer-Variablennamen (\textit{key}s) als \textit{Set} zur\"{u}ck. + +\textit{VSPrefs} bietet auch eine Reihe von \textit{initInteger}-Methoden an, welche sich von den \textit{setInteger}-Methoden dadurch unterscheiden, dass sie eine Variable nur einen Wert zuweisen, wenn sie vorher noch nicht initialisiert wurde, was durch \textit{setInteger} oder \textit{initInteger} selbst geschehen sein kann. Eine komplette \"{U}bersicht aller Methoden (auch f\"{u}r andere Datentypen) gibt es in der Quelltext-Dokumentation. + +\textit{VSPrefs} speichert alle Integervariablen in einem \textit{HashMap}-Objekt ab, wobei der String-Wert den Variablenamen \textit{key} angibt. F\"{u}r die Beschreibung \textit{descr}, den Einheiten-String \textit{unit} sowie m\"{o}glichen Minimum- und Maximumwerte werden separate Instanzen von \textit{HashMap} verwendet. Da alle \textit{HashMap}-Objekte synchronisiert sind, k\"{o}nnen alle Methoden von verschiednenen Threads gleichzeitig verwendet werden. + +Die Klasse \textit{VSDefaultPrefs} erweitert \textit{VSPrefs} und initialisiert bei Instanzierung automatisch alle verf\"{u}gbaren Simulationsvariablen mit ihren Standardwerten. Dort sind auch alle Spracheinstellungen abgelegt. Sollte jemand den Simulator in eine andere Sprache, zum Beispiel ins Englische, \"{u}bersetzen wollen, so mu er lediglich diese Datei und die Protokoll-Klassen (mehr dazu sp\"{a}ter) editieren. Die Spracheinstellungen sind n\"{a}mlich in einem \textit{VSPrefs}--Objekt als versteckte String-Variablen abgespeichert. Spracheinstellungen f\"{u}r Protokolle wurden in den Protokollklassen direkt angegeben, da dies mehr Komfort f\"{u}r den Protokollentwickler bietet und f\"{u}r jede neue Textausgabe nicht st\"{a}ndig \textit{VSDefaultPrefs.java} editiert werden muss. + +Alle Variablen die als Prefix \textit{lang}, \textit{keyevent}, \textit{div} oder \textit{col} tragen, sind versteckte Variablen und werden in einem Editor nicht angezeigt. Im Expertenmodus sind hingegen nur Variablen die mit \textit{lang} und \textit{keyevent} beginnen versteckt. Somit lassen sich im Expertenmodus weitere Variablen vom Anwender editieren. + +\subsection{Editorobjekte} + +\begin{figure}[h] + \centering + \includegraphics[width=11cm]{images/prefs-editors} + \caption{Das Paket \textit{prefs.editors}} + \label{fig:PackagePrefsEditors} +\end{figure} + +Wie Variablen intern abgespeichert werden ist bereits bekannt. F\"{u}r das Editieren der Variablen werden Editor-Objekte verwendet. Auf Abbildung \ref{fig:PackagePrefsEditors} ist die Klassenstruktur des dazugeh\"{o}rigen Paketes \textit{prefs.editors} angegeben. + +Die Basis eines Editors stellt die abstrakte Klasse \textit{VSAbstractEditor} dar, dem ein \textit{VSPrefs} Objekt zum Editieren \"{u}bergeben wird. Ein Editor stellt alle verf\"{u}gbaren und nicht-versteckten Variablen des \textit{VSPrefs}-Objektes im GUI dar und bietet gleichzeitig die M\"{o}glichkeit alle Variablen dar\"{u}ber zu editieren an. F\"{u}r das Editieren von Farbwerten wird auf \textit{VSColorChooser} zur\"{u}ckgegriffen. Die Klasse \textit{VSEditorTable} ist f\"{u}r das \textit{JTable}-Objekt aus Java's Swing-Bibliothek zust\"{a}ndig, welches bei der graphischen Darstellung aller Variablen eingesetzt wird. Die abstrakte Klasse \textit{VSAbstractBetterEditor} wurde, wegen der \"{U}bersicht, als Zwischenschritt eingef\"{u}gt. + +Die Klasse \textit{VSSimulatorEditor} dient f\"{u}r das Editieren der globalen Simulationseinstellungen und \textit{VSProcessEditor} f\"{u}r das Editieren der Prozesseinstellungen sowie der dazugeh\"{o}rigen Protokollvariablen. Da diese beiden Klassen von \textit{VSAbstractBetterEditor} erben, k\"{o}nnen sie mithilfe von \textit{VSEditorFrame} in einem separaten Fenster angezeigt werden. Alternativ k\"{o}nnen die Editoren auch in der Sidebar im Tab ``Variablen'' angezeigt werden. Auf Abbildung \ref{fig:Simulationseinstellungen} wurde bereits ein \textit{VSEditorFrame} in Aktion gesehen. + +F\"{u}r Protokolle gibt es keine separate Editor-Klasse, da sie bereits vom Prozesseditor aus editiert werden k\"{o}nnen. Dabei iteriert der Prozesseditor \"{u}ber alle f\"{u}r den jeweiligen Prozess verf\"{u}gbaren Protokollobjekte und f\"{u}gt deren Variablen zus\"{a}tzlich in den Prozesseditor ein. Somit erscheinen die Prozess- und die dazugeh\"{o}rigen Protokollvariablen im selben Editor, womit dem Benutzer eine bessere \"{U}bersicht geboten wird. + +\section{Ereignisse} + +\subsection{Die Funktionsweise von Ereignissen} + +F\"{u}r jedes Ereignis existiert eine dazugeh\"{o}rige Klasse, welche die auszuf\"{u}hrenden Aktionen implementiert. Eine Instanz davon wird, f\"{u}r eine sp\"{a}tere Ausf\"{u}hrung, in einem \textit{VSTask}-Objekt verpackt dem Task-Manager \"{u}bergeben. Auf den Task-Manager wird sp\"{a}ter noch genauer eingegangen. +\begin{figure}[h] + \centering + \includegraphics[width=13.5cm]{images/events} + \caption{Die Pakete \textit{events} und \textit{events.*}} + \label{fig:PackageEvents} +\end{figure} + +Jedes programmierbare Ereignis mu, bevor es vom Simulator verwendet werden kann, in der statischen Klasse \textit{VSRegisteredEvents} registriert werden. Da sich die Anzahl der verf\"{u}gbaren Ereignisse bei Laufzeit des Simulators nicht \"{a}ndert, gibt es keine Instanzen von \textit{VSRegisteredEvents}. Alle Methoden und Klassenattribute sind hier statisch. Wenn beispielsweise eigene Ereignisse implementiert werden, dann m\"{u}ssen alle neuen Ereignisse per Hand in die Datei \textit{VSRegisteredEvents.java} \"{u}bernommen- und der Simulator erneut kompiliert werden. + +In der Implementierung wird zwischen drei Haupttypen von Ereignissen unterschieden, die jeweils in verschiedenen Paketen liegen (siehe auch die leicht vereinfachte Abbildung \ref{fig:PackageEvents}): + +\begin{enumerate} + \item \textit{events.implementations}: In diesem Paket befinden sich alle Ereignisse, die ohne weitere Spezialbehanldung im Simulator eingesetzt werden k\"{o}nnen und vom Benutzer direkt im Ereigniseditor programmierbar sind. + \begin{itemize} + \item \textit{VSProcessCrashEvent}: Dieses Ereignis l\"{a}sst den dazugeh\"{o}rigen Prozess abst\"{u}rzen. + \item \textit{VSProcessRecoverEvent}: Dieses Ereignis l\"{a}sst den dazugeh\"{o}rigen Prozess wiederbeleben. + \end{itemize} + + \item \textit{events.internal}: In diesem Paket befinden sich alle Ereignisse, die vom Simulator intern verwendet werden und dadurch eine direkte Programmierung via Ereigniseditor ausschlieen. + \begin{itemize} + \item \textit{VSAbstractInternalEvent}: Diese Klasse stellt weitere Methoden zur Verf\"{u}gung, die von allen internen Ereignissen ben\"{o}tigt werden. Derzeit betrifft dies nur Methoden zur Serialisierung der gegebenen Objekte. Auf die Serialisierung (Abspeichern/Laden) von Simulationen wird sp\"{a}ter noch genauer eingegangen. + \item \textit{VSMessageReceiveEvent}: Diese Klasse wird f\"{u}r die Ankunft einer Nachricht bei einem Empf\"{a}ngerprozess ben\"{o}tigt. Sie kapselt die eigentliche Nachricht und \"{u}berpr\"{u}ft, ob der Empf\"{a}ngerprozess das zur Nachricht dazugeh\"{o}rige Protokoll versteht. Diese Klasse \"{u}berpr\"{u}ft auch die Simulationseinstellung ``Nur relevante Nachrichten anzeigen'' und entscheidet, ob die Nachricht nach Eintreffen in der Visualisierung und im Loggfenster ber\"{u}cksichtigt werden soll oder nicht. + \item \textit{VSProtocolEvent}: Diese Klasse implementiert gleichzeitig vier verschiedene Ereignisse: Das Aktivieren/Deaktivieren eines Servers/Clients eines gegebenen Protokolls. Der Ereigniseditor berechnet anhand der verf\"{u}gbaren Protokolle automatisch alle m\"{o}glichen Kombinationen und bietet sie dem Anwender in seiner Auswahl an. F\"{u}r alle dieser vier Ereignisse wird jeweils ein Objekt von \textit{VSProtocolEvent} verwendet, jedoch mit jeweils anderen Attributwerten. + \item \textit{VSProtocolScheduleEvent}: Diese Klasse wird f\"{u}r die Wecker-Ereignisse ben\"{o}tigt. Wecker-Ereignisse k\"{o}nnen nur von Protokollen (mehr dazu sp\"{a}ter) erstellt werden. \textit{VSProtocolScheduleEvent} besitzt eine Referenz auf das gegebene Protokoll und ruft bei Ereigniseintrittszeit entweder die Methode \textit{onServerScheduleStart} bei einem Server- oder \textit{onClientScheduleStart} bei einem Clientprotokoll auf. + \end{itemize} + \item \textit{protocols.implementations}: In diesem Paket befinden sich alle Protokollimplementierung. Jedes Protokoll besitzt hier seine eigene Klasse. Alle Protokolle erben hierbei von der auf Abbildung \ref{fig:PackageEvents} zu sehenden Klasse \textit{protocols.VSAbstractProtocol}. Da \textit{protocols.VSAbstractProtocol} von \textit{events.VSAbstractEvent} erbt, kann ein Protokollobjekt auch als Ereignis eingesetzt werden. Ein solches Ereignis ruft bei Eintritt entweder die Methode \textit{onServerStart} oder die Methode \textit{onClientStart} des Protokolls auf, was einer Server- beziehungsweise einer Clientanfrage entspricht. Die Implementierung von Protokollen wird sp\"{a}ter genauer behandelt. +\end{enumerate} + +Alle Ereignisse, die das Interface \textit{VSCopyableEvent} implementieren, k\"{o}nnen vom Anwender im Ereigniseditor mit einem Rechtsklick kopiert werden und m\"{u}ssen die Methode \textit{initCopy(VSAbstractEvent copy)} implementieren. Dort werden alle relevanten Attribute in das neue Ereignis \textit{copy} kopiert. + +Alle Ereignisklassen erweitern die abstrakte Klasse \textit{VSAbstractEvent} und m\"{u}ssen folgende abstrakten Methoden implementieren: + +\begin{itemize} + \item \textit{abstract public void onInit()}: Bevor ein Ereignisobjekt vom Simulator verwendet werden kann, mu es initialisiert werden. Je nach Ereignis k\"{o}nnen hier verschiedene Werte initialisiert werden. Diese Methode wird pro Ereignisobjekt nach Erstellung nur ein einziges Mal ausgef\"{u}hrt. + \item \textit{abstract public void onStart()}: Diese Methode wird jedes Mal ausgef\"{u}hrt, wenn das Ereignis eintritt. Sie stellt somit das Kernst\"{u}ck eines Ereignisses dar. +\end{itemize} + +Des Weiteren werden folgende nicht-abstrakte Methoden von \textit{VSAbstractEvent} vererbt: + +\begin{itemize} + \item \textit{public void logg(String message)}: Diese Methode schreibt eine Loggnachricht in das Simulationsloggfenster. + \item \textit{public VSAbstractEvent getCopy()}: Diese Methode erstellt vom aktuellen Ereignis eine Kopie, wovon eine Referenz zur\"{u}ckgegeben wird. Alle Ereignisse die kopiert werden k\"{o}nnen m\"{u}ssen ebenso das Interface \textit{VSCopyableEvent} implementieren. Wenn ein Ereignis dies nicht tut und \textit{getCopy()} aufgerufen wird, dann wird von Java die Ausnahme \textit{exceptions.VSEventNotCopyable} geworfen. + \item \textit{public VSAbstractEvent getCopy(VSInternalProcess process)}: Diese Methode erstellt vom aktuellen Ereignis ebenfalls eine Kopie, jedoch mit dem Unterschied, dass das Ereignis einem anderen Prozess zugewiesen wird. +\end{itemize} + +Jede Ereiginsklasse hat zudem Zugriff auf folgende Attribute, die von \textit{VSAbstractEvent} vererbt werden: + +\begin{itemize} + \item \textit{protected VSPrefs prefs}: Eine Referenz auf das Simulationseinstellungsobjekt. Hier\"{u}ber lassen sich alle Simulationseinstellungen beziehen. + \item \textit{protected VSAbstractProcess process}: Eine Referenz auf das Prozessobjekt des jeweiligen Prozesses, auf welches das Ereignis angewendet wird. +\end{itemize} + +\subsection{Beispielimplementierung eines Ereignisses} + +Im Folgenden wird als Beispiel die Implementierung des Prozessabsturzereignisses \textit{VSProcessCrashEvent} behandelt. Da die dazugeh\"{o}rige Klasse keine Attribute besitzt, verleibt hier auch die \textit{initCopy}-Methode mit leerem Rumpf. Jede Ereignisklasse muss in \textit{onInit()} mit \textit{setClassname} den eigenen Klassennamen mitteilen. In \textit{onStart()} wird das eigentliche Ereignis ausgef\"{u}hrt. Hier wird obligatorisch \"{u}berpr\"{u}ft, ob der Prozess bereits abgest\"{u}rzt (hier eigentlich nicht Notwendig, verbessert aber die Lesbarkeit der Logik) ist und gegebenenfalls wird der Prozess dann zum Absturz bewegt. Der Task-Manager \"{u}berpr\"{u}ft bereits, ob der Prozess abgest\"{u}rzt ist oder nicht, d.h. ein Ereignis wird bei einem abgest\"{u}rztem Prozess gar nicht erst ausgef\"{u}hrt. Die einzige Ausnahme bildet ein Wiederbelebungsereignis (\text{VSProcessRecover}), welches vom Task-Manager ausgef\"{u}hrt wird, auch wenn der Prozess abgest\"{u}rzt ist. Mit \textit{logg} wird eine Nachricht in das Loggfenster geschrieben, welche ueber das \textit{VSPrefs}-Objekt \textit{prefs} bezogen wird: +\begin{code} +package events.implementations; + +import events.*; + +public class VSProcessCrashEvent +extends VSAbstractEvent implements VSCopyableEvent { + public void initCopy(VSAbstractEvent copy) { + } + + public void onInit() { + setClassname(getClass().toString()); + } + + public void onStart() { + if (!process.isCrashed()) { + process.isCrashed(true); + logg(prefs.getString("lang.crashed")); + } + } +} +\end{code} + +\section{Zeitformate, Prozesse, Nachrichten sowie Task-Manager} + +\subsection{Funktionsweise} + +Das Paket \textit{core.time} auf Abbildung \ref{fig:PackageCoreTime} stellt lediglich die Klassen f\"{u}r die Vektor- und Lamportzeitstempel zur Verf\"{u}gung. F\"{u}r die normale lokale Prozesszeit wird aus Performancegr\"{u}nden keine eigene Klasse, sondern ein einfaches \textit{long}-Attribut des Prozessobjektes verwendet. + +\begin{figure}[h] + \centering + \includegraphics[width=7cm]{images/core-time} + \caption{Das Paket \textit{core.time}} + \label{fig:PackageCoreTime} +\end{figure} + +Auf Abbildung \ref{fig:PackageCore} ist stark vereinfacht (in Wirklichkeit existieren in den angegebenen Klassen viel mehr Attribute und Methoden) das Paket \textit{core} dargestellt. F\"{u}r jedes auszuf\"{u}hrendes Ereignis wird eine Instanz von \textit{VSTask} ben\"{o}tigt, welche die Ereigniseintrittszeit als Attribut abgespeichert hat sowie eine Referenz auf das Objekt des auszuf\"{u}hrenden Ereignisses (\textit{VSAbstractEvent}) und dem Prozessobjekt besitzt. Geplante \textit{VSTask}-Instanzen werden f\"{u}r eine sp\"{a}tere Ausf\"{u}hrung dem Task-Manager \"{u}bergeben. + +Die Kapselung eines \textit{VSAbstractEvent}-Objektes in einem \textit{VSTask}-Objekt erlaubt es, dass die selbe \textit{VSAbstractEvent}-Instanz mehrmals auf einmal im Task-Manager geplant werden kann. Ohne dieser Kapselung g\"{a}be es f\"{u}r jedes Ereignis lediglich nur eine einzige m\"{o}gliche Eintrittszeit. Von dieser M\"{o}glichkeit wird zum Beispiel bei den Server- und Clientanfragen eines Protokollobjektes Gebrauch gemacht. F\"{u}r jedes Protokoll kann der Anwender in einer Simulation beliebig viele Anfragen programmieren, wobei f\"{u}r jede Anfrage stets das selbe Protokollobjekt als Ereignis verwendet wird. + +Jede Simulation besitzt genau eine Instanz von \textit{VSTaskManager}. Eine Instanz dieser Klasse stellt den Task-Manager dar. Er verwaltet alle \textit{VSTask}-Instanzen und \"{u}berpr\"{u}ft periodisch, ob es auszuf\"{u}hrende Ereignisse gibt. Der Task-Manager unterscheidet zwischen globalen und lokalen Ereignissen. Hierbei werden alle globalen Ereignisse (gekapselt in einem \textit{VSTask}-Objekt) in einer Priorit\"{a}ts-Warteschlange abgelegt. Die Priorit\"{a}ts-Warteschlange stellt hierbei die korrekte Ereigniseintrittsreihenfolge sicher. Da sich die lokalen Zeiten aller beteiligten Prozesse voneinander unterscheiden k\"{o}nnen, muss f\"{u}r jeden Prozess eine separate lokale Priorit\"{a}ts-Warteschlange verwendet werden, auf die jedes Prozessobjekt seine eigene Referenz hat. In den lokalen Warteschlangen sind die geplanten lokalen Ereignisse (auch gekapselt in einem \textit{VSTask}-Objekt) abgelegt. Der Task-Manager greift \"{u}ber eine \textit{java.util.ArrayList} auf alle Prozessobjekte zu und kann somit auch auf alle lokalen Warteschlangen zugreifen und diese verwalten. + +\begin{figure}[h] + \centering + \includegraphics[width=10.0cm]{images/core} + \caption{Das Paket \textit{core}} + \label{fig:PackageCore} +\end{figure} + +Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. F\"{u}r jedes Versenden einer Nachricht wird hiervon eine Instanz gebildet, wo der Senderprozess die zu verschickende Daten ablegt. Da \textit{VSMessage} von \textit{VSPrefs} erbt, k\"{o}nnen zwischen zwei Prozessen beliebige Datentypen (Tabelle \ref{tb:VariablenDatentypen}) \"{u}ber eine Nachricht verschickt werden. Anschlieend wird f\"{u}r jeden Empf\"{a}ngerprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welche eine Referenz der verschickten Nachricht besitzt. Danach wird ein \textit{VSTask}-Objekt instanziert, wo die Referenz auf das Ereignisobjekt und das dazugeh\"{o}rige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager "{u}bergeben, der das dazugeh\"{o}rige Ereignis ausf\"{u}hrt, wenn die Ereigniseintrittszeit eingetroffen ist. + +Via Java-Polymorphie wird das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt. Wenn die aktuelle globale Zeit $t_g$ ist und wenn $t_{min}$ sowie $t_{max}$ die beim Senderprozess eingestellten Variablen entsprechen, dann wird die Ereigniseintrittszeit $t_e$ f\"{u}r den Empfang der Nachricht wie folgt berechnet: + +\begin{equation*} + t_e := t_g + rand(t_{min}, t_{max}) +\end{equation*} + +Das heit, dass die Nachricht nach einer zuf\"{a}lligen Zeit zwischen $t_{min}$ und $t_{max}$ beim Empf\"{a}nger eintrifft. F\"{u}r jeden Emfp\"{a}nger wird hierbei ein neuer Zufallswert gew\"{a}hlt. F\"{u}r den Fall, dass die Einstellung ``Mittelwerte der \"{U}bertragungszeiten w\"{a}hlen'' aktiviert ist, und wenn $t'_{min}$ und $t'_{max}$ die beim Empf\"{a}ngerprozess eingestellten Werte ensprechen, dann wird die Nachrichtenempfangszeit wie folgt berechnet: + +\begin{equation*} + t_e := t_g + \frac{1}{2} (rand(t_{min}, t_{max}) + rand(t'_{min}, t'_{max})) +\end{equation*} + +Erw\"{a}hnentswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden von \textit{VSMessage} im Protokoll-API, welches f\"{u}r die Erstellung eigener Protokolle dient. Der Protokoll-Entwickler soll m\"{o}glichst nichts falsch machen k\"{o}nnen und deswegen soll den Protokoll-API ein eingeschr\"{a}nkter Funktionsumpfang zur Verf\"{u}rung gestellt werden. Da sich \textit{VSMessageStub} im selben Paket wie \textit{VSMessage} befindet, kann \textit{VSMessageStub} auf paket-private Methoden von \textit{VSMessage} zugreifen. Protokolle hingegen werden in einem anderen Paket implementiert und haben somit keinen Zugriff auf diese paket-privaten Methoden. Zwar kann der Protokollentwickler ein eigenes \textit{VSMessageStub}-Objekt anlegen, jedoch kann er auf diese Weise besser unterscheiden, auf welche Mehhoden er zugreifen sollte und auf welche nicht. Das Protokoll-API wird sp\"{a}ter genauer behandelt. + +Der Task-Manager speichert anschlieend die Empfangsereignisse in den lokalen Warteschlangen der Empf\"{a}ngerprozesse. Die Nachricht kommt bei einem Empf\"{a}ngerprozess an, sobald das Ereignis f\"{u}r den Empfang eintritt. F\"{u}r die korrekte Implementierung der Lamport- und Vektor-Zeitstempel wird jeder Nachricht automatisch eine Referenz auf die Lamport- sowie auf die Vektorzeit des sendenden Prozesses als Attribut beigef\"{u}gt. F\"{u}r die \"{U}berpr\"{u}fung des Protokolls wird in jeder Nachricht auch der Klassenname des jeweiligen Protokolls abgespeichert. + +Eine Instanz von \textit{VSInternalProcess} repr\"{a}sentiert einen simulierten Prozess. Ein \textit{VSInternalProcess} stellt alle vom Simulator intern verwendeten Methoden zur Verf\"{u}gung, w\"{a}hrend ein \textit{VSAbstractProcess} lediglich Methoden hat, die man im Protokoll-API f\"{u}r die Erstellung eigener Protokolle verwenden darf. Da \textit{VSAbstractProcess} abstrakt ist und hiervon keine Instanz gebildet werden darf, muss f\"{u}r einen neuen Prozesses stets ein \textit{VSInternalProcess}-Objekt erstellt werden. Via Polymorphie wird dieses Objekt nach \textit{VSAbstractProcess} umgewandelt und so dem Protokoll-API zur Verf\"{u}gung gestellt. Beispielsweise darf mit \textit{getTasks()} nur vom Simulator intern auf die Priorit\"{a}ts-Warteschlangen zugegriffen werden, w\"{a}hrend man im Protokoll-API selbiges vermeiden sollte und auch gar nicht direkt m\"{o}glich ist. Hierf\"{u}r h\"{a}tte man auch ein Stub-Objekt \textit{VSProcessStub} verwenden k\"{o}nnen. Da aber so gut wie alle paar Millisekunden auf die Methoden von \textit{VSInternalProcess} zugegriffen wird, wurde hier aus Performancegr\"{u}nden der Weg \"{u}ber eine Vererbungungsstufe preferiert. + +Alle einstellbaren Prozessvariablen werden von der Klasse \textit{VSPrefs} vererbt. Damit bei Neuberechnungen die Variablen nicht dauernd \"{u}ber eine \textit{HashMap} von \textit{VSPrefs} zugregriffen werden mu, speichert \textit{VSInternalProcess} aus Performancegr\"{u}nden einige Variablen als lokale Kopie ab. Zum Beispiel wird f\"{u}r die lokale Prozesszeit nicht auf das \textit{HashMap}-Objekt von \textit{VSPrefs}, sondern auf das Klassenattribut \textit{private long localTime} zugegriffen. Vor- und nach dem Editieren \"{u}ber den Prozesseditor werden die \textit{VSPrefs} beziehungsweise die lokalen Kopien auf den neusten Stand gebracht. Selbiges gilt f\"{u}r weitere Variablen wie zum Beispiel der Uhrabweichung eines Prozesses. + +\subsection{Beispiel f\"{u}r die Erstellung von Prozessereignissen} + +Anhand der Prozessabsturz- und Wiederbelebungsereignisse l\"{a}t sich wie folgt sehr gut demonstieren, wie intern Ereignisse angelegt werden k\"{o}nnen: +\begin{code} +void createCrashAndRecoverExample(VSTaskManager taskManager, + VSInternalProcess process) { + VSAbstractEvent crashEvent = new VSProcessCrashEvent(); + VSTask localTask = new VSTask(process.getTime()+500, process, + crashEvent, VSTask.LOCAL); + taksManager.addTask(localTask); + + VSAbstractEvent recoverEvent = new VSProcessRecoverEvent(); + VSTask globalTask = new VSTask(2000, process, + recoverEvent, VSTask.GLOBAL); + taksManager.addTask(globalTask); +} +\end{code} + +In diesem Beispiel wurden zwei Ereignisse (Absturz- und Wiederbelebung eines gegebenen Prozesses) angelegt. Das Absturzereignis tritt bei der aktuellen lokalen Prozesszeit plus \textit{500ms} ein, w\"{a}hrend das Wiederbelebungsereignis bei einer globalen Zeit von \textit{2000ms} stattfindet. F\"{u}r den Fall, dass das Wiederbelebungsereignis vor dem Absturzereignis eintritt, wird es nicht ausgef\"{u}hrt, da der Prozess noch nicht abgest\"{u}rzt ist. + +\section{Protokolle} + +\subsection{Die Funktionsweise des Protokoll-APIs} + +\begin{figure}[h] + \centering + \includegraphics[width=12cm]{images/protocols} + \caption{Die Pakete \textit{protocols} und \textit{protocols.*}} + \label{fig:PackageProtocols} +\end{figure} + +In diesem Abschnitt wird auf die Implementierung der Protokolle eingegangen. Auf Abbildung \ref{fig:PackageProtocols} sind die Pakete \textit{protocols} und \textit{protocols.implementations} dargestellt, welche f\"{u}r die Protokollimplementierungen zust\"{a}ndig sind. \textit{VSAbstractProtocol} stellt lediglich gemeinsame Methoden und Attribute zur Verf\"{u}gung, die von allen Protokollen verwendet werden k\"{o}nnen. Jedes Protokoll hat im Paket \textit{protocols.implementations} seine eigene Klasse, die von \textit{VSAbstractProtocol} erbt. Wie bereits erw\"{a}hnt erbt \textit{VSAbstractProtocol} von \textit{VSAbstractEvent}, sodass jedes Protokoll auch als Ereignis (Server- beziehnungsweise Clientanfrage starten) eingesetzt werden kann. + +Jede Protokollklasse mu die folgenden Methoden implementieren: + +\begin{itemize} + \item Einen \"{o}ffentlichen (\textit{public}) Konstruktor. Der Konstruktor mu angeben, ob bei dem gegebene Protokoll der Client oder der Server die Anfragen startet. + \item \textit{abstract public void onClientInit()}: Bevor das Protokollobjekt benutzt werden kann, mu es initialisiert werden. Diese Methode wird vor dem ersten Verwenden des Protokolls innerhalb einer Simulation ausgef\"{u}hrt. In der Regel werden hier Protokollvariablen unter Verwendung von \textit{VSPrefs} und Attribute der Protokollklasse initialisiert. Die hier initialisierten Protokollvariablen lassen sich vom Benutzer im Prozesseditor des jeweiligen Prozesses editieren. + \item \textit{abstract public void onClientReset()}: Dese Methode wird jedes Mal ausgef\"{u}hrt, wenn die Simulation zur\"{u}ckgesetzt wird. + \item \textit{abstract public void onClientStart()}: Diese Methode wird nur ben\"{o}tigt, wenn der Client immer die Anfragen startet. Diese Methode generiert in der Regel immer eine Clientanfrage, die via \textit{VSMessage}-Objekt an alle beteiligten Prozesse verschickt wird. + \item \textit{abstract public void onClientRecv(VSMessage message)}: Diese Methode wird jedes Mal Ausgef\"{u}hrt, wenn eine Servernachricht \textit{message} bei dem Client eintrifft. + \item \textit{abstract public void onClientSchedule()}: Diese Methode wird jedes Mal ausgef\"{u}hrt, wenn ein Wecker-Ereignis eintritt. + \item \textit{public String toString()}: Diese Methode ist nur optional. Hiermit lassen sich die Loggnachrichten eines Protokolls anpassen. Wenn diese Methode in einer Protokollimplementierung ausgelassen wird, so wird stets die \textit{toString}-Methode der Mutterklasse \textit{VSAbstractProtocol} verwendet. +\end{itemize} + +F\"{u}r alle hier aufgelisteten Client-Methoden sind auch die korespondierenen Server-Methoden anzugeben. Die Server-Methoden sind analog zu den Client-Methoden aufgebaut. + +\subsection{Beispielimplementierung eines Protokolls} + +Im Folgenden wird die Implementierung des zuverl\"{a}ssigen Multicast-Protokolls \textit{VSReliableMulticastProtocol.java} als Beispiel aufgef\"{u}hrt. Die Funktionsweise des Protokolls wurde bereits in Kapitel 2.5.10 beschrieben. Client- und Serverseite werden in der selben Klasse implementiert. + +Im Konstruktor mu stets angegeben werden, ob beim gegebenen Protokoll der Client oder der Server die Anfragen startet. Mit \textit{HAS\_ON\_CLIENT\_START} wird dem API mitgeteilt, dass der Client die Anfragen startet. F\"{u}r \textit{HAS\_ON\_SERVER\_START} und Serveranfragen gilt Selbiges analog: + +\begin{code} +package protocols.implementations; + +import java.util.ArrayList; +import java.util.Vector; +import protocols.VSAbstractProtocol; +import core.VSMessage; + +public class VSReliableMulticastProtocol + extends VSAbstractProtocol { + public VSReliableMulticastProtocol() { + super(VSAbstractProtocol.HAS_ON_CLIENT_START); + setClassname(getClass().toString()); + } +\end{code} + +\subsubsection{Clientseite des Protokolls} + +Das private Klassenattribut \textit{pids} wird f\"{u}r die Zwischenspeicherung beteiligter PIDs ben\"{o}tigt. Hier sind alle PIDs abgelegt, von denen noch Best\"{a}tigungsnachrichten erwartet werden. Hier werden als Standard-PIDs \textit{1} und \textit{3} verwendet. Die Methoden \textit{initVector} und \textit{initLong} wurden von \textit{VSPrefs} vererbt und initialisieren die Protokollvariablen \textit{pids} und \textit{timeout}, welche vom Benutzer im Prozesseditor editiert werden k\"{o}nnen: +\begin{code} + private ArrayList pids; + + public void onClientInit() { + Vector vec = new Vector(); + vec.add(1); vec.add(3); + initVector("pids", vec, "PIDs beteilitger Prozesse"); + initLong("timeout", 2500, + "Zeit bis erneute Anfrage", "ms"); + } +\end{code} + +Wenn die Simulation zur\"{u}ckgesetzt wird, dann wird auch \textit{pids} reinitialisiert: +\begin{code} + public void onClientReset() { + pids.clear(); + pids.addAll(getVector("pids")); + } +\end{code} + +In \textit{onClientStart} wird gepr\"{u}ft, ob eine Clientanfrage gestartet werden soll. Wenn dies der Fall ist (wenn von mindestens einem beteiligten Prozess noch keine Best\"{a}tigung erhalten wurde), wird ein neues Nachrichtenobjekt erstellt, und mit dem Inhalt \textit{Boolean: isMulticast=true} verschickt (intern wird hier f\"{u}r jeden Empf\"{a}ngerprozess ein \textit{VSMessageReceiveEvent} erzeugt). Mit \textit{scheduleAt} wird ein Wecker festgelegt, zur welchen lokalen Prozesszeit die Methode \textit{onClientSchedule} aufgerufen werden soll (intern wird hier ein \textit{VSProtocolScheduleEvent} erzeugt): +\begin{code} + public void onClientStart() { + if (pids.size() != 0) { + long timeout = getLong("timeout") + process.getTime(); + scheduleAt(timeout); + + VSMessage message = new VSMessage(); + message.setBoolean("isMulticast", true); + sendMessage(message); + } + } +\end{code} + +Wenn eine Serverantwort eintrifft, dann wird \textit{onClientRecv} aufgerufen. Hier wird \"{u}berpr\"{u}ft, ob \"{u}berhaupt noch Multicast-Best\"{a}tigungen ben\"{o}tigt werden. Wenn dies der Fall ist, dann wird geschaut, ob es sich bei der Antwort um eine noch nicht eingetroffene Best\"{a}tigung handelt. Gegebenenfalls wird die jeweilige PID aus \textit{pids} entfernt. Wenn \textit{pids} leer ist, dann wurde von allen beteiligten Prozessen eine Best\"{a}tigung erhalten und der Client entfernt mit \textit{removeSchedules} alle seine derzeit programmierten Wecker. + +\begin{code} + public void onClientRecv(VSMessage recvMessage) { + if (pids.size() != 0 && recvMessage.getBoolean("isAck")) { + Integer pid = recvMessage.getIntegerObj("pid"); + + if (pids.contains(pid)) + pids.remove(pid); + else + return; + + logg("ACK von Prozess " + pid + " erhalten!"); + + if (pids.size() == 0) { + logg("ACKs von allen beteiligten Prozessen " + + "erhalten!"); + + removeSchedules(); + } + } + } +\end{code} + +F\"{u}r das erneute Verschicken einer Clientanfrage ruft \textit{onClientSchedule} lediglich die Methode \textit{onClientStart} auf, die wiederum einen neuen Wecker planen kann: +\begin{code} + public void onClientSchedule() { + onClientStart(); + } +\end{code} + +\subsubsection{Serverseite des Protokolls} + +Die Serverseite des Protokolls speichert im Attribut \textit{ackSent} ab, ob es bereits eine Best\"{a}tigung des Multicasts verschickt hat oder nicht. In diesem Protokoll werden in \textit{onServerInit} keine Initialisierungen vorgenommen. Demach gibt es f\"{u}r den Benutzer auch keine serverseitigen Protokollvariablen zu editieren. Beim Zur\"{u}cksetzen der Simulation wird lediglich \textit{ackSent} auf den Ursprungswert gesetzt: +\begin{code} + private boolean ackSent; + + public void onServerInit() { } + + public void onServerReset() { + ackSent = false; + } +\end{code} + +Wenn der Server eine Clientanfrage erhalten hat, so \"{u}berpr\"{u}ft der Server, ob es sich um eine Multicast-Nachricht handelte. Anschlieend wird gegebenenfalls die Best\"{a}tigungsnachricht mit \textit{Boolean: isAck=true} und der Server-PID verschickt. Jenachdem ob bereits eine Best\"{a}tigung verschickt wurde oder nicht wird eine andere Nachricht geloggt: +\begin{code} + public void onServerRecv(VSMessage recvMessage) { + if (recvMessage.getBoolean("isMulticast")) { + VSMessage message = new VSMessage(); + message.setBoolean("isAck", true); + message.setInteger("pid", process.getProcessID()); + sendMessage(message); + + if (ackSent) { + logg("ACK erneut versendet"); + } else { + logg("ACK versendet"); + ackSent = true; + } + } + } +\end{code} + +Der Server benutzt in diesem Beispiel keinen Wecker. Dementsprechend hat die Methode \textit{onServerSchedule} auch einen leeren Rumpf: +\begin{code} + public void onServerSchedule() { } +} +\end{code} + +\subsection{Erstellung eigener Protokolle} + +\section{GUI} + +\section{Serialisierung von Simulationen} + +\subsection{R\"{u}ckw\"{a}rtskompatibel} + +\section{Weiteres} + +exceptions, utils + +\section{Entwicklungsumgebung} + +In diesem Teilkapitel soll ein kleiner Einblick in die Umgebung, in der der Simulator entwickelt wurde, gew\"{a}hrt werden. F\"{u}r diese Diplomarbeit wurde ausschlielich Open Source Software verwendet. Die einzige Ausnahme stellt Microsoft Windows XP dar, worauf der Simulator zus\"{a}tzlich getestet wurde. Der Simulator wurde jedoch haupts\"{a}chlich unter dem Betriebssystem FreeBSD 7.0, was ein open source Unix-Derivat ist, programmiert. + +Wie bereits bekannt ist, wurde Sun's Java, was mittlerweile auch Open Source Software ist, in der Version 6 (1.6) als die Implementierungssprache gew\"{a}hlt und f\"{u}r die Quelltextdokumentation kam Javadoc und f\"{u}r die automatische Quelltexteinr\"{u}ckung astyle zum Einsatz. Als Built-Tool wurde hier auf Apache Ant gesetzt. F\"{u}r die Erstellung dieses PDF-Dokumentes wurde LaTeX in Verbindung mit dem Built-Tool GNU Make und Rubber verwendet. Eine Rechtschreib\"{u}berpr\"{u}fung wurde mit aspell durchgef\"{u}hrt. xPDF diente als PDF-Anzeigeprogramm. + +Als Versionierungssystem wurde SVN (Subversion) verwendet. F\"{u}r den Zugriff auf das SVN-Repository mittels HTTPS (Hypertext Transfer Protocol Secure) wurde der Apache-Websever mit WebDAV-Plugin verwendet. Zudem kam WebSVN als Webschnitstelle des SVN-Repositories zum Einsatz. Als SSL Zertifikat diente ein Kostenloses von CaCert (\url{http://www.CaCert.org}). Mozilla Firefox diente f\"{u}r das Betrachten der Javadocs und der WebSVN-Oberfl\"{a}che. + +F\"{u}r schreiben von Java-Quelltext wurde GVim (Graphical Vi IMproved) sowie Eclipse verwendet. Eclipse unterst\"{u}tzt bessere Code-Refactoring-Methoden, w\"{a}hrend GVim mit seiner Flexibilit\"{a}t und schnelleren Editierm\"{o}glichkeiten und mit Vim-Script, der eigenen Script-Engine, gl\"{a}nzt. Es wurden ausserdem das JAutoDoc- (f\"{u}r die Erstellung von Javadoc-Kommentate) und das Subversion-Eclipse-Plugin verwendet. Je nach Zweck wurde zwischen diesen beiden Umgebungen gewechselt. F\"{u}r das Verfassen des LaTeX-Dokumentes wurde GVim verwendet. + +S\"{a}mtliche UML-Diagramme wurden mit ArgoUML angefertigt und die Screenshots mit The GIMP (GNU Image Manipulation Program) sowie ImageMagick nachbearbeitet. Mit zip wurden alle VS-Simulator Distributionen eingepackt. + +\subsubsection{Linkliste der verwendeten Software} + +\begin{itemize} + \setlength{\itemsep}{-2mm} + \item Apache Webserver - \url{http://httpd.apache.org} + \item ArgoUML - \url{http://argouml.tigris.org} + \item Eclipse - \url{http://www.eclipse.org} + \item FreeBSD - \url{http://www.FreeBSD.org} + \item GNU Make - \url{http://www.gnu.org/software/make} + \item GVim - \url{http://www.vim.org} + \item ImageMagick - \url{http://www.imagemagick.org} + \item Javadoc - \url{http://java.sun.com/j2s2/javadoc} + \item Mozilla Firefox - \url{http://www.mozilla.com} + \item Rubber - \url{http://www.pps.jussieu.fr/~beffara/soft/rubber} + \item Sun Java - \url{http://java.sun.com} + \item The GIMP - \url{http://www.gimp.org} + \item WebDAV - \url{http://httpd.apache.org/docs/2.0/mod/mod\_dav.html} + \item WebSVN - \url{http://websvn.tigris.org} + \item aspell - \url{http://aspell.sourceforge.net} + \item astyle - \url{http://astyle.sourceforge.net} + \item xPDF - \url{http://www.foolabs.com/xpdf} + \item zip - \url{http://www.info-zip.org/Zip.html} +\end{itemize} + diff --git a/LaTeX/chapters/introduction.tex b/LaTeX/chapters/introduction.tex index 9e2f2df..5cd6eb8 100644 --- a/LaTeX/chapters/introduction.tex +++ b/LaTeX/chapters/introduction.tex @@ -6,18 +6,11 @@ In der Literatur findet man viele verschiedene Definitionen eines verteilten Sys \cite{Tanenbaum} \textit{``Ein verteiltes System ist eine Menge voneinander unabh\"{a}ngiger Computer, die dem Anwender wie ein einzelnes, koh\"{a}rentes System erscheinen''} -Der Anwender muss sich nur mit dem lokalen vor ihm befindenden Computer auseinandersetzen (Abbildung \ref{fig:VerteiltesSystem}) w\"{a}hrend die Software des lokalen Computers die reibungslose Kommunikation mit den anderen beteiligten Computern des verteilten Systems sicherstellt. +Der Anwender muss sich nur mit dem lokalen vor ihm befindenden Computer auseinandersetzen, w\"{a}hrend die Software des lokalen Computers die reibungslose Kommunikation mit den anderen beteiligten Computern des verteilten Systems sicherstellt. -Diese Diplomarbeit soll den Gebrauchern die Betrachtung von verteilten Systemen aus einer anderen Perspektive erleichtern. Es soll nicht die Sichtweise eines Endbenutzers eingenommen werden, sondern es sollen die Funktionsweisen von Protokollen und deren Prozesse in verteilten Systemen begreifbar gemacht werden. Es sollen alle relevanten Ereignisse eines verteilten Systems transparent dargestellt werden k\"{o}nnen. +Diese Diplomarbeit soll den Gebrauchern die Betrachtung von verteilten Systemen aus einer anderen Perspektive erleichtern. Es soll nicht die Sichtweise eines Endbenutzers eingenommen werden, sondern es sollen die Funktionsweisen von Protokollen und deren Prozesse in verteilten Systemen begreifbar gemacht werden. Es sollen relevante Ereignisse eines verteilten Systems transparent dargestellt werden k\"{o}nnen. -Um dieses Ziel zu erreichen soll ein Simulator entwickelt werden, der dies erm\"{o}glicht. Der Simulator soll insbesondere f\"{u}r Lehr- und Lernzwecke an der Fachhochschule Aachen entwickelt werden. Beispielsweise sollen Protokolle aus den verteilten Systemen mit ihren wichtigsten Einflussfaktoren simuliert werden k\"{o}nnen. Der Simulator soll zu verstehen helfen wie die gegebenen Protokolle funktionieren und es soll viel Spielraum f\"{u}r eigene Experimente zur Verf\"{u}gung stehen. Der Simulator soll nicht auf eine feste Anzahl von Protokollen beschr\"{a}nkt sein. Es muss daher dem Gebraucher erm\"{o}glicht werden, eigene Protokolle zu entwerfen. - -\begin{figure}[htbp] - \centering - \fbox{\includegraphics{images/verteiltes-system}} - \caption{Ein verteiltes System bestehend aus 4 Computern} - \label{fig:VerteiltesSystem} -\end{figure} +Um dieses Ziel zu erreichen soll ein Simulator entwickelt werden. Der Simulator soll insbesondere f\"{u}r Lehr- und Lernzwecke an der Fachhochschule Aachen entwickelt werden. Beispielsweise sollen Protokolle aus den verteilten Systemen mit ihren wichtigsten Einflussfaktoren simuliert werden k\"{o}nnen. Der Simulator soll zu verstehen helfen wie die gegebenen Protokolle funktionieren und es soll viel Spielraum f\"{u}r eigene Experimente zur Verf\"{u}gung stehen. Der Simulator soll nicht auf eine feste Anzahl von Protokollen beschr\"{a}nkt sein. Es muss daher dem Gebraucher erm\"{o}glicht werden, eigene Protokolle zu entwerfen. \section{Grundlagen} @@ -32,7 +25,7 @@ F\"{u}r das Grundverst\"{a}ndnis werden im Folgenden einige Grundlagen erl\"{a}u \label{fig:ClientServer} \end{figure} -Der Simulator basiert auf dem Client/Server Prinzip. Jeder Simulation besteht in der Regel aus einen teilnehmenden Client und einen Server, die miteinander \"{u}ber Nachrichten kommunizieren (Abbildung \ref{fig:ClientServer}). Bei komplexen Simulationen k\"{o}nnen auch mehrere Clients und/oder Server mitwirken. In der Regel empfangen Server nur Nachrichten, die von Clients verschickt wurden und virce versa. +Der Simulator basiert auf dem Client/Server Prinzip. Jeder Simulation besteht in der Regel aus einen teilnehmenden Client und einen Server, die miteinander \"{u}ber Nachrichten kommunizieren (Abbildung \ref{fig:ClientServer}). Bei komplexen Simulationen k\"{o}nnen auch mehrere Clients und/oder Server mitwirken. \subsubsection{Prozesse und deren Rollen} @@ -46,16 +39,20 @@ In einem verteiltem System m\"{u}ssen Nachrichten verschickt werden k\"{o}nnen. In einer Simulation gibt es \textbf{genau eine} globale Uhr. Sie stellt die aktuelle und \textbf{immer korrekte} Zeit dar. Eine globale Uhr geht nie falsch. -Zudem besitzt jeder beteiligter Prozess eine eigene lokale Uhr. Sie stellt die aktuelle Zeit des jeweiligen Prozesses dar. Im Gegensatz zu der globalen Uhr k\"{o}nnen lokale Uhren eine falsche Zeit anzeigen. Wenn die Prozesszeit nicht global-korrekt ist (nicht der globalen Zeit gleicht beziehungsweise eine falsche Zeit anzeigt), dann wurde sie entweder im Laufe einer Simulation neu gestellt, oder sie geht wegen einer Uhrabweichung falsch. Die Uhrabweichung gibt an, um welchen Faktor die Uhr falsch geht. Hierauf wird sp\"{a}ter genauer eingegangen. +\begin{figure}[htbp] + \centering + \includegraphics{images/client-server-protokolle} + \caption{Client/Server Protokolle} + \label{fig:ClientServerProtokolle} +\end{figure} -Neben den normalen Uhren sind auch die \textbf{Vektor-Zeitstempel} sowie die \textbf{logischen Uhren von Lamport} von Interesse. Jeder Prozess besitzt zus\"{a}tzlich einen Vektor-Zeitstempel f\"{u}r seine Vektorzeit, sowie einen Lamportzeitstempel f\"{u}r seine Lamportzeit. F\"{u}r die Vektor- und Lamportzeiten gibt es hier, im Gegensatz zu der normalen Zeit, keine globalen \"{A}quivalente. +Zudem besitzt jeder beteiligter Prozess eine eigene lokale Uhr. Sie stellt die aktuelle Zeit des jeweiligen Prozesses dar. Im Gegensatz zu der globalen Uhr k\"{o}nnen lokale Uhren eine falsche Zeit anzeigen. Wenn die Prozesszeit nicht global-korrekt ist (nicht der globalen Zeit gleicht beziehungsweise eine falsche Zeit anzeigt), dann wurde sie entweder im Laufe einer Simulation neu gestellt, oder sie geht wegen einer Uhrabweichung falsch. Die Uhrabweichung gibt an, um welchen Faktor die Uhr falsch geht. Hierauf wird sp\"{a}ter genauer eingegangen. -Konkrete Beispiele zu den Lamport- und Vektorzeiten werden sp\"{a}ter anhand einer Simulation behandelt. +Neben den normalen Uhren sind auch die Vektor-Zeitstempel sowie die logischen Uhren von Lamport von Interesse. Jeder Prozess besitzt zus\"{a}tzlich einen Vektor-Zeitstempel f\"{u}r seine Vektorzeit, sowie einen Lamportzeitstempel f\"{u}r seine Lamportzeit. F\"{u}r die Vektor- und Lamportzeiten gibt es hier, im Gegensatz zu der normalen Zeit, keine globalen \"{A}quivalente. Konkrete Beispiele zu den Lamport- und Vektorzeiten werden sp\"{a}ter anhand einer Simulation behandelt. \subsubsection{Ereignisse} -Eine Simulation besteht aus der Hintereinanderausf\"{u}hrung von endlich vielen Ereignissen. Beispielsweise kann es ein Ereignis geben, welches einen Prozess eine Nachricht verschicken l\"{a}sst. Denkbar w\"{a}re auch ein Prozessabsturzereignis. Jedes Ereignis tritt zu einem bestimmten Zeitpunkt ein. Wenn es zeitgleiche Ereignisse gibt, so werden sie in Wirklichkeit ebenso hintereinander ausgef\"{u}hrt, erscheinen aber in der Simulation als ob sie parallel ausgef\"{u}hrt w\"{u}rden. Dieser Umstand ist auf die Implementierung des Simulators zur\"{u}ckzuf\"{u}hren, worauf sp\"{a}ter noch genauer eingegangen wird. Den Anwender des Simulators hindert dies jedoch nicht, da Ereignisse aus seiner Sicht parallel ausgef\"{u}hrt werden. - +Eine Simulation besteht aus der Hintereinanderausf\"{u}hrung von endlich vielen Ereignissen. Beispielsweise kann es ein Ereignis geben, welches einen Prozess eine Nachricht verschicken l\"{a}sst. Denkbar w\"{a}re auch ein Prozessabsturzereignis. Jedes Ereignis tritt zu einem bestimmten Zeitpunkt ein. Ereignisse mit selber Eintrittszeit werden vom Simulator direkt hintereinander ausgef\"{u}hrt. Den Anwendern des Simulators hindert dies jedoch nicht, da Ereignisse aus seiner Sicht parallel ausgef\"{u}hrt werden k\"{o}nnen. \subsubsection{Protokolle} @@ -65,10 +62,4 @@ In Abbildung \ref{fig:ClientServerProtokolle} sind 3 Prozesse dargestellt. Proze Clients k\"{o}nnen nicht mit Clients, und Server nicht mit Server kommunizieren. F\"{u}r eine Kommunikation wird stets mindestens ein Client und ein Server ben\"{o}tigt. Diese Einschr\"{a}nkung kann aber umgangen werden, indem Prozesse ein gegebenes Protokoll sowohl server- als auch clientseitig unterst\"{u}tzen (siehe Broadcast-Sturm Protokoll sp\"{a}ter). Alle vom Simulator verf\"{u}gbaren Protokolle werden sp\"{a}ter genauer behandelt. -\begin{figure}[htbp] - \centering - \includegraphics{images/client-server-protokolle} - \caption{Client/Server Protokolle} - \label{fig:ClientServerProtokolle} -\end{figure} diff --git a/LaTeX/chapters/simulator.tex b/LaTeX/chapters/simulator.tex index 3b3d0ea..a22d71e 100644 --- a/LaTeX/chapters/simulator.tex +++ b/LaTeX/chapters/simulator.tex @@ -2,29 +2,29 @@ \section{Die grafische Benutzeroberfl\"{a}che (GUI)} -\begin{figure}[htbp] +\begin{figure}[h] \centering - \fbox{\includegraphics[width=14cm]{images/ss-neues-fenster}} + \fbox{\includegraphics[width=12cm]{images/ss-neues-fenster}} \caption{Der Simulator nach dem ersten Starten} \label{fig:NeuesFenster} \end{figure} -Der Simulator l\"{a}t sich mit dem Befehl \textit{java -jar VS-Sim.jar} starten und pr\"{a}sentiert sich nach dem ersten Starten wie auf Abbildung \ref{fig:NeuesFenster}. F\"{u}r die Erstellung einer neuen Simulation wird im Men\"{u} ``Datei'' (Abbildung \ref{fig:DateiMenue}) der Punkt ``Neue Simulation'' ausgew\"{a}hlt, wo anschlieend das Einstellungsfenster f\"{u}r die neue Simulation erscheint. Auf die einzelnen Optionen wird sp\"{a}ter genauer eingegangen und es werden nun nur die Standardeinstellungen \"{u}bernommen. Die GUI mit einer frischen Simulation sieht aus wie auf Abbildung \ref{fig:NeuErstellteSimulation}. +Der Simulator l\"{a}t sich mit dem Befehl \textit{java -jar VS-Sim.jar} starten und pr\"{a}sentiert sich danach wie auf Abbildung \ref{fig:NeuesFenster}. F\"{u}r die Erstellung einer neuen Simulation wird im Men\"{u} ``Datei'' (Abbildung \ref{fig:DateiMenue}) der Punkt ``Neue Simulation'' ausgew\"{a}hlt, wo anschlieend das Einstellungsfenster f\"{u}r die neue Simulation erscheint. Auf die einzelnen Optionen wird sp\"{a}ter genauer eingegangen und es werden nun nur die Standardeinstellungen \"{u}bernommen. Die GUI mit einer frischen Simulation sieht aus wie auf Abbildung \ref{fig:NeuErstellteSimulation}. -\begin{figure}[htbp] +\subsubsection{Die Men\"{u}zeile} + +Im Datei-Men\"{u} (Abbildung \ref{fig:DateiMenue}) lassen sich neue Simulationen erstellen oder die aktuell ge\"{o}ffnete Simulation schlieen. Neue Simulationen \"{o}ffnen sich standardm\"{a}ig in einem neuen Tab. Es k\"{o}nnen allerdings auch neue Simulationsfenster, die wiederum eigene Tabs besitzen, ge\"{o}ffnet oder geschlossen werden. In jedem Tab befindet sich eine von den Anderen vollst\"{a}ndig unabh\"{a}ngige Simulation. Es k\"{o}nnen somit beliebig viele Simulationen parallel ausgef\"{u}hrt werden. Die Men\"{u}eintr\"{a}ge ``\"{O}ffnen'', ``Speichern'' und ``Speichern unter'' dienen f\"{u}r das Laden und Speichern von Simulationen. + +\begin{figure}[h] \centering \fbox{\includegraphics[width=6.5cm]{images/ss-datei-menu}} \caption{Datei-Men\"{u}} \label{fig:DateiMenue} \end{figure} -\subsubsection{Die Men\"{u}zeile} - -Im Datei-Men\"{u} (Abbildung \ref{fig:DateiMenue}) lassen sich neue Simulationen erstellen oder die aktuell ge\"{o}ffnete Simulation schlieen. Neue Simulationen \"{o}ffnen sich standardm\"{a}ig in einem neuen Tab. Es k\"{o}nnen allerdings auch neue Simulationsfenster, die wiederum eigene Tabs besitzen, ge\"{o}ffnet oder geschlossen werden. In jedem Tab befindet sich eine von den Anderen vollst\"{a}ndig unabh\"{a}ngige Simulation. Es k\"{o}nnen somit beliebig viele Simulationen parallel ausgef\"{u}hrt werden. Die Men\"{u}eintr\"{a}ge ``\"{O}ffnen'', ``Speichern'' und ``Speichern unter'' dienen f\"{u}r das Laden und Speichern von Simulationen. - -\begin{figure}[htbp] +\begin{figure}[h] \centering - \fbox{\includegraphics[width=14cm]{images/ss-neue-simulation}} + \fbox{\includegraphics[width=12cm]{images/ss-neue-simulation}} \caption{Eine neue Simulation} \label{fig:NeuErstellteSimulation} \end{figure} @@ -37,51 +37,51 @@ Einige Men\"{u}unterpunkte sind erst erreichbar, wenn im aktuellen Fenster berei Oben links im Simulator befindet sich die Toolbar (Abbildung \ref{fig:Toolbar}). Die Toolbar enth\"{a}lt die Funktionen die vom Anwender am h\"{a}ufigsten ben\"{o}tigt werden. -\begin{figure}[htbp] +Die Toolbar bietet vier verschiedene Funktionen an: + +\begin{figure}[h] \centering \fbox{\includegraphics[width=5cm]{images/ss-neue-simulation-toolbar}} \caption{Die Men\"{u}zeile inklusive Toolbar} \label{fig:Toolbar} \end{figure} -Die Toolbar bietet vier verschiedene Funktionen an: - \begin{itemize} %\setlength{\itemsep}{-1mm} \item Zur\"{u}cksetzen der Simulation; kann nur bet\"{a}tigt werden, wenn die Simulation pausiert wurde oder wenn die Simulation abgelaufen ist. \item Wiederholen der Simulation; kann nicht bet\"{a}tigt werden, wenn die Simulation noch nicht gestartet wurde. \item Pausieren der Simulation; kann nur bet\"{a}tigt werden, wenn die Simulation derzeit l\"{a}uft. - \item Starten der Simulation; kann nur bet\"{a}tigt werden, wenn die Simulation derzeit nicht l\"{a}uft. + \item Starten der Simulation; kann nur bet\"{a}tigt werden, wenn die Simulation derzeit nicht l\"{a}uft und noch nicht abgelaufen ist. \end{itemize} -Die Toolbar l\"{a}sst sich nach Wunsch repositionieren (z.B. links, rechts oder unten des Simulatorfensters). Hierf\"{u}r muss sie per ``Drag-n-Drop'' zur Zielposition gezogen werden. - +\newpage \subsubsection{Die Visualisierung} -\begin{figure}[htbp] +\begin{figure}[h] \centering - \fbox{\includegraphics[width=14cm]{images/ss-visualisierung}} + \fbox{\includegraphics[width=12cm]{images/ss-visualisierung}} \caption{Visualisierung einer noch nicht gestarteten Simulation} \label{fig:Visualisierung} \end{figure} -Mittig rechts befindet sich die grafische Simulationsvisualisierung. Die X-Achse gibt die Zeit in Millisekunden an und auf der Y-Achse sind alle beteiligten Prozesse aufgef\"{u}hrt. Unsere Demo-Simulation endet nach genau 15 Sekunden. Auf Abbildung \ref{fig:Visualisierung} sind 3 Prozesse (mit den PIDs 1, 2 und 3) dargestellt, die jeweils einen eigenen horizontalen schwarzen Balken besitzen. Auf diesen Prozessbalken kann der Anwender die jeweilige lokale Prozesszeit ablesen. Die vertikale rote Linie stellt die globale Simulationszeit dar. - -Die Prozessbalken dienen auch f\"{u}r Start- und Zielpunkte von Nachrichten. Wenn beispielsweise Prozess 1 eine Nachricht an Prozess 2 verschickt, so wird eine Linie vom einen Prozessbalken zum Anderen gezeichnet. Nachrichten, die ein Prozess an sich selbst schickt, werden nicht visualisiert. Sie werden aber im Loggfenster (mehr dazu sp\"{a}ter) protokolliert. - -Eine andere M\"{o}glichkeit einen Prozesseditor aufzurufen ist ein Linksklick auf den zum Prozess geh\"{o}rigen Prozessbalken. Dies muss also nicht immer \"{u}ber das Simulator-Men\"{u} geschehen. Ein Rechtsklick hingegen \"{o}ffnet ein Popup-Fenster mit weiteren Auswahlm\"{o}glichkeiten (Abbildung \ref{fig:RechtsklickProzessbalken}). Ein Prozess kann \"{u}ber das Popup-Men\"{u} nur w\"{a}hrend einer laufenden Simulation zu einem Absturz oder einer Wiederbelebung bewegt werden. +Mittig rechts befindet sich die grafische Simulationsvisualisierung. Die X-Achse gibt die Zeit in Millisekunden an und auf der Y-Achse sind alle beteiligten Prozesse aufgef\"{u}hrt. Die Demo-Simulation endet nach genau 15 Sekunden. Auf Abbildung \ref{fig:Visualisierung} sind 3 Prozesse (mit den PIDs 1, 2 und 3) dargestellt, die jeweils einen eigenen horizontalen schwarzen Balken besitzen. Auf diesen Prozessbalken kann der Anwender die jeweilige lokale Prozesszeit ablesen. Die vertikale rote Linie stellt die globale Simulationszeit dar. -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=8.8cm]{images/ss-rechtsklick-prozessbalken}} \caption{Rechtsklick auf einen Prozessbalken} \label{fig:RechtsklickProzessbalken} \end{figure} +Die Prozessbalken dienen auch f\"{u}r Start- und Zielpunkte von Nachrichten. Wenn beispielsweise Prozess 1 eine Nachricht an Prozess 2 verschickt, so wird eine Linie vom einen Prozessbalken zum Anderen gezeichnet. Nachrichten, die ein Prozess an sich selbst verschickt, werden nicht visualisiert. Sie werden aber im Loggfenster (mehr dazu sp\"{a}ter) protokolliert. + +Eine andere M\"{o}glichkeit einen Prozesseditor aufzurufen ist ein Linksklick auf den zum Prozess geh\"{o}rigen Prozessbalken. Dies muss also nicht immer \"{u}ber das Simulator-Men\"{u} geschehen. Ein Rechtsklick hingegen \"{o}ffnet ein Popup-Fenster mit weiteren Auswahlm\"{o}glichkeiten (Abbildung \ref{fig:RechtsklickProzessbalken}). Ein Prozess kann \"{u}ber das Popup-Men\"{u} nur w\"{a}hrend einer laufenden Simulation zu einem Absturz oder einer Wiederbelebung bewegt werden. + Generell kann die Anzahl der Prozesse nach belieben variieren. Die Dauer der Simulation betr\"{a}gt mindestens \textit{5} und h\"{o}chstens \textit{120} Sekunden. Die Simulation endet erst, wenn sie die globale Zeit die angegebene Simulationsendzeit (hier \textit{15} Sekunden) erreicht hat, und nicht, wenn eine lokale Prozesszeit diese Endzeit erreicht. \subsubsection{Farbliche Differenzierung} + Farben helfen dabei die Vorg\"{a}nge einer Simulation besser zu deuten. Standardm\"{a}ig werden die Prozesse (Prozessbalken) und Nachrichten mit den Farben wie in Tabelle \ref{tb:Farben} aufgelistet dargestellt. Dies sind lediglich die Standardfarben, welche \"{u}ber die Einstellungen ge\"{a}ndert werden k\"{o}nnen. \begin{table} @@ -108,20 +108,28 @@ Farben helfen dabei die Vorg\"{a}nge einer Simulation besser zu deuten. Standard \label{tb:Farben} \end{table} +\newpage \subsubsection{Die Sidebar} -Mithilfe der Sidebar lassen sich Prozessereignisse programmieren. Oben auf Abbildung \ref{fig:Sidebar} ist der zu verwaltende Prozess selektiert (hier mit der PID 1). In dieser Prozessauswahl gibt es auch die M\"{o}glichkeit ``Alle Prozesse'' auszuw\"{a}hlen, womit die Ereignisse aller Prozesse gleichzeitig verwaltet werden k\"{o}nnen. Unter ``Lokale Ereignisse'' versteht man diejenigen Ereignisse, die auftreten, wenn eine bestimmte lokale Zeit des dazugeh\"{o}rigen Prozesses eingetreten ist. Die darunterliegende Ereignistabelle listet alle programmierten Ereignisse (hier noch keine vorhanden) mitsamt Eintrittszeiten sowie den PIDs auf. - -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=9cm]{images/ss-sidebar}} \caption{Die Sidebar mit leerem Ereigniseditor} \label{fig:Sidebar} \end{figure} -F\"{u}r die Erstellung eines neuen Ereignisses kann der Anwender entweder mit einem Rechtsklick auf einen Prozessbalken (Abbildung \ref{fig:RechtsklickProzessbalken}) klicken und dort ``Lokales Ereignis einf\"{u}gen'' w\"{a}hlen, oder unterhalb der Ereignistabelle ein Ereignis ausw\"{a}hlen (Abbildung \ref{fig:Ereignisauswahl}), im darunter liegendem Textfeld die Ereigniseintrittszeit eintragen und auf ``\"{U}bernehmen'' gehen. Beispielsweise wurden auf Abbildung \ref{fig:SidebarMitEreignissen} drei Ereignisse hinzugef\"{u}gt: Absturz nach \textit{123ms}, Wiederbelebung nach \textit{321ms} und erneuter Absturz nach \textit{3000ms} des Prozesses mit der ID 1. +Mithilfe der Sidebar lassen sich Prozessereignisse programmieren. Oben auf Abbildung \ref{fig:Sidebar} ist der zu verwaltende Prozess selektiert (hier mit der PID 1). In dieser Prozessauswahl gibt es auch die M\"{o}glichkeit ``Alle Prozesse'' auszuw\"{a}hlen, womit die Ereignisse aller Prozesse gleichzeitig verwaltet werden k\"{o}nnen. Unter ``Lokale Ereignisse'' versteht man diejenigen Ereignisse, die auftreten, wenn eine bestimmte lokale Zeit des dazugeh\"{o}rigen Prozesses eingetreten ist. Die darunterliegende Ereignistabelle listet alle programmierten Ereignisse (hier noch keine vorhanden) mitsamt Eintrittszeiten sowie den PIDs auf. -\begin{figure}[htbp] +\begin{figure}[h] + \centering + \fbox{\includegraphics[width=9cm]{images/ss-sidebar-mit-ereignissen}} + \caption{Der Ereigniseditor mit 3 programmierten Ereignissen} + \label{fig:SidebarMitEreignissen} +\end{figure} + +F\"{u}r die Erstellung eines neuen Ereignisses kann der Anwender entweder mit einem Rechtsklick auf einen Prozessbalken (Abbildung \ref{fig:RechtsklickProzessbalken}) klicken und dort ``Lokales Ereignis einf\"{u}gen'' w\"{a}hlen, oder unterhalb der Ereignistabelle ein Ereignis ausw\"{a}hlen (Abbildung \ref{fig:Ereignisauswahl}), im darunter liegenden Textfeld die Ereigniseintrittszeit eintragen und auf ``\"{U}bernehmen'' gehen. Beispielsweise wurden auf Abbildung \ref{fig:SidebarMitEreignissen} drei Ereignisse hinzugef\"{u}gt: Absturz nach \textit{123ms}, Wiederbelebung nach \textit{321ms} und erneuter Absturz nach \textit{3000ms} des Prozesses mit der ID 1. + +\begin{figure}[h] \centering \fbox{\includegraphics[width=9cm]{images/ss-ereignisauswahl}} \caption{Die Ereignisauswahl via Sidebar} @@ -132,45 +140,32 @@ Mit einem Rechtsklick auf den Ereigniseditor lassen sich alle selektierten Ereig In der Sidebar gibt es neben dem Ereignis-Tab einen weiteren Tab ``Variablen''. Hinter diesem Tab verbirgt sich der Prozesseditor des aktuell ausgew\"{a}hlten Prozesses. Dort k\"{o}nnen alle Variablen des Prozesses editiert werden und ist somit eine weitere M\"{o}glichkeit einen Prozesseditor aufzurufen. Der Prozesseditor wird sp\"{a}ter genauer behandelt. -\begin{figure}[htbp] - \centering - \fbox{\includegraphics[width=9cm]{images/ss-sidebar-mit-ereignissen}} - \caption{Der Ereigniseditor mit 3 programmierten Ereignissen} - \label{fig:SidebarMitEreignissen} -\end{figure} \subsubsection{Das Loggfenster} -Das Loggfenster (Abbildung \ref{fig:NeuErstellteSimulation}, unten) protokolliert in chronologischer Reihenfolge alle eingetroffenen Ereignisse. Auf Abbildung \ref{fig:Loggfenster} ist das Loggfenster nach Erstellung der Demo-Simulation zu sehen, an welcher 3 Prozesse beteiligt sind. Am Anfang eines Loggeintrages wird stets die globale Zeit in Millisekunden protokolliert. Bei jedem Prozess werden ebenso seine lokale Zeiten sowie die Lamport- und die Vektor-Zeitstempel aufgef\"{u}hrt. Letztere werden sp\"{a}ter genauer behandelt. Hinter den Zeitangaben werden weitere Angaben, wie beispielsweise welche Nachricht mit welchem Inhalt verschickt wurde und welchem Protokoll sie angeh\"{o}rt, gemacht. Dies wird sp\"{a}ter noch anhand von Beispielen demonstriert. - -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=16.5cm]{images/ss-loggfenster}} \caption{Das Loggfenster} \label{fig:Loggfenster} \end{figure} -Mit dem Deaktivieren der Checkbox ``Logging'' l\"{a}t sich das Loggen von Nachrichten tempor\"{a}r einstellen. Mit deaktiviertem Loggen werden keine neuen Nachrichten mehr ins Loggfenster geschrieben. Nach Reaktivieren der Checkbox werden alle ausgelassenen Nachrichten nachtr\"{a}glich in das Fenster geschrieben. Ein deaktiviertes Loggen kann zu verbessertem Leistungsverhalten des Simulators f\"{u}hren (z.B. kein Rucklen; ist vom verwendeten Computer, auf dem der Simulator l\"{a}uft, abh\"{a}ngig). Dieser Umstand ist der sehr langsamen Java-Implementierung der JTextArea-Klasse zu verdanken, die schnelle Updates nur sehr tr\"{a}ge durchf\"{u}hrt. +Das Loggfenster (Abbildung \ref{fig:NeuErstellteSimulation}, unten) protokolliert in chronologischer Reihenfolge alle eingetroffenen Ereignisse. Auf Abbildung \ref{fig:Loggfenster} ist das Loggfenster nach Erstellung der Demo-Simulation zu sehen, an welcher 3 Prozesse beteiligt sind. Am Anfang eines Loggeintrages wird stets die globale Zeit in Millisekunden protokolliert. Bei jedem Prozess werden ebenso seine lokale Zeiten sowie die Lamport- und die Vektor-Zeitstempel aufgef\"{u}hrt. Letztere werden sp\"{a}ter genauer behandelt. Hinter den Zeitangaben werden weitere Angaben, wie beispielsweise welche Nachricht mit welchem Inhalt verschickt wurde und welchem Protokoll sie angeh\"{o}rt, gemacht. Dies wird sp\"{a}ter noch anhand von Beispielen demonstriert. + +Mit dem Deaktivieren des Logging-Schalters l\"{a}t sich das Loggen von Nachrichten tempor\"{a}r ausstellen. Mit deaktiviertem Loggen werden keine neuen Nachrichten mehr ins Loggfenster geschrieben. Nach Reaktivieren des Schalters werden alle ausgelassenen Nachrichten nachtr\"{a}glich in das Fenster geschrieben. Ein deaktiviertes Loggen kann zu verbessertem Leistungsverhalten des Simulators f\"{u}hren (z.B. kein Rucklen; ist vom verwendeten Computer, auf dem der Simulator l\"{a}uft, abh\"{a}ngig). Dieser Umstand ist der sehr langsamen Java-Implementierung der JTextArea-Klasse zu verdanken, die schnelle Updates nur sehr tr\"{a}ge durchf\"{u}hrt. -\"{U}ber die Checkbox ``Expertenmodus'' wird der Expertenmodus aktiviert beziehungsweise deaktiviert. +\"{U}ber den Schalter ``Expertenmodus'' wird der Expertenmodus aktiviert beziehungsweise deaktiviert. \section{Der Expertenmodus} -\begin{figure}[htbp] +\begin{figure}[h] \centering - \fbox{\includegraphics[width=14cm]{images/ss-simulation-expertenmodus}} + \fbox{\includegraphics[width=12cm]{images/ss-simulation-expertenmodus}} \caption{Der Simulator im Expertenmodus} \label{fig:SimulationExpertenmodus} \end{figure} -Der Simulator kann in zwei verschiedenen Modi betrieben werden. Es gibt einen einfachen- und einen Expertenmodus. Der Simulator startet standardm\"{a}ig im einfachen Modus, sodass sich der Anwender nicht mit der vollen Funktionalit\"{a}t des Simulators auf einmal auseinandersetzen mu. Der einfache Modus ist \"{u}bersichtlicher, bietet jedoch weniger Funktionen an. Der Expertenmodus eignet sich mehr f\"{u}r erfahrene Anwender und bietet dementsprechend auch mehr Flexibilit\"{a}t. Der Expertenmodus kann \"{u}ber die gleichnamige Checkbox unterhalb des Loggfensters oder \"{u}ber die Simulationseinstellungen aktiviert oder deaktiviert werden. Auf Abbildung \ref{fig:SimulationExpertenmodus} ist der Simulator im Expertenmodus zu sehen. Wenn der Expertenmodus mit dem normalen Modus verglichen wird, dann fallen einige Unterschiede auf: - -\begin{figure}[htbp] - \centering - \fbox{\includegraphics[width=9cm]{images/ss-sidebar-expertenmodus}} - \caption{Die Sidebar im Expertenmodus} - \label{fig:SidebarExpertenmodus} -\end{figure} +Der Simulator kann in zwei verschiedenen Modi betrieben werden. Es gibt einen einfachen- und einen Expertenmodus. Der Simulator startet standardm\"{a}ig im einfachen Modus, sodass sich der Anwender nicht mit der vollen Funktionalit\"{a}t des Simulators auf einmal auseinandersetzen mu. Der einfache Modus ist \"{u}bersichtlicher, bietet jedoch weniger Funktionen an. Der Expertenmodus eignet sich mehr f\"{u}r erfahrene Anwender und bietet dementsprechend auch mehr Flexibilit\"{a}t. Der Expertenmodus kann \"{u}ber den gleichnamigen Schalter unterhalb des Loggfensters oder \"{u}ber die Simulationseinstellungen aktiviert oder deaktiviert werden. Auf Abbildung \ref{fig:SimulationExpertenmodus} ist der Simulator im Expertenmodus zu sehen. Wenn der Expertenmodus mit dem normalen Modus verglichen wird, dann fallen einige Unterschiede auf: \subsubsection{Neue Funktionen in der Sidebar} @@ -178,30 +173,37 @@ Der erste Unterschied ist in der Sidebar erkennbar (Abbildung \ref{fig:SidebarEx Des Weiteren kann der Anwender bei der Programmierung eines neuen Ereignisses direkt die dazugeh\"{o}rige PID selektieren. Im einfachen Modus wurde hier immer standardm\"{a}ig die PID des aktuell (in der obersten Combo-Box) ausgew\"{a}hlten Prozesses verwendet (hier mit PID 1). In dieser Combo-Box sollte der Anwender gegebenenfalls ``Alle Prozesse'' selektieren, damit im Ereigniseditor stets die Ereignisse aller Prozesse aufgelistet werden. -\subsubsection{Lamportzeit, Vektorzeit und Anti-Aliasing Schalter} +\subsubsection{Lamportzeit-, Vektorzeit- und Anti-Aliasing Schalter} -Weitere Unterschiede machen sich unterhalb des Loggfensters bemerkbar. Dort gibt es unter Anderem zwei neue Checkboxen ``Lamportzeit'' und ``Vektorzeit''. Aktiviert der Anwender eine dieser beiden Checkboxen, so wird die Lamport- beziehungsweise Vektorzeit in der Visualisierung dargestellt. Damit die \"{U}bersichtlichkeit nicht leidet, kann der Anwender nur jeweils eine dieser beiden Checkboxen zur gleichen Zeit aktiviert haben. +Weitere Unterschiede machen sich unterhalb des Loggfensters bemerkbar. Dort gibt es unter Anderem zwei neue Schalter ``Lamportzeit'' und ``Vektorzeit''. Aktiviert der Anwender einen dieser beiden Schalter, so wird die Lamport- beziehungsweise Vektorzeit in der Visualisierung dargestellt. Damit die \"{U}bersichtlichkeit nicht leidet, kann der Anwender nur jeweils einen dieser beiden Schalter zur gleichen Zeit aktiviert haben. -Die Anti-Aliasing-Checkbox erm\"{o}glicht dem Anwender Anti-Aliasing zu aktivieren beziehungsweise zu deaktivieren. Mit aktiviertem Anti-Aliasing werden alle Grafiken der Visualisierung gerundet dargestellt. Aus Performancegr\"{u}nden ist Anti-Aliasing standardm\"{a}ig nicht aktiv. +\begin{figure}[h] + \centering + \fbox{\includegraphics[width=9cm]{images/ss-sidebar-expertenmodus}} + \caption{Die Sidebar im Expertenmodus} + \label{fig:SidebarExpertenmodus} +\end{figure} + +Der Anti-Aliasing-Schalter erm\"{o}glicht dem Anwender Anti-Aliasing zu aktivieren beziehungsweise zu deaktivieren. Mit Anti-Aliasing werden alle Grafiken der Visualisierung gerundet dargestellt. Aus Performancegr\"{u}nden ist Anti-Aliasing standardm\"{a}ig nicht aktiv. \subsubsection{Der Loggfilter} Je komplexer eine Simulation wird, desto un\"{u}bersichtlicher werden die Eintr\"{a}ge im Loggfenster. Hier f\"{a}llt es zunehmend schwerer die \"{U}bersicht aller Ereignisse zu behalten. Um dem entgegenzuwirken gibt es im Expertenmodus einen Loggfilter, welcher es erm\"{o}glicht nur die wesentlichen Daten aus den Loggs zu filtern. -Der Loggfilter wird anhand der dazugeh\"{o}rigen Checkbox ``Filter'' aktiviert beziehungsweise deaktiviert. In der dahinterliegenden Eingabezeile kann ein regul\"{a}rer Ausdruck in Java-Syntax angegeben werden. Beispielsweise werden mit ``\textit{PID: (1|2)}'' nur Loggzeilen angezeigt, die entweder ``\textit{PID: 1}'' oder ``\textit{PID: 2}'' beinhalten. Alle anderen Zeilen, die zum Beispiel nur ``\textit{PID: 3}'' beinhalten, werden dabei nicht angezeigt. Mit aktivem Loggfilter werden nur die Loggzeilen angezeigt, auf die der regul\"{a}re Ausdruck passt. Der Loggfilter kann auch nachtr\"{a}glich aktiviert werden, da bereits protokollierte Ereignisse nach jeder Filter\"{a}nderung erneut gefiltert werden. +Der Loggfilter wird anhand dem dazugeh\"{o}rigen Schalter ``Filter'' aktiviert und deaktiviert. In der dahinterliegenden Eingabezeile kann ein regul\"{a}rer Ausdruck in Java-Syntax angegeben werden. Beispielsweise werden mit ``\textit{PID: (1|2)}'' nur Loggzeilen angezeigt, die entweder ``\textit{PID: 1}'' oder ``\textit{PID: 2}'' beinhalten. Alle anderen Zeilen, die zum Beispiel nur ``\textit{PID: 3}'' beinhalten, werden dabei nicht angezeigt. Mit Loggfilter werden nur die Loggzeilen angezeigt, auf die der angegebene regul\"{a}re Ausdruck passt. Der Loggfilter kann auch nachtr\"{a}glich aktiviert werden, da bereits protokollierte Ereignisse nach jeder Filter\"{a}nderung erneut gefiltert werden. -Der Loggfilter kann auch w\"{a}hrend einer laufenden Simulation verwendet werden. Bei Loggfilterdeaktivierung werden alle Nachrichten wieder angezeigt. Loggnachrichten, die aufgrund des Filters noch nie angezeigt wurden, werden dann nachtr\"{a}glich angezeigt. +Der Loggfilter kann auch w\"{a}hrend einer laufenden Simulation verwendet werden. Bei Filterdeaktivierung werden alle Nachrichten wieder dargestellt. Loggnachrichten, die aufgrund des Filters noch nie angezeigt wurden, werden dann nachtr\"{a}glich angezeigt. \section{Ereignisse} -Es wird zwischen zwei Haupttypen von Ereignissen unterschieden: Programmierbare Ereignisse und nicht-programmierbare Ereignisse. Programmierbare Ereignisse lassen sich im Ereigniseditor programmieren und editieren und deren Eintrittszeiten h\"{a}ngen von den lokalen Prozessuhren oder der globalen Uhr ab. Nicht-programmierbare Ereignisse lassen sich hingegen nicht im Ereigniseditor programmieren und treten nicht wegen einer bestimmten Uhrzeit ein, sondern aufgrund anderer Gegebenheiten wie zum Beispiel das Eintreffen einer Nachricht oder das Ausf\"{u}hren einer Aktion aufgrund eines Weckers, worauf weiter unten nochmal genauer eingegangen wird. +Es wird zwischen zwei Haupttypen von Ereignissen unterschieden: Programmierbare Ereignisse und nicht programmierbare Ereignisse. Programmierbare Ereignisse lassen sich im Ereigniseditor programmieren und editieren und deren Eintrittszeiten h\"{a}ngen von den lokalen Prozessuhren oder der globalen Uhr ab. Nicht-programmierbare Ereignisse lassen sich hingegen nicht im Ereigniseditor programmieren und treten nicht wegen einer bestimmten Uhrzeit ein, sondern aufgrund anderer Gegebenheiten wie zum Beispiel das Eintreffen einer Nachricht oder das Ausf\"{u}hren einer Aktion aufgrund eines Weckers, worauf sp\"{a}ter nochmal genauer eingegangen wird. \subsubsection{Prozessabsturz- und Wiederbelebung (programmierbar)} Die beiden einfachsten Ereignisse sind ``Prozessabsturz'' sowie ``Prozesswiederbelebung''. Wenn ein Prozess abgest\"{u}rzt ist, so wird sein Prozessbalken in rot dargestellt. Ein abgest\"{u}rzter Prozess kann keine weiteren Ereignisse mehr verarbeiten und wenn bei ihm eine Nachricht eintrifft, dann kann sie nicht verarbeitet werden und geht deshalb verloren. Die einzige Ausnahme bildet ein Wiederbelebungsereignis. Ein abgest\"{u}rzter Prozess kann nichts, auer wiederbelebt werden. W\"{a}hrend eines Prozessabsturzes l\"{a}uft die lokale Prozessuhr, abgesehen der Lamport- und Vektor-Uhren, normal weiter. Das heit es besteht die M\"{o}glichkeit, dass ein Prozess einige seiner Ereignisse gar nicht ausf\"{u}hrt, da er zu den Ereigniseintrittszeiten abgest\"{u}rzt ist. Wenn im echten Leben ein Computer abst\"{u}rzt oder abgeschaltet wird, dann l\"{a}uft seine Hardware-Uhr unabh\"{a}ngig vom Betriebssystem auch weiter. \subsubsection{Aktivierung und Deaktivierung von Protokollen sowie Starten von Anfragen (programmierbar)} -Es ist bereits bekannt, dass ein Prozess mehrere Protokolle client- und auch serverseitig unterst\"{u}tzen kann. Welches Protokoll von einem Prozess unterst\"{u}tzt wird, kann der Anwender anhand von Protokollaktivierungs- und Protokolldeaktivierungsereignissen konfigurieren. Somit besteht die M\"{o}glichkeit, dass ein gegebener Prozess ein bestimmtes Protokoll erst zu einem bestimmten Zeitpunkt unterst\"{u}tzt und gegebenenfalls ein anderes Protokoll abl\"{o}st. Jedes Protokoll kann entweder server- oder clientseitig aktiviert beziehungsweise deaktiviert werden. Welche Protokolle es gibt wird sp\"{a}ter behandelt. Der Anwender hat die Auswahl zwischen f\"{u}nf verschiedenen Protokollereignistypen: +Es ist bereits bekannt, dass ein Prozess mehrere Protokolle client- und auch serverseitig unterst\"{u}tzen kann. Welches Protokoll von einem Prozess unterst\"{u}tzt wird, kann der Anwender anhand von Protokollaktivierungs- und Protokolldeaktivierungsereignissen konfigurieren. Somit besteht die M\"{o}glichkeit, dass ein gegebener Prozess ein bestimmtes Protokoll erst zu einem bestimmten Zeitpunkt unterst\"{u}tzt und gegebenenfalls ein anderes Protokoll abl\"{o}st. Jedes Protokoll kann entweder server- oder clientseitig aktiviert beziehungsweise deaktiviert werden. Welche Protokolle es gibt wird sp\"{a}ter behandelt. Der Anwender hat somit die Auswahl zwischen f\"{u}nf verschiedenen Protokollereignistypen: \begin{itemize} \item Aktivierung des Clients eines gegebenen Protokolls @@ -211,13 +213,11 @@ Es ist bereits bekannt, dass ein Prozess mehrere Protokolle client- und auch ser \item Starten einer Client/Server-Anfrage eines gegebenen Protokolls \end{itemize} -Ob sich das Ereignis f\"{u}r das Starten einer Anfrage auf einen Client oder einen Server bezieht h\"{a}ngt vom verwendeten Protokoll ab. Es gibt Protokolle, wo der Client die Anfragen starten muss, und es gibt Protokolle, wo der Server diese Aufgabe \"{u}bernimmt. Beispielsweise startet bei dem ``Ping-Pong Protokoll'' der Client- und bei dem ``Commit-Protokollen'' der Server immer die erste Anfrage. Es gibt kein Protokoll, wo der Client und der Server jeweils Anfragen starten k\"{o}nnen. - -Bei allen dieser f\"{u}nf Ereignissen kann der betroffene Prozess noch beliebig andere Dinge, abh\"{a}ngig vom Protokoll, tun. Beispielsweise kann er den Inhalt der Nachricht generieren oder lokale Variablen initialisieren oder eine der lokalen Uhzeiten \"{a}ndern oder einen Wecker f\"{u}r ``Callback Ereignisse'' setzen (mehr dazu sp\"{a}ter) und vieles mehr. +Ob sich das Ereignis f\"{u}r das Starten einer Anfrage auf einen Client oder einen Server bezieht h\"{a}ngt vom verwendeten Protokoll ab. Es gibt Protokolle, wo der Client die Anfragen starten muss, und es gibt Protokolle, wo der Server diese Aufgabe \"{u}bernimmt. Beispielsweise startet bei dem ``Ping-Pong Protokoll'' der Client- und bei dem ``Commit-Protokollen'' der Server immer die Anfragen. Es gibt kein Protokoll, wo der Client und der Server jeweils Anfragen starten k\"{o}nnen. \subsubsection{Nachrichtenempfang sowie Antwortnachrichten (nicht-programmierbar)} -Nachdem ein Prozess eine Nachricht empf\"{a}ngt wird zuerst \"{u}berpr\"{u}ft ob er das dazugeh\"{o}rige Protokoll unterst\"{u}tzt. Wenn der Prozess das Protokoll unterst\"{u}tzt, wird geschaut ob es sich um eine Client- oder eine Servernachricht handelt. Wenn es sich um eine Clientnachricht handelt, so mu der Empf\"{a}ngerprozess das Protokoll serverseitig unterst\"{u}tzen und virce versa. Wenn alles passt, dann f\"{u}hrt der Empf\"{a}ngerprozess die vom Protokoll definierten Aktionen aus. In der Regel berechnet der Prozess einen bestimmten Wert und schickt ihn \"{u}ber eine Antwortnachricht zur\"{u}ck. Es k\"{o}nnen aber auch beliebig andere Aktionen ausgef\"{u}hrt werden. Welche dies sind h\"{a}ngt vom Protokoll ab. +Nachdem ein Prozess eine Nachricht empf\"{a}ngt wird zuerst \"{u}berpr\"{u}ft, ob er das dazugeh\"{o}rige Protokoll unterst\"{u}tzt. Wenn der Prozess das Protokoll unterst\"{u}tzt wird geschaut, ob es sich um eine Client- oder eine Servernachricht handelt. Wenn es sich um eine Clientnachricht handelt, so mu der Empf\"{a}ngerprozess das Protokoll serverseitig unterst\"{u}tzen und virce versa. Wenn alles passt, dann f\"{u}hrt der Empf\"{a}ngerprozess die vom Protokoll definierten Aktionen aus. In der Regel berechnet der Prozess einen bestimmten Wert und schickt ihn \"{u}ber eine Antwortnachricht zur\"{u}ck. Es k\"{o}nnen aber auch beliebig andere Aktionen ausgef\"{u}hrt werden. Welche dies sind h\"{a}ngt vom Protokoll ab. \subsubsection{Callback-Ereignisse (nicht-programmierbar)} @@ -234,14 +234,14 @@ Die Eintrittszeit eines Zufallsereignisses wird vom Simulator zuf\"{a}llig gew\" \centering \fbox{ \begin{tabular}{l|l} - \textbf{Prefix} & \textbf{Beschreibung}\\ + \textbf{Typ} & \textbf{Beschreibung}\\ \hline - \textit{Boolean} & boolschen Wert, z.B. \textit{true} oder \textit{false}\\ + \textit{Boolean} & Boolscher Wert, z.B. \textit{true} oder \textit{false}\\ \textit{Color} & Java-Farbobjekt\\ - \textit{Float} & Fliekommazahl einfacher genauigkeit\\ - \textit{Integer[]} & Integervektor\\ - \textit{Integer} & Einfache Integerzahl\\ - \textit{Long} & Einfache Long-Zahl\\ + \textit{Float} & 32-Bit Fliekommazahl\\ + \textit{Integer[]} & Vektor aus 32-Bit Integern\\ + \textit{Integer} & 32-Bit Integer\\ + \textit{Long} & 64-Bit Long\\ \textit{String} & Java-Stringobjekt\\ \end{tabular} } @@ -250,11 +250,11 @@ Die Eintrittszeit eines Zufallsereignisses wird vom Simulator zuf\"{a}llig gew\" \end{table} -In diesem Abschnitt wird genauer auf die m\"{o}glichen Konfigurationsm\"{o}glichkeiten eingegangen. Zun\"{a}chst gibt es globale Simulationseinstellungen. Diese beinhalten Variablen die die gesamte Simulation betreffen. Zudem hat jeder Prozess seine eigenen lokale Einstellungen. Dar\"{u}ber hinaus kann jedes Protokoll f\"{u}r jeden Prozess separat eingestellt werden. +In diesem Abschnitt wird genauer auf die m\"{o}glichen Konfigurationsm\"{o}glichkeiten eingegangen. Zun\"{a}chst gibt es globale Simulationseinstellungen. Diese beinhalten Variablen die die gesamte Simulation betreffen. Zudem hat jeder Prozess seine eigenen lokale Einstellungen. Dar\"{u}ber hinaus kann jedes Protokoll (Client- sowie Serverseite) f\"{u}r jeden Prozess separat eingestellt werden. \subsection{Variablendatentypen} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics{images/ss-simulationseinstellungen}} %\fbox{\includegraphics[width=11cm]{images/ss-simulationseinstellungen}} @@ -263,16 +263,16 @@ In diesem Abschnitt wird genauer auf die m\"{o}glichen Konfigurationsm\"{o}glich \end{figure} -Der Simulator unterscheidet zwischen mehreren Datentypen, in denen die einstellbaren Variablen vorliegen k\"{o}nnen (Tabelle \ref{tb:VariablenDatentypen}). Im folgenden bedeutet \textit{Prefix}: \textit{wert}, dass die Variable vom Typ \textit{Prefix} ist, und standardm\"{a}ssig den Wert \textit{wert} zugewiesen hat. Vom Anwender lassen sich lediglich die Variablenwerte, jedoch nicht die Variablentypen sowie Variablennamen, \"{a}ndern. +Der Simulator unterscheidet zwischen mehreren Datentypen, in denen die einstellbaren Variablen vorliegen k\"{o}nnen (Tabelle \ref{tb:VariablenDatentypen}). Jede Variable besitzt einen Namen, einen Wert und eine optionale Beschreibung. Wenn eine Variablenbeschreibung vorhanden ist, so wird sie anstelle des Variablennamen in einem Editor (mehr zu Editoren sp\"{a}ter) angezeigt. Der Variablenname wird vom Simulator lediglich f\"{u}r die interne Verwendung ben\"{o}tigt. Im folgenden bedeutet \textit{Typ: varname = wert}, dass die Variable vom Typ \textit{Typ} ist, der interne Variablenname \textit{varname} lautet, und standardm\"{a}ssig den Wert \textit{wert} zugewiesen hat. Vom Anwender lassen sich lediglich die Variablenwerte, jedoch nicht die Variablentypen, Variablennamen und Beschreibungen, \"{a}ndern. \subsection{Simulationseinstellungen} Beim Erstellen einer neuen Simulation erscheint zun\"{a}chst das dazugeh\"{o}rige Einstellungsfenster (Abbildung \ref{fig:Simulationseinstellungen}). In der Regel reicht es, wenn der Anwender hier, bis auf die Anzahl beteiligter Prozesse, die Standardwerte \"{u}bernimmt. Es besteht auch die M\"{o}glichkeit die Einstellungen nachtr\"{a}glich zu editieren, indem das Einstellungsfenster via ``Editieren $\rightarrow$ Einstellungen'' erneut aufgerufen wird. -Im Folgenden werden alle in den Simulationseinstellungen verf\"{u}gbaren Variablen beschrieben. Die Klammern geben die Typen und die Standardwerte an, in denen die Variablen vorliegen. +Im Folgenden werden alle in den Simulationseinstellungen verf\"{u}gbaren Variablen beschrieben. Die Klammern geben die Typen, Namen und die Standardwerte an, in denen die Variablen vorliegen. -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics{images/ss-simulationseinstellungen-experten}} \caption{Weitere Simulationseinstellungen im Expertenmodus} @@ -281,16 +281,19 @@ Im Folgenden werden alle in den Simulationseinstellungen verf\"{u}gbaren Variabl \begin{itemize} - \item \textbf{Prozesse empfangen eigene Nachrichten} \textit{(Boolean: false)}: Standardm\"{a}ig k\"{o}nnen Prozesse keine Nachrichten empfangen, die sie selbst verschickt haben. Dies tr\"{a}gt zur \"{U}bersichtlichkeit der Simulation bei. Wenn diese Variable jedoch auf \textit{true} gesetzt wird, dann kann ein Prozess auch selbst verschickte Nachrichten emfpangen und auf diese ebenso antworten. Die Zeit f\"{u}r das Versenden und Empfangen einer Nachricht an sich selbst betr\"{a}gt jedoch stets \textit{0ms}. Diese Variable sollte mit Vorsicht verwendet werden, da hierdurch, bedingt aus den \textit{0ms}, Endlosschleifen entstehen k\"{o}nnen. - \item \textbf{Mittelwerte der Nachrichtenverlustwahrscheinlichkeiten bilden} \textit{(Boolean, true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abh\"{a}ngige zuf\"{a}llige \"{U}bertragungszeit bis sie ihr Ziel erreicht. Wenn diese Option aktiviert ist, so wird der Mittelwert vom Sende- und Empfangsprozess gebildet. Ansonsten wird stets die \"{U}bertragungszeit, die beim Senderprozesses angegeben wurde, verwendet. - \item \textbf{Nur relevante Nachrichten anzeigen} \textit{(Boolean: true)}: Wenn nur alle relevanten Nachrichten angezeigt werden, so werden Nachrichten an einen Prozess die er selbst nicht verarbeiten kann, weil er das dazugeh\"{o}rige Protokoll nicht unterst\"{u}tzt, nicht angezeigt. Hierdurch wird eine Simulation viel \"{u}bersichtlicher dargestellt. - \item \textbf{Expertenmodus aktivieren} \textit{(Boolean, false)}: Hier l\"{a}sst sich der Expertenmodus aktivieren beziehungsweise deaktivieren. Alternativ kann dies \"{u}ber die gleichnamige Checkbox unterhalb des Loggfensters geschehen. - \item \textbf{Simulation periodisch wiederholen} \textit{(Boolean: false)}: Wenn diese Variable auf \textit{true} gesetzt ist, so wird die Simulation jedes Mal nach Ablauf automatisch erneut gestartet. - \item \textbf{Lamportzeiten betreffen alle Ereignisse} \textit{(Boolean: false)}: Wenn diese Variable auf \textit{true} gesetzt ist, so werden bei jedem Ereignis alle Lamportzeitstempel aller Prozesse jeweils inkrementiert. Bei einem Wert \textit{false} inkrementieren sich die Lamportzeitstempel jeweils nur, wenn eine Nachricht empfangen oder verschickt wurde. - \item \textbf{Vektorzeiten betreffen alle Ereignisse} \textit{(Boolean: false)}: Wenn diese Variable auf \textit{true} gesetzt ist, so werden bei jedem Ereignis alle Vektor-Zeitstempel aller Prozesse jeweils inkrementiert. Bei einem Wert \textit{false} inkrementieren sich die Vektor-Zeitstempel jeweils nur, wenn eine Nachricht empfangen oder verschickt wurde. - \item \textbf{Abspielgeschwindigkeit der Simulation} \textit{(Float: 0.5)}: Gibt den Faktor der Simulationsabspielgeschindigkeit an. Wenn als Faktor \textit{1} gew\"{a}hlt wird, dann dauert eine simulierte Sekunde so lange wie eine echte Sekunde. Der Faktor \textit{0.5} gibt somit an, dass die Simulation mit halber Echtzeitgschwindigkeit abgespielt wird. - \item \textbf{Anzahl der Prozesse} \textit{(Integer: 3)}: Gibt an wieviele Prozesse an der Simulation teilnehmen sollen. Der Anwender kann auch nachtr\"{a}glich via Rechtsklick auf den Prozessbalken den jeweiligen Prozess aus der Simulation entfernen oder weitere Prozesse hinzuf\"{u}gen. - \item \textbf{Dauer der Simulation} \textit{(Integer: 15)}: Gibt die Dauer der Simulation in Sekunden an. + \item \textbf{Prozesse empfangen eigene Nachrichten} \textit{(Boolean: sim.message.own.recv = false)}: Standardm\"{a}ig k\"{o}nnen Prozesse keine Nachrichten empfangen, die sie selbst verschickt haben. Dies tr\"{a}gt zur \"{U}bersichtlichkeit der Simulation bei. Wenn diese Variable jedoch auf \textit{true} gesetzt wird, dann kann ein Prozess auch selbst verschickte Nachrichten emfpangen und auf diese ebenso antworten. Die Zeit f\"{u}r das Versenden und Empfangen einer Nachricht an sich selbst betr\"{a}gt jedoch stets \textit{0ms}. Diese Variable sollte mit Vorsicht verwendet werden, da bedingt durch den \textit{0ms} Endlosschleifen entstehen k\"{o}nnen. + \item \textbf{Mittelwerte der Nachrichtenverlustwahrscheinlichkeiten bilden} \textit{(Boolean: sim.message.prob.mean = true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abh\"{a}ngige zuf\"{a}llige Verlustwahrscheinlichkeit. Wenn diese Option aktiviert ist, so wird die der Mittelwert aus den Verlustwahrscheinlichkeiten vom Sender- und Empf\"{a}ngerprozess gebildet. Ansonsten wird stets die Verlustwahrscheinlichkeit, die beim Senderprozesses angegeben wurde, verwendet. + \item \textbf{Mittelwerte der \"{U}bertragungszeiten bilden} \textit{(Boolean: sim.message.sendingtime.mean = true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abh\"{a}ngige zuf\"{a}llige \"{U}bertragungszeit bis sie ihr Ziel erreicht. Wenn diese Option aktiviert ist, so wird der Mittelwert vom Sender- und Empf\"{a}ngerprozess gebildet. Ansonsten wird stets die \"{U}bertragungszeit, die beim Senderprozesses angegeben wurde, verwendet. + \item \textbf{Nur relevante Nachrichten anzeigen} \textit{(Boolean: sim.messages.relevant = true)}: Wenn nur alle relevanten Nachrichten angezeigt werden, dann werden Nachrichten an einen Prozess die er selbst nicht verarbeiten kann, weil er das dazugeh\"{o}rige Protokoll nicht unterst\"{u}tzt, nicht angezeigt. Dies verbessert die \"{U}bersicht. + \item \textbf{Expertenmodus aktivieren} \textit{(Boolean: sim.mode.expert = false)}: Hier l\"{a}sst sich der Expertenmodus aktivieren beziehungsweise deaktivieren. Alternativ kann dies \"{u}ber den gleichnamigen Schalter unterhalb des Loggfensters geschehen. + \item \textbf{Simulation periodisch wiederholen} \textit{(Boolean: sim.periodic = false)}: Wenn diese Variable auf \textit{true} gesetzt ist, dann wird die Simulation jedes Mal nach Ablauf automatisch erneut gestartet. + \item \textbf{Lamportzeiten betreffen alle Ereignisse} \textit{(Boolean: sim.update.lamporttime.all = false)}: Wenn diese Variable auf \textit{true} gesetzt ist, dann werden bei jedem Ereignis alle Lamportzeitstempel aller Prozesse jeweils inkrementiert. Bei einem Wert \textit{false} inkrementieren sich die Lamportzeitstempel jeweils nur, wenn eine Nachricht empfangen oder verschickt wurde. + \item \textbf{Vektorzeiten betreffen alle Ereignisse} \textit{(Boolean: sim.update.vectortime.all = false)}: Wenn diese Variable auf \textit{true} gesetzt ist, dann werden bei jedem Ereignis alle Vektor-Zeitstempel aller Prozesse jeweils inkrementiert. Bei einem Wert \textit{false} inkrementieren sich die Vektor-Zeitstempel jeweils nur, wenn eine Nachricht empfangen oder verschickt wurde. + + Lamport- und Vektorzeitstempel werden sp\"{a}ter anhand eines Beispiels verdeutlicht. + \item \textbf{Abspielgeschwindigkeit der Simulation} \textit{(Float: sim.clock.speed = 0.5)}: Gibt den Faktor der Simulationsabspielgeschindigkeit an. Wenn als Faktor \textit{1} gew\"{a}hlt wird, dann dauert eine simulierte Sekunde so lange wie eine echte Sekunde. Der Faktor \textit{0.5} gibt somit an, dass die Simulation mit halber Echtzeitgschwindigkeit abgespielt wird. + \item \textbf{Anzahl der Prozesse} \textit{(Integer: sim.process.num = 3)}: Gibt die Anzahl beteiligter Prozesse an. Der Anwender kann auch nachtr\"{a}glich via Rechtsklick auf den Prozessbalken den jeweiligen Prozess aus der Simulation entfernen oder weitere Prozesse hinzuf\"{u}gen. + \item \textbf{Dauer der Simulation} \textit{(Integer: sim.seconds = 15)}: Gibt die Dauer der Simulation in Sekunden an. \end{itemize} Die weiteren Simulationseinstellungen unter ``Einstellungen f\"{u}r neue Prozesse'' sowie ``Nachrichteneinstellungen f\"{u}r neue Prozesse'' geben lediglich Standardwerte an, die f\"{u}r neu zu erstellende Prozesse verwendet werden. Die dort verf\"{u}gbaren Variablen werden im folgenden Teilkapitel genauer beschrieben. @@ -300,14 +303,14 @@ Die weiteren Simulationseinstellungen unter ``Einstellungen f\"{u}r neue Prozess Jeder Prozess besitzt folgende Variablen, die entweder via dem Variablen-Tab in der Sidebar oder ``Editieren $\rightarrow$ Prozess \textit{PID}'' oder Linksklick auf den Prozessbalken editiert werden k\"{o}nnen. Auf allen drei Wegen kommt jeweils der selbe Prozesseditor zum Vorschein. \begin{itemize} - \item \textbf{Uhrabweichung} \textit{(Float: 0.0)}: Gibt den Faktor an, um den die lokale Prozessuhr abweicht. Der Faktor \textit{0.0} besagt beispielsweise, dass die Uhr keine Abweichung hat und somit global-korrekt l\"{a}uft. Ein Faktor von \textit{1.0} w\"{u}rde hingegen bedeuten, dass die Uhr mit doppelter Geschwindigkeit- und ein Faktor von \textit{-0.5}, dass die lokale Prozessuhr mit halber Geschwindigkeit der globalen Uhr fortschreitet. Es sind nur Werte > \textit{-1.0} erlaubt, da sonst die Prozessuhr r\"{u}ckw\"{a}rts laufen k\"{o}nnte. Bei allen anderen Werten wird der Faktor wieder automatisch auf \textit{0.0} gesetzt. Da der Simulator intern mit Fliekommazahlen doppelter Genauigkeit arbeitet, kann es zu kleinen, jedoch vernachl\"{a}ssigbaren, Rundungsfehlern kommen. - \item \textbf{Prozessausfallwahrscheinlichkeit} \textit{(Integer: 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob der gegebene Prozess w\"{a}hrend der Simulation zuf\"{a}llig abst\"{u}rzt. Die Wahrscheinlichkeit bezieht sich auf die komplette Simulationsdauer. Bei einer Einstellung von \textit{100} Prozent und der Simulationsdauer von \textit{15} Sekunden st\"{u}rzt der Prozess auf jeden Fall zwischen \textit{0ms} und \textit{15000ms} ab. An welcher Stelle dies geschieht wird zuf\"{a}llig bestimmt. Wenn der Prozess nach seinem Absturz wiederbelebt wird, st\"{u}rzt er nicht noch einmal zuf\"{a}llig ab. Dies gilt allerdings nicht, wenn die Prozesseinstellungen nach dem Zufallsabsturz erneut ge\"{a}ndert und \"{u}bernommen werden, da dann das Zufallsabst\"{u}rzereignis erneut erstellt wird. - \item \textbf{Lokale Zeit} \textit{(Long: 0)}: Gibt die lokale Prozesszeit in Millisekunden an. - \item \textbf{Nachrichtenverlustwahrscheinlichkeit} \textit{(Integer: 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob eine vom aktuell ausgew\"{a}hlten Prozess verschickte Nachricht unterwegs verloren geht. An welcher Stelle die Nachricht zwischen dem Sende- und Empfangsprozess verloren geht wird vom Simulator zuf\"{a}llig gew\"{a}hlt. - \item \textbf{Maximale \"{U}bertragungszeit} \textit{(Long: 2000)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht maximal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{max}$ bezeichnet. Der tats\"{a}chlich verwendete Wert wird zuf\"{a}llig zwischen der minimalen- und der maximalen Zeit (jeweils inklusive) gew\"{a}hlt. - \item \textbf{Minimale \"{U}bertragungszeit} \textit{(Long: 500)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht minimal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{min}$ bezeichnet. Der tats\"{a}chlich verwendete Wert wird zuf\"{a}llig zwischen der minimalen- und der maximalen Zeit (jeweils inklusive) gew\"{a}hlt. \\ + \item \textbf{Uhrabweichung} \textit{(Float: process.clock.variance = 0.0)}: Gibt den Wert an, um den die lokale Prozessuhr abweicht. Der Wert \textit{0.0} besagt beispielsweise, dass die Uhr keine Abweichung hat und somit global-korrekt l\"{a}uft. Ein Wert von \textit{1.0} w\"{u}rde hingegen bedeuten, dass die Uhr mit doppelter Geschwindigkeit- und ein Wert von \textit{-0.5}, dass die lokale Prozessuhr mit halber Geschwindigkeit der globalen Uhr fortschreitet. Es sind nur Werte > \textit{-1.0} erlaubt, da sonst die Prozessuhr r\"{u}ckw\"{a}rts laufen k\"{o}nnte. Bei allen anderen Werten wird die Einstellung wieder automatisch auf \textit{0.0} gesetzt. Da der Simulator intern mit Fliekommazahlen doppelter Genauigkeit arbeitet, kann es zu kleinen, jedoch vernachl\"{a}ssigbaren, Rundungsfehlern kommen. + \item \textbf{Prozessausfallwahrscheinlichkeit} \textit{(Integer: process.prob.crash = 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob der gegebene Prozess w\"{a}hrend der Simulation zuf\"{a}llig abst\"{u}rzt. Die Wahrscheinlichkeit bezieht sich auf die komplette Simulationsdauer. Bei einer Einstellung von \textit{100} Prozent und der Simulationsdauer von \textit{15} Sekunden st\"{u}rzt der Prozess auf jeden Fall zwischen \textit{0ms} und \textit{15000ms} ab. An welcher Stelle dies geschieht wird zuf\"{a}llig bestimmt. Wenn der Prozess nach seinem Absturz wiederbelebt wird, st\"{u}rzt er nicht noch einmal zuf\"{a}llig ab. Dies gilt allerdings nicht, wenn die Prozesseinstellungen nach dem Zufallsabsturz erneut ge\"{a}ndert und \"{u}bernommen werden, da dann das Zufallsabst\"{u}rzereignis erneut erstellt wird. + \item \textbf{Lokale Zeit} \textit{(Long: process.localtime = 0)}: Gibt die lokale Prozesszeit in Millisekunden an. + \item \textbf{Nachrichtenverlustwahrscheinlichkeit} \textit{(Integer: message.prob.crash = 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob eine vom aktuell ausgew\"{a}hlten Prozess verschickte Nachricht unterwegs verloren geht. An welcher Stelle die Nachricht zwischen dem Sende- und Empfangsprozess verloren geht wird vom Simulator zuf\"{a}llig gew\"{a}hlt. + \item \textbf{Maximale \"{U}bertragungszeit} \textit{(Long: message.sendingtime.max = 2000)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht maximal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{max}$ bezeichnet. Der tats\"{a}chlich verwendete Wert wird zuf\"{a}llig zwischen der minimalen- und der maximalen Zeit (jeweils inklusive) gew\"{a}hlt. + \item \textbf{Minimale \"{U}bertragungszeit} \textit{(Long: message.sendingtime.min = 500)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht minimal ben\"{o}tigt, bis sie einen Empf\"{a}ngerprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{min}$ bezeichnet. Der tats\"{a}chlich verwendete Wert wird zuf\"{a}llig zwischen der minimalen- und der maximalen Zeit (jeweils inklusive) gew\"{a}hlt. \\ \\ - Wenn die \"{U}bertragungszeit einer Nachricht immer exakt die selbe Zeit in Anspruch nehmen soll, dann m\"{u}ssen die Prozesseinstellungen mit $t_{min} = t_{max}$ konfiguriert werden. + Wenn die \"{U}bertragungszeiten von Nachrichten immer exakt die selbe Zeit in Anspruch nehmen sollen, dann m\"{u}ssen alle Prozesseinstellungen mit $t_{min} = t_{max}$ konfiguriert werden. \end{itemize} @@ -352,15 +355,29 @@ Im Folgenden werden alle verf\"{u}gbaren Protokolle behandelt. Wie bereits besch Das Dummy-Protokoll dient lediglich als leeres Template f\"{u}r die Erstellung eigener Protokolle. Bei der Verwendung des Dummy-Protokolls werden bei Ereignissen lediglich Loggnachrichten ausgegeben. Es werden aber keine weiteren Aktionen ausgef\"{u}hrt. +\newpage \subsection{Das Ping-Pong Protokoll} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-ping-pong}} \caption{Das Ping-Pong Protokoll} \label{fig:PingPongProto} \end{figure} +Bei dem Ping-Pong Protokoll (Abbildung \ref{fig:PingPongProto}) werden zwischen zwei Prozessen, Client P1 und Server P2, st\"{a}ndig Nachrichten hin- und hergeschickt. Der Ping-Pong Client startet die erste Anfrage, worauf der Server dem Client antwortet. Auf diese Antwort wird vom Client ebenfalls geantwortet und so weiter. Jeder Nachricht wird ein Z\"{a}hler mitgeschickt, der bei jeder Station um eins inkrementiert- und jeweils im Loggfenster protokolliert wird. In Tabelle \ref{tb:PingPongTasks} sind alle f\"{u}r dieses Beispiel programmierten Ereignisse aufgef\"{u}hrt. + +\begin{figure}[h] + \centering + \fbox{\includegraphics[width=10cm]{images/ss-protokoll-ping-pong-sturm}} + \caption{Das Ping-Pong Protokoll (Sturm)} + \label{fig:PingPongSturmProto} +\end{figure} + +Wichtig ist, dass Prozess 1 seinen Ping-Pong Client aktiviert, bevor er eine Ping-Pong Clientanfrage startet! Wenn die Eintrittszeiten f\"{u}r die Aktivierung des Protokolls und das Starten der Anfrage identisch sind, so ordnet der Task-Manager (mehr dazu sp\"{a}ter) diese Ereignisse automatisch in der richtigen Reihenfolge an. Wenn der Ping-Pong Client nicht aktiviert werden w\"{u}rde, dann k\"{o}nnte P1 auch keine Ping-Pong Anfrage starten. Bevor ein Prozess eine Anfrage starten kann, muss er das dazugeh\"{o}rige Protokoll unterst\"{u}tzen beziehungsweise aktiviert haben. Dies gilt nat\"{u}rlich f\"{u}r alle anderen Protokolle analog. Anhand diesem Beispiel ist erkennbar, dass die noch nicht ausgelieferte Nachrichten gr\"{u}n eingef\"{a}rbt ist. Alle ausgelieferten Nachrichten tragen bereits die Farbe Blau. + +Werden die Ereignisse wie in Tabelle \ref{tb:PingPongSturmTasks} abge\"{a}ndert, so l\"{a}sst sich ein Ping-Pong Sturm realisieren. Dort wurde ein neuer Prozess 3 eingef\"{u}hrt, der als zus\"{a}tzlicher Ping-Pong Server agiert. Da auf jede Clientnachricht stets zwei Serverantworten folgen, verdoppelt sich bei jedem Ping-Pong Durchgang die Anzahl der kursierenden Nachrichten. Auf Abbildung \ref{fig:PingPongSturmProto} ist der dazugeh\"{o}rige Simulationsverlauf bis zum Zeitpunkt \textit{12676ms} dargestellt. + \begin{table} \centering \fbox{ @@ -376,18 +393,6 @@ Das Dummy-Protokoll dient lediglich als leeres Template f\"{u}r die Erstellung e \label{tb:PingPongTasks} \end{table} - -Bei dem Ping-Pong Protokoll (Abbildung \ref{fig:PingPongProto}) werden zwischen zwei Prozessen, Client P1 und Server P2, st\"{a}ndig Nachrichten hin- und hergeschickt. Der Ping-Pong Client startet die erste Anfrage, worauf der Server dem Client antwortet. Auf diese Antwort wird vom Client ebenfalls geantwortet und so weiter. Jeder Nachricht wird ein Z\"{a}hler mitgeschickt, der bei jeder Station um eins inkrementiert- und jeweils im Loggfenster protokolliert wird. In Tabelle \ref{tb:PingPongTasks} sind alle f\"{u}r dieses Beispiel programmierten Ereignisse aufgef\"{u}hrt. Wichtig ist, dass Prozess 1 seinen Ping-Pong Client aktiviert, bevor er eine Ping-Pong Clientanfrage startet! Wenn die Eintrittszeiten f\"{u}r die Aktivierung des Protokolls und das Starten der Anfrage identisch sind, so ordnet der Task-Manager (mehr dazu sp\"{a}ter) diese Ereignisse automatisch in der richtigen Reihenfolge an. Wenn der Ping-Pong Client nicht aktiviert werden w\"{u}rde, dann k\"{o}nnte P1 auch keine Ping-Pong Anfrage starten. Bevor ein Prozess eine Anfrage starten kann, muss er das dazugeh\"{o}rige Protokoll unterst\"{u}tzen beziehungsweise aktiviert haben. Dies gilt nat\"{u}rlich f\"{u}r alle anderen Protokolle analog. Anhand diesem Beispiel ist erkennbar, dass die noch nicht ausgelieferte Nachrichten gr\"{u}n eingef\"{a}rbt ist. Alle ausgelieferten Nachrichten tragen bereits die Farbe Blau. - -\begin{figure}[htbp] - \centering - \fbox{\includegraphics[width=10cm]{images/ss-protokoll-ping-pong-sturm}} - \caption{Das Ping-Pong Protokoll (Sturm)} - \label{fig:PingPongSturmProto} -\end{figure} - -Werden die Ereignisse wie in Tabelle \ref{tb:PingPongSturmTasks} abge\"{a}ndert, so l\"{a}sst sich ein Ping-Pong Sturm realisieren. Dort wurde ein neuer Prozess 3 eingef\"{u}hrt, der als zus\"{a}tzlicher Ping-Pong Server agiert. Da auf jede Clientnachricht stets zwei Serverantworten folgen, verdoppelt sich bei jedem Ping-Pong Durchgang die Anzahl der kursierenden Nachrichten. Auf Abbildung \ref{fig:PingPongSturmProto} ist der dazugeh\"{o}rige Simulationsverlauf bis zum Zeitpunkt \textit{12676ms} dargestellt. - \begin{table} \centering \fbox{ @@ -404,16 +409,7 @@ Werden die Ereignisse wie in Tabelle \ref{tb:PingPongSturmTasks} abge\"{a}ndert, \label{tb:PingPongSturmTasks} \end{table} -\subsection{Das Broadcast Protokoll} - -\begin{figure}[htbp] - \centering - \fbox{\includegraphics[width=10cm]{images/ss-protokoll-broadcast-sturm}} - \caption{Das Broadcast Protokoll} - \label{fig:BroadcastSturmProto} -\end{figure} - -Das Broadcast Protokoll verh\"{a}lt sich \"{a}hnlich wie das Ping-Pong Protokoll. Der Unterschied besteht darin, dass sich das Protokoll anhand einer eindeutigen Broadcast-ID merkt, welche Nachrichten bereits verschickt wurden. Das Broadcast Protokoll (server- und clientseitig) verschickt alle erhaltenen Nachrichten, sofern sie vom jeweiligen Prozess noch nicht schon einmal verschickt wurden, erneut. Der Server und der Client unterscheiden sich in diesem Fall nicht und f\"{u}hren bei Ankunft einer Nachricht jeweis die selben Aktionen durch. Somit l\"{a}sst sich, unter Verwendung mehrerer Prozesse (hier 6), wie auf Abbildung \ref{fig:BroadcastSturmProto}, ein Broadcast erzeugen. P1 ist der Client und startet je eine Anfrage nach \textit{0ms} und \textit{2500ms}. Die Simulationsdauer betr\"{a}gt hier genau \textit{5000ms}. Da ein Client nur Servernachrichten und ein Server nur Clientnachrichten empfangen kann, ist in dieser Simulation jeder Prozess, wie in Tabelle \ref{tb:BroadcastSturmTasks} angegeben, gleichzeitig Server und Client. +\newpage \begin{table} \centering @@ -440,17 +436,40 @@ Das Broadcast Protokoll verh\"{a}lt sich \"{a}hnlich wie das Ping-Pong Protokoll \caption{Programmierte Broadcast Ereignisse} \label{tb:BroadcastSturmTasks} \end{table} +\subsection{Das Broadcast Protokoll} + +\begin{figure}[h] + \centering + \fbox{\includegraphics[width=10cm]{images/ss-protokoll-broadcast-sturm}} + \caption{Das Broadcast Protokoll} + \label{fig:BroadcastSturmProto} +\end{figure} + +Das Broadcast Protokoll verh\"{a}lt sich \"{a}hnlich wie das Ping-Pong Protokoll. Der Unterschied besteht darin, dass sich das Protokoll anhand einer eindeutigen Broadcast-ID merkt, welche Nachrichten bereits verschickt wurden. Das Broadcast Protokoll (server- und clientseitig) verschickt alle erhaltenen Nachrichten, sofern sie vom jeweiligen Prozess noch nicht schon einmal verschickt wurden, erneut. + +Der Server und der Client unterscheiden sich in diesem Fall nicht und f\"{u}hren bei Ankunft einer Nachricht jeweis die selben Aktionen durch. Somit l\"{a}sst sich, unter Verwendung mehrerer Prozesse (hier 6), wie auf Abbildung \ref{fig:BroadcastSturmProto}, ein Broadcast erzeugen. P1 ist der Client und startet je eine Anfrage nach \textit{0ms} und \textit{2500ms}. Die Simulationsdauer betr\"{a}gt hier genau \textit{5000ms}. Da ein Client nur Servernachrichten und ein Server nur Clientnachrichten empfangen kann, ist in dieser Simulation jeder Prozess, wie in Tabelle \ref{tb:BroadcastSturmTasks} angegeben, gleichzeitig Server und Client. +\newpage \subsection{Das Protokoll zur internen Synchronisierung in einem synchronen System} -\begin{figure}[htbp] +Bisher wurden nur Protokolle vorgef\"{u}hrt, in denen die beteiligten Prozesse keine Uhrabweichung eingestellt hatten. Das Protokoll zur internen Synchronisierung ist ein Protokoll zur Synchronisierung der lokalen Prozesszeit, welches beispielsweise angewendet werden kann, wenn eine Prozesszeit aufgrund einer Uhrabweichung falsch geht. Wenn der Client seine falsche lokale Zeit $t_c$ mit einem Server synchronisieren m\"{o}chte, so schickt er ihm eine Clientanfrage. Der Server schickt als Antwort seine eigene lokale Prozesszeit $t_s$ zur\"{u}ck, womit der Client seine neue und genauere Prozesszeit berechnen kann. Wie genau die neue Prozesszeit berechnet wird, ist im Folgenden beschrieben: + +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-time-sync}} \caption{Das Protokoll zur internen Synchronisierung} \label{fig:TimeSyncProto} \end{figure} -Bisher wurden nur Protokolle vorgef\"{u}hrt, in denen die beteiligten Prozesse keine Uhrabweichung eingestellt hatten. Das Protokoll zur internen Synchronisierung ist ein Protokoll zur Synchronisierung der lokalen Prozesszeit, welches beispielsweise angewendet werden kann, wenn eine Prozesszeit aufgrund einer Uhrabweichung falsch geht. Wenn der Client seine falsche lokale Zeit $t_c$ mit einem Server synchronisieren m\"{o}chte, so schickt er ihm eine Clientanfrage. Der Server schickt als Antwort seine eigene lokale Prozesszeit $t_s$ zur\"{u}ck, womit der Client seine neue und genauere Prozesszeit berechnen kann. Wie genau die neue Prozesszeit berechnet wird, wird im Folgenden beschrieben. +Hier (Abbildung \ref{fig:TimeSyncProto}) stellt P1 den Client und P2 den Server dar. Da die \"{U}bertragungszeit $t_u$ einer Nachricht angenommen zwischen $t'_{min}$ und $t'_{max}$ liegt, setzt der Client P1 nach Empfang der Serverantwort seine lokale Prozesszeit auf + +\begin{equation*} + t_c := t_s + \frac{1}{2} (t'_{min} + t'_{max}) +\end{equation*} + +Somit wurde die lokale Zeit von P1, bis auf einen Fehler von $< \frac{1}{2} (t'_{max} - t'_{min})$, synchronisiert. + +Der Clientprozess hat in der Abbildung \ref{fig:TimeSyncProto} als Uhrabweichung den Wert \textit{0.1} und der Server hat als Uhrabweichung den Wert \textit{0.0} konfiguriert. Der Client startet, wie in Tabelle \ref{tb:InterneSyncTasks} angegeben, nach \textit{0ms}, \textit{5000ms} und \textit{10000ms} seiner lokalen Prozesszeit jeweils eine Clientanfrage. In der Abbildung l\"{a}sst sich erkennen, dass die 2. und die 3. Anfrage nicht synchron zu der globalen Zeit (siehe Sekunden-Gatter) gestartet wurden, was auf die Uhrabweichung von P1 zur\"{u}ckzuf\"{u}hren ist. Nach Simulationsende ist die Zeit von P1 bis auf \textit{15000ms} - \textit{15976ms} = \textit{-976ms} synchronisiert. \begin{table} \centering @@ -469,16 +488,6 @@ Bisher wurden nur Protokolle vorgef\"{u}hrt, in denen die beteiligten Prozesse k \label{tb:InterneSyncTasks} \end{table} -Hier (Abbildung \ref{fig:TimeSyncProto}) stellt P1 den Client und P2 den Server dar. Da die \"{U}bertragungszeit $t_u$ einer Nachricht angenommen zwischen $t'_{min}$ und $t'_{max}$ liegt, setzt der Client P1 nach Empfang der Serverantwort seine lokale Prozesszeit auf - -\begin{equation*} - t_c := t_s + \frac{1}{2} (t'_{min} + t'_{max}) -\end{equation*} - -Somit wurde die lokale Zeit von P1, bis auf einen Fehler von $< \frac{1}{2} (t'_{max} - t'_{min})$, synchronisiert. - -Der Clientprozess hat in der Abbildung \ref{fig:TimeSyncProto} als Uhrabweichung den Wert \textit{0.1} und der Server hat als Uhrabweichung den Wert \textit{0.0} konfiguriert. Der Client startet, wie in Tabelle \ref{tb:InterneSyncTasks} angegeben, nach \textit{0ms}, \textit{5000ms} und \textit{10000ms} seiner lokalen Prozesszeit jeweils eine Clientanfrage. In der Abbildung l\"{a}sst sich erkennen, dass die 2. und die 3. Anfrage nicht synchron zu der globalen Zeit (siehe Sekunden-Gatter) gestartet werden, was auf die Uhrabweichung von P1 zur\"{u}ckzuf\"{u}hren ist. Nach Simulationsende ist die Zeit von P1 bis auf \textit{15000ms} - \textit{15976ms} = \textit{-976ms} synchronisiert. - \subsubsection{Protokollvariablen} Dieses Protokoll verwendet folgende zwei clientseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``Interne Sync. Client'' konfiguriert werden k\"{o}nnen. Serverseitig gibt es hier keine Variablen. @@ -488,11 +497,12 @@ Dieses Protokoll verwendet folgende zwei clientseitige Variablen, die in den Pro \item \textbf{Max. \"{U}bertragungszeit} \textit{(Long: 2000)}: Gibt den Wert $t'_{max}$ in Millisekunden an \end{itemize} -$t'_{min}$ und $t'_{max}$ sind die bei den Protokollberechnungen verwendeten Werte. Sie k\"{o}nnen sich allerdings von den tats\"{a}chlichen Nachrichten\"{u}bertragungszeiten $t_{min}$ und $t_{max}$ (siehe Sektion \"{u}ber Prozesseinstellungen) unterscheiden. Somit lassen sich auch Szenarien simulieren, in denen das Protokoll falsch eingestellt wurde und wo in der Zeitsynchronisierung gr\"{o}ere Fehler auftreten k\"{o}nnen. +$t'_{min}$ und $t'_{max}$ sind die bei den Protokollberechnungen verwendeten Werte. Sie k\"{o}nnen sich allerdings von den tats\"{a}chlichen Nachrichten\"{u}bertragungszeiten $t_{min}$ und $t_{max}$ (siehe Sektion \"{u}ber Prozesseinstellungen) unterscheiden. Somit lassen sich auch Szenarien simulieren, in denen das Protokoll falsch eingestellt wurde und wo in der Zeitsynchronisierung groe Fehler auftreten k\"{o}nnen. +\newpage \subsection{Christians Methode zur externen Synchronisierung} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-time-sync-2}} \caption{Interne Synchronisierung und Christians Methode im Vergleich} @@ -509,9 +519,9 @@ Wenn der Client seine lokale Zeit $t_c$ bei einem Server synchronisieren m\"{o}c und zwar mit einer Genauigkeit von $\pm(\frac{1}{2} t_{rtt} - u_{min}$) wenn $u_{min}$ eine Schranke f\"{u}r eine Nachrichten\"{u}bertragung mit $t_{rtt} < u_{min}$ ist (siehe \cite{Vorlesung}). -Im Prinzip sieht eine Christians-Simulation so aus wie auf Abbildung \ref{fig:TimeSyncProto}, daher wird hier auf eine einfache Abbildung vom Christians-Protokoll verzichtet. Viel Interessanter ist der direkte Vergleich zwischen dem Protokoll zur internen Synchronisierung und der Christians Methode der externen Synchronisierung (Abbildung \ref{fig:TimeSync2Proto}). Hier stellt P1 den Client zur internen Synchronisierung und P3 den Client zur externen Synchronisierung dar. P2 fungiert f\"{u}r beide Protokolle gleichzeitig als Server. P1 und P3 starten jeweils zu den lokalen Prozesszeiten \textit{0ms}, \textit{5000ms} und \textit{10000ms} eine Clientanfrage (Tabelle \ref{tb:InterneSync2Tasks}). P1 und P3 haben als Uhrabweichung \textit{0.1} eingestellt und die Simulationsdauer betr\"{a}gt insgesamt \textit{15000ms}. +Im Prinzip sieht ein Verlauf einer Christians-Simulation so aus wie auf Abbildung \ref{fig:TimeSyncProto}, daher wird hier auf eine einfache Abbildung vom Christians-Protokoll verzichtet. Viel Interessanter ist der direkte Vergleich zwischen dem Protokoll zur internen Synchronisierung und der Christians Methode der externen Synchronisierung (Abbildung \ref{fig:TimeSync2Proto}). Hier stellt P1 den Client zur internen Synchronisierung und P3 den Client zur externen Synchronisierung dar. P2 fungiert f\"{u}r beide Protokolle gleichzeitig als Server. P1 und P3 starten jeweils zu den lokalen Prozesszeiten \textit{0ms}, \textit{5000ms} und \textit{10000ms} eine Clientanfrage (Tabelle \ref{tb:InterneSync2Tasks}). P1 und P3 haben als Uhrabweichung \textit{0.1} eingestellt und die Simulationsdauer betr\"{a}gt insgesamt \textit{15000ms}. -Auf der Abbildung \ref{fig:TimeSync2Proto} ist ablesbar, dass nach Ablauf der Simulation P1 seine Zeit bis auf \textit{15000ms} - \textit{14567ms} = \textit{433ms} und P3 seine Zeit bis auf \textit{15000ms} - \textit{15539ms} = \textit{-539ms} synchronisiert hat. In diesem Beispiel hat also das Protokoll zur internen Synchronisierung ein besseres Ergebnis geliefert. Dies ist allerdings nicht zwingend immer der Fall, da nach einer erneuten Ausf\"{u}hrung alle Nachrichten jeweils eine neue zuf\"{a}llige \"{U}bertragungszeit zwischen $t_{min}$ und $t_{max}$ haben werden, die auf das eine oder andere Protokoll wieder andere Auswirkungen haben k\"{o}nnen. +Auf der Abbildung \ref{fig:TimeSync2Proto} ist ablesbar, dass nach Ablauf der Simulation P1 seine Zeit bis auf \textit{15000ms} - \textit{14567ms} = \textit{433ms} und P3 seine Zeit bis auf \textit{15000ms} - \textit{15539ms} = \textit{-539ms} synchronisiert hat. In diesem Beispiel hat also das Protokoll zur internen Synchronisierung ein besseres Ergebnis geliefert. Dies ist allerdings nicht zwingend immer der Fall, da nach einer erneuten Simulationsausf\"{u}hrung alle Nachrichten jeweils eine neue zuf\"{a}llige \"{U}bertragungszeit zwischen $t_{min}$ und $t_{max}$ haben werden, die auf das eine oder andere Protokoll wieder andere Auswirkungen haben k\"{o}nnen. \begin{table} \centering @@ -535,9 +545,10 @@ Auf der Abbildung \ref{fig:TimeSync2Proto} ist ablesbar, dass nach Ablauf der Si \label{tb:InterneSync2Tasks} \end{table} +\newpage \subsection{Der Berkeley Algorithmus zur internen Synchronisierung} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-berkeley}} \caption{Der Berkeley Algorithmus zur internen Synchronisierung} @@ -546,23 +557,6 @@ Auf der Abbildung \ref{fig:TimeSync2Proto} ist ablesbar, dass nach Ablauf der Si Der Berkeley Algorithmus zur internen Synchronisierung ist eine weitere M\"{o}glichkeit lokale Uhrzeiten abzugleichen. Dies ist das erste Protokoll, wo der Server die Anfragen startet. Der Server stellt den Koordinator des Protokolls dar. Die Clients sind somit passiv und m\"{u}ssen warten, bis eine Serveranfrage eintrifft. Hierbei muss der Server wissen, welche Clientprozesse an dem Protokoll teilnehmen, was sich in den Protokolleinstellungen des Servers einstellen l\"{a}sst. -\begin{table} - \centering - \fbox{ - \begin{tabular}{c|c|l} - \textbf{Zeit (ms)} & \textbf{PID} & \textbf{Ereignis} \\ - \hline - 0000 & 1 & Berkeley Client aktivieren \\ - 0000 & 2 & Berkeley Server aktivieren \\ - 0000 & 3 & Berkeley Client aktivieren \\ - 0000 & 2 & Berkeley Serveranfrage starten\\ - 7500 & 2 & Berkeley Serveranfrage starten\\ - \end{tabular} - } - \caption{Programmierte Ereignisse zum Berkeley Algorithmus} - \label{tb:BerkeleyTasks} -\end{table} - Wenn der Server seine eigene lokale Zeit $t_s$ und auch die lokalen Prozesszeiten $t_i$ der Clients ($i = 1, ..., n$) synchronisieren m\"{o}chte, so verschickt er eine Serveranfrage. $n$ sei hierbei die Anzahl beteiligter Clients. Die Clients senden dann ihre lokalen Prozesszeiten in einer Nachricht zur\"{u}ck zum Server. Der Server hat dabei die RTTs $r_i$ bis zur Ankunft aller Clientantworten gemessen. Nachdem alle Antworten vorliegen, setzt er zun\"{a}chst seine eigene Zeit $t_s$ auf den Mittelwert $t_{avg}$ aller bekannten Prozesszeiten (seiner eigenen Prozesszeit eingeschlossen). Die \"{U}bertragungszeit einer Clientantwort wird auf die h\"{a}lfte der RTT gesch\"{a}tzt und wird in der Berechnung ber\"{u}cksichtigt: @@ -584,17 +578,34 @@ Anschlie Im Beispiel auf Abbildung \ref{fig:BerkeleyProto} gibt es die 2 Clientprozesse P1 und P3 sowie den Serverprozess P2. Der Server startet nach jeweils \textit{0ms} und \textit{7500ms} eine Synchronisierungsanfrage (Tabelle \ref{tb:BerkeleyTasks}). Hier f\"{a}llt auf, dass der Server stets 2 Korrekturwerte verschickt, die jeweils P1 und P3 erreichen. Es werden hier also pro Synchronisierungsvorgang insgesamt 4 Korrekturwerte ausgeliefert. Eine Korrekturnachricht enth\"{a}lt neben dem Korrekturwert $k_i$ auch die PID des Prozesses, f\"{u}r den die Nachricht bestimmt ist. Indem das Protokoll die PID \"{u}berprf\"{u}ft verarbeitet ein Client so nur die f\"{u}r ihn bestimmten Korrekturwerte. +\begin{table} + \centering + \fbox{ + \begin{tabular}{c|c|l} + \textbf{Zeit (ms)} & \textbf{PID} & \textbf{Ereignis} \\ + \hline + 0000 & 1 & Berkeley Client aktivieren \\ + 0000 & 2 & Berkeley Server aktivieren \\ + 0000 & 3 & Berkeley Client aktivieren \\ + 0000 & 2 & Berkeley Serveranfrage starten\\ + 7500 & 2 & Berkeley Serveranfrage starten\\ + \end{tabular} + } + \caption{Programmierte Ereignisse zum Berkeley Algorithmus} + \label{tb:BerkeleyTasks} +\end{table} \subsubsection{Protokollvariablen} Dieses Protokoll verwendet folgende serverseitige Variable, die in den Prozesseinstellungen unter dem Punkt ``Berkeley Server'' konfiguriert werden kann. Clientseitig gibt es hier keine Variablen. \begin{itemize} - \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Berkeley Clientprozesse, mit denen der Berkeley Server die Zeit synchronisieren soll. Das Protokoll funktioniert nicht wenn hier eine PID angegeben wird die gar nicht existiert oder nicht das Berkeley Protokoll clientseitig unterst\"{u}tz. In diesem Fall w\"{u}rde ewig auf eine fehlende Clientantwort gewartet werden. + \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Berkeley Clientprozesse, mit denen der Berkeley Server die Zeit synchronisieren soll. Das Protokoll funktioniert nicht, wenn hier eine PID angegeben wird die gar nicht existiert oder nicht das Berkeley Protokoll clientseitig gar nicht unterst\"{u}tz. In diesem Fall w\"{u}rde ewig auf eine fehlende Clientantwort gewartet werden. \end{itemize} +\newpage \subsection{Das Ein-Phasen Commit Protokoll} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-one-phase-commit}} \caption{Das Ein-Phasen Commit Protokoll} @@ -603,7 +614,7 @@ Dieses Protokoll verwendet folgende serverseitige Variable, die in den Prozessei Das Ein-Phasen Commit Protokoll ist daf\"{u}r gedacht beliebig vielen Clients zu einer Festschreibung zu bewegen. Im realen Leben k\"{o}nnte dies beispielsweise das Erstellen oder L\"{o}schen einer Datei sein, von der auf jedem Client eine lokale Kopie existiert. Der Server ist der Koordinator und auch derjenige, der einen Festschreibewunsch initiiert. Hierbei verschickt der Server periodisch so oft den Festschreibewunsch, bis er von jedem Client eine Best\"{a}tigung erhalten hat. Der Server muss dabei die PIDs aller beteiligten Clientprozesse sowie einen Wecker f\"{u}r erneutes Versenden des Festschreibewunsches eingestellt bekommen. -Die programmierten Ereignisse des Beispiels auf Abbildung \ref{fig:OnePhaseCommitProto} sind in Tabelle \ref{tb:OnePhaseCommitTasks} aufgelistet. P1 und P3 simulieren jeweils einen Client und P2 den Server. Damit die Simulation mehrere Festschreibew\"{u}nsche verschickt, st\"{u}rzt in der Simulation P1 nach \textit{1000ms} ab und nach \textit{5000ms} steht er wieder zur Verf\"{u}gung. Die ersten beide Festschreibew\"{u}nsche erreichen dadurch P1 nicht und erst der dritte Versuch verl\"{a}uft erfolgreich. Bevor die Best\"{a}tigung von P1 bei P2 eintrifft, l\"{a}uft jedoch der Wecker erneut ab, so dass ein weiterer Festschreibewunsch versendet wird. Da P1 und P3 jeweils schon eine Best\"{a}tigung verschickt haben, wird diese Festschreibewunschnachricht ignoriert. Jeder Client best\"{a}tigt auf einen Festschreibewunsch nur ein einziges Mal. +Die programmierten Ereignisse des Beispiels auf Abbildung \ref{fig:OnePhaseCommitProto} sind in Tabelle \ref{tb:OnePhaseCommitTasks} aufgelistet. P1 und P3 simulieren jeweils einen Client und P2 den Server. Damit die Simulation mehrere Festschreibew\"{u}nsche verschickt, st\"{u}rzt in der Simulation P1 nach \textit{1000ms} ab und nach \textit{5000ms} steht er wieder zur Verf\"{u}gung. Die ersten beide Festschreibew\"{u}nsche erreichen dadurch P1 nicht und erst der dritte Versuch verl\"{a}uft erfolgreich. Bevor die Best\"{a}tigung von P1 bei P2 eintrifft, l\"{a}uft jedoch der Wecker erneut ab, sodass ein weiterer Festschreibewunsch versendet wird. Da P1 und P3 jeweils schon eine Best\"{a}tigung verschickt haben, wird diese Festschreibewunschnachricht ignoriert. Jeder Client best\"{a}tigt auf einen Festschreibewunsch nur ein einziges Mal. \begin{table} \centering @@ -628,13 +639,14 @@ Die programmierten Ereignisse des Beispiels auf Abbildung \ref{fig:OnePhaseCommi Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``1-Phasen Commit Server'' konfiguriert werden k\"{o}nnen. Clientseitig gibt es hier keine Variablen. \begin{itemize} - \item \textbf{Zeit bis erneute Anfrage} \textit{(Long: 2500)}: Gibt die Anzahl von Millisekunden an, die gewartet werden sollen, bis der Festschreibewunsch erneut verschickt wird. - \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Clientprozesse, die festschreiben sollen. + \item \textbf{Zeit bis erneute Anfrage} \textit{(Long: timeout = 2500)}: Gibt die Anzahl von Millisekunden an, die gewartet werden sollen, bis der Festschreibewunsch erneut verschickt wird. + \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: pids = [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Clientprozesse, die festschreiben sollen. \end{itemize} +\newpage \subsection{Das Zwei-Phasen Commit Protokoll} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-two-phase-commit}} \caption{Das Zwei-Phasen Commit Protokoll} @@ -643,6 +655,8 @@ Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesse Das Zwei-Phasen Commit Protokoll ist eine Erweiterung des Ein-Phasen Commit Protokolls. Der Server startet zun\"{a}chst eine Anfrage an alle beteiligten Clients, ob festgeschrieben werden soll. Jeder Client antwortet dann mit \textit{true} oder \textit{false}. Der Server fragt so oft periodisch nach, bis alle Ergebnisse aller Clients vorliegen. Nach Erhalt aller Abstimmungen \"{u}berpr\"{u}ft der Server, ob alle mit \textit{true} abgestimmt haben. F\"{u}r den Fall dass mindestens ein Client mit \textit{false} abgestimmt hat, wird der Festschreibevorgang abgebrochen und als globales Abstimmungsergebnis \textit{false} verschickt. Wenn jedoch alle mit \textit{true} abstimmten, soll festgeschrieben werden. Dabei wird das globale Abstimmungsergebnis \textit{true} verschickt. Das globale Abstimmungsergebnis wird periodisch so oft erneut verschickt, bis von jedem Client eine Best\"{a}tigung des Erhalts vorliegt. +In dem Beispiel (Abbildung \ref{fig:TwoPhaseCommitProto}) sind P1 und P3 Clients und P2 der Server. Der Server verschickt nach \textit{0ms} seine erste Anfrage (Tabelle \ref{tb:TwoPhaseCommitTasks}). Da diese Simulation recht un\"{u}bersichtlich ist, liegen in den Tabellen \ref{tb:TwoPhaseCommitLoggs} und \ref{tb:TwoPhaseCommitLoggs2} Ausz\"{u}ge aus dem Loggfenster vor. Auf die Lamport- und Vektorzeitstempel sowie die lokalen Prozesszeiten wurde hier wegen Irrelevanz verzichtet. Da keine Uhrabweichungen konfiguriert wurden, sind die lokalen Prozesszeiten stets gleich der globalen Zeit und deswegen wird in den Tabellen pro Loggeintrag jeweils nur eine Zeit angegeben. Anhand der Nachrichten IDs lassen sich dort die einzelnen Sendungen zuordnen. In den Loggs wird auch st\"{a}ndig der Inhalt der verschickten Nachricht sowie die dazugeh\"{o}rigen Datentypen aufgef\"{u}hrt. Hier stimmen P1 und P3 jeweils mit \textit{true}, d.h. es soll festgeschrieben werden, ab. + \begin{table} \centering \fbox{ @@ -659,7 +673,21 @@ Das Zwei-Phasen Commit Protokoll ist eine Erweiterung des Ein-Phasen Commit Prot \label{tb:TwoPhaseCommitTasks} \end{table} -In dem Beispiel (Abbildung \ref{fig:TwoPhaseCommitProto}) sind P1 und P3 Clients und P2 der Server. Der Server verschickt nach \textit{0ms} seine erste Anfrage (Tabelle \ref{tb:TwoPhaseCommitTasks}). Da diese Simulation recht un\"{u}bersichtlich ist, liegen in den Tabellen \ref{tb:TwoPhaseCommitLoggs} und \ref{tb:TwoPhaseCommitLoggs2} Ausz\"{u}ge aus dem Loggfenster vor. Auf die Lamport- und Vektorzeitstempel sowie die lokalen Prozesszeiten wurde hier wegen Irrelevanz verzichtet. Da keine Uhrabweichungen konfiguriert wurden, sind die lokalen Prozesszeiten stets gleich der globalen Zeit und deswegen wird hier pro Loggeintrag jeweils nur eine Zeit angegeben. Anhand der Nachrichten IDs lassen sich dort die einzelnen Sendungen zuordnen. In den Loggs wird auch st\"{a}ndig der Inhalt der verschickten Nachricht sowie die dazugeh\"{o}rigen Datentypen aufgef\"{u}hrt. Hier stimmen P1 und P3 jeweils mit \textit{true}, d.h. es soll festgeschrieben werden, ab. +\subsubsection{Protokollvariablen} + +Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``2-Phasen Commit Server'' konfiguriert werden k\"{o}nnen: + +\begin{itemize} + \item \textbf{Zeit bis erneute Anfrage} \textit{(Long: timeout = 2500)}: Gibt die Anzahl von Millisekunden an, die gewartet werden sollen, bis der Festschreibewunsch erneut verschickt wird. + \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: pids = [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Clientprozesse die \"{u}ber eine Festschreibung abstimmen und anschlieend gegebenenfalls festschreiben sollen. +\end{itemize} + +Und folgende Clientvariable kann unter den Prozesseinstellungen unter dem Punkt ``2-Phasen Commit Client'' konfiguriert werden: + +\begin{itemize} + \item \textbf{Festschreibwahrscheinlichkeit} \textit{(Integer: ackProb = 50)}: Gibt die Wahrscheinlichkeit in Prozent an, die der Client mit \textit{true}, also f\"{u}r das Festschreiben, abstimmt. +\end{itemize} + \begin{table} \centering \fbox{ @@ -785,30 +813,22 @@ In dem Beispiel (Abbildung \ref{fig:TwoPhaseCommitProto}) sind P1 und P3 Clients \label{tb:TwoPhaseCommitLoggs2} \end{table} -\subsubsection{Protokollvariablen} - -Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``2-Phasen Commit Server'' konfiguriert werden k\"{o}nnen: - -\begin{itemize} - \item \textbf{Zeit bis erneute Anfrage} \textit{(Long: 2500)}: Gibt die Anzahl von Millisekunden an, die gewartet werden sollen, bis der Festschreibewunsch erneut verschickt wird. - \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Clientprozesse, die \"{u}ber eine Festschreibung abstimmen, und anschlieend gegebenenfalls festschreiben sollen. -\end{itemize} - -Und folgende Clientvariable kann unter den Prozesseinstellungen unter dem Punkt ``2-Phasen Commit Client'' konfiguriert werden: - -\begin{itemize} - \item \textbf{Festschreibwahrscheinlichkeit} \textit{(Integer: 50)}: Gibt die Wahrscheinlichkeit in Prozent an, die der Client mit \textit{true}, also f\"{u}r das Festschreiben, abstimmt. -\end{itemize} - +\newpage \subsection{Der ungen\"{u}gende (Basic) Multicast} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-basic-multicast}} \caption{Das Basic-Multicast Protokoll} \label{fig:BasicMulticastProto} \end{figure} +Das Basic-Multicast Protokoll ist sehr einfach aufgebaut. Im Beispiel auf Abbildung \ref{fig:BasicMulticastProto} sind P1 und P3 Server und P2 der Client. Bei diesem Protokoll startet der Client immer die Anfrage, welche bei diesem Protokoll eine einfache Multicast-Nachricht darstellen soll. Die Basic-Multicast Server dienen lediglich f\"{u}r den Empfang einer Nachricht. Es werden keine Best\"{a}tigungen verschickt. Wie in Tabelle \ref{tb:BasicMulticastTasks} aufgef\"{u}hrt verschickt P2 alle \textit{2500ms} jeweils eine Multicast-Nachricht, die alle voneinander v\"{o}llig unabh\"{a}ngig sind. + +P1 kann jedoch erst nach \textit{2500ms} Multicast-Nachrichten empfangen, da er vorher das Protokoll nicht unterst\"{u}tzt w\"{a}hrend P3 von \textit{3000ms} bis \textit{6000ms} abgest\"{u}rzt ist und in dieser Zeit auch keine Nachrichten empfangen kann. Je nach Interpretation k\"{o}nnte P1 einen Server simulieren, der erst sp\"{a}ter ans Netz angeschlossen wird. Da die Einstellung ``Nur relevante Nachrichten anzeigen'' aktiviert ist, wird die erste Multicast-Nachricht von P2 an P1 nicht dargestellt. Bei jedem Prozess wurde die Nachrichtenverlustwahrscheinlichkeit auf \textit{30} Prozent gestellt, weswegen alle in dieser Simulation verschickten Nachrichten mit einer Wahrscheinlichkeit von \textit{30} Prozent ausfallen. + +In diesem Beispiel ging die 3. Multicast-Nachricht auf den Weg zu P3- und die 5. sowie 6. Nachricht auf den Weg zu P1 verloren. Lediglich die 4. Multicast-Nachricht hat alle beiden Ziele aufeinmal erreicht. + \begin{table} \centering \fbox{ @@ -832,16 +852,10 @@ Und folgende Clientvariable kann unter den Prozesseinstellungen unter dem Punkt \label{tb:BasicMulticastTasks} \end{table} - -Das Basic-Multicast Protokoll ist sehr einfach aufgebaut. Im Beispiel auf Abbildung \ref{fig:BasicMulticastProto} sind P1 und P3 Server und P2 der Client. Bei diesem Protokoll startet der Client immer die Anfrage, welche bei diesem Protokoll eine einfache Multicast-Nachricht darstellen soll. Die Basic-Multicast Server dienen lediglich f\"{u}r den Empfang einer Nachricht. Es werden keine Best\"{a}tigungen verschickt. Wie in Tabelle \ref{tb:BasicMulticastTasks} aufgef\"{u}hrt verschickt P2 alle \textit{2500ms} jeweils eine Multicast-Nachricht, die alle voneinander v\"{o}llig unabh\"{a}ngig sind. - -P1 kann jedoch erst nach \textit{2500ms} Multicast-Nachrichten empfangen, da er vorher das Protokoll nicht unterst\"{u}tzt w\"{a}hrend P3 von \textit{3000ms} bis \textit{6000ms} abgest\"{u}rzt ist und in dieser Zeit auch keine Nachrichten empfangen kann. Je nach Interpretation k\"{o}nnte P1 einen Server simulieren, der erst sp\"{a}ter ans Netz angeschlossen wird. Da die Einstellung ``Nur relevante Nachrichten anzeigen'' aktiviert ist, wird die erste Multicast-Nachricht von P2 an P1 nicht dargestellt. Bei jedem Prozess wurde die Nachrichtenverlustwahrscheinlichkeit auf \textit{30} Prozent gestellt, weswegen alle in dieser Simulation verschickten Nachrichten mit einer Wahrscheinlichkeit von \textit{30} Prozent ausfallen. - -In diesem Beispiel ging die 3. Multicast-Nachricht auf den Weg zu P3- und die 5. sowie 6. Nachricht auf den Weg zu P1 verloren. Lediglich die 4. Multicast-Nachricht hat alle beiden Ziele aufeinmal erreicht. - +\newpage \subsection{Der zuverl\"{a}ssige (Reliable) Multicast} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-reliable-multicast}} \caption{Das Reliable-Multicast Protokoll} @@ -1009,24 +1023,25 @@ In diesem Beispiel ben\"{o}tigt der Client bis zur erfolgreichen Auslieferung de Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``Reliable Multicast Server'' konfiguriert werden k\"{o}nnen: \begin{itemize} - \item \textbf{Zeit bis erneute Anfrage} \textit{(Long: 2500)}: Gibt die Anzahl von Millisekunden an, die gewartet werden sollen, bis der Muticast erneut verschickt wird. - \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Serverprozesse, die die Multicast-Nachricht erhalten sollen. + \item \textbf{Zeit bis erneute Anfrage} \textit{(Long: timeout = 2500)}: Gibt die Anzahl von Millisekunden an, die gewartet werden sollen, bis der Muticast erneut verschickt wird. + \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: pids = [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Serverprozesse, die die Multicast-Nachricht erhalten sollen. \end{itemize} +\newpage \section{Weitere Beispiele} Bisher wurden alle verf\"{u}gbaren Protokolle anhand von Beispielen aufgef\"{u}hrt. Mit dem Simulator lassen sich allerdings noch viel mehr Szenarien simulieren. Daher soll hier auf weitere Anwendungsbeispiele eingegangen werden. \subsection{Vektor- und Lamportzeitstempel} -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-berkeley-lamport}} \caption{Lamportzeitstempel} \label{fig:Lamportzeit} \end{figure} -Die Vektor- und Lamportzeitstempel lassen sich sehr gut am bereits behandeltem Beispiel des Berkeley-Protokoll's demonstrieren. Nach Aktivierung der Lamportzeit-Checkbox erscheinen bei jedem Ereignis die zum jeweiligen Prozess geh\"{o}rigen Lamportzeitstempel (Abbildung \ref{fig:Lamportzeit}). Jeder Prozess besitzt einen eigenen Lamportzeitstempel, der bei jedem Versenden oder Erhalten einer Nachricht inkrementiert wird. Jeder Nachricht wird die aktuelle Lamportzeit $t_l(i)$ des sendenden Prozesses $i$ beigef\"{u}gt. Wenn ein weiterer Prozess $j$ diese Nachricht erh\"{a}lt, so wird der aktuelle Lamportzeitstempel $t_l(j)$ von Prozess $j$ wie folgt neu berechnet: +Die Vektor- und Lamportzeitstempel lassen sich sehr gut am bereits behandeltem Beispiel des Berkeley-Protokoll's demonstrieren. Nach Aktivierung des Lamportzeit-Schalters erscheint bei jedem Ereignis die zum jeweiligen Prozess geh\"{o}rigen Lamportzeitstempel (Abbildung \ref{fig:Lamportzeit}). Jeder Prozess besitzt einen eigenen Lamportzeitstempel, der bei jedem Versenden oder Erhalten einer Nachricht inkrementiert wird. Jeder Nachricht wird die aktuelle Lamportzeit $t_l(i)$ des Senderprozesses $i$ beigef\"{u}gt. Wenn ein weiterer Prozess $j$ diese Nachricht erh\"{a}lt, so wird der aktuelle Lamportzeitstempel $t_l(j)$ von Prozess $j$ wie folgt neu berechnet: \begin{equation*} t_l(j) := 1 + max(t_l(j), t_l(i)) @@ -1034,16 +1049,16 @@ Die Vektor- und Lamportzeitstempel lassen sich sehr gut am bereits behandeltem B Es wird also stets die gr\"{o}ssere Lamportzeit vom Sender- und Empf\"{a}ngerprozess verwendet und anschlieend wird diese um \textit{1} inkrementiert. Nach Ablauf der Berkeley-Simulation hat P1 \textit{(16)}, P2 (\textit{14}) und P3 (\textit{15}) als Lamportzeitstempel abgespeichert. -\begin{figure}[htbp] +\begin{figure}[h] \centering \fbox{\includegraphics[width=10cm]{images/ss-protokoll-berkeley-vektor}} \caption{Vektorzeitstempel} \label{fig:Vektorzeit} \end{figure} -Mit aktivierter Vektorzeit-Checkbox werden, wie auf Abbildung \ref{fig:Vektorzeit}, alle Vektor-Zeitstempel angezeigt. Wie bei den Lamportzeitstempeln wird auch hier jeder Nachricht der aktuelle Vektor-Zeitstempel des Senderprozesses beigegef\"{u}gt. Bei $n$ beteiligten Prozessen hat der Vektor-Zeitstempel $v$ die gr\"{o}e $n$. Somit gibt es f\"{u}r jeden beteiligten Prozess $i$ einen eigenen Index $i$. \"{U}ber $v(i)$ kann jeder Prozess auf seine lokale logische Zeit zugreifen. +Mit aktiven Vektorzeit-Schalter werden alle Vektor-Zeitstempel angezeigt (Abbildung \ref{fig:Vektorzeit}). Wie bei den Lamportzeitstempeln wird auch hier jeder Nachricht der aktuelle Vektor-Zeitstempel des Senderprozesses beigegef\"{u}gt. Bei $n$ beteiligten Prozessen hat der Vektor-Zeitstempel $v$ die gr\"{o}e $n$. Somit gibt es f\"{u}r jeden beteiligten Prozess $i$ einen eigenen Index $i$. \"{U}ber $v(i)$ kann jeder Prozess auf seinen lokalen Eintrag zugreifen. -Standardm\"{a}ig wird der Vektor-Zeitstempel nur inkrementiert, wenn eine Nachricht verschickt- oder erhalten wird. Bei beiden F\"{a}llen inkrementiert der Sender- beziehungsweise Senderprozess seinen eigenen Index im Vektor-Zeitstempel mit $v(i) = v(i) + 1$. Beim Empfang einer Nachricht wird anschlieend der lokale Vektor-Zeitstempel mit dem des Senderprozesses verglichen und f\"{u}r alle Indizies stets der gr\"{o}ere Wert in den lokalen Vektor-Zeitstempel \"{u}bernommen. +Standardm\"{a}ig wird der Vektor-Zeitstempel nur inkrementiert, wenn eine Nachricht verschickt- oder erhalten wird. Bei beiden F\"{a}llen inkrementiert der Sender- und Empf\"{a}ngerprozess jeweils seinen eigenen Index im Vektor-Zeitstempel mit $v(i) = v(i) + 1$. Beim Empfang einer Nachricht wird anschlieend der lokale Vektor-Zeitstempel mit dem des Senderprozesses verglichen und f\"{u}r alle Indizies stets der gr\"{o}ere Wert in den lokalen Vektor-Zeitstempel \"{u}bernommen. Im Beispiel auf Abbildung \ref{fig:Vektorzeit} hat P1 \textit{(8,10,6)}, P2 \textit{(6,10,6)} und P3 \textit{(6,10,8)} als Vektor-Zeitstempel abgespeichert. diff --git a/LaTeX/chapters/titlepage.tex b/LaTeX/chapters/titlepage.tex index d305ce3..fb11c49 100644 --- a/LaTeX/chapters/titlepage.tex +++ b/LaTeX/chapters/titlepage.tex @@ -52,12 +52,33 @@ \vspace*{0.5cm} \begin{flushleft} - {Aachen, den \today \\} + {Aachen, \today \\} \end{flushleft} \end{titlepage} %\selectlanguage{german} +\vspace*{2cm} +\textbf{\LARGE Erkl\"{a}rung} +\vspace*{1.5cm} + +Ich versichere hiermit, dass ich die vorliegende Arbeit selbstst\"{a}ndig verfasst und keine anderen als die im Literaturverzeichnis angegebenen Quellen benutzt habe. + +Stellen, die w\"{o}rtlich oder sinngem\"{a} aus ver\"{o}ffentlichen oder noch nicht ver\"{o}ffentlichen Quellen entnommen sind, sind als solche kenntlich gemacht. + +Die Zeichnungen oder Abbildungen in dieser Arbeit sind von mir selbst erstellt worden oder mit einem entsprechenden Quellennachweis versehen. + +Diese Arbeit ist in gleicher oder \"{a}hnlicher Form noch bei keiner anderen Pr\"{u}fungsbeh\"{o}rde eingereicht worden. + +Aachen, \today \\ + +\vspace*{2cm} +\textbf{\LARGE Geheimhaltung} +\vspace*{1.5cm} + +Diese Diplomarbeit darf weder vollst\"{a}nding noch auszugsweise ohne schriftliche Zustimmung des Autors, des betreuenden Referenzen bzw. der Fachhochschule Aachen vervielf\"{a}ltigt, ver\"{o}ffentlicht oder Dritten zug\"{a}nglich gemacht werden. + +\newpage \vspace*{2cm} \textbf{\LARGE Danksagungen} \vspace*{1.5cm} @@ -73,7 +94,7 @@ Ohne die Hilfe folgender Personen w\"{a}re die Anfertigung dieser Diplomarbeit i \item Leslie B\"{u}tow \end{itemize} -Auch vielen Dank an die Open Source Gemeinde, denn diese Diplomarbeit wurde ausschlielich mit Hilfe von Open Source Software angefertigt +Auch vielen Dank an die Open Source Gemeinde, denn diese Diplomarbeit wurde ausschlielich mithilfe von Open Source Software angefertigt \tableofcontents diff --git a/LaTeX/diplomarbeit.pdf b/LaTeX/diplomarbeit.pdf index 6412634..365f0c6 100644 --- a/LaTeX/diplomarbeit.pdf +++ b/LaTeX/diplomarbeit.pdf @@ -168,134 +168,146 @@ endobj (\376\377\0003\000.\0002\000\040\000E\000i\000n\000s\000t\000e\000l\000l\000u\000n\000g\000e\000n\000\040\000u\000n\000d\000\040\000E\000d\000i\000t\000o\000r\000e\000n) endobj 117 0 obj -<< /S /GoTo /D (section.3.3) >> +<< /S /GoTo /D (subsection.3.2.1) >> endobj 120 0 obj -(\376\377\0003\000.\0003\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e) +(\376\377\0003\000.\0002\000.\0001\000\040\000E\000i\000n\000s\000t\000e\000l\000l\000u\000n\000g\000s\000o\000b\000j\000e\000k\000t\000e) endobj 121 0 obj -<< /S /GoTo /D (subsection.3.3.1) >> +<< /S /GoTo /D (subsection.3.2.2) >> endobj 124 0 obj -(\376\377\0003\000.\0003\000.\0001\000\040\000D\000i\000e\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000v\000o\000n\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n) +(\376\377\0003\000.\0002\000.\0002\000\040\000E\000d\000i\000t\000o\000r\000o\000b\000j\000e\000k\000t\000e) endobj 125 0 obj -<< /S /GoTo /D (subsection.3.3.2) >> +<< /S /GoTo /D (section.3.3) >> endobj 128 0 obj -(\376\377\0003\000.\0003\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000s) +(\376\377\0003\000.\0003\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e) endobj 129 0 obj -<< /S /GoTo /D (section.3.4) >> +<< /S /GoTo /D (subsection.3.3.1) >> endobj 132 0 obj -(\376\377\0003\000.\0004\000\040\000Z\000e\000i\000t\000f\000o\000r\000m\000a\000t\000e\000,\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000,\000\040\000N\000a\000c\000h\000r\000i\000c\000h\000t\000e\000n\000\040\000s\000o\000w\000i\000e\000\040\000T\000a\000s\000k\000-\000M\000a\000n\000a\000g\000e\000r) +(\376\377\0003\000.\0003\000.\0001\000\040\000D\000i\000e\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000v\000o\000n\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n) endobj 133 0 obj -<< /S /GoTo /D (subsection.3.4.1) >> +<< /S /GoTo /D (subsection.3.3.2) >> endobj 136 0 obj -(\376\377\0003\000.\0004\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e) +(\376\377\0003\000.\0003\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000E\000r\000e\000i\000g\000n\000i\000s\000s\000e\000s) endobj 137 0 obj -<< /S /GoTo /D (subsection.3.4.2) >> +<< /S /GoTo /D (section.3.4) >> endobj 140 0 obj -(\376\377\0003\000.\0004\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\040\000f\000\374\000r\000\040\000d\000i\000e\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000v\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n) +(\376\377\0003\000.\0004\000\040\000Z\000e\000i\000t\000f\000o\000r\000m\000a\000t\000e\000,\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000,\000\040\000N\000a\000c\000h\000r\000i\000c\000h\000t\000e\000n\000\040\000s\000o\000w\000i\000e\000\040\000T\000a\000s\000k\000-\000M\000a\000n\000a\000g\000e\000r) endobj 141 0 obj -<< /S /GoTo /D (section.3.5) >> +<< /S /GoTo /D (subsection.3.4.1) >> endobj 144 0 obj -(\376\377\0003\000.\0005\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e) +(\376\377\0003\000.\0004\000.\0001\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e) endobj 145 0 obj -<< /S /GoTo /D (subsection.3.5.1) >> +<< /S /GoTo /D (subsection.3.4.2) >> endobj 148 0 obj -(\376\377\0003\000.\0005\000.\0001\000\040\000D\000i\000e\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000d\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000-\000A\000P\000I\000s) +(\376\377\0003\000.\0004\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000\040\000f\000\374\000r\000\040\000d\000i\000e\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000v\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000r\000e\000i\000g\000n\000i\000s\000s\000e\000n) endobj 149 0 obj -<< /S /GoTo /D (subsection.3.5.2) >> +<< /S /GoTo /D (section.3.5) >> endobj 152 0 obj -(\376\377\0003\000.\0005\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000s) +(\376\377\0003\000.\0005\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e) endobj 153 0 obj -<< /S /GoTo /D (subsection.3.5.3) >> +<< /S /GoTo /D (subsection.3.5.1) >> endobj 156 0 obj -(\376\377\0003\000.\0005\000.\0003\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000e\000i\000g\000e\000n\000e\000r\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e) +(\376\377\0003\000.\0005\000.\0001\000\040\000D\000i\000e\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000s\000w\000e\000i\000s\000e\000\040\000d\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000-\000A\000P\000I\000s) endobj 157 0 obj -<< /S /GoTo /D (section.3.6) >> +<< /S /GoTo /D (subsection.3.5.2) >> endobj 160 0 obj -(\376\377\0003\000.\0006\000\040\000G\000U\000I) +(\376\377\0003\000.\0005\000.\0002\000\040\000B\000e\000i\000s\000p\000i\000e\000l\000i\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000e\000i\000n\000e\000s\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000s) endobj 161 0 obj -<< /S /GoTo /D (section.3.7) >> +<< /S /GoTo /D (subsection.3.5.3) >> endobj 164 0 obj -(\376\377\0003\000.\0007\000\040\000S\000e\000r\000i\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000e\000n) +(\376\377\0003\000.\0005\000.\0003\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000e\000i\000g\000e\000n\000e\000r\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e) endobj 165 0 obj -<< /S /GoTo /D (subsection.3.7.1) >> +<< /S /GoTo /D (section.3.6) >> endobj 168 0 obj -(\376\377\0003\000.\0007\000.\0001\000\040\000R\000\374\000c\000k\000w\000\344\000r\000t\000s\000k\000o\000m\000p\000a\000t\000i\000b\000e\000l) +(\376\377\0003\000.\0006\000\040\000G\000U\000I) endobj 169 0 obj -<< /S /GoTo /D (section.3.8) >> +<< /S /GoTo /D (section.3.7) >> endobj 172 0 obj -(\376\377\0003\000.\0008\000\040\000W\000e\000i\000t\000e\000r\000e\000s) +(\376\377\0003\000.\0007\000\040\000S\000e\000r\000i\000a\000l\000i\000s\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000S\000i\000m\000u\000l\000a\000t\000i\000o\000n\000e\000n) endobj 173 0 obj -<< /S /GoTo /D (section.3.9) >> +<< /S /GoTo /D (subsection.3.7.1) >> endobj 176 0 obj -(\376\377\0003\000.\0009\000\040\000E\000n\000t\000w\000i\000c\000k\000l\000u\000n\000g\000s\000u\000m\000g\000e\000b\000u\000n\000g) +(\376\377\0003\000.\0007\000.\0001\000\040\000R\000\374\000c\000k\000w\000\344\000r\000t\000s\000k\000o\000m\000p\000a\000t\000i\000b\000e\000l) endobj 177 0 obj -<< /S /GoTo /D (chapter.4) >> +<< /S /GoTo /D (section.3.8) >> endobj 180 0 obj -(\376\377\0004\000\040\000A\000u\000s\000b\000l\000i\000c\000k) +(\376\377\0003\000.\0008\000\040\000W\000e\000i\000t\000e\000r\000e\000s) endobj 181 0 obj -<< /S /GoTo /D (appendix.A) >> +<< /S /GoTo /D (section.3.9) >> endobj 184 0 obj -(\376\377\000A\000\040\000A\000k\000r\000o\000n\000y\000m\000s) +(\376\377\0003\000.\0009\000\040\000E\000n\000t\000w\000i\000c\000k\000l\000u\000n\000g\000s\000u\000m\000g\000e\000b\000u\000n\000g) endobj 185 0 obj -<< /S /GoTo /D (appendix.B) >> +<< /S /GoTo /D (chapter.4) >> endobj 188 0 obj -(\376\377\000B\000\040\000L\000i\000t\000e\000r\000a\000t\000u\000r\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s) +(\376\377\0004\000\040\000A\000u\000s\000b\000l\000i\000c\000k) endobj 189 0 obj -<< /S /GoTo /D [190 0 R /Fit ] >> +<< /S /GoTo /D (appendix.A) >> +endobj +192 0 obj +(\376\377\000A\000\040\000A\000k\000r\000o\000n\000y\000m\000s) +endobj +193 0 obj +<< /S /GoTo /D (appendix.B) >> +endobj +196 0 obj +(\376\377\000B\000\040\000L\000i\000t\000e\000r\000a\000t\000u\000r\000v\000e\000r\000z\000e\000i\000c\000h\000n\000i\000s) +endobj +197 0 obj +<< /S /GoTo /D [198 0 R /Fit ] >> endobj -193 0 obj << -/Length 830 +201 0 obj << +/Length 826 /Filter /FlateDecode >> stream -xڍUMs6W(͔ͮWvҦZD#.d%`xxvb$)b:KV #[ܻ@RSŅ[[ܼ|GU1@dP+ a/dg1/nr0YԓEdi4ɌªcWrI38ZAp^N޼㚀1A¹ rfrxSé W*?W]Yٴ8;WsiWhe8X˙eӺ%'adrD:-fs.}]Y',r[= h(wÿm>I`NX7$P*n}*@@ x)O=F$hH D=櫢WE*] -mO=Ӓ* - u𓃏!U24uWEU>E[_dQmf Z;q@a\QP,:?jk WEJ)ٛLqΥ9x_&EM}nýcD׾k|YnZ҅0D٢&]Y4󪺠M s N|R#?gt3Xbj%=qUwi >0dj:VA,}q-6c⧩]~G%5 Bb$=yW\xzt/>A =KPwy*6bq5K{+ʼ-M{Rh͇3*yUN˱j|J+ -ypΎcC>?ZG%^AR Umz1{Nucmendstream +xڍUKs6W(͔of׊N];ri-A"kL %YI:<X,vA ? FRɜ"F;jd0Ż $)5J<\;uop\mXQ.z,$ZL|!=}gCPb䦞/6/RȘL8*:yE/@dӌS; Xd!kj2-Mo]q=_,g/8u:ʀ *AJQ%<<?uuS+}38vc{.W3_㘱FԮCaLp1[CмE?'4!ޮ!M caf ] +%T=ke=)KPJjqT*'8e5Ҋa(Dc8Q+`J_mߦ~s51D G܉endstream endobj -190 0 obj << +198 0 obj << /Type /Page -/Contents 193 0 R -/Resources 192 0 R +/Contents 201 0 R +/Resources 200 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 202 0 R +/Parent 210 0 R >> endobj -191 0 obj << +199 0 obj << /Type /XObject /Subtype /Image /Width 500 @@ -456,1028 +468,1015 @@ j'F 5M%jKqizlO<ԕ#C~%(4p<]gʟ~c ]'?Ӹ)E- sOyGKrm{/ n-ptuk.#I"vq1HF4G"X!)̷ƪmu/XFoON&3a> g)yC_mm|+!`a >_W?P04ȹW\5??h]UC͒$pS؁ʟtrendstream endobj -194 0 obj << -/D [190 0 R /XYZ 74.4095 769.8898 null] +202 0 obj << +/D [198 0 R /XYZ 74.4095 769.8898 null] >> endobj -195 0 obj << -/D [190 0 R /XYZ 74.4095 769.8898 null] +203 0 obj << +/D [198 0 R /XYZ 74.4095 769.8898 null] >> endobj -192 0 obj << -/Font << /F26 198 0 R /F28 201 0 R >> -/XObject << /Im1 191 0 R >> +200 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> +/XObject << /Im1 199 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -205 0 obj << -/Length 792 +213 0 obj << +/Length 892 /Filter /FlateDecode >> stream -xڕVMs0Wp$[>d2$3A) -!IOvY  p bL!)Ula1Xښ t:֛nQf<̹ajطPX\9=Wgݧگ٤rS[=|L, .c LfCeLƼEClYcendstream +xڍUn8+tF =H`)qR-@ƀ~YAX{=> / *)!ip`z_ʘe;^"K,:ǻ_2H5e{j&k ?.Sز!zAuPMY2˲o1:dueE-N#_8FHE8 sO՚$E¹הbFDZR( {o|X:. Eh.;mm^ W< Q'[%!֪}*t7` ;~Z*suɔ e qJAʥ1 WbH19XViP Hķ +)/KHB;!idzIgW.k* +vsqy#oj >qԳDR&ڦ +&l,P>n,|YS'dY(ֻѪ%)>r [Ib/џmy˴巄 +C1D\q{oJ7. pV1H9:+zF"M6<{v0Kᆱ\MWU\Vڕݼayj7"Aӷ\rTRp:h;vrͣi*@I3i·5E,f^I v,|,dIii-z} 6NMƴǨV:#B䤧"6lF ’PW0f [*WeC!w}> endobj -206 0 obj << -/D [204 0 R /XYZ 74.4095 793.4011 null] +214 0 obj << +/D [212 0 R /XYZ 74.4095 793.4011 null] >> endobj -203 0 obj << -/Font << /F26 198 0 R /F28 201 0 R /F33 209 0 R >> +211 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -212 0 obj << -/Length 2201 +217 0 obj << +/Length 790 /Filter /FlateDecode >> stream -x]4+|\D㒥Kt`(ad=$NG-G죴 ;iWGOdY!H8؈Lf^lc{t%B*ȻmL )GU>J©n^|5{`R!f8~]|S>uW~x\ȋ}x,jݷ/n@$f }΋$SF {Qi:'@ivN##%ͫ\ZۢE},7]" i6>b%,"dhAO&38S`BX2sA|l%DR}Ij.ZRXžR "D, ʫN`HR^Rn¿.c?)E {6&9pH(1"Q[ -!9cce2 ,")4-`bq,M,,E")8yw)l8Q yKn4@T#\i9W>./s4UzC[R8nOvGH#SsJĦ5tDԕ5yNJS O^&_^y[{c~i=?X{8Eo~>S)$p0^ UԮ0l -Kﱂ2֫[݇κ^alg+V=xQnpDۅ< qJ"F |_Bpր@qk ^:Xoyea++, YYu"B_&WVZtArb ->I.rv- E-ܣ[Uor.a3a_J! -X<|9(̂rb^s!*8!zGYim ڮwO1Ԯ$ KSJԸo~' &5n-'u&qZ^2%meZ*Z$, U o6vhN1LcZ -F(L@Nn0zu09ۂVmeu,'z=-L2nSeRJ @?;J'r (nMG`y2-S$AWyypـg k|*:*ȞR'[J+QuBLWV  -9a,pӋZDW gxX# ClwLxy.s>N$@=Q0YrDK=̓싞|{ڈyܥ]_ңɔsOgx6c*Ү5I6l[K Eɦ-iᩊy6}r]uff),$-B#O+JؤL#CW<O %3fZ -O(L<DeOva~_WEh2{ZG%, -ф f3nASN E&5adzGNhQMQ(}û/Wϻ2ԧOۂlw-nk,R,/;c>9=:J&gI:={0j^Sۢ\y\W]q -~B##{ڍ&ju}7 A0Uqk.U|zc:AqT]<_^6?X9B?#$v]s@(np΃d2$3A)_ I C֫}ڷJ08$b<zE[1PP)A((EQ: zzh hsSGFNH`ojڐ*xһRl6gQJݶ睒Iho΀cY&n]W[6妭@eqHY|l g'sdvWU^4+Yj@[Osr;X~S.mey25!B1eJ4Z]wmvQtLih[+ +]Νf/"JE[t꜓B AT992l(aVz0e_4uWJܳ^(Zk@,sW['ħRzE{QmWˆQѧQd8 +P(Ϫ('DP^Mzͪ=LgCupT(i:zN{:V4tfU%vBM yF,, dU 1Ф +Qa +a*X*Y'T>lfGQa +a*X*Y'Tm心qQ8@sm 3 Y27X,]x~_Y;ROdJ_\s:6(m$̥a/jޗa'ԵҶ3Yp2g~P +7, +=js+&fX9 XG#c} zWendstream endobj -211 0 obj << +216 0 obj << /Type /Page -/Contents 212 0 R -/Resources 210 0 R +/Contents 217 0 R +/Resources 215 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 202 0 R -/Annots [ 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R ] +/Parent 210 0 R +>> endobj +218 0 obj << +/D [216 0 R /XYZ 74.4095 793.4011 null] >> endobj 215 0 obj << +/Font << /F26 206 0 R /F28 209 0 R /F35 221 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +224 0 obj << +/Length 2207 +/Filter /FlateDecode +>> +stream +x]4+|\D[%K 3P.®zH_d[YGiEv:d7::L2lLqq.23~gݫp.R?&] _LcZH9rVh$8Vus⋯G9f!)b9ïo*+Ey4/UY/=$2CL_" ┱INwC";l2I,bZ(To-WRmYm9V.F4ۉHk2GR)0D!,Y~A2|Jhɢ,A%MkIbݔ*H!Rg~0WNpBCj5/~>Ѱg!'JI|HKIᐜ12 Zft_`F08VquEu"9y7a( +<>A[-8--H\wW/4Ҝp5l'hŗ*-)^fg3UP~W% ;",v52Es_L\~X`'f/ˢKg[i}qcy4Fq^eXW?~c^ys9JJ*jf&|cJć2`֦!=PY, ,1rSwN[MQ`NK3?^x;Uՙ5,+oW0ak- +:W R:M+a=Ɣuή0bLk|bvՋ` Cqx]}hm jPYi&HurnYMB|*a(lG`= BGc< +ak-"N-s5-S: xdv2OKe]}[efм{ +yf8&8:U=J'԰PԙxRSi-Sx:Óxʔtij) +2?hS%QSЪCm3*a{2}5wWy9 +[k!W`yڍJNϯ핷LqֽYiq۔m@Ře {z}6By:q)h0>B΄PI(OlX&O{vۇIr}6\3~|!N0:r5##J0Gak-sID-rT >re>/\xЩ%>|ʻG-5wߖ F92mNjA=mpԆ?|wӾ3)TJɐ2$f*az=12}'y@ [K E==.vj<6؞`j֩q>k> endobj +227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 602.7474 132.1982 613.2758] /Subtype /Link /A << /S /GoTo /D (chapter.1) >> >> endobj -216 0 obj << +228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 585.4997 150.1131 594.0645] /Subtype /Link /A << /S /GoTo /D (section.1.1) >> >> endobj -217 0 obj << +229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 564.6297 156.4611 575.212] /Subtype /Link /A << /S /GoTo /D (section.1.2) >> >> endobj -218 0 obj << +230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 537.7331 147.4677 546.3786] /Subtype /Link /A << /S /GoTo /D (chapter.2) >> >> endobj -219 0 obj << +231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 516.7914 266.0381 527.3736] /Subtype /Link /A << /S /GoTo /D (section.2.1) >> >> endobj -220 0 obj << +232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 497.8402 189.5647 508.1086] /Subtype /Link /A << /S /GoTo /D (section.2.2) >> >> endobj -221 0 obj << +233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 478.6738 151.3326 489.0498] /Subtype /Link /A << /S /GoTo /D (section.2.3) >> >> endobj -222 0 obj << +234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 459.6149 163.3025 469.991] /Subtype /Link /A << /S /GoTo /D (section.2.4) >> >> endobj -223 0 obj << +235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 440.6638 219.7364 450.9322] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.1) >> >> endobj -224 0 obj << +236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 421.4973 237.2476 432.0796] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.2) >> >> endobj -225 0 obj << +237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 402.4385 280.8776 412.8146] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.3) >> >> endobj -226 0 obj << +238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 383.3797 269.5888 393.7557] /Subtype /Link /A << /S /GoTo /D (subsection.2.4.4) >> >> endobj -227 0 obj << +239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 366.1322 149.1627 374.697] /Subtype /Link /A << /S /GoTo /D (section.2.5) >> >> endobj -228 0 obj << +240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 345.3698 245.963 355.8444] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.1) >> >> endobj -229 0 obj << +241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 326.2033 235.2122 336.5793] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.2) >> >> endobj -230 0 obj << +242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 308.9558 234.1633 317.5205] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.3) >> >> endobj -231 0 obj << +243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 288.0857 430.8561 298.668] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.4) >> >> endobj -232 0 obj << +244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 269.0269 339.714 279.6092] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.5) >> >> endobj -233 0 obj << +245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 249.9681 361.5826 260.5504] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.6) >> >> endobj -234 0 obj << +246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 232.7206 273.5162 241.4916] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.7) >> >> endobj -235 0 obj << +247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 213.6618 279.3982 222.4328] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.8) >> >> endobj -236 0 obj << +248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 192.7917 278.1965 203.374] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.9) >> >> endobj -237 0 obj << +249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 173.7329 283.3791 184.3152] /Subtype /Link /A << /S /GoTo /D (subsection.2.5.10) >> >> endobj -238 0 obj << +250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 154.7818 178.9666 165.0501] /Subtype /Link /A << /S /GoTo /D (section.2.6) >> >> endobj -239 0 obj << +251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.4855 135.723 264.7471 145.9913] /Subtype /Link /A << /S /GoTo /D (subsection.2.6.1) >> >> endobj -213 0 obj << -/D [211 0 R /XYZ 74.4095 793.4011 null] +225 0 obj << +/D [223 0 R /XYZ 74.4095 793.4011 null] >> endobj -214 0 obj << -/D [211 0 R /XYZ 74.4095 634.2859 null] +226 0 obj << +/D [223 0 R /XYZ 74.4095 634.2859 null] >> endobj -210 0 obj << -/Font << /F26 198 0 R /F28 201 0 R >> +222 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -242 0 obj << -/Length 1860 +254 0 obj << +/Length 1990 /Filter /FlateDecode >> stream -xnFjå:B$}Β\rm+@s0 ش{fvqvXAFI*pXq~F+xeE/bg?Ьi-ל0tor}s5+.>l󟟝w~jPjxͅ՝% U"^2#ƀLev *JA 짪/U.7nʌ&JJQľj"$ sNaLJzC7X.Ɯ-"N 8kU'ABl5II|j{s5gtߖ5l;3d6UI,a,> /8>f֞?z8;)4h-_yE qAC\ik g¢v'j(gYvhAI[/hɨŇ~B -KB<3zrv5Äix)A5N!;;\>+0DWZAy1GVj082dCZ"idnU ,zXV"ЬjL=OJ),'ZChMA-bPfCZj"Tz B6,X"(|L6֒kbxkD m-_~b.LMɠpϸ%Y5 ੟|,؉xFOTjmg1o+()D ϦMWUKv$Zvm[8B/xrTasa౵o:Še3fjm -Vqtއ5A' 赿t7뻷BIX<ߕN1f}JgPMDɹWFWhR{H& ESQI&ъډ@m[QyYm#ZiȭV5GwiSȩ='9IM1y=˕0P&.5 fW5%O^U:,XjX;L kPMakq̱adYDG)NՈ]BB{kПn Tww* -f;߰Z6xd!7ժp{(}O }ΔRFWf@Bm^m&R"0r+SbT.9߳!$NWM/7XoEgg- O.gDh]r.pFN.O Pjw2XෛųݥrcɊ:U&>ֱa lbDsZ ӄb^%p +;0 +eH|ʮSwRdӺ:^]Lx*Rf#Xn#0ܦj04Ȁx&`erIh_zP-bH0`0otS`wjMbz='P$Ciaߕ5 %MEZ C`* ɼIx ]Ė N<*L\} oPm7~*}z +߶l|ڻZhT9mgAI E9JHļLu()*WUtR F6@HPC HvE,K*~68481 Mi"D lݶ([_@ԶK Wmsǿ,/'LaocslY,cۅ1}he;R"[UfUmtU}%]yDZMASt9QhtD u簽î]Ң(-aN"-A<kQ^ZMzbhCr3ɟ4n_!g@df8tnE3D3?'!rA&'z"\*x k082kCZ"idnUՄZw p=,+zhVRk5zcħS1z"sB XnjAy*!uA +4 P~J,hRk>j0I=XR^&$ Sv~22gJLJ/ R(jN75J[U&>q,LSn?+ҧa>g:a6ƺL:/iΟ|kQgvi5feBfdzOKaFnJ=P;ET)u?9yendstream endobj -241 0 obj << +253 0 obj << /Type /Page -/Contents 242 0 R -/Resources 240 0 R +/Contents 254 0 R +/Resources 252 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 202 0 R -/Annots [ 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R ] +/Parent 210 0 R +/Annots [ 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R ] >> endobj -247 0 obj << +259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 756.786 177.5405 767.3144] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj -248 0 obj << +260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 738.8587 199.1048 749.2347] /Subtype /Link /A << /S /GoTo /D (section.3.1) >> >> endobj -249 0 obj << +261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 720.9315 216.6336 731.3075] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj -250 0 obj << +262 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [107.4855 703.0042 215.4148 713.3802] +/Subtype /Link +/A << /S /GoTo /D (subsection.3.2.1) >> +>> endobj +263 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [107.4855 685.1846 190.4974 695.453] +/Subtype /Link +/A << /S /GoTo /D (subsection.3.2.2) >> +>> endobj +264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 703.0042 151.3326 713.3802] +/Rect [86.8628 667.1498 151.3326 677.5258] /Subtype /Link /A << /S /GoTo /D (section.3.3) >> >> endobj -251 0 obj << +265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 685.077 281.595 695.453] +/Rect [107.4855 649.2225 281.595 659.5985] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.1) >> >> endobj -252 0 obj << +266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 667.1498 308.7178 677.5258] +/Rect [107.4855 631.2953 308.7178 641.6713] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.2) >> >> endobj -253 0 obj << +267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 649.2225 334.173 659.8048] +/Rect [86.8628 613.3681 334.173 623.9503] /Subtype /Link /A << /S /GoTo /D (section.3.4) >> >> endobj -254 0 obj << +268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 633.1065 199.5985 641.6713] +/Rect [107.4855 597.252 199.5985 605.8168] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.1) >> >> endobj -255 0 obj << +269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 613.3681 336.6387 623.9503] +/Rect [107.4855 577.5136 336.6387 588.0958] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.2) >> >> endobj -256 0 obj << +270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 597.252 149.1627 605.8168] +/Rect [86.8628 561.3976 149.1627 569.9624] /Subtype /Link /A << /S /GoTo /D (section.3.5) >> >> endobj -257 0 obj << +271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 579.3248 291.6013 587.8896] +/Rect [107.4855 543.4703 291.6013 552.0351] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.1) >> >> endobj -258 0 obj << +272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 559.5864 301.5626 569.9624] +/Rect [107.4855 523.7319 301.5626 534.1079] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.2) >> >> endobj -259 0 obj << +273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 541.6591 252.6067 552.0351] +/Rect [107.4855 505.8046 252.6067 516.1807] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.3) >> >> endobj -260 0 obj << +274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 525.5431 125.42 534.3141] +/Rect [86.8628 489.6886 125.42 498.4597] /Subtype /Link /A << /S /GoTo /D (section.3.6) >> >> endobj -261 0 obj << +275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 505.8046 235.0054 516.3869] +/Rect [86.8628 469.9502 235.0054 480.5324] /Subtype /Link /A << /S /GoTo /D (section.3.7) >> >> endobj -262 0 obj << +276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 487.9851 223.368 498.2534] +/Rect [107.4855 452.1306 223.368 462.399] /Subtype /Link /A << /S /GoTo /D (subsection.3.7.1) >> >> endobj -263 0 obj << +277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 471.7614 144.581 480.3262] +/Rect [86.8628 435.9069 144.581 444.4717] /Subtype /Link /A << /S /GoTo /D (section.3.8) >> >> endobj -264 0 obj << +278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 452.0229 203.8034 462.399] +/Rect [86.8628 416.1685 203.8034 426.5445] /Subtype /Link /A << /S /GoTo /D (section.3.9) >> >> endobj -265 0 obj << +279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 427.0123 125.6888 435.6578] +/Rect [73.4132 391.1578 125.6888 399.8033] /Subtype /Link /A << /S /GoTo /D (chapter.4) >> >> endobj -266 0 obj << +280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 398.3747 132.3418 408.5714] +/Rect [73.4132 362.5203 132.3418 372.7169] /Subtype /Link /A << /S /GoTo /D (appendix.A) >> >> endobj -267 0 obj << +281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 373.2251 174.1512 381.8706] +/Rect [73.4132 337.3706 174.1512 346.0161] /Subtype /Link /A << /S /GoTo /D (appendix.B) >> >> endobj -243 0 obj << -/D [241 0 R /XYZ 74.4095 793.4011 null] +255 0 obj << +/D [253 0 R /XYZ 74.4095 793.4011 null] >> endobj -240 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> +252 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -270 0 obj << -/Length 2411 +284 0 obj << +/Length 2387 /Filter /FlateDecode >> stream -xK8:s7yY%FW=R,7-T",\a`6*!1RGoʆJ$#es#$GJ@Rd+,f~ 0I:#UU/aaTW?6@鿠 ?B'BWbg/]4>] -9GA,t%^T~x0`cm>ԎJ%jrչ+Ф\,tJۚo&̀P0OyVgjf{Q(`Rcm-{?YRe(^1F/r}gqC2$$B/KvB _큷|Lf@(X[K Z8܀(5=&fb{aQx)Tkl7endstream +x[6+h?csb $m4c"ˁe%%RDh&* @F\9$mN$C,< Ë4ٙ;b\HbM R^Fb8cJyOD$Nir3H soՏETK~twkc_xsi!F}]f I*H+c!v|xN'9"D*QV;NȚF덠d,ÇteM^Voۼ,`aJBQt;Hˁy6!78EJs ǻwt&azJ5\l0ׇ?>;;#n7HRjb$6ԌSp-n=>C!x9! $IEfRj!.? /EOQ#B&)#0ִoSo& +1TO +i]hj.(ɒ^-ɧ&JR^guE3s!-IBej 2&Jz +?@ eM0`4њgO .".(5B#f7G,뼰eyv#KJ$-K͸`!$}'B 8<$P"MP؊8Y z!/iL+Dպɀ.t}yģʁa@)h9FK%@R;!@t̶wY}W:eI&PH:uR3vgtڲ +*x3rESL:G8w~j; ?YOǪ#x("=8! 3׼ǣyG @P[H"h:hg[j^ڷȪ;ۼV:ʼG]AJ&q_f#}i8xHP"Bt̥qrKW{4?۷~,wGGyv_!14պQ'Zj]Dy"3Y 9B݆s~|< |1B507z +< x< 8 :9`)ۘߡc401U$-35pz*k8tendstream endobj -269 0 obj << +283 0 obj << /Type /Page -/Contents 270 0 R -/Resources 268 0 R +/Contents 284 0 R +/Resources 282 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 202 0 R -/Annots [ 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R ] +/Parent 210 0 R +/Annots [ 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R ] >> endobj -273 0 obj << +287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 612.3463 309.1743 622.821] +/Rect [86.8628 614.0499 190.237 622.821] /Subtype /Link /A << /S /GoTo /D (figure.1.1) >> >> endobj -274 0 obj << +288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 596.1014 190.237 604.8725] +/Rect [86.8628 596.1014 203.516 604.8725] /Subtype /Link /A << /S /GoTo /D (figure.1.2) >> >> endobj -275 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 578.153 203.516 586.924] -/Subtype /Link -/A << /S /GoTo /D (figure.1.3) >> ->> endobj -276 0 obj << +289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 550.2418 265.2216 559.0128] +/Rect [86.8628 568.1903 265.2216 576.9613] /Subtype /Link /A << /S /GoTo /D (figure.2.1) >> >> endobj -277 0 obj << +290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 532.3741 155.8157 540.8581] +/Rect [86.8628 550.3225 155.8157 558.8066] /Subtype /Link /A << /S /GoTo /D (figure.2.2) >> >> endobj -278 0 obj << +291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 514.3448 194.1104 523.1159] +/Rect [86.8628 532.2933 194.1104 541.0644] /Subtype /Link /A << /S /GoTo /D (figure.2.3) >> >> endobj -279 0 obj << +292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 496.3964 234.6025 504.9611] +/Rect [86.8628 514.3448 234.6025 522.9096] /Subtype /Link /A << /S /GoTo /D (figure.2.4) >> >> endobj -280 0 obj << +293 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 476.6366 323.1705 487.2189] +/Rect [86.8628 494.5851 323.1705 505.1674] /Subtype /Link /A << /S /GoTo /D (figure.2.5) >> >> endobj -281 0 obj << +294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 460.4994 254.9919 469.2704] +/Rect [86.8628 478.4479 254.9919 487.2189] /Subtype /Link /A << /S /GoTo /D (figure.2.6) >> >> endobj -282 0 obj << +295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 440.7397 257.9592 451.3219] +/Rect [86.8628 458.6881 257.9592 469.2704] /Subtype /Link /A << /S /GoTo /D (figure.2.7) >> >> endobj -283 0 obj << +296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 422.7912 237.633 433.3734] +/Rect [86.8628 440.7397 318.4276 451.1157] /Subtype /Link /A << /S /GoTo /D (figure.2.8) >> >> endobj -284 0 obj << +297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 404.8427 318.4276 415.2187] +/Rect [86.8628 422.7912 237.633 433.3734] /Subtype /Link /A << /S /GoTo /D (figure.2.9) >> >> endobj -285 0 obj << +298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 386.8942 174.9945 397.4764] +/Rect [86.8628 404.8427 174.9945 415.4249] /Subtype /Link /A << /S /GoTo /D (figure.2.10) >> >> endobj -286 0 obj << +299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 369.0533 241.7841 379.528] +/Rect [86.8628 387.0018 241.7841 397.4764] /Subtype /Link /A << /S /GoTo /D (figure.2.11) >> >> endobj -287 0 obj << +300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 351.1048 233.9117 361.5795] +/Rect [86.8628 369.0533 233.9117 379.528] /Subtype /Link /A << /S /GoTo /D (figure.2.12) >> >> endobj -288 0 obj << +301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 333.0487 289.0185 343.631] +/Rect [86.8628 350.9972 289.0185 361.5795] /Subtype /Link /A << /S /GoTo /D (figure.2.13) >> >> endobj -289 0 obj << +302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 315.1002 319.2616 325.6825] +/Rect [86.8628 333.0487 319.2616 343.631] /Subtype /Link /A << /S /GoTo /D (figure.2.14) >> >> endobj -290 0 obj << +303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 297.1517 206.5199 307.5277] +/Rect [86.8628 315.1002 206.5199 325.4762] /Subtype /Link /A << /S /GoTo /D (figure.2.15) >> >> endobj -291 0 obj << +304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 279.2032 239.1211 289.7855] +/Rect [86.8628 297.1517 239.1211 307.734] /Subtype /Link /A << /S /GoTo /D (figure.2.16) >> >> endobj -292 0 obj << +305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 263.066 205.4709 271.6308] +/Rect [86.8628 281.0145 205.4709 289.5792] /Subtype /Link /A << /S /GoTo /D (figure.2.17) >> >> endobj -293 0 obj << +306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 243.3063 284.5622 253.8885] +/Rect [86.8628 261.2547 284.5622 271.837] /Subtype /Link /A << /S /GoTo /D (figure.2.18) >> >> endobj -294 0 obj << +307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 225.3578 357.9149 235.94] +/Rect [86.8628 243.3063 357.9149 253.8885] /Subtype /Link /A << /S /GoTo /D (figure.2.19) >> >> endobj -295 0 obj << +308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 207.4093 332.8902 217.9915] +/Rect [86.8628 225.3578 332.8902 235.94] /Subtype /Link /A << /S /GoTo /D (figure.2.20) >> >> endobj -296 0 obj << +309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 191.272 244.8239 200.0431] +/Rect [86.8628 209.2205 244.8239 217.9915] /Subtype /Link /A << /S /GoTo /D (figure.2.21) >> >> endobj -297 0 obj << +310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 173.3235 250.7058 182.0946] +/Rect [86.8628 191.272 250.7058 200.0431] /Subtype /Link /A << /S /GoTo /D (figure.2.22) >> >> endobj -298 0 obj << +311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 155.375 225.385 163.9398] +/Rect [86.8628 173.3235 225.385 181.8883] /Subtype /Link /A << /S /GoTo /D (figure.2.23) >> >> endobj -299 0 obj << +312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 137.5073 235.6693 145.9913] +/Rect [86.8628 155.375 235.6693 163.9398] /Subtype /Link /A << /S /GoTo /D (figure.2.24) >> >> endobj -271 0 obj << -/D [269 0 R /XYZ 74.4095 793.4011 null] +313 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [86.8628 135.723 187.9328 145.9913] +/Subtype /Link +/A << /S /GoTo /D (figure.2.25) >> >> endobj -272 0 obj << -/D [269 0 R /XYZ 74.4095 639.0049 null] +285 0 obj << +/D [283 0 R /XYZ 74.4095 793.4011 null] >> endobj -268 0 obj << -/Font << /F26 198 0 R /F28 201 0 R >> +286 0 obj << +/D [283 0 R /XYZ 74.4095 639.0049 null] +>> endobj +282 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -329 0 obj << -/Length 879 +343 0 obj << +/Length 813 /Filter /FlateDecode >> stream -xn0y -fc.@CQ9$J}Ŵ(RN@ 9[!GbN$pNf Fno+oV<o?':E7DhIH8fsβau ?9bk/;-ؔ1#o@HWC5ޒjt6atU'ThO d_6(M6,⾟@M|A"j$,4uàL}o>A rڤ ީF -Z -y۔P'Zi*7iZkI*Ԭ-ˊr#XjqQi#I1Q8/[x=L[C4@{Ԇ%FxVT()#EjK}qO2[VZ\l]1:KPnT#qs(+'`*v=:w9/8@K݉jS6- 8`u;HᨧzIPcP' }:]j:| xs! u+-ԋbbjJrP]ec-<j>`SUaUǼ zE -x J)?D7K!R"Yھ!l!R^QrU!ZQ]~{dŲ-5B+6بF2x}|;UpdCkUANy=kW ;Q ~<óф4ך:e,hmOz֖-rd0oE5p ٮl}?4HG%LɥUD`qIGDO#>Yڞxj TcN{ '=Sy[)|J ҪFlCendstream +xn@yYڕΙ,["uUU%.=ƌ<1,$b wab$)bdv ~{vœP~zbZ5JPJ`n.*m1\lʟ/]:ZjBP 'p_T XCr؎rַmNՉf86HˉҲWzSW]0ZH,‹FJI1+ + ڴo7BީF|5+F7u,GĬ; YxydRPhLp)1-%G릇 kA37&Βw8ʄUxGmxCCpހiyś?xjsyXlu7G[s6(=aU#pR#> endobj -331 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 756.8936 187.9328 767.1619] -/Subtype /Link -/A << /S /GoTo /D (figure.2.25) >> +/Parent 352 0 R +/Annots [ 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R ] >> endobj -332 0 obj << +345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 738.9663 179.8813 749.2347] +/Rect [86.8628 756.8936 179.8813 767.1619] /Subtype /Link /A << /S /GoTo /D (figure.2.26) >> >> endobj -333 0 obj << +346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 711.0765 172.9861 721.5511] +/Rect [86.8628 729.0037 172.9861 739.4783] /Subtype /Link /A << /S /GoTo /D (figure.3.1) >> >> endobj -334 0 obj << +347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 693.1492 202.2519 703.6238] +/Rect [86.8628 711.0765 202.2519 721.5511] /Subtype /Link /A << /S /GoTo /D (figure.3.2) >> >> endobj -335 0 obj << +348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 676.9256 233.9432 685.4904] +/Rect [86.8628 694.8528 233.9432 703.4176] /Subtype /Link /A << /S /GoTo /D (figure.3.3) >> >> endobj -336 0 obj << +349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 658.9983 189.7217 667.5631] +/Rect [86.8628 676.9256 189.7217 685.4904] /Subtype /Link /A << /S /GoTo /D (figure.3.4) >> >> endobj -337 0 obj << +350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 641.0711 170.4263 649.6359] +/Rect [86.8628 658.9983 170.4263 667.5631] /Subtype /Link /A << /S /GoTo /D (figure.3.5) >> >> endobj -338 0 obj << +351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [86.8628 621.4403 254.8524 631.7087] +/Rect [86.8628 639.3675 254.8524 649.6359] /Subtype /Link /A << /S /GoTo /D (figure.3.6) >> >> endobj -330 0 obj << -/D [328 0 R /XYZ 74.4095 793.4011 null] +344 0 obj << +/D [342 0 R /XYZ 74.4095 793.4011 null] >> endobj -327 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> +341 0 obj << +/Font << /F61 258 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -349 0 obj << +362 0 obj << /Length 1851 /Filter /FlateDecode >> stream -xYoF)(f1n`$FiL:ğ>ԊC9l;( D8كPaDR\0\ޞd~9aH 9pwޞ3>hfRygNGMH$WOΧNҋlȊn:ctSx)_O^wqΪCY1-}R -W6CT'@5%3L Xⴖ^Emy02i' -.NM6qc'/Q˳(Tm1~r5Y՛n -w:?WşM]p{)OB 﫵P*%R=^6Ջ;ïٓ%)Kn$޼df(Pj} TiC!l*y [7 #骁0d6?4XWuvo˝۩ W1ppZ$L7Ck5JPMu{wć}LU1W%VM/h}&}4(,dcT1)c t{h~1N $Ihb)=#X`Ѻ|:jF150dIooQ&(A|v^6Ua΢>4j q1n?ؽdb D {+ɔdbQG)WHl*2BfUf5w,"Zb)gIiLlc5 4#{(K%VJ8JO%u1L:J}$ezu7ýRXp0Wb D {+TbQGJ/él**͑T7ƻm ʋMVǢY/\{ ->ZK¥I%xm5 NnO#?LyIhbo3E$03d0y1;Iۭ`3Xȧz.YBVScQaDR2\0]ޞl~9aH 9pwݞ3>hfRygGKHdWǖ|cIGx(/.rS?翞<"n Ub Z$`9ml9ׁk@&)"[6i-ƪ3"8ad<т^Y^9͋˛|<Ǝ^cyyWKPFrV8j(7gU|)?7wnFC8< %DΪGHz/z~˞d(N\rg#9%3E`uORf8nrH +agTC|yN9.[ί5p5~;6is V" ӍYTj;hULUUmdϤřlj&^c̋rn/Ɖw" UOB 2RnJO,VX7_wAbQ5Q͈RF5ᙟ,?jԆ ʺigE9y8r3O*M8A}IkApr7$X2*2EL, 2% +8QMOȬ޿YoFEZK,, 3mzf~d%=bTb D{:hK{&QM>bzu9]{"L ^X$a?x +P.VQ)TbQJ/élj*͑T7ƻM *u^Dz]/\{ +>ZK¥Y%xc#NnO#7<U{KѨC|2j~j}6ϋ˛ƽ=+}ڿ}*avJkZTBj*vkG`4-lx걷 +6 /؀X4yagT澺6Cs{˓s|>[4@[xm +fTgaqkz4 +|vIhboĢjJjǙlp +U2ɢL`?Et(*mv`۱Q-Nv4< ZC8 +:C =i dA׿W((%jŭ55tߡ'$+I䫂/4,řF }﹟mVwf/f +#huq7k|:^ՑdCAPnc2[kf1L].VaӘaQ8R9kărCۆJœTY$Ʈ,(ߕMK @C*ҋZ4ЄDhqqtU\NQ}FuĹDNOu/"Z-xbo5/u*$R=iHTǑ:wgUD(* O>#<}ㅿd )P!Vȗ/J?+BjRbg:C=|MO"ZYǣlk#Nh@{xDaP +f +ugܟGΨ<g=; L,S(V;ZU4oX-o݇7AjGkgTm{wY_2wZoW{ :Tea'\;  {/Z[ozAF.9L:vF51> endobj -352 0 obj << +365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 612.425 338.2165 623.0073] /Subtype /Link /A << /S /GoTo /D (table.2.1) >> >> endobj -353 0 obj << +366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 594.4978 298.9616 605.0801] /Subtype /Link /A << /S /GoTo /D (table.2.2) >> >> endobj -354 0 obj << +367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 576.5706 180.2935 586.9466] /Subtype /Link /A << /S /GoTo /D (table.2.3) >> >> endobj -355 0 obj << +368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 558.6433 257.1971 569.0193] /Subtype /Link /A << /S /GoTo /D (table.2.4) >> >> endobj -356 0 obj << +369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 540.7161 289.7984 551.2984] /Subtype /Link /A << /S /GoTo /D (table.2.5) >> >> endobj -357 0 obj << +370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 522.7889 256.1481 533.1649] /Subtype /Link /A << /S /GoTo /D (table.2.6) >> >> endobj -358 0 obj << +371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 504.8616 335.2394 515.4439] /Subtype /Link /A << /S /GoTo /D (table.2.7) >> >> endobj -359 0 obj << +372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 486.9344 406.6109 497.5167] /Subtype /Link /A << /S /GoTo /D (table.2.8) >> >> endobj -360 0 obj << +373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 469.0072 319.7369 479.3832] /Subtype /Link /A << /S /GoTo /D (table.2.9) >> >> endobj -361 0 obj << +374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 451.0799 295.5011 461.6622] /Subtype /Link /A << /S /GoTo /D (table.2.10) >> >> endobj -362 0 obj << +375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 433.1527 301.3831 443.735] /Subtype /Link /A << /S /GoTo /D (table.2.11) >> >> endobj -363 0 obj << +376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 415.2255 371.7415 425.8077] /Subtype /Link /A << /S /GoTo /D (table.2.12) >> >> endobj -364 0 obj << +377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 397.2982 385.1908 407.8805] /Subtype /Link /A << /S /GoTo /D (table.2.13) >> >> endobj -365 0 obj << +378 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 379.371 276.0623 389.747] /Subtype /Link /A << /S /GoTo /D (table.2.14) >> >> endobj -366 0 obj << +379 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 361.4438 286.3466 371.8198] /Subtype /Link /A << /S /GoTo /D (table.2.15) >> >> endobj -367 0 obj << +380 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 343.5165 356.705 353.8925] /Subtype /Link /A << /S /GoTo /D (table.2.16) >> >> endobj -368 0 obj << +381 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 325.5893 370.1543 336.1716] /Subtype /Link /A << /S /GoTo /D (table.2.17) >> >> endobj -369 0 obj << +382 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 299.5107 177.8368 308.0754] /Subtype /Link /A << /S /GoTo /D (table.3.1) >> >> endobj -370 0 obj << +383 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.8628 281.5834 345.4789 290.3545] /Subtype /Link /A << /S /GoTo /D (table.3.2) >> >> endobj -350 0 obj << -/D [348 0 R /XYZ 74.4095 793.4011 null] +363 0 obj << +/D [361 0 R /XYZ 74.4095 793.4011 null] >> endobj -351 0 obj << -/D [348 0 R /XYZ 74.4095 643.0739 null] +364 0 obj << +/D [361 0 R /XYZ 74.4095 643.0739 null] >> endobj -347 0 obj << -/Font << /F26 198 0 R /F28 201 0 R /F61 246 0 R >> +360 0 obj << +/Font << /F26 206 0 R /F28 209 0 R /F61 258 0 R >> /ProcSet [ /PDF /Text ] >> endobj -394 0 obj << -/Length 1836 +405 0 obj << +/Length 1758 /Filter /FlateDecode >> stream -xڍXo8 _GXi[it* }v-[L9[A3]{C#j-A׳W e$/Xt 7<.lo Үq\= K1YL"!e؝Fn QVh,־mP*N JԛX%aGw7כ ]u O$8U|H`Næ4SR/l<ͮl#k(j@k*{0uN{$.tOR&'( | ~Oqݰȷ Zu0R~<-!arG<6\06r y$?όOKY0JT_J -fM+endstream +xڍXKo8W([&n[h=lӃ32 +D|R]7yЎŋ" J,Z4,v2Y Z)+EJyC".CeR7g|VP^aIn6_d\%E_t0Iʊ\*J5uݳ˛0JBj)KcP_cEVQaO*)va"2Fx%( 2zPN7QJ1rQUN&@ +,?rVq=$@A1{޻Do]Y򻒭d9 ٛ% cّJKsthʢ`S| rgB|)fqVIXz8\-(p_D+'6)iizBp4vpR +rq`1yϟ.Y#Xy:k-VS6G€#SqC QQp7Dn=:eDPy{aᏵ +;~pؽot\rzf38b^Hu ˨=Mޟw{RW4 +n;z?Mo5'yE!SF9!н "Az*o*)BW<6: :wm{4OO4wC)' ;sx$Ȟ/m'8\!ֲ*5K2he7ZmkTfn꾑\B8v6sF ~5Q +/2|ʾGbڠ%"6c]+B?'5y{ %y%S>ZKNCAnȓL)W +K4<9s2GNBr{,KqY3R 3_kܸiʵ\yO`6zKiW QبנS2<'G3s96lΕcM|mekYsi, NC {jTI>H;Wqn5chk/}o이,5{zQ$űya bMH =QB3~Gj2iEKN_eK!DqՆ@[Mq\o"ȪuN'+r*8ìvwy煲 ,O~+D巇adT oS";N+/endstream endobj -393 0 obj << +404 0 obj << /Type /Page -/Contents 394 0 R -/Resources 392 0 R +/Contents 405 0 R +/Resources 403 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 371 0 R -/Annots [ 396 0 R 397 0 R ] +/Parent 352 0 R +/Annots [ 407 0 R ] >> endobj -396 0 obj << +407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [75.9058 417.1708 102.2418 425.7356] /Subtype /Link /A << /S /GoTo /D (cite.Tanenbaum) >> >> endobj -397 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 351.9902 87.8688 362.5725] -/Subtype /Link -/A << /S /GoTo /D (figure.1.1) >> ->> endobj -395 0 obj << -/D [393 0 R /XYZ 74.4095 793.4011 null] +406 0 obj << +/D [404 0 R /XYZ 74.4095 793.4011 null] >> endobj 6 0 obj << -/D [393 0 R /XYZ 74.4095 771.7323 null] +/D [404 0 R /XYZ 74.4095 771.7323 null] >> endobj 10 0 obj << -/D [393 0 R /XYZ 74.4095 570.9064 null] +/D [404 0 R /XYZ 74.4095 570.9064 null] >> endobj -392 0 obj << -/Font << /F26 198 0 R /F28 201 0 R /F61 246 0 R >> +403 0 obj << +/Font << /F26 206 0 R /F28 209 0 R /F61 258 0 R >> /ProcSet [ /PDF /Text ] >> endobj -402 0 obj << -/Length 1233 +413 0 obj << +/Length 1854 /Filter /FlateDecode >> stream -xڭWKoFWHzߏޚhF/q(E6%E#k3|IG(`AHXp'Vxޗ~{3$Hɓ -0o]mlNN JC̾\>tHKI q!U2IU_biN>FhE;|IWx14YϘH)ړrv=S9ȴ잜*cio.>i~Z" @,:]?m_@a SBDz;2IM :Q_'Jyz޹d$$sQ6:Yheqɣۏesںpqᄊ밾^٪exxYoWsG81O1\"152%86n+CA &"}TZ9A%27Q!zqw2$;먀#,{MOjV+Gsy2N"`G.fn_2Ϋr A][ˌtS.!እUniQq/۷6DȰ -Cߙo/n1`l!MSEXn_5gI3^yK&iJg -N7-I8##0F19v뿶mZ&|A5}2& 6lۄyhsWgCG(j^&(?(Xyn:&AGwTJM qR/!h;=TaLSI _ G5]_[0h2J ZP !27MkVhLBn1DϨT:hič]6)F+Bmoҕ]m5+ aE=F=7Ap6*h7b_CFˬӕBn=bg$NۜC$PϥödL瓑;> 1Sc~+s]&ykIԶM/vFyA4ͧjMp _ߪ*vDM`>l= I<Pt[ҮލZpj܈O3V>ބӰ`7q48vm[xu8:ȯPv {.1P3nL׬H5`rendstream -endobj -401 0 obj << +xڭXQs6 ~У|W)$EI֥v]mM䈱Hrj_?dɒ] PcǽTef{wՂyk{r'tPu=fI"{OiS7'Ѵ\"U>A̘ԥ6^/?߼]ł*Iy&e8I@0IT:?a /0< gaC~E/9$̘ϸ3"w8{]" +m2A".E]FREmN]۱2b\ME6Yk>(.uVDGmHbߗݬxv1Zgu>9+U0idw,6]'C nYA}.i,)0Oco:+pkitLuS'b78nF:sf',vGx./cN\q Bk0qpunCT7;P|44]VϦ:7Cm+r1v&R dEKH7<'jǚFQڅ۲<ݰT~ÁiL$!@ʶ _ _hAT^o t|vqtn.t`-MUDn` +cu>Nfk yK0<]6|z<s0c 17݇#rX$v;5yjKH%DB2hH Te)j\s  i4Y3C1YG;Du (mMb߆>RIhGȠDH`hdRHLwPElLc3U >(I\c_@lKhF$T]4l81r]q;_-A*oz8€_DucvLOsl>`2JDDbHzo3-U#*ɜ uPxǧumEk)`KMSë:`mpuIU$D) CeAHR +mO?w˙C/8#xL/+PzO[ts%NC +{*06UMvG}0=ϧz琹ӿuJh3)C@j RӔg:pKr+ʌW={&_ٽ#}1mGD9$= +0:T9 s_S/lkYVim*+(3ZZp7M@4Io)4k蒾2B[Ǯ1b9k %zdC1D6bOS&6βRQ Ky ?lnf2Uu <c<'e(gg,Ybendstream +endobj +412 0 obj << /Type /Page -/Contents 402 0 R -/Resources 400 0 R +/Contents 413 0 R +/Resources 411 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 371 0 R -/Annots [ 405 0 R ] +/Parent 352 0 R +/Annots [ 416 0 R ] >> endobj -391 0 obj << -/Type /XObject -/Subtype /Form -/FormType 1 -/PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/verteiltes-system.pdf) -/PTEX.PageNumber 1 -/PTEX.InfoDict 406 0 R -/Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] -/BBox [0.00000000 0.00000000 366.00000000 180.00000000] -/Resources << -/ProcSet [ /PDF /Text ] -/ExtGState << -/R7 407 0 R ->>/Font << /R8 408 0 R >> ->> -/Length 409 0 R -/Filter /FlateDecode ->> -stream -xVMo1 W8N+qҲZ$誴vdHEj]ǟo^s~O=K:u۲) rٗX85&G:ۛdKɡ޲::>k%]p#0i$51%, JP[H{6 $K H4OF@|j./R~'Pʎõӓ t{󇛫{O]HfOv*ǴaJ!XlyK-e*E,K4ҵz/>D4 \^B~L"I/) .Q Ûex㿕PxmC$ [?g~/ -Ue`v4A$2Tn^Y␩8FMlT!Yr )tA,((Py'C,U/8UD [Iߖ3Ocz\Da4M&Ri֡d*ԒeP^EXf 7MdIɏ F'C9w: Κ#n;?q7/u~W> -endobj -407 0 obj -<< -/Type /ExtGState -/OPM 1 ->> -endobj -408 0 obj -<< -/BaseFont /Helvetica -/Type /Font -/Subtype /Type1 ->> -endobj -409 0 obj -714 -endobj -399 0 obj << +409 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/client-server.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 410 0 R +/PTEX.InfoDict 419 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 382.00000000 112.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 411 0 R ->>/Font << /R8 412 0 R >> +/R7 420 0 R +>>/Font << /R8 421 0 R >> >> -/Length 413 0 R +/Length 422 0 R /Filter /FlateDecode >> stream @@ -1485,166 +1484,96 @@ x (C!R;}tI6?΃ߏbw'> endobj -411 0 obj +420 0 obj << /Type /ExtGState /OPM 1 >> endobj -412 0 obj +421 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -413 0 obj +422 0 obj 452 endobj -405 0 obj << +416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [439.9225 171.4698 454.378 182.052] +/Rect [439.9225 458.2842 454.378 468.8664] /Subtype /Link -/A << /S /GoTo /D (figure.1.2) >> ->> endobj -403 0 obj << -/D [401 0 R /XYZ 74.4095 793.4011 null] +/A << /S /GoTo /D (figure.1.1) >> >> endobj -300 0 obj << -/D [401 0 R /XYZ 228.898 578.3829 null] +414 0 obj << +/D [412 0 R /XYZ 74.4095 793.4011 null] >> endobj 14 0 obj << -/D [401 0 R /XYZ 74.4095 538.8792 null] ->> endobj -404 0 obj << -/D [401 0 R /XYZ 74.4095 392.4395 null] ->> endobj -301 0 obj << -/D [401 0 R /XYZ 288.3666 246.8671 null] ->> endobj -400 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im2 391 0 R /Im3 399 0 R >> -/ProcSet [ /PDF /Text ] +/D [412 0 R /XYZ 74.4095 771.7323 null] >> endobj -416 0 obj << -/Length 2063 -/Filter /FlateDecode ->> -stream -xڕXK6 W(ϬUDѴint{mRV(KM  X+aF+* Xgs'K?{ëX?pue%#2HJxdEoFzKSg/"I, c?bHq kk%~bZZ߷kxz#t!GNiMMMY=sh5##)0Y$B(כP)< zSp"nzSעyVI.mXuY]QSY8>--2ZTUú)H!vËW@b TpT7q)n,)”ZW4Y}GBό}V= a<#xZ_ 6yeX=lBN45 -P;Ӕ=p$&; G*;r)i/Icvs1o5Oy?Ɇ_UJPve7S)qڭtHQDb2N$\ dZO6U}Fo[:ỤT$eIܢUPtЗEd) @ ||sM3 'q-R`.VcO~:?f(bJJp9`b1h%qm66JP—"hùA Y_4uWUMW@ -޿yp\8H}Fۘ;~+D:(we;4'o >z†u܏LBp@Ceϩ" -|PuCp%:!$'>\'9kH.L0Dp2Kz7B붶!p/_$0~uK6 -1 ]Q)#X=ikdw* ,-A=Le&tKJPršA^r& Y{&%:c@ӱ8cԞ<&?Շ '9-wT􆭠7P_Ou17mLW6;ٝ js"`(/oh z8 )-0Q`.rTv&פepI; E*o:4}x0X9|:ÉOOB vHZ@-<7!mn/ ;'ҫWqi5ԔnKNu>bTS.tvv fWz^.DNxE>H fՃ %})wոe0'112lg0 T>!9}ܓ)#~ ?gN8ٹ/f=:FY7,3 -Jƻ iaay$:^V9vEfY-/RI= 3ta;ɿx)X\6 ^ߧ r{NI_zZ>Zi? MwϺp_;7d:W$0|$|TqR5\.|=lendstream -endobj 415 0 obj << -/Type /Page -/Contents 416 0 R -/Resources 414 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 371 0 R +/D [412 0 R /XYZ 74.4095 659.2541 null] +>> endobj +314 0 obj << +/D [412 0 R /XYZ 288.3666 523.6815 null] >> endobj 417 0 obj << -/D [415 0 R /XYZ 74.4095 793.4011 null] +/D [412 0 R /XYZ 74.4095 396.6881 null] >> endobj 418 0 obj << -/D [415 0 R /XYZ 74.4095 751.7784 null] ->> endobj -419 0 obj << -/D [415 0 R /XYZ 74.4095 571.3165 null] ->> endobj -420 0 obj << -/D [415 0 R /XYZ 74.4095 406.8989 null] +/D [412 0 R /XYZ 74.4095 235.3536 null] >> endobj -414 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> +411 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im2 409 0 R >> /ProcSet [ /PDF /Text ] >> endobj -424 0 obj << -/Length 1917 -/Filter /FlateDecode ->> -stream -xڍn}2uܜlO/@Q(Г njZ ΅)[.DÙph'a"t1Qzm?U NnFhUe%緕LPHQ\>ZUz#"&"ML/>=ORE,I0I|QeEs/Gad_fӝe$?uJFžy!oq22擵QM'ݮ# Me0nziP =cwc'mMe%Γ=pDiWOeR5u(Z5 k0!SOѯc|>Tul<,e&)P3)pFVYb(w0(8`=2CUF2T]ׯk)5/q qOU@Z$W^M"wRvQjۡh+p̲Cd{7 灹ʖQm-Z N9؉'>2m,(q*8b|l݊o][J8pZM.>0_ 'Dk<؉o؛*GR(OZQb(鍁?FXE|5N9 -$ 7] -x[|:%ue)VF@2+gUw'G~o$6H7_oJosx~p+e8_8- 8_,//ޫa^&u_Ҽ ( -HwG{<`A{*Tf*\KQPZܯE7(ʼZ N H8s+?QDkJ%JN<:(K 9W#I;AT/cPfg:jB6Ws,O!{^@Tve1d' -m:e3oѻCO|v5dU,%]ujUwΟQI/a?(ܕS(L" V^6a|FyDK2KO|PTHlm\AuNUw=,Sc"bbըmp7=9t"fO}$Y&}LC 5 (~bj(_vpEV(7ԞHq*t!֩أtE%o7L,!wujzc -GQ*x>/P@ڢnv SI}yr猄3,骫W#˷Ӟ6F0Q"k%ceΏEWb̮jLMs, Kğb5g˸~PG([YE#KFNWN,x(8Ky|@'ɏ(9X<ϵ=wv:q}$g 91f;=8Bh_8,Sc,Rğ{wn$oGW_l.[B/BrY4 r5JVՁ$ pYP6NG[U &pK ×%⦺w -UcQe% ' -=F~I@engmw yÏ4Z15u;ptcbTΖDUL 55U$I)hc"Th::̰~"!gW:&+w - ~v(Xk`fqq2'iX7tjWJJRi"Rik|vI&W<}!vӣz[ub^\M!(/33.1[`wŢEc-䲄鸨}ڔendstream -endobj -423 0 obj << -/Type /Page -/Contents 424 0 R -/Resources 422 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 371 0 R -/Annots [ 428 0 R ] ->> endobj -428 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.1829 429.6771 140.6385 440.2594] -/Subtype /Link -/A << /S /GoTo /D (figure.1.3) >> ->> endobj 425 0 obj << -/D [423 0 R /XYZ 74.4095 793.4011 null] ->> endobj -426 0 obj << -/D [423 0 R /XYZ 74.4095 750.7482 null] ->> endobj -427 0 obj << -/D [423 0 R /XYZ 74.4095 572.4928 null] ->> endobj -422 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -431 0 obj << -/Length 344 +/Length 1352 /Filter /FlateDecode >> stream -xڍMO0 >d͍ ![T$U&P$_ُX%i1pAŋ1vן坘WE6j(>HI {|ڲ99ϤȹAdj[U]C6/bPxkdZ[u5)#d!J"AO{|eFM-2X1AxG-ޜRl$Fɫ:zH~aee.-z;8n;IcF1?5)˸w#Gι ~?&KDK0R3[P19F&Ma4b3x`0 "(O M-q[ ?«.@j? + -{~zwi^lͨҠt"o +pc*_hm왥K6Lj>v y.P@~%T o Ϥ1 Nr߆~c8N{v:*Y(Is i9[iO + #c-ݻЩ ҂φ0ΗX;$q!Lq˝2:϶:؜*se)])ZLAқLPR$}ɒ')@7Xo{I%/ +Ova &/3kl ,M F[~7)׹_3ㅏR2v'Jg}#)aendstream endobj -430 0 obj << +424 0 obj << /Type /Page -/Contents 431 0 R -/Resources 429 0 R +/Contents 425 0 R +/Resources 423 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 371 0 R +/Parent 352 0 R >> endobj -421 0 obj << +410 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/client-server-protokolle.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 433 0 R +/PTEX.InfoDict 428 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 376.00000000 320.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 434 0 R ->>/Font << /R8 435 0 R >> +/R7 429 0 R +>>/Font << /R8 430 0 R >> >> -/Length 436 0 R +/Length 431 0 R /Filter /FlateDecode >> stream @@ -1654,59 +1583,102 @@ x Y La- 7pD7[:pHp {-q*YA^6@K  B|jZ%Tp'endstream endobj -433 0 obj +428 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080806202500Z00'00') -/ModDate (D:20080806202500Z00'00') +/CreationDate (D:20080807174428Z00'00') +/ModDate (D:20080807174428Z00'00') >> endobj -434 0 obj +429 0 obj << /Type /ExtGState /OPM 1 >> endobj -435 0 obj +430 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -436 0 obj +431 0 obj 499 endobj -432 0 obj << -/D [430 0 R /XYZ 74.4095 793.4011 null] +426 0 obj << +/D [424 0 R /XYZ 74.4095 793.4011 null] >> endobj -302 0 obj << -/D [430 0 R /XYZ 281.7271 298.4089 null] +427 0 obj << +/D [424 0 R /XYZ 74.4095 750.3359 null] +>> endobj +315 0 obj << +/D [424 0 R /XYZ 281.7271 358.4221 null] >> endobj -429 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im4 421 0 R >> +423 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im3 410 0 R >> /ProcSet [ /PDF /Text ] >> endobj -440 0 obj << -/Length 896 +434 0 obj << +/Length 1762 /Filter /FlateDecode >> stream -xڭVKs6WHcqI:ik(ڢmPT=_A2$N;:X| fWkf{.{ 0J9q )sژPfq "/$[>\F\J~ʿMI3.A~^~$Q\e[]QrHxh څJ%p4^vD[K~#=;KZȁ"+WB)vۢ -Cwї|#vEMPJM+?9=0j>uh2w-god#.ܠItsPuŋtuTY(ι}#$ӦE׭1ڝ5|jv#l{$Yξ+o\DPz$OF9b7ںo{:7Fp,Py١Y%qp.[Q?պEQx D$3Jnԏ\9 -J[{}yb33^0Іk)IgN:&̂}t-;Q InT,yoɳQ5M_0pJQ'yT}珇oLpkrSǹ|Q:PUSfBıCCDfIz !Җ{xk' $縞@uKIM LЗ/_6N6ttw #fNb=#m,_IBv=&>ZB7tPU[tT6 $edoer?*X˛v1)^{ _$es%:ǺcR5R_NʀfH[0>mE_՟͹ƔPW0Fs^oL -t@ kql ^3Cendstream -endobj -439 0 obj << +xڍn8ޯQbV$%J:&tw[`hrdY˴G wCɒ%7Eh839//B$bQŋ$p>h_yWj')˔/o ',az7LJ$iradlMbO/X,UJeQXd)&C)~gg,I)k}m=aI*;\:S-g4x<ÒA[9ZeZ׍5Đ5[]c "v۫Lp8w[/E4v[͎d|7Ԟp9ˈM}z)j7xN`g DB]@N^, +`Xnva%kGH yz3=d2a|v+o*/9oݹ%;j(EOݴt d}Cr 2VAh[b7C^ HSkMƒfpxZk ^S-hB1 cE4!2 +(xqo,Isg7qʫΐ&Q \ e5FE5O9%[Yv%o"W_7 +)SQ n8ce2rN]aF4ɔS\k]J&ÌjR;\P"T.KI`Ƣ-xX-\G.x]J+N_^w$M֤D>N1|j:vH>hLZ;t2<<𛯴zCٕ s[A4gjh6Ŭ-cW$F2_>0g3Z \r˂T&7l5;/xźKN<Q'q[R mUfp"g bnso}| !y18Xm``Uo7ڐUw^RmSkR'̛IU奓1#?p,Q;a:-tSo]V8 ˂K<&#&HSpfV k:3'`k6vf0$H,P0]?/bс_߳nܩl4311Bf:ĵWezOm$Tݘ\wyW!=: \Rpָxn2t'%e;4yHFI7NWxfRѝs*6R&ʤk<8}h }%ڢ5ذAߊz?u :s{QނGkU%zIK?c `K쭘t7uO*ޠP*"Kf,]:~H@7egnR~m|e4ܱl Go?^`#AOSq 7]I6*D@ +CG1zPI.A +0vwXuɈ>V+LK/?**Jg5蝷:M^7gÜ3Y\ܼ+=pPGu:25.-oZ014eaį7`6r b|Fz.7>DE`Pendstream +endobj +433 0 obj << /Type /Page -/Contents 440 0 R -/Resources 438 0 R +/Contents 434 0 R +/Resources 432 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 444 0 R -/Annots [ 442 0 R 443 0 R ] +/Parent 352 0 R +/Annots [ 438 0 R ] +>> endobj +438 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [126.1829 465.5316 140.6385 476.1138] +/Subtype /Link +/A << /S /GoTo /D (figure.1.2) >> +>> endobj +435 0 obj << +/D [433 0 R /XYZ 74.4095 793.4011 null] +>> endobj +436 0 obj << +/D [433 0 R /XYZ 74.4095 750.7482 null] >> endobj 437 0 obj << +/D [433 0 R /XYZ 74.4095 608.3473 null] +>> endobj +432 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +442 0 obj << +/Length 1164 +/Filter /FlateDecode +>> +stream +xڭWKs6WH͔0ޏⱝI:m%ʁ6a)E9"Uw iJ鴣ŷ +?I$u*1NXd {gRʼnl*OJ2,QR*~]q Q<<i &y(>?/eyƍM9yϱ rq\9MwUn(9}#L8qT0#eGei1ǎ(i1J+9ad)JӛG{|A)o挦yk\ y[ !*aG;0'EQ" i6&~u=,(ad=PNpsu$;R! @ح| 12F +ՇLn6 Ljpٚa\B 3>Nw0YK2а\8mb% Ka{{,bW/~dkHF*& B `M XuTבۦ'%MsdhfȮ"Pӂ CbM8 +`jrUXaڸn0PcEρs#dUWwsu~q=*k>KΡX:fpvWx٢卯w2y>aH#qXgsƂ;6Jˤ'?a~lP؂9Bp{pkһ0cuZ kbc†/PCU]r*7uܗ"ר"2%= ; (\Gވ9O[`r^L ) WnHt|q"7BLp  <2f|,=v;fU?tBMyZUI.E۲롉#םҡJNa>Ze!f1|3]u YhNAYWyAu 9K2$%}!@~[!uȅ .r841Nެ׾&M^A7Oׅ@>BSb 0TA$s1NB .NB00|18ۯ? vl@11 m8D;cax _?>n +BlD4b>endstream +endobj +441 0 obj << +/Type /Page +/Contents 442 0 R +/Resources 440 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 447 0 R +/Annots [ 444 0 R 445 0 R 446 0 R ] +>> endobj +439 0 obj << /Type /XObject /Subtype /Image /Width 1024 @@ -1728,56 +1700,66 @@ pz t ?y#rϲP{@Z N>:?}?o2k#9uuѣGkLlĝefqSSMp\8G<'G#s_dS!tN杫5_?|BNwW=z4Fٯ x;O[4^qo>lO3Ʃc&*q[(WY/5886qcߓͺ򝏙'O;ί6lnL++*ZZ]zȑ#]>@hKvI+H8]ˈ#sNBNn|Ny: jꚛ<(\E(>(=X8$5WQz8 X:ԾpSki>Xcձȫ+Ty`)sq7i[#~=3ϘӪSϬӊC(X޽{k`A; 0eWte|A9N\ڣg;k_`Aj5.khKG ZQN#M~~ Rs7?_hi>&? ҔpύT5ue4?R8yeSNo9?w:7+d2L&4[AC{s_?@@{~@?@@?_?@??@@?_?@??@?@??@??@?@?@@?@?@?@?@@?_?@@{~@?@@?_?@??@@?_?@??@?@??@??@?@?@@?@?@?@?@@?_?@@{~@?@@?_?@??@@?_?@??@?@??@??@?@?@@?@?@?@?@@?_?@@{~@?@@?_?@??@@?_?@??@?@??@??@?@?@@?@?@?@?@̏7L&d2Lij`0`6endstream endobj -442 0 obj << +444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [146.9775 135.6153 161.4331 146.1976] +/Rect [73.4132 189.397 87.8688 199.9793] /Subtype /Link /A << /S /GoTo /D (figure.2.1) >> >> endobj -443 0 obj << +445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [463.2925 135.6153 477.7481 146.1976] +/Rect [389.0928 189.397 403.5483 199.9793] /Subtype /Link /A << /S /GoTo /D (figure.2.2) >> >> endobj -441 0 obj << -/D [439 0 R /XYZ 74.4095 793.4011 null] ->> endobj +446 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [300.1067 135.6153 314.5622 146.1976] +/Subtype /Link +/A << /S /GoTo /D (figure.2.3) >> +>> endobj +443 0 obj << +/D [441 0 R /XYZ 74.4095 793.4011 null] +>> endobj 18 0 obj << -/D [439 0 R /XYZ 74.4095 771.7323 null] +/D [441 0 R /XYZ 74.4095 771.7323 null] >> endobj 22 0 obj << -/D [439 0 R /XYZ 74.4095 577.4595 null] +/D [441 0 R /XYZ 74.4095 581.9662 null] >> endobj -303 0 obj << -/D [439 0 R /XYZ 250.8743 202.642 null] +316 0 obj << +/D [441 0 R /XYZ 250.8743 253.7308 null] >> endobj -438 0 obj << -/Font << /F26 198 0 R /F28 201 0 R /F61 246 0 R >> -/XObject << /Im5 437 0 R >> +440 0 obj << +/Font << /F26 206 0 R /F28 209 0 R /F61 258 0 R >> +/XObject << /Im4 439 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -450 0 obj << -/Length 1740 +453 0 obj << +/Length 1704 /Filter /FlateDecode >> stream -xڭXKo8 WF.tb9صx(؞K$t]h(IQEZDF,:R"x.xP܇Wxj'"ȘN([2L\ޕŸ3r%,l9̞v)x7y/?}\\ߍcY$flbX4M^Jr1Yüo+<|WQi ?#zGtnۇMS{RcKZX-^׶o4RxO{F{W"ك6Sێek$xe%Rߢ)e)4XdeoO(F:|%QnؼS*^Ho*z9hٗ:xY6.eK~GQt`EQvk,BQH|놈mB[/FٳPtE^[_ gO ?;Eݔ9Vq cbH;)18W@9qjF^jx3$JA)Tə-# [Υ-Wyg/b93 LxVO.i /(,IN'8GV>-e`ŐF^ AVe) CJ}U$ΐ-xnu{?1Mdx[edEk2=oL*l)Si2gDL{x,%M޶6DQ1$"p>]k"z@РB%Ikk:?}ۻTiZQL ?} ET JĠ -ڜۿŚMHt-TdyxHuKSˎrp˾Ou8Q?EX؟!p--L %V-M;!&A:@B(.bĸG︉s.m g*!ΨR"Ҁ*9 .A~iΖxlm^lء NN 7bdM3+Z={``'![? =2[{%)W ueRX`16>,pk+ <]5Лi'NZ]řǔSnvbнږfQ&nFKX{Z#Wh}C+endstream +xڭXKo6W Eԛ 'EG@qZYkJJp(V+Zyq83tqK"*҅"IjXeMv=SgoeI".iAu9|iVkXZq_=1von_}pzTgy2M3LGk,N"}ė1>`Zk]ݸӧl71s˧۳LWLȔ|27vN/uX7\ Fucwܸ$OY [LE:ȿ&{MƞFk'FI͍hDDH$l[n=Q,Z%!8;m +"ʇ}Ffݝ3]X:Q˵JBֶRD"(%?0sTWW(ִ`XgDb zUcF*޶ܨ+\jW9E{A+s[i + ߭OToelm_--mLk;'<CHKWG>x sùp_vȳGo+L"G iÃs{Wn=8 ?.\~;v1kA7kE{FX upmm1TB% BѫЎ!Wb./.Zc;o>˖j9)i¾5ע';kl>LP׿Dh3Y +1_>Qg7KBD۳H8٧Q"#xΤ,6rq˱0ɀ'#(fy+hչNCIJHJ7*܁Ӥ?i&R| >!4aBXLN &3t Ldir7q# s︧qJ%bJùL2^TƎ*@-?LqaS^dXzyP*e g) S vkatBvm].17r∘u6j~l!^Ǝ +gGK_7p 6"T(PMoWȂw1} 0bZ*4J%> endobj -445 0 obj << +448 0 obj << /Type /XObject /Subtype /Image /Width 234 @@ -1816,49 +1798,55 @@ ze TzZz`QE^^^RRRH/EzI/EzWl֬Y˗/WFF:wqyK'snڰaٳ.]*_5bwhhhh͚5p7nT sNl߮o޼ِ)jطo [۷ ;;;Uz"ndAhY\Ct-7T Ez vޝ"竮fm2.+Hw"_.Q k3Cd+ K~@P >OsL':TYT EzĽxXBW.QYf:ٗ.]Zds=W]]t%(K^K^K^" /LLL*Dz)KQH/Ez)R(K^"Ez)KQH/E^R(K^K^"Ez)KQH/E^R(K^"5}#endstream endobj -452 0 obj << +456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [392.5129 720.9315 406.9684 731.5137] +/Rect [183.9175 721.5786 198.3731 732.1608] /Subtype /Link -/A << /S /GoTo /D (figure.2.3) >> +/A << /S /GoTo /D (figure.2.2) >> >> endobj -454 0 obj << +458 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [183.9175 377.6177 198.3731 388.2] +/Rect [323.2532 153.5425 337.7088 164.1248] /Subtype /Link -/A << /S /GoTo /D (figure.2.2) >> +/A << /S /GoTo /D (figure.2.4) >> >> endobj -451 0 obj << -/D [449 0 R /XYZ 74.4095 793.4011 null] +454 0 obj << +/D [452 0 R /XYZ 74.4095 793.4011 null] >> endobj -304 0 obj << -/D [449 0 R /XYZ 305.5773 488.8401 null] +455 0 obj << +/D [452 0 R /XYZ 74.4095 752.2837 null] >> endobj -453 0 obj << -/D [449 0 R /XYZ 74.4095 411.8619 null] +317 0 obj << +/D [452 0 R /XYZ 305.5773 401.9113 null] >> endobj -448 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im6 445 0 R >> +457 0 obj << +/D [452 0 R /XYZ 74.4095 184.2476 null] +>> endobj +451 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im5 448 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -457 0 obj << -/Length 419 +461 0 obj << +/Length 1085 /Filter /FlateDecode >> stream -xڭTn0+h]._MOAt rHj5Gwi["WÙr(!**e1;0EEd߮7uoMuv_ y7fv7{mZbNkO49o_n1e}s]]4|Υj@!BfسÄQg ]N@{A]M9gE0 궺jzkk7'sRt SJMj>lFIt3!ճ+sΘ\6׺EĎ%Yd$9~.(̅h!qcIc7O}D~O$˖ġ-#{LElv\n㢵(ut, ^,9c-B咅 RBpjY^U6+Yendstream +xڭWn6}WQ*}jSh:/#DgliRX4C(K{eQJ-h"~mpG^(2*%1a1vAO/Yq´IHt}SU<돫6dmU +JQ}t@AZ15A>}&hЏf;<Lee!匆|u H X5f 17#1ƅC_!+Fu2Jjg¢^d1 +6&\$ΒfiG3&0&=gyXݜ?o]m|_Тxى@o1kډJZLҁ&xO^U:Fv,.HzuYdP[ (09]{@ )eM2vӈ{eZ,H[dλ,ݧa4-Ц` ۩Pja_Ӕn$ +\:mufŠ[䭍w764'n=7k'׋{ %F1&bA5 fip>8+jFUf-&ԭd\K@]em ?koLAYfs^3 =]R?S*Dm͒p5Sdm%UJe jan X 6Ce qS _i!YNw19-pE3#7O~yS8QQl۴|B١&CI.ʅ/lnW QWA(?<1pDQ-g!7cI|5;xX\&qZ]kŬm N 9=gMzk8=5րt71 KQq=2si!ܖaR3_\PK\Uv\]f᪟5jHߘƧKO`bW Zz%Z*-KY;Z.zߵ3.:aNu C넉uaQ:SUD-> endobj -446 0 obj << +449 0 obj << /Type /XObject /Subtype /Image /Width 1024 @@ -1930,43 +1918,7 @@ Oo9/ q^/jY?P?o#K ~{^{g~$)*0?Jr=7op˜Nn"x[O:_#?w.^>lz31ƻ,]:L7yL2Smz/@_r s kg-vfz=Eu^||ڿ]1r'o/43-NS%$p?,p')b` wBON wH``endstream endobj -458 0 obj << -/D [456 0 R /XYZ 74.4095 793.4011 null] ->> endobj -305 0 obj << -/D [456 0 R /XYZ 286.4299 307.893 null] ->> endobj -455 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im7 446 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -463 0 obj << -/Length 2214 -/Filter /FlateDecode ->> -stream -xYKܶSA9jĎJ0%$GүO7R!bF?nP<RT'AKXp<<_A {ryh42k@${w¿/`U$,l%qޚ]] mwD,Z|JiL,rKY*".i*Un+CV߭8lz]<=u".1"#cF\Hk?֦YE2a]5O=-W.i>E1-6xU_V< MU;*b+[_#\Ou!PsC,eysyp̵<I8]/;bl}Wf0?U] T;=E ͷ I4i_ee"e . 0S2 #RkLpu^g::s LթRsw& -ԛWǡER\L$/D|*K򰱛wm[V$zJh e6_ -MBšQlGI䊇 [D< 'K6q%g@'@B6OΥgS`D -L~Rm/92mRؑHaU$nz=%gM#BCipRdT@)יXlbuVc5nO5Xہt )8/eu.,bXi݇eDXZS(*eJj&3r&4ȤLV%; VMWRwMOeؙDȄo/6 FzAB]΀=p]3xvg90w@#n)hZ}O꽃_|82eD]$E_| ?VWeK-}|sC3\)釹SӯU+ -țuTC_x&Lg7)<܇1(|=XCJy! q*’/e6,;j:tЮSLDG(`3|$;55 p3E8Z(_Ǵ6URzFzLca -2ykd\c }.V n-\uZYv僗qo)LLoot4#פ׳}_ -!:`M;Rs3"nZo.bm;؏M[Y,lS|ٹy$Z?ЄVͪ伶l-~-k"EB0=8r -֛k턇1~-ˠaj8-6͐B"ff>1L"JTdEzQc# P( -ǝx}HَvSWjJCʴ~|j85f_n#H'dDžܿendstream -endobj -462 0 obj << -/Type /Page -/Contents 463 0 R -/Resources 461 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 444 0 R -/Annots [ 466 0 R 468 0 R ] ->> endobj -447 0 obj << +450 0 obj << /Type /XObject /Subtype /Image /Width 180 @@ -1994,59 +1946,43 @@ SȈoD\ ٘Zl7Z%lL-6Z!7,7>L")dcjb,>߰ߞ{و|t9T,t)T(«8 {endstream endobj -466 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [323.2532 723.1011 337.7088 733.6833] -/Subtype /Link -/A << /S /GoTo /D (figure.2.4) >> ->> endobj -468 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [179.0063 296.1354 193.4619 306.7177] -/Subtype /Link -/A << /S /GoTo /D (figure.2.5) >> ->> endobj -464 0 obj << -/D [462 0 R /XYZ 74.4095 793.4011 null] ->> endobj -465 0 obj << -/D [462 0 R /XYZ 74.4095 752.4586 null] +462 0 obj << +/D [460 0 R /XYZ 74.4095 793.4011 null] >> endobj -306 0 obj << -/D [462 0 R /XYZ 266.1839 633.2572 null] +318 0 obj << +/D [460 0 R /XYZ 286.4299 503.2659 null] >> endobj -467 0 obj << -/D [462 0 R /XYZ 74.4095 359.4645 null] +319 0 obj << +/D [460 0 R /XYZ 266.1839 382.6614 null] >> endobj -461 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R >> -/XObject << /Im8 447 0 R >> +459 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F35 221 0 R >> +/XObject << /Im6 449 0 R /Im7 450 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -471 0 obj << -/Length 1658 +467 0 obj << +/Length 1296 /Filter /FlateDecode >> stream -xڭXo6_GXS2-ڡ[rDd9_;~زd'6H(x߿chM -AD^ʤ(9,(Myه_hHx^DR)'L˜_G;vB,2Ƶ]/hj7.K1-PDHU$D)]# *$ /D/}ϓH?]' -K/DΉb2n dD/+,WquFJ5K(s&rL651.KQ^vT+A/O*N,JQv*ֳC(Ҝ> dz{=soiz51A%i TeY&c!3]T2熺|]ڭEdP52`6ww/* y:t3\M75HpIdIfqE ,I%BHI a tS~Y<< h:Ohқpiw[ 2V+մइ6q'\*HEg.fL&?wsh>#jSӸDθX%)7BXhvϦCP(r7 %+ع t˅XAYǿ>nywvcSG#ZKӚ%fF@Y. ~jWJgzKg\MN=U[ ^vϐa3nbw -Q@ ,}|ZL+._U;YDL{K3fx-6iB@,(jg$G9iB,"nuNe%,?!rQ<: -9Df.qlpb`v95fYa/c:V]cM :|JO<:ې]XVX`2O9e C9U坠cBy3N;%qy{lghMmZi}3hD{ʘʗ7uD"=8#Uzg٦{h%7:*`eQ=Mnm(y.G!TuI1?ݗ6u `e&z n8KCU_+$-m١M49ax Y̏.ߍC -Wk`s/(w]Ew@Q;zBpa͂bCN;+cFHwW]vv:0ьN4@L( Bl ޫzDءX> ZB!hMm.YBA;jL.I{BvN!_q&t]'AKЎThUTfYKeT -J -|ʆB{>.J/!cBYn: GA?Z㨁g"+hMqPudKsy{#S%1T4#I\5Pp"h0MG7*„0`s?2/WqQǝ/ញ"*ӑ :~9.ov>T0,>YAKeۚ('")h b?v o+Tn*ŕMendstream +xڭWYoF~ׯ#9p[$m$6z$%h2,wIQ XٹwI0Dqı2 B 'k8$Q6넳˟$I42R6 &09^}Jɿ*R4ƕvof?^HKI%q!UQj(}"EbP9ȥ0H)ET. Q}^ݾ\>*4eIF4bҜ +$(f1:'+}3{1&w3FI)fWCwT$E "٫ci֭+xsJ ֙в!|N'XM9CK`+%0%TON@I 3.%JCArﻋ+V ø(1$^X|,֟CZiue7eD-7M ׶nr8mlc'} 詄&1I#sLgiSAtg!$]iM8Oߟ<`x'r/[/76H_TwN5 +.*],7ug-P\޺,QV" p1B6VkN:מS^("ow +7 w9bN L S|wU6j*{&jm|H"O5; ˉYz1*,!GRɄc 4dhݺGltjǶ}0ޓ @qcs+5@-nÅzP7X໶84p߽{Hw lQ4/m.I,яup K7U׆XQ W</ɋHR{Brz֮(ɡgy +eQj͔!2rȹ +@Ἠy遯 qM8_xKos +jq\ԯMz1EF TNѹ-˭'D| ӏ(eD$ETOڃ`&Bn1=L +Ra:*@UrD|S `7 :ur5HX WbLנNX|,[m&q i`9WɈ{U>aV?R~0"ςP UeA%<p˾6MFU4<yW-º X=7be= :0Hpi`R~Otd%/< S2endstream endobj -470 0 obj << +466 0 obj << /Type /Page -/Contents 471 0 R -/Resources 469 0 R +/Contents 467 0 R +/Resources 465 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 444 0 R -/Annots [ 473 0 R 475 0 R 477 0 R ] +/Parent 447 0 R +/Annots [ 470 0 R ] >> endobj -459 0 obj << +463 0 obj << /Type /XObject /Subtype /Image /Width 586 @@ -2061,64 +1997,7 @@ x 7-XW [r7g7U~Zz?ކ[1g bǗsI9ۮ㥧 '&7Wjo_E3/jcOL˺=.cuQ݌1]uUKc-usg1uzJݦY,Ց;[aaX,uV7bX,usX,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,RFu[c5Y,5Mݾ8;b-n"n`{M[bX6Jݎ_гsX,KݞvVyn,Śn{QRv"aX,u˯kbXm= vb[BQDnbX]Vyn,Śnů\X,kvcX,(uܼqncLsncM݌1ƨ1ӷnߞ{&1Ƙ.uLX,kXNX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,ݯbXiյ9,nu[vqkwRQv҅bXkcucX,|u[݋bX,U3qvb[~>^S7b=ngnsX,KJZ)~fݬ&b2V|\X,k](X,˵dX,VӺU~vncLs,mf1u1Ƙm#3u3m{&1Ƙ.uLX,kXNX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,bMX,nVbXfX,bMX,nbX,u,R7;bMX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KR7ucX,bMX,nVbXf5Y,n,R7ucX,ݯbXiյ9,nu[vqkwRQv҅bXkcucX,|u[݋bX,U3qvb[~>^S7b=ngnsX,KJZ)~fݬ&b2V|\X,k](X,u$b[Glww݌1Ƙ&sU7c1#mwW1ncLhݾҩ1Ƙ~uk6LX,k|NX,nVbXfX,KX,nbX,uS7bdX,YMbbXn,R7ucX,bjX,KRc5Y,5ᵛ1c1c1c1c1yg&뵙onqZL }I^9g/b[RgzK.in=3"Ǹwiøik_tZzk9{ř;[=ҧ|C;q(Uoq'GkrdBu{\d1޻NV3Xfpw#uBImOu蓄4J1tqUI\=0got9MO&#GĞx\瓫&}M;1?&(X}a___ˡ{֊;\݊X\ӌeB~|*y컑J{ӫnF:v[-rtU ߞ 3> ->> endobj -475 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [321.3617 246.944 335.8173 257.5263] -/Subtype /Link -/A << /S /GoTo /D (table.2.1) >> ->> endobj -477 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [419.3512 153.5425 433.8068 164.1248] -/Subtype /Link -/A << /S /GoTo /D (figure.2.7) >> ->> endobj -472 0 obj << -/D [470 0 R /XYZ 74.4095 793.4011 null] ->> endobj -307 0 obj << -/D [470 0 R /XYZ 221.8999 471.9209 null] ->> endobj -474 0 obj << -/D [470 0 R /XYZ 74.4095 292.061 null] ->> endobj -476 0 obj << -/D [470 0 R /XYZ 74.4095 182.6152 null] ->> endobj -469 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im9 459 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -480 0 obj << -/Length 1218 -/Filter /FlateDecode ->> -stream -xڭXMs6W(ޚqi:mX9P$qLS %3]D' þ].YDEZA8`,Z;3  *o |].;<˗bx"\:?58ܤå] -.-6c-bNJMzXUKv4c")g;9hB-G+2b;wtoQ<! oq 7m.4 -4X%4\zۢt*-LaPn"a\[8#7!%2 1´g߻;;_67O( \ꛄ4Iz8J#{qZ\7)~;IICwdl[c8կ+"ðX&"mu]SzUJ`IRm3==P -ߡūbT7ݟBȑ -T(96SjG,Uu. DQG&&tlWKn/iJ)> endobj -460 0 obj << +464 0 obj << /Type /XObject /Subtype /Image /Width 310 @@ -2138,45 +2017,98 @@ B{o M>7pm -!tۖQr06RUpuMΉ!r:9s"oh'tZ0P""Bvjx:KP^xi^ʋ/KP^xi^*P^xi^ʋ/PW/KP^x!/ x/@ oendstream endobj -481 0 obj << -/D [479 0 R /XYZ 74.4095 793.4011 null] +470 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [151.9713 397.9679 166.4269 408.5502] +/Subtype /Link +/A << /S /GoTo /D (figure.2.5) >> >> endobj -308 0 obj << -/D [479 0 R /XYZ 255.9892 532.6392 null] +468 0 obj << +/D [466 0 R /XYZ 74.4095 793.4011 null] >> endobj -372 0 obj << -/D [479 0 R /XYZ 208.6475 224.6816 null] +469 0 obj << +/D [466 0 R /XYZ 74.4095 750.7482 null] >> endobj -478 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im10 460 0 R >> +320 0 obj << +/D [466 0 R /XYZ 221.8999 480.5224 null] +>> endobj +321 0 obj << +/D [466 0 R /XYZ 255.9892 182.3152 null] +>> endobj +465 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im8 463 0 R /Im9 464 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -487 0 obj << -/Length 2087 +473 0 obj << +/Length 2254 /Filter /FlateDecode >> stream -xڭ]oݿBZ()o^i&@p8S"'T3$Jscsã=evsoވ(c1:I3pqfz_x[o2b6ۄvXé~ͧIp"9ˌ_D}fjNWOrtZJCm-"~FNM5в,:[۪k ?uHb7Emx $pq?7P3`PەAӶeg;aRE}h4%e+RKG/i7EK߶֯g?LDȸ Y Px۪l?TM3e_j@2/ gζ.z"(zoALU\#4eAG&@ueARbg#kXgNń}N{z/Gx -wだFrk/wA@OU;x C\g.ˀmO^I/f=G{K,IAqKhՒ,|C sXGs}p ^zBS;3Z߅iG:GkCP Y#vWH䰃57a_< )msBVe&蝳 M ns ^ƩlW?gjxDh7@uK E,+xw9$n DgC5ޯ"s$V`FO8;A` >QEh!}A꬛4| -ʇS_}xi<^g3x_B~[HC@0B| `sI/ވ]+ˆ_M ~{^u+mYT -7Jqa#,q G .=!c>^7Qym{>e$o+D.O-$'!9{6ZIC0wL ubN\}E,"sXIL%<%JJi_pFUd^"Vk~ljc)x`qz܄5_m7y1[k"y6ӄ&,I(uۡ; 򠵸*4K:'2#&4&cN5˜fTC=B|?' ]S/W D&W;y Ph~EE9 4H#QrO zB}ޞЂʫ3yz9mзCH;Ǻ3+)@ں."[;IOMӘK%ˮe$rK HR1g}ʏT$fW2y Xɋ@^B4+`U Z4D'y|h -Z@{&uV$8)Jfv׊CeqաVnH1"D70xsdc*!i$"|=aŠ7Lal?-ZwLTQe* URIޫ>峍3ô }]c4!"'(Pѩfq1QuM0|1,N6R^rG1>5tF{p?_fV[R6@1/ѳFqT,vvvOJhc ++ZD-efoҚjc.PML6PRa믲=UZtilX{ˡ(m6{kow=6;;pؙ#}oPUV^|}g.[}fHr)U f[G!'v6l_#2zi_*o[l9( 0;T{A)6-SO,aPLnWHX#ўHA"0ү~+[55r]W ;1@7W ;R=ާ3Ŝ?82wL/? e)`}EUf)\ 1B؇[ES,[Ùu|hh޵ix-qF)^:y*/2 4cCk\~0~Pax*ܻgȅrJap-&Ke9UFFǏlB1I(oLGsLx+yt=YDݖm~t銱1]/O`\ŧ>K`f +^UeSg;MoOs7hJRz+Pܛcm]Ȭtnʡ@up"JѺ;e(Euꩿ@&4& ` .o]^')It)t~ L7h0??6WqNeEKonƠ'4DV2~ei ]5w]5]hwYHhxe^u0%*Ӄ7U}Ɣn^{Nwh + c> endobj +475 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [337.1593 481.275 351.6149 491.8573] +/Subtype /Link +/A << /S /GoTo /D (figure.2.6) >> +>> endobj +477 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.3617 311.8411 335.8173 322.4233] +/Subtype /Link +/A << /S /GoTo /D (table.2.1) >> +>> endobj +474 0 obj << +/D [472 0 R /XYZ 74.4095 793.4011 null] +>> endobj +384 0 obj << +/D [472 0 R /XYZ 208.6475 629.4466 null] +>> endobj +476 0 obj << +/D [472 0 R /XYZ 74.4095 355.9148 null] +>> endobj +471 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] >> endobj 482 0 obj << +/Length 1303 +/Filter /FlateDecode +>> +stream +xڽ]o6ݿB2PI-C!݊umrȚ%ȯ)ɲ%' xb?hI$M@'ƂrA h? zh;CdpspSvz~[[,#M2) /mrh/vW/޼_\ cNQJ)AQ1/-|j8!Zk\moڮ҉KJ|D#&pÃ9/|8/:(aIƒr#&ϋߎ%$yBHAXW "'1A"c)̸G. .w 68H!R7wFW%Iؕܘ(8sM4SPnfTn=vXz_e}hiX*X2p=cTlC(mY7vb9c'F nH1!CKԯM& +j !o7yq4D$n2ppE4BXM~؏qs|wfiYPOuE0{ǩ> A!t,8?a'_Fe*e61Bpb=5t\ϩcyӞ$qגCvZKjmFk;(7(B-Qa둷4kS]91/=r uzn +OU'v{_FN> +kP9U(D.8[!妰՛e3FÝN;Ws +kU"YaL1y 'HXxޢUzϿWm eM]#ٴv$ ˴xv瑓` ׏m 7ۼZ٦˲Eo09lni4,:v69,X׺Z`> endobj +478 0 obj << /Type /XObject /Subtype /Image /Width 318 @@ -2196,55 +2128,77 @@ x sq2s2Ud0'3_y%S8|Rʱ lL2U*v-o޲l+b~qendstream endobj -489 0 obj << +479 0 obj << +/Type /XObject +/Subtype /Image +/Width 318 +/Height 245 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 3560 +/Filter /FlateDecode +>> +stream +xߎܶjo^ zݗثH Hbnj#U'Ft?(?,Q!)G#1cqo0]|/ 6י_K u'RC.B}RC.B}C!R{^Y;=0ޕ+J>%1[vR:[v\D?Wȍ(G2RT亃WRcѸ)RRQrlzjS +s5P uMrTSBl9T++8 xFg&f-אk轶*>~s}@b[M1{C`>y[jP!ԝޔrN7?,\ץ\J u'G/K u'? rw w&%ƃ B r:뽩ZYh8rO5n&yzC3_<{I 1-w 3\&.?Br\" !EA.Br\UQ>7>]E @4E x)RYE<~%rwE27 ;hΐ9{=^\M4\sRC[!r%7=R.XstWfUkICkXZBʒN=-Xڒk˶ /Vf06Ն ʇ!c h˶\&grB\ !!E0wH?4\BrGl9:qT TNͬJ) J͊/kC2ֳY-ɍݹ8''F!W`Q: 7vw(Ŗj*'FWYnSO8 +r- DurwK(k@И4[Cr~.DrKɕ3Dn$BzeC%)Z93M-FU3_9y-+TOp26֓E,{u]r?QCP"q?MeVSZ25N#s +ݬCڜJr//Tgv4O\E{fB.:^=k{ّ\޷CB{/=RzRt+[RH!{kMfG6k4;6|Iky?b|jXt®Ñ;~w{ 7j)S\ˆ_/aA04\D?\s05K}r5_kbrlqC}@m cgwe͸N-mi\Ɩs1 +ArB.䢱|=cxܪ!r1N{-Zᄎ6;ۏƻ={# x#H\rT wr@7 )\mDפW{Ws='zzGil@!WCnEYfOνKsi|hWNE|* +ē+GlR3zA5Va@ne`%bb_ -) w. ߸la@ne?w# C PkEqS)To͒=[Ja.zG! +-Vf\e+N~iBIe͸ajMV9@gaW`s+G}i=\ȅ\|0r1G 6/t31y>DntShx7|>pTtөnL(uDrms!5 +.k,r]6=? o@.\oA. w噟-nCQ#\P1xI;<*~nܫ@EhJA.! EB.B^Vzq9nڳ1{$7o6 ,gٸ? ~ndrEִOg`W䢶 ++K.=+/ 9A, r!fLJK[ٲ w3r!rB."ȅ\ oŐF$_lE r!A.=*0 w!woA.,!Sazlfcă:PPM= ׶@ "ͶCU䦂rE5rGX< WCB.\+rư^*%3. A.B.:$̡\KEE!ws rѸN~ Xo1" !ȅ\ !!ErB\ !!Er9-A.BrB" !A.BrB"#cg{䞰C /bG6>2:P_ro߾7rKw %C.B} ^Y{>64nf9 Eh- ahև@ {n>CÎ@s5f+4E)˖CgȦ~)=*l#WcXYL㩿 d&׻QV?&le&ܮpHzrGn8?*ĶhJ +aT7*r~ȍNKv-\U4^mdwEkQ+^Jrز~hZnoƖ>yk0sKgo \P_r~`E/_~`E/?zi0"ԗd00Aw 5Zյ%uZ;kkK,󖩺\ זX+-Su!w%rm22UrW"זX+-Su!w%rm 2UrW"ז䫫_HՅܕܶϒZGluCz썚\˿ܬD^ZϛQ~K\+XFsv)SՌ-{y/a.0AqMYa}ێ-ATylsTn"pqMYy}[ύvN!w򘻔6D*/۰ov9AMYfs3 +-{ e/Yq~e[ .Լ"3ڒZiK,|U_r~ojaee\-Z1kpf{/k R.L 0䶽Vf#ڌO^V\_neEſnq+C.ڌ%neECrIW"oV=gD|c[endstream +endobj +485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [165.0658 409.5545 179.5214 420.1368] +/Rect [419.3512 493.1175 433.8068 503.6997] /Subtype /Link -/A << /S /GoTo /D (figure.2.6) >> +/A << /S /GoTo /D (figure.2.7) >> >> endobj -490 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [224.6202 391.6273 239.0757 402.2095] -/Subtype /Link -/A << /S /GoTo /D (figure.2.8) >> +483 0 obj << +/D [481 0 R /XYZ 74.4095 793.4011 null] >> endobj -491 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [335.0373 373.7 349.4929 385.8379] -/Subtype /Link -/A << /S /GoTo /D (figure.2.9) >> +484 0 obj << +/D [481 0 R /XYZ 74.4095 752.6311 null] >> endobj -488 0 obj << -/D [486 0 R /XYZ 74.4095 793.4011 null] +322 0 obj << +/D [481 0 R /XYZ 254.5056 542.162 null] >> endobj -309 0 obj << -/D [486 0 R /XYZ 254.5056 484.195 null] +323 0 obj << +/D [481 0 R /XYZ 224.2713 182.8845 null] >> endobj -485 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im11 482 0 R >> +480 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im10 478 0 R /Im11 479 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -495 0 obj << -/Length 584 +490 0 obj << +/Length 1764 /Filter /FlateDecode >> stream -xڽUn0+xbvpZ4=-AUWe'~4ߥbɍZg䌉"R7"[Xo'6ش}itѢp[ 2G!?bdxRl}Y%~֛qzNƆ@:k2Z[DtLݢu -篐e9YD -|? 曕~hS#ZgEPJzKʀ-hEvSUDAM~yy1QlpGj\@1Gj6kWkd$O]iqnMV>QX˸(I:_gNgCKKTˆ,gFs#4qv! Ղ'mG3GU[Aך#T? MkvMNev+vNim]N+1^mnHrr5zn5X;+dIVk ƅ0?Z@WAJL&,`./Hz~hlJba*W:;3,&.DxCNJ m]WEݮ& :qa$ǁ*Dh_LSJo|Ƙs,됥v[1ZsظUCO7Q١2dRm2ά燖aZʦFi8ufYvL\5j+"#fm=jG>~68~6VeRb?Z +pzCsA6ص0BB3# +25Zu@9acn :ϙL9TAkhiV +B?8"iE*~;O8m.Z_ʌB2Cuq _W~I?\gj&B&+i!E `^\2k^?/rӑSa)Hzb{q_5:Cq^P6įL 69J&gpl]_tG_*2ˡf`\ +y )-L!r&B?3/0N]@wz1+&sKS"k,-8BЂs NJ(|ݔtVnS.ংϥlM +hB#bEa.j +rHZH"Xc 7իe#hߎy@#I8HfÄܖ:AtEDP{3HAnxoa2ъ󮏐c83 / v"}5z nwL&? |x2څ$}X/@`Rqb1QautP}t5:-Ro;p/0!;")Iu>ѐ!.ƍNPcKUþ"=hGM( cgUr/紌/ *Hd2ۅP#;ZD'īm‘ 'w Ym!81f0}4qCT**d`/ U{װM{ xˇږ0ΠQ:ҫ۞>X0_Ƕv8xQeW,%셎safR=Q+ .I&?ga m3P3 +Fop酓ї ,gm:V~f`@kF. * ymFendstream endobj -494 0 obj << +489 0 obj << /Type /Page -/Contents 495 0 R -/Resources 493 0 R +/Contents 490 0 R +/Resources 488 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 492 0 R +/Parent 495 0 R +/Annots [ 492 0 R 493 0 R 494 0 R ] >> endobj -483 0 obj << +486 0 obj << /Type /XObject /Subtype /Image /Width 318 @@ -2272,66 +2226,65 @@ O g}(mvy^[/F !Օ\ VZ?endstream endobj -484 0 obj << -/Type /XObject -/Subtype /Image -/Width 318 -/Height 245 -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/Length 3560 -/Filter /FlateDecode ->> -stream -xߎܶjo^ zݗثH Hbnj#U'Ft?(?,Q!)G#1cqo0]|/ 6י_K u'RC.B}RC.B}C!R{^Y;=0ޕ+J>%1[vR:[v\D?Wȍ(G2RT亃WRcѸ)RRQrlzjS -s5P uMrTSBl9T++8 xFg&f-אk轶*>~s}@b[M1{C`>y[jP!ԝޔrN7?,\ץ\J u'G/K u'? rw w&%ƃ B r:뽩ZYh8rO5n&yzC3_<{I 1-w 3\&.?Br\" !EA.Br\UQ>7>]E @4E x)RYE<~%rwE27 ;hΐ9{=^\M4\sRC[!r%7=R.XstWfUkICkXZBʒN=-Xڒk˶ /Vf06Ն ʇ!c h˶\&grB\ !!E0wH?4\BrGl9:qT TNͬJ) J͊/kC2ֳY-ɍݹ8''F!W`Q: 7vw(Ŗj*'FWYnSO8 -r- DurwK(k@И4[Cr~.DrKɕ3Dn$BzeC%)Z93M-FU3_9y-+TOp26֓E,{u]r?QCP"q?MeVSZ25N#s -ݬCڜJr//Tgv4O\E{fB.:^=k{ّ\޷CB{/=RzRt+[RH!{kMfG6k4;6|Iky?b|jXt®Ñ;~w{ 7j)S\ˆ_/aA04\D?\s05K}r5_kbrlqC}@m cgwe͸N-mi\Ɩs1 -ArB.䢱|=cxܪ!r1N{-Zᄎ6;ۏƻ={# x#H\rT wr@7 )\mDפW{Ws='zzGil@!WCnEYfOνKsi|hWNE|* -ē+GlR3zA5Va@ne`%bb_ -) w. ߸la@ne?w# C PkEqS)To͒=[Ja.zG! --Vf\e+N~iBIe͸ajMV9@gaW`s+G}i=\ȅ\|0r1G 6/t31y>DntShx7|>pTtөnL(uDrms!5 -.k,r]6=? o@.\oA. w噟-nCQ#\P1xI;<*~nܫ@EhJA.! EB.B^Vzq9nڳ1{$7o6 ,gٸ? ~ndrEִOg`W䢶 -+K.=+/ 9A, r!fLJK[ٲ w3r!rB."ȅ\ oŐF$_lE r!A.=*0 w!woA.,!Sazlfcă:PPM= ׶@ "ͶCU䦂rE5rGX< WCB.\+rư^*%3. A.B.:$̡\KEE!ws rѸN~ Xo1" !ȅ\ !!ErB\ !!Er9-A.BrB" !A.BrB"#cg{䞰C /bG6>2:P_ro߾7rKw %C.B} ^Y{>64nf9 Eh- ahև@ {n>CÎ@s5f+4E)˖CgȦ~)=*l#WcXYL㩿 d&׻QV?&le&ܮpHzrGn8?*ĶhJ -aT7*r~ȍNKv-\U4^mdwEkQ+^Jrز~hZnoƖ>yk0sKgo \P_r~`E/_~`E/?zi0"ԗd00Aw 5Zյ%uZ;kkK,󖩺\ זX+-Su!w%rm22UrW"זX+-Su!w%rm 2UrW"ז䫫_HՅܕܶϒZGluCz썚\˿ܬD^ZϛQ~K\+XFsv)SՌ-{y/a.0AqMYa}ێ-ATylsTn"pqMYy}[ύvN!w򘻔6D*/۰ov9AMYfs3 --{ e/Yq~e[ .Լ"3ڒZiK,|U_r~ojaee\-Z1kpf{/k R.L 0䶽Vf#ڌO^V\_neEſnq+C.ڌ%neECrIW"oV=gD|c[endstream -endobj -496 0 obj << -/D [494 0 R /XYZ 74.4095 793.4011 null] +492 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [165.0658 756.7859 179.5214 767.3682] +/Subtype /Link +/A << /S /GoTo /D (figure.2.6) >> >> endobj -310 0 obj << -/D [494 0 R /XYZ 264.6686 445.8035 null] +493 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [225.5754 738.8587 240.0309 749.441] +/Subtype /Link +/A << /S /GoTo /D (figure.2.9) >> >> endobj -311 0 obj << -/D [494 0 R /XYZ 224.2713 173.1971 null] +494 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [335.0373 720.9315 349.4929 733.0693] +/Subtype /Link +/A << /S /GoTo /D (figure.2.8) >> >> endobj -493 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im12 483 0 R /Im13 484 0 R >> +491 0 obj << +/D [489 0 R /XYZ 74.4095 793.4011 null] +>> endobj +324 0 obj << +/D [489 0 R /XYZ 264.6686 374.7253 null] +>> endobj +488 0 obj << +/Font << /F61 258 0 R /F28 209 0 R >> +/XObject << /Im12 486 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -502 0 obj << -/Length 2400 +499 0 obj << +/Length 2365 /Filter /FlateDecode >> stream -xڭ]s=LSmwos˶3܃12}$ys__eYRi'3 \y'Wq / Wq 꾺VuJ:#JDEaT'OLo?grUqVb =o}[Bj2vNjaPy""}RA$0W[%E%zAXWF SDZ\gI)PLXĉfDE$K¨XS, ?ȱUiBjLb*L xZOX9Havf.3J?@y\=/>Ǻ5Cem7孛4h[Djjۦnʦ0ޙ6{][K7e2+K ݷB״զME*L@HULvz#5 +dp|N BBćxѭَ-qƛ(M`OTo“d_dAauilYhyf;:iH<: n$\sO K {Zʁ '4 q~V9}`n!T90cVI*2/Z/iE4a ?$ r[ h,{-&NE'C%uW-ʳPχ]'h/fQFkGOIk_ -OԠ8 s,=WJ$Pǻ̅qTo 36mn*Di/2 &1$aQz@&8Ai` -xL coILS-?5]I;|T7BD|?faU2#ӴȖg[] B. 9+chIr^5`l*W ̅CJ#A -g띕1U__(ԆAžB U1:v.3j79WEiHÓ=Bx92 7ʩ%_9|J W/w-S:"yynprWfw0}ZV -4r$CVPgk3QSw?56 =nPa_E@N)s5[=gLJ-Q 5ykTal [DtYgMyvCu(uzUbR?n$ZFllI~YMƷ l% B՚BF_ykN+c{, `d6_8y,xa˺jcG a"8'ncOSKvJ^ITmGB!e4.%ШA S)_mgSiX*yo^.p*=9QDQVg,F9jD b:Jy;`Ao:(̮' n[QOZrBkWnf:Ñ3s=6\6g2ҚnK@e6T8ґ!Q] @+U>sPZtU_hIYYq6"ReCmwV{=CLJ c‚6"h MB|,qզ;ä%O%RBAJ|@s[w{LȰnI=,'ދܭ~ZQcc8m>4L/h١fXbw~b{Ӏ/(J Ye -Ve_8c-/iC؆ӹ\-KYVtAo$ӛ'^{$!1_F;<%њyqO9YKi0I뛆6=}J )^ZVκ)@areܠHzB%6%oVS/2(l"]VAːm4$/rx3uÏ/$ke'Y(ʆ|wWv/[endstream +xڭko6>@Csv&E/qzh-zl%m] jWpf8"Oi"A+X7<ӯpc]"Irb.Lo_u}iJv9uO/<<~.%gYo2Il`Is]RR%It,MSiU.cWa ُ RfR ÃX맜<_A H. 6 ξ?=g,xoY +J\

QkaqΓ1:%&]χ܂lFO!L"#5k3T1`d]1z E%Լv}uzU`ִ,xbI:~N'EKƷc 0!ZmCw_e1ji}NXv塿ߝ5͕B+zK_I}NJu~ǶЈtc8%' B~6z}ᕰ)$xc/]! ^ +Azȩ'g WJz]9oJx1BfAfH<;n6 |h%?uC1xVvx tPHl#4'nFz> endobj -497 0 obj << +487 0 obj << /Type /XObject /Subtype /Image /Width 576 @@ -2353,60 +2306,68 @@ I 6޲?%O~/ @_/~@ ~ 8~].I$I<׿E] @_/+xӟ$v/ 1{5ַt-U6Ao]*ߣ`)Qnݾۍw2dU29g'5|b+NP} /wQqVCe&Fߞ9W_*~sumw(x~}9VEGqZۛiPK_կk^~XXh?bE+f5xPj uMЯO+kem~}|G08~-*_*l.'R!Z)툫y&5}/k] !v'(/S7?O-o`40~ }#pemGeu-/ /6֯Jendstream endobj -505 0 obj << +502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [187.2684 724.6017 201.7239 735.184] +/Rect [187.2684 594.8817 201.7239 605.464] /Subtype /Link /A << /S /GoTo /D (figure.2.3) >> >> endobj -506 0 obj << +503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [144.4782 706.6745 163.919 717.2567] +/Rect [144.4782 576.9545 163.919 587.5367] /Subtype /Link /A << /S /GoTo /D (figure.2.10) >> >> endobj -507 0 obj << +504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [491.0001 171.4698 510.4409 182.052] /Subtype /Link /A << /S /GoTo /D (figure.2.11) >> >> endobj -503 0 obj << -/D [501 0 R /XYZ 74.4095 793.4011 null] +500 0 obj << +/D [498 0 R /XYZ 74.4095 793.4011 null] >> endobj -504 0 obj << -/D [501 0 R /XYZ 74.4095 750.7482 null] +501 0 obj << +/D [498 0 R /XYZ 74.4095 750.7482 null] >> endobj -312 0 obj << -/D [501 0 R /XYZ 298.4805 509.4822 null] +325 0 obj << +/D [498 0 R /XYZ 298.4805 642.0881 null] >> endobj 26 0 obj << -/D [501 0 R /XYZ 74.4095 332.4608 null] +/D [498 0 R /XYZ 74.4095 332.4608 null] >> endobj -500 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/XObject << /Im14 497 0 R >> +497 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im13 487 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -510 0 obj << -/Length 429 +507 0 obj << +/Length 1673 /Filter /FlateDecode >> stream -xڭTMO1 ϯqc;@PTzB qVa:0쇊jIeH?Q 3l+GݻF`M6ciS} szfzS{fjD=p=o'LzqZNn{!L!T: -Äѱ`mN@^[B/MM@[9Eu]] |vs$L#,-Rͪ1:x%c׭bH}{Ζ #1٬obMK]"s4=Ul 4`Ş't؛(#%aeG̀]"B^͞tk[BiV!Eb~_Uq~)!p,QpoD)endstream +xڭXYoF~ׯ#8"H}2>)?eu' sTC]9s"fxp(D9+ 0Op?xP`b x̗i"'}'X0pʕ|BEgi + YnGʤ/X:O$Au8UAisg"08ϮK8W5uf 'XJsbXIyI"S$ɬ̶*ǵ`*˗ ar$4L3nm +f Gy5{SOuP +Iq\NSuSj[VW6ԕ}{'~7"YQ?fŰx(#~OEL7mPٚmQo@.8)2X\wZ5ː>1?h(w6OhtW_챦I/ku(G4>'Y~] +xg\,FM$Q$Fʓ`JWQm˲J N7W%}U;ETd35~ V[4Ud1Fq '.^wf%Q@j A7] "ARdEaSBc ΀.VQkVZUx fr}$ԠCţ1@RF& ȊA:k--UegK80Xev3et[d 4sa!|AYA +)py +SbAdQmhs`Ǘ>P5K@aw >Gd؆LсȽ[#g4GEPeem JZ(M \7he N]_-EUh]$uI`<$Xg!&WDHAdeU5yNXoI@ ":ǮWEA bbzc5׺ԋF˿Bat-&<5㶇XۗLvFU\TB@%-Zkۺ(LB@(KT-͞;!e1L{ 쀛~A<#4YgYZ!9^| +?lUQAf~KH?3q/xᮘ]PcxQLeD\V. &7.+:uM/WuMCGYG=pi:.rM7$0o`ۭ/UU酅[H; VX$Ȟ*A/xeH$\{]X SCF T鈧!ӵxNƤN@t]…$>gtɑ1VAۚDOv5:S)P,g^Mx%,|La笱endstream endobj -509 0 obj << +506 0 obj << /Type /Page -/Contents 510 0 R -/Resources 508 0 R +/Contents 507 0 R +/Resources 505 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 492 0 R +/Parent 495 0 R +/Annots [ 510 0 R ] >> endobj -498 0 obj << +496 0 obj << /Type /XObject /Subtype /Image /Width 1024 @@ -2464,37 +2425,50 @@ Krg lUmîD}[@kii5kiiTk4M4MӴj*)( k[*z73nnSg/?]fGĻ}^|Msn!@J҃c?=2gt*?G~G?~0zOuLK=`_3K`!N8l6lV?EE[endstream endobj -511 0 obj << -/D [509 0 R /XYZ 74.4095 793.4011 null] ->> endobj -313 0 obj << -/D [509 0 R /XYZ 265.0857 307.893 null] +510 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.4034 417.8288 340.8443 428.4111] +/Subtype /Link +/A << /S /GoTo /D (figure.2.12) >> >> endobj 508 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im15 498 0 R >> +/D [506 0 R /XYZ 74.4095 793.4011 null] +>> endobj +326 0 obj << +/D [506 0 R /XYZ 265.0857 503.2659 null] +>> endobj +509 0 obj << +/D [506 0 R /XYZ 74.4095 447.2385 null] +>> endobj +511 0 obj << +/D [506 0 R /XYZ 74.4095 181.0693 null] +>> endobj +505 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R >> +/XObject << /Im14 496 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -514 0 obj << -/Length 1431 +515 0 obj << +/Length 1708 /Filter /FlateDecode >> stream -xڭWnF }߯УH#oII"m\h5UKKK)vWi0`q8G$h'OzIF"$ Ha &pD<{e1ws( u,M)\*I}nXvx_[)ʇ~yyy3;ScEE&bx1iDOL*U^ B1"|$o7}e)(#4Sɤ67xKEXW3c:i=fi9/OBb!;g -(ˌ50h~ƻnw4`3{vߢ0CQYq(Uj\%jWL?DR5Jmp &}.ܕU16U -8oIe2(>.CP -s]pvI/| Mcf5ƋX"8ȁ ,^M el,ɚ $4bG&jlml|YGel,LzL0DAGrȷ]?`oXJ[^,4(Et&mkVk,9h≊nMoN˗.Y_FQ@(= ⼡-)A떻2ԗ qFsEQ4r'8=@{bjEh3ahOٲaCY/($ma{qozi  Q3-EA -%侭gitdkp"͢ф1<)pBurǨ2r 4rX.&门o?lpn;27F>4i͚- =kAW0;m*fo^Qvad߽^Lo+R"+,J75=!{<T?O'>]aI<8(AOb?MwEV 4mhx*۝ΏmkWE 1iWU=\+9"$@.J4=!9Z|Bd`Y8KTU==JtS-NܱW+r"]L6K[!)OEwwJCMo+2McX}x~j>W4Gendstream +xڭXo6_GYR8u@d{hbd.2Zw#eٖx_<Dǃ,fqT$AVHp,ד(am?r;̳!ɫ7)rVi?".L"~z_} +)uLdy(tDQ8W["G)vvrs+ND4?fe}nf'˲LX+ߗg0`Ga7A j3u;QTU4'0z? ,tD׆Jmnwe[y֪4#ʼ\{1vzjki*6d6JWB8f} +8o'>"ƋBH9!LL& " hcܴr,L2g2_"ʄ8sL)tJY_[$o@Ap!(-^zLy +eؕ>"b|j_3a_/0#tc"-Т"87s}ϔ3ih5^v)TFȖ$騍gJ6Ā3Ίb=1HASYLB(xm:=ntjS(kvLLӺ!#,:GvyȰ` }6v:+"> endobj -499 0 obj << +512 0 obj << /Type /XObject /Subtype /Image /Width 318 @@ -2522,215 +2496,162 @@ r 3S.JܿxkgqV s5TO-JKcU 'ޣׂű*\<(--U)BRԢ8V ~rű*\O-JKcU#H%Qp_=> ->> endobj -515 0 obj << -/D [513 0 R /XYZ 74.4095 793.4011 null] +516 0 obj << +/D [514 0 R /XYZ 74.4095 793.4011 null] >> endobj -314 0 obj << -/D [513 0 R /XYZ 269.0219 485.0495 null] +327 0 obj << +/D [514 0 R /XYZ 269.0219 441.3597 null] >> endobj -516 0 obj << -/D [513 0 R /XYZ 74.4095 416.1847 null] +517 0 obj << +/D [514 0 R /XYZ 74.4095 312.4026 null] >> endobj -512 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im16 499 0 R >> +513 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R >> +/XObject << /Im15 512 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 520 0 obj << -/Length 2297 +/Length 2206 /Filter /FlateDecode >> stream -xڍn}"6HԽoٓt 4m122tiA?p,Kb553$~a+WiE~_y znW?.eI"QxQW;xISYKC d"ˠ84VT#{okm ŀ!Do -ZܘNn*-[mJ?ȪS^+LHlIx~a~ۆM(&J6 ǃV|<(CV?#0'DZX=Դx^6%oQJx76}Zʨ^@! rA=nRyBmwal1#kL`T)Y͑ێQrMJ`Ӧk\%~g+b'/:QuH91[S 5J[bW`"=|>6t*yAT]!mKDƻ/!͢Ǻ' 6(," -nB(VY1-HUMR:!POY."^Эa~.P@9$C/E"Ae-@()j+QcP︥A~Qe_ap{. cʆf9ۅ}DUH-A~t !A;fƐD?iUtqe8ؾ&;nB07?:|aey.nFax#ҠOfeX (=pub8Xc:H}/%^Ei\Z- }Ob 4Z4Cyˣnls@(l 6܅[Iw8*"G81ǚނKE,dBpYoQfg2!(51t!G$3SG0[DbSENd -*y[K_̭/ Q5}BNm1/[:Ʉ(0=20r宴r䛡υnPqU85uWSsRUcKH*T}mevs0p]ױ˵ͪxRQc*ĩG* shlXB4\yۅ0fC:>xַgMѠqbOA):x`usp iQ 1ׄ"꟨g -VdӖMm%\mA@ ׶̹P+s/}Jf@xy$Ӗ]@c&^~,Kńj}n"D$hn { ^_tˍޒ;ٟZc|COM3wdw&'chnDNJ aBm>VwY ;gΈa[.\(ȺuO4͈G؉YV@mhI;LU}>0X=R7-c靮vKÚ:u_RsVwe=v@3 -hFu ǒtcvxIpfok~rOe1p?^{f|fK9za(@:hk"6Gc֝SP>&0*9N w9?iwMŚW ՗Љ]ݕmQR>5<<5 D{:PN>r +rIWnCo9GFTþkY}zd7 ]$jm SuǍ-F=B-n ](/6A"$,9V`&J70LJO"& 03oYis O#PG {^Nņ~(OGk:bqޅ=uxO "~zA*@mUR`^85G(tq(S+OnDvRtThR._'ZH~eѶChcY4ئ-R٭t+b nxk'qQ ݝ̥n8MXETbpVɩ!FɡyJE#n,=.q+GlQ6&*QV=QсT?Z $FÈ%pH=f!W2eEboE㲥¡{fS$&tx!' 儇:Z Z[Ac6,iD(!+0́Ř:(հ3WdrSxchΓ,3k'cWЄ6e[zm?PB0fj\]d2-8pu,c IPf̀\@VGgZ@|Dzb4V8˅J!ͮ1(4_<ӳ+ݸR6 &+X44_kR=Գ:<&1W[,/~ xsեr.@dZtZX <Ȥ!ct0DP:GQ@ҐFVsWjU,cKpͱvE]tlSv>L7&"täenFt D9[%X.bVp<1CM4q) %O)9*S՚atlIYImj.ku5"<V{ƌ: +R?Mb=v@ys&OS#1ugi+ۤa zo[?k3>X"Z'P{JtB͝Owh&ACK3DXf5R"9K$ q*Z;_(JZhNMAayՎu.Sn|di,Dg+KVXI!) P|c7=k 욒Rrxiָsm1al7 +<>'R?U%\޲g +P2H|Ix,+':?ίXxLQjb~eS"32L"LmI=|U]lё}FUCy?j~˝!D CH$019̦XW7]+8_Ӎ% +6e4c="qhu&c"X\r/ \ 5 _1CW,acĨc-oc? 4z,VB!Sǩwi _uU(?MF7}a=Oendstream endobj 519 0 obj << /Type /Page /Contents 520 0 R /Resources 518 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 492 0 R +/Parent 495 0 R >> endobj 521 0 obj << /D [519 0 R /XYZ 74.4095 793.4011 null] >> endobj +30 0 obj << +/D [519 0 R /XYZ 74.4095 704.5199 null] +>> endobj 522 0 obj << -/D [519 0 R /XYZ 74.4095 750.5663 null] +/D [519 0 R /XYZ 74.4095 491.1097 null] >> endobj 523 0 obj << -/D [519 0 R /XYZ 74.4095 557.9109 null] ->> endobj -30 0 obj << -/D [519 0 R /XYZ 74.4095 299.5901 null] +/D [519 0 R /XYZ 74.4095 270.8578 null] >> endobj 518 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R >> /ProcSet [ /PDF /Text ] >> endobj 526 0 obj << -/Length 2180 +/Length 2156 /Filter /FlateDecode >> stream -xڵn>_G5J$EIyNf38Y qŖaH1_*W7@>tXEyB -/vaK7K|S~XJ{:]x)T?0r?<z{ΩJOOyn$%mZ -!]pw`+eΩ7l }7L09eOa2mn<@eI@_J.UJX]R%%` #oX2"K-KwϥTSĝTjVessI^~NySЗL_;̜Xa([\yV(Q%_B5nYhD}13g~x>)!i{e#n>MWTK%"NYҡUUKKMcBuzMÓ2aN(H -ǰ2kC8vjU(}@NlppIt"h H(֍2؂K1SWDfeG!/ f|@4S͕EM<zca1N}YN*S1 s;&)4]"|;`y,X.N0O{J2;PY 3 uPx #<˞/Zphfqn_J18AXި%<ޫBܯ)ZG>E%}B/8 Nt": iK'P%:m`SL yKWvPyLE:aZ10Z -E1<1 &;LNC0.#tЯeq2x,3ޘГxY1U]7rhgR W6o'{) Qfh+b$UDΣRZseh])xj-M^DKC[g5稴icrz)viu @^oscGLjCq'׾ }eh_KmU)08 @:X%脜&{*~=AcCr;%6BTe*πf -Ut"ZQ% T V0$#@zc(b D%mיXmBW0X*F( ->0YtV`@8 7fl1IS$x/b6Jua=X 6bovHi|jgc&B@cjp;M + ]`U܄yQ"˺c !hCE?AϷSj6pZ Q ))Iț4f1lCQŁ#'=-lU -*\ܡ`vk9];SyNIT(UO_`b ]b1Cmm;wVD@sÆD7Lf{ly L,N_Q{ T7gC5`+DF~}S.UsWOetϩt5|n y컑 yp-=u\ꢇ\C!RW4_(NȇE1FܘT|gnwk|7zwVDsYnskNd7xMĵ NK}8vgBs%n/ͩxo$彫RGIBM>Asc78FKvӍפNn\KƹTu='xG/:ߝ -j."՘QE[JSq_L-q#ZVFox ^HkK:z:NDIz:mgsa5wQdq5L2E7o?`o@ky6Г["Qk+д!":{fD#T4ޤTpۜ U?F>SӮ.wD1L16qE GsLU?JL_5+^ML[;\OH5#>]sBYpZW$(sendstream +xڽYo6 "{s'޺nla{pњ؁\#Eɖ'aChɟ(R`_,Z$YD,آȮʕo`YvE E7{?Grœr1}51a0۪^ûNqę12+}b~̕%$IxK-Ϣ3Y"LĂdld)]L:SC/ NeAmdCćek>*-\Ry_Wm̫fE!=E#u ;+65=vcs`#!>/y ? pDGVlkZ{Z/j(1$`=W +zzWviFou&,K 5,״0^`^kq@j7ߏ\ݖK^ȿb3",y k jR5>iyh7p *i #o]mhj $"Z)kIx +Qf-WhLzE3dP*H0fC܀e^^w>5[u;1C.H<"!W(IL%cF3i:"0Pf(BA 0hkֆwӶג00z["TC~Q `Kk*y '{UeFco #4c*A51>TjWCJRӀTM$;>0p ,hU5~CA~F5Q`1Zr<mUreFETS0o.fpGCvwJ*,n^edmgiH3?IƉ!S74p̛F{ +M^%us{*H(d3+u\A'IHV~s k^Вj]5g\P2'>m: Sn>0 H=. W N|̍tLh!;u#WczCl"O< `"$ EW/^kc뮦3I\zۓjdv9,i +X=n\49bJݺt-?t6`i]OS92ϑ؏Vrn]mdCLw!<~a+e<@?h _> endobj 527 0 obj << /D [525 0 R /XYZ 74.4095 793.4011 null] >> endobj 528 0 obj << -/D [525 0 R /XYZ 74.4095 750.2909 null] +/D [525 0 R /XYZ 74.4095 493.8957 null] >> endobj 529 0 obj << -/D [525 0 R /XYZ 74.4095 524.5101 null] +/D [525 0 R /XYZ 74.4095 307.4495 null] >> endobj 524 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R >> +/Font << /F61 258 0 R /F35 221 0 R /F28 209 0 R /F26 206 0 R >> /ProcSet [ /PDF /Text ] >> endobj 533 0 obj << -/Length 2157 +/Length 2361 /Filter /FlateDecode >> stream -xڭn}B~]kc؆EVI@ qO]cHꮪ<ȍoA9Ǟ<_y{CˇϏqYNʉAsR=4M 9E(Q9stet[XPkO]9(}ם;aCmJ]v ߃6B{.0LeӞ[yxN4hSO<e;Daj|=V* -#uB eE3^jAR}e:%'K>b?wB\B>mFl4$M 5?%aBo;BNx Ez@LS?vv؏׫%ӟ;Z<]PAu@3j4GS3Iqe# R׏hVo~IєlDS'n) ~Tw|9[E+^~4 +s >"8+ʂsK8;.n(cl}T|A:yG1t%A;h.kats.NӖrSǿǢX)I"Vjr̀n9fr9 k5Z_sHX+bᯒzy93=[1?B"5^'@UGIӆI62I9{# iBb!B VXFNg: rY| -Ô`3x -K;\.VEdW3(&OwPiXeG`UgKހ>FN esT+& -!b.D_}h%7R|t)?˝b2+/KWv7BXCmK&ɯwlA!~3W"e͆8KZ椐M%V+7>p(e1t===c1c(CǫnXYóiw+uHŝHwTFf4Z֌wzA\='OXYOx7aBWvM|E^"hlA#v [X"?k_@gC \AB,+'@BrΝ0_%ntk&7f&.D PS[ Ƃ}%r Όov8`x+ -fnPH{P;3l/<5#Rz=jS15ELOM(%umTLib3 -Hr Yt -HD<0t[JI|GCHH-=u@Q)ْfABk*/u]Nysgfz:*~4]>"6T3! 17[>#gD\ -/4߬L^~*AKA{鱳v8e- T&"~7(G؅+JpW'Aw`UʖYz+kd,t]IHJgK'*#I7 -^5%]*iVR 2WGTg'I+a[r_L2&%fb G !$힂_ٯ)G+ʝU͌er ܓe!F4xM-aߑv׉ud]{+jhaLZMd&A_ Jr6lvFN[Ę=nV״`*#ϳcIuc -BM4"}O ;0^ &^7IvK۽`e^&[ܳ@ tX^rm6H6k"K$wPl=t &pG.1gzX g6[ U:>/}SG<)kkF~vBe,)Tej@tT?T + 1? (Sv "Z&S %9ԵH./n #јKWG",UD3QD9vOӃLj5AwYU4C sy9^$ش(2JwpL+`8zJq:䪙4p0, O44v e0WmL EƷUm6dO>xPeS{pAVjȻLU]0pX+*t#4/|{.F> N "*bE +xuAwέ,%Ϫ,4{ <&@1V$«ɡ8"(E5vKybUG>(L3 knъ6~CVq`ST4sE-fE{`C|wvhjrMfhJö5{8\&vDžiTϒ] >QUԑ~7 6C7 C\YWU9K~Dʭ2c W*̡uDZn*| 竲^fUjT`w0:e3ЇE%|_g?]hl"lMLK5ɗ/M[d>a(iˁJ^8X/dyht*f5EEAyMxr;T&ʒ05\>jkZr!Ou <g(oʆ8 İE5*R*GPULV"|$Y!~'og)ęDӛEOұgXLlFzȬa1 {>>ZπuW2[y+ +w^iĮF Q1ձCgyBƤ}(JIG(SZ~k}RFfT(lh7`lSP58À[y`=1Uח~_jqеqrZs9n +[bwcH*UNP+ ]_T3-@:7!J`lt p$;hQNoioO|"a6r}K5ag8uK¯ń$pV6g> endobj -534 0 obj << -/D [532 0 R /XYZ 74.4095 793.4011 null] ->> endobj -535 0 obj << -/D [532 0 R /XYZ 74.4095 646.9943 null] +/Parent 537 0 R +/Annots [ 536 0 R ] >> endobj 536 0 obj << -/D [532 0 R /XYZ 74.4095 451.889 null] ->> endobj -537 0 obj << -/D [532 0 R /XYZ 74.4095 220.9291 null] ->> endobj -531 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -542 0 obj << -/Length 2581 -/Filter /FlateDecode ->> -stream -xڭZݓ8"TaaY Z[*I8_jٱc;3MQYnEmHoxw~yZOw/ ZB(d͗{޸b,[EI/߸&>"kƉZq wUI> -ƕI=$ӚI\+)~_xek9CM7 6=dytD9؝;i)WMUR@tdEف3e$FHC1' Yy`Z/{4`2ޭև0E)N0ھ+Y3-D3yӵȦ7Ro:ajb_Vk- _j?dqzKfzO ܺ:7Aas}poY\]*hrPɛÝ7H~Q -n2.+ܹvn %m7!,q/`C)ڠ3,"y\·>U1 -;HN.!=?4zϽ75'Z<"Xj>SYb8]POUx7=uɶjNM&)15)x"wsI|>;@vs)&NA:? %T{蹉"c/NvvI[3I9S$Ұ@ $8o-#{=|hšKnP -7up.Hۿ9oْ ^ [N!)>uN }a #_#A!6_ߧtotԐ@yuARW=vhHuo6@#`ak δHh;@p:4=vda<*{{vYu5tX|w&"K Zuв,[s{ɇeݪt_~e24|eϤkWTi]h0IQF=T=CXP"*\k6o+/74hhX#ͪbWʆXL o;,c[>X_΋||ZU/t=^5QncV.GwIgwT}((!65jX<`7o~0 ZlAQ>P,>5tX9pf'/7 yM&9 WnƃZi-Y(b W5"GC &L ~N% XaG T*A{Y=9 gR&|!?%0b^%oS-of62P pMs! lp - P$LIb;w=K'Oϙx3ᕹxD#R]$3a +rk:n<H\Eش-E% $nV `]ûF{϶=/Rà%MNJOϷ*jWliF[?$ƒTV@JRt٩\>e^NM^CLik%C`[ -^"yX5z"b2>-EXp(VA$Ve65%jmۅ; Aؖ^456q 6}H= Bu MXt6ÒdPxt̾}˒6sG xThxؽ&>)-<4AD ι< w"8A -;Gn.a3'yx0Py߇ ;hendstream -endobj -541 0 obj << -/Type /Page -/Contents 542 0 R -/Resources 540 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 530 0 R -/Annots [ 544 0 R 545 0 R ] ->> endobj -544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [125.3241 409.6627 139.7796 420.245] +/Rect [125.6642 225.2515 140.1197 235.8337] /Subtype /Link /A << /S /GoTo /D (table.2.2) >> >> endobj -545 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [496.9433 296.6652 516.3841 307.2474] -/Subtype /Link -/A << /S /GoTo /D (figure.2.13) >> +534 0 obj << +/D [532 0 R /XYZ 74.4095 793.4011 null] >> endobj -543 0 obj << -/D [541 0 R /XYZ 74.4095 793.4011 null] +385 0 obj << +/D [532 0 R /XYZ 228.2749 645.8849 null] >> endobj -373 0 obj << -/D [541 0 R /XYZ 228.2749 645.8849 null] +535 0 obj << +/D [532 0 R /XYZ 74.4095 585.7398 null] >> endobj 34 0 obj << -/D [541 0 R /XYZ 74.4095 609.4949 null] +/D [532 0 R /XYZ 74.4095 480.9258 null] >> endobj 38 0 obj << -/D [541 0 R /XYZ 74.4095 490.4325 null] +/D [532 0 R /XYZ 74.4095 320.5086 null] >> endobj -42 0 obj << -/D [541 0 R /XYZ 74.4095 359.6154 null] ->> endobj -540 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R >> +531 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -548 0 obj << -/Length 438 +541 0 obj << +/Length 1678 /Filter /FlateDecode >> stream -xڭTMo0 WhR>wېuXw[Cx'YGձc)Z`GH $c]<ʷ/㪏X5.{ O06!;'zuW~[jMW)biR\4}]WCo\!ޛ֣u>ҁ)|j StTzSPd`]0y HHdAx$ c'8%> uV`F/DN|&OVppDŽ]֨+]G$#FG8qaّnu<ԌgF륞i9[Xz Slva4ulfn7ஓ"q&vR|V且\c\܈_EHVFr+DwÀʝ0g 6endstream +xڭXo6_@K$U`-kXfd-Jr?dV +Tx +X%4K K&2|Y]FXC2dr}pRvPz<5/{[-\9'eJҶUŗwp)1JRJEdt(eX:JdDd&E_hw}%,xRUDka"}1(RДdZeO+)( d8bN " '1%_! J"~mTrUHu C!t* J(K>4 +3- r(HnF91 + ++nUV}SIJd<-?. +3( ;s ;›st}ǽnls*lU%f@@7#%u ҚM` J%: IjǬc8$X++. szσƔβx7:OPv޽Ғt~:_\6` Lؽʓɶ[oA}s#\oظp㾰hf,l}Dw{T(yCS:CN!Pr.PئiI$?4Y\O+gxRċt R߱{ B4A؏PH q͝[LɠZO|O@\o{On)+?`we{[VeG5#]gGn ?yۍ7$apeۥ =|Suƥ_uPKְ-R&oXEeȱb vS&\u ᫃μ;yTGw=@p.n|F PKS*Fèx'/r<1Ab]z;.I{πַ>87v<509opmewU!n:A@<'l}g68o EX*oO My|6lٕmg__c4ʭSajz?>=оٜH?YlQyfq}Lv~*ԀF3ru\^B,Oœ[BVaJ +V߷ 7Weoô21۶>vѯfxq*7/I A iʫ"O5D2ʩne;Q2}\wru KBlbxKn lr_ }  w}! y*`jyܷ!w$2a)sdQ%z8k!pzrvs4Nh&MXN%f%Kt W@tMp.2\F=W  &KDPOOⶾꂐ4B' v7]8rCsD槅A`pޓ2է7CIiT,br(LXrP)ђG|u7睗!^eB>Yq>e 5J)O d}x݅AalcoR}/M@$U*}R&l]UXaoq9ؓB?/ B Rݯ+3endstream endobj -547 0 obj << +540 0 obj << /Type /Page -/Contents 548 0 R -/Resources 546 0 R +/Contents 541 0 R +/Resources 539 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 530 0 R +/Parent 537 0 R +/Annots [ 543 0 R ] >> endobj -538 0 obj << +530 0 obj << /Type /XObject /Subtype /Image /Width 400 @@ -2809,34 +2730,48 @@ g0N >>+fe?.ɮ7&z/]1=/ڜHTSRjX/sBNv`H_Xzv,y9VHCɶ1iiOc빯HQO|:ncYOH[1NH+}7s斪)WCV]o:ަ2eUo,DjUx{+SRjX/sN@[əSag6:spQƔL1S$4&F^ +^(¡^l)H\#GQ05at󧅳XMi8;]tu¤'V"fbg?>)/]=sqcђeOzL3F&qcqxӁsKzN4F,'?cn̹P˴gӁy5xup mo9t:4jXꓯnDFXim`t1?!V)UA^ +^j`t-.QF^ +^Rw8q҅Dy5xu.%ȫaū涫 IruhհՑ_3']h{ˡKԡWÊWtG?H^QEWEWEQEQyEQ԰EQT8E^QEQEQ#æendstream endobj -549 0 obj << -/D [547 0 R /XYZ 74.4095 793.4011 null] +543 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [496.9433 365.4795 516.3841 376.0617] +/Subtype /Link +/A << /S /GoTo /D (figure.2.13) >> >> endobj -315 0 obj << -/D [547 0 R /XYZ 241.4685 306.7153 null] +542 0 obj << +/D [540 0 R /XYZ 74.4095 793.4011 null] >> endobj -546 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im17 538 0 R >> +328 0 obj << +/D [540 0 R /XYZ 241.4685 458.3832 null] +>> endobj +42 0 obj << +/D [540 0 R /XYZ 74.4095 420.171 null] +>> endobj +539 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R /F35 221 0 R >> +/XObject << /Im16 530 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -552 0 obj << -/Length 448 +546 0 obj << +/Length 1658 /Filter /FlateDecode >> stream -xڭTKO@W>0; -Z*,8@c%ہ<ر ZoH> $#W<˿X5.x '`8Grqx7US(1g,#ʯp[|aڂ"4),z@Sbh3CC0q4mc$$Pd$dJDkS/31#1s^P^ɄDn]ZƧUG`^yRvخOƣ `C_1V؋# >Q{P}B8 LN=4Rendstream +xڽo6WQ"_yhú 6`MHR*ɐ~w!KHcޔ{J7 noiΫtrx)j17efWFA(2Od-lm {k~B`>HUC-DF* غA u\@&"4"'ǥ io75d <MFM]4W :9ގƆ_^e6ðצ~A(}THWu.hDkyw3e9A3ElO)i: .:BUE!50x,Ea^C[ir[ CeЄ>JJ +(Vc unAL#%D7쪌fwM Fg`E׹-|(jk^ |("Ep 1Z8j1CRG !}q{83!quYC#vCO>h4 lLP"i<*.:Z- Z ,33xǩirL3g1[u0LT;cNB19co`s0@b9xcn8{\m!bp&±z̬Yf\HR/ɁoSxCl#6SZ!d^|Zt[,B{$jan(yqI/^}p׾PUe0\iY8v)  y6%FrFǁYLZGhNF}Ê +/\UDjvmY!„;) Kf~Ҷ<9]<ͮhK;Hqv7=A.ͽ+>@ȃkCKK=B=٘}<:ȃK|GV{{+@&]2ߣ"dt(=Z)m7I\"pkiٞlO0_ (/m,^ pd!!͊Å~ H|y6JBF';co;endstream endobj -551 0 obj << +545 0 obj << /Type /Page -/Contents 552 0 R -/Resources 550 0 R +/Contents 546 0 R +/Resources 544 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 530 0 R +/Parent 537 0 R >> endobj -539 0 obj << +538 0 obj << /Type /XObject /Subtype /Image /Width 400 @@ -2952,162 +2887,181 @@ o ^!B^WW!W`tUC;^xsWڥ膮UJ#+-ϯ={رիWK5D ݺgWXq]wھ}. 4[uu77o<~Au늊$m"=*!LHR3<2VL,EWf566VUU .\pUyua]uuuӧOލ7Λ7oʕ).ٌ3tyinjsذafޣzūS8p`Ϟ=A3"̙#"kA#x+]cǎU2HBn@!$?^PP˦GJ.YD|=* ub(y6'1VWi䕬wFaG|ʂZU޽{ĉr/?.QLo+^L+7S*> ^dzUa3AX'X)W B^!B+W!ʬR1ñjO^-S gbūs5$b[֡ŊWy/cuhWy/cuhտ}O^-S gbūk_O^mO'gyW8o0up- gZIB6ͯc豦G}˿] C t&O?c$]SgA ,/}Wi~ޙւ\^~?8Q6Oګ_X8<"xe[nU:e:iAYzk˩znn٠~eϴ~$*.P|~/sΓI޽wڔlJT@[_yu鯖' ?.&gt+(?3Dɗ..恼|mڕ.**<~酑#Gr˭ͧ[U1Aet7(dPz2!*ߏgk<?ax;g8G!=Nߤy[׸`ohY8w ) ٔL&7[=1yeνs/ѣ#]{_߱feݷ7Q+lJuuSkv%1C*/S: AyK˄g}cIi}ߜϒdlp}Û|DQl7$ހUa7k}]qx'w}=I,zId IGWVxmȵ2G2e:5E  Qi5n:fXiRe_|xUӫO~&=ߞ_ }6%!6\>1JhvbTVM6=_o* 2[ƭJVS7IZ&$z:33mÆv퓐~Mm(_|yG.¬.|[{Gd6vͭ;M5Wx#G6?D+K"z&UMn8zRo+/S]]=4BP2uٜ4ṣ̴2u?,ML{waSpP隐(ϰ$.y2b~ WA Oqhՙ?w+~|C*dS2^5W*۷Òq?:~޶$z[ɶٴ͜%˟-VwuOñ_$.2zlIR*4_S}:5xAޙ?$|*]%6;/ >:/'B&⎟[򕽍*~~N}hɶiK"elZxև{eCB{IZfzO][Zf8s^5^y/cuhZ:iK"elZxu'4%2up-V:xmo:f8[+^8y>$b[֡ŊWx#: gDAJB^!B+xD^!P<BȫB!P܄endstream endobj -553 0 obj << -/D [551 0 R /XYZ 74.4095 793.4011 null] +547 0 obj << +/D [545 0 R /XYZ 74.4095 793.4011 null] >> endobj -316 0 obj << -/D [551 0 R /XYZ 226.347 306.7153 null] +329 0 obj << +/D [545 0 R /XYZ 226.347 458.3832 null] >> endobj -550 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im18 539 0 R >> +544 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F35 221 0 R /F26 206 0 R >> +/XObject << /Im17 538 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -556 0 obj << -/Length 2742 +550 0 obj << +/Length 2472 /Filter /FlateDecode >> stream -xڕZ[oܺ~ϯ xYt˛8=9- RAZZɐ}g8Vj.dѐ3~qHY\q'b4Oë8U*/ïpkO_"q4շ+SB.~-{.{S]od]oB΃Ϧ%}<8TYߴ뇻oPrD|2)bQU,ci=D?w4 9 xsl$Avx$I^8ݭYݿ`Nыϥaʞz|PnpYG Lۙ:O1s-rXlDRUHp6AE0@DTۮ'Һp5yCzУ7}f)gZ@|+tE~윳Z2οz/c6XM˵ !|v 0N[鍍FDJ3e=3CswC[F訁 )gΫ~*Sek /LCwAEQ]#fi5Jc(kNszeE+!X}LKJ\s^ -n+ZRNVH$W j+H/Ky&R9.-Ŵա_3KS֕{l`۲Z^RS\ ^<䟚2Z zGJGx(!*Wq4Mpu bT$ײͩlq`hɶ@UUA\SC'TGۼatMב >,xoGT yImaҦe"D'+/RGCɠDzCɏl5HFtQ76ܗgO}RG$+; Q⣫{ x:EQ.RJŘI\SB -oaE ^G[anx{{C])$ǥT0tKŝy -q. 6Z0v֬)ln ~@aКF wg,wq cOO #FYO-Zr7*3r$qꓪ?Pa`G F*bigoT(=zA -YMHjN4%D9RL*511vYnݖ:OY#j:PC ;f{Ca ˵Pȹz,!{ x24#_|eC"֨2܈ˬB#Trѝi<-|c.DgXk%KYjuY>zP&JQi9l-+Bj MB՝M^lQ.4up,r?sSk5oA8Nh)oK:6yǂPPcTc/zL6*9/ݠE{];CɶpAlj}) -WcwG]`=X@Y 0a @kyPUO.yb9@8H&/] Mvh]ޖ$ %dBےC13G|(bްG.Dܧ(zڕв -*Z(J4A;bZY۸o<[4+gѾC+2wZE|vgb-4R5ZW5Gϭl8*0T4кCQP.!&L(9h.D0#O͏W9 )i& GpI!&5 SӇ3i@t*?#n3—\ 5{S!ыO/,r_s4HΊa]")1wɱptCWqB+փk!Yc$8lC>o/ifx09e8ZaAZ2L~蛧i'"u4豵-pSf/RdV}t|::{Պ$ C-d8MԂc`ޘjvwLT͎*<"ieG']EgvwjSrAIڡ )OUp4aZk,<*^N:$#zSz3n5-:#G O! '˄"C͔N:VePD(VB9L(Ǖدe}/C:8WKT2x%_&?RBX34 F/vp&HZXv}'4-PݲE~#6)& -G>,J[kdK xZU,ohnϧ(̳79:?"܋{dC{ņ~+t|xڂ38I{7+$b\(_"$HfwW%8Ib -vO:?R0f@6әnetm8ɛ3C@Yc?{C]$a\G}82R> hBD)~AV,7ʮendstream +xڭY_o8O{sN v7wX\9`$jc3)vl߿F"i"ЩP/>n) N@,Wޝ9!?.}靋N>R$Q|L˖Z K%XE"37'SR-7sJzkumMvhrb[4v?Wf,yFnj=XUB,nW|/>l[ TkDƂXo{=Φ&Lٛ=;0p }GNeͪ…45EUrY 5z~<" |=/1]K JE +ȫ + GbNy i-*} UKY MxCސj"+j}Z>Ky:>Xư ָWv~S_D*z6c"N9_LX[$AukKneZnhagưPf=nic#kֻ͜4^dI/XJy/rxyJmJ긗~ώ/v(XHcd-v1)+d]׵X,&n/۬1Kp(QxM~$""z q"d'`Y`7 ibՉH .z)٧ D(_@KsH$ Q8ĂAp$; VXw6P?\ʬ'TK]F2mN]%UaH=p2GS6aiTz_PYXDeFmw-Ҵ=GLBiŌ]%X(1Q$۶KA%F eIqd _B;9 Q Љig6+j~. n@Oz=+𘂨0 /t\3ղQR[:Q=?]ttP@b |" ޓ!Fщl<}zSR*:0{9L驜M|ȫs{8Ch>OaL'|'~#яeG0 DkcCpxQcP p*MEG +ZYaP( +GT`*jHR.F `* ',HvZǽZ ˽˞T /Ol}Vrmg[䦨{Zo+pa0G. l!A#hOښaGk^n,ZInp&Bljעʚ_h>榨1Db̖>Cpnu3vg W_z!NU%[d}JР[@&40^j0cEƗvɆ5:`LC%plX[q*z X7'I7ϫ#J@2a[ƺu pFkF!o1?!mAD]逐LmVDX;Ma?nv4X4>,v|qg ރN\ITQi ByTr͠JJmQJ8ޖouS@FU\P^NׯecvvqkڛSo݌ܑB!NIpҷAgj`>~|W} 8#6\A @c8(;S+kyFcՇL*M:+Y?(!靹nM=@q'{rU;`0_ Os7sHs嚋'naj9[&[!ߚu/UK͹)`ZA*}m0W-O2"#׻RXʕ n[ -;CLc=U'CۿĪĝO*ʒ">V-e] mOBF7+RɁR(ݯkнbsPDd'(H CWKHO&?endstream endobj -555 0 obj << +549 0 obj << /Type /Page -/Contents 556 0 R -/Resources 554 0 R +/Contents 550 0 R +/Resources 548 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 530 0 R +/Parent 537 0 R >> endobj -557 0 obj << -/D [555 0 R /XYZ 74.4095 793.4011 null] +551 0 obj << +/D [549 0 R /XYZ 74.4095 793.4011 null] >> endobj -554 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F33 209 0 R /F26 198 0 R >> +46 0 obj << +/D [549 0 R /XYZ 74.4095 240.9316 null] +>> endobj +548 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F35 221 0 R /F26 206 0 R >> /ProcSet [ /PDF /Text ] >> endobj -560 0 obj << -/Length 2919 +554 0 obj << +/Length 2977 /Filter /FlateDecode >> stream -xڕZKϯpn60fć!,g0 ݓAee!Ӌb$}0U,z|E5_Db*"/E>_xמy=_?&|1$jJ3Gc?7j-l)jGδDx+-u~w"bY?R Sq.RDH=KY"ELDZh2%E`ýuiN Sptcpjhb6f4aB2#ћ`T%&L4Ž׸ɮ["4par:9\܀$dqc.0 b\&)(ȡ[o== O(&4=zq 쯭&g˄IǮy -!m~(&q-PR1kKI3 -s4Fr~|70:.SHSG_f CvDˏ+`.>PM^O)X$r$i(S{t2|Ek*9L߻7R{Q!#('PY:SoS)%a-D;(Uƒ] !n!RR8:FRm|j[LNhT7!k_ũB`w@gˀqCHtLأrRA}嵡-ÞM2b#9wWg# Pd8t!%2y^*^*B5C(Kc@ji36K a_9ZY \>mkv=T?Ihdg[ug1Y@RB΄P. -R/Ht YD5 R,ԽqOX_P\?.)(#_K+[ HHu {UM$ cMr-+Cmmgabyher>5jR-ݫ " "A#%DO>T4@H`>.h|e\H.> -֨>ňZ nJ[A{Uj3a;KGMEXᤫpPVbZP:l.Di,XuRurIEH Q(>L>SKb4؄h{"=@w1}U+زrƟv6|dnp ;R!t31B\ rsWXG^Ip Uۆ@;eZ>#í}ّBW(,f*KYD oGx [ -AATV26\KY$ܿ ?BKƠ}M’A/endstream +xZݏ۸_GXDa phh͵u+ I g(KZٛȃ\X#L iHVo>yׁy=?}H"Y2q$ϛ~{\Z+.X(Z޺_j%̻c׿yHIOKca.ZDl=cK kmBJűBc2)REφEN̬H4~/RU2@skXMyr=u8{Ta{ qܩs>*\G{W짎?v{x*]govk8l:3az| M[G"?Ƥ)3qijmF&{C*1%V=yd;aV: 0%Filj z]־Tc&q<$Ҩ2 1q%mH0G5Ov$=m$O@:' ;sOpZ;{N'I]w>q +25>K%GT4>UlBW,}X#+~Ƴ^+]2,{׺JȜ +rؓڧ$DMNDPNkKէP7HʵIiH̛|kepDy>Lf±ߠu=׶~7A}JF5؊b +H"U1=zנU=x!uzxGF_|4y!%XQ2ByÜ Wc`?9( >"DJ +7+.mp=[OT* (t\(;F#*̚@($ԸJ9J%h >pot- +*Я$fq|G,ĝo7[r+$ \J@|[`f4ur^99WK>|c}]~KȗVҚihQAĹ]X%: =0@gw?#؝ vAYSH|T/%jJD=>O?Vp 9NY ۈYg OHYt\2I{L)>a*&߱KP!ۿ`D8(EJ68="#btN-p(0+g S6n 3JhŸ<5+f +95[2=M%fJ43G{LohLN;"Hz{t?S(0@m"^p#ߺ yul,o, -ulRB|I'}{҃˱Dk@Ao=WZ 嗁#az4\N3zפOs*i6krהq,-X3PNGpU@wcS/Rox CCM<]ShZ#|)pc8 0h +5>|EM8.otu9/ApM>6AL#kwX+L@Z#2_[WlByKgT5{$QQA*f-2<qTr]IT*ORS}$s.f i{n>Fڙ;ӺXK;~W7ķī ^JcӹYx.ҭG~u\[a5aEVy g@ZE.sRW;)xvjчn +T׬T^,?)VW^p4<3JYlP U}ax@~DL D_*NJ}|{]6].J;I>2;Ol$o;AnkxQ_觵\< Z3gc=@Rk!~ +EV<@O.I\cR՟ֱm*^$<1|JJq򄧂_-e&ɣ_= &mr/Np{87>KQUQCaOxudYCo%\`;EmK˙[Ɵ|@cOh=h+G%"Z 8 +"1I2]P$1wQ'.WkC!nmTk_}0k/]0Y|HvG{]w$r)78Qܮ +,go}ƛg/ԯ}\zkC,374I3icObD̅"Xgxendstream endobj -559 0 obj << +553 0 obj << /Type /Page -/Contents 560 0 R -/Resources 558 0 R +/Contents 554 0 R +/Resources 552 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 565 0 R ->> endobj -561 0 obj << -/D [559 0 R /XYZ 74.4095 793.4011 null] +/Parent 537 0 R >> endobj -46 0 obj << -/D [559 0 R /XYZ 74.4095 676.2957 null] +555 0 obj << +/D [553 0 R /XYZ 74.4095 793.4011 null] >> endobj -558 0 obj << -/Font << /F61 246 0 R /F33 209 0 R /F26 198 0 R /F28 201 0 R /F66 564 0 R >> +552 0 obj << +/Font << /F61 258 0 R /F35 221 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R /F71 561 0 R >> /ProcSet [ /PDF /Text ] >> endobj -568 0 obj << -/Length 2523 +564 0 obj << +/Length 2391 /Filter /FlateDecode >> stream -xڭZݏ۸߿6x@$޵)dkV]I Hʴlk7#o>92P&$5IcNVcy$'1$#Fk9piP-=-g O)'DQ:}ok7q[lfNenw?|7VLk2)D*NΈYS* **' %d -Iwtҟo#z?k9*Fɤܳ)K,]lh|Q=cchPA -3/D[:U|kUmOqG@=SP!kCO)p:߄ö*sNM -ƾ>4v)⎉^HbcH(e*W0(JI`PK(UXwvѰcTz.% \!Syyґb4ivnt=nt9x SA~81,$TO C^GQT]C:Rɥ:+q$LuNb -ZsϝHMRP1 -"(0I({2<ҡ5&'1]Y:xOEUlbG0 1GɦP$eŹ2cRǝDlf[wX ptc#9Ԫ!]on!_;8 ]ꡄ$9e]W"LIzr:^ީ5nSGBC԰Ŵlk|vOc˹~^UN]0UͶ,x~yU7h#o>:zcbfғg7eDK(km9I |T:}̧+X -M" w)x}"CLq9,s -$<5x:ʲ3 wJ~]m! DL R"8o՛a09Mx'äAMY6^*T!i3JҮOz`&f忚qͻ ,|g]Hl梼Pj)7:-3$Hn%>>anYJO-},<(k-}`D#xG΁mK7޺_[U խQ!1~J>"`79v {;`((gH PJW xPz5 GJ$њSpv6.KT" ,'zfS 4ѦP6u-tTUT? Ѕ0<dᢞARnm] A^vfRmixEx3&p^~M/:se:t&]3͇B\=s -f]!T!ǒѺmjˡ"}tcWj w+n |( -܌ -=}jCB}v%F - wnQ]q泵`hL*5/"3ʃ="ş?oendstream +xڭZs6_Gi&_MzuҳۛiJ%#㿾X(vM'5,~bm> ?>Sagq*al gXm>|,aiLI#ӻog5"q2l0ojw EVO7ﺃYEeR*1x΢(ԞJ:T d2M4H?ݸGOS1HأNLqs{S0dthcܰr,Bi: ,*Qj.5lP:`˔Z_#K:/!W^&׀~!yV/z; +x()8#3MmN`YMG. b׹`xN%`R^lu")="*,[ۯx׃XTM{8pD92Jc Yо[^Wcu~OEf1}S!/YY4:?զq8;pͪVul'|4J8pɫ9[hpe|(zBE̓`-7i17OpZP\v( CpMzH<QP0X^`C)#*{:A oTb7;+v8$-ƒ-1*Vcȳ@50N.펮#C5-8N4{*?'1q.#zN!K"ˡR'L GGk@۪@}JR&wyb*N \t!`5/OcYr_{MPn~<ަ2~F#9'bz~DA vȚ +mO`T_1: mBt{C[sGjn)|qkk׿7 .xđ z[>eۂEW}IJEL?f G ~/ΔmWStny 1ǔ {D!yi2CeŤ5(0DԈASj'o:W9o2BΤEx :Oυlk#)h(weF9bA2*>8'jӈi`c֮LB߮zؖ1rO`(OәLK_nK3 Igr,y'Hp3gJ HȱǨI S2ZU$lg.R=%`S0 +#>&LnC'9W r"ƨA0mA%|B0Y5a_ځ=yGڐ"G| uvE7%draݎkј蹺26WDEC)"XK]?DCw?$hvfoq3EEe#)&4 BdxOl&Nendstream endobj -567 0 obj << +563 0 obj << /Type /Page -/Contents 568 0 R -/Resources 566 0 R +/Contents 564 0 R +/Resources 562 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 565 0 R -/Annots [ 576 0 R 577 0 R ] +/Parent 537 0 R +/Annots [ 569 0 R 570 0 R ] >> endobj -576 0 obj << +569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [305.3601 171.4698 324.8009 182.052] +/Rect [305.3601 407.839 324.8009 418.4213] /Subtype /Link /A << /S /GoTo /D (figure.2.14) >> >> endobj -577 0 obj << +570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [219.4036 153.5425 233.8592 164.1248] +/Rect [219.4036 389.9118 233.8592 400.494] /Subtype /Link /A << /S /GoTo /D (table.2.3) >> >> endobj -569 0 obj << -/D [567 0 R /XYZ 74.4095 793.4011 null] +565 0 obj << +/D [563 0 R /XYZ 74.4095 793.4011 null] >> endobj -374 0 obj << -/D [567 0 R /XYZ 287.609 530.5247 null] +386 0 obj << +/D [563 0 R /XYZ 287.609 530.5247 null] >> endobj 50 0 obj << -/D [567 0 R /XYZ 74.4095 283.1018 null] +/D [563 0 R /XYZ 74.4095 489.9861 null] >> endobj -566 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F71 572 0 R /F33 209 0 R /F66 564 0 R /F72 575 0 R >> +54 0 obj << +/D [563 0 R /XYZ 74.4095 346.7481 null] +>> endobj +562 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F72 568 0 R >> /ProcSet [ /PDF /Text ] >> endobj -581 0 obj << -/Length 1742 +573 0 obj << +/Length 497 /Filter /FlateDecode >> stream -xڭ]o6=B2")R% CrZ,ٕͯTdYI:l(Мy? K\i."ZjrЮ$%&iNr0|F߶7YGy`OF㖀dvw2IݒF1g"~k3 #Iʤ8JM*?k1}sKJHu\/.%+qp^` ZoѤHÕۘUek>Y<BG MMٗ?+wA5I0ѩ8Ĭ"Uf2c%<UGa;3pl@Blr:HDJS@f]B=׿FD:{ -_V !4DXcW!I&Z060ᡗD 0ik/,Wb0@9ix G19|>)Vzu_#f &#Ը:B6X1#i׭M3kCL <<%" '1\s/#Ć$i`?,ףA'r&"t!ʴ%J{Gl[>M|d;]_IY@jiSb7$Gaw|.OgfgH w;Fۅ3?9@X5`[zp`hГ/ Ks)#Ҳ>[gtՓ tgQ^h̿rp,u1 fYx5uAUؚbPaXV*s 4]؍ h2#E+be,NwR7b}sa`|W47endstream +xڍSMo0h>6mHE4=CYVU}Im{h8DD&nGb?ζrᓤI<)5I'Zh4c@ 퍏K)A{*ZX0 )Xr.1R%XBmohQU %X -ABc0,0%;"t][2L@}۾\Fa!xDŦkOl,D1KL7F\kj۴ͪf2ptgx1w>![^\6ƙ pM,i0%!:Q5SQjqI1"P.9; SV[4:=)HqIQ]4h[AR8Mu楒8bl }|mk7u<L&]=]L3,,Ȃ +Lszu_QOdendstream endobj +572 0 obj << +/Type /Page +/Contents 573 0 R +/Resources 571 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 575 0 R +>> endobj +574 0 obj << +/D [572 0 R /XYZ 74.4095 793.4011 null] +>> endobj +58 0 obj << +/D [572 0 R /XYZ 74.4095 771.7323 null] +>> endobj +571 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj 580 0 obj << +/Length 1312 +/Filter /FlateDecode +>> +stream +xڽXYoF~ׯ`(}i"iQ@YkikrD*;{Hzp۹vvf(aLqı2 Bg+X{Yz>y$FFJo3 bSkq[NgT霢L`ȸr),ny~v)#-%}KąTٌ$V} _AQBeF0RHL aR_(s \}roUb^ݔ|[CbSbp"J<4"Xl3Zxȗɧ8[$q#b 6j0̐SN&. 1KdڢxXF`#˾ViȠk YT0!8iջ ٛ- ,pAɿyFAcb*6bFbJe(% VWCmKro•}aRM"Jg}%cSZSyc7Dݐp;-q##P_x A&@" HZEF#i ZwH|PCz`u-q_r.+zm Eot1v\q)sI@|"sK +nQ>D?ʬendstream +endobj +579 0 obj << /Type /Page -/Contents 581 0 R -/Resources 579 0 R +/Contents 580 0 R +/Resources 578 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 565 0 R -/Annots [ 583 0 R ] +/Parent 575 0 R +/Annots [ 582 0 R 583 0 R ] >> endobj -578 0 obj << +576 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -3162,78 +3116,28 @@ c )٫ҫ99d|q;X47UXT6{Uz4'@P+OzE~:~zuHK aKq_!jVk~lV9Gb%Ѧ˱xEeWWKsr u{1Gwk{WO4̒<_z!ۘ޿XWo6̯{sȅbtMf,GljoN iwI#uXU=۵P /KEm9'Bѻchv}8bYYB&*WaI*rBW6{Uz7'=xzSϻ$Z,ƪ|e~\tHs"gg{ǧfyXtljoNCP fşܟgzH,,WOXzS(I%g?6E0է̓yh,`E",r!Wa9>NljoN2}I(Ҍ[32ĨY>]jHɈm8csN^}ߑ"r^X ˥p٫ҫ9$Ⱦ$ 9f,޲cOv.: z|o6n;-B<b ]TEnijjoN9 /IC7;?JT%-姗mшG@xÂ}u."` ,r!OFrM^^͉ŝԳ/ICnjE>GBB^mA"tF`/[l|Ypz)Ι٫ҫ9={SϾ$ QA3F! &hjEo 7erX^|Q܎Kco[/BK]\dOhjjoNty/I!Ԍ[?dJd޲: "jw-Õ眰7sy׫.kqɅd+UޜhY7Kpl⭋^W=~eSJ4,+Q9fv^>70um"M^^͉^7K`f,r\<*z)[6V ~ -aJ9sl1bK\raXR\d7bjjoNل(%iؚ\^{COkcPγшww &Kc^ټcm#\k)Г*L^^IDHFؗaeb' rܺ!^4,>_6.z\)U|]2m\raNͥXBJ.SWW9b#4l XҫP) ;[#%Y;5`VD H-&= zkE{(mUђQ|毞VYe%yBK.eVUdNb%dŁ=#( ʵ΁e~͢W6hX4`VW6_ Yri7L^^IdVm$dՁ='#7^ڠaƃmW6XW}M,V\"r6E٫iJ2'ۉ]@H,ɪWqҫ\4 f+R4,x!O iuݏ"8iJ2'ۉ}H,ɪl+D8UuCSg5^ڠat+]i=>֣p(WmB=-#WKMWW9^ &NbIV038%:6!>| AHWwѧڍ$ai0U PĒK-SUdNH= X*6 +m`A"ש -F xT>msi7 XrՆXru rN5^^IdJ,*w^:ZzðI\IaqFr!*:$1MbJb6S%TϿV.LMWW9:MbIV%7`^%Z$J{_;A?:LܲklSCSg,p`vWĒ{n6٫+ɜl-6XU[DkuӖdc%^mߕg{@֦ eEiJ5'0B*AbIVm+{vSr PzdȎUտ r^_e{[UjNVUĒ{UXyi\rXk(jEdcU=zoL9,[\^٫+՜nrYbIVE$r{Zmw -~tBٱy¥d{j\1fJTsm]%H,*"OyCV,r|zyBJm w*eiJ5'5_q&$"*UXY@1k;0}Pz؛%XV=zoZ0X١\=Zlk*R _gH|KRE?)'ҫY,zP`գW6O(oC w֞V.ۃsMWW9ŰВ,eL?Ax蕷Dr\z5kEC"Yտ1Ԉ6MK\j*R oВ,(JxEzGMfmOwWOX ^t簄Z_!F7{Uz>ǬhZBK,K$*"C6^ `3|_gmS[#eC7x`^^1+Fdi@)F$4x6OVzՠ [,ju>uxy׫%S̻5϶aJ9,z{^^意di@)F$4XT-Y鍦W6l\S7loyTw,h=\Ȉz}WWs$#,4QĒ GR􊼗۱x!^o6QݕfY,zH`^^ mJLhI"yQѐ{ U L~.T.a"w<7P^^ Se`r )b!ZԆ-CaL+eqb` c9fJ愉n d%%jҐ>Uf{kQVX_Ør!E8/!W,Œ珔 aTWWsCE-}S˥K%)mC9mXaEk5 h $䪚K?R.NUj/U$$9o9,Z WGi`m5 +u-c u,t=\ fJndWdMrXr!D چ^sڰrܘѡc0f!Scq6 +)t=ߥ٫ҫ9pG1[2%W1Nr1LXkNVXj\ ra_IUex \*tG -Bbv4D~چ^sڰr\U+*'WіO=[`nAfJTzP5_tJ/ҒBCWʹ^䁴tǫ኱W6Zq2o} Ѐre!ȕ|~*zfJ攋!=,4`{o k*ڛ^ hEߞ -˜AxP%cW,Qr7=O=\^^9)fk3-=,ɔOdkV{ӫGU[Mګr -]Dyȯ=z4*,*rSj3-=,%W 6ק{0}ҫY\xtXu-r͌]D\\Y5{Uze2limÒLMXjƶ*Dm{zWxtXhUɜZaI1]GKŔ{z-B<:!ZmXnr!姞?M.p麰kdNـpB$ȒLӫN[+־:SLk6v<:M^ +W+;59;욽*2S܀xX TDl"  ?)z-jLosX \fbe3M.M욽*2SC<,=iL?JC;r1ns赨 tXK+yTrv^&lfJL14K2u 1* 6g{'.9ZW1*oZɏׂGU\˛\[ȢlP]WW&sJK`%,s9s[n̘1^x!|NŒ3࿎1 8)1:=7{kۡBXD b:^Sm0PHX5 7QܚeNZoو+bgoE^GyeM<9s`?S~5k 'GM6E-Kwǜ`_yx`/ NT\> .W-G.ܳCpX_O5{k†WW2eʔLy____|} `~k;cNw-yxJkZv &ژj?hWHcgK|\.p;p\%8(X_M^k׮1cƔ^KOgJ?a:{zzbS{l ?Եr|+R]@%0}kD#{>>k;͕ &|akm債vM`aqrzѣGޥ‡뮻ZzMƼyauka$K?X3 jDmfv_n,?_* ~h۵c׍Ά^-d_WX1v={رkI1+?Ś4e K/~Sgo`Ay<31^=76ÚuB4г\l;|Ö W'|>|0|ò,O?1[vRo%Iߊ$JS@1stIcs~EXa 7nZbEr(ȪQ+Pe_g WQyNÚ?>lҵò,O*%OX -΃Ka~G\}yW^K)%XPJ(lV ~ʕ+ < M,\oI`⋻wN>Pimn6m-+z'UrI+zuɀ%ٳg]64;w.i4!UJk֭̓}&KMWHpS͛e P@sɦ6 auwweQ,?+VHCr6@p̾y9d'VȟԾ9'UjRtU:tP#endstream -endobj -583 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [232.8089 189.397 252.2497 199.9793] -/Subtype /Link -/A << /S /GoTo /D (figure.2.15) >> ->> endobj -582 0 obj << -/D [580 0 R /XYZ 74.4095 793.4011 null] ->> endobj -54 0 obj << -/D [580 0 R /XYZ 74.4095 771.7323 null] ->> endobj -58 0 obj << -/D [580 0 R /XYZ 74.4095 601.2059 null] ->> endobj -62 0 obj << -/D [580 0 R /XYZ 74.4095 486.8288 null] ->> endobj -317 0 obj << -/D [580 0 R /XYZ 282.7178 237.1569 null] ->> endobj -579 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/XObject << /Im19 578 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -588 0 obj << -/Length 2150 -/Filter /FlateDecode ->> -stream -xڭYYoF~`(Mr<$He%[ER`b]5" -XH"i$`,z_h {? ]շk$ZFLZ$9Yiܯ*>$՚J)5J'њ3uHJuDdBFt_e<_q-2(4ZkI{d{CDY*HR 9MK"(,SD'JGJ E\T?SE-!"#)HUvTAz,h.f3?x{bD@x 'LLؘr[NfZ37S$MdAz,әd c,HNz>ٸP]s}` SD}TY 5qo38$O 5&綿``MS/xa<-PCOuW`} Pb|o+F bs~X8bzXGE̥ض,O9k냠f`%׶PfAD53rԴsָ࿔fE]6 ' i;ɓ4ޘmY:-U@r8ɨӵ^.l9 dgXyuآr!O1nswcۖsd/\M2p\>XӁ+yn = -ǩl㡲P,vHHl=,&nu3@eIBNrFa߀ČЀ˹?j&vxe* /p8Rg~7h076ǵU& :hX!~FPuZ=:%f$T_TG<#gJ"E%s lX7,MY}.H Pk9߁1Иۼ=g3|zu*/}CN5F/pF#搬 p렚e;EMS vA\PwAzBNdˁ:E܈yuKj%Tmu1%v&,ha ;֏{nL^B0XZ 'c!#F+KZs{;MSM/Sxhb=\]>/X,a<Mij)a \&q *ڽ[{naãaKë[ q)/]8K`<@0aO_ε -hzB{?*ӧ-xyj|KzS+`LZhgLZ g -Ot)hxn?_6.z\)U|]2m\raNͥXBJ.SWW9b#4l XҫP) ;[#%Y;5`VD H-&= zkE{(mUђQ|毞VYe%yBK.eVUdNb%dŁ=#( ʵ΁e~͢W6hX4`VW6_ Yri7L^^IdVm$dՁ='#7^ڠaƃmW6XW}M,V\"r6E٫iJ2'ۉ]@H,ɪWqҫ\4 f+R4,x!O iuݏ"8iJ2'ۉ}H,ɪl+D8UuCSg5^ڠat+]i=>֣p(WmB=-#WKMWW9^ &NbIV038%:6!>| AHWwѧڍ$ai0U PĒK-SUdNH= X*6 +m`A"ש +F xT>msi7 XrՆXru rN5^^IdJ,*w^:ZzðI\IaqFr!*:$1MbJb6S%TϿV.LMWW9:MbIV%7`^%Z$J{_;A?:LܲklSCSg,p`vWĒ{n6٫+ɜl-6XU[DkuӖdc%^mߕg{@֦ eEiJ5'0B*AbIVm+{vSr PzdȎUտ r^_e{[UjNVUĒ{UXyi\rXk(jEdcU=zoL9,[\^٫+՜nrYbIVE$r{Zmw +~tBٱy¥d{j\1fJTsm]%H,*"OyCV,r|zyBJm w*eiJ5'5_q&$"*UXY@1k;0}Pz؛%XV=zoZ0X١\=Zlk*R _gH|KRE?)'ҫY,zP`գW6O(oC w֞V.ۃsMWW9ŰВ,eL?Ax蕷Dr\z5kEC"Yտ1Ԉ6MK\j*R oВ,(JxEzGMfmOwWOX ^t簄Z_!F7{Uz>ǬhZBK,K$*"C6^ `3|_gmS[#eC7x`^^1+Fdi@)F$4x6OVzՠ [,ju>uxy׫%S̻5϶aJ9,z{^^意di@)F$4XT-Y鍦W6l\S7loyTw,h=\Ȉz}WWs$#,4QĒ GR􊼗۱x!^o6QݕfY,zH`^^ mJLhI"yQѐ{ U L~.T.a"w<7P^^ Se`r )b!ZԆ-CaL+eqb` c9fJ愉n d%%jҐ>Uf{kQVX_Ør!E8/!W,Œ珔 aTWWsCE-}S˥K%)mC9mXaEk5 h $䪚K?R.NUj/U$$9o9,Z WGi`m5 +u-c u,t=\ fJndWdMrXr!D چ^sڰrܘѡc0f!Scq6 +)t=ߥ٫ҫ9pG1[2%W1Nr1LXkNVXj\ ra_IUex \*tG +Bbv4D~چ^sڰr\U+*'WіO=[`nAfJTzP5_tJ/ҒBCWʹ^䁴tǫ኱W6Zq2o} Ѐre!ȕ|~*zfJ攋!=,4`{o k*ڛ^ hEߞ +˜AxP%cW,Qr7=O=\^^9)fk3-=,ɔOdkV{ӫGU[Mګr +]Dyȯ=z4*,*rSj3-=,%W 6ק{0}ҫY\xtXu-r͌]D\\Y5{Uze2limÒLMXjƶ*Dm{zWxtXhUɜZaI1]GKŔ{z-B<:!ZmXnr!姞?M.p麰kdNـpB$ȒLӫN[+־:SLk6v<:M^ +W+;59;욽*2S܀xX TDl"  ?)z-jLosX \fbe3M.M욽*2SC<,=iL?JC;r1ns赨 tXK+yTrv^&lfJL14K2u 1* 6g{'.9ZW1*oZɏׂGU\˛\[ȢlP]WW&sJK`%,s9s[n̘1^x!|NŒ3࿎1 8)1:=7{kۡBXD b:^Sm0PHX5 7QܚeNZoو+bgoE^GyeM<9s`?S~5k 'GM6E-Kwǜ`_yx`/ NT\> .W-G.ܳCpX_O5{k†WW2eʔLy____|} `~k;cNw-yxJkZv &ژj?hWHcgK|\.p;p\%8(X_M^k׮1cƔ^KOgJ?a:{zzbS{l ?Եr|+R]@%0}kD#{>>k;͕ &|akm債vM`aqrzѣGޥ‡뮻ZzMƼyauka$K?X3 jDmfv_n,?_* ~h۵c׍Ά^-d_WX1v={رkI1+?Ś4e K/~Sgo`Ay<31^=76ÚuB4г\l;|Ö W'|>|0|ò,O?1[vRo%Iߊ$JS@1stIcs~EXa 7nZbEr(ȪQ+Pe_g WQyNÚ?>lҵò,O*%OX +΃Ka~G\}yW^K)%XPJ(lV ~ʕ+ < M,\oI`⋻wN>Pimn6m-+z'UrI+zuɀ%ٳg]64;w.i4!UJk֭̓}&KMWHpS͛e P@sɦ6 auwweQ,?+VHCr6@p̾y9d'VȟԾ9'UjRtU:tP#endstream endobj -587 0 obj << -/Type /Page -/Contents 588 0 R -/Resources 586 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 565 0 R -/Annots [ 590 0 R 591 0 R 592 0 R ] ->> endobj -584 0 obj << +577 0 obj << /Type /XObject /Subtype /Image /Width 586 @@ -3774,61 +3678,111 @@ Y VR`EN @8R****zeeeذ[@FEOt"'i<12 BJ[qrdffUH"(EvIt;`iHtCC܉'HBQa!'5q:߸~:RE2i<"Q`Ɠ.Ƣ'Fp6f&[nȐo󩱤 Pe:,]3R`*$BiBaYՅ ^ΝjDVWW'A*,kˤ[X,xbE<gR BdLh|||aa*cMJJ lS`-*//ONNF/ M@nȆCdCqJKK ^@JeHWKNNעy!Rɲ-xbRfnDӵf'Ff2dT =U Ǔ^XABendstream endobj -590 0 obj << +582 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [232.8089 485.2654 252.2497 495.8476] +/Subtype /Link +/A << /S /GoTo /D (figure.2.15) >> +>> endobj +583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 640.2116 87.8688 650.7939] +/Rect [73.4132 413.5564 87.8688 424.1387] /Subtype /Link /A << /S /GoTo /D (table.2.4) >> >> endobj -591 0 obj << +581 0 obj << +/D [579 0 R /XYZ 74.4095 793.4011 null] +>> endobj +62 0 obj << +/D [579 0 R /XYZ 74.4095 771.7323 null] +>> endobj +330 0 obj << +/D [579 0 R /XYZ 282.7178 535.1877 null] +>> endobj +331 0 obj << +/D [579 0 R /XYZ 266.4172 185.9366 null] +>> endobj +578 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im18 576 0 R /Im19 577 0 R >> +/ProcSet [ /PDF /Text /ImageC ] +>> endobj +586 0 obj << +/Length 2117 +/Filter /FlateDecode +>> +stream +xڽZYoF~Xd>vKX)>B(" D8s{.& )V&$<%qoa7&!I‚ cQ<R<%~V,7;HԆƜ4Fi&H 1a[Mjs(C ӱJOHH%^Q @x?h +n d<݉eNA3!A6 F,ы1bDďwe^q8KT8Jy_xL 3äC`scpu76\'3$ /f;>2\"ץ uK D>$(q;0ATE ѓy %!;oLqE9[<`5+_C(.'QPPk“Q.#F i\a)Owڒ&pX& x^҉EA\a˘rppc҄$@FA* :Yw|jqMhpBI& gLt\WLcWpȵ7sp|0OT=gOsID].DJ͚($&Jb;6y_i򔂫F) r֗y-KnW06xCLE M$Vǔ`$-z"/TUl9|';_܇ < wi1Cd^+z,q7E߷l$ Iz2/KRpf6Y&z~KjIe^2J gq%c-3(}y|]7| ]_D[J xo$=_v3}7X*Ϙݞ +ﻻi1J0 + 4RE8I"aq޺XF +DF=:f,G䌮>e\MSa.Y}#Qq%!5*e]9ǢpW(qAwBANnh?UVf$ǹX1240%޻Y8Vg.D+cRkcuiG +8M?|:yQaʰ3-]u94ə+*5]Yڙoi_PߺWt=%KK+UZrⵑbRۅQ Ϡ|k_%AZssy$(j# LOivzptT 겱pKoCxEv=$Jˌs;NjMi,rc`,IHMX K_sC⒄u܂ nhLjARy`6sNzM2ҧ)L&w#{3Fvu@L+H'G[oAySۉ͡0V[7Pmg^& pӔ &DqU#B@//Ƞ~s=;mFDNK;4!vuXmth2Z]bELj'/X;z;tZʉOыi1*I*O$nMցa?y#] 23-܎6 s@'wt! MFʮARS>:vdM9 R7o.&@*rGv6ܞ1"ZG[=ḣ}[=w@]b,`5yqaF4'Lxm^d/Ôv^ȀCF {Gv{6M3D U_Q > endobj +588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [224.0423 189.397 238.4979 199.9793] +/Rect [224.0423 426.8697 238.4979 437.4519] /Subtype /Link /A << /S /GoTo /D (table.2.5) >> >> endobj -592 0 obj << +589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [163.3983 135.6153 182.8391 146.1976] +/Rect [163.3983 373.088 182.8391 383.6702] /Subtype /Link /A << /S /GoTo /D (figure.2.16) >> >> endobj -589 0 obj << -/D [587 0 R /XYZ 74.4095 793.4011 null] +587 0 obj << +/D [585 0 R /XYZ 74.4095 793.4011 null] >> endobj -375 0 obj << -/D [587 0 R /XYZ 249.1572 703.8744 null] +387 0 obj << +/D [585 0 R /XYZ 249.1572 703.8744 null] >> endobj -318 0 obj << -/D [587 0 R /XYZ 266.4172 263.4097 null] +388 0 obj << +/D [585 0 R /XYZ 232.8565 592.9685 null] >> endobj -586 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/XObject << /Im20 584 0 R >> -/ProcSet [ /PDF /Text /ImageC ] +584 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -595 0 obj << -/Length 976 +593 0 obj << +/Length 1797 /Filter /FlateDecode >> stream -xڽWMH +hԭ[M%pJ6Oơ\1mlL+E[~z' @8# -$\| fJ,ٻ/lhv,f &IA x|~|rRMmn9PIo->1VNK -T`$oE*_x`GIj;nQqX`yO12q -҃+ Vj^1h;@:zk[GS^웨Hv !E86D:' i`ȟ>B]>i4pFM)9FkJ0'nb.v<65M O% ]pùFȴ]aJsT<ոSD`HМ2qcJ}aKX/J6eŕ}|հnR_$tE %gZt0/iA()h1l0j%8]wh#%qy(j:L*J(K0i5z\\fEv$ jn\һܱm5_e˼g,Qɾ0û/g ytnJA:)6N MɐgAɐx44`8GY#xeX'KGhuJ{YVr6VE<'Czqxhx*Јh@Kp6 . YW)"CE [ 9w@U<#G\0:WR`SS0-wZ u)~W6ڙJ:g~N+qa:haeSAeՒK *( -4,ZU|xɌǧ&4EGI4brok;L\9wMY$bկ"exk$wTsv~X| -6G :FOsE/I 2ut?D_(86"Q!|3'mɛ$)yr{PnNo_fuT)ET`]Sє bD|>(%;4* +j|ˋeYTB6(aIDbf)>ЩSCCkr!!ݭR "*#)D2;>;nj"/.)]^Tjİqjؐ c(rjtB<=qCe12(7a z RDEBc0F$QpA*|Y Z#5H1!øÁ—4?&E"0x +{ +=Pb8 $ L_X'ETcW1 +0|:̨v"J,$l|:>h(L1saaQ`Oc\<}U-sW\xZ&!"`7*!l KH)쑌+HBI')MHJ% *w2C +1#buJ; #Ay3۴3B :$$%=zXljouAʩ0b]ZfSN'( s*?ˌDL}VhF}ɠ%1\` 3z6lD',"<ްl7i־\H ֝eU {Ìv>:. Ɍ҈`#)2xiD¢CRY욝7IɻbؗnAt QۙZNtVĜxb^rCa{i` +H+sNlGf6^O21tf& f `E[2׭YUWʖʵXbjPӛ\73.-Z+k> +u"_;wyU竺s f0啯9m F x+V \G4+WYpl4E%LMo{r;!3y-ZU9%tQڦέ~ybApQl~PSwgoCtޝie@s2dfi >Wl#ĴISv~ۚ\3p@P^Z͕]W]M~r6,(w ~>j(LvW h tԷ. +mr"6]ɢȫ|>؎uHO Wv)9wpoˇ} h[tmz[CVgZjC(I^k%}ڗC1O0ZhJ@endstream endobj -594 0 obj << +592 0 obj << /Type /Page -/Contents 595 0 R -/Resources 593 0 R +/Contents 593 0 R +/Resources 591 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 565 0 R +/Parent 575 0 R >> endobj -585 0 obj << +590 0 obj << /Type /XObject /Subtype /Image /Width 621 @@ -4101,95 +4055,89 @@ I 痗3ꐓCr* iqA~LM/7npH&9T'O0#8T%'n̡)Lq4+hGGGFFƑ#G9$(s+;;Jj Cii)szb=9T=7r1E(.Ξ=+m]]2:ePĞju[P)̡3s7o> endobj -376 0 obj << -/D [594 0 R /XYZ 232.8565 612.8729 null] +389 0 obj << +/D [592 0 R /XYZ 249.6817 544.9705 null] >> endobj -319 0 obj << -/D [594 0 R /XYZ 283.2423 231.3968 null] +66 0 obj << +/D [592 0 R /XYZ 74.4095 507.7865 null] >> endobj -593 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/XObject << /Im21 585 0 R >> +332 0 obj << +/D [592 0 R /XYZ 283.2423 270.3205 null] +>> endobj +591 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im20 590 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -600 0 obj << -/Length 2703 +597 0 obj << +/Length 754 /Filter /FlateDecode >> stream -xڽZߓ۶~B %~S'343xsR<_],HE9-mߌŇ |_E$48_lbcmy]7X?}c2gZ<,rLwJ?-Zr] -Z$YO8xxZOZ$#> R)mZpfMcF'k`- jO?'-~z?E¸sbqx"e)?|jL`>!YbnL@YhU,qf2&50i iL8Y?$:9?THDŽ -:G@ssr-^o^a4i'01~}ʋ]UC:R8(af#9SS%|;>| )h|:':ebR3"lᣇ aa zdbÂ읒j>|Z.b|_ DϚcSlpNa5#i-6^N<]3`F%$#` F4`HsB%!(FR#8xR"~.08^gHPʤJ+W/:>^k0-ԍCu+׊iV\ ̛D%z<VkmeCBá: u>+aRs; - -|J$sN- _3%̥Ҍ.}Eimxz_~S rm4͋nVRz}G],+c4XꚟVv IOW=hCT,+TbX rvw+ *, tx ?TToEe?7A(v:…vP -j^N=C&+14uЍ ~l`9+BÅ`a'owb@/7ŏoQsQz\9hAI$0ih3Ns:: _릌+R005R҆CP#%؏[|QoE#mlx;+}-4p(쨰CאwRM*>Ns, 5 J%\?2Pr)WA QU3b- 6#aVLΊ-0nvdb2L5(5hJZ)>j@? gBrTN9ח~"vyPU>è;>J}S/u/mX3~{(G4(R g4R_Xq+888aA Խi:Pi]s#eW@!*s+$NDA.bHT[aE~]~/~HPpe6Y{ ){}n]!]7t3ܲ8-R_8+)=9n7%^jǜ8;0PyAƋh@l^x;7# =~6xÞBs?6{W y=V8)[IMtKy]Ø<ա֫ ޟ>Bl(qLy|ʼSب^ck5\_1v6[(pveiB l7TU]-@,Qm-imT q`_S?Gf+:4;9ɑiIgNkA`iHLtCRPl3S*q-U]'=|/)1jQ>?,z3s{` ' 9iMuCẛ7ǣ^N-C?k#I2O$% )e |GE!*@pBeR[;(}Ck,CrT -=plT-EJt[\MxWsXM[(n0kY/#g Qmn~>1 cendstream +xڍUMo0Wp)6^fK8HcClx{!D#shwQs_7 阜γ7>Ke(G1++M$*)JRq|3ฯ$6_/>mƂbIIc9eilFsZȑR,[]oMRF3G@7=tn=m;?њ{Wڹ%Icݼuj[7YY|$Dĺm8/}Cߚz_ʈ1ʩ+dq}.X΋bbA2 KǬ\K4J9g(`&;)us,]ጣT5^[⧌ϑq9W|!ۮ!Q,h}>4Φ +S9rp)oOr28"k"Q):rFBLoL`8;p$ڲu5fB!`FP]NED,ރ.voџ +R +@\yS7 B`2v ' ǿ +fpx;m}J(=U4=0 +x+ЧK/ֿK&cgW{Ҙ#nBV׵^VdY@y.WT΋Gw "p$7Ɣ^[Jd"yRiJU:/L_AM`GK&撞%@sPIP9A0:Sendstream endobj -599 0 obj << +596 0 obj << /Type /Page -/Contents 600 0 R -/Resources 598 0 R +/Contents 597 0 R +/Resources 595 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 565 0 R -/Annots [ 602 0 R 603 0 R ] +/Parent 575 0 R +/Annots [ 599 0 R 600 0 R ] >> endobj -602 0 obj << +599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [313.8692 366.4959 333.31 377.0781] +/Rect [499.9291 756.7859 519.3699 767.3682] /Subtype /Link /A << /S /GoTo /D (figure.2.17) >> >> endobj -603 0 obj << +600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [129.6406 312.7142 144.0961 323.2964] +/Rect [305.6841 703.0042 320.1396 713.5865] /Subtype /Link /A << /S /GoTo /D (table.2.6) >> >> endobj -601 0 obj << -/D [599 0 R /XYZ 74.4095 793.4011 null] ->> endobj -377 0 obj << -/D [599 0 R /XYZ 249.6817 544.9705 null] ->> endobj -66 0 obj << -/D [599 0 R /XYZ 74.4095 507.5561 null] ->> endobj -70 0 obj << -/D [599 0 R /XYZ 74.4095 296.0028 null] ->> endobj 598 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F66 564 0 R >> +/D [596 0 R /XYZ 74.4095 793.4011 null] +>> endobj +595 0 obj << +/Font << /F61 258 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -606 0 obj << -/Length 2498 +604 0 obj << +/Length 2411 /Filter /FlateDecode >> stream -xڵZr}W,s'u֩rm"R(  D_VY3}􀬠FI*0`_]b~l(;K³\ϷW>hVXⴖc#BQ)}ej[.3n섓LQ:.7M2:-fOWoۉjϳRJMҦqF&NRF-fgv˯xџ9NjwpX{34‹aJ_ Qp`VMu^"ɤa(-!\G>8/נs[$lQ;Y<+܎rAʻrǜ>p>32'J.R)Zrak?!î^$2KG$hgJ0f 7Ov^, Z4PC60Y~SV ルB̤B#n QZ\Hp % aoSMutSy$,}߹$0YVecl~<7FN{E:RKz%y+J4x+A\+',L^Yx+7HSxH%X;.L1X_AsA ;uOnA37Hh(lq..ts6\)]C l=:!i<#yA&.ga-%C٩pHŘ3PЈ\oa 4yRkpo ]\2#]&tO1l C<ݬ7HޕD@oʥ~}Q[}.d¸Bh ^͢HJF5i+0~DGSἾl0 A"8QI Ȕ -iF +6ǻU}!K -<ҼNؔ¦uLJq*Kq p LZhӹjUGXoS`' LdTOPƄUru8o1ח -LtIbCm!B؟,e]`˭zd`ᖸȹЅ#AFXRNϳ͢mhcA 6@bmǦܾ" W^ E{<_}y0s/2}DڔM AA9${|, -3/R2`m:І6b8ȭ.o}Br\&]3=.8QR۷U36BEfrݜt0u|k x[p/ -7B Y9(rprLR<]V]\!,SU:>r9D׉.61.oF}UI?Ȳˤ=ұ^pCt@Dbn֫k/C$; w>ב8|bFQ5](GLIEX"Zg9;$jX4 <Ãf g^|Y0>v^%VØXk\ a܊7*/G/=dQ8 X|haSʎHm|܄Ao(^iR2 痮Zm:yos0}H/\ AwfK#=@!D۷bJRUȌ5;_6a?XÝg %Bu 7S`OLߔ>ni ng~uYL-lk-ŠHapj-xNKK8 2_ ԯ zy0*<5[/AT)Tg}g4PwaFIԴPӬ?-6" .yb<uU38]*u>z3?!tPob]Y,u'?%0"oʏL³QCqS;YH4qk$ ڐyQSWG ]= - GXסDsms5sXs5{x VΎ^%F\Ui}y,m>+8#YlDO#;Z?ҿzD֐#mY(/ +Y[wءn]Mkp"odfAjLSV`*v~-Z +A>lJP[Xj>T嶙Vhfmft*pe]KzRD^Xޭi[芹LqzGr/fJu9Os7YbngVe}&g%ӱyg$L)Q8)Tϕ1:s-(svL6Fm(ծJBjA2lc\,!]I[pXo>T!:&TYiD&lE?.wuFS|nYK0?k3Ƌ/tU30詳r ++vb2JHj-0Z؀0[E9Q*'xM'Aj:J[+?Ue [x8W`7Qk.ݗUy__]k{hޢDA(IFo7*HI!* +nt!6jg7on1$q^.po`ݖ!3U@iQe\JbR"Oae(8z4,Q:BJ'^\Y +~_Da(\vXgh,&běq +#)\222[qsa +F)Ư+ :1|TJ؄ xK/ZS׆GTuO8!N ߗ] dI18ԉazECx?Xh/WCٍ e2KaniYPCY +|8"~NtlLPhNluMy8)@b W̷ #6PZ|E+\%N*SLZ9TɎaG㯘 &cyR4%rOKf,Gl_/$W(|LFm0yd:GV89RGGwh>O?G"[ӒX bRGB-n2oL%U\ϤW(P6?bIN$k$ ZlF\"a,Q; %Z|al,w]JP1mBUs9,QAٶ- > z 㟺 lpZtw}mr; 髮<OQL1^R0YHHm0qR"!qx*MhmcLLh$IH.>zXRpnU4!y$@ֆ: ɄY7M\TFdEw(z\dkr5<7>=<#&~kI{ZSH Q +цd=LlZ8wG[J鉗)31xNq^Ӫ2 .k^ڷ.FA0nDUF\x}J͕&m-cA9uX)mYCfę#Տ$0\[gD3iL*'ϰ5ϻ5.C?W1+~Bch.xianJ^Y/u+j?CЏi<>$T(4HFscZ!^'^oqntXSѕ$ߋ::)c$1`z؆.#fFīqָ6 |1zOqPGG|<_3C-3z$CƯYXUʣj{h_GqXRiendstream endobj -605 0 obj << +603 0 obj << /Type /Page -/Contents 606 0 R -/Resources 604 0 R +/Contents 604 0 R +/Resources 602 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 617 0 R -/Annots [ 608 0 R 615 0 R 616 0 R ] +/Parent 575 0 R +/Annots [ 606 0 R 613 0 R 614 0 R ] >> endobj -597 0 obj << +601 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -4248,66 +4196,101 @@ G X`X+X`򊼂X`"`X`N`X`aaaaaaaaaX;o3g >~=3/ٳgv>|J/.5-:~M}"c&&&o߾zjiƍ=~__eI$wzOXnu_9OMlH;vLƴ |?z۹she{ŷz5=jݺu:uJ¼yO>-4I*}O"v2p]COO?,W^yEΟ?uVcxR4nOxOX>Ɠ\=ٶmۑ#G2?UV%&j$֮]K.{/k}`*X+;|}2TJ=A2|9Q[X賸,eI1(Ox)%S!)e4fYK]f`a޽v- +ޡJ6Ȑ,d_27dk||OP~z0ızIJDS^bOr<'Y,IV^+R`8ZÚ|db+:JH՞(n.!O8yd|`u׮]|ϟoɤ7_ϟY &Ԕ?w}WN:Pqe㉦4d'),Ii )u^9sF{СCCm۶IDT%&cFGGb]ʗL]MOXhP4(>r׮۷}` J|;E~vbYzɿAS^=aOri 6xm̟SKWOX*W?xwd\},{O4D7!;|Hݥ?uTek˖-Xj( r̢ܹSd#:oׯl|`=Ǐ>KF^}CtMp{Ų񤔼:xRJ^}ha^Rڵkٓ4XnzFV><'L>u]O}(/Y߿?۷%(ҍ===ɫMz{{ŲW,g>;v[|^d |Ye,{Ov> >> endobj -615 0 obj << +613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [236.3086 225.2515 255.7494 235.8337] +/Rect [236.3086 189.397 255.7494 199.9793] /Subtype /Link /A << /S /GoTo /D (figure.2.18) >> >> endobj -616 0 obj << +614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [356.9041 207.3242 371.3597 217.9065] +/Rect [356.9041 171.4698 371.3597 182.052] /Subtype /Link /A << /S /GoTo /D (table.2.7) >> >> endobj -607 0 obj << -/D [605 0 R /XYZ 74.4095 793.4011 null] +605 0 obj << +/D [603 0 R /XYZ 74.4095 793.4011 null] >> endobj -320 0 obj << -/D [605 0 R /XYZ 243.6967 567.7502 null] +70 0 obj << +/D [603 0 R /XYZ 74.4095 771.7323 null] >> endobj -378 0 obj << -/D [605 0 R /XYZ 210.136 442.3113 null] +333 0 obj << +/D [603 0 R /XYZ 243.6967 392.988 null] >> endobj -604 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R /F66 564 0 R /F33 209 0 R /F62 611 0 R /F72 575 0 R /F65 614 0 R >> -/XObject << /Im22 597 0 R >> +602 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R /F35 221 0 R /F62 609 0 R /F71 561 0 R /F66 612 0 R >> +/XObject << /Im21 601 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -621 0 obj << -/Length 2062 +617 0 obj << +/Length 1901 /Filter /FlateDecode >> stream -xYKs6W(U -'dwfc'[8Z%)j"R;F%S]ÖFЏi1'&f{3)OVW$y&v{wVLDjϔvUl. 7l67Om܄L.nWY+_֖ic\ -f+#Ji1E!)w3ɧn8fs =QWͩC6J*Rɍ$ &3QPU >jbz - -iUͲah[D$uBVqeV9F{e/CbQĴzBU-0lZz߀hzo Іd}732]tL*7Qq Lh8}ROk>툂->xNY4U8 9x+y|BV>17: -ssb@x!T1\x9܁Y ũT_0n,5=z7+f ~ٝwJ$]_A4OtX-mV!Tt(_ay%;oߘ }Px;t8%@*QH{F9T3!= A ͈*Իb  CCV7<[v1L¾GKq^KRqt*L ~(8rGb<$?H U $e -X (\O$WҩsiRKX9f՗yA}@_0 @1NAyּҳgޫǵ?C;jA!C & HoG1Va[e&ae]C $69@#9]ٵwJźvZ+3gXXwDvzrN3>[ -J6 EC dG^P(֖6TuS=vav:b%nǵϗCZ$bAv2Y=K`6{Z)n209&Pp0 %H":=]-"Ox!fYYm|"Z#C^\f+T o6+Ɍ͐S:Efw1}uRe ;Q #%hj8QT !7u2 Ztz.Mn]&I_ :>a{Ms -]ri/31Jq8X8D^*q|gxLx/'+9 -W7W,<3:ȁYZ#+biv#R-G: -8 ڤɯa#z ' >?kCgPyt.$D,=H RaKdTs}}"JЍ?@ Љ|C<ʌg sK;aCU]ai=1PCЦ7a\..)(i+%gӴ xG#}Va[Ԏ4Hݠ?Mvڔ7*Iq:gA%Ɠ6A%QqSJNX<Ze>q{KR,L_Ot6lÜq J5oC%PѥZGN;Rn9.7Ve/8͞N}o:>bѰ[QL 6}Ĩ@}hM\`>uB&c$+uob9b*m:thV")㻄4ߢ}L*3>ӯtC> MPnB$+`yZZLJL=17!A\ZP~U!&'I,t:6Wݜ|c=#=6֬˺u9* ;%wǙ4 r9@x[䶣7ȥ\ml!w[,/;ڂ #xvzM1y3יu_`V#2 @s.zc%# j}?-?n2 A3a -5S?G.HϽIendstream +xڽYێD}c"$^`qYh`x$ĚāمzN' nNWeH"Sq.;-W/VxJpe8eqP>,~|^6z:N87.,ܗ):oo}V5HM6hmM*J1*"Q"U(ݯlpC sg;.1ve}wCf3GV^*^͘1(nnuffԹ({lGe'X?̀RS̝Y3Ppuo jJ[ jM4\Ve}YA'^E$n GN,p4N +F-qR3o>U4މs\J"(#l8ܷCx8.)¯g&5$\~.*)ߗŮpO`㬄0FXWDKt~ +۲r0ؒMα"gإCs;#“"|u+NiHu:BD)pq!D7D؅.D)0Dli7 Qs$D*4J] +B4 [(ݠd0.I7Tou%|rLBg3$ g|.1!MY ֳXʄ(Ձ)&jyFѷ ͈MSB j`P3ҏS"#B!V G`| +{y?jpL嶪jQ .e\ӱm~_gt+D[p4X6uwuCbd<m}{weA]T J^H 3VqJ)@" 8 !m \kT2V^#'X~ܪ?Ƹ_Q'U\(lRu^_$HqptilW//M+*pQ=BO-ڤ( 7'Ѳ|J|wU7 ̀,#Sс-'PGSG95 LleLh#ɷeG!w~ۗjz2`&+ݶZ~BFk' %ź6uDhuAG`ޤNԜ(ZEQ*Gp)J#%q,$MY@gP$eLVhߖuY/@>p$ +%Rcj.hEVhZ}oxdGGIAL$u H}D2h\f0"NQC{![ctu^w pKNN[Pps%?&K7 +a'OXJ +/ BM<hp1_U  +vbSܷ&{N|L[pFϏ0(.qm~RWkP_le Ķgp$q < D[-cw?Q„}rHg?44 PWEp}m~9xI 7E>y Bl``&Jw"R.Bv9Y砶 +ˁUۑdt?R~^+Cdaguk ,a C1 +khv;jgmgcQ;YO[&_Zw_a.oZʥgd"3r;j(;fG, 9/endstream endobj -620 0 obj << +616 0 obj << /Type /Page -/Contents 621 0 R -/Resources 619 0 R +/Contents 617 0 R +/Resources 615 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 617 0 R +/Parent 620 0 R >> endobj 618 0 obj << +/D [616 0 R /XYZ 74.4095 793.4011 null] +>> endobj +390 0 obj << +/D [616 0 R /XYZ 210.136 674.7766 null] +>> endobj +619 0 obj << +/D [616 0 R /XYZ 74.4095 560.9913 null] +>> endobj +615 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R /F67 558 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +624 0 obj << +/Length 2425 +/Filter /FlateDecode +>> +stream +xڵr]_G}r++;UY$B$$(`=)>`k,cDR2,v4[÷'yB/e8ev}qP^>,~,.sn삓e(]\x_햌.ۢc8%Vk:)D*m35}왳F; (0#‰_8·CմUQ7$+~Uc<_dj[[겎'o}G.uTXLJ? `B̝*Wc f9%YŇ4[/0x.K1Ξ'6R ݖ!12"YeWMu$Lw *}rij}n@oŗIs눕T~''#yć9p(BraONl{uhܢVz] KcԀLTd}.a:RCa֭OjQb\,sNc + =|BZ_.z[VwR"f + &lňs.O(B/>%$Ca?|0֫ʟZם^g :G?oOIOm[q6یu_*e? OPrT8iH͋M_\Ҕ-Ol]>a*}r\_}%x^2k6^WJ \)pNƅD?Kx4HR)҆?8⤅s;F'B&̉΅P6@p5UuصQw6AY<<ޢ U$Y+P y1jFŷ۪lub[@93ھVf!};n*0GvA(3k+2}QS7awnSa~jD0@.%tA) S6 ]4>FbUSj"⟎}ʮ{ijſK<=dD'LpzSlrxXҫ[C v~!x. s|YϕC,kθah`]b=lM&!ŭ3hRj8wg\&]"`S\ 2!d{zĺ)ï2e׳Y7#FAka&ZECPoذӬhЯ|F~xɐBB/$A\xl\ hpY耔VP XB .\vQC9n +Ss#9#sl%Q\HŒ Z($Gtva~aߗuq־d+!oɈԨ:R=g^GumO+bᬒFża:}'Ҹ &/T;uޮMKEv̬j:~3죳zƝ+ 0\N>wAȲ' {-6@#vXKDD)Hݩ,NJ2  +Zd`wX5˜qod(nu`a]=31eM51i# ԐG +\hV|HEaO؞!U؆eM3.bQPt}%Q&>ű G,y$RNO©\ 5v-SY$ nԀxLp8{R$>VUXm>6Rw=vO0 v2S@5M- D~Od/ @!6aj_@_UkWΏ<鱂׷ u`!RЗM(Z2\TW@g7Wb2 A`7 vW^@ +'b=bVts7A4(cG"> endobj +621 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -4403,126 +4386,108 @@ z ?ϻEOIAXgϞ 4 %IXr-SMAXiU8H}$N/Rw-P|"YzR),:::'Ѣ8' Bjfz97X|&xbI;|I.3zR !ZZv@ 'AOHendstream endobj -622 0 obj << -/D [620 0 R /XYZ 74.4095 793.4011 null] ->> endobj -623 0 obj << -/D [620 0 R /XYZ 74.4095 752.5846 null] ->> endobj -74 0 obj << -/D [620 0 R /XYZ 74.4095 555.3124 null] ->> endobj -321 0 obj << -/D [620 0 R /XYZ 207.0203 299.8702 null] ->> endobj -619 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R /F66 564 0 R >> -/XObject << /Im23 618 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -627 0 obj << -/Length 3156 -/Filter /FlateDecode ->> -stream -xڵ[Ys~ׯ#U'sw.'Nv㇬lt,׮Z==>i@lF63H8f+:[_ixSj6i-gf\:"eG?Vr}9^(J_0\3:?vw˻ﯾyn8%Vk:)D*mf ΈԉQA%Y$z -8 0lsŅ#PfWo2ӊp{UXFU]F f 15Մ*Z5sYG4unf%\>*i_'8W -b"3T[ȓ J\B{z@DM WTrv)bbyND0EfWVjr2+< m^IQGZ,9 0c$7G9)wޠ}3C!DPƎ촹/'%|S}jRW몬cO귪ܕ5>lFqVX -VxNYtω&Ή2[^ -LTee,&L|m)պT5C  c!k%0?ԫRVQ 4!8tBSj[jਏz`R<$L -9QQ@Oz+D  &}$9GM@fd2!쨧/P臈ԌEӘ䌃* j8kk4 $j/e1.! !,qV^L9`ڍ8'p_q `K8eu dk )҂N`-86i¢_1t]8 ʪ.we]5d2m6H;R }FֶGp-'Ѓ`j*A 1A;jؖ"g 7#t( 8 OF}HP S3hNFx1I# -JPadq'(NegWłSD3kq<̘1?Cя2VD!9qմ!`3b5rbqan5KvBX׌agB 5 R9gzr -oKuf!7 (Tda*{l VTT!']d}+Ha6& 2)a;\uW#EW* -n^av"_4TӐOف"}씨;m,G۠j Rz=F&`]U _/ t! ^9>=m댾ܽD͟% ҲidӦ@\e+46c(jI,Jוv:,96GGmfc.γ,p_h% ʔIΈ -o,ECR`])_g$s]诨'ﺒs|+mpEGbwAj;zNS'x5G~f%@WE'uࠏnٲ# |~WV` q. d*,*M-X "vz?%S82QO:\xQLMd+ʿ3p=M3^($܌Y@: 8tD̐vE ybOK}wl6Ht99qgN G -A+Af/! -QDun<N/ʂ/:LE}1Ӿ6Zh`UN(V|eU>},C*w~w+\Sj`b?!5';x) lk 9 ` fXLp8(8Nkt<}1\O~/QW;XףTLqn]6w!a5- u8%IN0ocopjzdE VsqVa -f2r$}8@b G8mֆJ7ʏ;Y+axW -ƕ(" ^TkJW0:I>p@nkXӅ Xc}~+)ƃaYVͯvڨ5B@KB%S]n UL)npCN8u-0]AG٭ʻ5P1%=' Қ3-!57Ϙc2&$[}b8_8:S!i6=|_> endobj -629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [178.7098 481.5478 210.5959 490.3189] +/Rect [178.7098 270.9467 210.5959 279.7177] /Subtype /Link /A << /S /GoTo /D (cite.Vorlesung) >> >> endobj -630 0 obj << +627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [359.5481 454.2115 378.9889 464.7938] +/Rect [400.831 243.1787 420.2718 253.761] /Subtype /Link /A << /S /GoTo /D (figure.2.18) >> >> endobj -631 0 obj << +628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [478.0193 418.357 497.4601 428.9393] +/Rect [73.4132 189.397 92.854 199.9793] /Subtype /Link /A << /S /GoTo /D (figure.2.19) >> >> endobj -632 0 obj << +629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [274.9941 364.5753 289.4496 375.1576] +/Rect [294.9769 153.5425 309.4325 164.1248] /Subtype /Link /A << /S /GoTo /D (table.2.8) >> >> endobj +625 0 obj << +/D [623 0 R /XYZ 74.4095 793.4011 null] +>> endobj +74 0 obj << +/D [623 0 R /XYZ 74.4095 771.7323 null] +>> endobj +334 0 obj << +/D [623 0 R /XYZ 207.0203 531.8696 null] +>> endobj +622 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R /F62 609 0 R /F71 561 0 R /F35 221 0 R /F66 612 0 R >> +/XObject << /Im22 621 0 R >> +/ProcSet [ /PDF /Text /ImageC ] +>> endobj 633 0 obj << +/Length 1749 +/Filter /FlateDecode +>> +stream +xڵYKs6W(D(ޏg'L'm<=4΁` 5ET] IԴ=#Ar~%H2 $SqlD !j\&QvOSWWIidmFAL`Wz5<%궶Lc&S݄On5!x+z3ra5,(FZJ8KąTٔ$Vt#E0Cl3ZxGlFq~`DjDAJaOZ8)U0xá)Q +)AK3LLA)e,OXU؟Qdx}'C=!8ݪFw"]c De'BlT^(%)ķq͐d4V$@*΀S4(!=N ǂANt#!PtpOw?–r[&1.mP7( _Ζ1ٍ-Fh4FX`rdPV}@$N%VCgaJ$"JTnx} +E%ٰ2GWdTgOS0N(GJ})yg`Pr5pϐ$: +j rg8{f̤1w.PC%:("Pd pOQ?–S']' +aRHl*8ҟw!!:;9#15"\ʵb޻WB3[9Ǔ3)LmBi.A9Vym ftr2kΛ*;px&h fINy ߺR~Y$(ߕnHhF;=p f SdV{t,1A u_Qg/gu3W;@FZWT)"k6Lӛ:=]?Bg!@j.ٕܬBgV3( nUMtO|»u.~$Ỳǐ g~r0uH_.;UhIܴC@1( ޟw*xbc3 :Nuf1c޻KLv +I< 񈄲ixG0sY?95!Eba+~o3sg+ +.ye]@Q6Կ`Lr91P5;SM Sݵ̅BEs ;ﭯ>"Q(9)+B %:^zweM`^a8Y:Yn +g08&# ,/||Bu&Q]n[ӹw5S|6l +%"6 Q+e0xs^zFƕՃBQU,CO2ۊ,:me@b|C_ެ\DBId.Сpɿh˨FLP]BCRoS|0B: 8^ "8Ei#Zg!Ξ09 o?];#DwLͮ懻F! ERvQn=jendstream +endobj +632 0 obj << +/Type /Page +/Contents 633 0 R +/Resources 631 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 620 0 R +/Annots [ 635 0 R ] +>> endobj +635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [147.8853 321.123 167.3261 331.7052] +/Rect [147.8853 551.235 167.3261 561.8172] /Subtype /Link /A << /S /GoTo /D (figure.2.19) >> >> endobj -628 0 obj << -/D [626 0 R /XYZ 74.4095 793.4011 null] ->> endobj -379 0 obj << -/D [626 0 R /XYZ 174.4503 602.5475 null] +634 0 obj << +/D [632 0 R /XYZ 74.4095 793.4011 null] >> endobj -78 0 obj << -/D [626 0 R /XYZ 74.4095 218.8911 null] +391 0 obj << +/D [632 0 R /XYZ 174.4503 602.5475 null] >> endobj -625 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F66 564 0 R /F62 611 0 R /F72 575 0 R /F33 209 0 R /F65 614 0 R >> +631 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R >> /ProcSet [ /PDF /Text ] >> endobj -637 0 obj << -/Length 2329 +639 0 obj << +/Length 2298 /Filter /FlateDecode >> stream -xڭZrF}W*_e&[Īڪ@ :dU{3$N94zzr{`q'2d.( <[`ݯHӖxڧVdkuvsI2\kT:?rj8\8X_ ->y\.663o|Z[uT -fw}y&ٔ3!?.~gstfAf 8*vfu◎!Ϧ"XfyǙ9aʐb;Ioe`W˹ El`4J8&Mǵ̳IEJAEMy4 -FPdF.3L)-r:]GF>zuKNx[T8߇}"0Q !7h RIϸtZlbQ/cUq1]uLʼLgynʢ*k:ohFxpTe=`4,B0ch#V@KyXhD.xޝ^sD +ÔngGwȎˋ:7|]4gZ:@]P-2 6ٲy --=@F똃ߞQ% wb(ۼXA08SMTƓޘ#H273#H@Cqs  WxmB>Oי/ bT<A-A4lmY9t0,8Eq>Zk5@HKO\" Vq1fai`R>I4UQtYSCgUU|ӏqN֟b.]|o7/ʴK!: OX6/"d -M?X)zA4L|x"6nŨ3'ofe\81obUK1YC+U|edSqf'v8}U#ʧdPVpfK'a)1J+"^yIrT0Y%+bj0[5c[dlk36) tEHvnupAECVlUH1{lK(3k-#,m1"EAm_Nû'IbIGbuN$%& -PJ$">PDoy﷣j - vrm %uŴCWYd2-5wK`7M6ueqGPqV`#NpuQ͸*$"|͗-XC4*gUŢnm Q - )es;"eDoVQqy,间G*0 ,qqKh) #\GcB:խFWBjf !Zv$x5iUwWcyvcmIua6Y]k-eDdd&C`&7Fzp1o4hR-Ty\a#琾pꖦ&;蟸;kxxwQ#D<&me&bD(زCn- ynW)oP<`4P_LGދ xaVRbG|ҷم7G\4=y| 2V|^'z@!:FWLiw7X eSqpPAUA?f'c3yʊ9:^&zrrx"'KɴRb;Z(v^P"5Ԡ4N}0 ]B? Ovݨ8 t2(>y:Β ٖ -fJU3Pn rH(=%x(X-")sYb;06#)}du~5Li\nn$$(:dDPBy':a )T(Lukdߋލگ*J4opz:pc*d+Z2qhbйfCK@KWN|hg͏;;endstream +xڵYݏ6߿B6jѢlq5}𮵶Jr_3Җlzlzp>3E(J4(kXᯈDSss߭(澐3e82Y2nfI6_g&۹}vכovs8HΜӤ2mlY,`ֺrLѥTRt[T` YY2"aToj0?hYzlTiqvjhwmUoק8S2)Auɬ1+) ~˯XWq|p&JzΤ"4Wo=>Nx,23ȁYL)ЪTd޹N;(pFDɤIK_k+Uz̋#0:n_&B:Ϝϳ(0R\E0)FX1;e,Qa@_b +C.(dݫ3dY8@$gPq:AUX %.% la.fV؝I/!,9TցFi1BC7E#SK)p%')hPmEȶo릾ېDuMy="xqnzFQ2/#mUK={]W= ղ5Y}]a4/4HP; s0C\Ցu{8K㳡`O&K\9pU݆W &/ZP>c56uM--~O{Z[U'X4l_m0g6C! +O۪&.1.?!jYi&@.3k;ш*TIkx>>q|l eVKKK I".SÆVF:8:%cgC…[w~H4!WMv_s$y(/9#7ňhWIjsN&/+y"-߯3B -P;Fς<W;g?뾲 L>eK4.flXWuuqW)},  cZ;s!DiCݭh:$ׁ~1CSHH3hN[ Tw64z" qU:ij+'2Gƫ\MR2f<[8d4y Х-@B%^B<}ZHc6B1X*UYq{=m>Ny@wo~ Zl;^:"1"{@`K/*K=6t  ηd.wA^ |)I_7z`K{Bc脑;iꦐ8/ Q{b8D&s""C L$NG)H9zf-cE/I%;"K |1 -4ψߩ],v{ŧ3}9es!^bժ+(Oe@_a ^ I'EXZIUþh 3›Ծ?dNa('L(3>K= R/$8^${/7A|ɺ=4"5ʈXǽȻ%; }xa9jwFFˡRwN\V>y*<9zqÅYAY+&~SQ1$( +З P=w_kI~ b>> endobj -624 0 obj << +636 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -4634,107 +4599,87 @@ z H8pBhpAuÅXfd`:tƙ zI:4t]I:\׭v 1''G$ +77W,K" ?,'OT<R}6XԟX;'_+?IzTlbF/HFb4V endstream endobj -638 0 obj << -/D [636 0 R /XYZ 74.4095 793.4011 null] +640 0 obj << +/D [638 0 R /XYZ 74.4095 793.4011 null] >> endobj -322 0 obj << -/D [636 0 R /XYZ 219.5326 567.7502 null] +78 0 obj << +/D [638 0 R /XYZ 74.4095 771.7323 null] >> endobj -380 0 obj << -/D [636 0 R /XYZ 217.8873 442.0147 null] +335 0 obj << +/D [638 0 R /XYZ 219.5326 530.7468 null] >> endobj -635 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R /F66 564 0 R /F72 575 0 R /F62 611 0 R /F65 614 0 R /F80 641 0 R >> -/XObject << /Im24 624 0 R >> +637 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R /F71 561 0 R /F62 609 0 R /F66 612 0 R /F80 643 0 R /F35 221 0 R >> +/XObject << /Im23 636 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -645 0 obj << -/Length 3055 +646 0 obj << +/Length 2363 /Filter /FlateDecode >> stream -xڵ]o=Bjm_\2@r&(ʢe%s_Z)IPA^IzrI'!h=|LV0W <"nTO2M˕>Y~\I>VNunw/7؛Deije=dd=6\ qCޯ򳵡E+o%1 Gl263~>Z.d#@Y}h*k6@ -J;‘T|[1"|i9Z\}Ndt m+8< -/-eL2; VJ)dnQ*7aI-nj?n[{PnqȊVeU2ZGSeQ u읲zPmgJ4[ Gnl7@;mjZ06JFnk6M6`0O*K\<nGL*wbu*!(c6H$*H -"pHi  -xPZG5d' 6Rvp*Z~]uТnw }$%ۅ=`O{-YOxo~e u/+@s-ehd*q9+Bj+ N uQzuuTHs;IȝO90ßjsf_4 CȭQ&p萞pqtXxUhY t˚Vǃ=f4`"S$CAVp jl6;V-i 1(ǦO^\[M3b:WijSGQJr,涮dlJ>'>i8R p;6sa3I!%:onͼhICڬ<`uĉwXm;Ɖ׊eSŎczzBeFPDU1k ة *VRZ2 ڡd Opⲑ$21$CM KN<}_ٛS<gT, cqM#Vytï -ps൛U? !G p(9ŋN`l'3>J% =]|傎 ~B n捅ӐT,+٣,؃+܄UpX9 >gWf t7-ʦ6 PPxavj]Ohw<"ΙCwB=Z-LZeݘu$zWL~;:;\%}S+g񐙍YboTy2;'~bW,K@& 6}ƀs%?pte:2&v!Fl]h]Ju𐬊pR'5yT$E' uQr0{VuW*FTC{]*15yߤUs|v<"d7s"."U1(97ɃG8B;tn:nl\r`UץSHKVYG[B8 8/mq[يN,sG[!Gmb"O,3bV:%ʳ,&Y3}YO_gڟ9Xfbb* `v :`˱˩iXT˸4]t)N.'jlhΦ* DyMx3N sw+:CM?4N\85nvV=Yoj6K &gC1W8 e -8T]dl( b-=' -Kq)gFTps87_o?nIΨ6oV?=N񬷲yv3lJr:-f1yz`3ä,H+%G;$岐/Ӂ;\Эⷪ\3aM Tek1合X"); ?|iZ\0QJ UB7 !QHb\(7t,q$KHDA.NG|#maB'h9}$)x`sq.e{vjzcY#.Z֘II|Az'W磱kjpO#@ubcX8NОalGvAĒ'wg3} ]4ʵ.rJt΁cf[8 ~ȣ 5$<&Hj#I@(Ȳu5p׋#&F(> iq!cj-xoc du.+ͪo63=]z+WY"\+HCYjwh'+` rH0a X[iqͼh5-`=:MfN8mEAѾME\H%|˘CRw%ymɝ*N,}Fظ}AOs?ro'omncPyH~lw3 ,#֩D,8}baׄj+D6%NpF-1lNZwT&x-c{&|1;8L2Qͥ@ɹVWpie4{;O[eۈ~X,-,q" KDU0|1.~GՉYB@@s -`mrO1#K8DkE"[>{Wv\/gr,d gf{kv*J̞Ϫu?(&XjW5xV7wLo28A "aQCjA!QO w pK4XM`ªfƄ) "Z|9-_oT[ҝ9 'LeuP\0MuZhlЦ3mԔbvjp)멮~݃LHB̨#"*v.@]^Wq)؏#7yPYa$GtZ-+4%shH*mxo81?W[ڬGF*4Q]PA+4`Ea&e"1aZJc+ xW9xE  +JJ'@J&, BPAJe{BD P;V=D[V-n/og4FU빘 T6@6|jvrC$_Cݮ1w5UK\hWȜ*F݆"]7/u{j}p3$ ~'g4L7pôo5~r@Ow(]^hĂ[֌iȑxp[eg#Ezh"Ih$zA(ہ[諭H!ޠ$O@҃۫߅폂f=-">G2K2f~Q#1S Ρd8yo1$0,$V:i'V@H (سLRR0B"9??w?A6;Aer2 P-EzhIcHaB s~zOMt=|QZco@,<']LI qU@v dq${tç6|!0tOX}10Yu8xG@CrMTx$/‡n ł$XR,.2pX@h0_cJ|[.E&߇J&Af43T^ʵo^h2w}2=.fU؃|7`V:w)a=R`o?S'ݞ~O5=W'Z{Kߍ3UJfAH XC;"]:hZ\>sI:]pڂUEؿs%"\UU㾷*%=r0}ӑMC#橛r/RϿiT|\}5Mxl|nH>hz.|}b75qwU M$B0IQ%c'a92X,!L$ ;e@}!)=y"p.vY4݀ì?R}W 4&|mzm.9r\X҇y2rw]:m>7VjaP͍rh|c81CHlָyWqT3$ۦMEdB:a^auA`kGĜP]򃀡pu$|Bz0z$n +4T8=!Lx9bd_B8n`CIDk>MC%:q//ˊ\hHeRS{feyo_bn҉X8@ak1__䉯cOBZendstream endobj -644 0 obj << +645 0 obj << /Type /Page -/Contents 645 0 R -/Resources 643 0 R +/Contents 646 0 R +/Resources 644 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 617 0 R -/Annots [ 647 0 R 648 0 R 650 0 R 651 0 R ] +/Parent 620 0 R +/Annots [ 648 0 R 649 0 R ] >> endobj -647 0 obj << +648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [177.7731 675.9543 197.2139 686.5366] +/Rect [177.7731 580.5929 197.2139 591.1752] /Subtype /Link /A << /S /GoTo /D (figure.2.20) >> >> endobj -648 0 obj << +649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [383.7139 658.0271 398.1695 668.6094] +/Rect [383.7139 562.6657 398.1695 573.2479] /Subtype /Link /A << /S /GoTo /D (table.2.9) >> >> endobj -650 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [316.0837 207.3242 335.5245 217.9065] -/Subtype /Link -/A << /S /GoTo /D (figure.2.21) >> ->> endobj -651 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [397.4695 207.3242 416.9104 217.9065] -/Subtype /Link -/A << /S /GoTo /D (table.2.10) >> ->> endobj -646 0 obj << -/D [644 0 R /XYZ 74.4095 793.4011 null] +647 0 obj << +/D [645 0 R /XYZ 74.4095 793.4011 null] >> endobj -649 0 obj << -/D [644 0 R /XYZ 74.4095 538.3928 null] +392 0 obj << +/D [645 0 R /XYZ 217.8873 674.9828 null] >> endobj -82 0 obj << -/D [644 0 R /XYZ 74.4095 390.7144 null] +650 0 obj << +/D [645 0 R /XYZ 74.4095 446.4113 null] >> endobj -643 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F66 564 0 R /F62 611 0 R /F72 575 0 R /F33 209 0 R /F26 198 0 R >> +644 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -655 0 obj << -/Length 1867 +654 0 obj << +/Length 1934 /Filter /FlateDecode >> stream -xڭYMo8Whvhw d` NJ";CRlYr29>{ iPcDR<0=]d}Om8Z~}f%Nk\'\:"e{˛ٷb;d*Jg&4|)ve]o_?]n'V5J)5J$hmM׺20jmR"Uh+M`"/0xt%\8ִ_.j$eNMvRp!ֈgw|Y5yLF3'r?"! Dqʭ#VR=]D*H9H0U -Hh%mGYk -m\rWoȵ J+t'Ai`{C0Y +!*|~z*jޮeyMc$Z%Qs!qNZJ\J)? VFVo(jt 9' [+ wId]a@bPSe\7>4B0"Q +!JQǴ㲏s "xYY&&x<P)HM^> IyӮYbCQ)O٦hHy"]IdtOp8–YmYU|ŏ"߀,(Iԅ/YF$TUnJF>Gr(sƃ䃌Le †Ì|Lُ9WDmRj:>Ǩ6pf:{jtNY W0w41F"s{e:{Bt|@UszaLJ+'es) rPh&DjaKU!sduHh& ĻC86]a3,eYe V jeNB;<N&;0L8S)Jj 0J¹O2F I]k3X+ -0gPdəg -Yf&?6}gp⸽N K$19r.K٘ x!/da  @%R8+v26oʋú -yQj_/a3Cq~#zlMh]y]a$y@g: 7 `Se`7Oaw `gZI_m, h}xUF |fܜͪs$i -/LVCi N2sIлJ+˺,lSdf oHayr Bp CLfG=) -(/*u¦R)u^U-d>c^~ E|Ba7j#] -?h؄X`,CGEuK)_펴,B`6-C4B˪Xıf7` ژOnP+97. JG8(%$0[3A!sg=h#bL٢hI A@oP gH@G?ckqVoYsv] ¸h!8n ^AsQE?BN UUլ v%n_l2l*E:Qݴ \vj1 ^^5;,wV#kntVwYO`֫9޻E Iϡ1 =bt}77_7:>( |>&<=0#1e8 j!+ _b~f]ivPv(6Hl:)?_E1}/fɠA5YKe?vOh%odho=endstream +xڭ]s6ݿҌ 5uz7keJs,])-Wŕ/jh姛ooFZrV>+`.LEi3,2Ѷ@giˌ12"f&P[߬5sn)ǥЋv=vqe9g3@o^9)e8SOHs,W9m[]pi +|rܝG%@ axLJptFmW&̺@75a<5~pb\N6"wtt>}UWO]P|8P@[A/=}K~їĹ=Ixшתz p34ݪ<jAvy_!H8q=}UZ1O~w$x&e%d>OƧ߆c=$6_KBԉ븿h`zUܡ R,HBv<!1>sc%'lP!LlA\0m*=GByx 8绞H3 +;jk3^dul6&['RS`꘡F"yZ@zS7C ugUmٹa,<˯)W~`䗠]u + Θb4&M?dJT>[8~"*f%_`@( ^i>_폥A/),݆CbrCkFs 7aN=?tbOWޭJhsNEs˹8(0ݸQǧ1ēhflJJzB,\ZBw6s˒Cyg+Y1#1g}A0Aendstream endobj -654 0 obj << +653 0 obj << /Type /Page -/Contents 655 0 R -/Resources 653 0 R +/Contents 654 0 R +/Resources 652 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 617 0 R +/Parent 620 0 R +/Annots [ 656 0 R 657 0 R ] >> endobj -642 0 obj << +651 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -4835,51 +4780,88 @@ yE8!!! !$d RQxI _ΐC*SJWVkjj2 n#ÇTbh,Hn4VYzYzrrr@Ғa¨jHɺu4뮬BHueݔB |R /ǥD`bÑBDhF&4zj___2-d׮]P]6p||L y +/L U^em,/ QEE` endstream endobj 656 0 obj << -/D [654 0 R /XYZ 74.4095 793.4011 null] +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [316.0837 353.1081 335.5245 363.6903] +/Subtype /Link +/A << /S /GoTo /D (figure.2.21) >> +>> endobj +657 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.4695 353.1081 416.9104 363.6903] +/Subtype /Link +/A << /S /GoTo /D (table.2.10) >> >> endobj -323 0 obj << -/D [654 0 R /XYZ 263.5658 567.7502 null] +655 0 obj << +/D [653 0 R /XYZ 74.4095 793.4011 null] >> endobj -381 0 obj << -/D [654 0 R /XYZ 232.4978 425.9075 null] +82 0 obj << +/D [653 0 R /XYZ 74.4095 771.7323 null] >> endobj -657 0 obj << -/D [654 0 R /XYZ 74.4095 296.8881 null] +336 0 obj << +/D [653 0 R /XYZ 263.5658 529.9143 null] >> endobj -653 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R /F33 209 0 R >> -/XObject << /Im25 642 0 R >> +658 0 obj << +/D [653 0 R /XYZ 74.4095 188.5624 null] +>> endobj +652 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im24 651 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -660 0 obj << -/Length 2438 +661 0 obj << +/Length 1308 /Filter /FlateDecode >> stream -xڽZo6_GU~ٷm=^q@}cVcK$w7!eْ,j\ 49HO'Y̪If% 87߽|bu:yx&R1gmhf6d6WM\M팳nU=Cw,1ZI:I&sM֧TV$"K'sHkRylʏ7a+|[+&ybqfsD3%N} x!G\D v f&Hog{v_`fe!%WWd/Lm`c21oC ܱyedU١̟> DkY^QD)kWʢ9g"QZ^PiXR0LysgJ~ L8AIs&L:|r("lOj}V}:o\IcƤqS2p5Ё:& b{E B<HD -K$;伄G$T/^\0Sc*p}KHYhFt'ûj|NHۗȄ& F^XbM13 $=<`}S@ɴʞ:XRSERG#EOҨbi %TMK Canq|ŎJ'@ -e BvP&~aCmU|[V - afٔx@Ѽ7C(xle_Grp[5W8w=ct@dI1Áҹnx)>MdOPWE4vM֓ОS$~kP]gP[|BAzg0|KhPNBƸ9x8vVxsp'n{M#|2a -RMt[ rkz?1Xpv떖w;i -Xp nDO)8w ,%R-N[.b9``3yեcJTfs1e7 ĐwP^ Յs-@;;lch` -j> ~V+eTW]5 g6O%^4E`V+^n -/24UTش 7MiD>.,}bx 2p#u6{Dj+@&1eq. YS[+㺻rڪ˜X" - --}nI"qG4S= -S ~yS6"aF0 -&K]#҆O8@0&T:KP ~WdgOcjGG<٥Ш=sendstream +xڽXnF+p:. ]2arI*!(QJ4Bjxy9g$G"FD0!$zXOpg+ib68 M~$IGLjrdtH_ʮ U:hK[l=%8ޮjSLg_&WcA1R\".JZm*%1wrwD~4#b * 2X˶e5QBBH}:C{e?YBDR3`ZJ4S; &J#he*7,!x~3.eC +> endobj +662 0 obj << +/D [660 0 R /XYZ 74.4095 793.4011 null] +>> endobj +393 0 obj << +/D [660 0 R /XYZ 232.4978 660.3308 null] +>> endobj 659 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +667 0 obj << +/Length 2155 +/Filter /FlateDecode +>> +stream +xڭr0&qTG$,0[׻{OTR{P_ӯ᪉jRXa&7(5y\ +hU;OCﯾ>i&j/~K5z6ׅj1gRNoBG/ft[C~|u{Si)\Yim.lV"]q=KDa󉒢|yQh \({r篡߭>4lnʦm]x'ڍ-9-S %̥0e/X?_1+|Hד͕RhUW_~N\һA 9fqhᝋ&\J#!Y,~U%w6qӂ^vxToϵY"jRfJXe¤NpWb4ZTr۬Ri-t|:k&*1]6LZrP$hBEr^$Pe^ aA}v XcܸK ;}w"KQUϴP5ێ I;C2۪y Bl|{iBC ! X;y0>`Z6SPӲ!BY̲Cj5&PWyt]i~XqM"t݃a"lD3C޽_ Ё'k?%w +Q2rhƹ<72SQqUġwZ.`Ͼſ'Fp*U).VaT}vĤ0_а+n]YEb0[n3â m*^SWͫ):F&1<%$`\y%* +;grVh].(#%[! @7QP}ZbI8c촄EĻ8zo8B>䃩+Fʁ_5B~ꖄG#W.maV%0dB}\Ţmr Vu(_'Dplt40z< Z5tu²̶&X*yOJ§ޅkRǡnȷo7 q)Ta + 8U>2}/E^ &+[E"H˹5f5r ͦM2ܘktYɓ :o2!aKMF{?Cdq#@HBlx>g ;P)֠; 2[F.G + ^Iq&jtf~xhd%=Mo'ϬV8lfo=z!W{0Xws쎀#[,zk]g\Kz E }_d8< 3S` '"g2m OO:IN`-,$cuEὅ~=ueJl2_BՉ⻗,nz`޶yRiEhtsM<, (ō;?1J[M=GnP GքݞG&1鸏DK s +6p'ocA&6;\c@ ̉#7f]F QL"!򧛞5Hvo > endobj -652 0 obj << +664 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -5038,74 +5020,181 @@ q (R {HbR_|u!/~n55BsbXe~UAVE/ vfBJZL=dWm ^j8V!ajkd(&vtt(eW٫0^\|pTBR!**4bTaBH)ўf+RWlvݻw)^pkbb^WVWWkj"ԄU ACR Cmm-!!Pd 䮞:?ӁP+Rp=Z(r膗H'|Ң_gϪ*:;;;+**(H@_BMRZԆ2;wj_5$lr}iRb+v3F{ܣ!x o٫tJ(\:@ Dtendstream endobj -662 0 obj << +669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [181.0012 207.3242 200.442 217.9065] +/Rect [181.0012 261.106 200.442 271.6882] /Subtype /Link /A << /S /GoTo /D (figure.2.22) >> >> endobj -663 0 obj << +670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.613 189.397 184.0538 199.9793] +/Rect [164.613 243.1787 184.0538 253.761] /Subtype /Link /A << /S /GoTo /D (table.2.11) >> >> endobj -664 0 obj << +671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [464.2527 189.397 483.6935 199.9793] +/Rect [464.2527 243.1787 483.6935 253.761] /Subtype /Link /A << /S /GoTo /D (table.2.12) >> >> endobj -665 0 obj << +672 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [502.4217 189.397 521.8625 199.9793] +/Rect [502.4217 243.1787 521.8625 253.761] /Subtype /Link /A << /S /GoTo /D (table.2.13) >> >> endobj -661 0 obj << -/D [659 0 R /XYZ 74.4095 793.4011 null] ->> endobj -382 0 obj << -/D [659 0 R /XYZ 229.5568 689.2224 null] +668 0 obj << +/D [666 0 R /XYZ 74.4095 793.4011 null] >> endobj 86 0 obj << -/D [659 0 R /XYZ 74.4095 652.1235 null] +/D [666 0 R /XYZ 74.4095 771.7323 null] >> endobj -324 0 obj << -/D [659 0 R /XYZ 260.6248 413.2595 null] +337 0 obj << +/D [666 0 R /XYZ 260.6248 512.7788 null] >> endobj -658 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/XObject << /Im26 652 0 R >> +665 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im25 664 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -670 0 obj << -/Length 1701 +675 0 obj << +/Length 1722 /Filter /FlateDecode >> stream -xڭXs6 ~_G.fS6kne׬[9fl-Zrs_?dɖC($>"'T3ͭR` Dt:uEНӾ뫳oe&#-SݦWKѸr2iK6 !b5<ޖyLn>t6,IaʬsX(I[6LPe^׭ T + lʪ]Umh?&YvbL?9mknnռX6F˼l0HA"M$ wn"yřa HVёG ? .F%IXha/w_eSRp[ip>"_\Q$\=*v+|CTtLIXD9[22p~@,\l y’D>GENFd$ͼ'ֺY? oo -K|nNCkO&M<O!D ,3)5$^ t]h$E/XU]=IPUC) y^T5MWV7WŠm0i7R*9\uˉ7Ҕ -;(kXT7ŶUW_ -+0*"/$7LHII* 1 -iԼ\Vm2)iҡW,IZ0j -K!6MQ qmy_%m 9H ÙI YC82z O?uE,ju͟ Hh[hk$wA+2)l4\E Yo߆Ⅵ3j,ܡ1$8lЖ5HyOuws;i݁q ^E@x=E2$'B]Rmw,%}-%Rpd`oQS @_jq0fv[ obȖXfD*u^Xvpk%`)=Rb0V> s?- wTH!}؊]SSۯݔSܔNl*3&zhJv-Yo@!*R Ԃ@vZۂ@ѷ Q aɶ^3pďtFL̜N։ԞKV?:o=[oϘz * >P͓|3kNtO^6uJ?r ؀؄iOITU*%T[x:LKSֺy ac kkw9ڌ4 WYfZ*L(KO[ /Z_ hX#py:'?w/-.c,a qRY -hTMp,)K}=T?#|p&LZvJʳOg OnBad2(A,E_jX{c:.h㒦z~%b G%M0ӝ:YE@~#Q -9k%<ȡ :N i?gE9\ebQ!V907a>+d+qE+( -S)k$Z%i}?eDqJ4A o\- 쵱endstream +xڽYnF}WQޗk mnH)@l?P-Tb _߳Rԅ +MΞ9sل )DR +<06_ pw7ItVaJrx0(ތ~Ͼ'ܤ#NƉt:_b1ft)r50xsn8%y(D*m gDt- 7rP"l?;:B Jf-.\3biI9 vO>=fu^Dz\,zUy^+8֔ +n' cTȡBFk9WŅКW .gҽ.z7\ULļGpKee O~mY}5=0uoJSBπ;uTr; #*endstream endobj -669 0 obj << +674 0 obj << /Type /Page -/Contents 670 0 R -/Resources 668 0 R +/Contents 675 0 R +/Resources 673 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 666 0 R +/Parent 663 0 R >> endobj -667 0 obj << +676 0 obj << +/D [674 0 R /XYZ 74.4095 793.4011 null] +>> endobj +394 0 obj << +/D [674 0 R /XYZ 229.5568 689.2224 null] +>> endobj +677 0 obj << +/D [674 0 R /XYZ 74.4095 633.755 null] +>> endobj +673 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +680 0 obj << +/Length 2506 +/Filter /FlateDecode +>> +stream +x͜KsFܛxdTqM9r֪=$%ai)+RqU~6DhDT:*Ƈט&$ym T}\ݜɂ~]ugg|g_=$\w,tA/>r[3Lt=S_L߯Ͼh7К#>b̜5.nC&s]UJ~Xg?b'״gkܜ9 +SI%g?dJ0.8lEKWf`!&ц1 00Znw͆M +9_oBp4>}ybN76 +mH ;` A3^Ԓ.nWwAL_O5y=?J/qfm=j-a;objgX:KOUO3Ѷjkj0b$[3R+#q"ՋTsŔrcR#dBPor4ڴ­0,RmVŔjL;Vwmum-"R4-b!%\ +֍#UQ1%8`!H$,℧wAvNjL&v[-¸iO\b}9ٿd`d@:f>R>Z?| %GSG9zB2a'r]fgn;: sPzt< FCd5N bdWuB +Z Yj| +wRWA,dPB +aARRUŔ☂CjL";z֘AgjۻEuyܼz|v`}(})4i?ŧayUXLI$9R:QBJ)!c.H| +aX94hES82I UmW_Q%R;ljV?DC +`Aa:Hͪwl:=au;udVɝ?Xcr4WxO9Ԛ)X">F8DŽi6(%]DCXt!YucJI1'Z&"a '|^&P},X>.[UNuVǔ,☂Ej"~)hN::Hu1%u8!SG$OA'r }pII'h'^z=GE~м֯q[ϽwiG4[yL)8pG؉"vpc&\=)XsES\=)X,R#dE='Q ^tRk&oBv瞆!^_#W3kq-M~^Wb} 7OkWHeZUWSb>ڿYD{8% 77קM}Kł.wf>w|jV3B4ݳ=t :Дr*$=fVySZuC8Gߏnendstream +endobj +679 0 obj << +/Type /Page +/Contents 680 0 R +/Resources 678 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 663 0 R +>> endobj +681 0 obj << +/D [679 0 R /XYZ 74.4095 793.4011 null] +>> endobj +395 0 obj << +/D [679 0 R /XYZ 194.3776 163.7542 null] +>> endobj +678 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +684 0 obj << +/Length 1680 +/Filter /FlateDecode +>> +stream +x͚rF| +&/v`ǎˎ+Ī@I2G<}֔iu%L,?,*`e!8P*\Od{OՔ9.|O^eQ$mvgmIՋ_}{G  + 籓|JҡwEEb3>e]!T΃@Q|)x+s,YDT`˔9xk\Jkg $pfi؄GM5NCD#ݾ\mfQW=aMovzWl +Ep$)0!&ӂtGhKciR``z 6 avrYsP^.ַ^Wb>}I}bsz~i9ݮVM-O}v. t^bdmjJ3JiV&I01D:OaHIXJR$)JʶrFy +y(Iam9D{0lGCF: +|ۣѣiOּ=Ҥ06 "H=FF}cYޒLu'3Mb]Mr,BtofOQn>$CԜIϦۋ}ld!֖aM}|{^h/Ok%W#^Yզ2aKRE+V(B;Y`M +#l!ˆtc>_aLEu;_`\M!nK879ρ%)n|:6-s-dۆ5Ě7<C ;<1lXuqXA1Ga䤐)X$0bs0"aWۋ ,zQ\l!]>}|rwm T8& c: + vS!X$as!`0\[-7dvGES;lŢ6R^=kgM_V|Ĩ2cIRNj,6._t \T&dC[.:'BH@$'r-B^QLi8šD6(D|{hF$)֜X(JGa<؞ukRaFlF#?Mp"VK I +D.WWk9Im9D{toWh)4wh:%dh;Vf\ #jT/hȣYGlHtxQB!N[o0DIRAQFHI7 +et1 ^7hfm^E1z-\v:YmQi͛P5C03ah齍 +PI2%f¸\Wa=?(zuF<;=5J=* ?7tIڅw.o{)kBQۺ(ݗX-zhGF@? Kj:֓wH)U|x[3HJr.Ug6Un <_]ླྀendstream +endobj +683 0 obj << +/Type /Page +/Contents 684 0 R +/Resources 682 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 663 0 R +>> endobj +685 0 obj << +/D [683 0 R /XYZ 74.4095 793.4011 null] +>> endobj +396 0 obj << +/D [683 0 R /XYZ 187.6529 310.8025 null] +>> endobj +682 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +689 0 obj << +/Length 1778 +/Filter /FlateDecode +>> +stream +xڭXKo6WhQ${6bb @r* 3Ihp^8Df +Vp3  `ÿyĜrxc)2\Y]& ǔ(z!t~3ϥ3|v"|۹v̖|EQB&˥`ei)/F0dqEhW3inj12"fn¾^s7iz5[aA_.,{iJM9=ΜvjX&YΙrV#?ų%~詏0L8'tIDl.>_vNFa˹0^I0Fq?ܺq: +<#J&uZz~ uQYK-xET+K-br)TNVq,g>=-w`ôk6l1Wb PŤ2;26&qdHsUdBX uf34Oa'դy#3(`Q.shTx +L0gNQQ |!~ɇnbMKno}LjCF{." \"̎!LYSM{M㈌e>J5BLqV ;qW:&K%^R@> @PDp sg>H] +Z&Qj9$_̖q/~_ǣ  ~o;n +|p.v w psgD}D,֞v޾H6_=IBhձCVXw:4oAU%k3 i$ia `z 5%w VshX2!@o}ݨ +*+1uX =I/o5֫[ 4RBIf(˴%?3d*JQL(+0DZ#x8, +8Xm^!.m-qTy*Qy NF6KZhZE'v5e ~QeلUVkLzHT,LhN"nI'gU]HR!ZQk/GAK,m׾JXi$ڲJ=fMs\oi0h;A}:c)On|d y`"aGşuBlj׍'dGDL$L#և0BC+KGH"fhxUds{ج+ٍUY㡠Uy& fRou߅ 9/i %uO,2Q] SQMt?Ҙ:6)xЅE-sliJ~-=z! QDquoGR!9ۑ LP&mub9\[> endobj +686 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -5216,123 +5305,54 @@ ml ,` X^,` X+,`^a,+X,+b` X ,` X^,` XBN,+X{ X{,` XW|,5n@ @ @ @ @ x122b_ z~W>]>믿Kkll,9ڃXotmnT[[ӈ`5??Fjו+W&&&rv?\trT}E>"DLFD|͕DiIK)?yLNNRN2q`҈]YY~L|"Dεk46!aƁwEX/TI|"?$^XX eEm!I4YN~_fOb,|X?"D,|^Y[OyK m}ə1ŢN$`Jit:YcuvvPY`WBl&w4VT===4{e522B" (a]t evD2bOb1'XLI&-B5?80#[z/_k,QBhfED Q(CNOO_z5i,hݽL/6hZ\\$Sla=z#ƛ7o$}i>iH,v$ u>lZRJ*^=/bttudE{5IFAX0h \dE֠Ƀصa,%;>Lin7M$pjɿA2bOQ>1'$Tg%#li̺K^@m NbE'+FFX4!"cEӮ3Pkmme.?M]aѬ\CC,'/3':|9/k,$\RJ*Dp"K?;;4{=5V0h6 찢FѡnܸAX4!_Zޮo6E,ꫩ)55*݈67t 3i}i>1db1'"W51OBJI.@/޻w/l/vu!VV,\.WKK 3>gaT2&_4{A$PЭMl6[p@l5:;;K4O@4 =̾(hwgkgZO~,|̩$L)Fb4VM0endstream endobj -671 0 obj << -/D [669 0 R /XYZ 74.4095 793.4011 null] +691 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [407.8633 483.5062 427.3041 494.0885] +/Subtype /Link +/A << /S /GoTo /D (figure.2.23) >> >> endobj -672 0 obj << -/D [669 0 R /XYZ 74.4095 676.3167 null] +692 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [350.9667 429.7245 370.4075 440.3068] +/Subtype /Link +/A << /S /GoTo /D (table.2.14) >> +>> endobj +690 0 obj << +/D [688 0 R /XYZ 74.4095 793.4011 null] >> endobj 90 0 obj << -/D [669 0 R /XYZ 74.4095 417.3285 null] +/D [688 0 R /XYZ 74.4095 771.7323 null] >> endobj -325 0 obj << -/D [669 0 R /XYZ 273.2852 161.7547 null] +338 0 obj << +/D [688 0 R /XYZ 273.2852 532.4193 null] >> endobj -668 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R /F33 209 0 R >> -/XObject << /Im27 667 0 R >> +687 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im26 686 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -675 0 obj << -/Length 2506 -/Filter /FlateDecode ->> -stream -x͜KsFܛxdTqM9r֪=$%ai)+RqU~6DhDT:*Ƈט&$ym T}\ݜɂ~]ugg|g_=$\w,tA/>r[3Lt=S_L߯Ͼh7К#>b̜5.nC&s]UJ~Xg?b'״gkܜ9 -SI%g?dJ0.8lEKWf`!&ц1 00Znw͆M -9_oBp4>}ybN76 -mH ;` A3^Ԓ.nWwAL_O5y=?J/qfm=j-a;objgX:KOUO3Ѷjkj0b$[3R+#q"ՋTsŔrcR#dBPor4ڴ­0,RmVŔjL;Vwmum-"R4-b!%\ -֍#UQ1%8`!H$,℧wAvNjL&v[-¸iO\b}9ٿd`d@:f>R>Z?| %GSG9zB2a'r]fgn;: sPzt< FCd5N bdWuB -Z Yj| -wRWA,dPB -aARRUŔ☂CjL";z֘AgjۻEuyܼz|v`}(})4i?ŧayUXLI$9R:QBJ)!c.H| -aX94hES82I UmW_Q%R;ljV?DC -`Aa:Hͪwl:=au;udVɝ?Xcr4WxO9Ԛ)X">F8DŽi6(%]DCXt!YucJI1'Z&"a '|^&P},X>.[UNuVǔ,☂Ej"~)hN::Hu1%u8!SG$OA'r }pII'h'^z=GE~м֯q[ϽwiG4[yL)8pG؉"vpc&\=)XsES\=)X,R#dE='Q ^tRk&oBv瞆!^_#W3kq-M~^Wb} 7OkWHeZUWSb>ڿYD{8% 77קM}Kł.wf>w|jV3B4ݳ=t :Дr*$=fVySZuC0GZmendstream -endobj -674 0 obj << -/Type /Page -/Contents 675 0 R -/Resources 673 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 666 0 R ->> endobj -676 0 obj << -/D [674 0 R /XYZ 74.4095 793.4011 null] ->> endobj -383 0 obj << -/D [674 0 R /XYZ 194.3776 163.7542 null] ->> endobj -673 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -679 0 obj << -/Length 2454 -/Filter /FlateDecode ->> -stream -x͜KsGy5^M{}c"$b -O6(;sjsynj/$؛<`&3^.n~k~=6:is ^5-Ω<)[#x05C MkX 6G0sRci(ked;Œ?^?6b들0IN*6u'#:KREN&E!E7HAm__߶n]v7/5/rj٬ww׫U!.P4ͻwwz - dRRԓVO*;ECl2 -d$FH4*#|6b2BT"HʈdZyk+›v2"69QLFFbDF, #J4INF>)u7`;>Q(&##1B"#p%^Us%Zd3>EEkIo:ΛeY暡z/ ]mVo瑏(|$|c|[epŀl)IlrG1#$ra P§Zl GT1ɨw ^@YAmr2XAFjծG// ʢW]n]\u¸ֶu$$ -G!LgvmpPn0rnx^7{O~S)fv5(BL'(ibT4DD!I q|(bUmFmYVWv_YyڤlN[/&9,'&xSPp(&#1Bp% +'_ʃq^RZ#ow'9*:/Y,R\9M1O9&vsX#$Ba P§MNlҷ^iINFULSQ0iZE1=TD(XADU8".5DLrUYv.$"֢jdT$FHT*<1H堌lHgsZ:rtx^:{xR#\ʂN_gH8o&w+g.L%iGMriJ8iM tiGlriG1G9B"p -%|&dÈXD 1h~)Z,ڄ359y/@V>,ޔYCgrNm-kstض_KC3y q6U,ˎ &*}d`tٜScEz#rxш&G ;Ѧ|/IVzmU]ݷvuiQ㴚 0V+Omr̘#$)JC]TjU]n^9 K:d9!lUBч$jG.>{&h cgڀhVKi@§NuѝF⹀BP`ܞן6vnpeɷ:YGX֧_ozwWW]8fuaXhG{8} |:zO)) p|ikgwaojc_Bkendstream -endobj -678 0 obj << -/Type /Page -/Contents 679 0 R -/Resources 677 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 666 0 R ->> endobj -680 0 obj << -/D [678 0 R /XYZ 74.4095 793.4011 null] ->> endobj -384 0 obj << -/D [678 0 R /XYZ 187.6529 441.1371 null] ->> endobj -385 0 obj << -/D [678 0 R /XYZ 242.2172 180.468 null] ->> endobj -677 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -684 0 obj << -/Length 2356 +696 0 obj << +/Length 2234 /Filter /FlateDecode >> stream -xڭn#7_G ^}p2fcH&mnol%A?],:i'fd !+?_py~w{?RșIS}XHmJ8WZ[2˗ [ۯ_ˢ=ԫn?^'c״u8 ~V=!=eB7bLY?|?j;T^].}R Ӽ.ClTG{'g㱢jhɶ/ߕ]a)i7[޻+RoROGtW-k %/3\T/X3Mc;ۥ8Ą ]`D[]ܣbvⷠo -UT"%EZV "j{>BY% EdZ;XƃDi)λ0!Y' -A~WZbXPrlTNY2$ff!eA ags&%'۟֩Z Z_ 3 -ŰJŅDd)A]582YwGCK{b9|E>^Y O4T9SFS"2΄@)w-?Av]@Ga@um5yqjMtc>x),!7\3r+D%|rnz`߃H;x+ZZ# A?3vRI* b^͙2o`7ǫ}4X#"r>;h -XM~@,,#Cb w;]>X{f4CK?|íDY)Uл9Y27, g4SX -検s@r<ǴP|ELB+&>j0产~ΌI6%K7|͌ĨE|I5{x6YG Kр$ǘ)8>.5Ժ!O%-̟nK;MZgdCcDحwEّhz.?Qr|hh0Q޸35zc潇vjg XLm)nP g~~5>pi?҃.lUnI) h vwҠbPk 7#ab(?"CW_AI -mgyFÓu)X]2QĺvB ^9^{gR\;sA)ԖL< -8{%j=c`p~:l9]҄|><k$$@0NyθNUC L D M| $endstream +xڵZKs7W̑2qvݔ7VaD͚3{A9#Gv FI*`bcOY]t‹\Ӭi-ۇKG?/U7v|(edXqJy(D*mgDkkrN9 ^P"U(DO%9^ln8UTg}I!-8brוfbϔ*IUX(6yj¥( __5~srLAs%a>rcB) *MrJ1ZQbeնρ2K *Mm$FJwy3-E4 pH0l눔 GR2~T%%tb ߑA|۲BnQ.?7(1΂3ܱIt¡SD)2##%9|4"뜫YRzttqac2#779±p){Lʇ)'Ig0?\ "Iϲ\?‘D]gB070'&9 +8cgBGnvܜ |Cgր(?!~ #L9=w&Dxga'Ga6gu].6t5tšĠ&\ ;!<:}arzՂB# xKIt#9v,&xg`'rS~~9p߮0iœ)t1 Et #L_+B`I E;S`0?!<30#|5~.$e'9r)gB?'|uS 1]du ND8j|]$ByO F,v ־{2m-d/.Vg u|f@VjcZ5] |rFSV$/=+8?]…ݴCzWe<,tןu] p?>UD_}|)gHv#LPym"⠱mwG ]w_^ݔSe2hDUWVڴy5?$]7v8j8JIa]p눕/<:})-'*3S ,ARV7\-SxtKG#+r+}06}Ʊz}R@3@^D?- Ln89ŕubnZ+oB΂t(@kgN?r+~n:CHЮw!v|}*>Y{wQAkEͶмiKc9 5"VP8, Kj]d`&|( VmG:y,Z?HϷ4t"斢GA.4R^24{S@5Ox(>a4 ~vC*N'DQݡ$lj(BtScUg&bc>n sVB]G(SmJ;cXp6۱?e (w: +!dzbt' ]  |\d+t Xa biF^\`g/.7 !LI/5o k"_=8#U,"߷iŨ,o? CVmE *cAǚ qUyu_Bd~C [PvbEDw4 !Tn*572 T(,r!uendstream endobj -683 0 obj << +695 0 obj << /Type /Page -/Contents 684 0 R -/Resources 682 0 R +/Contents 696 0 R +/Resources 694 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 666 0 R -/Annots [ 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R ] +/Parent 702 0 R +/Annots [ 698 0 R 699 0 R 700 0 R 701 0 R ] >> endobj -681 0 obj << +693 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -5428,226 +5448,181 @@ y +9s&fG ұ}"Sh8ic-= eX/Z[[ һV2D=OT>Dc9'Y;(hsLa> ->> endobj -687 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [350.9667 703.0042 370.4075 713.5865] -/Subtype /Link -/A << /S /GoTo /D (table.2.14) >> ->> endobj -688 0 obj << +698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [369.1027 153.5425 388.5435 164.1248] +/Rect [369.1027 214.5472 388.5435 225.1294] /Subtype /Link /A << /S /GoTo /D (figure.2.24) >> >> endobj -689 0 obj << +699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [421.8421 153.5425 441.2829 164.1248] +/Rect [421.8421 214.5472 441.2829 225.1294] /Subtype /Link /A << /S /GoTo /D (table.2.15) >> >> endobj -690 0 obj << +700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.795 135.723 146.2358 146.1976] +/Rect [126.795 196.7276 146.2358 207.2022] /Subtype /Link /A << /S /GoTo /D (table.2.16) >> >> endobj -691 0 obj << +701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [164.3153 135.723 183.7561 146.1976] +/Rect [164.3153 196.7276 183.7561 207.2022] /Subtype /Link /A << /S /GoTo /D (table.2.17) >> >> endobj -685 0 obj << -/D [683 0 R /XYZ 74.4095 793.4011 null] +697 0 obj << +/D [695 0 R /XYZ 74.4095 793.4011 null] +>> endobj +397 0 obj << +/D [695 0 R /XYZ 242.2172 588.3079 null] >> endobj 94 0 obj << -/D [683 0 R /XYZ 74.4095 511.9428 null] +/D [695 0 R /XYZ 74.4095 553.4796 null] >> endobj -326 0 obj << -/D [683 0 R /XYZ 268.1431 256.4511 null] +339 0 obj << +/D [695 0 R /XYZ 268.1431 315.7042 null] >> endobj -682 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im28 681 0 R >> +694 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im27 693 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj -694 0 obj << -/Length 2008 +705 0 obj << +/Length 1744 /Filter /FlateDecode >> stream -xZMs6W(U-n%[q!qHHUi"U*53U#|4& Bqı e Y؝mjtW)HƘqwb? ׻ҝ0㊟InT $\`SQ(ǻx_(}3JV,R'5Z5~KvY ׃6N OG:hpDq&Aƈl9X 0IҚoKJN$k~01塬 YnPƕ-c, S>>?PSChTկc ;~r0=AIH J5P*:,jgNOg% -6 Ta:[gMpzk5P+brSX8 ϥ=y{&e]nU -{i3x;O5Oy -ٷHuZʛx;TgWU f-5<(NM,vd <HfA 2|aqa苜V1!Q+ Jd }dţ7gZG:5PPF8t1eH(.fjL<(8U{K -a=S~ܦL[A=/Mſv~܎\x獜Vd*^ekեm8գ%=>:tvcnqCu6ښU>u@ ;6w96 ,7Y. ޲6TO.@m71xosv5W3Ufrr$/>$mz6Q 1F)cv8/j#D2Df3YrYqY'Y;">=ޯ w ,+H %O_yja.eGH -{I-9__0+Eendstream +xZM6WhӤES6䠵ۛZr_ߡ(QeQNY~77|"% $QqlD B~-|Ilڂvw$)yr! &0n.>U[T%ET`|b"xyeqխ'#-%.K%B$IUnQ#͘IRB\} @_/G1&)u;[Y$%X!nnDD9I*%LUWj*RM$JhD+{^T%%XÍ%I[ g2 cs Ԅ r EAΙbr*EȌz):Py% Z_L\ L LA]Bh%giu)gaͬ1YR&2Jdϗa'xm* *.)S3&`4=3ȨL3fefoz$ [ +*Q3"FЌv3l%exs|xZ(~Yfweu:>EN%DYaXlUSE/î } |]^a{>NA2l?<#3wL!aa"t)1[H8ZmF̣loWAZPd|L!IBA&50Z>kg/I2 0=v_ S3H0$qq-9rd-Lkʙo+>C(6q5d7|.V>(Xz)[% Iy3`pX]G!g"! NV am 5$Oĩ}I4Qӯ1ūʍm^asC}sUg.iEQ>&ң]Q!GϓaԆ[6C[>ٽ^~ʋC,_vrWn=F}gx`8\( EM7@ksyoXS@mcV|/w&3{7wc/}5C%`/w •B2:!ju<> NһN7G*ױ"F7]5M6]7݀rxos'˩&;ڧSlK7tr?k+5i0 Щhm[tm]mωGj0-f][NM=s:CgQVW=*O:pngkc ~;P-l*Li1jw5U/F!J!N黫y#0LtmuMvmwrx叡67v*}sc}e;*E*y[Xͧ:@Eh`jX;1XGHkݜٵ.Y + iA:Dk:Juj]S NDX#yd'ʼn}+ /R^ה3 lZk'mc@FpԙxA ģlb@@┾zWlEuMlrxj!1$EiqӂD;AΉG y NvzI|尡H +  6<[G7Fendstream endobj -693 0 obj << +704 0 obj << /Type /Page -/Contents 694 0 R -/Resources 692 0 R +/Contents 705 0 R +/Resources 703 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 666 0 R +/Parent 702 0 R >> endobj -695 0 obj << -/D [693 0 R /XYZ 74.4095 793.4011 null] +706 0 obj << +/D [704 0 R /XYZ 74.4095 793.4011 null] >> endobj -386 0 obj << -/D [693 0 R /XYZ 237.0751 660.537 null] +398 0 obj << +/D [704 0 R /XYZ 237.0751 660.537 null] >> endobj -696 0 obj << -/D [693 0 R /XYZ 74.4095 546.2409 null] +707 0 obj << +/D [704 0 R /XYZ 74.4095 606.2873 null] >> endobj -697 0 obj << -/D [693 0 R /XYZ 74.4095 457.2611 null] +708 0 obj << +/D [704 0 R /XYZ 74.4095 505.5151 null] >> endobj -698 0 obj << -/D [693 0 R /XYZ 74.4095 372.0651 null] +709 0 obj << +/D [704 0 R /XYZ 74.4095 408.5267 null] >> endobj -699 0 obj << -/D [693 0 R /XYZ 74.4095 301.0125 null] +710 0 obj << +/D [704 0 R /XYZ 74.4095 325.6817 null] >> endobj -700 0 obj << -/D [693 0 R /XYZ 74.4095 215.8165 null] +711 0 obj << +/D [704 0 R /XYZ 74.4095 228.6933 null] >> endobj -692 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R >> +703 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -703 0 obj << -/Length 2401 +714 0 obj << +/Length 2403 /Filter /FlateDecode >> stream -x͜oWo;;#A-EZ ($t Ӓ+R)࿾i(r5F!C.&I -&؂T<\~H5m8PxY-ެ3[fTk=]uނ AwȘ0d* ʖu@2%LY5BfpG.Μ=]tk#~_Ζ}~1nwI#Y!dk#RTk:)|t 8mvt~gOewsխ]7}גmwWEWk߶*esY|9u=1/|ZkfVݝ˥+fy@5^ӷKyA$X}bu*ÕY`{?tWE0KU4%pL,j,"hwwgUwVn"h뺉 -n4^qMMSp!sH8pn%KcUmbK:S;bꂱ5ooVu_|_}==󿺬yX&*$-UJ>LTiJ1S#dF GpWgܑum ^Bʭm[ *afPhv~LR0$4 8"0x_\LtUEb,eǤ)Ycz+"hx)1G鄘F469xݝNw ->4ǀ&UiJ1b=Bp|uQ)}* Awԙ0OqPuԎ>/:ӔFc -UUH8: CqѶ?|d#XȞ۠qM!NYD$<jզu{C.*)yCrSU &)II$ ro1>%TN'd;7,`udBoJ {e/%[U)eO DM6MwzoKee3=j -^J$3-"R{o4ה(Ȝ$Nb|3R6|5hq//שz\S̤F$fzYs> Gz"{FEuPz.#zu \SJ=)!H8jLn ˠ\T![ ͪˠ\Sl2O'8n|m7AƇpM-u皂60n#|tL8i{Q>CJcyvtBL3Ro!:S2S/|U}vVTq[0)6ꮰ`[O@fBXY;{)fk9?.%mʦh_` ,I!g]G_|%r260I{4 -Ar5w0A~o":ڏϩ("6/ :2\e}}7_BK)59e.(&y,5mS.~ _'?I.?pdʋK"(F}mZ2Ygu\ͨ{!1QaT +2K-Ie뀤e;(K'nPה1727Ms;(YU-HON טYu}i~>}bN7|T+l09bPM>)%OE$lFု!#-@{ 1*~LtXP1 3+BGVWc6 aj|/ ÿU>DP(\T0J*^FIH}pLNaU8\yE$lf#qy{ NiDccH/ytW@_h OKsp hrQ5_s\Gȼ 6/pWuWgptG + Q@~a3Mi9PU٨m9UkWUK#N)o˫*LS.i8*,̂IT5Rr1JUd>֩:UuSV + BT45/m`IL2`  +uP.!9% Nh&*xz݊fqQ!"{&!wsq7AƇpM-u皂60ݤG&pp'|r 鄘f0ޔ5Ctd^Rf5g@]tl@4l圭BsWt?^_ӧ;e4'wOn2E(:Q`L*{\Ɔ8VkEzj}~Y{َܰ=yendstream endobj -702 0 obj << +713 0 obj << /Type /Page -/Contents 703 0 R -/Resources 701 0 R +/Contents 714 0 R +/Resources 712 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 705 0 R +/Parent 702 0 R >> endobj -704 0 obj << -/D [702 0 R /XYZ 74.4095 793.4011 null] +715 0 obj << +/D [713 0 R /XYZ 74.4095 793.4011 null] >> endobj -387 0 obj << -/D [702 0 R /XYZ 201.8959 171.2794 null] +399 0 obj << +/D [713 0 R /XYZ 201.8959 171.2794 null] >> endobj -701 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R >> +712 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -709 0 obj << -/Length 2651 +718 0 obj << +/Length 1608 /Filter /FlateDecode >> stream -xZݏ6߿t6.b-r{H"is5hyWՕ-'oZj-)jp8|PfY.Vr+`lve7Yh63j-gg\Z"eBo(>UmY/29'LQ:*w~MY0:?E->\x~-8%FkuZJT:eMrG. x((dŻtv //xYg 9኉8R_W'2F-Ɗqa~"aeLhLkF l35׉4Dhg2 ,KYު謁=YFr& -bS` 99R:[CQyO/ș%)PsEѬޏs7U=jW!Q"-:Y*knR*Nx>Dž31FQҞc59"Slu֮sӅ~,5oC8fXes[N BrVD$B QRʈ3. gT)Dj1DMuHgq05nmƺ۲? Θ0zmw Nۺo*XX]Wn808R"t -KLW)*,A~Z7$29aiZKvɶr}e!WϜѐ}BDAsF$"'Sr g.cZnxu]rYeUWVG x3/e ~y ,=pѐu\t9 -m9t+7Ἲwj*E'J2r5ǣ -È{FUCkKaon4@έ#A5=띋Y AmubV_%*%\l*ωɵWUGoa ϧ>+#{t6 vfV"]0Û NeZ@mFMZ).}Jb(> GD ?yxJ\(N䪔+a!T$ICD2?/lPrT+0DRO3ƍRϪYއH||/rZ˷4ɼm`~`ǸtRO_0g -օ1ރP!U -(7[dGs̐ڔNx51"r?Aw~U8Ἵ+ݕ_סr@rqXF{GCEv'0[&` 6$U]iաZf$Oq,,͹8+&X`v7:OY3>Ƥ _b/oB=lݕ7l/V搂<;`ڏ0!HJuaCBr6o!dظ̦mH -@mp`?: -ɱOvdoP 61JͿ"0 5Pt/'V/4endstream +xڭ[o6)78/.[ѵ5Ò<(Q̲[ ~1m))*eO/&?)86"S! g+x6~`wyj|d)yv% &0yrz/mY/rE.0__ql׆ ;18 JYNDPRKqLp42SB#ʘjG |?Ȑ6'0Bh\#FX |t_"%Y&>#R'ze\5ōTs{0.eEd!8YyNr [0](ag0(IdO/\] or9K̛r|-7m,"FR@+8#j$8z%XNJDsT&"b2}quT_-p@ļv`l~_ߝNPtYow o)몸euK>muS#,QHa0e)q:aUL^oLiWKA&YWYJK&&ʶOOÄ`۪xI"aHÑ΄$.Gc2u::z<.u-ZmCt穱ebRjRchCDDbQIԤ$>ǸIer3θHN(3eSe,%NXh` x%ɑfpB cE=6QZpto +-b%'Wn-@d'k,9QHl9Y;hf|g^\u;E!AIRECr-&][ 9 +JW{Niwoʪ}ʺ}( @GxW bO1pk `& E3zg&!m`hglꂄ^l;~ߢ@` QXF3J^iU6L~VE!_+[KZk(j[» e{|UՄrj-kV]uMƮs PA C~ ?$%t ݰCU?>euӔP@.hj +; AmDMr4s}[5qJxa1eHyUnj_W'`tnn+䮣,x\k;//=hVkiH_针2Q(!!>˪\\x7ҵBzPpA^!0> ޹>f&^ո}q[]8`kPѣ.Ceg1{2۳\2\җ^+_Aiendstream endobj -708 0 obj << +717 0 obj << /Type /Page -/Contents 709 0 R -/Resources 707 0 R +/Contents 718 0 R +/Resources 716 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 705 0 R -/Annots [ 712 0 R ] ->> endobj -712 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [277.354 232.4744 296.7948 243.0567] -/Subtype /Link -/A << /S /GoTo /D (figure.2.25) >> +/Parent 702 0 R >> endobj -710 0 obj << -/D [708 0 R /XYZ 74.4095 793.4011 null] ->> endobj -388 0 obj << -/D [708 0 R /XYZ 195.1712 658.3383 null] ->> endobj -711 0 obj << -/D [708 0 R /XYZ 74.4095 602.9146 null] +719 0 obj << +/D [717 0 R /XYZ 74.4095 793.4011 null] >> endobj -98 0 obj << -/D [708 0 R /XYZ 74.4095 452.5377 null] +400 0 obj << +/D [717 0 R /XYZ 195.1712 658.3383 null] >> endobj -102 0 obj << -/D [708 0 R /XYZ 74.4095 332.8787 null] +720 0 obj << +/D [717 0 R /XYZ 74.4095 602.8709 null] >> endobj -707 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R /F66 564 0 R /F72 575 0 R /F62 611 0 R /F65 614 0 R >> +716 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -716 0 obj << -/Length 1474 +725 0 obj << +/Length 1805 /Filter /FlateDecode >> stream -xXY6~У D oMIE $y͵Օlgΐ,klE 9>e,3HTfz3 -~Y-:br{2K2ɸtD(ʎB/o˻jy9oE3rm._^\j?J)5Jhm͐20jmVP"U~͖jV63(±n]~Ҭ`NK ?/, , DX#2NA\jJ C:(·`pm=}.{Q>Q,.uJH9S9G0FRpŦQn!ڱu\.0U<4.N"ߌ;N -E6ВKƲВA!i8g*~;ȟ-P"17&lIRԤ}+%?4 -) f Y~_Hn)0G+ĻZvqwaUď ,}[ďC\ )Avv!G(b?P6u]+! #! qRL |$dUB\<" B[P5f_)ב4M )l p}bPVm}$^ 0ĺ+ -u\S3EI/ DL -jnE - ՂjթP*0V "<\" - EG&g(bww^q]Hm@!o[-|ie-J̿P*B'ܞP:ߡTB/nLX2>PfnaX{?iGI%=SPY LS| הF;}/j=S_c%]lMchyOǎC]Ƙp}h[pNe*NCrg%$|d1u)zr?x3,9h Uh{G.|1ӎ5. ܔ8R?_>~u+E%q^${2`Dݕ_yd ` JNg C)kCqh&G h7b,W5@c89 c]0a: -E82YUg0yMɖS@bL':vTتZ$VpQn'%%J>{ -P\YxI- U@?^B*4B4|Btl. X˅oώ`EIqҠF[uj֩Ό~J-HJ! +1;3{zUބGR1}uX`Fu Q&žle¶ d3Б8W&p S:2BǗ-M<\K/aµ/E6v]1gGU K?D'V\"x]endstream +xXKoFWV 6nb->6F{HrX\[,iʢ-)2"5ܛ, +! }+c O/NgE昷VgיԞ)ŃЋɏmنt&s7l:3OBM oTvUzEHΜӬ2mlͤ`ֺ|=K.X}6y!,:x繌HfLpi(2c'LpmjEVA{Y"g^hi,1JݶbDT;eQwMJ>E,&1NŤsӰ^(u ae!&?-qÚ5dhNXS^-;gC ݔ~B=/ETdGcBj@ +p*h@I2{Z Ο1~x@,5;<]9.hoQU[âծ7$:ZŔ8`\=9Jr]cԀ!7}y@b}T˽X4mXB--3B 53Zf) y=$g{OL*/ɛ_\F9KddWD8-ٟr|Q +cIm=a i}ك|~)!U7gy4_Dsɤ2X.{`C*gʌgC\,Wf]x @%&}c:ٓt cBs$TΙ5fΈYؽOz09%3',~Vbޥ%;| ]FubEjm({ dtZª ik4MLU;v&lجºՌVh:iO^bKMM[~,*,b,7WlWK(qΕ!Ħ98t`/cEwR[YZXWG; Ҁ<gx^})8,Ջ<-oSc0Y:!x#z,4{&8 uk׀B,O(ܕ}l}WpU5BД}Kp]xF:>#~/cZq0F%٣(?kH8?p^Gu+m -mM֡ji#ޗ@K腥݆8.2D`6{aA&x]3r7GXT"ivY$u|LfqRYˊ:ybڭMUЉ7x8f ˹ܵbGڴlTo8wV0@|8ִ5( +MʇQKi-Z&=!5$W3zn6.`bb(rr6p vrxMAAۉcYVJ.1ܕ)׈jcD`ZV}1 .)OP%)G'1Hj"ƄXdףP wj_cRrсz_=X9̱=ġ/-p`gZh*r8bX"R*VJi;v\eaƪ^ݤ;Viǚ'!HoPW~5FhI(*~WexT_8=廮$wCQ=^"]/c #4#K&ZTTweZ,UΜ&P z%~0ܑ. +oJA* K?aU=V".0#}_92 \6p(9m}0[#m/4#M endstream endobj -715 0 obj << +724 0 obj << /Type /Page -/Contents 716 0 R -/Resources 714 0 R +/Contents 725 0 R +/Resources 723 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 705 0 R -/Annots [ 718 0 R ] +/Parent 702 0 R +/Annots [ 727 0 R ] >> endobj -706 0 obj << +721 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -5773,7 +5748,60 @@ tq( \y C쉪xɓi:wz*Wu̚Tpšbsb5\t_G9= 6lƌʿ!oeT txt QA@Dp@ޑjpendstream endobj -713 0 obj << +727 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [264.3954 311.9708 283.8362 322.553] +/Subtype /Link +/A << /S /GoTo /D (figure.2.25) >> +>> endobj +726 0 obj << +/D [724 0 R /XYZ 74.4095 793.4011 null] +>> endobj +98 0 obj << +/D [724 0 R /XYZ 74.4095 771.7323 null] +>> endobj +102 0 obj << +/D [724 0 R /XYZ 74.4095 663.3429 null] +>> endobj +340 0 obj << +/D [724 0 R /XYZ 292.0113 399.7893 null] +>> endobj +723 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F67 558 0 R /F71 561 0 R /F62 609 0 R /F66 612 0 R >> +/XObject << /Im28 721 0 R >> +/ProcSet [ /PDF /Text /ImageC ] +>> endobj +730 0 obj << +/Length 2101 +/Filter /FlateDecode +>> +stream +xYKsWȩ0|*oy׵8ʮj 4CÑIʛүO7Ia@_ht݀DODf& +!+"Y:.2\< }Z>T7XMb8-M\UǍc]v׃b#9TJSME,MlL Q™*r$]|̣~wgg(dtgR"W(f9yaAz13IV`#~)y(cLge}+4a髏GYDߜ@x,_"ED5O{R"BY l' *q@#p[ջfTpEʸt,- DX2yl!6Ķ yfQsfɊETYzpcсH%RgUNM\ v78W\ʺw_-<&4{{bOq00 Lw^4Qc< <ɘi镥lt +*;5bc5sY yʒof_laqQd"+$`E!+S_vGLJ +~0=dTh8 Z;o>w6Du]X}ݨL{~;pLC"`DW +t^d@D L3IA[۪#1nJŇb]9ai +{2\a$"/⿬kt*OFqKK- 1Beý=dr+JF3E%ܸasa' +(.4 |Rk,Q2 Sӈ!*. +z_)e#bK` eqs:ZtU.@*d/8xPӌn 7tO2fZK:\VZ܁+ [L +ϖ#D!S6RLrhBv]zrE,z<}Qf&\l;c&:A=?gr1Vki5UH4_Vq +~ )i:yqL3PBav`.i>T 4"駹[%Mt'}(tLW +ߎhCt=> +ȓn{NW:c:c"<Գ(B7?8h ~`? nQuLWWc~\AAnPx:5rɠx:Hp p}ho-0`_&~7xjK)p,!P N8sr/iW0R`h^ם]Io W mm{U}㇡kI " CO\SE[L~" j %-a>-:/= +]Sh{Ԁ(@9mf.i:wv|p|Kg]CHdн^R1}ZA(|0õ|Cx1Ӳ.e{`RBZ2+kPgipEFOk5Ѧ덐\-9葁Ki#l5<9:o7͈xYt>4ci(endstream +endobj +729 0 obj << +/Type /Page +/Contents 730 0 R +/Resources 728 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 702 0 R +/Annots [ 732 0 R 733 0 R 734 0 R 735 0 R ] +>> endobj +722 0 obj << /Type /XObject /Subtype /Image /Width 629 @@ -5890,437 +5918,456 @@ zMւ AG㱘NHũiW$ɞ={N_9rD3uᯑ%%%칼<--ܯu̙{KWu}aߢ#<sUQSi/hXfAwmtF"틊UtZdS͊זcvq@X]t+ }njꫯ*X4as9lvUS..bx^<4x:‰'A+++``J̊9U_D|BNרάY|gʏtqyOs:@dt4]]hPĬc^͊.'EI҉/UsxX|U7'լPfpHΰb z5D٫;!x<΋w9zU7bլٱʖ:l4Y1U_N5^|GaAy1> >> endobj -717 0 obj << -/D [715 0 R /XYZ 74.4095 793.4011 null] ->> endobj -339 0 obj << -/D [715 0 R /XYZ 292.0113 569.5529 null] ->> endobj -340 0 obj << -/D [715 0 R /XYZ 296.0371 266.0738 null] ->> endobj -714 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F66 564 0 R /F72 575 0 R >> -/XObject << /Im29 706 0 R /Im30 713 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -721 0 obj << -/Length 1399 -/Filter /FlateDecode ->> -stream -xWK6W*p[]NoU,ZF 3L_nZ0`}Ja%Z_wkĆß$1y7I`!oJ p4E_]?eě뻍34FOu -#da9~ sP\ݱ ?_XKRcE9at:cI>+H,YWֆ/oTWU{u0 -"a>8?e*|S$ypjЁm[Rlm(u^d}Ra!HX&}k;{8נ:,Zbfd:)?fjp̨T{[*~4#HY˚5؈)(V*S,2cfYKܪ;͋2K{X+#׀zAno7J%@%*xWj|DV=2 %0M3pיKO(aߔčų3Ƈ -D@i @p];kQx> +\=eo~J7a>:|6ḮSDҞ*.?߹^pD -%R1)4X+p)7IuҲ-mcI"X<:+bP>(o}F)p|k2\l7,W LHd5v@3[˱o^Xםc$~ -?W?Au3םWմZ D٧{D oyt9>%J1gur.m=d PIJ##) k3e8&v,a"cy*m:Ye,,Nc파'/a^ix $3Z$:򫿘?pendstream -endobj -720 0 obj << -/Type /Page -/Contents 721 0 R -/Resources 719 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 705 0 R -/Annots [ 723 0 R 724 0 R 725 0 R ] ->> endobj -723 0 obj << +733 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [181.5419 677.8541 200.9827 688.4363] +/Rect [181.5419 342.4494 200.9827 353.0317] /Subtype /Link /A << /S /GoTo /D (figure.2.26) >> >> endobj -724 0 obj << +734 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [338.3391 539.7288 370.2252 548.4999] +/Rect [338.3391 204.3242 370.2252 213.0952] /Subtype /Link /A << /S /GoTo /D (cite.Vorlesung) >> >> endobj -725 0 obj << +735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] -/Rect [396.1444 539.7288 422.4804 548.2936] +/Rect [396.1444 204.3242 422.4804 212.8889] /Subtype /Link /A << /S /GoTo /D (cite.Tanenbaum) >> >> endobj -722 0 obj << -/D [720 0 R /XYZ 74.4095 793.4011 null] +731 0 obj << +/D [729 0 R /XYZ 74.4095 793.4011 null] >> endobj -719 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F66 564 0 R /F72 575 0 R /F62 611 0 R >> -/ProcSet [ /PDF /Text ] +353 0 obj << +/D [729 0 R /XYZ 296.0371 569.5529 null] >> endobj 728 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F67 558 0 R /F71 561 0 R /F62 609 0 R >> +/XObject << /Im29 722 0 R >> +/ProcSet [ /PDF /Text /ImageC ] +>> endobj +738 0 obj << /Length 1971 /Filter /FlateDecode >> stream -xڅX[s۶~ϯ#5c1c2M'C>PL(/uO~ REy.^ 'IA-Lbٿ dN' c?_fAfidzZU"R? -È>޿{#@-b"IO66.+XU6şϥ5t}_4yٱ;.R?pkEus?dmnRy/2;]&/W"^"2ouBmB9>*9״uft3o >HL&Ҟpgh(,%?K\lDl}|Ԇ l9me˧K0tٰ}VLyK -tw0^B́@v'^ {msÚV|_Lg(&-3ۃXڬ;p֋XxO*kLQ Y_ eTO2Y"퐓И/ٹe1Aᑼv5y Q s{kLf ~,STspIǕsY/=ἋS ֖Ozwnt⡊%/6I,Xh̹UĢaG>d|uZ[ OuTHCGs8Pg-~ B榜ZrQR."4İ!b↲e@qaE/i -ZTRzːNLOU"_DAЦEFj̰6 :o' Yik;i,'r/ZR8IR7A -NBO4,o#~X/:') >s%>ԕznd/*itx],ƝiaA Zttk)&#DB?ODq$^LVD|eB?p] ? Uzv@$SYR[έPʏ0<ʽJf )~n3r;*ԇ.Les܋1w^EGO0^(v/|2*2ru&,rfK3`dvu~T:OT#2W|8 -j_}k6w'63!yhvn>ͅ_8ʼ{0ƻbq/hcPܫ׬QW'v؉JOE`o#E?Ut%.^OAq.H<\2>zDyhJ)ɯ?b({<#v $"(E XlE /Չď$ŗjY'ɬ3JEQwod VHhqӻ-uJ˿`U"\ب\kJUiuI> /dX'I45ch82Zjz/2]&/W"Z^]"MBR>j9״ufYVo͡$>ʅZ~.SiNs3klvSx__㟥A.N7}Uu> >*[6m?c&,֮&hq]٥E۾CFvw?T: DzXIPBR鲦ʓiCnM4ͷ a;Vcں߰摜5 coȪ1-`5GL1'&88 d|u:S OHCKuT[Pg-~)BZ +QQ.",40!bFhi@š_5! jл]Ftb}Bq/"b?6ҕ).26Uk&gQzINis(.:r"(]ѲJNⱺ><"m6W #v8M~h-6u Y?JIrEM„b;ަ⇩- `\8eLR[] m&>EHȶ=|2*-oWaP?KFS 9 Sm/ՎJWLXSI\pZp vq젭 hR.a(}1ES.y77!\- +k苩Ygz0ʝ6XtuQL7ڻDCpNi\{UfXrۿA2}4R@1d2~G eCePԚQ<XKccw)eekûbD}z+Vua! u.$$}x sLo>JA +NBO,,o#~X/:') 9s%>ԕiel72,>^B<ٮVį|e!L?q] ?츙HVϤ^έPQtj{sR\gL<~Uf> Q֪ԵҲ/|# m``P0^ZÏe +;65U dM2X\>gCdf~LZOT#27q:nڪ+>5쓲i֐nD=Os26" .8$xk(vjo5GO^@تEqMW]yiu=q*-ƥs}kԴ_?xP +4~#(5,qzDtFᒹ#aKVO 2@/ƅendstream endobj -727 0 obj << +737 0 obj << /Type /Page -/Contents 728 0 R -/Resources 726 0 R +/Contents 738 0 R +/Resources 736 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 705 0 R -/Annots [ 730 0 R 731 0 R ] +/Parent 742 0 R +/Annots [ 740 0 R 741 0 R ] >> endobj -730 0 obj << +740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.4132 329.7272 87.8688 340.3095] /Subtype /Link /A << /S /GoTo /D (table.3.1) >> >> endobj -731 0 obj << +741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 0] /Rect [445.869 244.6188 472.3305 253.1835] /Subtype /Link /A << /S /GoTo /D (cite.OOS) >> >> endobj -729 0 obj << -/D [727 0 R /XYZ 74.4095 793.4011 null] +739 0 obj << +/D [737 0 R /XYZ 74.4095 793.4011 null] >> endobj 106 0 obj << -/D [727 0 R /XYZ 74.4095 771.7323 null] +/D [737 0 R /XYZ 74.4095 771.7323 null] >> endobj 110 0 obj << -/D [727 0 R /XYZ 74.4095 314.276 null] +/D [737 0 R /XYZ 74.4095 314.276 null] >> endobj -726 0 obj << -/Font << /F26 198 0 R /F28 201 0 R /F61 246 0 R /F33 209 0 R >> +736 0 obj << +/Font << /F26 206 0 R /F28 209 0 R /F61 258 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -736 0 obj << -/Length 2284 +746 0 obj << +/Length 2283 /Filter /FlateDecode >> stream xڭZo8~_Gy-{"^" }mYs|ߡHʴ$Ikhhj4C~3͐6aGF Gb o_ edJP&>|#%%}b9 )UJ{)wc^@CGHHh*:c$1Ιl饂mO?x7z7#`QO}H^¹'аL(@Z1Ä3esm].T) GRԥYߺO0ve" !5Z:8x=p=X-~bQ6qKfkDnXh9헺D{49\q^1-]h&ck[MPCSզ8TԝC)r_u_LFo>(I~ Cߋ]?fV@@/7: Vv}˷Y>shԊ&VnmE!OGCUf뭛iI7 lи)MX8֧g0怟ӼǷ l벴uf4Orݓ -6eG<{m?۲us A,ur -+]4IІ$n͆FS=X*q|MOw[kv7S V}l>+=0S6~vRh.eGj=qb:ڎ(|e-0tVg%rno|W -ánݖ[h~<㖷v8κ1U;3ʳ051<H<.z>f3~G |2X6Q6eN(O~K')]1e$ev&_,bhRځg >dmu{19d)j}T6 ~l[v9e"% -ck'"]Y 4ݠ:TgI-ivc\hmCHLbb:j>+x߁9ĦMQ=mh וk\4`H -@z}h .(Hb.y%Ʌ7yċ]H#]g<Z =ygmfRVt]8%(RK1I$nz^/]'^-g]:tL0@Nf^ -(}un t/IR!GDKH$,!;;Rm-əv5[=)yז:23t|'g;WqmFK9Ůn68/6aZ^ʨs=񳽶*wS|ZoV+S&I]36hwc^@CGHHh*:c$1Ιl饂mO?x7z7#`QO}H^¹'аL(@Z1Ä3esm].T) GRԥYߺO0ve" !5/v<Φn'LLż:`w-ՙsRCgbڴX&ZP*ӭإZmcgu8O +w dssN0}StrvO+(u׬75M%6)$.gZz J8Kd+~#p~Ihr bb=zHVC@arD{k|`]{2Ҁg p8۶@WKljW v@{_nW$)/8_.BY#Jw_{2Dݯ.[xGCET .f A=1KHTAKrƽ>xEO +wyhg| eUnA=i\)ђjj ΋McC+2\Olcebdž[fJIsnmg׌Z/O]Wg#P-m +{R +i~; vB=P1[endstream endobj -735 0 obj << +745 0 obj << /Type /Page -/Contents 736 0 R -/Resources 734 0 R +/Contents 746 0 R +/Resources 744 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 705 0 R +/Parent 742 0 R >> endobj -737 0 obj << -/D [735 0 R /XYZ 74.4095 793.4011 null] +747 0 obj << +/D [745 0 R /XYZ 74.4095 793.4011 null] >> endobj -389 0 obj << -/D [735 0 R /XYZ 288.8373 559.4163 null] +401 0 obj << +/D [745 0 R /XYZ 288.8373 559.4163 null] >> endobj 114 0 obj << -/D [735 0 R /XYZ 74.4095 235.9504 null] +/D [745 0 R /XYZ 74.4095 235.9504 null] >> endobj -734 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F33 209 0 R >> +744 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -740 0 obj << -/Length 2244 +751 0 obj << +/Length 2622 /Filter /FlateDecode >> stream -xڵY_6Od fH%aSMEzyŵeגf?pHYeyq"fH93á,fY♞Y  `_.D ˒Dg2L)~wekB&|9nKKw]e7nK/j7?w$|J%L$-`Ib>I`i,UgLz&u0錥i*EyC<ʟl~Pq#c[v{ :L -9(3$ -FVT mf !J!lA kNv6no>>uqb%GC S+I:S,Q`}9ױ!DoseY>Za\s]5]NxXG'!bDLy9N8m3+@/=:pbzS6=<J##I'dƌTݩg,,5;?Uo)$TtX 'b˦%4 -@hB>f$πLYkƮmH]MsVwu3wTMcTцi~$/(na<; oʇ5nʡk,UY -xe\ui [ۼų̫)`H̗eĩJvo ص5U /DNp@M%^~j?u{GĂ҂U>y%fQfYa ϲ΂$Q&*__SK›Yt\nC=W׼!qDzvd@(bAr0# - pzb}n eou4[7N{ Yۭ˳mU"jS)SM |Lc &<"13GP϶ZbYAaa AXZ찒FGkG A7\.l!TQz~,2/Q_*fuakҁB9:XvD\AүZ)O_$k,c>$VXPJZDZni"(74lllm䛰b-ݵ+H>{[ 0 +cbj4>Pcw 1؅U -YxS;H,h7YK_a{2?5>lh֖ͮFGG@b#vu ϫ% GL] \y5َ%4#e7O݄vbpc#xE}Croz[\b -eX -4ǀiaBsWT3hfRi IGS&bݠ5 fW'_+>ݵL% ʪO4e mܹiƽu<˺,3 "̥&~{:ǂ\CI.Bк -gc&WKEb -F.bƫj]knƓPж*!W_WuС2liu|$I=A,UN* r#gBLkJfab"JfPRӹ$UT*5eAq{AJsrq C -=) U 1Ja_߅_:;a? 0LL\5p` -#CK\TβLe&خ7)L8~'R:cN7]wJܡ dkN㷿$Rk -v)GR/ԗڅ7Y/""OOﭘd,VOn&R&3)LoN~-UәLDp-M\*vu[t&L~xo$gǔ2ml:I>ȑRR%uw$i',MS鏤d"]Y7p +n6uCPFY*" t]ޔ+7}2 NY.SܟR*#?$nܯJpu}[ Ei +6[seT4ƓӨySZn" }ƨu/ź{I"0׆f]{?/MJSE~Ϋ!|pDtNE1gٌY痝7Dg*Ⴤ7Ob< ӋMFlI '{DhJg 9䡍p2# k%ue +^wM=n6U'GHcAw4N51}b~#ᇡ~#oF[f6qa/W!Wbg+d3ګI4c8㊾]]IG2#z%0&(\̗p-b[ ߏwںF;,`Oq!5[ QXJ#H1M6׊On^}~5-ā!b%jj(H!Jt&XO*]G3lLOT.2,ϡ 9%R]hH5Z1%fB`1} pg@eN!yT/c %*~' +-kݪbЀb+Oeb=E[nrSUym]wfx\4P\$‚Xg8@lZʖ 70*v>;z]/ywAe qjQ7e&7lR;c3wz@})k".c1%>$zyZ9izC,#I;cv6>F% "Hg<_!YՃ2-c>mjP%6nD0#XBM]cs4Z9vA[=^y)P&wE_+`Jt(cYU qG ,2&Z7LV%^2u2J(?MȾs'VhO:_= g8AJ@A]nZ*MLWCMٹ0xapjQ1#$DZ)zqMx_yMMkc@^,avDV.h1BI*çbIy5} Jn/V*5k1ᯠ0RDX@dO U]s#P Xix8V#r"@ ܨ>)}Q,bRTD\T :ݟ Jnfb 3&6yeȑưP跲㱴1rESe`V#֣GE(W y=t,=*-3k@AQ] ̤6E*<Fzzwy_ 4Fk #j0[V9˔Շ. RS&R&gO༊AW ׏az1^TJ&S*wE>:j'fe.;=!@{Rl1R] MGPB:wTςUՂ4?(e(y;ɞ o5;@(Z/\1oB#h1k=X-Ϳ{X:[~2r> 2[|fov| :p`be;kWel}i5F)|e[7 :xh1;RB6dqR{EGS"*ʰ?Ђ$<)b3,=>=/6P>9[ ++M9c6Ծ .hA"dhYgZzv-VA-;.TG(f{YR7 ۛ0`dDTlՉǐ%];v/$gnZϧ{SÅ2PHT2:eόBLCy2)yXlj}(r{6mTN?!yl%{ݨ8eCUn0]9{a_ˆa\9Cĵ?3zxĖi;x^Q.endstream endobj -739 0 obj << +750 0 obj << /Type /Page -/Contents 740 0 R -/Resources 738 0 R +/Contents 751 0 R +/Resources 749 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 745 0 R -/Annots [ 743 0 R 744 0 R ] +/Parent 742 0 R +/Annots [ 753 0 R 754 0 R 755 0 R 756 0 R ] >> endobj -733 0 obj << +748 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/prefs.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 746 0 R +/PTEX.InfoDict 757 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 272.00000000 160.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 747 0 R ->>/Font << /R8 748 0 R >> +/R7 758 0 R +>>/Font << /R8 759 0 R >> >> -/Length 749 0 R +/Length 760 0 R /Filter /FlateDecode >> stream xSN0W87;"WD\TRM}vy*;=ޙkB%͍n2Rij@)lK݊Ѥ܅NҥamLE9!.۲./`53#h"'e8NEO h% PS)2 5?lYi^D1ԀC 1( !wߕOMXɵEcgⱞZ`8 $Xw%7 b#8(ge׷u_q\Y ^ij]/\ $D*f6mHfm/#+ endstream endobj -746 0 obj +757 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080806202459Z00'00') -/ModDate (D:20080806202459Z00'00') +/CreationDate (D:20080807174427Z00'00') +/ModDate (D:20080807174427Z00'00') >> endobj -747 0 obj +758 0 obj << /Type /ExtGState /OPM 1 >> endobj -748 0 obj +759 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -749 0 obj +760 0 obj 337 endobj -743 0 obj << +753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [128.8278 558.6919 143.2834 569.2742] +/Rect [128.8278 724.6017 143.2834 735.184] /Subtype /Link /A << /S /GoTo /D (figure.3.1) >> >> endobj -744 0 obj << +754 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [293.4206 297.4927 312.8614 308.075] +/Subtype /Link +/A << /S /GoTo /D (figure.2.14) >> +>> endobj +755 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [120.1496 261.6382 134.6052 272.2205] +/Subtype /Link +/A << /S /GoTo /D (table.3.2) >> +>> endobj +756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [196.0322 352.5561 210.4877 363.1384] +/Rect [425.2062 261.6382 439.6618 272.2205] /Subtype /Link /A << /S /GoTo /D (table.2.2) >> >> endobj -741 0 obj << -/D [739 0 R /XYZ 74.4095 793.4011 null] +752 0 obj << +/D [750 0 R /XYZ 74.4095 793.4011 null] >> endobj -742 0 obj << -/D [739 0 R /XYZ 74.4095 750.6647 null] +118 0 obj << +/D [750 0 R /XYZ 74.4095 771.7323 null] >> endobj -341 0 obj << -/D [739 0 R /XYZ 296.9921 609.0882 null] +354 0 obj << +/D [750 0 R /XYZ 296.9921 496.388 null] >> endobj -738 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F71 572 0 R /F28 201 0 R /F33 209 0 R >> -/XObject << /Im31 733 0 R >> +749 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> +/XObject << /Im30 748 0 R >> /ProcSet [ /PDF /Text ] >> endobj -753 0 obj << -/Length 2980 +763 0 obj << +/Length 3008 /Filter /FlateDecode >> stream -xZݏ۸o5OI}wؤ;wnӇnc+iÒ/}g8Dɲ}h"BCp>C/"d2" 8_<ᅨ[XK/wkOz _d,Oxbq_czl)jhy_ix?zM[jl>ݫǎ#%I2aLTIX X!ĕT4+ JxLlёᕞ"SW @<S)\?8Zղ`綪كnВ*T>R㮯@+Q|R_5VWd$ p{4 ?\Kr6+ Y]\^_?8&D~,ôSMH%IC=3 1+^erd\ >2bq|_SoSBaJ&LrX˫A&%JxTխ<qvnH6h-#8/9+Å# ($gϼl 7N#yyqiqʢ<1$cIń` -ɭ,F :fZU%>&rEԷ3)j̝֌1aݹ`ʥZ* -Ce-I|t{"kt'1)e"M{O7-"7l -c|f>(7`{B\E2PX3`>;籁6}rsn| < =ccB]>mt~qEIa|$tVP~*YL\41|Ps~v!JuE~~*av|\!s9doa`Jd eqZ -n(j_{8*=hIۤ>eB\AJ[ v9α&V9sס.ATm_SL̲ҥF7tBJ<_kGy[|]E"pG0%"\O4mG4S+B4C_\ ]C Kni$o2Px C]j=2KD|Xʔ}-h4m޷22M.J5ׁJݻ: a!dP(>{S@qkY2VvePv&e`r5]5ozyp4z x~Mpg&s>z'@ZxTj(j[kky_ jws dYa( ]şk͵iǣΌ}KvI޶vG/\5/T .A$"KqWqw@+NG54@bk{;tg w7ߘp6uYٴIP$S DCГ\ - ~:Hu@2Dgw'v-IHjzD >"Ja"+FƝ 9|};L]kw+M;qwOW?~xT%:o6PO1s自6nڐZișF?m "8Nfx ~Hvk.y訏42>.Ͷ8s7-@z''M1 /ȄkeGd쳾8!цsC,T }YѥkoF!,{EId(|ԅGtcLM}a2B B4&$:W޲cJDDқ]f.>(3ORn)$@.5 5n7Pׄ>NQ/rly{"׿^o˱/Cynh](v |mw4 WTuW\ L> τB,we `wV\z 9>Xa* }yŽfAF޻ qHB Ȯ}ƆL? _|_~Ή% -rB /zT]endstream -endobj -752 0 obj << +x[Y~_UdWŖK*n˕Ih>=88JR@czzzz 2)8NL% .7xgm/ X?>dQ"%ݽQ&Ք<>uV,T9Cx4܍"gegŒ.~{y/(FZJ8c9 fKJZA +ϖD כ w?H304)nno~")T^0l^ivZ&dPkL (c7 1OW EV.8fo1 y!$K, ]Û!}ˉ4Ӷdؼ;fjAP0 +JMhs3HsκFC1Tc vBG +! C.15n7v8,AX!؏ |&n--k +L Sp-PB +rJ Tnܳ??}m3 +p؛q j$NUƜ[ibM|[ֲczYgPKȽ{]F{Q6klXx>w>܋v[͍6ؓ0l|o>+g,pZh 8 +ONiU޿eV:ժR`**v]G"{ *hDPՂg؛Wև +\"/ 2Hu|9CքrKC‚vVY^Ңz.8Bm+} J׵ˆi&;MdD@椓YUl`MSJp48R H.>࿥띗Y {ghjF4w,_xXY܋ihxq  k +$:shE#ǫI՜H:9BrɁ룩j73m|?αPC⫖o 9R[؂L7OEZ燲ŠzNEv4jSż}P54 t!7AքP?7;`jAk@"*5Zh1/VYQdCW](Ci5uLi.vH}vQhM5ug@L7๙qÒ&J_a^.ώ,WuV@@I} ƣHLv0`Ѯ r@s\3yi1#9yqf{kɼvlॄ2 tBy]ICejM`p ҵdD04cb U  Iù{)hpOP3Na&:XCTSR!&7b! 5[2!`<̦tcDal`cqW0u]-%,l<fCwwpO׻ \lwM܇72­ l5 ^+^gɆR<cE3^W~KfK] +6ЀD \>M4\k"YyQ*Zؔ!\w^(Th: 4 !0LĚ(߰mڴMW^`*j;T\)wҁ=,P |lVp* >lJo=t3NbtW5-ŠmAs8$D@J6mD I7#(viVj$a$7R&*wUٳCrOx8G_.)n}>9)G,;,iriWyƌy@*e? +h=(6 ǡ9`Џ6X:GB|o"B.l>-R75&-H|{}^:qD'Ľ'^׃1˛),V{pUuᧃ.2Ws+>wI y/g[bx!PY +i`IK8xgǽkD/UoM}UYJAH2XjrS!usduN„R;/5Ecu{N?7LrS3AZe@"H(:-ݧ!^hbL`sUC @K6V"iIצ4R'1Xڈ)ݫ>8Cr */75Ze[;;WZ[x6> endobj -755 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [411.918 571.2966 431.3588 581.8789] -/Subtype /Link -/A << /S /GoTo /D (figure.2.14) >> +764 0 obj << +/D [762 0 R /XYZ 74.4095 793.4011 null] >> endobj -754 0 obj << -/D [752 0 R /XYZ 74.4095 793.4011 null] +402 0 obj << +/D [762 0 R /XYZ 205.0163 645.8849 null] >> endobj -751 0 obj << -/Font << /F61 246 0 R /F33 209 0 R /F28 201 0 R >> +761 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -758 0 obj << -/Length 2447 +768 0 obj << +/Length 2104 /Filter /FlateDecode >> stream -xڭZ_o6ϧ_*pl]f]d9䦗O)KrÙ lH"ifI*`l2OQH}ysݧ4IXnf\(5g7__Ǣ1"≞ q7٘)n15Wכ/W7S㘿NX)c"U"H$n,DZ.~@>%,Mls!EL()//bS*y<-%}fS2LtڃuLxDi…p<r4UR8(S)ZzAtHJXF!ϡ,Fy_KSP) NǼ@p52w,_YNX~, VNu*BոE-(9 @I!\\miEJRgYR -io-/M:/KY Dtj`rV(C{WcD_<4+G&`VF.~F&);+|qVďEj84~"ol7o1h:'OE.@'̽y]<-( J @~@Sn$|$8>cq<>I]k'oYd>܊D|uU)8ځW=#^q -F*u).dK~Ց}UD }W)$,9k>yp J!kBVFqSKSTYٜ|*8ur>"CUaE٘%,7kF8zVZAs-[{=b1nva? `>Vt枦#QbzvQLBیGhX>@59x:aoplJ +9r->=W;~gvfJq4ƊC IZL4jSVVMP44tx!?/R@ᐈքH7(%ɠQJkHɚо[4moǩ"JY@Ql s[uG&mu Hm^ ,G^X7?d'e4Amhl t)g "4u h^qECP75Z2j*U.}J*=Y - ͅ7#*M̺h vdf%JbB"8GN_6^fA$$cMvg3 l4 b*( ㆃFu$ /)5UwtͶ9,5N MT/2vDylv P .Ed< `OȖLO;P1lƜIמ)"Sxu|gԏJW4 3tEݸ7=v^#):LSv$:Zέ'; " T -%􆥩H%}d2 T9Vq/lv99{* |LjOU5PV5w^ d̔_wFm%$|_nZYĐ܄}+cC&Ңح^vzΦ0l5#w2_fm%{u4zt -H֯M6طظ=~go)(Rw^iG&SVs7k}I8K qaUe΀8W'Gw搒,[[;⫐+Oigpw25K(d<&$C~?pf4b(I{ a' gN, ԝ$Η?F\fXܦa=IbHn -BJ]l_puvnU?]?U]eml[7Bj]ܔʡvKS=q!@'{/j ܋&Wz_4+yn .XSdK=t!9Sڗi2wM-~O{\0}ə*o/k>0ó IW~rb֥Ɲuk]ڞy"XJCMU9UMBAG; rbЎ[hbL%$9r8?vIӚP Uū$ )R)rz*B%qb?Hendstream -endobj -757 0 obj << +xڝX[s۶~ۑf*}Kjd4}z>P&,3HWԿX$tϬb*+7l k?<.#rJwrVf3!5{s=f6KX,_֎&7ύ۸vvzk׋?n_\ݎkmŽԧҊ|"h]0kzM%9RRQk8 t ]3|ܺd*Wa~^l(Ci +3r4s!ݮHl[Up_m?0j ݦ˦qBhNZ^[MDfKZ0TvϮ=άBdfQHk6݀Ub\eDxEϾörŇ >z"ՠkP5n=7] a'YLz*[ $J$h ,nCo]?ט2Īvݠc{+Q"o/PµhjU햇*3{T #)!`3=oA%%RK4w6qv/;?I !"5 $pޑb[ *̣G6;\ge㠈ޣ)Pnzft $gǸgg~pn[E:OApyYW%v+7\+#i Ц9`XC5sMm\\npC'W9nRq}ҡD_rׯUpW  %><,Y~^O%NU0Z9g BB]HX-ZRL+e<75Ja(~eKJc.b4eNh hd]f {BTT,ׂ{y\@ANLQ({5iFBf,]SJ)CiQ4|5yTc +_O\Ũpf.5|/KwUփ*@Xo[ጳh@~)3_-pP@DB.X-etLܺnۨipa@> RN]Y(88uGߔ1T./b8ii/1Ek6ȥӮ`JE8@=*v5ZUG2 +oRwVl0,)q `ZhZ5I! +pPa0Yh%=t N87/_RN&' Re d9rU7V ñՠcRb;őj9%KrKe͏xaVInbJ?7eV3ERd h_V(wBf˕y,ľkAh@'{*Wdz Ue S= 2gH6}>_7z捅oApG$@S@!?av=_w,[y7t>'ǟfy@Q0.HnToC4I<*@kx' ZǾ \%%ՑZ0'B$.1xNcL#` X zPm4{$IhU Н}sܯFCތp{ju !tfmFSQB~z"D} @<OR +FTaxA6mhx!&GF)~LK a%U2 @̿Z2Eg`) 4GIFՠ?\7XnQ>gҪȀ8:=/w> endobj -750 0 obj << +765 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/prefs-editors.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 762 0 R +/PTEX.InfoDict 771 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 392.00000000 248.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 763 0 R ->>/Font << /R8 764 0 R /R9 765 0 R >> +/R7 772 0 R +>>/Font << /R8 773 0 R /R9 774 0 R >> >> -/Length 766 0 R +/Length 775 0 R /Filter /FlateDecode >> stream xMS0:=P}ؖt, O/L!8@';˒LxBx^d捲+Nuד>OS|ϤbQ)a%cGg/o'6~ra8eN({֒={Uzcܶ.+Ӵsy鄺!xP[ vzR r* 7!CS86lnNa .,\*^:u1a Ƅh9z)Cbʓ&t:kvx"/T( Tc~~B'"*Xڑj!D4=ivx8YӹN8Xa*u3en/rsǘ..g(yq ثHRc^/eta!sqg˕lY{I㽕v</+2~!D2$kFX IIyBgZ>0?. 2|e}ܹ#"Qendstream endobj -762 0 obj +771 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080806202459Z00'00') -/ModDate (D:20080806202459Z00'00') +/CreationDate (D:20080807174427Z00'00') +/ModDate (D:20080807174427Z00'00') >> endobj -763 0 obj +772 0 obj << /Type /ExtGState /OPM 1 >> endobj -764 0 obj +773 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -765 0 obj +774 0 obj << /BaseFont /Helvetica-Oblique /Type /Font /Subtype /Type1 >> endobj -766 0 obj +775 0 obj 672 endobj -761 0 obj << +770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [212.6999 298.2963 227.1554 308.8785] +/Rect [212.6999 235.8688 227.1554 246.4511] /Subtype /Link /A << /S /GoTo /D (figure.3.2) >> >> endobj -759 0 obj << -/D [757 0 R /XYZ 74.4095 793.4011 null] +769 0 obj << +/D [767 0 R /XYZ 74.4095 793.4011 null] >> endobj -390 0 obj << -/D [757 0 R /XYZ 205.0163 645.8849 null] +122 0 obj << +/D [767 0 R /XYZ 74.4095 568.4832 null] >> endobj -760 0 obj << -/D [757 0 R /XYZ 74.4095 589.5076 null] +355 0 obj << +/D [767 0 R /XYZ 282.3592 304.7486 null] >> endobj -342 0 obj << -/D [757 0 R /XYZ 282.3592 367.0034 null] +766 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R >> +/XObject << /Im31 765 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -756 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F71 572 0 R >> -/XObject << /Im32 750 0 R >> +779 0 obj << +/Length 2561 +/Filter /FlateDecode +>> +stream +xڽYo8_Gx⧤}k/mwoq&w9fl5lHrf8>l)PCr8a"|*\/\€]_y?ܿ'ˍQLa_Cj4$[:IPٝ6˘Xo|-#~L؞\Z5sp޽&P"rm3*TzlT.77DzY$ֶDXْk 6a[ZmѴ +EUE_):ʂD ,g[۽v^Y3)nj;:󹳨LPLS _m̩sIپ޽wz>خuZ:QgIK_.A23jn:#1ky֨ӥ8>n^F + w`UB/AK{ PQɵܲ :O4~ӫZ$J,Oczlae.\NR=Z0.OE94{*Ij Lo+&u";eXIg5~EP P)w$=b8rq̖v$  #O!OZj! a0' QqS`gEMoF"DpZ ekcyob W8Ev5Sʱtʭ{J$o%>@S +ڞ`]Rz\ON6BAs) I0-3jh>gdR`}X}t$vƞm!,W.J%Pp$9|AqEd BHӊdAK_Jd00|N +T6\*O>PO"Wv@Ml=;{ÕKwR&-G\ӍPfO%7kM <l\A8{*n6U~iG[HA_藍DQe P+0IAEЍQѥohPJnƅPzYCcpE_+%R}7LΔHa(3:x0oE]lO ŧ9gEU9P+x<Ǫ6(uqndR(BN)20y,RP0Y!Ɂo"mC~ ~$sQ. d vL\lXO׻/vSbnI +s?ɠMeJU|ߗH-跥 +#g\Fb[y IFd'_w4E6[rpIה=Ԅ{ +?;*3Q#I]RNG ʳP2<[(ot=m$FmњZ3'J +~{R,0G{(m"v,)f>l 2w!n|Wv.ݩĉC8=&j'!sQ{8 :[(˹@HsvfmHŌ1y 79 +hhz;HLr) **wG!N[Uj q,\$0}ku3a2,m\xL 1NXwH.-FzKv=D,[9!T/@A]KCh϶!ea#X4@{)`s]!c\sJi<k|o_I 4R'B=[ǞlēeiYYʮf,p=X9r1o(^$(|Lendstream +endobj +778 0 obj << +/Type /Page +/Contents 779 0 R +/Resources 777 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 742 0 R +/Annots [ 781 0 R 782 0 R ] +>> endobj +781 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [73.4132 640.9187 92.854 651.5009] +/Subtype /Link +/A << /S /GoTo /D (figure.2.13) >> +>> endobj +782 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [331.9551 255.445 346.4106 266.0272] +/Subtype /Link +/A << /S /GoTo /D (figure.3.3) >> +>> endobj +780 0 obj << +/D [778 0 R /XYZ 74.4095 793.4011 null] +>> endobj +126 0 obj << +/D [778 0 R /XYZ 74.4095 544.7876 null] +>> endobj +130 0 obj << +/D [778 0 R /XYZ 74.4095 497.4801 null] +>> endobj +783 0 obj << +/D [778 0 R /XYZ 74.4095 253.1542 null] +>> endobj +777 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -770 0 obj << -/Length 1528 +786 0 obj << +/Length 1730 /Filter /FlateDecode >> stream -xڝXs6 ~_GiWK[{iv]oveك3YN%@mo ~p*?2ܪnvgj {{{NOm] z<}ZɾiJRQڸyʓ*]Xzm5 -`KK Ep[/5ӥ(}|.yR o0c,V1 G]v+|bܣm2]ܦ"Om}<T( LN-] v{ّXóS4+fC+huP"ɛ쨤 -iDPgA99uTDS(w^WI}^2ū\8`Gfnc`8f,XPb*EU -L*.Z$əjP,gCxAQZɄk P=}ZZ3Ik%-~aȕdXL/&L6 .fpL>ډ+'OZH9<55 (Bb -F=vvK4B>3Ũs .-=gC]дT3~8Na XcC\Z̓9ĺ\xcm)ԹdbFVjAiS&tJ))3;(m[c@4Pc (0؜qi1*`|xO9BA+.䈑/ޏM6|>'*E# GڜUp uAe gu?e1ԢRΌXJUa|tpD#؝ĈeSO$:7@$Ť~EȇB;c|}'`5n -0 mSpVp-ngQ'/rgPݠcq˗>.FU[m],4ا5v4cJH"[ŰvO V m$Har)!DeiK8T()X(TўװuB^NƀeQʥ_hGXA7PJ5':.ƨ6jahm)د/Â兩ЫH֏Y3G)TYEsZ*V# sri8i#6ЅFIYePl엗i֔f1"Gu)DP0C"%%>_-VCʓ{yg,}endstream +xڍXKs6WHu,ăiҦR@I"Jf뻋(Jf㾰X(| d +\r{~~c{|}Y' *BWgj6ih6W7F[]Fy]]~Я8$?gI$UsGIcG8ʲ<LGAEI.1 ߆Vহr|4c29e͜ɈLU<̳ql@a| S0t."zwE$EuZQor" mda4,ԽFSrE(cYJ==,>*L~.TW"42"!_C"riN$4"Năy [ţ\e$%d#QDZX؉J:Uy:&0PDMc.}RO,s{q_x B W&Hg҄m)ku͹qi3[,]UMKt4-j)Ihs}Uv5] Lz_mSv,)!Wn~"I* 'A¯̅5l2ĐJq ʓ|/}dqzHRأNf!#Suzea>9'21"dPR؟ sTǪp;WbۡK]u(c8er*lQzEyV(RcwtG/2(WH"eW :JMh8MUD76EQ~c=;:뙋̏ӾqۻUȹl=VWY'Gi#u4a@$.IN잁8v+@ @xHY5uzr|wy00z-ٔu4x4psG T3h׻v bVWufW;xj'ځއ;dҰoebx$V9ȋMaYiSE h%'m? xX(7yr +%FxQҼy* &N)y.Öc* +gZ| S/7%]kۺ%䦨WDӈ3EAd f *aiͭ-&G4ۅwd+6\ee8M.0y +gphcP ldGsO?0nŦr@ 2vEq]΀Ȯc&۪#&R7 ?1ޮ> endobj -767 0 obj << +776 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/events.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 773 0 R +/PTEX.InfoDict 790 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 552.00000000 392.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 774 0 R ->>/Font << /R8 775 0 R /R9 776 0 R >> +/R7 791 0 R +>>/Font << /R8 792 0 R /R9 793 0 R >> >> -/Length 777 0 R +/Length 794 0 R /Filter /FlateDecode >> stream @@ -6329,207 +6376,175 @@ x uXa-Dɸdg0(Ä ԥ=Z ]k'ms:K]anvݿӞtמ@<&KK  Q1Dɒ6a^a>apP$fٝyw߼󒇑Wi$$!M.𦩄{{t8jĒwP0> endobj -774 0 obj +791 0 obj << /Type /ExtGState /OPM 1 >> endobj -775 0 obj +792 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -776 0 obj +793 0 obj << /BaseFont /Helvetica-Oblique /Type /Font /Subtype /Type1 >> endobj -777 0 obj +794 0 obj 1213 endobj -772 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 703.0042 92.854 713.5865] -/Subtype /Link -/A << /S /GoTo /D (figure.2.13) >> ->> endobj -771 0 obj << -/D [769 0 R /XYZ 74.4095 793.4011 null] ->> endobj -118 0 obj << -/D [769 0 R /XYZ 74.4095 604.0593 null] ->> endobj -122 0 obj << -/D [769 0 R /XYZ 74.4095 554.8241 null] ->> endobj -343 0 obj << -/D [769 0 R /XYZ 266.5136 155.0474 null] ->> endobj -768 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R >> -/XObject << /Im33 767 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -780 0 obj << -/Length 2640 -/Filter /FlateDecode ->> -stream -xڽZKs8WQ]V$Qcnqf'T{Phb5Kƿ~Vg/[rC DoVzʊ~*.ߦ<ʕ3̹ٱL`y~bqX$ 4(is=nAQ4D6ymvf3(ړq牅;nY{=S6RG VDV-/ǁq/v0MbDmUiX9A lw~)I;G:st/`aο煔h.h*%@B - ] }#R't ͞):!I$~pL*77HuasžD6ް5sVlhGW1y>HhHEe^]K ӥ! -dk1J<@ r/R|TPq[|/뜨= - -P~˺K}1#&0Co($&S4.@|5aUCr8}}dr)©dǭaq4MI&yD>s?H9'sn?j%؅/iK|-pfhH?% 'p(P`F/IϔFjЍQjJ;1/̪8wFӑ3Y亩CӀ {{i_[z4p^XI% O3 -=u^k`v-RL -U,4Ir_'Ysaآ+YPL列ʙ`epY9__YH;qh>Ui~sjGc*GmzX 4Mk+]@‚J}&c7zlߴ V_@l:FuV3] ׵"g< k6=(4?;fz/*_0|Ro-ogK.h%KuDV-'07 R=#o8<~P(3~=9bkIgGH҄ը苮,j*VYܧ*1\Xwv q-#@t +Pw`?!\/NPl U|X_le|x^~:*'.Ky4(BRAiEUm\4Z׮&qx3. -Ё5YJS{hGYnN5)7}xՖEKaw{]zŴuϚH5={ŧWþ -SٔyWM'd\P4msU qnhgzP'dђ#1.P(#>Xz<(C n.$ZI h+LoEfiT Xdg%(arɽJPւ] mP^Ѻ@f -I[ ;t=/IpdI`IHk$&.ʑHh3;ӨK }p˳ѱh՛x-Na=dx\^K#Kh+tUbLEiJ(0h|6>=%ʜ$BM7v'K.on$fbaDҐ3TLC݊:Tư^dzOYN8`n׸O3xX%L&U.NɆ=q `)%$nڨP#G#1;P3݈K;8eͰotߣzC|. -=sӚh,(goxtOHlWWoh1OPl լUT[_آleTZ|8V$nnXʘx$-=+6NQa2i,H]p2orI%l}1`Vhn_RcQoS8D/T6D4k*N,ǂ1bd Iwj0մx8wK%b._# /Yj=AמOt#vV(H-/e_!# /Ek4*h1t11(SGp@fxTp ҁ$@diLjG٩uEjvLAź9 10#C}s2nilS!1иzd$_8cM"Xe~6riQ`5dGn"qc뒽hJMVg"YπgA 8xH5r PӤtCaPU5@53-rcBֶ͠apTBoݖ%녰Y Sa6{endstream -endobj -779 0 obj << -/Type /Page -/Contents 780 0 R -/Resources 778 0 R -/MediaBox [0 0 595.2757 841.8898] -/Parent 745 0 R ->> endobj -781 0 obj << -/D [779 0 R /XYZ 74.4095 793.4011 null] +787 0 obj << +/D [785 0 R /XYZ 74.4095 793.4011 null] >> endobj -782 0 obj << -/D [779 0 R /XYZ 74.4095 637.8946 null] +356 0 obj << +/D [785 0 R /XYZ 266.5136 490.0154 null] >> endobj -783 0 obj << -/D [779 0 R /XYZ 74.4095 521.6224 null] +788 0 obj << +/D [785 0 R /XYZ 74.4095 452.5958 null] >> endobj -778 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F33 209 0 R >> +784 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F35 221 0 R >> +/XObject << /Im32 776 0 R >> /ProcSet [ /PDF /Text ] >> endobj -786 0 obj << -/Length 2539 +797 0 obj << +/Length 2544 /Filter /FlateDecode >> stream -xڭYsܸ _/"E}wu:ؗi.V򬴗}($ 8$b*$4p;Zڍ#?޿8\,huR1~S\\oD7]i']>7 -.aow,c}vԯHE"+PKDim<YmD&h  {q rN: b_!V- LF2v Ky *ZbH̆*IMY™cuLp#&4WCEneנ\niz8^[8/KMc}fb isͭnhV,堩ʼiȂ[->o͹cl3{2#uȃmQ'\?Rg$h(~Z+Bf/6q402@G8e3}8EC [&I:Z 3"gCzwm3tk?۹)c&A@"|_d )3 f1S 4N;,)F,͔Ck0w7;)ņZ]?D_?cl .h] ϠufW_S>vX0x{X_3k[+ږH6||hGėQ\EGL:H2e K@ Fpj+/`L)3PX flx7L%&fZ)7Lp,b_ -}(kpclGr'6yH&{@ -{~[?t '%_³VjdN@&JHo'&-sye&'3S7eݛ˅p7W璉T?#Lzɓ$(AqUQJh"U]*N}g{#!Z p*ZLq|a6Oe< hX4,եSIܯS&,xPy_Qr]w=a8h O_5'ueЬqqSasKq:3pi-}a獭a;aJ=qd!C>sNWD!J@<0Dļs8FpAI1ӓ9- :p[Gf}w.2!ڤgTf8TRjT&r ^4i -dXW\Sp ы=[9W 9K4 \c;`Ȥ1pF CB2oz;lI\߃ jR&D[8,h{>FMx<%sd\g|:1⁏I<YirbkG>[ۚ8ص~n2r)uRo~hοHЁ{S&6K'|piQ>[1VLycMM4"U-:)(ĠcJG$W"R Jr WP6ArJ>Ղ+ud"ΕNҀqx;AY0w줛j9G[Z<.5`pۖz -ZU;MJ@ gr3Wٺj6qOi\p) 5S-h#{M\;_qq`LB(!%ŬCNAU&;m+, Ѭ3-eZi 8WnUrh@0%r^?#*5maq06}#>Q=<04T^ q"禮ScY/٣'?Qf+,2n6@_Uԣl2n-4^l 0%"r`S6_!kCX -Y!QgsAA磹BE-r4U~ADK1˅NͿ_h6x|tu\^:eow`pJlGw-,V"Db>)HFendstream +xڥYݓ۶_Gi$vIy҇^( '1'7$Uw K|I㉽X`?~ E"UL%V/R+|=K{K/ȼrȘ5F->-Ld~s9)Zw\E-%[u,. |<ɕm՚ܯӻ_;Z$,3F[-R2#rw\lnw>^ q~Ed=RiQ6.~*u8"?&ߊzGӣLUMXd+,/W?ԮؗEƕҘط-hp5(ڊpgܨ,]+e\GŒW߻:=53QˣTu50pbuuylqΕ9omX& +X,,޸h_[ҁ4it =+JPr=yE֮|54w{+Fjs#"SK;l\A2 %mhF:aw$~uڹ%cV_,꨾6q,gSPgVByl +zy$d"vUӱ T'^F&v bk%M$)Syd|I%M +"Aɀt)r `aG2_B4V蟷EU6a0YC\Xҿ;Ҁ+0XN0=&(w.7@9"F>73K"c,|-m<=jBdfO1 Q/8`tH`z0v 8f2NbFZIӋzakE.x78Q, ,'dLP!{G@a UfeBc~mĜ{sd֡ M:3fAQau%ʌ0Eέ:\-9@mTܪ޴wA5q{KQ$j{n#?xF +*vH0TO+ }&icʤ}$VPoiSd!mq=mY+5MrʈhIԆx$ƛ4% bd0R}}COH} KTC6"t ~-=FWHqꇀABC +-cFYQؘ\CNgs yEtu"?WffBvsqFpn潯!Qs0tFGBɘ`g,K cj$r- ʓLAt'yOl0\PdeIdbo kWP[cx?r;=t;c:1DfN|23z a35jx"n7C"7t[RB|1 r&\pŎf#-P K .p0$b!!~<S1o;lF6-L5IG;ܳȏE3@DrƅDS%EVHhy3\Ў:y(Huf|i8rz AjiF  12b㖿7!8_Ez3?7{_C1Gߎ׭lߍ[RJcCڌbLj=1+oFa_^`m>z`~&{#{A].,+?mC2AG7*T)t-bjZ:byMZQKqހ}6?6q%? .t ѯ󞁔2,C/e*;(?rd/1A3doU2=`ݪU*l}]qc[j'ɟh56J˒Zbh3͑ +O9؄̀9,*osAdm(??C +7Mx0a'j_ +/j\C?3ߣsSdD +=|ֽЯoU;gLp9)"pe,QFw83ZnK<We!&/dendstream endobj -785 0 obj << +796 0 obj << /Type /Page -/Contents 786 0 R -/Resources 784 0 R +/Contents 797 0 R +/Resources 795 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 745 0 R -/Annots [ 789 0 R ] +/Parent 789 0 R +/Annots [ 800 0 R ] >> endobj -789 0 obj << +800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [451.4247 694.5415 465.8802 705.1238] +/Rect [451.4247 636.5654 465.8802 647.1477] /Subtype /Link /A << /S /GoTo /D (figure.3.3) >> >> endobj -787 0 obj << -/D [785 0 R /XYZ 74.4095 793.4011 null] +798 0 obj << +/D [796 0 R /XYZ 74.4095 793.4011 null] >> endobj -788 0 obj << -/D [785 0 R /XYZ 74.4095 741.7469 null] +799 0 obj << +/D [796 0 R /XYZ 74.4095 687.9652 null] >> endobj -784 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F33 209 0 R >> +795 0 obj << +/Font << /F61 258 0 R /F35 221 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -792 0 obj << -/Length 1950 +803 0 obj << +/Length 2172 /Filter /FlateDecode >> stream -xڭX[~_aj"te/0.XDqY[-;Nƙ] -jj*ROEODfg&J2!G%}=cn.>{(eY60Jqzumu 3 왳Dl+unfo7// ,cqj3m$Z(b1K&cI%"!XfD2Rh`Cr% \X=CG,O>ֺ5]vv5vI k8>{!ӑ bQՖdsgvg{[bZ-Qf.l_kֺtV)~w @ߪDHXmkkn&, --D2< E!b -{4a>z,=COX8I yR/vҶ$AN?ya$8# =0Us8O+sgaU' F#xgT-( Tju4KsUom U)ݝO60 J[BH*X@R(cqLk~C'fI1JK >Q\Hwy=(w!q8ʊ=g~WL4y@Am>GA抭kJ>jZyHXZ74}(2ܳ&}/סPQQuMԼZ\|Ph,/ebۢ߁:"Ӕ6)1{F??aƤ'+OJ S30hk,,U%xt&,bxZJuq} 8[L X4iH&R 44qBz3aJ qsa cqcHة#$eendstream -endobj -791 0 obj << +xڭXs6_GB)mδ%cԉTruISvg,{?@,8EjB,6 (`p+ORu{ZGۻE( P}ٙj +$lRߔ&wLݕ\ bۋ^ +9KQYtXIt(!I*eqIR-`R!ڔ +D2YdhG.⩒ih1H'z,uHA8R2AUn+;,MwyQPf<#WCMU?i[⳧ hԋ7a2 j@p'J=MnH9몣%R;’BiU/`%bXSu٢I`֦CSSemhnC>A\'7-weGh3zlK;{F|^y(l܁_ꙸ'{6OI=}*L܇Rq9y& +I8̱O`:IXD}"`(D`,6Nw"bTm:غ 5Nmu9#*L392 +5ĈImM/dC._Ӧ*1ωAs +G)SgP£yu#W&Ai +=H -iq0̈f@_c'XkvF,iQAlԸl񨮨7L}RG; C$qT6pidkӖCwITd)|CmuRhhOI|Y= EW'H-BcRCNBq=|j|6H権[_NR !Ś@8~@f_cT<;7.+6nrz ]?\ ͩB0{;>Mvƴ$1&֌x$(1';tƜ /% IBH1!vg#kUSso +i|;gU|mQQQtM^ + V|8$ړh~& Kn0)18{Eԣ33I?w CHPƩ)ogo2n!.~/ro/Q |p&4\.27S]\s94Ryf37t[ 3i ##oWM)_9S +tS"2 4gX GLzNW>#aJ koh{4N,îh"w+wNHD> endobj -793 0 obj << -/D [791 0 R /XYZ 74.4095 793.4011 null] +804 0 obj << +/D [802 0 R /XYZ 74.4095 793.4011 null] >> endobj -126 0 obj << -/D [791 0 R /XYZ 74.4095 680.0798 null] +134 0 obj << +/D [802 0 R /XYZ 74.4095 581.3795 null] >> endobj -790 0 obj << -/Font << /F61 246 0 R /F33 209 0 R /F28 201 0 R /F26 198 0 R /F83 796 0 R >> +801 0 obj << +/Font << /F61 258 0 R /F35 221 0 R /F28 209 0 R /F26 206 0 R /F83 807 0 R >> /ProcSet [ /PDF /Text ] >> endobj -801 0 obj << -/Length 1963 +811 0 obj << +/Length 1847 /Filter /FlateDecode >> stream -xڭˎ6_!$×(){d$dY`39m$;Y*)˶{,|0Y,V]24/(+,Upf7 ۛ^0FGT)'_}=f,[%)molk*i|oݼyjmNM%2g\7mT'p&BFtC7?M4y4-E8pIs']*La$SRB}۾v|?Pq(0,:u7]U!Ҿa΁hʮbwD pHD.sb;g&&ˢbфm~%yr<f?;gyݶ ѧa+1+"_dLbѨ~iҧUręJ8>WIj[TqRJy}z )?"-)gE5ђS\e9-DJvD).NY&8kwޢl[Kg4gFdc{bbYf!Ieq|iWQX<{t%ݹ~eo+ dL/$P OeX -us -ьnꪩﶸ7%@G*=x n]ɡe!:#x{,Ly<0 -jXe`*(k&7U*_{)pEde r_g;` t7*]u%~0Axݝ_zdmP'N>Zw+֤;%#z 1{9nk%+ 66Z񀔼G*E>6IG`p -'|챴3EDBjE5JbCAe=("uZJrJVEt*4KprRr8P35b(eQ?oBCmeiU 93Ԝɵ,9YMIY𹤩<4r+C/}-~zOA`ELR2e: P-- f\t'_6J(N˜K!.2a=VgMqζFR07!Xg #bYwW` loh`=z `meװqM7nUk=Q?r#j̳;`M2BLqgϺzJ߯$c9lʾT1 9n)YZ0m{̉ -_u@T\NWo;Xw$g] @HJHQ.ڸs4W{5-6,nKgs~I@hzZ -/yo.9~X3ƼPL$QF>M gNd endstream +xڭ]}'>]{w%M/-R<+-;|Wlm|q)pULR'a!DrIg_O"f9cF$+Q}"sd!Ўnʤ-Ҝ2yux;lucU&tzϷܼkYaa;rtK*|dC \q21e(*zT(|mAt@t>Wjў?} ngSP׿"ذV SsRɅ3zƸEu&'x;Zdi@BYX݂L!qM qϞlp HOmY/ <6f +xpu> endobj -798 0 obj << +808 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/core-time.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 805 0 R +/PTEX.InfoDict 815 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 283.00000000 176.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 806 0 R ->>/Font << /R8 807 0 R >> +/R7 816 0 R +>>/Font << /R8 817 0 R >> >> -/Length 808 0 R +/Length 818 0 R /Filter /FlateDecode >> stream @@ -6537,96 +6552,97 @@ x _2Y [;^xvQn׬|uY2AI Ne#9I("v[XTcK} )yb0X6UpItߌH Nshi'vJq@B'TE41Uyϐ/.MdZD-=TAL9LFmfodZͦ|DgTx=b'7$ownB1 mRϺ~}>mﺚWO!,݇ߟ̦X|>Sġ˿BO2i7G#Jendstream endobj -805 0 obj +815 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080806202500Z00'00') -/ModDate (D:20080806202500Z00'00') +/CreationDate (D:20080807174429Z00'00') +/ModDate (D:20080807174429Z00'00') >> endobj -806 0 obj +816 0 obj << /Type /ExtGState /OPM 1 >> endobj -807 0 obj +817 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -808 0 obj +818 0 obj 402 endobj -803 0 obj << +813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [219.366 526.3438 233.8216 536.926] +/Rect [219.366 475.7876 233.8216 486.3698] /Subtype /Link /A << /S /GoTo /D (figure.3.4) >> >> endobj -804 0 obj << +814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [131.707 290.3452 146.1626 300.9274] +/Rect [131.707 250.4016 146.1626 260.9839] /Subtype /Link /A << /S /GoTo /D (figure.3.5) >> >> endobj -802 0 obj << -/D [800 0 R /XYZ 74.4095 793.4011 null] +812 0 obj << +/D [810 0 R /XYZ 74.4095 793.4011 null] >> endobj -130 0 obj << -/D [800 0 R /XYZ 74.4095 649.5343 null] +138 0 obj << +/D [810 0 R /XYZ 74.4095 585.6489 null] >> endobj -134 0 obj << -/D [800 0 R /XYZ 74.4095 596.8331 null] +142 0 obj << +/D [810 0 R /XYZ 74.4095 537.5677 null] >> endobj -344 0 obj << -/D [800 0 R /XYZ 288.6243 341.9132 null] +357 0 obj << +/D [810 0 R /XYZ 288.6243 296.6634 null] >> endobj -799 0 obj << -/Font << /F61 246 0 R /F83 796 0 R /F26 198 0 R /F28 201 0 R >> -/XObject << /Im34 798 0 R >> +809 0 obj << +/Font << /F61 258 0 R /F83 807 0 R /F26 206 0 R /F28 209 0 R >> +/XObject << /Im33 808 0 R >> /ProcSet [ /PDF /Text ] >> endobj -812 0 obj << -/Length 2034 +822 0 obj << +/Length 2031 /Filter /FlateDecode >> stream -xڥXKs6W(UY$攝I6dƕT%ʂe)J!Lſ~Eg*)F??P,8"L,B!a;Xw/":1__}B*d.oʣ\Z,_*ZΗěr{Ww50S[۫^/Sj+󁶽L,AY_Z6[:_>~|yUm8rpS?6]\d=6~t5msAe!:bIKm纖ֶe\oCwx^I8Cq"c7-_`\8f +"n^ֻwUٶ l]UQeEJ*+. [kQ`r=ۀ?:46Nӌ dVvj+$8)eAPH9["068zcNַO4{пk+fN0At!LW4ZQ 'C"&\`Zn=GώX|dyY\/,NMu׮YiL|90iU;G{ -.x vvVv1^XsiQMb| [95 2$F$Ja Ñ@Ii2Hy^ #:h`phhƍs;ڐ+,ǔv!(p&V9иTihrqem]nc*mK,f1GTjjݱNe39QfvAZ]DyzDqo9E`a ^w~炧SԛZ%.MD+ +JpbxnY0`ǰ,"V}<_,kɍRC Fb䔒,\{_e!s㾱Ȃ\㜙  1TS+vP̢o+f4:At#5'GJh=t -$˺&=}G\p8W@t1焩 [zÅ0ӤrBFYTN<9^XK4/;'TҰ{9N|fpɜ ^.AUn@ bМ74W[|9GaFD eLUL,T䶌mЪ\7Z1%z\phXWO));U:,a+s_p2Co"- 0+H0PrqFCeF28E~(bGzx -2k"C/Lj'+0!I(٧q2P# 3Sc#500 DpA4\z=:# 9pc[:S u}xvL=? xzC ąh']3}3#FM䀌:1ܥS\MxB>ԫ-=i2`=ЅGAqx9HaFb307 ^0dH[oѯH?Eendstream +xڥr6Б<Y;IvɌ+JfSBR>h(ڙ-h4~?(~b,^d@/*nvWcoֈE +cB*d.^d'-WYBkMl\ j,7F~%2q;h@,2d7[4]k]ոU{xe<9Љu%4@GW2Ɵ ;$xg2ɮζy^J'ٵ-XZ[n Գ+d'.Qv 7v`HEq6wkw3}wvM^kJ%ݖO^bo?,mi'}z#&M b΄S^8<-ymw UD'͙Јٷ +1namsM=/;p$} !Jzw):lϨvΌeQ(WzBװx̘02|Lez'ĭmcO PIy \7Mח͑IEβT<ˇ mـfZ:sF3S0|Bc0ͽ#躮^y!'8Wpdlj{&l Qو.kpȂ2:^ &Hv+>b@[޷z Cru [?Fg}ZڈYғ0]!W5v*֫KOZdz#yDg +irsĪWMx>qAn"7\,J%5k^r 9+9W[Tpe%5@1yh\3-[\ 魫]Er;bBˆ + ǮN>co_-pMhX,.#D2쾤J IbLeF/ fVׄ(h9bB1Gp$E`ݑ0m[oi,G<i+U4.e7 + t]-=;Ĵۛ"%tp~i|}OLRe&>gYȄ|z(,|78g:,A}*1½лݴh~FČG" wg'KL+2"'*2и4d@bx8'|o2Ψaht LKГf?y tf[z#`5z $`%+8ޅܖ~着~҇]k*-`Kc[ŊB +62p_n֞Cj2fpqSBrZ23Q? _I0"Nv(( Xnx^|#DvzҘI1qvpQŤ~A ۍ A`;L=\5I,:Hڢ6tՏϢƀ _({S(k$׏rS&sS|C@aT(_3@%ߵ+~Bė*74Wi#u+\ Bzq{@Y_ķ暥"KA 8>LaՋZDT< Ql@2&L?Exsz #04*x ^4FѳG2뫧߻3T4#x?bTsCT+vu/c'f#&tu$5s}BR=5=JwD\-4i3pzl$ع0-4)Б9)_xD> endobj -809 0 obj << +819 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/core.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 815 0 R +/PTEX.InfoDict 825 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 419.00000000 344.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 816 0 R ->>/Font << /R8 817 0 R >> +/R7 826 0 R +>>/Font << /R8 827 0 R >> >> -/Length 818 0 R +/Length 828 0 R /Filter /FlateDecode >> stream @@ -6635,550 +6651,585 @@ x #ES8U\&|| C5ayb)'RǤT8I_a}0;v,ϣr^쪠]}$u1eMp2sU,\cSl:ɥԨlo myVqb,52- ghۿ˭3Nw5þ4yy)@> endobj -816 0 obj +826 0 obj << /Type /ExtGState /OPM 1 >> endobj -817 0 obj +827 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -818 0 obj +828 0 obj 1031 endobj -814 0 obj << +824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [504.4211 207.3242 518.8767 217.9065] +/Rect [504.4211 171.4698 518.8767 182.052] /Subtype /Link /A << /S /GoTo /D (table.2.2) >> >> endobj -813 0 obj << -/D [811 0 R /XYZ 74.4095 793.4011 null] +823 0 obj << +/D [821 0 R /XYZ 74.4095 793.4011 null] >> endobj -345 0 obj << -/D [811 0 R /XYZ 298.272 293.6011 null] +358 0 obj << +/D [821 0 R /XYZ 298.272 257.7466 null] >> endobj -810 0 obj << -/Font << /F61 246 0 R /F28 201 0 R >> -/XObject << /Im35 809 0 R >> +820 0 obj << +/Font << /F61 258 0 R /F28 209 0 R >> +/XObject << /Im34 819 0 R >> /ProcSet [ /PDF /Text ] >> endobj -821 0 obj << -/Length 2963 +831 0 obj << +/Length 3034 /Filter /FlateDecode >> stream -xڥZo6_Gx)QEm/E7h^[6$_3Rl9šŚCr8ߌ8ΊegE)>?4&8RޫtYT6{x 3Eza/Pu^$sI4awκ"Imy\pocVE!<Ȗإu7 nRs klqU3 7U]eu.lV¶"w-t<Lol쟞Ѫ D}B^E"s$9pT͚ZxcS*NG|mk67яhH) ˓/+GpɉsŊ4/s-[ӬN,R&D=@/(VֶSoI);LdKAI<]HҔy.H ډļdRHd:ӣډ;*Vi1P3"__}QuPΗw^&Ҷ]uđL͒,xĵr 9ذ`)x6 #IfۏJDZ2.xr_s׼<,:PeB fhfؐ`ګ- y/i[;e/YT.|˩-CKf{ SW=#d Q/4J)LAGvqA.KzUt`9|t~o~-ݤL`^b$rBՎ컽c_ɻOn[";pJ]c -wX0:,.xfde k$[,8sKEB#E ڡj#BtިMݢnݣ[ScmjӧCqB8Nb o iкsi)Щ=.JU׆An5@+>FG`k Ďح$3LeV3V@ֶ^ 7OaH#WՔGHΊb -0X^s 1ٸ)sQBgyPs|½!^)9FtvEvc"!s*#Z~S‚'거.xޑNK/ZmW]O씥,OEtn?N<"NsVEdmcct+ ]+T]_s<( hJ3 -]dtԅ7fhj`qVOFiAX>wv'(nsf4>Ȍr}%y*ll2.o*L)_f'C R󺆇SS`fD΅A,srx2 \ՔUu0j|:]}:O}ű^Mb)L[G €#1Cx{.zq Ua#Tg)ol0J2j"TDõ A=`5@ĥƤb =׀PSL8"=b+(ea~!m)z)iÜW+^ Ա󇷼`ak#NZGdJ쓁< ^i,MM8h985) NO#B,4))by;U-.ԣfɾGQ䜬I 8_"E% GI;ziᧁR -Sƻ.ǰ= 9ɟY[:ϤN\D8c/*ך:hoc<ցGTt8y'LuL{|ɢk\|䌋WEuP{`:1-M',GZR:ymlPh(ڀx&gš!iGmוO;|_Cfg2Kd%@6Dġ s>7/ssx4'@ݯ%0K -cǯMm i$wJ/׍S᳤:V!E=%~qncUa:[P'6v=b#5;YxL-K%˕>sI409RW3˘ⅼ0Dch*@w}䰦G--鏁qg?q yQ^/M/"4hwaSp穮sGB}%G~l= yC}]_ D}5acX#IKˢϴ{L#BHR232Pb>>:FNЧO1cZ' 3F~jY c \[KK|2bt6wh1/![WWrlD?/7 ^P 댣|n TN elZ~f±}Sٱ꟱͒Ȟb!T"-"*}7 u%@eF-AMǞ>œbS?J_b>g&ݧXjh*0tJ5 u7sfm;tLmw9415]豔?dži>zŽvlE*O'z?1h}z?K1g7;826)O^~G]mKMdNH ^<P^ ]^[*݂T-pMa'iJcM/L@YĘT:뻋(m咷NfbX~v!1OL҄%<ӓ4Sbr+<ϻ[#&e$TI+qћ/]Ѹr6*6kΧWw]6j +ͅכ.o#c>Vt4bD18RL&NHLH>m ?_CCUՓ?s§%vLH$!1w {Z5\]z!@$ +ɟ+UƐ6ۧ:' Hɨ\,AH =I8FDׄ Uhƛ&,f C1Os:d~*FWpư,KH pyUP]s>0%%3˄iު4Y-\uI*ģ]U0(R=. |b`n:{7d0r~{OjV)sq8YʴDZ@m&4iP-l+֞ ҄rքTLd흽\vjFnQqnk튊۲NLo5 D5/rMü +Bͫ+FL _˽+i̠vջW\LgZU# 4^1򎅏LכCSnѕ\ov޵:0}nm +DATk4qAO4+#; "Ag 0I,웊.YXDQqÙ,2P7atC ^nilApHy5[/aJ=˿1}R=Ÿ׉5]$Th3h]4ө&%B1W¥[R,ysT5\UCl,]GWq2vm# C &)=4A2pb[Շ^!K S#ֽOm?}@ͨ*5HfA*=0M'+>S䑫b#MAmNysY-ju\+0ےwH]T{vNtX]݌9 0mu_ר^!sj +|*8C?&jbIxLJ +E,$]OY狸]a(p'ΣvD\asJF_CM>Y45NyUm[nCas$г( `*n neH:ދޭǰĉR7:],]gԾ}g;vڗNXap1TDۑ3}|Sp pXfs>bSISc^xB tۇ?{Ë2kPOIpF2s=\^gГ6 7+N؈"I*~p+hЪi +F6=%*@y|3$T^/6VST{7GC4=*4(L?4ˡ7p|I-qzCyp~h)j zR:ڔP { cW |t #2!ѽHAO8y*:P+oJ$Sd%TGuzL3|PE`D񡏲Z:QvSU45TƟc&_ )0ꄮ}v~shB:(1+xW*/;,ȍ jaMf}}f-@.;´|]xfDz@i_^DLe- ~M!>y@Ho^ Weendstream endobj -820 0 obj << +830 0 obj << /Type /Page -/Contents 821 0 R -/Resources 819 0 R +/Contents 831 0 R +/Resources 829 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 797 0 R +/Parent 789 0 R >> endobj -822 0 obj << -/D [820 0 R /XYZ 74.4095 793.4011 null] +832 0 obj << +/D [830 0 R /XYZ 74.4095 793.4011 null] >> endobj -819 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F66 564 0 R /F62 611 0 R /F72 575 0 R >> +829 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F67 558 0 R /F62 609 0 R /F71 561 0 R /F66 612 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj -826 0 obj << -/Length 1671 +835 0 obj << +/Length 2361 /Filter /FlateDecode >> stream -xڥko6{~?ʘ͉I^@ڦ[횬l1$92GRbيy<0'b*LIJXp>YIg?_q|ۗ1hƱ_NЂ矃7uٚj:$Σ0 ^וYۖylm1r?!q,l[R$pff:aFa`˩ p&`٥)< (q`J[}&a(e0:īUV o -^.Y٧횠LJE۲ ~;~M4-[`E]g9-TYjv/\*N#c>k ѫ@n̪rm"dJEt;K","qt^i,x!ۀ96͖+ 4͚@'y.pSt27y0uPG"M@ X x sWDSecv/9(r,JɁ{oPeqwkMK88k3.fQ㻠T #UK.pymADPpNXalbĤۊxYx˕όn .T%J0>$J e<̟q☁˄^cλR#`Bƥ\I6eaKCE"KqنXkC'rT2Tyhm}7' -B40p $ՖM. -QUo̪bA@pc&0vv@i>!K{vՅckT ϣ_Ix}2hr 4R1S8TGgGO!&FC 11" O5\%7=EE% -s-1ȃh $ y)1D6PP&m,77>+þ"gYs6Y+0sB@ 1\E>Bڬ'\kmN)[4f2>cp:['7Ѕu<#{Dw#(#ݥo3`iv|e6t_$!}vieyq֋0XJRko'Ɋ-iQ>}kq\ o PqLD~}fc -MWg]A6ņXkM+̴uSc;$(}+N2 BbW}341( ]` lցLAzXpt`ITha][hA; joqĸg -(} p7yJf-H(0h3G})S$nn?<.qCJc}}ia%}ph8gU5-+Z< y`B#Fh@@E;&ōcфK̶)Aq[y濦~D{*6ZMtelf~h ?LEA7a&/4Lendstream -endobj -825 0 obj << +xڥks۸>RS  qΗIn2}DbM*qN{w EZ&X,~0,I _l|wïp=zBDpq{DGO{}[S,An"8j`xcVX CkV1/~/R0&aÙ$by0NA*p*@.r Õ)1"O~P;~F*Pe `qvRU@ix[C,Ͷfh$[?Rgh+k F8 +H|yNgEOO"|N~))۞gv=xv@)vp#(#ݥ8lOIRsr0t5WZVIIG%Y^~8{F9~h!NӞAɳJ_GVlVTi6 +|O݇Oo-QWܷP‡"g5f!.u,6 +X")6~$Y$2_c}zTPag?X{rmLr9Qۗ$"W`qZ޷"LiC. r 6W\a_Fc޻_b7e~ȇ~h;hZ錃dE~- }> endobj -827 0 obj << -/D [825 0 R /XYZ 74.4095 793.4011 null] +836 0 obj << +/D [834 0 R /XYZ 74.4095 793.4011 null] >> endobj -138 0 obj << -/D [825 0 R /XYZ 74.4095 648.899 null] +146 0 obj << +/D [834 0 R /XYZ 74.4095 502.0961 null] >> endobj -824 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R /F83 796 0 R >> +833 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R /F83 807 0 R >> /ProcSet [ /PDF /Text ] >> endobj -830 0 obj << -/Length 1796 +841 0 obj << +/Length 1832 /Filter /FlateDecode >> stream -xڥXKs8WHmYIl2[Vy&zK)*CRFIvvRF "4ܙ$s -B$+ᯈy=~V$9s)0KqzwZvZeֆCi_woVkaS[~#9˭?f֖icd-6܃HńvxfAdGY&ukA׫ׁh-@IA͒6 p,R%k#%Ce>7ao6+MYm1x1ΖQ˸]2Vra-ЖbVJwMEs}mX9Ѥr<i"cZB mJ@\DɌqr&Y -.RcCDm"$sBXtyƬQ?4w F<{FU玍h'lI7l<r¸ Tf0U3Sܕ:7_qۈ[뛻E4#K8`md?f>[liUpav  \5It.],\)lsC -Lg?BLr%IugC!Ml/0U͍-Cs7Uۖv˷ZeBh{ƜԙrzϜ[3e~AWhvXu׫y W{.}zPn| %܉vJz[H -LXhP'3@נYcw]p-L\G)P*)X[mqDm}uOAOO]d~jUjBv5)J@JB5ifY(Iֽ}B|CRo=5AY[!/>T7$M}Ŕ3HeWB˙o-ߓɈOUBmDH(\2.b>io6C_|n|ˮ]Rx0&k~$݂| 5p 0D96'0CYVU!d_>dP5Q6{5Zb" U(Ƚ]n:_xA޷Q P3@0u`338IZ}vQϹ׸XK39c1>*guu{.t큋le P_U\e9tLʏ)!@L,;37N ù,K#@'kPb%?=wf`<븡_b7XL|q( y4ꄙctX2h›s)ұAõ-ԍ^]&^z\k-F ojcQ~ȍ HZg1-x{GU%=)&8nh`$ ,)9S"ԩk"M4(kˢ*0-=Z'@c|v6c͢ٵfq$M/&sIWa ũ0r1\ E|<6[JYN +\Ng'$˞ib^#`A鏜?3s9

hlK*ƥ§~=U9TƱ8О_9`v,G a9ɬvZhGendstream +xڥXo6~_GOQ˒on. +A <2#om_$;Ǚ #KHf ?hI$5Yc&{XieQv;o?]}I$'F)=&\d眽lzW+\|z[o\ mFiaGʶ-ғo}ǻQ)ɕf(}n-'֎ Zso6[!LUʡq8ͮ'Iڪ,mZp +(  +89;f$b]_=ܕ'Aǧ{e4d4-:ɒv L<4tC9QgFd(ˆE`F* +(f\9'-`oE͘n8-׊0f"Ts j" ^/vWk;m뇃g> g5M L)]Y6L0a͜2߾ 'hѬ⡿]9Z  +½S[]Wx =X[8ڰM;^pZGS${hK>P6? jаB@̎7m r520j @|J9sXJl]K3uCQf +p9d gf(`P<4\uXDOz1Ϥ XnG $v57؁] wkc؜E5|\Rpx w# d=P碎\ӌ~ +;\كC˱K(|?=42[۳afd ?*)"Vj +Sgl ^{!tyDzT/Lu^c'hR&ʀd@v!+ 2j44bpO]:k]:\Zʹ֏h%P=z?( x gn|1V ܷP?cu驇fIXkr@<v]f~}?7B9"f>Ì!С-fW"X|',Q^ZLboAzgZpLk1)6xZUQWaƯ.39Gf\a>v0z940k[`\.#19K>vaz _p +'=;?2sq"NTո%zN~L=4endstream endobj -829 0 obj << +840 0 obj << /Type /Page -/Contents 830 0 R -/Resources 828 0 R +/Contents 841 0 R +/Resources 839 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 797 0 R -/Annots [ 832 0 R ] +/Parent 837 0 R +/Annots [ 843 0 R ] >> endobj -823 0 obj << +838 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/protocols.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 833 0 R +/PTEX.InfoDict 844 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 472.00000000 312.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 834 0 R ->>/Font << /R8 835 0 R /R9 836 0 R >> +/R7 845 0 R +>>/Font << /R8 846 0 R /R9 847 0 R >> >> -/Length 837 0 R +/Length 848 0 R /Filter /FlateDecode >> stream xWMs0W-Hp`(M{6mRca<6z>< u!c9~(ru mv&cE[󫏣A ;r<`8~׺ϗF`yr9eWدGv̾F]=#"c(׈SAZp&ET$X)s`\xw}8WUj> R T=pxW'!94FSg^PR!(@cن=BCICȓQwRt#CaVL&&>t۶S:n݈uU"!'/d/2,qe -  T.UuC*Z\b:<)2|N<341QeLe+HF}Hqzխ"PvW׫pTP* >Uj1Z#*cRy:l֟qQHe }XV"QD6Dtxz=FIxP!]Wv޶/J3Th$nbЮ1Z&le.)/nuh]:0*JCUNeIKV^0C2OfD{m$ uwĢqYnk,)27SuB3D;V[Txޭg}`z'NǓ4%&qv'Z*aW8'F0` axNã%ꀏ.LtGB1HuC zLJ45,SHEЅk!D0WBWjHɄ0$i|'lB)a2{rn+|keEd)az*eXAl)awl?:3z<&ƢM zp5<a~E<_?dEiendstream endobj -833 0 obj +844 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080806202459Z00'00') -/ModDate (D:20080806202459Z00'00') +/CreationDate (D:20080807174428Z00'00') +/ModDate (D:20080807174428Z00'00') >> endobj -834 0 obj +845 0 obj << /Type /ExtGState /OPM 1 >> endobj -835 0 obj +846 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -836 0 obj +847 0 obj << /BaseFont /Helvetica-Oblique /Type /Font /Subtype /Type1 >> endobj -837 0 obj +848 0 obj 954 endobj -832 0 obj << +843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [444.1785 404.5044 458.6341 415.0867] +/Rect [444.1785 341.3883 458.6341 351.9706] /Subtype /Link /A << /S /GoTo /D (figure.3.6) >> >> endobj -831 0 obj << -/D [829 0 R /XYZ 74.4095 793.4011 null] +842 0 obj << +/D [840 0 R /XYZ 74.4095 793.4011 null] >> endobj -346 0 obj << -/D [829 0 R /XYZ 256.0589 536.9157 null] +150 0 obj << +/D [840 0 R /XYZ 74.4095 723.0768 null] >> endobj -142 0 obj << -/D [829 0 R /XYZ 74.4095 499.6083 null] +154 0 obj << +/D [840 0 R /XYZ 74.4095 679.0664 null] >> endobj -146 0 obj << -/D [829 0 R /XYZ 74.4095 476.2632 null] +359 0 obj << +/D [840 0 R /XYZ 256.0589 392.8713 null] >> endobj -828 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F26 198 0 R /F33 209 0 R >> -/XObject << /Im36 823 0 R >> +839 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R /F35 221 0 R >> +/XObject << /Im35 838 0 R >> /ProcSet [ /PDF /Text ] >> endobj -840 0 obj << -/Length 2091 +851 0 obj << +/Length 2265 /Filter /FlateDecode >> stream -xڭYr۶SRP Ar[M=';JeT2ӟ],2%yc`],'4fqI% 8dk?=7׊O2'!&2;?5l.l*lD4[SgsLf/WA"")%^gl+'*̥dJH9RY"I L'3iβXfGxzhN=^j8G`yCieL˙e¹~d+ִ~( iL{%p4kܫc0|K~]$ivk7Zkbl֦qyI|lL8o+mօ(/UykSBWx % aRy2 c:u'Tv08Py=C y:,)$HT: <UDpBH@ÚKSIbwolm#E֓-6ppYA7rp Єy0A.d{hCQ h4rpB8!ǃ[Dh䏋iP3H7m<"HC^\#UĢDHiiZSp =_S75J:P\DBh=*!A^Pˬ/N%-Mp03݋21 0qQ#o-[\$DHε[}Yq _ A!Ճ C;,a+Q$K"=sm4`R߷1i/`u -,Oi0xZŰǢq5$ՃYKs*'0b!9ġ8D8Vx\<"PC3ިjSly8X'?> $sH85 q$ = 茁 G:qp:AfѴD '4\İ-Zb(s$l IՖ@$m6$B&T.(TfW̫'4v굔#jlK;Q_Mb| 5d6%uF_te׀Oh; -͡5 >֝њ=CJeծ1 .W!\ E&TLLJAjQ԰^c@=f}wYю~ G.j<* me/EUY4=KGtYI\dKy16L}Cݒ@8~c~"n$[Ak_EoWK Qs)4>c?&:sHr_?կ3'Aݎ5xEqMI.;}/Ik?%T8+N/7ɒԝsqu3Kǫל5*uirR/4˽BC(}_d 9%0ZLs$aBF#aPŹp1Ou젅JL"XtL$KlW5=t۰;;1]ۢduzCĞf:׌Wa<]L#Ui{t2}dN%*_,àmЂ:(υT?Kj?оaendstream +xڭY[s۶~У4BdiMmOPw2ˈ)Gi~Hs&\,vo/Ą1I\O\@rs'kwqDk-tsDe04Pk2tu6ZZE  ӞN-ۄsq+V?ֶ_1`Ha!Eȡ+יjٞ Z۠::TA%0TW >Np0gy/`M, ;G290r F2_#U;@H4NxiU,B,0g a"7'rƍ| Hnh,ﮊ}sZ0#3uY aP 1aOd?'ؗv/a%C CY-NCr@=6Zqo]E?R cwGκu#(4g3HqCBd{ vH8z }s&. Wf#9wOeAXawV ?pn\C +門T_a^1+x"0fp0^6I@VZ_ڑvDvc㮣uhvL H0b ,dK2wCw47MC6.{Ye-G 8y\*DQ[L0aRЃHt- +|Ω_,^U=mnv1=38eDtrWkt\xg](nY tY?$Jpuc7} AkHwAvAm2@ +&HYs 3B^?,w;RV1TQO':"vAKj\1? Zbw?K-pQF޻aϕ/Hrc?ĦPyӇwo~|s;kDX? +ي'm%8)6kI'w4haP`o6oo.f4L7/٫His|$gpdz >8y.'$1,&V"z,ѧe:0z#D>I> endobj -841 0 obj << -/D [839 0 R /XYZ 74.4095 793.4011 null] +852 0 obj << +/D [850 0 R /XYZ 74.4095 793.4011 null] >> endobj -150 0 obj << -/D [839 0 R /XYZ 74.4095 465.1475 null] +158 0 obj << +/D [850 0 R /XYZ 74.4095 411.724 null] >> endobj -838 0 obj << -/Font << /F61 246 0 R /F33 209 0 R /F28 201 0 R /F26 198 0 R /F83 796 0 R >> +849 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F35 221 0 R /F26 206 0 R /F83 807 0 R >> /ProcSet [ /PDF /Text ] >> endobj -845 0 obj << -/Length 1796 +855 0 obj << +/Length 1623 /Filter /FlateDecode >> stream -xڵXo6B'9>DJ H[u]v(dqR&aHJ;A`x<XB%YJReiƒ&KX~ew3܏N$'Z49;O=+N~,3tƳ|"t&)<&NVWYYNgLNrOφ%$W?L4U$*Kf<'4Mso4)Jer J}<}qK[r{\]W+q+B\sZ[/{NCʲdlO$ 9Ofq3 T#|G@LH:\ҰgS, + IHŐxe;tNB5Umn,4GWP.ߡ -{H*`0rRHCԅsqyA1S>׆`,g=ӵmp;m6v SwW Jj:gle}/OMN(`3IglRaRTmQ#T@XF4τW/Me\'ěä4C,.;8!ц gN^ XI@rI  Ka^T].7А}ls2pa 6ea">7jW=6UZOƱ#L!с0Dب!܇` "2)>ϓ sË8l&sL' Lew֔]nNsfN:QM|>ZXms۹Ojg61hrCU}hlFM@}oD߄\ǒk?egIBHQ^vO{z$g!!hGa| wI՟?d T!`50mmփ?X^1%=+S}ztMՄj2rf$hϧS/VČoN&.~\X,v/=@,zY QB6rskƯEƵ$>OCwTv_afCJއm -`|BאEeNl+UۯmS D-Td8Pɮ< P_Ҹo犄xr!di|c/4d(/216#dc\#y\jj3nO8= 0|7{@6 0Fbm Z:Pimu4ІBGio -áKxe6!98uf4 -L7p닢r,_0c@yyP"J7koboj濛K7dҨP5-ܧ|R$CJ7I ob4s?vnr͉$rUC' .endstream -endobj -844 0 obj << +xڵX[o6~0d1G6 lMoj#l1Y$::"[N'EZE(sѤ 1x?Uga_eG+tWA)!XrO(GL$8x-pr@p1<7:L/^]GV|ibޟ'I!9˘@?J$ŒI'W'AU#$_FD譕LXT)vXUm)D }ŠpJҔQHBPi˪Ñ ΪZ[4\?qasRDr5-,JYӄ.L6-Ua,kI]jV"${+o|{4ml6*~_D$]/l}9^{jk'}hw9~ny<9z?q6:W32[hgn[Gƶ6弝Xt]D~dR\&QT&"B:^1›OD[1&H4DYa =M kC(usrs4Eq{/2@&|9WkW ̬S:?o !%ɛ Q(6u6:?)87qצ]Yj7l0V̭z'a2vU<2ܑPf@o{ßR_Gε-幓tN;u=܁Z?MsWnծۃ[8dĦjHaq蕸 yR=,$nl.jݚ;X4?F#<|?% +T߆597"l?kJҟ!uWV}ȍ*5U\9ܽk_Z.Z[Q&qShfuй"ߝG) +h5v›JCb$Z~z`rABg^b,GE_`7q.IdIţ]k.w],2 \ezmfN˷$Xz[q~ՠ&Fx3B[xdtY ;Cai(n#j_J 7 \Du0>!> endobj -846 0 obj << -/D [844 0 R /XYZ 74.4095 793.4011 null] +856 0 obj << +/D [854 0 R /XYZ 74.4095 793.4011 null] >> endobj -847 0 obj << -/D [844 0 R /XYZ 74.4095 610.4884 null] +857 0 obj << +/D [854 0 R /XYZ 74.4095 565.4758 null] >> endobj -843 0 obj << -/Font << /F61 246 0 R /F83 796 0 R /F26 198 0 R /F28 201 0 R >> +853 0 obj << +/Font << /F61 258 0 R /F83 807 0 R /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -850 0 obj << -/Length 1535 +860 0 obj << +/Length 1708 /Filter /FlateDecode >> stream -xڵXYoF~ׯ`PHٛd<8ghZCZ\L(R!6)QlIacfl`!Alj` ×xEOإ~v6{J F<8[ DcJBϲtShU4C qPzStg~A13v!"AQQkնiRKU\ͩK+!X2lUm>.Xp#X./U֕xJ P`I&srUQ 3eBiVչ*Uo]㸮nK\}S;_}ɘ@5e6'J_֙rEݨeA=OQĥ'OUWsrMۺ, -2J.ȟ>zVY84"e]^XM/>"M$6u2(3X6$zƹD\Ȩ?)g?ғ`$ s2Ɛ $n -S3xć3 JpB\@g.b9_Hj6&]cJDbۂs$\XYʑM-1{?e dtVuȕ#}6M hzk~JX 9f IYnvV^j~VץJ+Zўt.ih4:셪ua%<6b~x/".En1KF1F=OOAt+7JX(j X ,gZVYK81=Ȇx5y"B"aFNoxޗMcvH#˴xzy넙D44sƹ.r/lHBULJ='akwm'l#ovZv8z5tt`WFcO|_]$;Ŷ+)3?5ĆDtQgzS8N22Uj(^\ATeQTgefТ,rnvD1bLk{&@DZio`- N 1F6~K7S";u3GQ*bRoRrKDQ@'PچG;.r?CE9wUnp^;*)q-'VćQFzxZ\d0khlESY |5CQ2_8F;g~4-Nz+E ò4:_8u/ozGN\|Аuõe]鴨Z0w0e̕mRekjHz]- @hdI G:>8:۴8Z$钔=N{wek&@<d1'b'z% N>޻+ O֥_^ ~za̒0TËPX{ч&oM1(l<ќ^N7YM==Z7}-9Pl'뭌׼ HZg3ӴlƓ #fI+ӚXLIk<6/FcqRm>`MLH[ՙZeeZ l-^-~ӳe-Y;lU># +LG%"_c6k1#p۪SwcX.iOr#Bo]f Fg]T ^҉ *_9z";L$LWVI(:* +>dZr_0ET9*i]! +L2xgp3=a7$$,LxIZ`̥oXkBkeKqVڴP +$W[T]RHG( ]ʻ{ihhUgHC/1/6qsn%>o^--@ҌQ~U@}R/ͲBgyj54—~6.Ⱦkhs*l˥6Xa>~CC +ApwH/2Sa*+'8¢ zH԰|߾,ӧ;mr%Sp +˸|ǽfW_%>GvBVee::fOዹ5kgAh~}iWu}~墚!=y_|I272N6IƮ/3OGhdVp]xh(,VQOpS %^3BCe,UpHWݚm)%endstream endobj -849 0 obj << +859 0 obj << /Type /Page -/Contents 850 0 R -/Resources 848 0 R +/Contents 860 0 R +/Resources 858 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 842 0 R +/Parent 837 0 R >> endobj -851 0 obj << -/D [849 0 R /XYZ 74.4095 793.4011 null] +861 0 obj << +/D [859 0 R /XYZ 74.4095 793.4011 null] >> endobj -848 0 obj << -/Font << /F61 246 0 R /F28 201 0 R /F83 796 0 R >> +858 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F83 807 0 R >> /ProcSet [ /PDF /Text ] >> endobj -854 0 obj << -/Length 1623 +864 0 obj << +/Length 1530 /Filter /FlateDecode >> stream -xڵXmo6_! Ef]t-Y٢%:QIQ:<'ӈ?"(5JzB:*F ;/=1A~͡ -3y)r/9ep ˢW.)3<6?<;JmhjK ~-jZ$KpۣzH< }n>Ʀ,j-~/@aScJp}u]qvk.-`[k:Xm/~1E8H)\-BWv; -D!fs[ lӞs!b=te[,mBCpl}.SK_dA8Cд ,>cc^ FunzQ nLEqhaYYY4[=V3}6,o,)5؅ q:sYs >;0idT<b|`tfvNdFJ1sXzEXK8猫b[ŀ),ƣY[lK7};QaAH^Ž5TWyxNVPkJp4X+pFoa(R*}f b(IzX*C,DƜo6*-\f^961\+?=~?1}zeV6iȷHC M"I*h1D=PiB} ƀ'{'IO).79`"]dUnq<*~])9OmAl(-!]vwpZbUp+)_~IѼX*ا | Mo9eBpoi0X\lۃkQyӚN3՚ht^%t0XȎ}Lf=-7ݴ@ "@ؓЂ~l 8*pNI' z` -!m8]p8WAS[kmC̳3g{)7 !OI&I"ܨ%):[NgBLTAs!~AVaAibUu8^3unGv2 v -$Maˬ_NR$t6.a*/B/iw2۪̪anK ForNx< +~Xo +rŘ`$a1T +$MO(HV~ϡ +3 X{[i?(Eh%J';dsB19$|Z$% rO(]mp`]5lO6ZԟZP +^祣e.)@@wg(\4Ut]ucqk @+6/渨? +)-_B`;JD!W=׹mKg]¶eW,kCCm> rZxvxR<>ck7^ CMnzQ nIyW(s"aYYY;m3[7^os#~8%>Nd8bagF +g 0,Oxl̮llEid3WW?E!sθ*nmo\ ~\b],5` +;=נ1f0|Ԙhw=^%0XȞ}Lf}9+[֫iRHwҎpn:h ?;t1/endstream endobj -853 0 obj << +863 0 obj << /Type /Page -/Contents 854 0 R -/Resources 852 0 R +/Contents 864 0 R +/Resources 862 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 842 0 R +/Parent 837 0 R >> endobj -855 0 obj << -/D [853 0 R /XYZ 74.4095 793.4011 null] +865 0 obj << +/D [863 0 R /XYZ 74.4095 793.4011 null] >> endobj -856 0 obj << -/D [853 0 R /XYZ 74.4095 519.9605 null] +866 0 obj << +/D [863 0 R /XYZ 74.4095 470.2165 null] >> endobj -852 0 obj << -/Font << /F61 246 0 R /F83 796 0 R /F28 201 0 R /F26 198 0 R >> +862 0 obj << +/Font << /F61 258 0 R /F83 807 0 R /F28 209 0 R /F26 206 0 R >> /ProcSet [ /PDF /Text ] >> endobj -859 0 obj << -/Length 1061 +869 0 obj << +/Length 805 /Filter /FlateDecode >> stream -xڵWKoFW>I@EqN  Kk0E|Ah#V) 7̮XB%FIJ 0W,ۛɢUjO/,i-M…"ru:]|g17v(h(^>,\֙_N}935l_qJyJT$cn Ң_hJ*yJs^%v^Qw]dWh !%C OIRR'\)S17]4PHhx"6jظ+H!fblt\:qq4Ld:-pxdµ!S2Hd2a1W08Y2ޗi)O g(G`. >*0]/H4ư?3DSpXs*W؋PNp,:;\WA⑝'endstream +xڵVo0_a)ۉA .}2q^EXI@`1$Wt֐y> #7/qG)Xi N|*ܦyד3d/l?g9 "Epo5A>sT$Ѓ^Lb(w9cӀI4AHY8U$#M Jb/3ۥfw K-I bӈFȧGHzkE Ԛ.A}Xd0-QZ]4YӪ>2{ao/_d9%;^Xl`Ӣ-2Mze GKzHW ăK~4WT Ld]Au +nj R :P!2SOE~6eﵤz"d`! =~켹LJeR&,ah l/Xendstream endobj -858 0 obj << +868 0 obj << /Type /Page -/Contents 859 0 R -/Resources 857 0 R +/Contents 869 0 R +/Resources 867 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 842 0 R +/Parent 871 0 R >> endobj -860 0 obj << -/D [858 0 R /XYZ 74.4095 793.4011 null] +870 0 obj << +/D [868 0 R /XYZ 74.4095 793.4011 null] >> endobj -154 0 obj << -/D [858 0 R /XYZ 74.4095 400.0423 null] +867 0 obj << +/Font << /F61 258 0 R /F83 807 0 R /F28 209 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -158 0 obj << -/D [858 0 R /XYZ 74.4095 356.4407 null] +874 0 obj << +/Length 2136 +/Filter /FlateDecode +>> +stream +xڥXYs8~ϯRU!Covd{23ZN2>P$aͫxF4eQ㭚ru7>> 6b ? gqٺxv>u;|x:bKH3O8{9ao痬V.'nBI"|*\l. 󻫇^ESVa\μ(JI1​$͘aMԋk/%WnUFI ;Dr̹T]UF\{ASZ㔿aR{$"%0&EƠϟ;|31}i(P%"bF(rZo9%}Y=YRLK@SL<~:G@` +3?XO@Ċt-a$9 8JLE0~h H_APd#sJ(}K鑌p^T!1ײ0Syu8Th#uFRBY<5nImA(bEhiyKbrc!r%s 7;%[Ya@'[8-T&Ke6=2_TȍD%'b7X~,:Q ,1kLZFI[;wpDN=l?_( x%D)sZ UU5+5QBXFNַz+1`Oײղ꛵mw@EPsȗT)7Fv xߖپQuLV k|U«-#&k桯]TgHIHܷ٘R;IP; KSg!ΓÒTp;})/^vnθJds:b7ږmHDןK]EHfbG9nI.- += "=kۃ*W=E~yRۣl܅e_h6ie7;:ȶ܂OY +b}5[ F \|'c 'G?a6,G-.f¶ɭ뽑g>&OPpC̭IscP6Sw9OYA>|[sEwP>:NtcMz$@cM3H:T/h/6=v^KerZr(N&:4Иja emD5hqw"-8LA_[U faU݀ix$E(FĽͨwb~HZQ'2ʁ'+\;%d +ݣH:a.L dd-s@wRCi?T +3B +f6X[/gLLxj;q陬8+Ae*s̔N%:߈WCj!:d G6S謋vKlEdF]ݽu*j$I^駇%x+Z~Ԍu#v, `5\[kP 뾑d(rmp;(ܯU/2!IHb~1pw~DN< (0~`ϧ3bzKh9Œْ+gj62/%WO=>N0X5͗ Uʼjd,+*=cqcў@H`,pfvy?wGI0`'쓣u??|8֯dq^ ԩ"Gi#V*3ڵjFwO! anuv4fH>ivbHƒ{AE@PG.{fbC)1UX+&(T9 J|QP7dtW,'EnaC(C764tqZnHׅQ$֝ph9m7S!quνݾd[Iv2]J2r:9yLT:  ICp6F70x hQԠPIvrm TW#9a6? s%6%@I4|+0dFFc^d].#RI s/$|q#*r/ +y4N_Pwendstream +endobj +873 0 obj << +/Type /Page +/Contents 874 0 R +/Resources 872 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 871 0 R +/Annots [ 876 0 R ] +>> endobj +876 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [125.1648 216.5425 277.7924 228.0677] +/Subtype/Link/A<> +>> endobj +875 0 obj << +/D [873 0 R /XYZ 74.4095 793.4011 null] >> endobj 162 0 obj << -/D [858 0 R /XYZ 74.4095 308.7687 null] +/D [873 0 R /XYZ 74.4095 771.7323 null] >> endobj 166 0 obj << -/D [858 0 R /XYZ 74.4095 256.1527 null] +/D [873 0 R /XYZ 74.4095 750.1041 null] >> endobj 170 0 obj << -/D [858 0 R /XYZ 74.4095 215.5906 null] +/D [873 0 R /XYZ 74.4095 704.9954 null] >> endobj -857 0 obj << -/Font << /F61 246 0 R /F83 796 0 R /F28 201 0 R /F26 198 0 R >> +174 0 obj << +/D [873 0 R /XYZ 74.4095 654.9427 null] +>> endobj +178 0 obj << +/D [873 0 R /XYZ 74.4095 616.9439 null] +>> endobj +182 0 obj << +/D [873 0 R /XYZ 74.4095 525.2661 null] +>> endobj +872 0 obj << +/Font << /F61 258 0 R /F26 206 0 R /F28 209 0 R /F83 807 0 R >> /ProcSet [ /PDF /Text ] >> endobj -863 0 obj << -/Length 2728 +879 0 obj << +/Length 2131 /Filter /FlateDecode >> stream -xڍY[s۸~_#THz&iӓ ی]<Դ ,Kٙ&A||`%VolkﺿȺVKug1KП=̄ ?([#e箈bGxs)x_rU~iw~cq_sCa4sgaG}#EERݑD8%x.NA¢(H%Wessn s&r3ȹN Ҿ/箌T -9xb!cUӺ̦J}fIT~\lӾˀ -՜;fȊ9DӦ2!j3pލ{[{N񅠹+Z54lc]%D.mOD Wh:(Id}UA9_r]駚ujG o> ,!07 QGQ|8el="w*7g u(JۮS8#a4+ EMzz&;DGʝ*3lBgOZ^ˮ4H.m-8y6;$oY7ՇZשqԮ3><'I`_Sp ~]@>sGc(u(jeK:-`v_5J'BڽvՓUkYڐ IRsmnt(o-ġu 6OP {Kr-UM`+l-e-/#_vyoJm2_ -\) -DGѡ4ՎR;\CO8#'J `S`-n&رqΒ ȰG5Qiݿ_~zzbڿUQȢdՀwRcGX: (.7s)E:+ݕ~野 Sx0FgwҐD'Nl+<$Ԏum !QݿBH{GNt1]X;^cܣKex@ݗ&;:nҜd <*tmzC[yP~ʳ]z /Ioz#4{hp5c|ZiV[ A vˍ{mMɚ!(R>8CO>)b2˳F?H -`#quF \0 y<]ЙN-[@ʜf'RtvwOν*7xK79:_W5(i_xJ,\YS]V+1S:&!;4mr z*Rr5R݃up@ -42ev0F2+l l9 9CԶG?DdhPם2*9pQ1v)`<};o>Yzķ%$1no*F?R@4-iHwklaLSBJ'"Nsg=zFw!t3`o2k<[C;unokSkI7O@<љT|ohqZN=`~!=ozVo-Р& "4$d1l})p 8t~V61M$ fSV?I5 X -2a)X rttbDx4t)X,?YBcG{[^:PՁ<Ú;"yqpig]м?kjǧ  } )$&|ӈI !j"wѡ[4l>Ӡю/{Q[ Z>'!19"J,d4dɀǧ##d//=/9;ZO ԆV_@ouq{q3ș=c &&C^*rq sY@nhV% F9_0 ri잱gFm{]HGE NGKrHS,V,=}'Z}ȾUN i̖+䆪}ϊvJƣ0>, -_xLC_ vy~Q 0)B#)ZE endstream +xڍMs8:JA$ȹeT2TjxfEI̘Udgs߾ ~- "`7C##!}/NpCIھZ}@!/ !%7x^l2\2Z wi\_$O4)Wk"iO~{ Qtؾ>"BRJZ͔5cbbYx_P׿8^_oXf|hjۮUZ׿R%/픶No+\Q3S|sWV_Ko4v~990BHD;Iwе槤 ﮝuu\%ncMjv>||Ҵ`|m|c^nY|M1R|@F.7W+5oZ[}Oi8HT]@,+P t9.,KOg(wium6lڬ CΌ3;%7yGHl`dk#.N/NٮWXd8^2TVrL!LQ%8DTbgbAjA!g& ij$/t{׮up  1dmQ]B6P jJ1Ԑ+F}P\ GEi=O(PQI!vԚChت4ni~MRUJgp 0hcALlxu&`ww=W/&7DT@Ilv`לHb Ex߇=_:>#`ȝ22gPb*¾fA:S>8,){ZclIq94odWoA1wx>$ ,}7/:͞u5.IM4{v-,MZ[O-Aj Wg|(ds }n^v=;;k\]%^vsٙrzzvJ|v> endobj -865 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[0 1 1] -/Rect [125.1648 488.9868 277.7924 500.512] -/Subtype/Link/A<> +/Parent 871 0 R +/Annots [ 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R ] >> endobj -867 0 obj << +882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [186.6652 236.9588 353.6389 248.484] +/Rect [186.6652 605.3868 353.6389 616.912] /Subtype/Link/A<> >> endobj -868 0 obj << +883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [148.5137 216.604 329.8337 228.2368] +/Rect [148.5137 585.7983 329.8337 597.4311] /Subtype/Link/A<> >> endobj -869 0 obj << +884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [139.5474 196.4645 299.3481 207.9896] +/Rect [139.5474 566.4251 299.3481 577.9503] /Subtype/Link/A<> >> endobj -870 0 obj << +885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [147.115 176.2636 306.9157 187.7425] +/Rect [147.115 546.9906 306.9157 558.4694] /Subtype/Link/A<> >> endobj -871 0 obj << +886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [154.8081 156.0165 386.3397 167.4953] +/Rect [154.8081 527.5097 386.3397 538.9885] /Subtype/Link/A<> >> endobj -872 0 obj << +887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [133.0648 135.7693 264.173 147.2481] +/Rect [133.0648 508.0288 264.173 519.5076] /Subtype/Link/A<> >> endobj -864 0 obj << -/D [862 0 R /XYZ 74.4095 793.4011 null] ->> endobj -174 0 obj << -/D [862 0 R /XYZ 74.4095 771.7323 null] ->> endobj -866 0 obj << -/D [862 0 R /XYZ 74.4095 265.6468 null] ->> endobj -861 0 obj << -/Font << /F61 246 0 R /F26 198 0 R /F28 201 0 R /F83 796 0 R /F33 209 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -875 0 obj << -/Length 1214 -/Filter /FlateDecode ->> -stream -xڕ]o"7+撹wҬU.JV,0$=cc{*@σcHA2Fd0xCH6l{wy%q<L$42Rl(jJ~$.~+vա\c|,0Vn]n*quz#-%fs*3$eƎ2%aR^XF2BvN ͙.aD&B0u<.W*$\qWXUSƮ"9 11$*~l]t~i2yyyAUqzG LUJ"0!qS9FH"؅% Z"]A[} hs*FŢ(r`1؍9ŧ@qfDIe2x1Hhl:<Ų KEXCZj_.sGu\i#*4c|t;Kss2rPRf4^.*(pfQb" KEP,'x4kOjκj<-Mtl<~\.}1ia?Zߎa '2^4f$ؐ z KzׁT?'q{s:[kj8i*Q \C!N’|j:}<>~$08n%wV쮵8Tk}j8P4q -;1)p]X/U Uhrvs<9Wx9ZɾĢ;񭹫Mnk_Dz%8榙P'z(aUly~[Fm¥Xw.,aڪg>G)H^yޢCW՛t6#Z=2SwKX/U UfW!lpo<غ1vKVmyq6Z - Tb(;,&uk> endobj -877 0 obj << +888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [163.7833 756.7859 352.2764 768.4187] +/Rect [163.7833 488.394 352.2764 500.0268] /Subtype/Link/A<> >> endobj -878 0 obj << +889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [143.4568 737.459 374.9885 748.9379] +/Rect [143.4568 469.0671 374.9885 480.5459] /Subtype/Link/A<> >> endobj -879 0 obj << +890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [167.8988 717.9782 327.6995 729.457] +/Rect [167.8988 449.5862 327.6995 461.065] /Subtype/Link/A<> >> endobj -880 0 obj << +891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [139.9598 698.4973 471.9148 709.9761] +/Rect [139.9598 430.1054 471.9148 441.5842] /Subtype/Link/A<> >> endobj -881 0 obj << +892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [147.4467 679.0164 285.7281 690.4952] +/Rect [147.4467 410.6245 285.7281 422.1033] /Subtype/Link/A<> >> endobj -882 0 obj << +893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [151.5083 659.5356 289.7897 671.0144] +/Rect [151.5083 391.1436 289.7897 402.6224] /Subtype/Link/A<> >> endobj -883 0 obj << +894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [146.2633 640.0547 499.7376 651.5335] +/Rect [146.2633 371.6627 499.7376 383.1415] /Subtype/Link/A<> >> endobj -884 0 obj << +895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [147.2495 620.5738 321.3964 632.0526] +/Rect [147.2495 352.1819 321.3964 363.6607] /Subtype/Link/A<> >> endobj -885 0 obj << +896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [134.069 601.0466 344.0813 612.5718] +/Rect [134.069 332.6546 344.0813 344.1798] /Subtype/Link/A<> >> endobj -886 0 obj << +897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [134.069 581.5657 344.0813 593.0909] +/Rect [134.069 313.1738 344.0813 324.6989] /Subtype/Link/A<> >> endobj -887 0 obj << +898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [133.0649 562.1312 328.731 573.61] +/Rect [133.0649 293.7393 328.731 305.2181] /Subtype/Link/A<> >> endobj -888 0 obj << +899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [122.108 542.604 354.1378 554.1291] +/Rect [122.108 274.212 354.1378 285.7372] /Subtype/Link/A<> >> endobj -876 0 obj << -/D [874 0 R /XYZ 74.4095 793.4011 null] +880 0 obj << +/D [878 0 R /XYZ 74.4095 793.4011 null] >> endobj -873 0 obj << -/Font << /F61 246 0 R /F33 209 0 R /F28 201 0 R /F83 796 0 R >> +881 0 obj << +/D [878 0 R /XYZ 74.4095 633.3086 null] +>> endobj +877 0 obj << +/Font << /F61 258 0 R /F28 209 0 R /F26 206 0 R /F35 221 0 R /F83 807 0 R >> /ProcSet [ /PDF /Text ] >> endobj -892 0 obj << +902 0 obj << /Length 215 /Filter /FlateDecode >> stream xu1OC1 +2&C8N2V5bRPE(Teqrw!v]i"}=Q. jhf5.REP,uէ5O Os o;ȥzpׯ5*۾F_eH??췁ѿ nZ9MZZ -j`K>O*4Um1h'jD-r,3BUo*Xrendstream +j`K>O*4Um1h'jD-z,3BUo̔Xtendstream endobj -891 0 obj << +901 0 obj << /Type /Page -/Contents 892 0 R -/Resources 890 0 R +/Contents 902 0 R +/Resources 900 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 889 0 R +/Parent 871 0 R >> endobj -893 0 obj << -/D [891 0 R /XYZ 74.4095 793.4011 null] +903 0 obj << +/D [901 0 R /XYZ 74.4095 793.4011 null] >> endobj -178 0 obj << -/D [891 0 R /XYZ 74.4095 771.7323 null] +186 0 obj << +/D [901 0 R /XYZ 74.4095 771.7323 null] >> endobj -890 0 obj << -/Font << /F26 198 0 R /F28 201 0 R >> +900 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -896 0 obj << +906 0 obj << /Length 1135 /Filter /FlateDecode >> @@ -7186,72 +7237,71 @@ stream xڝ]oF+|Ws|\ֻeNTŀ`( PU yμ>d,B8Vb*, ^µ/7p.27 n )*Z$BsU7?QЧfKp8e9RS x-quT8Sy0:QQza9(" >A9k=S$3vT;)QP#r@beulSq. U~T,IG=ǏVpm^Ci4c CY*YW[P(K &eTűh'k99 *rꫦT:!P3RBLԻJ_yfmϽiYYW@}’f6cQc~9b-f||k[3,=c^o>\5 BSy 1*n}74"s`HS  -$GM·ݝBWXft@QJl}s&I=zݔ;f!,}5\O~mHrA^U^t*׃G/ kAXhqk> endobj -897 0 obj << -/D [895 0 R /XYZ 74.4095 793.4011 null] +907 0 obj << +/D [905 0 R /XYZ 74.4095 793.4011 null] >> endobj -182 0 obj << -/D [895 0 R /XYZ 74.4095 771.7323 null] +190 0 obj << +/D [905 0 R /XYZ 74.4095 771.7323 null] >> endobj -898 0 obj << -/D [895 0 R /XYZ 74.4095 573.2241 null] +908 0 obj << +/D [905 0 R /XYZ 74.4095 573.2241 null] >> endobj -899 0 obj << -/D [895 0 R /XYZ 74.4095 548.0739 null] +909 0 obj << +/D [905 0 R /XYZ 74.4095 548.0739 null] >> endobj -900 0 obj << -/D [895 0 R /XYZ 74.4095 522.9238 null] +910 0 obj << +/D [905 0 R /XYZ 74.4095 522.9238 null] >> endobj -901 0 obj << -/D [895 0 R /XYZ 74.4095 497.7737 null] +911 0 obj << +/D [905 0 R /XYZ 74.4095 497.7737 null] >> endobj -902 0 obj << -/D [895 0 R /XYZ 74.4095 472.6235 null] +912 0 obj << +/D [905 0 R /XYZ 74.4095 472.6235 null] >> endobj -903 0 obj << -/D [895 0 R /XYZ 74.4095 447.4734 null] +913 0 obj << +/D [905 0 R /XYZ 74.4095 447.4734 null] >> endobj -904 0 obj << -/D [895 0 R /XYZ 74.4095 422.3232 null] +914 0 obj << +/D [905 0 R /XYZ 74.4095 422.3232 null] >> endobj -905 0 obj << -/D [895 0 R /XYZ 74.4095 397.1731 null] +915 0 obj << +/D [905 0 R /XYZ 74.4095 397.1731 null] >> endobj -906 0 obj << -/D [895 0 R /XYZ 74.4095 372.0229 null] +916 0 obj << +/D [905 0 R /XYZ 74.4095 372.0229 null] >> endobj -907 0 obj << -/D [895 0 R /XYZ 74.4095 346.8728 null] +917 0 obj << +/D [905 0 R /XYZ 74.4095 346.8728 null] >> endobj -908 0 obj << -/D [895 0 R /XYZ 74.4095 321.7226 null] +918 0 obj << +/D [905 0 R /XYZ 74.4095 321.7226 null] >> endobj -909 0 obj << -/D [895 0 R /XYZ 74.4095 296.5725 null] +919 0 obj << +/D [905 0 R /XYZ 74.4095 296.5725 null] >> endobj -910 0 obj << -/D [895 0 R /XYZ 74.4095 271.4223 null] +920 0 obj << +/D [905 0 R /XYZ 74.4095 271.4223 null] >> endobj -911 0 obj << -/D [895 0 R /XYZ 74.4095 246.2722 null] +921 0 obj << +/D [905 0 R /XYZ 74.4095 246.2722 null] >> endobj -912 0 obj << -/D [895 0 R /XYZ 74.4095 221.122 null] +922 0 obj << +/D [905 0 R /XYZ 74.4095 221.122 null] >> endobj -894 0 obj << -/Font << /F26 198 0 R /F28 201 0 R >> +904 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -915 0 obj << +925 0 obj << /Length 676 /Filter /FlateDecode >> @@ -7261,131 +7311,128 @@ xڅ #dN Ոs}ARShՇ+LfփQeR%Jd"M9&]_9 eō%cZLbJss*MXf.+`1POK|,bI_>Nz# ‰D)j%פPŝvkNk^ (#~ʀ j~7;0G hsc"tQVBs q酖*-#Y m">\<%!65~]IFuĠ_ ?!a -E>gnw]YO!, C7]#gLCp`TGT-؟B3\޽9 t1\AI`>\^LSlwӄUȰ҄ j;XVgIes2=|U-I |dba{:a/l.XMvx+{;Ő*Ֆۻp7"Av8B!YNy)ٶ9e.wGw^6x?r}≬ S[K|v;N*fkcޟ>.endstream +E>gnw]YO!, C7]#gLCp`TGT-؟B3\޽9 t1\AI`>\^LSlwӄUȰ҄ j;XVgIes2=|U-I |dba{:a/l.XMvx+{;Ő*Ֆۻp7"Av8B!YNy)ٶ9e.wGw^6x?r}≬ S[K|v;N*fkcޟ>0endstream endobj -914 0 obj << +924 0 obj << /Type /Page -/Contents 915 0 R -/Resources 913 0 R +/Contents 925 0 R +/Resources 923 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 889 0 R +/Parent 871 0 R >> endobj -916 0 obj << -/D [914 0 R /XYZ 74.4095 793.4011 null] +926 0 obj << +/D [924 0 R /XYZ 74.4095 793.4011 null] >> endobj -186 0 obj << -/D [914 0 R /XYZ 74.4095 771.7323 null] +194 0 obj << +/D [924 0 R /XYZ 74.4095 771.7323 null] >> endobj -732 0 obj << -/D [914 0 R /XYZ 74.4095 573.2241 null] +743 0 obj << +/D [924 0 R /XYZ 74.4095 573.2241 null] >> endobj -634 0 obj << -/D [914 0 R /XYZ 74.4095 530.1467 null] +630 0 obj << +/D [924 0 R /XYZ 74.4095 530.1467 null] >> endobj -398 0 obj << -/D [914 0 R /XYZ 74.4095 504.9966 null] +408 0 obj << +/D [924 0 R /XYZ 74.4095 504.9966 null] >> endobj -913 0 obj << -/Font << /F26 198 0 R /F28 201 0 R >> +923 0 obj << +/Font << /F26 206 0 R /F28 209 0 R >> /ProcSet [ /PDF /Text ] >> endobj -917 0 obj << +927 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/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 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/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] >> endobj -795 0 obj << +806 0 obj << /Length1 1612 -/Length2 16068 +/Length2 15936 /Length3 532 -/Length 16940 +/Length 16807 /Filter /FlateDecode >> stream -xڬct&fmvR۶m۶mR+تwzO=ƽ뚸c-rb%UzaS;c3=3@IV^hÑ:-lŌ< )@ h`a0sssÑD=--Tj*Դt%`?5_;,m_?@k;{FU lYZJZ -*I5$hd Pr14Ym3;G;[SRsbv&_ۀ&@Tt{? `hdUg;?|ݗ͗ LUILq:[9K 343q'`FNg?SK'{k#/_` -"8͍MNN_0_To[{kݿW N@k38f/&_-mii[3;3ӿ.S -tW Ll=@38F;/;HozoyOh kk#|M;cm27?lOC ࿃v6*!L LZ:IXM,M,fF_\hmi b_331?g -hkUdhsJ{_TL ;w gap|9bf?x 卜-:_)31+J?`mMLUg#[ӯ_&._%?jt hjg#=+ù;otZLg|4ľ{q]_z.w{]C,gʙǡ x?5e_*zu(Q 1\#jYnBIhoZYEpڟԵ$1"#H !>mn,9+"EC.ZW5TF M'F~>9Yܫy/NdȌNA$yGjM(>Y.N|-3AVdAsYЍF½mji^攻ڠə"\D=uDd-9q)Ï] VuryzY8J ga-EF7bC3rA- -SR%]Qd 0Q:5ejmrKߟ{K:;,Ws|I't doۢWx c//i+ Ȭm4G(*Z4Yby*RcJ&בf㰢C^tl'HG t&^F=b3q<&c#],$.댋H{VYFO΋nOe$uFr=+I%|5CnĮގJaC:d{w3:xZ -=1tod\⯾]$#n(gC_6 x| vվPDD֑h ~zOjIHջM2Sz"B-St>y,qL(-VBKs2a8g&b%>ȃ3W*JtIGEli] ,@XUnP{J㖕n3BCerκngf5ojۤ>؆3 j&sP1gvz< b%j[X&Y5]dn&ˡ -Ҧ=exjiΈYuj۽""y%߶Pc[lo)O`2ϯ)E0#>;+fHjI9dY6Jۤ. [qLW'5g3'D<X4sjTn\/qDOfqOjITkh}N>=. Yf AU]JSǭ~+("%}}A7u|yӐ%|NLp9hĥڥhg(&4nӢ 03F̖eƋ*G)d9w´9yŴgbU-q\<-3jESmv|Hc(DK7J`[OIӕIHcC.闟CUiL)j7[D YA:iZ쩮{۠iVL"0Gj/btsL);tg%VNcة'vcGBJ@1$Z;ժ:u+xF>o{LcE+\d'psG5+O"Cc .xt%~I1۩grW#<HCWON= چ*ܴ5OS"K0 Z2ɪJY$?#,4YM@e$ -4I{W-` !#g(KIN3mje2aϊv^D}W -J sY\ܑaFUQ;&g~w# Pѱ7@ʷ -ƚb>@(Q* {'[,ā7ڰPŻJӡW3] [m9( rǕF,'M׬<,ВiN?yB^61=?cq\mJUa'n]R蘍@šC6)%G4t>UZNu.gru,B4F9dT0V9&"/p䷩1XcI #֗pKJWA [-0 -iR\%{ )YL?Gl>*Mq-c*QR!sT]}ȼvTM miƵIv7ƳDzpج;1Zf%>Ȁ|ٵGuM69 9B ܞLFE ;w^t|# -Sv<3&4CxfBp卵ɵZQ]!~Dp R TǮ֧:1b!bersAG1ޠ5fyd|%aQH̱El’JI GCQFy> _D/ wOלց ,q fu1 %?CĢӤ]4|C'iH]?E9u/~7{nf׋2 ,8P֍( -]2"?4}@Q6RꍶWUhX?}j 1ZIg`xm ;edtYr} K*bPI=ڛF.#nWw_mynp,-!PX~ =STy!˫1@b)RW /aٔr³2ksJ N}sy`fC1T˗] 'v2G03cVCDZ='?%p赴Y\D_U!.i]0$j}l!C`]A /:&eLti7UV-EbMo9{PӞՇRE -$lOV _psh֪nHSs3Pm9-(dmrSՉn>[]4V}1=wjfyж Tx=APm=rj]?<8avR*1Vng n$l;NGA4m -]V;]!d7CJ'q灏63.v`*>>~K5<ӹp}w#KFK腜,T2.{8*WXD]0csi+[E0`o0ljf4xnK/Ԛc4g&]255L6MeoA&vc0`ӹI lSbV]JjIS\MQqpr%虥'[J F^ 5*1(OJч/!X1{ߧ?B껸e PѷʕᮒJʜ }JB1};~dɜw[JS݅pɆբA~"U}ukSg]}'ύ/EcQx߂-g ` urN^}1VS+T'Cohly]V#hln (~DV_D~Gh%8Mmbas arKfڛw)D s(Hb{g ՓFAWD?Ln&VeسqEş\_HBS5{5PhYÔq &Q -s+og7=P---ηyq U"k,VOٕ*|QEߏz[R 9r_f4t)#?6= Dbtu7turaίs=#z-5$)Ք[TU %^VG_ż,ل?#N'RZZ1 -"d{fYF'Qy -YqNg - #~hdE*x2^92=υDG~}m| ^zS!S{X -)t 5P#@wڣ_]US:5$1&djx;r#P1ph~V킸cf0Gz{˗jZCE K0NCDU%P2րQ^j_h{-rI0ДC8K"mK}`:?޵:>FU|NL&p̹1=_Qcz MY˖P99[Ys0+FPα}iz}65$Eq59U{r M Xrh̹֨E:):cFΦA ϥ/:4;6gD&a.o,gI~ggsȳAhSi\uNt~>dSaa IABY2{EDpSNK$t)L+,BR9bֺ|4ZSʸI02 75 k+!2=7g6dT<0pqh8͙K–GME]g)dט]is߼ZK -:79]lZ)y]TdL*Ҁ7qFJK#3?Ij8GP"NCͷ*1HG@|Hl/} ا`Sk25;+3 iWC)_'BĻ_|3̿ $д5N*q1OPNo3Q5ݺ2z0H\ast׸ -K{Tk~q{82xt7G]EDNpK`;39QFV&PT޽>V>DmKIԛ񱴺v}ETU0S/AjAa]Vnu?^|ܳ(0"Zl^tlH(P\̜}(l"3EbX1# PUtǑ~*)e*h8OcC%:2ZD w~KSo2fθWg9eŅ|y b2f\Ý1ͬhe^d]l=[ņVrMBWw5.5o4ũ[a홫-KB|uk'Ɲޜlݴ@ޗ@DHj5sH7 P9lrG 0O -ǧ)R5&.B4.{{ | N'PqIPz&44Jr/d^6~kVzFghib;EmϛU8t\qW z&2>Uɤ+pgilܹ׌ѨxբJy#4JyӡHfG^=M+Caw'e.U@pcmT/$/쁇qAL7oI͉Ϲ[d mlMh%^ =H^`%doq,Y> \qR n=cE6it|%c*d zcruϯ'yԨ]A}T–iK&i{0[oF )+nиk38e+]f|&t3ܺDt4S ؠGD*w%=!tI)jA^Yfn%ړ'mr%_7|NyWn[HΌxjKpw}u}F/#|.pM.ܢ-[n)-,du38JR2Boj kat85*VMDGJp 5+1o"XG@R=n(ቕ #lt jĀvWV4J M'EP18peͨ&0TsNTGm|NF166|,$,8?FZ|!;<}E(ktt;(ޞ?]4)OE!p45qPårq2eyʝa0>=#곰>3v~;zZU#P+WI +}:ͦayTѽ_q3U_4j4h\<`rg쀑n_O|lc,(y+CqRI{Ob}xb|U,摛iR#M:P$SO9GD~RR ->0-¸]ޤgf_π0NIu'x+`b՛S"Xx7)<!tcP|92@va=Óݿ|Z8°WMέC0dK0\$f3mQHBZt\'HK֧.a&#d)LmC -BҸZ6go 21QI.,g"='שSHj_ ծ.QAphn.X\ρ:d[Z)jsf٨$h&-{}By -cYG`d""xmK%U6 譞Q3?$MmZN\ IoW]$sLQr7f~: -U`9 +8 Y/}eքz0BMR˙0(5|a,=a+8o9%p&-%s3<IĄ;s9&T#-m9 -' X/ÓN:"0^ht6RoaU[uȉ'DQ{b*__ۯUI~x2hJ-[' 2$FU[=(j+G&vʗN}N;DԺ?W) -5)+N_~*G Զu=!X`DX1`͟V4Mi[ |YHE :Q%_^¯b 2P<?5!G^*i>펣$M⯃_ O=zԱI-imLb|i~뷛8ũ -Kt >7IH[j+ј'{6k22t=mjfp?vP.ױǻjhJ3&ɨp&b\X$'0^cD%'@S،8f "BP8A-D`D_OBǠշ"kRBNOT/Z`% 4*Kb ޘmO湖W4sm2R/.\f` da=W:BhuQv~>]^+*ps)-d҈"ç+ *C]:(h+i~R`-rF)pP!%[,pmDpM!wn`ԑb뗱)>[`,O IjS8s*sg".a;$xE"T2ߔMo\`E/4HQGڲ63\_Tŕ9i2u鋯F;8ٲ<-drZF%" PHK)WO[#(ɈͿ#kCK/D/U` Ã-&kkVi* -%d|{sjo/B MRDu~XэAC;S],Ӽ`Q #~3vU8[q`7tl,~H+!{|!2&h ]iʹO 5ll7ijQ)А2{##kע+ox3M2qa \"#J=QXvΧ;}F̸(gV9=$9vovK,1OeI$u|$}\cλByL,hIb%߶25d>1TP'EάtJ6)K$+1}chh [cS{ͫ41FUХ&Oc>w̩\Hot^u,N9%È]~?o~ S窾Ȳ -=tRțqd{B}B:2<볊e Z>=,"'Fyg_ 4M%4#C+tU7("mf.xϔ;k IÎ`or`kBLf5k_*휩/͇_ژVŚ099d Wm:SY } ۰9J=Oq=WEcʭI2ཱི" -!i7c%kLp]9'kݛI^^Ϥ>UB2e > l蜧V WJtdgC_깡h6h'/.i6UL?kzd[ɠNk7U@J7ߕ`ezP*e @j*UtkR[\Ua]mbd"]y:xu19zX/3z~ C!Yҙv$? -V?4߻aDo 5d:ޏug Em~{>{R& -pz"5 ^,DBz'bj,Dusjۑ-4s -5\5?6W'-.'*w x_k -${'*tU"ts+%fz )T#nF"ᄒ;AW 5x]*Z|\ 4yhȃ17pg𻛖ȮjKŭ#ϳT$qACDgҋ:W1z_x;Mz zǿ8i!L ]z]fNOJիB_}rh J1Gl?7'}GUn{9}u>-9%jŭwYv3=Lӿ7`/Y+& C 8o;'4*ᛝ 3ͱFƁS;:AT?_*|aE":qksݓh Zg4Z.ߐ86?oN6d+()xqϳ󮤘^Ҩx$qKqiGKvS;OO?Yhʋ#2=Y7:آc-ږO>'4@E(vit.b*vztH\–E zԀebyXR{:Cks/v~g[I }n_uQO~Mr$-s%\$ BZ||PSnjc8AbQcy*Ra6m`̞"^CCܢN/=KIj`Ц;yei:kf@gm26Cdpv~w?&aysm0%?==2XGQБ:FhwI; 1:L]C&M6KiG}J3,!yXv<*}AکX$T`8>yMa.ۖ t$'~"k}.؁]sGH~׊/JR)i dFKLV߆Wy f0N{rln}5vՠwn>T<7)_V%PsOiS 2e0$.`0Aymx#%W wyݯWM7!DSNK_oB D" ' x` :GlpŽMR|$c` 5"neNyAV03(Ԏ#>bpڽAki~9KaR|բl*sRu^&-넬OCDT~aW$W$.Q~讁[r$m㖇-B5>no{Z߾XFWt#Ɍp>f5!SNrOO.ioUhFya8jgE.槾,gP4joPCqQz퇻Ÿȿ뢳x+3Ԋ{+OqiXq9\N5!x{U<1\;tf:W>bQkJh䥍n0\X0=XۇW6/:u rJv Sf8D+>${%|Wb5uOm@F - OL/y/83N,p܊]Wl%&-引ybR5}//ؤ+ -F`po[@hxc5]>_,1&*O4šPw-@;TnD muHtjT)QԵp)(zluF5Bb)(nR)>-8.P1 TJ ##A8Me7/LO+7#dz5l/ pKv8jiiXK <5yE]{ϭgko>K%eC>Nү7Y]WOzW-[ص AN:Zk}_\1ԲM]X82{|j CZWcEϭ.o歘Ȍ7ǖ1]NGcIwؼ5c-͵_gvMƶD喪[72:[bn@!5`XXTX"ܸendstream -endobj -796 0 obj << +xڬeT^%;΃www݃Nnsqn?}{j͚UڛDIA(ao Pٚ:1-\N@c  4M +@ICGG_B&w3@ hc` s QX  @TQI[ZA@-mJ&6 Sh ;lۙ)͙/340:8lA g@v6fk7!'}]M@.Y$ΠnH3{SJ/_1p' `rv1/_4\Avŀ0v2:;OwNVv+q8mXX4udϠHۙXm7su>7ӿD%alfog 0#0)ػM SO[ovpQ0;`o{;nl ?l@MIHm_Am9KO{}(c,Nϕs#,4u!/`n. &r _r{P:*e0lNph܊0PLӛ1{P[/(OF&FBSA!SF8 W{Gd"vCmP@AGe+dQi%%ȟ,$qTu8/<˳J!J02$mlre6'?P + ^dwh7IQH/1 X,{fDGbW bI?Y|/*$OѓN(g%dxw;sT)5cWǯfpPj OnBwGqcB5-Hs1 ioI6QQ{=KqDlق],Y׽PFՓh ~ELn^'%)fd'S1{ TCc0JL6,+8Uocj`l`NWߍ +=Q,slwL˰S;DV%&E% ;GL =EAqA4ߡfJi0>zq{q'ӘEWX@vҊ7ș%. 㬇\Q[Ku(Tkz=y/'٘6k "g\p4ʩ.2oHtmu\ + ^1 h'^7[ f8@9O7!);6 JMjѻ[05"E]3_l(u8}CSi+5"ϕG!LĂb]UkC{@P9[~ue&F=nZWYtL+ͧK 1ƽ6z&_l}=ˬ+qm^7X.0?k*]@QF\TH+{+[h&b5 貆v|,G5#$=oyzY|qŃtH]STKN),8ɭI*mq3zΎmJCzCsxj+<| ˅^rp_ ͜^4eIo:)oN迵Tr|ާ`q,:@txM,:*Wp]?p [ +VtdsqhF`#%}gdwU}JfNX&l"JW=iew_}cpr)6yaVo{>^Y> @ 6P R;PI=$0?)]5<04-5Xsx@]@[xH: !<8VդH#{QyܧJ-.J#}(3×p_I캏F^lur\@?. 9++CEܦY*@vq9xaP$1TR/qX*rfPg'+ʙu?`d5~muxi7J#+fp=qW( Ho?jr ڊW^+{7yl^PG<RR'M8"_VRvز8z- *<'6g#}3Lyuq̽;]O`TKpG_IˍYHgK!C^Լ+ڐ.k+P,iDHF' TwE.xC-h GH'qs=4~usvZ&cQ jDaXH (Q5T_}"Z]%Wj V1OEk\'H C㊛ڕ#a &0״K.%bpkt Kׯn"_L^a*X>,œQcz\m ޹_BTwmx(A9k`Oa)R`Ǝ,HGS3W:/ܔs?O VRdjA{umv\~:21iWD0ɺ +{ZoQI[~AVfe|gP:|d f^ + i?7: # NDZvjgo +sv>$n #[Ppʆ٣j 1Je$eXUf.IiOPQz8\G&6_!܊Nh&KtXΘjTnŕ1PdT˅7kk=zXuw e ñ +KG.Ej*@n5oLfe|(3*8Ot1槂܄#XwMe P~֢b\VAV IL@*+%1_ b\%mIj,p+,MGF9 ^).酖+ :Z +G*38+П5)w-kTO*J "/w@Qvs;8^q<8 (Sd qx|lޑ$NU֤F::Mn ?\zҮoG_2BBAȴ(1A$b/T67`ϻ8|?jF>9j[&104G )#;tEl6Rñ|7लsG r+&,n25AS"hSm0XTf5^kiA, ~XVxtN aik,EDBwc6r+{>+D[:Z]U+2G= f͋# oG-"l:-^kWV^zfs9v%HV#,Ezxb8 69Ǎ?!|^lC;\r3E~[7bcC;}D'xxӮ\#Ymv ٌvu<:]^*Mĥ,Ώd8aVry.a{0,*[uS>@hVI=!jܛzv(܈%~ D,yb +"E7KIڀԸE~ӟ9^0 +F讌0\^`ձz d,N]<86Yrz_|==M{Mia' 0dX*P^YS h'Ap5uO?8f?=4jQ8Ӂ8\.,n;߹tlL5 8)*tb{a$+͏R~#.cIѲ]= ; `>!FʄHFP߹*zvucS?e!cOhiXN_E銤emM9/7 + Uفdr@lrE_%u l( E k*6:/]k`K|֏G~e􄧚e#;062kA:ލ;lq=;ݹGJ;&R$+HU Rմ*)yF}3NOD@Կ#xZp=vt\'@)99F8eE!GjPQgC>Yi<ÁͽdGCO2 *ƦSl`G4gԢCZNZl/wg#w1vrI4glrDp~O$C7h*mjð"|#~(7hP];F:Bcrsx)I@O{v85z3xO2 ++zlBTG$v%UJ9&+nA9 7Ԕ-1;>Z?1I'g o L^UzC:Qi9HL/_*1R%_\~2-Y|M9e5{1'?cXCj7aL)]}c.9\NST* ae𹗾s&"վ-ec-zXC@Ɛ'nl;ܿPrYHP?GO9%e]MSQ"Q^@x3T[5'*.$ԆZ`o g1Pa8GIQ!d7GG`"h)p;+9RQ'r ^>x۵0ad#} "{Pw|#.)@"-%a}C͗ݕĊ[4ŰSs8X4k:x9u_]}Lї7m3c7鴆&!d]Xt]y`B HR#6ĹauWfM+sO!ԌOfS˹81AS$)35K<ܷ< |aI>e={d4>_J ~6J)s4' s;r !oDL^NF9XpI2g[ +D(cUɹu ?ߍd`&U%u)!:H]:[Pts;t4LJH)q!z#\H.,ʔ\@ $\?qߥtQDY/!_]*Z聕hOȢ'K'2pv;D`J1kr&SD1rV9:qe9uduo x*0G_ZXgwʼ `ܫ59_+w3#aNXEP8v al֝ rusWԃy&f>Dqq/G1Vg0QڀᣂmG.H2=Ԋ{ +t;)5N[hDnHX7'0mNAEo2 5,@ϚͥL԰(zMw@Y?.+@>Umw Yz$nDFAҧu]j 2RxII|x7Pa9D.7WÁΣP2&MG Tf䁱#JxXz7u'ݍ:5Z#ڃ pWQy<ͬ{9o+ؠc%b˜.\DI>Zv.|9 7IkSt>~V!v=]d%jO|3i js' +BzKP %ȱJ|/ꮭ*k7q9U4N0Zxw1ͧlVF /c&VsQ ++7;ԥk9rBN4}3r$dK3'k_|0>Qnh8vk@) +bJ36 +ohe*뻞eX菭}ְs᳈mNJyg)Auz㤬Ŧ֒Ժ!Y50d~3cs"rz laݗr# Ab):whpMF!{^)06 ّ{HH,Es2W՚t6T`}?BѾr )4Kꃌly?-}!XK@ "peQ{?+ùa" +(o|h_22qR}bk|+39y:~I%NeadMP1'ßEc g^ؘkbOvN6p9 ,i'IDZxO99FC4˜-W"KINxu/WbDtjoyk&Aw9vrJ[=h eh.bjX Ӌ_nQLk˲:6r~x +6*8C/?vSB'GIē{wVONaƤW jVzUa`X>T&O9/9/ U;Pw*L;xp8_uT_MnR0z3&s2ί~>gW8yntrL0J:^`X)⩐eru<9WkP^n6s~=Bacj\%ɯ +ŏ#{^$w5pSջChsg-'8/Wd3楘TeT\Z@Da }7FDC>΃=WW+LW(F~0o՗ tZ)T +\9 /2|d}vZ(.}^*8)ј?JVƺ3=FpK1=)$}* 1IjX"B@γ6B-M' }%n=_ AgϘ%'*xw[;-lS-6'6r0 Qn 9yf$FJVLdM :~tc^ 4 ve~_|kV'^}li ̜&9- 7DnTl K9,{3 +GB +gs1qqsP,XTϰk_p)E9Uާ5$9kyl;9DN5[ qX$}l9-&cZBIӀ?1~BBYbY"JW +${&Th#)K'4]Z< bN`c"DiةY.%`JJsQq׿5>t͐czNoWchx%l(!iq2 ~w#"ٹN%tFyY:mz0v5OSB~gfM x`\nsiݞ)+' +l7=8i ER…c'~ᲯX7q -[Li;5l :w!yl\ܽ?d]&>mhFg$Z<9 awu,:P=@:rm]J%\׷HS- qW@68 zio0Z$6 6qXXvlx ~Br?SL]j)6y"r-\U:rI*XE`=#P- H8!©wޖ`r5+X2KNgfuj #X>PPaV3f~},WqիdkǑNb2Nқ?*q}2UQwcpgAtj5`۝w4pCzNu~Gd;Re- srE4zseZ߱,y>ROIcwfBtϞqxڰ\QKr70`m:()`I1'XN,OUqYvjfDM-yJlh|P{"o*Ȼziq'԰OdJdQ܇˜7h;h3o_Pn61w2zS2v1 BY Ԟ'hu\mju+LkUQҊqڊ0Lǝj/te.n#''OwDXrUB6 7O:(H|UR5 KWi> +G1GQĀ>\苋DJ _/,= Z32/y7ۛH >qƓctQ)碨GۉW' ZcR;m깦[Χ}l2ROg4PYFoU=߫H ZzQ7rhRl5W,Y_^FewX zILŔ0 +\b͔mb*b¹,X[8ǓI|.+E 4}B2ȭe;:’ ^PDh%{ R̡,C?i*٤<ϓk7濒TBfM{mlN4jpD M}%g4̴E}_zE ?ͭUPp cZ@&xBʅ4VRxh2bg'גĄ^7,!rt%L19PxdE#bWz;p9O˱G,',mI hGt0cIWgL;{@p 9z-@2-Лn`o^Jl?I*# +nɜh ":#yێvO_Mu[Qc{`i>\ :$e{лd| +5=_TԐ:έĀsY⯥U1_`?*+B*wO9:2QX,qH$+1y3`ϐ u3)E{rt2~#^uȓKL 4Ӿ65쥭X5h‚깍ll(SiKr qQldm6p?6dꇵ8zMꗛ +SW JQ%,72 B(VIu,^x啫h!\JV;o#È 1poʟbKod,2;Js,P T-0 mՌ!9Уq֢zУO3JW:פ;O2Q2OoC1i$TͰdvcmǤj[_z\ŧ/]-.@N'iKj`«KQrO!w8w[c ?15yf˯c()2xb_%#Ik?n +Dl`7eO൯ +Odo'lc*(+%>: -Fej *r ht /ͼ{W&=ʡ$-k*O*yS}i+f)VYh`% 8V23,6m\k Ig'gMjגʺed E߻*",$|AyN& Rz|$m%d<1Dr - D37L{?,P õ;a4y;=$`kn0D퀆&XjYT,SH"4z fJu/aXY?R=MMF }siB18`{~-y ў:4Ȟk𦻀éɶuP90{l JoV#0D\[ݡqJ[EB,L;W4ϡg|U9%~!w0'-{sٶ@&.u:?Nf +Cnߌ]4&lM0)bNN^E!5s~#?;]YzI)o3OO @ꌼ394Jē=_^Ѱ1YCX^dlob +;+':EnjЀ<ֳ 7/X`=."JV|dB )*'\??kSqdO/zD dzqFuLlIg?/xַ}X6aR 'lWqKdolVL˞4ý3n#s+=;k}#? UH6znE\d xoUlU0X5Sm&ahH:MN CY먓7o\L`9 +R M\ XJmm:qDwL1 BT:r[^>|\fxU4ӵÌSل2?ue,O6~fjh6<|y ;- +őK2wT 5 GV ȩ[ Z Ṃe_ e\>c )-"iF 9B302wGS'` pl:XKmEiO2R d&L`7q~AB 뭴PXr.`8s|cmnqʓ `3ƇvK.A(x3=+ ?X~M^ +^{n$l־"x/!GBRH/κ.͑Q4|e#^j%x/Moi? &J$C*de%U' +wb\;Į2%zdbU{)5帗T(۷\KkpC8Eb@+xQRB5@#\\d!ȷ+VjȢ(Ze%r> endobj -794 0 obj << +805 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /RVNJYU+NimbusMonL-Regu +/FontName /JQZVWM+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 -/CharSet (/exclam/quotedbl/ampersand/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/five/colon/semicolon/less/equal/greater/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/Z/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z/braceleft/braceright/asciitilde) -/FontFile 795 0 R +/CharSet (/exclam/quotedbl/ampersand/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/five/colon/semicolon/less/equal/greater/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/V/Z/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z/braceleft/braceright/asciitilde) +/FontFile 806 0 R >> endobj -918 0 obj -[600 600 0 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 0 0 600 600 600 600 600 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 0 0 0 600 0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 0 600 600 ] +928 0 obj +[600 600 0 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 0 0 600 600 600 600 600 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 0 600 0 0 0 600 0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 0 600 600 ] endobj -640 0 obj << +642 0 obj << /Length1 1606 /Length2 997 /Length3 532 @@ -7393,44 +7440,46 @@ endobj /Filter /FlateDecode >> stream -xT{Tgo46ZCy%ZWH@0d$S'3R`uZP+q-.]\) -ڪE~ ZZvpOk>}n3!8izI(cqAH$H'+ps c!4%xb5:\) @XBA\Lc[c֏fq|q =vf!>(!p/Flb6ˮ]k/5$Nm~YwcY)QA(=.01]8^0qkĖ@׋X~wv2,(dnO/^Oݴao?)>Q;5[tDQNn/N}҇ۺ{OܕZ-|=tI&iєs5 Fޡ{;QcHA\-#ONJ(S꾘KÕ♈EU6؟~k.2lYo?|W"-:QjI{EK¾k-{%&c5'wl/Ţc{GĬp#ԹIž[ZZQo8xĮ8)&QD?Q((qep9S]+bɠPעiS{dyrZiQvuJn+wd%}ٶ9YW-j~括حNaH{h KNf´`92'%b=݌GU)緭.*χ$IU~銙]'\ mj%Wo2z/צݢ;U9[o/nS%|Ukn]Э+슗w#+i@pcY4h拀:B6/z ntx`ť%ZdIIhT}w"ݰ8ǿ:efWmkiC]5i܆rLqcݗs,t콮JXҟAƽe7-HVeeÖl=Z^^cf#Ωgmk_|9/57]hx0}7-s%1I%Wff$oջ7FwVߗE/.]Va,>- +Y6Q;?Jv?IW:NL%R÷6\]EE%˱)#]1[_:L<'q\GV6 3J>k[N>p.{i57CR4K56/䬍L4==AWC +;$n}rnJbŬtͽoJ?{ǵAyZ^eer\AYdSz>}HX;ʰ5C6v:7>MEq`ہKUK= ڕX9Ŧ<(ڜV-7[ +E-:6qg Mnr&EZT_[s۪=Evnlτku>]yvJܶ!'ரfGz֤S4#uonG)IXoiUvu kJ.t:~kva?IubvI׃B~Gg~)KkNG60>o {U_7ߋKm]Ɋ[l% N`zl؜U];RMEf$C}\gL}X혡ŇĿ>^CzrpSn.Y/.Jo|aOڳaJ'+d)Ŏn^f堛_՝͖󳗖oNyQ)oL?/ꕕ\gezjw<W('pb,Ok1v_{Fl1endstream endobj -641 0 obj << +643 0 obj << /Type /Font /Subtype /Type1 -/Encoding 919 0 R +/Encoding 929 0 R /FirstChar 229 /LastChar 229 -/Widths 920 0 R -/BaseFont /NTAAMF+StandardSymL -/FontDescriptor 639 0 R +/Widths 930 0 R +/BaseFont /KQKJBW+StandardSymL +/FontDescriptor 641 0 R >> endobj -639 0 obj << +641 0 obj << /Ascent 504 /CapHeight 687 /Descent -228 -/FontName /NTAAMF+StandardSymL +/FontName /KQKJBW+StandardSymL /ItalicAngle 0 /StemV 0 /XHeight 400 /FontBBox [-180 -293 1090 1010] /Flags 4 /CharSet (/summation) -/FontFile 640 0 R +/FontFile 642 0 R >> endobj -920 0 obj +930 0 obj [713 ] endobj -919 0 obj << +929 0 obj << /Type /Encoding /Differences [ 0 /.notdef 229/summation 230/.notdef] >> endobj -613 0 obj << +611 0 obj << /Length1 788 /Length2 1202 /Length3 532 @@ -7438,46 +7487,45 @@ endobj /Filter /FlateDecode >> stream -xRkTSWF2C#'K"D /!PAB{$fn.4< mEh)4e!B"P_@E^Z - -" *>ZPNП3f9wηwD8C '&y& Ba`hu08lgw6D4G `O'q< Kt51cB&iW,7d x HL&!$%5" pP]* e:Q~A&DB*N,"ѷ`nNCAbdS $8w&0xb68 !B FhNL-Ȃ9 #0b(Xοਰ0G  (.B#֙#rAc0:n;X,b&p\N}"]L,\NC1BwDN+ Х`<HB\.eoN,bz3\oDa*(tEdB&=5@U2ZYӖ{JA{8aro \㏐cK&C!,u&;d62V|_D0.~iwŮU}uZiÓO-kڄ0MUE7Ӧi 6Rr y7V2rh/YN}}덨JWO2ګ9x5*w|o ]%B>|DXV칩j .B;j~fϔ6S"^bԎo -ڟ3zK9z;<0]Sc_Æ>%}ޣY-3<ͽ٭y5,҄KɁÎXzܘ O\h/(eoNht;ݡ -0kCm^ YL=֬FBM瀼Q,Kce<_-P4YjXvڔBڣȍnBN/"H9VZG8ܔor4؇fOo^\X]>W@c[ۻPֿLcd{%6Uq*']l$q%79χ66lנ;"ܱ>ݪތV'(2!q_2:KZ*%ufL'HXyC,Qu`OAIUI]9J&6T !g1R;Zv=sp!}"qH١s~aחq"2xvї`Ԏ³C#Z['o;qdZrg^V3%h8[]f 7:H57p؏ ? .l9o3n h0rUASָͩ\' -Ű'0O!찵endstream +xRkTSWF2C#%"(oP HȽ[{37" +!R/"/AD|@ZX-( Xkϙ_?g;{ۇlwD3<^tg:D&ఀ@04P@ḁRŀlM"L#Ip̓OPH%B1!T'2`< $@phBPoa(U.2( t"! h[0]7X!kqqnXE /ԟ "NI8 ~+CHdq6$3ÕJw}#2."p&@,p+h%"ӥ0^:pDөt:CGwB B$d IOX Ө(F3IseT7 B@b_İL<م ,]o;`(Lq%αwљ rXH„98F]FY+szrO)==MnMW#bkrludq$bݵ:㗥rFfo˟/.صJRo\N+mr|鑴e 'J|[Ud/!(?HѕG0궈f7UםFJNA9OJ:E.%1JSiq>{vuX eni=^1vU7ٮm!>_[[a"Y+Tenmx{[?3IigzgH /_`j7VOzK998>Э]S'| } .J|FZfx s[Gk x'_81G+>^PʌlNht;ݡ +4kCW`Ccަ֞kVi#Ars@^(\ k1W|nvQ,{mJ!QLmu u'՗@Y[ #IYY\i|?unʯQ9^B7R.w^{F. +L1>](j_f1[v<~8Reg6v< G8VҠśCR {kZKwsGS{Enqow3XI8/%C-:32d$9h,}]bkl''{:l'X{2V4xwQvj՜+{L&19Z Ymεиg)٣9Ua6,CDgN`ʼ`}X6vD1f{JirsOhy " +U*T?/- mqbzO;E] 5}4^[6+_ѵ+4S}=*\cw5kB{0`I>)ObW%%g޾IvɎS}Ll;C|þ/W%Dd/mG)gFt7vO߲wƥȴ +#$3AgJp@nt:b~9o3/cjSW\0̽9o;n h0rUASָ͹\F' +Ű'0O!1endstream endobj -614 0 obj << +612 0 obj << /Type /Font /Subtype /Type1 -/Encoding 921 0 R +/Encoding 931 0 R /FirstChar 58 /LastChar 60 -/Widths 922 0 R -/BaseFont /HVOIRO+CMMI10 -/FontDescriptor 612 0 R +/Widths 932 0 R +/BaseFont /RCDFLR+CMMI10 +/FontDescriptor 610 0 R >> endobj -612 0 obj << +610 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /HVOIRO+CMMI10 +/FontName /RCDFLR+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 /FontBBox [-32 -250 1048 750] /Flags 4 /CharSet (/period/comma/less) -/FontFile 613 0 R +/FontFile 611 0 R >> endobj -922 0 obj +932 0 obj [278 278 778 ] endobj -921 0 obj << +931 0 obj << /Type /Encoding /Differences [ 0 /.notdef 58/period/comma/less 61/.notdef] >> endobj -610 0 obj << +608 0 obj << /Length1 1630 /Length2 1616 /Length3 532 @@ -7485,94 +7533,46 @@ endobj /Filter /FlateDecode >> stream -xViTV%تH@\Q@%Y2$0%L,E,&EDA(V*"J*nPAٕ -rqo=wΙs{]{0n,;;`(9+ " vf9L&! -е^pL0S`+=IDCc+,pR4vta@@Ha$^8xG H - )"ΈFI1H@"DYɦH -a\28LB  -*EhS%m!u4#)RH 8訂SyRM"`bR ʒT:RC)e Batl 'UrA%20,&IVvUC8. Syc*s@( SHѱ%0WzT.gJ.„AK3cL'0TDaQtH~s$oF:\*udL@/@h_> ^Tء3%DH$ J ĐJ`B0ͭp^ӹ#TI²)^K >`Uz(0j ,r+NbR}uC_nWU䀘k0P!&R"z~(B9A$]ogp(,dܾ WEWTCk}o5yeXq]ŁϾa鰶 &tFE_,6Ѱzi.sBzܩ泜{yj%ȸqys j6ȃ{nj.\V4^Y߳4'Yjabg9 ?(Ogbۛbލn|$!tA#k5gu:AW`lnSTm7b|Ӥq{2n&7etzh 7 -ԍ8DvߦZ#;v.g5 }XY997ߵ%mZέ ߍߔ -+>wgs]~MZ"&4,6Iv411,ۄCI%Ue66L؈֔৺<'oOxkujGtvIe`OYʼnٓmk~Yk_ߟ#F" 'bX?(W^ڟ$,EKCk "279kE ox w -=~Mf;>K ,&nv0`g- ]t`n<5NU ʹj%idvsŵ>Ӎg{76jU՚pHaVD3fssv/뺡ædS|Ǵ}<1\ιs*ns{W擲 --ثo8`X[|zXܻx+m£.t>%3{N3vIɲ'^w 3XQ\~(/0Spq󁞛Zͨ &$vzf4_%Cѥ,%ju­<;}۟9MKt#=+!{V7W+8={k0|v*C,5K{`ζFv6EI=[2Hf@آuڐ+%k,HvietML38369Όk3VO>rJ7EjR9<;i EX~B=^o갬b ;1rlfwo} Xi 34=Mﮓ9Pm׋ y˗wۮqgGzpFm,w7i=9UƻQc$)bFMx~WQ0*=7Sڻ¬L ۶t}e-TX Bwp#yaa'j%PaeQqƮ'0v1cWeѡԉ>3R"ի*]J<:}z>2X#5 .|q}+L{wj|kW5N5޻͛\zW-Fƍ#oɋk0ώfOwFĴ9?030>ftB9U[4 #?YGqx<?np3Fñ OL)?utrcs +l#'eK&ۣVp#)CYTnAS&Jѳ?߯`*X%4齞=v.Mm'Btn0nh|UX)ۛ7ko2ײ1a#e.o&,J**aF ?>q0lۣSO/YX/N̞mDW=Zr'&F^7uwO$1^8@_k*: 8/z1@ܘ7L|:6֎cqo㽟uj >$h9N}TMN-Ƨ?S0H~yG35׼M>蹱eCbGݫgK]2\_[yu\g+ݷtߺNףJSgſwcrݳ3.ghBj<4RS4l^adgcP4ݳ9dV T-JsP lښ9PQlVF4sK?clO̸?8cC/uS&ó/&;?QT;c*6S{j#G'kF8T|;`߾Owp 2Ck\tն{=|q{KI yz^gtݶyw"X-bLb?_+fԄ{ғ}3+WmKGޗגL tg 8R[nњƻv9_t +h`u{Vgqc'92vV\M36#Um]]uQnޮ&/ꋚpdf>|\vݠ(GC5JBuF*7[_fJﲤΥ:BedjUjtJWH3oilLnqqSdx8 c~NIYskǁԂBfweQ3~Oj%`؋24rAU2r' 0@ ,y +׾膻~;yV͏17ǂ; r;Xc"1-;Dލ/1$7vxf\K33G+!.{ҷW 𣇾{OQ $|Y Mohjzr?P +CE!_4endstream endobj -611 0 obj << +609 0 obj << /Type /Font /Subtype /Type1 -/Encoding 917 0 R +/Encoding 927 0 R /FirstChar 49 /LastChar 58 -/Widths 923 0 R -/BaseFont /LDJZBF+NimbusRomNo9L-Regu -/FontDescriptor 609 0 R +/Widths 933 0 R +/BaseFont /MYYBSF+NimbusRomNo9L-Regu +/FontDescriptor 607 0 R >> endobj -609 0 obj << +607 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 -/FontName /LDJZBF+NimbusRomNo9L-Regu +/FontName /MYYBSF+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/one/two/colon) -/FontFile 610 0 R +/FontFile 608 0 R >> endobj -923 0 obj +933 0 obj [500 500 0 0 0 0 0 0 0 278 ] endobj -574 0 obj << -/Length1 807 -/Length2 1423 -/Length3 532 -/Length 2003 -/Filter /FlateDecode ->> -stream -xR{8Tf4_͚\r 3۴Ÿ bHea1f13k]Q.{Fr-mǎtisTC m syZY{~>=# x6gpXJOϙp!A;gkkA -@>;+K;+s 3YPD$0p6\&1 ̎c *TdǛt:@\8i(AT6@# lْ#lVaYq)`Ŧ! z<@Qf0rxoZϡ=1AM& LY7H81_wd:DudDA -AqxҼ!65'dо6$b̙d:ӕ7b_T+5_5 X$^BDϫrePaĈ̭2EG!D1h ya3SFH&@8B- 1,A˭U':/9q_kr.# %[bm[kcR9,$C\CH ?T(~kFMkZi#I6tm}ړ\Ize{HS:HZ}Pw3~&5dѣ%7L$H |+ ď3O{xk+I#k -H{Kfo*6pX F;]nm3oҷbk,3*)nl|-_^2SۂH8|O=_ ,-T5CX:8El g2R9jay~ ټ ->{lP`{=$|vyA(tPZNac -j ӡS"g 12Td(NW칱{]ڢCD̴rv=wʉ7:NT&ISVPGv.:KIK-ߵ -tSw(/Ee%3b;E 2 - -h.WtH[߹?1~kvc_pSgO |ںYYݙH_n1`Y;e'nM盬]3{6ǒٱUi Qcud{CbMx꜌?9kahmouȔi/l,m6ԙn94JL0yR,3@-Q LO:Kʍv;~xP6J*$km4QyPR~2:╞1Re.F٨VˠEC4|w-c-Cc!7ӝ'?fںҠD橊`yCox߾zW=_Z\2WVY4{Ф!N:~͗& +Ak1wYƖ۞{Ya>1uR*h5Һ-Z? ZmMv[ҷH_UZ:璹*e/}}x2'r.fw)n޺鳩ʽT&zzZ9f۶"R~L.:O*NJ GJ2 ֦> endobj -573 0 obj << -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /CRDQBB+CMR10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [-251 -250 1009 969] -/Flags 4 -/CharSet (/parenleft/parenright/plus/equal) -/FontFile 574 0 R ->> endobj -925 0 obj -[389 389 0 778 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 ] -endobj -924 0 obj << -/Type /Encoding -/Differences [ 0 /.notdef 40/parenleft/parenright 42/.notdef 43/plus 44/.notdef 61/equal 62/.notdef] ->> endobj -571 0 obj << +567 0 obj << /Length1 1625 /Length2 6140 /Length3 532 @@ -7583,189 +7583,242 @@ stream xVgT떦 H""U RB J$@ $ ҤH) ])RCQ 9u{͚. Q5(BbE%$p7{O 'B@uHSia,Ԅ`a s sHI$)(w_4 436 O;!/Cb@ u@t_0$ oi;0$&pD? F ϥ@wqnah781'4OvG(ÓP, wYAԉu`0<Q,0\0qG@|dh2<1p_aN4`4x_O?uqwGFG p,pts;⿖EHJazyп$kgE@($9Rb9Gw%wSk{"7q u~]4pq#|EajH'"Rbm -c~XfH( #axQ$)75} {x~W.ngal.ߞ -`M}a.\:/*)+ )!K 9Iuև`p$h(该1BP vD~my0́br %5# [ɜկiM+ܽiAރWsvb58󷾣gKmLv.G л<FYPq" Oz$2~#cƛh#<^yyiU]mRC@_zt(󡫳uһ%v|^$[i3mI[Dc|3M˷;5>2XMۓ4<$"R8m6Hm4_:?Ẹ=OwQ W;|mz@D&TZ:"+RNz+Tjg H[,2 .ԇL~gf <.S7NΑMgf;Lؾ't+(-#9]+EC7yy}!UB6ѫGcZBlcݏ*B)>%;;Rؿq t?_Z=,yV%KX=7n)KҞH`ź$nEh˪i ݆2dIGxp؟ǘ+eՁE !֩߯4J;tWr=#̢/ʂOe(~~6dx}GZ<2`G4xҲ^` 10`ugkV13&BAOa#LzM.κM`Q4u4mS֟]޷!H[C-!-ض{΄v>r;+ mTxN| K T#{vm &ѽŔcASEK]×U>؛ZJͿ9B7+7`t!yɂl}BQ5 xp6}SYO9.8ZAi} rfL7YkYOdC9H];I㐜/JCNUߣ &$bܥc - >>;n@{abI NI㨓*'x*]=;@Y푶Mu p}4rDAUKՁGWDbG<:~LUr]53,n/\E@}h=3R~WB=u!LKz**]ҏ|jb?=Kw,;gD%+Љh1Ԟ*2JtqM-GлTQr|S,#z=%OqU>4LtUAyRslyyjvr R[XZj&[W녵 H37nv23c]^'(Q _m^Cfعսwqȑ넜 -vi&&- 07u:?{-_ En v^iDi^3W[UKaX ?:)כ}iZ/ ~/wvjTmϨ]$ʜK^R% <ضb rꡡ "6'd2F < C ):J$_ nG\Z C:aOr)?-VXi`1tza7Iq-{ו)?$p ?+]HEIsR -\m!Z*'nlMon:ƧcI*4|RV])<$8gߎDlmWJSy^j#lpq7Fv)x+7LDC? .}E+÷ D_NMHP :OYJPV#}*( L!)yh/W9ū.aoBJOk5~zz( *$>}]/zp;+CR(ԥapN,s'!k E$Šjtd,J;V/hs|=)r1e|bT^rq9[2&] R+7<^ylu4X@b4Wȼ+6י^/0.8`6GIg]r[_G}vP=M\)"Twb\]ADHj~/fY cV0;uKѼoF_io;&lDyvD/nʮ}ݲl31~gc7o~@?=7K"y{tAhWygǷa膯#`uHG Џ>cD3y4:ZKoEubH6:dVWP|zHt(7Wo(Oagc^hYvxӢ3wy!Yk i{Cz=>`esn(:d>H[6+Iv&F6PՃLA2VPtXh:ͶKJ3Ѐh2; kh0*-M"+. -ќ?lأ/y?}\&qС Ɲ]m]y{[jR;X3eo~ɎH*;G0MrUxιq9 կ!I-lԧ!~ߐzK]4bh(o |Gijj_G4&~Ycڜm7z,sSMwj=uUkY׌wwV.wCTh7N]?zn.$-~9u,C P>mms:uA^{,")vLyEtK[Q4?26^.{8^F[M@a)[60lK#C[~?=:',#[̮ (^u.R|N/2 Ͻ}Lq;Muz}sKF }w.~ƌ} hd-`p 3WE}U$;K7E"MSE,>ϲ:FE]txٗZ=p*$l.b n;m|H|RX긥qzSC3.XrLU$ɟ֤^MCVlZk_mג[z3:d8~{杞@Quxi%;jI#*b(dz+e & lEo0ݫ-V 6vV@:󶖜۠t ƃZ|]pSIʤL0FmԎv+ Z9/uj`bkV<'dr 1O@NC}@"~f -[P ֝D?Ӭ1so(L݅`:JE)UaQ\J,+?_4ލH|zp=H_ @w \c~uNnFUY$X_)*n7n[rհ#8 -xމ#"q`׍nY ɀTs[]׼z::U+#u2f+Wb:f+W>VYlb, -d8p2UDMz ?KnE{u6e4Յ,N˭cƓiO(5L?lFq2[j"VC[6J&t9_p_4r"4Y\L^=,|,NI"eݖaEZLL ]%ݞ  p).F 7mKh<;w53EL'{* d\T\;晰W_FSY.&ΐ` H -;؈;Uco?JZKO `~wF.%a?a:(hy؄ZM@-*;3;l x(ᣚ'"q"h;"iVnH[~K2a0HoØxG,(:X -qIr|~:Ҹ)v?WĤֶ&6r{ft{@#sNҾ}G! 5^1K9`+u.0D1[A.vRW&n JH>}O!w^}Tcb$dfaDgjzj^hą8]v¡ܔj9e2/p(XT.%4xZxq zG5B@5>`sUͦV%ECxjzIO!S:}'CBV+wrti$6Styݛ(%{ ^faT -~]p;)k!ҠgDFu^1[ {r07h+#LRo`tkvGÇ='b\D|-A_lGDQAי)I&*t?K7Z}.fBb~[,p()"&7JDnH/_l|y+\*P+|6o|xӯiMёj;TmNq6D`2*SXWlhWGPP#< znH)|G2ȾX,ow~_$jAA4} 3Zf]8qEI`xyHE&STEyX)nNKe%G6Z[{O$nD\9 HT  ƙDCkb_A։Im[PhYw%[.C'0r]) Gxendstream +c~XfH( #axQ$)75} {x~W.n׵WWoO~0fG]ޔHJJo$:ChRBLBBo4ZHҘ`!H(~a;xxyE/jY*f1u}-6i]a+s0܌pkʶY& vF\)}i4̝Pw&~W)>fd^'`$UNmTe(eܘrVtLLh׈ñcIhϒ$vݖ֖3TP|Zq}A!ȏĐRplOy'w+g!"O TXӶ-"ͱa̙۝,[C|fn#C|y%N#&E]WO6 7. Ʌ\$nqfrd%A e\|+0dYdA@F6?6/p]܋T[קFi "HK*-)=ɕS*3 -pPAcÌ &?l3_gJ)mt j{]vE_;J@II?!7w{IjB gȦ33&l_ۓTvB㖏zծ `"L!ݛ*!գ1 E Wa!|1kKj{f?itj)_Ghu-Ltμ[x+C,ۛ|W7Ǝu?iO~%}]akm-( ljݜ댻,4rW:F8J|kۨ]lwFI1_xHhFM:N/=!2 }`]_ *zy^y9[G=bԛm~ż37fo:ȩ=$EeR=G$iV.$b]|U٢Z{4eش]LnCe2uJka#<8oOcdx畲TB%֝Jrm鬒IXp{feO޲mXL?K<վ#b-\qi!(tQy;,t K>aPk1Ǭ' +Jqk-fs9},^'KfI.qHΗl!QM1K]1sPLx7b=0$ey$qIc\YDb9y ̪@Q؁+^o"@# v*.qjO7r\b.G"%N [czξևNxƞUv]e?u+:`&\=I +R{OPG>5ewjѥtUitmcgD4x +rRjOV|%R8]#]g(F>ߩD?wLF8*I&r C<9rփ섏=a}ED9& " ٳpY1%܌{R|+ۑJ@xMwPq@&b_^=!)+#KA*犮R])xu%SHHTu=?2t?;w׉ RܰmHL,oF:uFZLy}L |Ȧ NNh}C2Fņ: 7+!TJO +ȟղ92^DՏgդFPg`)^R08'vE"aE5O2G99i2s>QkK*T/9tf_f:( jQS-.seE/<: \ eP+dޕΎ|mrLflH0#.h^譯>crOL{& +t]cZ1ޮРf"$xfIb?L,F+흺h^7L#wL/Wg쉷v@O<;" 7eIZ>nY6A{]f̳ݛ{?MITן_`Ar^%sKrW߽?_ c~o30tƑB0:QE#aQ~\GOt=J:Y71Ba4DY,QJ;P~`ͭ,<mbzB^| +0漖g/D2Di%'Hr鎖|SwmLFw&0o !΢qbw-?Uў~`ofׄo:E|)D>'wR^f>rs:R=;i#оT?cپل~{4AC0Qƙ*Xҝ%ӛ"P}M{ǦCZi wMgYz.q:K`8616 +b$>)vu8Lɡb,9tgOkR/!+6-r۵6k-Qw2=NO ˨:ky5ͤiRrY DSוۄQi?7Y}Vm Oy[Kmu:CACWwHUdt.)Gleҏc&#6jG;Ć:Ja0^1Su C}2j9Jc >}Ce?3ŭ[tcPUNei7FfB e0Y* yZP/TF$>t=N Q|ֻ^ұdep:'LQۋ[viZPRЌxIjn<ĉ8ĊFd@C*z-ks=qʂp3_sΕ+orkr ,}o]1xuW|i2dIZ8QªS"&z=~a% 7"LQR߽u^R2M1 WD۴uwO&~CK8-5Fh[L%[/J/w?J,i&p?'$|znPe2nK۰"]m&&nτ}u 8ew#e؛%}`bE`H̏Ї=uUy܆Ag2UIrY _rLXȏKl/,y}g [0hov$lĝ1ʏn|ޥ0W?;#ԍŒ|0O +\i;WN+btk[ICn=W9f'YA=xnro?/dŧFnU:STyV ۭNcf{#ma$9yi߾ݣ +̘0֕ko"΁ };]O|ۄ%N ύ;>1 +~1g 2s0v"L3E5=`Cyrp4VzBW.;POlnxa2py +ljwoHWW*Ds<-[g3Wa1?y-q8\%"7B6ǼEg{]>7>4tCg&Hz`u5IMF*{ŶG'Q8"0Pb)ͫŃK}z64Vo#B(PK7x#QdY_prx ,BtO鷻zD/H Hu΋H-RM1KT.wp?]ɳ5);F,["yx/r=w(H+-OtYVߌJJ_xǢ",#|"o*BU"D% .H|$ S0> endobj -570 0 obj << +566 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /NLUCRW+NimbusSanL-BoldItal +/FontName /UGZMJZ+NimbusSanL-BoldItal /ItalicAngle -12 /StemV 145 /XHeight 532 /FontBBox [-177 -309 1107 953] /Flags 4 /CharSet (/period/a/c/d/e/f/g/h/i/l/n/o/p/r/s/t/u) -/FontFile 571 0 R +/FontFile 567 0 R >> endobj -926 0 obj +934 0 obj [278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 556 611 556 333 611 611 278 0 0 278 0 611 611 611 0 389 556 333 611 ] endobj -563 0 obj << +560 0 obj << +/Length1 807 +/Length2 1423 +/Length3 532 +/Length 2004 +/Filter /FlateDecode +>> +stream +xR{8Tfie\͚BRq ]hC\c3QbcWhD$\K3;*isTC m syZY{~># 5Û7"8+ȍRrrAooo @@>kK8Pd0q8O\bAD""t*M0\L<# 2Qx<\FB,ż%OV - srSɂ͍b @Yi akq65b&Ic<.0䰾ވ ~R݅" ( ʌp܂ Riq =?*$Γjj$$BqHxWa_  XTBnRxb1@ +,lL5`S9 Fp[(Otq|_`+f!#G+,H4IƤ8I܅;dAPQOiѢdL]#^[ߵOr]q.dJ2}rmw%L/x4'zoĄaԯ6=~mHz0p:rhR?e`ia]0A +K(δߧwbi MϦ62ܹumVU24/}j-q."9L*.btIP#wIOlnm nd6P1n)<דr2&kìpn ȟ?{p~\ni֮C1!B@]d:SާD8%"QLPooSܨNp,f'Kw%Āo_7GKʋM.gSRi=6z:N(86YrFϗ]m0ִmJ:U?ַY%b,P|8b8T$mC&lGWnr s6pn~WZ#W-M4vH[jv)Sڞ;[jy{Y#/dKtr)ꢸg'jVwgvw]FL]_AyN9d썤ՙi=VS:z| 1P2" %jIСSs 1ߤխmg,8BAy;}aȱj"]N%Zdr}V{O'#MrFFԑFkbBUקF:?vdn߰$ SMs ;{}#k,%)_s`$<nUc(0\4\͇87Ǻ첎+:fc tf{Ui:]ҜJ-(]#og65S c,$cr:aьj4Q$q]b v(*Fb.XC"ѳl)F7й{O_.YSA+5x>]Rc7atUm53g'i>| aW㍴PF-7y咬#MRu'~d}-%9/?!@gTrbP1endstream +endobj +561 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 935 0 R +/FirstChar 40 +/LastChar 61 +/Widths 936 0 R +/BaseFont /OUJFDF+CMR10 +/FontDescriptor 559 0 R +>> endobj +559 0 obj << +/Ascent 694 +/CapHeight 683 +/Descent -194 +/FontName /OUJFDF+CMR10 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/FontBBox [-251 -250 1009 969] +/Flags 4 +/CharSet (/parenleft/parenright/plus/equal) +/FontFile 560 0 R +>> endobj +936 0 obj +[389 389 0 778 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 ] +endobj +935 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 40/parenleft/parenright 42/.notdef 43/plus 44/.notdef 61/equal 62/.notdef] +>> endobj +557 0 obj << /Length1 1647 -/Length2 7365 +/Length2 7179 /Length3 532 -/Length 8235 +/Length 8042 /Filter /FlateDecode >> stream -xweTݶ.PܵX;(mp(%@] /PBq+ESJ)Nqwg|?_w܌wggιxL-k+Hn~> : sT6.H =&,[ !0,[ _\\ sCll6=m}vNN6XzD@lW ESu` 86eu=2 -bap_ . s%XN` ;N`#@yH9XN~'!'8'ӄ!GTP+Owl-` %iQ ߱,+>=' j p@s> /[899xg$`̓/pmbU5 ׾?0W0$,`PW ` E;qwj%u kp?k@a`8jqn+;WYͽB<mCJw& X[8ޟ}=EsN||tm! {o5Pp۟ -xx|L?ƚ]p3ꟋTrr0w78[@2_Gq!K?DZY w?LF~juz \{Ls `w0{' $l,P0;ĩJ77ۿ ^l~]S=$q[1tc܁5EޞM4(ʹkZ8f(ruq@K4P s?k?)ә/(2t$@<nO'O<*E$'o Ya} AW!#(I.xw?< %ru)\ -6 -[9p#l>񦂕bL~%_uYGbHQ?{T"Ò5|<\F_}+}( -B/JĜ[5H)߮OmP|'QEyzBΉɍ^_RJ> s-bG:Y>Z?OO&_kwNjp(ok}fGwgD#6 s=1z"4 -vG獞 eutrrsl\4 Uur{u|r q -1cWx]i`W?e׶Z1W5Sjt eÅf0 62 ec+* pIL?v5ofĎ)V{k+ D~T|FزF+ta;0't TYF,,_67dTwIE?6#xRCoπWi%tXnckxV95 4 Nbo%H~C_ z!e"JB]S46eN e@wrFڥi0('{3fY3hO[6KC ăuNVHMUB'"o=ח)"(|a|Au -Yu0*ϥ}s9 XUxq*Wg|ռLvzRN e5߷ḈP iO{:@Xb(oT8_//#%(%-b^MmC76L*\v4 b }oERnnP=cr+ .=&xV|R (^<Ԍ?#)٤^ 98J'9LcQeڣU^& FsM/CSa{뷒I?nMFc y yGwYe$oNϥF g<RtAxvEC5z**nP̳`=!_G<'V~խTBvvFef&.>v!;^uWߤGz -nƫD_-' \/ͪ$g2hʥ8 -KZ>DŽ4fTgm+BbS~rrAI"=NR$2k;Ȩ.tx1\Yt? -&U%cYF'jL J |U?J0'+8ȉw}w:'JB9пMW x OH1IrXn_Nݐ~F - Iݾ@~~ ; 3ps9"3E)/] ZA3{3?;m]GwPd;@C(? ^CEG=M34Iy7WN\a&r9|SZp.S&6gՖ7-F,;OCyI+on95~^exiRZ᫊[dKޯ|VdBQݗ$/ȎӺb4z,^;4RvEBBVΒa|5淤tpRUגn-/q˹ ,6XMP:FJ&r; YƩ ͬCXCPKb:>#E U~:9;}E#zҊ>T?67w-aOYmC͋˘w33RaDl2V巶 zfEB'6(JTlp.O 3`-bu()J 4۰lvs5q3X5$SQr;?$<:,4 䴄V8z˅6 8߽( GtZ!V: 푤?!r *ྍ2%:Lj7s3๙=X31<{.V.뫉l1oa fwFZќ~U+ Gf#I~C+[^w>s:_3xf vGGOfk?~P=|)t qfΙe+׭w |+ƍL *sN-#_m@;~ơ5j<,λz7Kմ_~Bwi2qSɩOܚ--]-^ a_p4,od4SHsW&KDV~\LǪNl)%㳇4H$ʗV -,L`Z}hwn\?Zš_~HR,[YA3Iyj,adaF&kLTд1Cx(yu0g vE FsjSN.)9XuBEȊCWFLe99:z{ȀZ=-x5kF@b~vm{YzK܆qKX,(dclC,I"r\iuazw+ش?q\=p|o-)"d=sLmP̮Vl^FLŰuk& K~gA-e(,Ɋl[;ْ\:GԚ˽lpWUN`zcjבX74#/gŒd'999ZK}Vo(o$K`4kwց1wUdxdۭ%Zl -=F -d %Ī^6= ÷yQ>d;;D*,N`r`ռj 57^^InMaKҟyMÔȖFÌXcYd>tqba`{F:: Q^;(hPj#n(\>#kSVt 1a`wm|(ĀrD)?r >.R!Rͽyќ; xwDYEF7ˎ'冪_vҹ|WWQ)7yuNʁ_-Kgzlov~bgXzSƷ^DL앉=JDPg7B*&ǍIH3B9,U?hmܐ#Jn"0Ya_W:i պA[\fax`[{%3$aR""jlg1s <טAA0UG=Ok8Px|;'dV\ܫR&!i¢wto_*T\QE}8MqhNJ}q:ǒX!%b sZy)'j&NSVUiV̦8{Έ{K(R ʚH7īd?l^q=}=S#cQKAi Ϣ5=| g?/g1$k5j Fwdpg;rί"EA"ePآ4/ȠEOJ8rd΍8_jrޟ&4 +ڵٷ4!0OfCNI?ԇ@;(j똨i8T لЀ 0W'pka`\y\ " oqq"PW @@n 6?9H IwE\N2_u"쀈߹]HAz -4H\'w.k uurz!s#ɜ\pslU7b t;@\]4H߻>{ןhEBlxq9Adn[( yQnN!.6Da^0O @pTo"E\};y3Y6@@Gwoc_U'Rl +e@=!`(d: 78@a7 +VC/n:3}flL?:S0r3&o*'G@T#(Ə(!(IH_kM  0 o40#00 3 c@ 4$2-3QCUɬ]7̩]~`s@ZDMuoð]ԮS!yt~̜$ĸ6, c}&5ME6VY`>nr> dv$c9w"#@܀BZSǖ}q=c+'U-&9V԰CMቌ^ytᎴ_-(%KmR$4f)*;H:ъ͖"ܟӾ_>yp5r-П.q,5 H8e> ($Oќa06o,Ϸ3Co鑳UG=! +)2*:^\ӠE 1+mJPrƴ1l'g.:FGBFLL^؞uD=ĦJ5 L>Ȏٗ)eR e]@:χ'h> +eWCo{pI3Qu@;}vSܜ&;;#(4=}O0fִ?rPӟcl`Ϩ?/r>XygK &ϴPšnPF"/=#œ04X$-sqڝē[ݿ)v:9< W]'8ؑ%\lёJ 5}dLnM +hoxa HiȼLT&C'yA~* V:d:7Qw(Ve&3{2U\@˙YK~72)/n%G>[*9؟DSlbHIV>FEy//i&T#m{v{ٽ\-h%Ʃk!H4M>ʎȬXr\[ veP YcY^E"gV;(UsBo[?y׷N8 +*)׫5OBrd=jr xfӤ4xms$ec;븞֡/%Tې[TwCkDr.೥gt$91۝3_Zp$5-3 ҙ7"ޕێv/ћz8=tj/ׁIQXx4ũ@4'ti3G}!EICzJ/o1wRb50Mc♳2a2||/f/vb} +W-VEqTaWWU\+^:*k҈PԔ&k&;ݬPk^|LjYOw OkӬ{Ԫ?&¬8x b={4NeEj(RQ myLVozL3Ҍ.BFjOLzCϷB>* JGL\MK{ 5Tgi:Oz뎇Z{4TkJd~^O;HN +űe=)(Q+JGs2Ao rbTQ#¦ash-OsCqZ$?e_5ᆵ^x1w~*wPSsx2e&L ; ^2s%h={%h3mK.jԩ)Y`"6 +xy[Vqe,j:Pw*0e .1|@NF#nuH +~*xppqX-DAmpk)4ql5DXx0ƘϘbx2kcT\,aZcėZ8N_fʲ +D_0,e+<,;y!FkdH&>A=#6]+[>}#vFKa-cN5AJ+*y&k$/)%e:CI}_WIDV6ގ>Kz#^iLxP3]_YRm~MM9\\{B9h/t>,yI79]MkFf|缜Żh家G.^QhKWVޢ,O rw8[Kٌ<~d)t%4ڑM\:Qvн +WA\?ebt^DO[t y%gBrB̓|X,ˉa41Ĵ\4Zj"6u8'2$JWsf|4 Ca5B rRY(E>HJȜjp"j\{$#K؃nKNV +)1d&8ic|*Fə'˶MٍhjۤE[E~_fQ?JAU6K Z!"qלj{q'E1zsYd7Gha {a5zeD؏d؛:Bޏ²Y{('?TQkL/+$~ #{kLN*C5,T$cC-lCjh2,}m _ܡǑ7{Yl)Ky'z21θfNJ7hZUcjMs<3LHs,֊o;ZK)KkshWϽG]vIQȻ>u]R,Vոǧ͒ĨW +G{䗓Ӎ6b_1k'J`eqEێu]*-"aRrVtOt^#\(o]bFtE@-!?-w +w86-#pZִ9%3Aե%93*چ>oANDpA9\EHՅ{6vkKCćڒm + 珟ioY\Ldw=s/*65R1dJ40(h Z ՏsĎxXaRpQDܙ#Y}Y*<2#m$}8p{4 ,yTEHt?;Ξwru},y6Q[ik$?SAVkSX9اgNx흝YE;Սh0L5T򖦕ĠV8Ҫs-%J篨j"v TTљf6[AM>& _\zfM΅No" +Ȋ~ Zwlmپ,"Ʃ&>f~]X\bh6@Cu_ĥvi +a" $W*Bҋmf+#*y޳M],{3pCċR[6wߪ`ۘël~c,z)8D +s('3o~Iw +K[~QV=f>IuTSfuB1,aH9ocYĽ E 3tw~% [x%JG3(_Hkz{Պ#$o :F_$'"8 ȵ:l=,*x>h|Tv +|ueVKS,OEX@}ȼڷ44lVt%Ӈㆮz訏 >❤2a^&f/Ԡl- 4*/\OEb0k]2Rj_jQ?ٵ"ŏpaʨBxxׅZ#gbuX%!9_],;J-#\RY{_?ڈms"1Jz;isBHFwDxfDFυ|&?,KJG4e&6x4˺$XQNO$d);["^v!Y;z]X!32 ԋZLeGZI .}Kz"F-*Oɋjtzܔ;"U>箥 `AӁK~HS +J$pdзKu\Lm +5m4?|Q/}Tb\b +kse/р$`xqHbq:C`%㝡V~tyO7ň?; dxD͏U2[#%b~FOnnwxM 7.kyΜ9+siys)AKeXPMo]@r%:.'fx"xF'YMB0wJ}}1TeBc=-'/E{ϗbg$HZu2 ~gŔê?ј +[]kOx?۟}EQ7N;,D[,l y^a!T>"f0wngb)ٹwM[k }vA$EjꉣLZ+7.Lɦ'b΋Ρ?mM 8O2@`vtrҙjg(ݼbG9ڱ/7{ЪO"aꄆȜܵ>L 1yVnãڒxRi +Y oӁ쵛Fl#X/m/`y{缵FV'jhM@u:;gK)\$ ܘѵSx?_wȲd{O U˄ܕ.&yp?>ɍxB~q~mm :V#z-rb[f׵B ĉ6hE*'9C2;03U%$j Q +?yȳry$.Xpk!`mc)Xq%w`EOZ<ӒtjJ9㥽سϊz ,@#S<tK~. 8vRf23?,^C 0"7RI S1W\!JKG'^27g!\]"ɩ{8Z|q@ [FEC)HK6x9Ec(TW{2okI#P]C‘?=f~Mb59X7|zl^{->|7w+a"Gscӭ,@XW~`x `E}%3=,1_#Zh^F!?FZ_qZǩM] lR#La`V4{./Y'&7V7a>\ITk[YqHtxC)i O퉶~ܨk.U:wSۭzވ^x5Xd+N]KW=X}Q>W m/:MDat өu),3OOGW!&U,4G$ꊨ&行rI> h{pq"+sn35*h1z װGѐ3g߳=3 ܘw<5/RjX-O0 CR6cB> endobj -562 0 obj << +556 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 -/FontName /RJKXLJ+NimbusRomNo9L-ReguItal +/FontName /ZJTEVO+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 -/CharSet (/D/O/T/a/c/e/g/i/j/k/l/m/n/r/s/t/u/v/x) -/FontFile 563 0 R +/CharSet (/a/c/d/e/g/i/j/k/l/m/n/r/s/t/u/v/x) +/FontFile 557 0 R >> endobj -927 0 obj -[722 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444 0 444 0 500 0 278 278 444 278 722 500 0 0 0 389 389 278 500 444 0 444 ] +937 0 obj +[500 0 444 500 444 0 500 0 278 278 444 278 722 500 0 0 0 389 389 278 500 444 0 444 ] endobj -245 0 obj << +257 0 obj << /Length1 1199 -/Length2 10220 +/Length2 9824 /Length3 544 -/Length 11052 +/Length 10655 /Filter /FlateDecode >> stream -xzUX\ݲ-!85@hwww;Cpw;wݷݵ֜5FUYi(U>%lؘY6F2Y d x8A(44N9ANv 7Usg`g}b}[rΑhacP;-l q;cgD sv4Co1;{wG 3s'=,l#"q0m+$V_/&N 3wrca7lSf[ [_lMl"#1wL-lMnٞE,-_o&NNVvV^Vv36g+=o/3` --LoO prt{{ܡL,F`#l=haefeeJpMl.XDES)*jF`b`c{듗Y[jUd_R޴g[.`G۬mz䗷s05Foa?8dCoe! M@*o/e,(wG ?.;϶f`? 7?fr}Av['ۿaV`P&􋭱@mDA&m 6vvt|zD0 l4ogdY~_ؕiwKՙJ563Ls$}DQbR)*nhqTBk8( UV!+?)HY(!wZt5M=h6VusΆH8՟kquw?>rp/3N6hEeHǫu?!-./:.]FOöl;gہ>@iH܋zs -|~MefWI :5LĒ"{LGjHdQp?c&)KK֚p#$62X`@\X -BU6P7tQGq4X_!e4&֞#jlsTl9PH~/"*(q:ҹ2[& (|cK ~Pδx$ć -D i(EҦ}UoKYq GA'Ð_aK.٭c^ uj~<nN)a%<k'/*Hqz≬C<#GY:X -Z9.Y%r݆Z0?*&8W+#lX 3N(.Iد%3 2bL>Ḑ$:zƢѪu. M9Dr(lFCG(KѤվ1Cxc:ffc)G#xknuE9hŹ[C2_RB%ɣFj=Xh4$uEkOznh҂&7Ovyug6F36%E.^G jTŤGr)n -b Gdnkvlp`>Jah/ѓv:~:' -0#U<[׳ S-^9Xr9B[6e^X\eCaSq:Sh>XHf7QZ9}VܗGg5 RT^0};9p{T[EֱB0=.w$gvinobnqj>艾v3T,; no()E^x@О_Ds?Su+xK;M$/u:6<̹[+V(f^,og' Zϑh~2>E\(eҞ~F&a7<՚UDhӾC0hRnK^*iOh=p -ԟ0,]DF0Ys^G8bԑ0# ߓn/Ll$hFɢcKSW-͑Tɯ -%O1N?l7~A"R`Ӫ]zoFP:dbBK!bme;N~ B)gҥjjI\O UZ1|Mk[/Oy }9ڐ+*Q.kh@'/A~Pw%qiWo GJFS t/(WDAuJ@~Ā{AO ]lq:ShU6.U4Aח)P*̓_jaEVcUU%iU%^:̈́tRsD7q2 -@v؅;?8Sϓ#ޟ ~u܊ٯ4qXi$n!!lߏ>vQ('$78Dmop?!6W ~6~F&g9߬q[T_[Q?{Ц_Im+FkKeʌԟ)lU+tKWSI.}58%S'-Yה~1CQ0mΏ <*"ZMc;cyɸJ箅\I4Å;x8î Ec4eg٩?( 2'zTYZZYgt&[M馪@8yݘ%*m pU1 T OHaf'1w}m^\ @p j$uS.߽41>8PİϳFfh}-gnv=BmB SkF YW('[?1 Z^+ 4bXNOk1}4oՆIhڴJȨEfJwus!5wزx A -9ܸVZ_]U>` ^N߭{!W(pQZ,Lವ(=u*"a<=Z^7#ILLwHw>aQyaȬEg>n \`Ús-qf[kv@LZ549CQNh8x:Jy -TOSx)8 -Rw*{CYҍ,g@6i2p P_ϟ*vDZn`O5O@m3_g5;0Y-($|z^^}ȱ6Noe'* (AwƦ]vn)0rxإS} -uJ#L.pJ])# Ll8A;&Hü5"_:ZC{bfON'ld%\)HcZ(Ç%DHL ϊlj7Q<ȧ]/*٧yAagu՞V9$w~?yA +@ q8x(V?H4nGˋ.ͬZ$;xKMxf"M'v??&Ev#h}#>.X!%a:GgKH/S7i˔( -l)H:sajp.&=9wyV=w`UQk//+/5O+"ɞ|[?wjABaDZ:@9Tz5_ 2zQ(]%P0ؗLԔIv.2s,;b#a8Lȶ KSRyH:8TȰ -[EОE A2iT_E_oWtq\bX?h sХy(cḏƣ%jyro┙'ONpTbWD)F23wNG[m+&g]0lm2̀#ͽl4WNE' 2]͔kŒMӐ^ӏQctA`i._]u-AlvYHޠd ȣ\0;B~Muz;~ugǝB^#y˝ Kś8jޤqW.r:[&{ b&LvH̜dl !ո~g{h#͵UGbE_Nt4䩺;pcq66$ZG2B.7e([8!؇yh"S""@`w%:@,}!\Hd>@ڕH4mlUV-u~]uR {6T,@e#Qi -Z$j=PRb )#~qɬsMS;qZz8C֣QŶ_RzV3;/;<ꠤg%Y׍Ez͘S &^23P\Pm{ (3[,DATճ7e[gQ-nRhvæ(?=~ώ%2UNcDZ2Ɯ g|~n%=/em݋yn4S^̡-5^|d'1[e/YGey$xR*z*H6b EG Gù\E NY. fx$<gUK^x2v[W] KEb?RNT| 3X5 -'1; ]M^}U"-@o\%1 9>VUX63tuZqLyed1{{a=^k%G2k:ZKFIZ \"HN`} WRrgYӹ#A>QF -b*ߊ|a#(#Ȭ^Cx\KxNuE skQ)./ʍ5qj֭NSW8ǻbp1lN6IE*_2Qaj`ϒ+>DGEXIs8B%!/ /hPKL|> "m4mBhdBj+% F iAkX=jV<8ngUsEPLkbcяF}"ul&J b\Z=/JwBC+T=Kfu\=b>GQOue t]FԎXzܨ_{U~ 6L"E0$idpux\vw:~}J|5:@/*7i[ Lvo h$q~J Lt݂ySpz -+WyƘG5- NǀhjyE\EvR&L]il-(%];*9m"'^Wl};=FUyv+26ذF4􈚍Y೾_!W|[Nbնt^Yj$Ǧkbdj寗2pqpɤ7Y`;IQ y n)ۡ KY 7SVRL.Ϗ騺M[ ]^y:[.p~u'zdtfp=95ck<ML~b6|p7 vx']DTXz#m!p]?#5B v1VOaYٱF4'D-1YHǃȩozu -~oT>)y#P0ꆷ~4 -j[҈U!Ͳj3+A"AY]@[N ABp;i&KY&){-ҴwN5Ӛ"Zte q]0إoɿ.۸YVIC8^s$%S$v_)[M)`߰_`pS|E(צ.WeRx&{4T+T;K` -QHc x?g5/8`.6l|,zϟmu?(.Lfkeb2ĺ6C;{ I6ׁ|4745t?B.hjG[̫E/"8>Ao]r" + r=]@4|9b/M!*/,+Ѕ ɔ*IO5;bޗHl۱iX ~FOMѶx%Ռ= =rJ`+\ҕz|:Al彜d5D ~_h4QlqB3?G\*DSzUl޴9X$ kS?O)_Yճ蝁Q;E3qLlCQSsm-h͝ZJ*5ޥ.6cPsq9U^[qu`jFi/3XaotxF/$S+Be(힂޸vKvQֻit&e3?62ڌq>n3HDT|p%[ 땇Ջ=%zIw8%|4]P]v7zn+ Ƽƌ ``( r\ 6n=6MRk9YY>ʢe+M?3Ohov#۝d,φ`Ĥ2/S}Î6%YK('V{ ^i8R۸)NFx0dKBL4>#Mf\ A[@KI6[81ªUmЅ) l_Z~6^duv{Tp>sr p ryhwW^2&)_h䳪Jzb0x0 ]ݛ0TCJBKz"RiwϰӖbh5X(0ez -dyMTNƇO%:EIA.h - ۣE^N2<1Ơ*5^=E16p=D=ւZBFH՜#y1vWM۽3%םJLBU'Do'ePkNhR-X?پh},+=ҝ.UPe6L֠S2) Iz OL 53ߜo066cadE^mf5-F*&;ouD@ZᣥEH3ޛb֦gG]>m|~g[UBi.gZ9X&0MtN׏3&,v+|T E1B5ZzMݺ#o%W6!A5h-rp~F,-"Ma?,Z? ?o+HWӣd™$ IԧhoTfj-A~H䳼:L DwxD_d* iP#QB!#JҐܵi)4嬦@aB^#E8aۻ39 >}ƕP ݵӨǝ#SxçIDKS ^a$ aQfV3:$TIłV4*ggIQ - /c{1#|"겂_ 5,kq"fS% wAڕo;ǭ+߄vxby?=T@ UQ\u6Oh}xNR6D5+Kܯj)n&%=Drl{vdS1G_ 0 'X&md~f K7ꖯ+tX2攪(<P8U7I4jJ -' rt9Zx:!NvU _endstream +xzUX\ݲmo]h  Xpww N 4@pwݷݵ֜5FUYi)յX$],A.PVvA*]YEdp<(`#?R,m}ѶX@vAv~An5;?] u `WH puu5A.+  A@M=&&Y8>D w3u rtq++y-/_u k0@;(UjcuauA^qrq/kc>lICg/gـnÕMRWʿl (]rJ +ll +ptm@?w O +ܡppVP%HjcbF^ϿU-@6=Y5{JJҲpX8} +p;O-[VQ*8۸ҫlqUfO~U( +ky_'q=! Uw2/U_/_ʀ( 'wG=?.;v g[GF,dZcv)늿pmrpߒ8[XmZX/yzZ" BYZph_VċewkWŃ%f_С;?5GZ}NN&,D&A@ 'V>AXU-pqb a)aSʊkZQIl0@[ý}75D*d5y Ac騊=ͳw􊆨78U] @ح4Ľd:+Vz//?#SLȎƏҸȵhY?G 2gm铩^!hR8*p̣ W2Y`zY׶SMYnGDo='yd^^as03I1oRj|( + \{_!k5*WUA[UEX`?:*$]3M Ol ]^NOd#ߦsѼt:QvLbUK>\4-e$09h<|<<9A^S\[@%H|ppz_HWx_dEIa:d +#`ǟQ0Gq?>Nuv,| ͻ&$I74m"WTp}H9/R;YD1fb1Q^{?mgJAIVYm]D*e);(z/7@^r4-zF/=Avg/QEؤ %%*r DNqf ˛oX@3&߻œ`C7z-XT('Bb*}LWJ9ǖp҈vj@._d- CCRMQݴ3$×gǏ;BwsQ+;ڸ^'cY6yMJy/}0Nx7eTMIjZ4Eڑ~}B,SnjX~#8DN X񛹟 5] +?Ln qN.ԔvHX.O"s=Oua3;U-d:mKgx6j/.~5x0jblTU HrMci,ԺX +LdƪF'6K[^λPhk(BU 1#_cc %ʏ^ܰl`g,$Mzx2ճAB:*)YT+ `zr$^$%/1I +#tWc+qoe✉P.+YѲHxqW{)Lt7b3d7$A\s…5 +B)U:gU +f]&ɱ~|*ɼ${9T-ޤ+\>ϳ{tvW dQPN]^lb=PȨ,BO?sa7Hʘ6k6* gIAOO=|e/#2 G6b!e2=Au(^'oGo/ 0}G\au.mNT.#aګZېݤN-L>L*p ]4T{}JAN[`f썉8YmzѷL9tqȧ侉^5Uއ盜<2-ժR4 +8׵v϶ LB (?FRxnc?oT0~[K!{㽗+0od n0c8NDQ%mok,(G ,iKC19]T'$ɝf0_(Hc# z"c/!l,kڕ 2 z ⒗J z)db>hWpUa|ށa +#0{r}E1uE7" ~)fC XsiLKRLG:\F?}Tv?Wv}ɶx3EҲM >AYRg8L`qDaVfH@OO߫#c'hLǎGBe=/C)K@LCBif֘pV.JϺ| |k#N夳Q*4gę\$Q[A,7(Uv?;QX~eʅ$, MD l?B $7κtBo +o_-\ANXe#9 nٛlVS~0ָ0 *4>Kz@zgX(F-4^ ,)b۸B}37YKLb<!p 5khhxA%II,Ge3dkbrmv>_ XJ gc'e=47DƤ_qY,‡wb[2ܪiK (~%w]Ʀ'ێFIbWb/WJ~wϠPl6\NSսz +i5~|X$J7"`y[A%:LS `];S7 rM?soYWk/uF%K4es3'߆U{_GSnlk; ak  l|s8$Yco{IH |! + o \s2mY7;X_~Z推5ŰCP} +8|J5Htph > d8K^>zc'~TRvY?̇+$Io"k8Wc8:LNZΞ`u>4ZaÛiJ!JmhPɓt~Eb.k|\!4{Ğ/mf~4#!Sꎸ- EJ;噼hxOF,!B]@XzX R5K8G}'ESǃ="8Z[/qK0C& / r 쌇 \ukn;ܛ`d vf$ϰ#[3?ulMPDglvQygޢ6-|" 8R"$/6-M4s8a-h4m|Dֻ&mb֢6:&uMFR*ne]tyj1z QS -[8!4s7ؖ1GKnNtRJ`yggnO(5)yPbSЩ M8# $TL)OfǃDp21vHKN!zǀ! _`œV$"+?Rc,9Cfh.QM=Fn*'x8N6#g6"^ZۍExePTAV,M{nPqI%12BYJ#[ݼqm"cu6rV;] zXѦjڒx{+O( pT U~[b\K5 b¹n*v8v@Ћu:k$C>2JȘ#W[AMp^І +!۔}nZgoY4 +qZw[PW*d<&. )}Ӧ"Nc&}A)SlkݐYF>o5W-$|&'';ĥB+ kHp%񇎽v%G&]6%"N tņsJ8%#kC8rʼqbmϜntE1,3_997<#vj4'\F_s@C պ3Lƺݾ#5NԖ-7k-xaol]y0>4>YC#3#Ձ6Q,(Wi3gYCҤrUKX ]ɒذ#PY&}ܒǨi6$h!Yό)_R ?=mz5sțq.8׏3 ƅe%LLX$du%H2OidN5 h;$b?G!#|\D/@%9oFaZ,]y +f֭+7ך(~E7Y{C]?46q;*ZRpunMI!YrF©cRЋ9?nٛՀS)$]zѷR]>PwdcRCZ ]bkK +)u_R[{Gk򴐆} |\8ηRRI*b˅v}!o$`OI{ ]bB5k[o0#ot7P9]]ٓ܍\a\DL nT-Dճ"Xiw+h}-1&_r3 $s9NLq[i\}X c7"ŸU#p(xro_Ez{ѫIP/վ௔A^`'!l(P Cx+x^,\?4$$n20*~OPYa\x0o9<@Z!9pih] FE>~ӷT'(ix#}cCfaur&xcN3' h1f)m%v= +w!r'f#[Әr2掔aliNpe趓jOD-C13G/eeo7b)"$FK+O[>*qq0v;EL8&3MTj W5 )˂uosd"f& +&XC R<( B6nqwq\+5 7>g{ +vR-ҩ+AQe髲2߇Fܪ=Q6QiˇfO|K{!`WcQ/%AMc18+6p03)O~%LBgPl?W?/&7/F.Q=;ŨK=PisuphRpk^? =JJ=:щͧb qcgVFV b%o٣p6談8p̖LvXR!/hQ4b'm*C6%$ެ1cyKG t_4zfx#Ӕ_~hz)S y~HJJ3;TRb$?2G203[Y桚/GӚsȔњgo:)/;!@ + Y CN#ݭKWItQӹѮk jȣbd+EF͟VEBGYR$)zu!CnDGT(Xs\oo=Sp#m8ԇjDžLj\il!k S"/E{1̉]KIr3R +b:0\0@%jUFc9汹1-+Ue/xRc9sg=޶+5$ly}ۤwc-NK8U.+uG5w =X\tQddEzQ"2xJIH'4"=Sf&;\ D/NP:EO#B?V%XqQZ V{Hvg~QObs\zm2ӥto0_/$ ~^Kvu¸i\fHBUq2g,` =TXd@˩)k?gjewlZf,<ƺoD} PQQ@5j#I?Ml(="r!+L6c|"6'-ϸNqpQsDq|vڵթD?o'fBQcyѓג9X (}^,{%xC/FK;%(8AWێ/ܴ&{q`/!)^/0j8߻R%? +aT1U<;QfRf~4֎s^:OƔ!G0Z(iSQ 5AQ'CLpoF}MU`"Dwiefȝ} ԙgJ/3}c?z%$? ^VMZSN#׸S {HYvXEd@r "kIBm|QZD!cғ7:?d)e`rHTMʷB]Xjw-WʐWJ@g S=2%r .}m~ J psʫ5D&@HkVhGgo&M.fx?ȋy u0@Q{!adѽu={MM{c!3ݞi] ?5oJB>0KAn:~M%X*N#SHxzfH]xM])ٓ7-N eXbXVk*#u|D[͊zle"n!eCǾ8(I +yp4ew380'Z I~BM9fe3n`8,FP3&*OwRC^-?A`@], (~;cQ~endstream endobj -246 0 obj << +258 0 obj << /Type /Font /Subtype /Type1 -/Encoding 917 0 R -/FirstChar 2 +/Encoding 927 0 R +/FirstChar 37 /LastChar 228 -/Widths 928 0 R -/BaseFont /BREMRB+NimbusSanL-ReguItal -/FontDescriptor 244 0 R +/Widths 938 0 R +/BaseFont /MWFMYO+NimbusSanL-ReguItal +/FontDescriptor 256 0 R >> endobj -244 0 obj << +256 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /BREMRB+NimbusSanL-ReguItal +/FontName /MWFMYO+NimbusSanL-ReguItal /ItalicAngle -12 /StemV 88 /XHeight 523 /FontBBox [-178 -284 1108 953] /Flags 4 -/CharSet (/fi/percent/parenleft/parenright/asterisk/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/less/equal/greater/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/V/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z/bar/quotedblleft/quotedblright/endash/adieresis) -/FontFile 245 0 R +/CharSet (/percent/parenleft/parenright/asterisk/comma/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/less/equal/greater/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/V/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z/bar/quotedblleft/quotedblright/endash/adieresis) +/FontFile 257 0 R >> endobj -928 0 obj -[500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 889 0 0 333 333 389 0 278 333 278 0 556 556 556 556 556 556 556 556 556 556 278 0 584 584 584 0 0 667 667 722 722 667 611 0 722 278 500 667 556 833 722 778 667 0 722 667 611 0 667 0 0 0 0 278 0 278 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 500 0 260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 ] +938 0 obj +[889 0 0 333 333 389 0 278 333 278 0 556 556 556 556 556 556 556 556 556 556 278 0 584 584 584 0 0 667 667 722 722 667 611 0 722 278 500 667 556 833 722 778 667 0 722 667 611 0 667 0 0 0 0 278 0 278 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 500 0 260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 ] endobj -208 0 obj << +220 0 obj << /Length1 829 /Length2 995 /Length3 532 @@ -7773,41 +7826,47 @@ endobj /Filter /FlateDecode >> stream -xRXuO{H~q-bAPPEvn0 \,G QI@āD@G{?}}ޗaH R W! @CP"H` 3,X IEbP:3M0+` I dZ&Prõl8cF"+ 2@ #TB( ~cݳ(091Ԙ80J QÛ40D;~ȥ-1?ePZi 0&SWOq0hgCDC2R+|DO>0Xq@hp)}CBETӽ%#d:@bu&L`5$ %ﳯaIR E~ia/D &XBI1l `I* B-A:A<P.g||G%<3w[O"ߟ2%yyKď ~@,%?GD 4>U7(s͸f)>S&x0;m!Щ|N uVC>#w\O/%)/Fp[t=Ϫ[ε$ V~ꦵfIӛM- -F-7T޿&v=u~RX‘Q#Yt>ͻ\ %w|QJdDl@`~uh漪tmyGEkync,/^Wz$Fon̵/7moA={M[?_rލ-])=Y8{7ˠNdąjև;f\$Z#{N:Һ-9?C?KV{Nx1r`϶+n {7|эJuGn3j,f;²Jr7 QO+?.TVxE}=vRGO܂kzm9(VeEwNu z9q.o}@sN"FKKxˎMs³F$ -$a̪;X,7yEzs>hYsd])Xu;1>]m޺w8ְiKڂ,Cj߮[ËgB?PZcendstream +xRXuO{$D +cn *dvw'ݺC$pBxz%d (!AMD5;Pzys廇+dă(Q0`ha0 d5EK!HJg u, L@0"Pg h@@Dz6☀#P(q5Ar* +˜A BDp,`XB4z|Il־A!/|d8B ` YhV@Y">2,D) [FHa@nU,Ö֚$hZ! A?~@٣*̟~diSD/o :aŢQM$3xzcnM8iD89+‘k~iv:ҖՌFA{jn\N箖Ѝw*-W*?9Ƃ i}uǼRj^ۋ].<~Ҩq[sߴU}9Ѹ==`pw¬wt5]|t-)#\c*f aOٕܝ./a?:gtz}.f\S˼v8ҿ&9'xIJasIyo>}ޱ+WBJlvo~}K[~Xm |V9ڢl.[:~qΑ7Q +9gW +.Hecw:\Pw6t7W$_ҿk1ix*sI_]$7 +$) . *ʮ9*5\7298:I{gt K 8gcf߱ +,xensR7+ 3wMչ~eua_n`Y%4Et~=3E Í\Veu,)M휻1hF   P E8c6endstream endobj -209 0 obj << +221 0 obj << /Type /Font /Subtype /Type1 -/Encoding 929 0 R +/Encoding 939 0 R /FirstChar 0 /LastChar 48 -/Widths 930 0 R -/BaseFont /SIISTX+CMSY10 -/FontDescriptor 207 0 R +/Widths 940 0 R +/BaseFont /WVGUZY+CMSY10 +/FontDescriptor 219 0 R >> endobj -207 0 obj << +219 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /SIISTX+CMSY10 +/FontName /WVGUZY+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 /FontBBox [-29 -960 1116 775] /Flags 4 /CharSet (/minus/plusminus/bullet/arrowright/prime) -/FontFile 208 0 R +/FontFile 220 0 R >> endobj -930 0 obj +940 0 obj [778 0 0 0 0 0 778 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 275 ] endobj -929 0 obj << +939 0 obj << /Type /Encoding /Differences [ 0 /minus 1/.notdef 6/plusminus 7/.notdef 15/bullet 16/.notdef 33/arrowright 34/.notdef 48/prime 49/.notdef] >> endobj -200 0 obj << +208 0 obj << /Length1 1166 /Length2 12740 /Length3 544 @@ -7815,7 +7874,7 @@ endobj /Filter /FlateDecode >> stream -x{Ux]RK-fffbfffffbf`l1zܙ;si۪:'#+23NOMA l`pwa`ad(Xٙ:1-\jV. \ o 2Xyy9X(J@ $`jwQuut\A@g^*@deaVWѤW` tPYmBhi\%scq3+P[8219.L47u/Ĭ@@?Cy2n667HfLVN@iJBW`feaf@SKJy:67vtp:}́n@ }02u-ÿ<̌,&e1eU%UY""(X 򇑇?t[Td#A i_u9σGc{ W[ۿBw9pRvV <.ƶVYhdbjwCe}@%gd ˿ajV6@g?g7hoo%M̬-.\i 2g/#ϻ؛[i"8X7t?53β q?v%aGgT$d/NSӅK ra ŀ$`lWErg[MfKmxPixʸ98&UƫEb"( i-}߳\T5gLY[Q Gh*Ga'fZHcYEzR3,I5ɋO_ )ϻ@ny+N>٩9'BYtɸ6C2I@(#/r<=?^Aw@s*0B8JꪋXDQv{SZrRo=;g57zgÏ"YPK@~Y/IyY6T$(np)/UDq_>M_\Q wZ&gZcX]\SR -ٻ\"g_'߆ .$&D _|grF\蛧z'8'ԐvY8r6ӻo6Dr*MhBՐˆ6'Լg4ImZh;AƣiFC:>cHX&d"%r2Jy k[hs$XǂAh(WHnrWܵۋ_^kWƻ3v_lT׬b9*LuS&Sfwx fϡ GtY!q >kLswϢWxnA9UB; r1=8 j2/7k!,"7"hwM ސ5T {|0hJAk@T^y)˫~\O;ƂG "5Jhǒ O[Q7\{xK7 M1j?K3Qk2L(G*6 {S+4CU %DS~*bݾv)\[7pjF3ZVNNeX3Ƨ|/>$zj:jq +8FXǼᅦ5E%'!CgfYKe/x[,GF}=DTodS'aS4\i @@ -7858,35 +7917,35 @@ D6 zrM7'c[L!?%M8gq3HhHJФe#/kv@갆4~IkG?rJeDP%P Q1RÔKe?ftR ϻ;oN/]tG;'C+~+|aYR ݺ.xWu2lI?J%8?/"+qQx }ʚe 9icA^@;Yw a2HPo+a P_M<ٞ0O8vr&D<;MECӖcT٨3Dg[wDoo/JBd>uHP PZ&8Y@dcQ  Xd'$Z*L qwb49R Nw=|AٞAfjX>:%w+KnszbM}Yr!b4cXDc9PfWؤ2ڟb_'J,Α7B⣍sqOi_/+gU.֔9/;rSL=wlf5DJJEwɖ=$0BH}? pR&S~BT։o:B&tO&X˸ OXF Mtn}y/$!Zrq8&' _xy׊1Kwoh(Kf*mf:QzNm̉)nreK25 jcsZmX_mVqvo{`Ç-\ N0.Z\4lFaU50{1|Iw1٬ w^kZslg'U8S>*rkA!ӤV]eAy'#>>۴g&UKYHԮB3ٚ~bC'M)}~5߰==_H{Sݶ)cQle~(׶M1&AB<PGRôO$3WO۔uj9&M[t/H>DZ87ԏ) .˭8ROzCoߛ@w9؈LDce(qʽiq_JY -vC{LA]eڊ |>y{ ${ZW:wMs_|zzjC&+\oy+&Nt 旳 o<*i5iR/]o0/ #ci Ld\Ҵߊ~m0=b>`=$d+"@҆}7mazU3?HĹ3i`'D|0|C,˳fOl2{0`4/)@Rba˥˷ ဥ1#+i):}W'?㷜 M0ugSAJ|ۻZ|EQxJY;ER7S `XOގP҂T///O-`g A]@ ңendstream +vC{LA]eڊ |>y{ ${ZW:wMs_|zzjC&+\oy+&Nt 旳 o<*i5iR/]o0/ #ci Ld\Ҵߊ~m0=b>`=$d+"@҆}7mazU3?HĹ3i`'D|0|C,˳fOl2{0`4/)@Rba˥˷ ဥ1#+i):}W'?㷜 M0ugSAJ|ۻZ|EQxJY;ER7S `XOގP҂T///O-`g A]@ kendstream endobj -201 0 obj << +209 0 obj << /Type /Font /Subtype /Type1 -/Encoding 917 0 R +/Encoding 927 0 R /FirstChar 2 /LastChar 252 -/Widths 931 0 R -/BaseFont /QDQSPS+NimbusSanL-Regu -/FontDescriptor 199 0 R +/Widths 941 0 R +/BaseFont /JYHFJJ+NimbusSanL-Regu +/FontDescriptor 207 0 R >> endobj -199 0 obj << +207 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /QDQSPS+NimbusSanL-Regu +/FontName /JYHFJJ+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/fl/exclam/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/greater/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/bracketright/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/quotedblleft/quotedblright/endash/Adieresis/Odieresis/Udieresis/germandbls/adieresis/odieresis/udieresis) -/FontFile 200 0 R +/FontFile 208 0 R >> endobj -931 0 obj +941 0 obj [500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 222 333 333 0 0 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 0 584 584 0 0 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 0 278 0 0 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 0 0 0 0 0 722 0 0 611 0 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 0 0 0 556 ] endobj -197 0 obj << +205 0 obj << /Length1 1608 /Length2 11700 /Length3 532 @@ -7898,331 +7957,337 @@ x -: S$ @Hٻ9- *+`-dmgou|oT -(`QTȀlA@k5lfv;[S_AX߰ b2 ؃l7 ;mfhۚX;Eof7!{ bwUUOG _!0-鯖E`[W-c ~wM 5'9a5 O>mwp;B@f(o5MjmQZY[3;?Ns9= v ` 2CaSs|+ `'+?_5OzZZhx`o/ mnE&juAM -vV8i+T hb0Zo)l z1X8xx%f6k@My|d,7߈[ -va!.n -`p]6v.Qo  -@G+@iv[?-53kOTo&No}Zw%\A&(sv&B?S+ 3G%u;9` jr}:~(1zd6{h-Ǵ3I`Mߑ:"f^kcc3(@O: 8ˮ9b@6tvCGsk$: -2.vwhk9=V.k:zGq>Gloy\gP:A:@gd -T`&+KwR^W?4˱y8THa5P8w&N!Zg}VD(rDGdӗҗ4_&{26g\.2"R>k-k -L(0,}dۢ84.hO -`[Mh&}jlz -+gFÜQ4쮀xJADW5E$5&D|Ǣȯ$ -/=ٺ -wsv(NoU:׹xb#Ä ](y7Λq؉,Dԡ2LM0M18B:EƭOQ wHt:mCV_fe$T> -]XmWge2NSwP|$;)Tq1L Uғg}F rB1f_hUl̆xDuvûPXN8^șiinMU,UؤU[& AhY7B*\L\61+v`o)%CsRu_8Z -6(~4Y{ndM~WC4>] 3ո;(?`d=EUy:<Ğ:C\ ݵYW{䧅$oȮT%7Q3v?v2}UMq-[sb;!ai !n`H;&%| #*|׫UG}ޘZ>RC6rSh`;`PD&H^mT\ʷq?7"SZJy|^EjT6t}&ޤuUE-uIE/y  -ΔsP 1;TMMwXaAΦ HX.;>? * nlmBڗAeAklS8v}]]bEOrX7i}{||3[ ԣ=J<^j-nw4ǟ;]g\oJUD.S# J *,M̡0} ӟHo22}/Q#K1O4QR?uZ :akg }B9vUU3^#!#Qkh~q k6]]C˩86_ÚKݛ'woSC񣺒Kf|B߉=nr<wi)سGVA`ށ2YT@ՠQuVPS4\oߜ5.3ƐtCzF!oREIb9o;W>tw &e '/,.U/l˗k B4.9]%"dI ϵzd}aZŏsR6>_-Q$ zZN|tG5Ȁ]nKHic#7, ӯFQ::.kw6*? _4”XmD)JDWC.jٽ>NJ --@&0yj_<`uՅbHUwoP$~ȃS8O)z=z7şR'cd$sp!@ 㬬ʋڍ3Ŝo?YףZ ƬlOʠ$sK[)wZSW qz788l -JXc~]HuHYUL]? NR䚌~Ckaq]"чi?Tv# ugW -5:gF~Fܞ&bZkD'UɕTc g6 -sbg e. #t}_Ģ-涞0ݯv]3T|5opV^EBGeB5~4rkUkb -cNc6=NmIGN*6,6_Y;ƻsi'# >z䫄v=Vh -j^cдw- _1:ܛyd}~~kD -=p-QsީD%HῩ[BgVs0^WQ`ТtIš'|]/f`ρ -Ѩ.ڂo*'ޅ?0,]u}}'va.rJp OIG,jXϷu6mx N1i%<&Dvd17WY.GP %Yu]A3hpK%"r1kU3r~0m6,ג$+IQP' Zz!mƴ#h, vfUPA ;?ӓ ]klXjA׍͚ Y*\~ۙ>GUwf۲x}uQ&Gz.( ~:ϕb7 N`|h W^eh^Z^Z>ZqKw%H^E,qoOHiU_3.g#2tVm3ae Py1u$JF:TܜKgܱ,ALWZIPB靯:۶n*IIDJ_4h>"{uArS[Ѣ>|zҗk-/SHZ>3(R-oDZ]Xc LW8K`ʟz݃c%%^uɧCZ`z%rY7=ǭ13-tA .!Vʠ,Wqs= -o6͟]|XUA4`/rд 9c9ndّfv. -F@mZ8l/ϧ8 -s{(̥%`?8f]'/5_N fteㆺYtq"%-dѯRq(H>M]ח,h5/a"k25 ->%ރW䯈iYHRSLlaZk(AO)~מGM1Pb ։ |s]/g\>"Lh(puN6Tegs^gF<@f`rjziߗ'ǏJ$Dk n/Bf -)r֛cI䅎 $~rˀ6ko^'Dy[5Iby1If\Vpg|jttcPIy8̝ DN-a}zG}E \.4*3 7 -Xtjj߯RQǭ=c3ZMu=&]qUF3jbEhQH~&Ky%&N 8ytT"`ox/47gim&؟̗~v3dm/`19fЗt}H˶3\z{+nXE5͋ԭEC5foT{16Syֽn[UżXW35ṵZ(=4Vԏg=%^ȈttrUeYG/5DFtm{f mGyl|ϸLÏ^w(H\h_SnG&Êή( -/VDf{elPSL#sTX#{c"SBUkL.!AU=Cz-{wzz*_: -^2iQ!Cy!UW~ϱ~Go-YO0 _jc>k'3QeBL?A5|ήZ.Wb|o-HϽ8Fa$`:QNeH满Qn3Ub'L M͕T4sخS|D$$PL?9*`sחR)">U~ U(<*رQ:x4v; -4,#֑˾5={lF_Ϡ<l*@Hz ;[ -0Q~p#~]*x yώsc3_%UZa{Ly+.)Et.Jk2<.DòWy>W-5*&Bz1S Eȗ9d' U- *:ʃ?6"xQ<`t/B=ķQKv#&{|qd3lԗqAOgEy2.DZ)V5F1[k*VpXrJTS&ײͽV -Iq0%VH1?m%L@F8\p޵9}}J~A *Щ=D. bɧ !Ȣqwa]ܢMq~aFcH[e*Iy( Uѽo2fy;X4)]VWc^tO9;;/F2B%mخ5guB5#jW(ݗ?ռ_W?~\߄q)HHkڠ!Xz.u祩⨳ҘyA 5džk~YV%˖*jr<*Ꮻ{Zʨ JgGد2"w˦S'0RiZaUkD9BzbdBӕZ=ȉ;?*iRRU Dܶsz}Elz.&$zyzg2pƹ2DSbH/ZR1:7M})IFM`rW'Y(}ԡ@G+zikZE1uRҾ[(yV?4e'[ʹ-z C6U~֬!SdxdOiw.jơdsjK ĂkGa f1)zU4HS{-=i!b:(Z)I'wf[tKo3diD3 אg xj冘l/LEӳC#llX-PukgD,ܶœWlS&XF|aNGJ=யBsj35# .Uz}r6518CE -*Lz77"BVR5#Woz=|h*yȂH"uYIAz\M;\3>忢M ~ݗ`^t-?DKf-b>2~N_M.F4EeШ1u"(nR؁ݝ~A,)H]ʊQp)5{u_7ޓѮպ-s* I0 e~@0N]ZBF$rM,^eC/,t|a&qvQ;HۑV_Z1Η8(j+ف?2J.Jȸ5`(IM~i>A??%9Ry#!HhriT)|D: S -%tޛNW=O5$PoRQS}Mm]'%A2nO(ה)Kr0M-+ݷEf plf^c8oT+2 c,ihQc}y0\<.R]yˋ"A:h q03zٺ{i) ?e{i_%㚴qqn)l~@Gf=CSqѸ\5iW{|5ux-b V`?tT1.tlMQO)5^ YyjgY$_ Nbgfbq4YDLw-Z )fU6ug#q,=noVhց [%r<>SZ@WH!l@Y\l!%_2}"E,*(;=(@ZU*&鍓nJ'^t*{> >XZm+ܖd'% -A͖l9o{qCb @MD8f/ю8x}]8b(U JwlR/ߖf+W; $1WHv Z1FAQI2r ɼN8$uR3%ZEw_zh0ANH'_Ԇ(T)~礔N*9[͈Ԋ1M=06i)eq]EEǠ&B4 Ny0854W=-ZҽM`#MR,Key*,Q?΢*W)XWvp3u:Ѣ,",._ 4ڳ]ohz۽5A︪I*$zO<*ԁYbܥb4ׄ%],:H|EyoSEn{X`ً[|$;)G^ts5;最% =cf!Z ސWqVUd)TX㇂gPŘ%}-Za_*ٱ#)+4rtv,S%FpJ4QTN`"W̑tT% 狛K1uݐE73 âWNԏanյ_װ!p{Yso -}ڕEKA @xaO1W/^;j(AKAr}`4MUgX1V5ED |*pԝ\h]cKupmYuX -W3[ԣ<` ANpUyQzjTpʚu] -22@ÂUi\i2>t!Lca|r~4 n5;M[Чpmia RM2 W}H);)!/AQs嶐w#z)K51e/v[z)2]k)׳Ds3~'V3Ou7&\_L LS̸sYGjqɗ{VKPC'Z :[7Knt8 -=n@Ay|m#A(<cWG41DX3%t={KwJh0$^ qSiNQ@bTDG Byk?͹ 4a18}^2˕!|ca& Θ5/TAdCY‘_FƋ6wɭ(dS,Sqj۲J3kDt:AX?B1~!{Xys; ҳxY%iOFSuK8e5հԒh^ޣ ש`^i!Qw@V/ -ZӗwnwO|ҍ54dz2Q KsA.@Iz -@Hڶm/.DNt7(|ytTn~NT*nّР-}f}-5{uhEw̰`/:K1:!j[/!sNRASEGo͕RV"O[geM,#tRtW2!G -^';%o3R,ĹO/CZI48"x7 -3ܟ&~S:RAQJvwGB3z7܂2x$FxxǑs]> GI71 #gP?& - qendstream +vV8i+T hb0Zo)l z1X8xx%f6k@Myi3kwқjno;0sxpqX.;@[뿨7?m4;߭Hؙٚ'@[ӷ_a'7Eo-@ 9;˟)Iݝ5j>v?o=W֎ ir=ٖc$HfzQ3vecҵ1'i{|^eUV1F or@:cvfXߊU SsxDwK;4qߵMœL+ N5DDG#8#<3KkuႠn \SlqTwd|ϋ;x)/мDoDI}m6CۏnYS߫oG~Wr<J/JGhN>jJX#1vY/90dsCxy z7걣;ڧa{!|Vi UU-WWs[< +>#ǒǔ`*Ƽr" + +flu !{'dfZAatoxDH[ +"NJl^0huÛ"dss,><f\i.ϙ{j4k%6OhlO.~v.P΍:1c\"waJz?/&'}-D"|l(kQsa)ħd#B^%Eɐ0A(9PrJrg6(KAx@8Y̎pX*](a;i^l+E"9|^KKF/=˳O.kB)55&_b +>rmqSHCXd&4a>dvave6=ua(PvW@q "o?cQ|^^l]{\9;~*\zoOV|8ep*ɳ>~94~m*}JfC<:]fA,'/ [̴Cke +lR-yu }PNTcluC_V.T&S~.G7ؔvђOdXWI9:/E}x?۬=7MJTT2&U!N.DjOme\ӢPq*sѦHGտ|be9o47RT +_HJd*ḄپjoLX-)}FN)4M0Z[("@@h6*l.۸bz)xAZ-NM>G/"5f7A]0͈]59rO*"uٟ˦N\m-OJy,tV1oܽ=?"ezUW*>oҺ*:r<zLdg9(xT| GD@*| g\L,7N\6PK 5d6)F>..N"Hv9,tJ\MR{>c֪ r]a?COVIEgF.JpSd^D<@MŊ[6n[O^E~iO a_%/ [_:_ÎzLk*G2Wʊ{:?< / t'3gڠ ѺU/&>\QƭT%D;OD3.7k*^"_ORnIk| x &d>|R^O$7O~>˗vz0Jl5SV^|()͟X_ :?-]AQ{05ȉ|ֳ>!n`p骪sZ(5B z?bw؄MHҮ.N |xe T_Fuya͓ͥ; ~͋WNQ]%j_Sxnջ4M|~Y LJ#~A Y*oٸVʣ@f9b}S+"k>v pripE G5 q<Ƭl5L"R?X +*c_Lê-ORdrKwli[EOo| O`Taȅч 3osx%/^NsH`}¸q~ hxyFcGϝ:2Lwu]fvdIf3x]$e}P,BO~ l_e2^Uy^ndע /Sm87RsΦf/kaQ` +zXԉkVܣ'qc|ǿ>Bcdov^0u[N,* RjP (:+LPxE ^{oJ@bcH:!Pi=7퀢Y7蝫k~sShjlg!tauƮCJRxZRy0v?)qOƯ΂wGnU]k>:#EdڮDܥȈp41vZ_W(z፵;Tu^Ng΄JaJ6zV%+!5Y^cEΖJ~xw^ (.MvQ*3ګPLNs3#\? Y#n\CW"tRTdTԱ3d9zuԆ\f>⇯_b؇cwes[OrW;~[H* +o8JW/A"!2fK?G9Wh5ߪ̍1[1 '[1JrОnBl'E]4 ǓKvgUB+4S5TIh؁޻ׅvCM<2~?5"ɞ\(9TITx-\! +3K]~+?s^hdu]hQnaw֗wl3ii@ChTtm7BʟJ kBH.:bg0@k +N%#f5U:6+^ܲsL4g-Fkc/-d;re/ "K'$/ hǑrS}+WԶZi˺c%H#rkn Qw*jn%MXݿ & ++VSL$?FWEqm[R7$`WHsOn4`齺 9)[VDEhQ~>~=5Ж)r-xpCX7"[.,u&M+q0O[RBeB:U`I!H0=U{zq,̛әUSN D+eP\ޫxi7ύ.B>ؠwmٗG9zxsTh ʈ7rH3;z#xReSZc =a{0u.숓SǗϚj'y3:2`rqC]Ƭ~8W8 +$&ͮ|4Wܗ0X㆖^|blqA+WĴ,$f&b0fw-_ravne5 z kkσ&(1ZDq3. _tR&4:|g`c239|gM|3#I 309R5Z=4`]YjgGyR% !q3ܔg؎R͊q$}B҆iJ ex@7Z/]\W-DY$3S.+3>L\:Cwq*:HmM +ÜsyjMQAƲDDe }[1Q+2i/5Ƞ!B8ebJ%=g_˃8,[SX<`-W_<;>>YRe<}5EQRM`씌 4Y=R{8Y^}'դXU?Nƃ9t' +rXgWpvo0vT4Ӛ c1KwwФļMNE"Zז|>#My쾋CqCsg"F.NM +,r:\}vqWp|Ul +(Þp&*jvÙy5"dZc$?gAifj'<:*RtLj0ϋ +LLP<346GewK?R6X֗H^^k3eir>eۙMvdwen=ƽgqᢚWEV"ʀo~ġ7UL<^*b ,ls۫:@Bf]-T}FdzEq@/pdDs:e:9*вجP̗g"#Zp:6=IJSńa~K<6g\V;$xIƎ)#aEgSSI]՗CY+"uUc2]6)H9*1)㪿w & Om!=R;=AM}/a/\g4(܌᡼?d*W+XM@X'Bhf/u\O_ר2!>gWlëHzoT7 t#0v0(2j$P ~(* Q1Pl&&J*j9@TMmuFl)PBGDofu( ~BR0^9LWKbtQ~?׆*ݨk%CJ U"]mӄdqҸ˰qanצ8`?]01z$íztj7U|,vM씮Em ++b44_$DCht,i^)H {hc?$ +ŧ/ .Ih|%+DX+q}-_^ +{%~ݪ-EP$`'k,Bq{{rAj@&EvŰSYLgi#zIc.;bp[bIBD9^dyQڽLY}uaQP8|bʩ@쩒6^l#Х s$#fc'4~C:& es(*j'A䬺 T>-VJ_qW<&kb ga XJ5-bV>AKp…q%ᑓ}}KV1ٗ! _ +5k*%!]=!Uߒ07֯d2Љm#9gߚ5*F(谮+ !9 ^;7K:Pz2VH9,k;GC{12aѶ??ذe +ǩ),.Ël6)x[c0jHKbdXUv)f;\P*Fh\W遷2C0D1ny +%kyx:2F]z6*O}0a:lo2 xbSp:g8!轖v^}e6P!ɰo}RqMqͼ("zS} ,P`s]ϳW^ ɟ8 +HVV fO>*bjq:gQ~?^O{lk8_H!]\sIqRX/~}t#^gb{lWw:}XzUgt ++zIUjޯ+Z?o¸$p}mP,E=TqYi̼c5,OUefOU~9uՌ=B-eTT`3#W;eөՓoVG)45 +?u!c1X2JvT坟J4)[oy"QnpmL9=_Q["6N\Hm\M=I3qd8s{jW)1-vҦ>֔F& B9ܫ[y{ ,^>] m#cxW:kTi-dWE\t!QE?fkV)kf2< [24;_ÊWH`]j29Ib0kvUuK*G)ν~aY1k Smj:ڥx߷y_k3IbRD%FMVpI9Kv\|š*=}>9?S AКs롢j&?ed~qyxA!Uhٷ~?4⣸)ՀH7[h4(BF^5ʪe.eÆ6yC2 ^'.ctV-!#Os&bxMS2xxz>]0jNX;D($ q]/k-KLT [M%YkF%Vmwdvad &4MB 䟌ǒ)ϼ$4|sce4Dy"zjk) :F+IDED Fw7)foݦʶӒ U FB'k +z%9mv떊["3?\63S1ZNk7*[_w1x獨\q|W r.MZr S_L4C{O8 ]lݽ4dy;=1'.R?8B>U¦[I'2o/qMZJ8ݸTg@_6? #m)8zh\o> +Xta`0::|[/T ,H?^Z33}I1ԸSt"Gϻ|m d3*B:rCz]7+4@ +D-O\9KA)-}≫` ArUQ6SQ D.ؒID_Ԍ> "}`{LTD| +-ƪxyIE/d:uR6ONSnuLӌSug|3AF^T9=W1z`wmg|Zsp'a/ KɊrK *R>dq3pⓐVL_Srm%wcbkSPb/x4˸6%x$¬⳩3j8=[.?p;MqTsiS. F=% +Fd^h2d'XKy|K3hʹ-6HvdyM9(|5;BH9>"^uu|ӏCfOVrxb3r]d5@lTwv@~qH ei'B5O bxh2cV@ +{D>K ȓxZnA4O.Y yekznuŖge˪_~p|K: /~J\@5A +b-)Gݐvwmꆎ&cNP;qfK1 ˛fi&)EgN5^pLl0r%bYk9B%\J@iPNb̓fI",Cy9&0Z +ϠfK`![1g &^"HhG.]~gH ;C6)boKxlez+$-_z(J$ts[9Hd^'}mvS?:IBRpMp"_e廯N=Y ]hh$Dٓ/jCύITdsRbefljʼnxcF´2EE.ܢcP=t;;`뛒5\L +^&_osO| e?|1 0xXTo!L׃{v}ڏ^N+-ަ}AÑ&)TJX<_ gQg,GիKTNU:`Jh_zϯozNٮ74GSw\դpE' ZQA@,?RBLk’Q._ b$<ٷ"ba=eTj0ŭW>@/`JACbsN@wy1o+8F*mn*,XC3_q(Xb̒>y?/T9J;v r8_%(T* 'f0+H:*%F昈PWy:nȇ"\ AaQ+'q`sx0pSDƊ߯kA9ʇ7>J𢥠 H*x3zŘ^Xᚢq>8DNN.WǮ1ǥ:Z׶, +׀V-QBF0 `'z8ת(=k5FC*eM: ծ\@ B aAOԪ4?.S׎4 ^o]rqlzd0^>BrT?YH~mMVEFd-SO86Դ0cc&+p>^є@䗠St yQir9r[Ȼ瘲A;-b[Q.uYt9ԙ ]?ӧ@}z/&d If\͋~5K=^%m!ۈrk%7BV:I7wq> Ŵpjxxѱ+#~}"C,Ùuץ;%C4/̄)e`'r( 1[*k{˼y5NG̰CR>_G}o^U OѐEİz[gL|*$l<&ߓ)(uo_|*O1-^mUQaϟɧҏ"p1IYoYw:NS#ÌYm.Z XQAe 2ġ,G/#EVsNi[N)uũ8En5mYE"JL^ e!=Iռts_ hY<̬?d'N̂%2GjX|js4S/KCT0OԐ; wҗi +K;o'XUx>E[FECR[=YY稅9 $ H= $Vdzjm{mr|] wAtu 'ypdzt–\ۺr "HлMfX0m˥xbN9' j #yJ)Uek +a-3LӦp:Qgf)_H ++z#/WƓ)kܧ!Ki~$P~ n?T`aO?)KMf(do%Qٻ}# nAzS<#<ȹRЮsˆ ^{Wݳ( k`Άr endstream endobj -198 0 obj << +206 0 obj << /Type /Font /Subtype /Type1 -/Encoding 917 0 R +/Encoding 927 0 R /FirstChar 2 /LastChar 252 -/Widths 932 0 R -/BaseFont /GGLKAW+NimbusSanL-Bold -/FontDescriptor 196 0 R +/Widths 942 0 R +/BaseFont /UJVZAK+NimbusSanL-Bold +/FontDescriptor 204 0 R >> endobj -196 0 obj << +204 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /GGLKAW+NimbusSanL-Bold +/FontName /UJVZAK+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/fi/fl/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/Z/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z/Udieresis/adieresis/udieresis) -/FontFile 197 0 R +/FontFile 205 0 R >> endobj -932 0 obj +942 0 obj [611 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 278 333 278 278 556 556 556 556 556 556 556 556 556 556 0 0 0 0 0 0 0 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 0 722 667 611 722 667 944 0 0 611 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 0 389 556 333 611 556 778 556 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 ] endobj -202 0 obj << +210 0 obj << /Type /Pages /Count 6 -/Parent 933 0 R -/Kids [190 0 R 204 0 R 211 0 R 241 0 R 269 0 R 328 0 R] +/Parent 943 0 R +/Kids [198 0 R 212 0 R 216 0 R 223 0 R 253 0 R 283 0 R] >> endobj -371 0 obj << +352 0 obj << /Type /Pages /Count 6 -/Parent 933 0 R -/Kids [348 0 R 393 0 R 401 0 R 415 0 R 423 0 R 430 0 R] +/Parent 943 0 R +/Kids [342 0 R 361 0 R 404 0 R 412 0 R 424 0 R 433 0 R] >> endobj -444 0 obj << +447 0 obj << /Type /Pages /Count 6 -/Parent 933 0 R -/Kids [439 0 R 449 0 R 456 0 R 462 0 R 470 0 R 479 0 R] +/Parent 943 0 R +/Kids [441 0 R 452 0 R 460 0 R 466 0 R 472 0 R 481 0 R] >> endobj -492 0 obj << +495 0 obj << /Type /Pages /Count 6 -/Parent 933 0 R -/Kids [486 0 R 494 0 R 501 0 R 509 0 R 513 0 R 519 0 R] +/Parent 943 0 R +/Kids [489 0 R 498 0 R 506 0 R 514 0 R 519 0 R 525 0 R] >> endobj -530 0 obj << +537 0 obj << /Type /Pages /Count 6 -/Parent 933 0 R -/Kids [525 0 R 532 0 R 541 0 R 547 0 R 551 0 R 555 0 R] +/Parent 943 0 R +/Kids [532 0 R 540 0 R 545 0 R 549 0 R 553 0 R 563 0 R] >> endobj -565 0 obj << +575 0 obj << /Type /Pages /Count 6 -/Parent 933 0 R -/Kids [559 0 R 567 0 R 580 0 R 587 0 R 594 0 R 599 0 R] +/Parent 943 0 R +/Kids [572 0 R 579 0 R 585 0 R 592 0 R 596 0 R 603 0 R] >> endobj -617 0 obj << +620 0 obj << /Type /Pages /Count 6 -/Parent 934 0 R -/Kids [605 0 R 620 0 R 626 0 R 636 0 R 644 0 R 654 0 R] +/Parent 944 0 R +/Kids [616 0 R 623 0 R 632 0 R 638 0 R 645 0 R 653 0 R] >> endobj -666 0 obj << +663 0 obj << /Type /Pages /Count 6 -/Parent 934 0 R -/Kids [659 0 R 669 0 R 674 0 R 678 0 R 683 0 R 693 0 R] +/Parent 944 0 R +/Kids [660 0 R 666 0 R 674 0 R 679 0 R 683 0 R 688 0 R] >> endobj -705 0 obj << +702 0 obj << /Type /Pages /Count 6 -/Parent 934 0 R -/Kids [702 0 R 708 0 R 715 0 R 720 0 R 727 0 R 735 0 R] +/Parent 944 0 R +/Kids [695 0 R 704 0 R 713 0 R 717 0 R 724 0 R 729 0 R] >> endobj -745 0 obj << +742 0 obj << /Type /Pages /Count 6 -/Parent 934 0 R -/Kids [739 0 R 752 0 R 757 0 R 769 0 R 779 0 R 785 0 R] +/Parent 944 0 R +/Kids [737 0 R 745 0 R 750 0 R 762 0 R 767 0 R 778 0 R] >> endobj -797 0 obj << +789 0 obj << /Type /Pages /Count 6 -/Parent 934 0 R -/Kids [791 0 R 800 0 R 811 0 R 820 0 R 825 0 R 829 0 R] +/Parent 944 0 R +/Kids [785 0 R 796 0 R 802 0 R 810 0 R 821 0 R 830 0 R] >> endobj -842 0 obj << +837 0 obj << /Type /Pages /Count 6 -/Parent 934 0 R -/Kids [839 0 R 844 0 R 849 0 R 853 0 R 858 0 R 862 0 R] +/Parent 944 0 R +/Kids [834 0 R 840 0 R 850 0 R 854 0 R 859 0 R 863 0 R] >> endobj -889 0 obj << +871 0 obj << /Type /Pages -/Count 4 -/Parent 935 0 R -/Kids [874 0 R 891 0 R 895 0 R 914 0 R] +/Count 6 +/Parent 945 0 R +/Kids [868 0 R 873 0 R 878 0 R 901 0 R 905 0 R 924 0 R] >> endobj -933 0 obj << +943 0 obj << /Type /Pages /Count 36 -/Parent 936 0 R -/Kids [202 0 R 371 0 R 444 0 R 492 0 R 530 0 R 565 0 R] +/Parent 946 0 R +/Kids [210 0 R 352 0 R 447 0 R 495 0 R 537 0 R 575 0 R] >> endobj -934 0 obj << +944 0 obj << /Type /Pages /Count 36 -/Parent 936 0 R -/Kids [617 0 R 666 0 R 705 0 R 745 0 R 797 0 R 842 0 R] +/Parent 946 0 R +/Kids [620 0 R 663 0 R 702 0 R 742 0 R 789 0 R 837 0 R] >> endobj -935 0 obj << +945 0 obj << /Type /Pages -/Count 4 -/Parent 936 0 R -/Kids [889 0 R] +/Count 6 +/Parent 946 0 R +/Kids [871 0 R] >> endobj -936 0 obj << +946 0 obj << /Type /Pages -/Count 76 -/Kids [933 0 R 934 0 R 935 0 R] +/Count 78 +/Kids [943 0 R 944 0 R 945 0 R] >> endobj -937 0 obj << +947 0 obj << /Type /Outlines /First 7 0 R -/Last 187 0 R +/Last 195 0 R /Count 6 >> endobj +195 0 obj << +/Title 196 0 R +/A 193 0 R +/Parent 947 0 R +/Prev 191 0 R +>> endobj +191 0 obj << +/Title 192 0 R +/A 189 0 R +/Parent 947 0 R +/Prev 187 0 R +/Next 195 0 R +>> endobj 187 0 obj << /Title 188 0 R /A 185 0 R -/Parent 937 0 R -/Prev 183 0 R +/Parent 947 0 R +/Prev 107 0 R +/Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R -/Parent 937 0 R +/Parent 107 0 R /Prev 179 0 R -/Next 187 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R -/Parent 937 0 R -/Prev 107 0 R +/Parent 107 0 R +/Prev 171 0 R /Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R -/Parent 107 0 R -/Prev 171 0 R +/Parent 171 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 107 0 R -/Prev 163 0 R -/Next 175 0 R +/Prev 167 0 R +/Next 179 0 R +/First 175 0 R +/Last 175 0 R +/Count -1 >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R -/Parent 163 0 R +/Parent 107 0 R +/Prev 151 0 R +/Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R -/Parent 107 0 R +/Parent 151 0 R /Prev 159 0 R -/Next 171 0 R -/First 167 0 R -/Last 167 0 R -/Count -1 >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R -/Parent 107 0 R -/Prev 143 0 R +/Parent 151 0 R +/Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R -/Parent 143 0 R -/Prev 151 0 R +/Parent 151 0 R +/Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R -/Parent 143 0 R -/Prev 147 0 R -/Next 155 0 R +/Parent 107 0 R +/Prev 139 0 R +/Next 167 0 R +/First 155 0 R +/Last 163 0 R +/Count -3 >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R -/Parent 143 0 R -/Next 151 0 R +/Parent 139 0 R +/Prev 143 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R -/Parent 107 0 R -/Prev 131 0 R -/Next 159 0 R -/First 147 0 R -/Last 155 0 R -/Count -3 +/Parent 139 0 R +/Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R -/Parent 131 0 R -/Prev 135 0 R +/Parent 107 0 R +/Prev 127 0 R +/Next 151 0 R +/First 143 0 R +/Last 147 0 R +/Count -2 >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R -/Parent 131 0 R -/Next 139 0 R +/Parent 127 0 R +/Prev 131 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R -/Parent 107 0 R -/Prev 119 0 R -/Next 143 0 R -/First 135 0 R -/Last 139 0 R -/Count -2 +/Parent 127 0 R +/Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R -/Parent 119 0 R -/Prev 123 0 R +/Parent 107 0 R +/Prev 115 0 R +/Next 139 0 R +/First 131 0 R +/Last 135 0 R +/Count -2 >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R -/Parent 119 0 R -/Next 127 0 R +/Parent 115 0 R +/Prev 119 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R -/Parent 107 0 R -/Prev 115 0 R -/Next 131 0 R -/First 123 0 R -/Last 127 0 R -/Count -2 +/Parent 115 0 R +/Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 107 0 R /Prev 111 0 R -/Next 119 0 R +/Next 127 0 R +/First 119 0 R +/Last 123 0 R +/Count -2 >> endobj 111 0 obj << /Title 112 0 R @@ -8233,11 +8298,11 @@ endobj 107 0 obj << /Title 108 0 R /A 105 0 R -/Parent 937 0 R +/Parent 947 0 R /Prev 19 0 R -/Next 179 0 R +/Next 187 0 R /First 111 0 R -/Last 175 0 R +/Last 183 0 R /Count -9 >> endobj 103 0 obj << @@ -8391,7 +8456,7 @@ endobj 19 0 obj << /Title 20 0 R /A 17 0 R -/Parent 937 0 R +/Parent 947 0 R /Prev 7 0 R /Next 107 0 R /First 23 0 R @@ -8413,987 +8478,997 @@ endobj 7 0 obj << /Title 8 0 R /A 5 0 R -/Parent 937 0 R +/Parent 947 0 R /Next 19 0 R /First 11 0 R /Last 15 0 R /Count -2 >> endobj -938 0 obj << -/Names [(API) 898 0 R (BSD) 899 0 R (Doc-Start) 195 0 R (GIMP) 900 0 R (GNU) 901 0 R (GUI) 902 0 R (GVim) 903 0 R (HTTPS) 904 0 R (Item.1) 696 0 R (Item.2) 697 0 R (Item.3) 698 0 R (Item.4) 699 0 R (Item.5) 700 0 R (Item.6) 782 0 R (Item.7) 783 0 R (Item.8) 788 0 R (JRE) 905 0 R (NID) 906 0 R (PDF) 907 0 R (PID) 908 0 R (RTT) 909 0 R (SDK) 910 0 R (SVN) 911 0 R (VS) 912 0 R (appendix.A) 182 0 R (appendix.B) 186 0 R (chapter*.1) 214 0 R (chapter*.2) 272 0 R (chapter*.3) 351 0 R (chapter.1) 6 0 R (chapter.2) 18 0 R (chapter.3) 106 0 R (chapter.4) 178 0 R (cite.OOS) 732 0 R (cite.Tanenbaum) 398 0 R (cite.Vorlesung) 634 0 R (figure.1.1) 300 0 R (figure.1.2) 301 0 R (figure.1.3) 302 0 R (figure.2.1) 303 0 R (figure.2.10) 312 0 R (figure.2.11) 313 0 R (figure.2.12) 314 0 R (figure.2.13) 315 0 R (figure.2.14) 316 0 R (figure.2.15) 317 0 R (figure.2.16) 318 0 R (figure.2.17) 319 0 R (figure.2.18) 320 0 R (figure.2.19) 321 0 R (figure.2.2) 304 0 R (figure.2.20) 322 0 R (figure.2.21) 323 0 R (figure.2.22) 324 0 R (figure.2.23) 325 0 R (figure.2.24) 326 0 R (figure.2.25) 339 0 R (figure.2.26) 340 0 R (figure.2.3) 305 0 R (figure.2.4) 306 0 R (figure.2.5) 307 0 R (figure.2.6) 308 0 R (figure.2.7) 309 0 R (figure.2.8) 310 0 R (figure.2.9) 311 0 R (figure.3.1) 341 0 R (figure.3.2) 342 0 R (figure.3.3) 343 0 R (figure.3.4) 344 0 R (figure.3.5) 345 0 R (figure.3.6) 346 0 R (page.1) 194 0 R (page.10) 417 0 R (page.11) 425 0 R (page.12) 432 0 R (page.13) 441 0 R (page.14) 451 0 R (page.15) 458 0 R (page.16) 464 0 R (page.17) 472 0 R (page.18) 481 0 R (page.19) 488 0 R (page.2) 206 0 R (page.20) 496 0 R (page.21) 503 0 R (page.22) 511 0 R (page.23) 515 0 R (page.24) 521 0 R (page.25) 527 0 R (page.26) 534 0 R (page.27) 543 0 R (page.28) 549 0 R (page.29) 553 0 R (page.3) 213 0 R (page.30) 557 0 R (page.31) 561 0 R (page.32) 569 0 R (page.33) 582 0 R (page.34) 589 0 R (page.35) 596 0 R (page.36) 601 0 R (page.37) 607 0 R (page.38) 622 0 R (page.39) 628 0 R (page.4) 243 0 R (page.40) 638 0 R (page.41) 646 0 R (page.42) 656 0 R (page.43) 661 0 R (page.44) 671 0 R (page.45) 676 0 R (page.46) 680 0 R (page.47) 685 0 R (page.48) 695 0 R (page.49) 704 0 R (page.5) 271 0 R (page.50) 710 0 R (page.51) 717 0 R (page.52) 722 0 R (page.53) 729 0 R (page.54) 737 0 R (page.55) 741 0 R (page.56) 754 0 R (page.57) 759 0 R (page.58) 771 0 R (page.59) 781 0 R (page.6) 330 0 R (page.60) 787 0 R (page.61) 793 0 R (page.62) 802 0 R (page.63) 813 0 R (page.64) 822 0 R (page.65) 827 0 R (page.66) 831 0 R (page.67) 841 0 R (page.68) 846 0 R (page.69) 851 0 R (page.7) 350 0 R (page.70) 855 0 R (page.71) 860 0 R (page.72) 864 0 R (page.73) 876 0 R (page.74) 893 0 R (page.75) 897 0 R (page.76) 916 0 R (page.8) 395 0 R (page.9) 403 0 R (section*.10) 453 0 R (section*.11) 465 0 R (section*.12) 467 0 R (section*.13) 474 0 R (section*.14) 476 0 R (section*.15) 504 0 R (section*.16) 516 0 R (section*.17) 522 0 R (section*.18) 523 0 R (section*.19) 528 0 R (section*.20) 529 0 R (section*.21) 535 0 R (section*.22) 536 0 R (section*.23) 537 0 R (section*.24) 623 0 R (section*.25) 649 0 R (section*.26) 657 0 R (section*.27) 672 0 R (section*.28) 711 0 R (section*.29) 742 0 R (section*.30) 760 0 R (section*.31) 847 0 R (section*.32) 856 0 R (section*.33) 866 0 R (section*.4) 404 0 R (section*.5) 418 0 R (section*.6) 419 0 R (section*.7) 420 0 R (section*.8) 426 0 R (section*.9) 427 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.2.1) 22 0 R (section.2.2) 26 0 R (section.2.3) 30 0 R (section.2.4) 34 0 R (section.2.5) 54 0 R (section.2.6) 98 0 R (section.3.1) 110 0 R (section.3.2) 114 0 R (section.3.3) 118 0 R (section.3.4) 130 0 R (section.3.5) 142 0 R (section.3.6) 158 0 R (section.3.7) 162 0 R (section.3.8) 170 0 R (section.3.9) 174 0 R (subsection.2.4.1) 38 0 R (subsection.2.4.2) 42 0 R (subsection.2.4.3) 46 0 R (subsection.2.4.4) 50 0 R (subsection.2.5.1) 58 0 R (subsection.2.5.10) 94 0 R (subsection.2.5.2) 62 0 R (subsection.2.5.3) 66 0 R (subsection.2.5.4) 70 0 R (subsection.2.5.5) 74 0 R (subsection.2.5.6) 78 0 R (subsection.2.5.7) 82 0 R (subsection.2.5.8) 86 0 R (subsection.2.5.9) 90 0 R (subsection.2.6.1) 102 0 R (subsection.3.3.1) 122 0 R (subsection.3.3.2) 126 0 R (subsection.3.4.1) 134 0 R (subsection.3.4.2) 138 0 R (subsection.3.5.1) 146 0 R (subsection.3.5.2) 150 0 R (subsection.3.5.3) 154 0 R (subsection.3.7.1) 166 0 R (table.2.1) 372 0 R (table.2.10) 381 0 R (table.2.11) 382 0 R (table.2.12) 383 0 R (table.2.13) 384 0 R (table.2.14) 385 0 R (table.2.15) 386 0 R (table.2.16) 387 0 R (table.2.17) 388 0 R (table.2.2) 373 0 R (table.2.3) 374 0 R (table.2.4) 375 0 R (table.2.5) 376 0 R (table.2.6) 377 0 R (table.2.7) 378 0 R (table.2.8) 379 0 R (table.2.9) 380 0 R (table.3.1) 389 0 R (table.3.2) 390 0 R] +948 0 obj << +/Names [(API) 908 0 R (BSD) 909 0 R (Doc-Start) 203 0 R (GIMP) 910 0 R (GNU) 911 0 R (GUI) 912 0 R (GVim) 913 0 R (HTTPS) 914 0 R (Item.1) 707 0 R (Item.2) 708 0 R (Item.3) 709 0 R (Item.4) 710 0 R (Item.5) 711 0 R (Item.6) 783 0 R (Item.7) 788 0 R (Item.8) 799 0 R (JRE) 915 0 R (NID) 916 0 R (PDF) 917 0 R (PID) 918 0 R (RTT) 919 0 R (SDK) 920 0 R (SVN) 921 0 R (VS) 922 0 R (appendix.A) 190 0 R (appendix.B) 194 0 R (chapter*.1) 226 0 R (chapter*.2) 286 0 R (chapter*.3) 364 0 R (chapter.1) 6 0 R (chapter.2) 18 0 R (chapter.3) 106 0 R (chapter.4) 186 0 R (cite.OOS) 743 0 R (cite.Tanenbaum) 408 0 R (cite.Vorlesung) 630 0 R (figure.1.1) 314 0 R (figure.1.2) 315 0 R (figure.2.1) 316 0 R (figure.2.10) 325 0 R (figure.2.11) 326 0 R (figure.2.12) 327 0 R (figure.2.13) 328 0 R (figure.2.14) 329 0 R (figure.2.15) 330 0 R (figure.2.16) 331 0 R (figure.2.17) 332 0 R (figure.2.18) 333 0 R (figure.2.19) 334 0 R (figure.2.2) 317 0 R (figure.2.20) 335 0 R (figure.2.21) 336 0 R (figure.2.22) 337 0 R (figure.2.23) 338 0 R (figure.2.24) 339 0 R (figure.2.25) 340 0 R (figure.2.26) 353 0 R (figure.2.3) 318 0 R (figure.2.4) 319 0 R (figure.2.5) 320 0 R (figure.2.6) 321 0 R (figure.2.7) 322 0 R (figure.2.8) 323 0 R (figure.2.9) 324 0 R (figure.3.1) 354 0 R (figure.3.2) 355 0 R (figure.3.3) 356 0 R (figure.3.4) 357 0 R (figure.3.5) 358 0 R (figure.3.6) 359 0 R (page.1) 202 0 R (page.10) 414 0 R (page.11) 426 0 R (page.12) 435 0 R (page.13) 443 0 R (page.14) 454 0 R (page.15) 462 0 R (page.16) 468 0 R (page.17) 474 0 R (page.18) 483 0 R (page.19) 491 0 R (page.2) 214 0 R (page.20) 500 0 R (page.21) 508 0 R (page.22) 516 0 R (page.23) 521 0 R (page.24) 527 0 R (page.25) 534 0 R (page.26) 542 0 R (page.27) 547 0 R (page.28) 551 0 R (page.29) 555 0 R (page.3) 218 0 R (page.30) 565 0 R (page.31) 574 0 R (page.32) 581 0 R (page.33) 587 0 R (page.34) 594 0 R (page.35) 598 0 R (page.36) 605 0 R (page.37) 618 0 R (page.38) 625 0 R (page.39) 634 0 R (page.4) 225 0 R (page.40) 640 0 R (page.41) 647 0 R (page.42) 655 0 R (page.43) 662 0 R (page.44) 668 0 R (page.45) 676 0 R (page.46) 681 0 R (page.47) 685 0 R (page.48) 690 0 R (page.49) 697 0 R (page.5) 255 0 R (page.50) 706 0 R (page.51) 715 0 R (page.52) 719 0 R (page.53) 726 0 R (page.54) 731 0 R (page.55) 739 0 R (page.56) 747 0 R (page.57) 752 0 R (page.58) 764 0 R (page.59) 769 0 R (page.6) 285 0 R (page.60) 780 0 R (page.61) 787 0 R (page.62) 798 0 R (page.63) 804 0 R (page.64) 812 0 R (page.65) 823 0 R (page.66) 832 0 R (page.67) 836 0 R (page.68) 842 0 R (page.69) 852 0 R (page.7) 344 0 R (page.70) 856 0 R (page.71) 861 0 R (page.72) 865 0 R (page.73) 870 0 R (page.74) 875 0 R (page.75) 880 0 R (page.76) 903 0 R (page.77) 907 0 R (page.78) 926 0 R (page.8) 363 0 R (page.9) 406 0 R (section*.10) 455 0 R (section*.11) 457 0 R (section*.12) 469 0 R (section*.13) 476 0 R (section*.14) 484 0 R (section*.15) 501 0 R (section*.16) 509 0 R (section*.17) 511 0 R (section*.18) 517 0 R (section*.19) 522 0 R (section*.20) 523 0 R (section*.21) 528 0 R (section*.22) 529 0 R (section*.23) 535 0 R (section*.24) 619 0 R (section*.25) 650 0 R (section*.26) 658 0 R (section*.27) 677 0 R (section*.28) 720 0 R (section*.29) 857 0 R (section*.30) 866 0 R (section*.31) 881 0 R (section*.4) 415 0 R (section*.5) 417 0 R (section*.6) 418 0 R (section*.7) 427 0 R (section*.8) 436 0 R (section*.9) 437 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.2.1) 22 0 R (section.2.2) 26 0 R (section.2.3) 30 0 R (section.2.4) 34 0 R (section.2.5) 54 0 R (section.2.6) 98 0 R (section.3.1) 110 0 R (section.3.2) 114 0 R (section.3.3) 126 0 R (section.3.4) 138 0 R (section.3.5) 150 0 R (section.3.6) 166 0 R (section.3.7) 170 0 R (section.3.8) 178 0 R (section.3.9) 182 0 R (subsection.2.4.1) 38 0 R (subsection.2.4.2) 42 0 R (subsection.2.4.3) 46 0 R (subsection.2.4.4) 50 0 R (subsection.2.5.1) 58 0 R (subsection.2.5.10) 94 0 R (subsection.2.5.2) 62 0 R (subsection.2.5.3) 66 0 R (subsection.2.5.4) 70 0 R (subsection.2.5.5) 74 0 R (subsection.2.5.6) 78 0 R (subsection.2.5.7) 82 0 R (subsection.2.5.8) 86 0 R (subsection.2.5.9) 90 0 R (subsection.2.6.1) 102 0 R (subsection.3.2.1) 118 0 R (subsection.3.2.2) 122 0 R (subsection.3.3.1) 130 0 R (subsection.3.3.2) 134 0 R (subsection.3.4.1) 142 0 R (subsection.3.4.2) 146 0 R (subsection.3.5.1) 154 0 R (subsection.3.5.2) 158 0 R (subsection.3.5.3) 162 0 R (subsection.3.7.1) 174 0 R (table.2.1) 384 0 R (table.2.10) 393 0 R (table.2.11) 394 0 R (table.2.12) 395 0 R (table.2.13) 396 0 R (table.2.14) 397 0 R (table.2.15) 398 0 R (table.2.16) 399 0 R (table.2.17) 400 0 R (table.2.2) 385 0 R (table.2.3) 386 0 R (table.2.4) 387 0 R (table.2.5) 388 0 R (table.2.6) 389 0 R (table.2.7) 390 0 R (table.2.8) 391 0 R (table.2.9) 392 0 R (table.3.1) 401 0 R (table.3.2) 402 0 R] /Limits [(API) (table.3.2)] >> endobj -939 0 obj << -/Kids [938 0 R] +949 0 obj << +/Kids [948 0 R] >> endobj -940 0 obj << -/Dests 939 0 R +950 0 obj << +/Dests 949 0 R >> endobj -941 0 obj << +951 0 obj << /Type /Catalog -/Pages 936 0 R -/Outlines 937 0 R -/Names 940 0 R +/Pages 946 0 R +/Outlines 947 0 R +/Names 950 0 R /PageMode /UseOutlines /PageLayout/OneColumn -/OpenAction 189 0 R +/OpenAction 197 0 R >> endobj -942 0 obj << +952 0 obj << /Author(Paul Btow)/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20080806202517Z) +/CreationDate (D:20080807190445Z) /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref -0 943 +0 953 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n -0000085905 00000 n -0000942481 00000 n +0000087515 00000 n +0000944797 00000 n 0000000054 00000 n 0000000143 00000 n -0000085966 00000 n -0000942409 00000 n +0000087576 00000 n +0000944725 00000 n 0000000190 00000 n 0000000290 00000 n -0000090504 00000 n -0000942336 00000 n +0000091219 00000 n +0000944652 00000 n 0000000338 00000 n 0000000438 00000 n -0000109886 00000 n -0000942211 00000 n +0000109457 00000 n +0000944527 00000 n 0000000484 00000 n 0000000592 00000 n -0000109948 00000 n -0000942137 00000 n +0000109519 00000 n +0000944453 00000 n 0000000640 00000 n 0000000898 00000 n -0000191390 00000 n -0000942050 00000 n +0000189870 00000 n +0000944366 00000 n 0000000946 00000 n 0000001084 00000 n -0000227986 00000 n -0000941963 00000 n +0000227910 00000 n +0000944279 00000 n 0000001132 00000 n 0000001232 00000 n -0000236787 00000 n -0000941839 00000 n +0000233783 00000 n +0000944155 00000 n 0000001280 00000 n 0000001395 00000 n -0000236849 00000 n -0000941765 00000 n +0000233845 00000 n +0000944081 00000 n 0000001448 00000 n 0000001603 00000 n -0000236911 00000 n -0000941678 00000 n +0000254481 00000 n +0000943994 00000 n 0000001656 00000 n 0000001836 00000 n -0000274954 00000 n -0000941591 00000 n +0000271051 00000 n +0000943907 00000 n 0000001889 00000 n 0000002130 00000 n -0000278332 00000 n -0000941517 00000 n +0000277662 00000 n +0000943833 00000 n 0000002183 00000 n 0000002399 00000 n -0000311927 00000 n -0000941392 00000 n +0000277724 00000 n +0000943708 00000 n 0000002447 00000 n 0000002547 00000 n -0000311989 00000 n -0000941318 00000 n +0000278659 00000 n +0000943634 00000 n 0000002600 00000 n 0000002802 00000 n -0000312051 00000 n -0000941231 00000 n +0000443213 00000 n +0000943547 00000 n 0000002855 00000 n 0000003036 00000 n -0000517134 00000 n -0000941144 00000 n +0000514114 00000 n +0000943460 00000 n 0000003089 00000 n 0000003270 00000 n -0000517196 00000 n -0000941057 00000 n +0000537183 00000 n +0000943373 00000 n 0000003323 00000 n 0000003757 00000 n -0000563125 00000 n -0000940970 00000 n +0000564872 00000 n +0000943286 00000 n 0000003810 00000 n 0000004122 00000 n -0000567738 00000 n -0000940883 00000 n +0000594693 00000 n +0000943199 00000 n 0000004175 00000 n 0000004520 00000 n -0000599507 00000 n -0000940796 00000 n +0000620139 00000 n +0000943112 00000 n 0000004573 00000 n 0000004797 00000 n -0000650401 00000 n -0000940709 00000 n +0000650730 00000 n +0000943025 00000 n 0000004850 00000 n 0000005079 00000 n -0000671542 00000 n -0000940622 00000 n +0000679492 00000 n +0000942938 00000 n 0000005132 00000 n 0000005375 00000 n -0000702591 00000 n -0000940548 00000 n +0000704264 00000 n +0000942864 00000 n 0000005429 00000 n 0000005697 00000 n -0000711662 00000 n -0000940434 00000 n +0000741527 00000 n +0000942750 00000 n 0000005745 00000 n 0000005884 00000 n -0000711724 00000 n -0000940370 00000 n +0000741589 00000 n +0000942686 00000 n 0000005938 00000 n 0000006155 00000 n -0000775247 00000 n -0000940239 00000 n +0000776646 00000 n +0000942555 00000 n 0000006202 00000 n 0000006341 00000 n -0000775310 00000 n -0000940160 00000 n +0000776709 00000 n +0000942476 00000 n 0000006390 00000 n 0000006551 00000 n -0000778096 00000 n -0000940067 00000 n +0000779494 00000 n +0000942344 00000 n 0000006600 00000 n 0000006787 00000 n -0000794708 00000 n -0000939935 00000 n -0000006836 00000 n -0000006937 00000 n -0000794771 00000 n -0000939856 00000 n -0000006991 00000 n -0000007231 00000 n -0000803511 00000 n -0000939777 00000 n -0000007285 00000 n -0000007557 00000 n -0000807399 00000 n -0000939645 00000 n -0000007606 00000 n -0000007934 00000 n -0000807462 00000 n -0000939566 00000 n -0000007988 00000 n -0000008119 00000 n -0000817428 00000 n -0000939487 00000 n -0000008173 00000 n -0000008502 00000 n -0000821681 00000 n -0000939355 00000 n -0000008551 00000 n -0000008652 00000 n -0000821744 00000 n -0000939276 00000 n -0000008706 00000 n -0000008961 00000 n -0000824303 00000 n -0000939183 00000 n -0000009015 00000 n -0000009282 00000 n -0000832011 00000 n -0000939104 00000 n -0000009336 00000 n -0000009548 00000 n -0000832074 00000 n -0000939011 00000 n -0000009597 00000 n -0000009663 00000 n -0000832137 00000 n -0000938879 00000 n -0000009712 00000 n -0000009924 00000 n -0000832200 00000 n -0000938814 00000 n -0000009978 00000 n -0000010140 00000 n -0000832263 00000 n -0000938721 00000 n -0000010189 00000 n -0000010280 00000 n -0000836720 00000 n -0000938642 00000 n -0000010329 00000 n -0000010480 00000 n -0000841317 00000 n -0000938549 00000 n -0000010527 00000 n -0000010608 00000 n -0000842865 00000 n -0000938456 00000 n -0000010656 00000 n -0000010737 00000 n -0000844898 00000 n -0000938377 00000 n -0000010785 00000 n -0000010926 00000 n -0000011888 00000 n -0000012010 00000 n -0000054415 00000 n -0000010978 00000 n -0000054289 00000 n -0000054352 00000 n -0000935310 00000 n -0000922461 00000 n -0000935140 00000 n -0000921172 00000 n -0000907319 00000 n -0000921002 00000 n -0000936406 00000 n -0000055593 00000 n -0000055408 00000 n -0000054536 00000 n -0000055530 00000 n -0000906786 00000 n -0000904923 00000 n -0000906626 00000 n -0000062436 00000 n -0000057972 00000 n -0000055691 00000 n -0000062310 00000 n -0000062373 00000 n -0000058306 00000 n -0000058461 00000 n -0000058618 00000 n -0000058774 00000 n -0000058929 00000 n -0000059086 00000 n -0000059243 00000 n -0000059400 00000 n -0000059556 00000 n -0000059719 00000 n -0000059882 00000 n -0000060045 00000 n -0000060208 00000 n -0000060364 00000 n -0000060526 00000 n -0000060689 00000 n -0000060852 00000 n -0000061014 00000 n -0000061176 00000 n -0000061339 00000 n -0000061502 00000 n -0000061665 00000 n -0000061827 00000 n -0000061991 00000 n -0000062148 00000 n -0000068154 00000 n -0000064461 00000 n -0000062521 00000 n -0000068091 00000 n -0000903781 00000 n -0000892433 00000 n -0000903607 00000 n -0000064763 00000 n -0000064917 00000 n -0000065074 00000 n -0000065231 00000 n -0000065388 00000 n -0000065548 00000 n -0000065711 00000 n -0000065867 00000 n -0000066030 00000 n -0000066193 00000 n -0000066349 00000 n -0000066512 00000 n -0000066675 00000 n -0000066838 00000 n -0000066993 00000 n -0000067150 00000 n -0000067312 00000 n -0000067468 00000 n -0000067624 00000 n -0000067779 00000 n -0000067935 00000 n -0000075432 00000 n -0000070743 00000 n -0000068252 00000 n -0000075306 00000 n -0000075369 00000 n -0000071093 00000 n -0000071248 00000 n -0000071403 00000 n -0000071556 00000 n -0000071712 00000 n -0000071868 00000 n -0000072024 00000 n -0000072180 00000 n -0000072336 00000 n -0000072492 00000 n -0000072648 00000 n -0000072803 00000 n -0000072959 00000 n -0000073116 00000 n -0000073272 00000 n -0000073429 00000 n -0000073585 00000 n -0000073742 00000 n -0000073899 00000 n -0000074056 00000 n -0000074212 00000 n -0000074369 00000 n -0000074524 00000 n -0000074681 00000 n -0000074837 00000 n -0000074994 00000 n -0000075149 00000 n -0000090441 00000 n -0000090629 00000 n -0000097885 00000 n -0000110010 00000 n -0000120070 00000 n -0000151469 00000 n -0000157367 00000 n -0000164493 00000 n -0000168732 00000 n -0000174527 00000 n -0000185559 00000 n -0000185623 00000 n -0000191326 00000 n -0000217559 00000 n -0000225036 00000 n -0000256078 00000 n -0000268467 00000 n -0000312113 00000 n -0000446572 00000 n -0000513563 00000 n -0000538821 00000 n -0000563187 00000 n -0000595123 00000 n -0000621195 00000 n -0000650463 00000 n -0000671604 00000 n -0000702653 00000 n -0000077987 00000 n -0000076476 00000 n -0000075517 00000 n -0000077924 00000 n -0000076674 00000 n -0000076831 00000 n -0000076988 00000 n -0000077144 00000 n -0000077300 00000 n -0000077456 00000 n -0000077612 00000 n -0000077768 00000 n -0000770081 00000 n -0000770145 00000 n -0000782248 00000 n -0000790501 00000 n -0000794834 00000 n -0000807525 00000 n -0000811963 00000 n -0000821617 00000 n -0000083363 00000 n -0000080003 00000 n -0000078072 00000 n -0000083237 00000 n -0000083300 00000 n -0000080289 00000 n -0000080443 00000 n -0000080598 00000 n -0000080753 00000 n -0000080908 00000 n -0000081063 00000 n -0000081218 00000 n -0000081373 00000 n -0000081528 00000 n -0000081683 00000 n -0000081839 00000 n -0000081994 00000 n -0000082150 00000 n -0000082306 00000 n -0000082460 00000 n -0000082616 00000 n -0000082771 00000 n -0000082927 00000 n -0000083082 00000 n -0000936523 00000 n -0000168796 00000 n -0000236723 00000 n -0000278269 00000 n -0000446508 00000 n -0000513499 00000 n -0000517070 00000 n -0000538885 00000 n -0000567674 00000 n -0000595187 00000 n -0000621259 00000 n -0000650337 00000 n -0000674587 00000 n -0000677468 00000 n -0000677532 00000 n -0000705125 00000 n -0000708280 00000 n -0000711535 00000 n -0000778032 00000 n -0000790374 00000 n -0000087581 00000 n -0000086028 00000 n -0000085377 00000 n -0000083461 00000 n -0000085842 00000 n -0000085527 00000 n -0000085687 00000 n -0000845087 00000 n -0000089035 00000 n -0000090693 00000 n -0000087439 00000 n -0000086126 00000 n -0000090378 00000 n -0000090566 00000 n -0000090223 00000 n -0000088764 00000 n -0000088895 00000 n -0000088942 00000 n -0000089014 00000 n -0000089952 00000 n -0000090083 00000 n -0000090130 00000 n -0000090202 00000 n -0000093349 00000 n -0000092975 00000 n -0000090832 00000 n -0000093097 00000 n -0000093160 00000 n -0000093223 00000 n -0000093286 00000 n -0000096576 00000 n -0000095932 00000 n -0000095444 00000 n -0000093447 00000 n -0000095743 00000 n -0000095806 00000 n -0000095869 00000 n -0000095586 00000 n -0000097949 00000 n -0000096454 00000 n -0000096030 00000 n -0000097822 00000 n -0000097551 00000 n -0000097682 00000 n -0000097729 00000 n -0000097801 00000 n -0000099188 00000 n -0000110073 00000 n -0000099038 00000 n -0000098062 00000 n -0000109823 00000 n -0000109509 00000 n -0000109666 00000 n -0000936640 00000 n -0000112177 00000 n -0000120952 00000 n -0000154097 00000 n -0000120197 00000 n -0000112027 00000 n -0000110207 00000 n -0000120007 00000 n -0000119696 00000 n -0000120134 00000 n -0000119853 00000 n -0000151532 00000 n -0000120830 00000 n -0000120331 00000 n -0000151406 00000 n -0000159537 00000 n -0000166236 00000 n -0000157494 00000 n -0000153947 00000 n -0000151653 00000 n -0000157241 00000 n -0000157304 00000 n -0000156927 00000 n -0000157431 00000 n -0000157084 00000 n -0000164682 00000 n -0000159379 00000 n -0000157641 00000 n -0000164430 00000 n -0000163961 00000 n -0000164557 00000 n -0000164118 00000 n -0000164619 00000 n -0000164273 00000 n -0000168860 00000 n -0000166114 00000 n -0000164816 00000 n -0000168669 00000 n -0000171320 00000 n -0000175498 00000 n -0000181759 00000 n -0000174590 00000 n -0000171162 00000 n -0000168995 00000 n -0000174464 00000 n -0000173996 00000 n -0000174153 00000 n -0000174310 00000 n -0000936757 00000 n -0000185687 00000 n -0000175376 00000 n -0000174712 00000 n -0000185496 00000 n -0000188461 00000 n -0000192218 00000 n -0000219397 00000 n -0000191452 00000 n -0000188303 00000 n -0000185823 00000 n -0000191200 00000 n -0000191263 00000 n -0000190730 00000 n -0000190886 00000 n -0000191043 00000 n -0000217622 00000 n -0000192096 00000 n -0000191587 00000 n -0000217496 00000 n -0000225163 00000 n -0000219255 00000 n -0000217744 00000 n -0000224973 00000 n -0000225100 00000 n -0000224815 00000 n -0000228048 00000 n -0000227675 00000 n -0000225298 00000 n -0000227797 00000 n -0000227860 00000 n -0000227923 00000 n -0000230717 00000 n -0000230406 00000 n -0000228146 00000 n -0000230528 00000 n -0000230591 00000 n -0000230654 00000 n -0000936874 00000 n -0000233438 00000 n -0000233065 00000 n -0000230828 00000 n -0000233187 00000 n -0000233250 00000 n -0000233313 00000 n -0000233375 00000 n -0000237724 00000 n -0000256914 00000 n -0000236973 00000 n -0000236197 00000 n -0000233536 00000 n -0000236660 00000 n -0000236347 00000 n -0000236502 00000 n -0000256142 00000 n -0000237602 00000 n -0000237084 00000 n -0000256015 00000 n -0000268530 00000 n -0000256792 00000 n -0000256264 00000 n -0000268404 00000 n -0000271659 00000 n -0000271474 00000 n -0000268652 00000 n -0000271596 00000 n -0000275016 00000 n -0000274769 00000 n -0000271770 00000 n -0000274891 00000 n -0000892014 00000 n -0000883480 00000 n -0000891836 00000 n -0000936991 00000 n -0000278394 00000 n -0000277743 00000 n -0000275140 00000 n -0000278206 00000 n -0000883030 00000 n -0000875740 00000 n -0000882855 00000 n -0000875300 00000 n -0000873017 00000 n -0000875140 00000 n -0000277893 00000 n -0000278050 00000 n -0000280508 00000 n -0000312177 00000 n -0000280366 00000 n -0000278544 00000 n -0000311864 00000 n -0000311707 00000 n -0000314700 00000 n -0000447949 00000 n -0000446636 00000 n -0000314542 00000 n -0000312312 00000 n -0000446445 00000 n -0000445978 00000 n -0000446132 00000 n -0000446287 00000 n -0000513627 00000 n -0000447827 00000 n -0000446771 00000 n -0000513436 00000 n -0000520105 00000 n -0000517258 00000 n -0000516545 00000 n -0000513762 00000 n -0000517007 00000 n -0000516695 00000 n -0000516851 00000 n -0000538948 00000 n -0000519947 00000 n -0000517369 00000 n -0000538758 00000 n -0000538286 00000 n -0000872748 00000 n -0000870032 00000 n -0000872575 00000 n -0000869683 00000 n -0000867628 00000 n -0000869522 00000 n -0000538444 00000 n -0000538602 00000 n -0000937108 00000 n -0000541412 00000 n -0000563251 00000 n -0000541290 00000 n -0000539148 00000 n -0000562999 00000 n -0000563062 00000 n -0000570494 00000 n -0000567800 00000 n -0000566648 00000 n -0000563412 00000 n -0000567611 00000 n -0000566822 00000 n -0000566983 00000 n -0000567141 00000 n -0000567298 00000 n -0000567454 00000 n -0000845024 00000 n -0000595251 00000 n -0000570372 00000 n -0000567963 00000 n -0000595060 00000 n -0000867299 00000 n -0000865191 00000 n -0000867130 00000 n -0000601788 00000 n -0000599569 00000 n -0000598586 00000 n -0000595451 00000 n -0000599381 00000 n -0000598752 00000 n -0000598910 00000 n -0000599444 00000 n -0000599066 00000 n -0000599224 00000 n -0000624218 00000 n -0000621386 00000 n -0000601666 00000 n -0000599719 00000 n -0000621132 00000 n -0000621323 00000 n -0000650527 00000 n -0000624052 00000 n -0000621534 00000 n -0000650274 00000 n -0000649650 00000 n -0000649807 00000 n -0000649962 00000 n -0000650118 00000 n -0000937225 00000 n -0000652565 00000 n -0000671668 00000 n -0000652443 00000 n -0000650662 00000 n -0000671416 00000 n -0000671479 00000 n -0000674651 00000 n -0000674402 00000 n -0000671816 00000 n -0000674524 00000 n -0000677595 00000 n -0000677283 00000 n -0000674749 00000 n -0000677405 00000 n -0000680311 00000 n -0000702717 00000 n -0000680129 00000 n -0000677693 00000 n -0000702528 00000 n -0000701587 00000 n -0000701745 00000 n -0000701902 00000 n -0000702060 00000 n -0000702217 00000 n -0000702372 00000 n -0000705503 00000 n -0000704940 00000 n -0000702852 00000 n -0000705062 00000 n -0000705188 00000 n -0000705251 00000 n -0000705314 00000 n -0000705377 00000 n -0000705440 00000 n -0000708344 00000 n -0000708095 00000 n -0000705614 00000 n -0000708217 00000 n -0000937342 00000 n -0000713646 00000 n -0000711787 00000 n -0000711173 00000 n -0000708442 00000 n -0000711472 00000 n -0000711599 00000 n -0000711315 00000 n -0000740962 00000 n -0000770209 00000 n -0000713504 00000 n -0000711950 00000 n -0000770018 00000 n -0000769860 00000 n -0000772551 00000 n -0000771850 00000 n -0000770371 00000 n -0000772488 00000 n -0000772008 00000 n -0000772166 00000 n -0000772327 00000 n -0000775372 00000 n -0000774726 00000 n -0000772675 00000 n -0000775184 00000 n -0000774876 00000 n -0000775030 00000 n -0000844961 00000 n -0000780744 00000 n -0000778159 00000 n -0000777847 00000 n -0000775483 00000 n -0000777969 00000 n -0000782312 00000 n -0000780594 00000 n -0000778270 00000 n -0000782122 00000 n -0000782185 00000 n -0000781809 00000 n -0000781966 00000 n -0000937459 00000 n -0000781538 00000 n -0000781669 00000 n -0000781716 00000 n -0000781788 00000 n -0000788654 00000 n -0000785887 00000 n -0000785525 00000 n -0000782465 00000 n -0000785824 00000 n -0000785667 00000 n -0000790565 00000 n -0000788512 00000 n -0000785985 00000 n -0000790311 00000 n -0000790438 00000 n -0000790154 00000 n -0000789803 00000 n -0000789934 00000 n -0000789981 00000 n -0000790053 00000 n -0000790133 00000 n -0000792455 00000 n -0000794898 00000 n -0000792313 00000 n -0000790705 00000 n -0000794645 00000 n -0000794490 00000 n -0000794138 00000 n -0000794269 00000 n -0000794316 00000 n -0000794388 00000 n -0000794468 00000 n -0000798056 00000 n -0000797745 00000 n -0000795025 00000 n -0000797867 00000 n -0000797930 00000 n -0000797993 00000 n -0000801198 00000 n -0000800773 00000 n -0000798154 00000 n -0000801072 00000 n -0000801135 00000 n -0000800915 00000 n -0000803574 00000 n -0000803326 00000 n -0000801296 00000 n -0000803448 00000 n -0000864356 00000 n -0000847123 00000 n -0000864185 00000 n -0000937576 00000 n -0000805891 00000 n -0000807589 00000 n -0000805741 00000 n -0000803698 00000 n -0000807336 00000 n -0000807025 00000 n -0000807180 00000 n -0000806754 00000 n -0000806885 00000 n -0000806932 00000 n -0000807004 00000 n -0000809985 00000 n -0000812026 00000 n -0000809843 00000 n -0000807729 00000 n -0000811900 00000 n -0000811744 00000 n -0000811472 00000 n -0000811603 00000 n -0000811650 00000 n -0000811722 00000 n -0000815368 00000 n -0000815183 00000 n -0000812140 00000 n -0000815305 00000 n -0000819619 00000 n -0000817490 00000 n -0000817243 00000 n -0000815492 00000 n -0000817365 00000 n -0000821807 00000 n -0000819477 00000 n -0000817601 00000 n -0000821554 00000 n -0000821397 00000 n -0000821046 00000 n -0000821177 00000 n -0000821224 00000 n -0000821296 00000 n -0000821376 00000 n -0000824366 00000 n -0000824118 00000 n -0000821947 00000 n -0000824240 00000 n -0000937693 00000 n -0000826614 00000 n -0000826366 00000 n -0000824490 00000 n -0000826488 00000 n -0000826551 00000 n -0000828525 00000 n -0000828340 00000 n -0000826725 00000 n -0000828462 00000 n -0000830574 00000 n -0000830326 00000 n -0000828623 00000 n -0000830448 00000 n -0000830511 00000 n -0000832326 00000 n -0000831826 00000 n -0000830685 00000 n -0000831948 00000 n -0000836846 00000 n -0000835245 00000 n -0000832437 00000 n -0000836657 00000 n -0000835435 00000 n -0000836783 00000 n -0000835607 00000 n -0000835781 00000 n -0000835957 00000 n -0000836131 00000 n -0000836304 00000 n -0000836488 00000 n -0000840726 00000 n -0000838264 00000 n -0000836970 00000 n -0000840663 00000 n -0000838494 00000 n -0000838672 00000 n -0000838855 00000 n -0000839028 00000 n -0000839226 00000 n -0000839397 00000 n -0000839568 00000 n -0000839769 00000 n -0000839945 00000 n -0000840125 00000 n -0000840305 00000 n -0000840481 00000 n -0000937810 00000 n -0000841380 00000 n -0000841132 00000 n -0000840837 00000 n -0000841254 00000 n -0000843872 00000 n -0000842680 00000 n -0000841465 00000 n -0000842802 00000 n -0000842928 00000 n -0000842991 00000 n -0000843054 00000 n -0000843117 00000 n -0000843180 00000 n -0000843243 00000 n -0000843306 00000 n -0000843369 00000 n -0000843432 00000 n -0000843495 00000 n -0000843558 00000 n -0000843621 00000 n -0000843684 00000 n -0000843747 00000 n -0000843810 00000 n -0000845150 00000 n -0000844713 00000 n -0000843957 00000 n -0000844835 00000 n -0000845235 00000 n -0000864841 00000 n -0000867536 00000 n -0000867512 00000 n -0000869934 00000 n -0000869902 00000 n -0000872971 00000 n -0000875600 00000 n -0000875528 00000 n -0000883282 00000 n -0000892269 00000 n -0000904301 00000 n -0000907157 00000 n -0000907028 00000 n -0000921763 00000 n -0000935746 00000 n -0000937911 00000 n -0000938029 00000 n -0000938147 00000 n -0000938224 00000 n -0000938302 00000 n -0000942590 00000 n -0000947397 00000 n -0000947436 00000 n -0000947474 00000 n -0000947626 00000 n +0000784289 00000 n +0000942265 00000 n +0000006841 00000 n +0000006997 00000 n +0000792049 00000 n +0000942186 00000 n +0000007051 00000 n +0000007177 00000 n +0000795468 00000 n +0000942054 00000 n +0000007226 00000 n +0000007327 00000 n +0000795531 00000 n +0000941975 00000 n +0000007381 00000 n +0000007621 00000 n +0000805636 00000 n +0000941896 00000 n +0000007675 00000 n +0000007947 00000 n +0000809409 00000 n +0000941764 00000 n +0000007996 00000 n +0000008324 00000 n +0000809472 00000 n +0000941685 00000 n +0000008378 00000 n +0000008509 00000 n +0000820221 00000 n +0000941606 00000 n +0000008563 00000 n +0000008892 00000 n +0000824447 00000 n +0000941474 00000 n +0000008941 00000 n +0000009042 00000 n +0000824510 00000 n +0000941395 00000 n +0000009096 00000 n +0000009351 00000 n +0000827307 00000 n +0000941302 00000 n +0000009405 00000 n +0000009672 00000 n +0000837357 00000 n +0000941223 00000 n +0000009726 00000 n +0000009938 00000 n +0000837420 00000 n +0000941130 00000 n +0000009987 00000 n +0000010053 00000 n +0000837483 00000 n +0000940998 00000 n +0000010102 00000 n +0000010314 00000 n +0000837546 00000 n +0000940933 00000 n +0000010368 00000 n +0000010530 00000 n +0000837609 00000 n +0000940840 00000 n +0000010579 00000 n +0000010670 00000 n +0000837672 00000 n +0000940761 00000 n +0000010719 00000 n +0000010870 00000 n +0000844287 00000 n +0000940668 00000 n +0000010917 00000 n +0000010998 00000 n +0000845835 00000 n +0000940575 00000 n +0000011046 00000 n +0000011127 00000 n +0000847868 00000 n +0000940496 00000 n +0000011175 00000 n +0000011316 00000 n +0000012274 00000 n +0000012396 00000 n +0000054801 00000 n +0000011368 00000 n +0000054675 00000 n +0000054738 00000 n +0000937413 00000 n +0000924564 00000 n +0000937243 00000 n +0000923275 00000 n +0000909422 00000 n +0000923105 00000 n +0000938509 00000 n +0000056079 00000 n +0000055894 00000 n +0000054922 00000 n +0000056016 00000 n +0000057219 00000 n +0000057034 00000 n +0000056164 00000 n +0000057156 00000 n +0000908889 00000 n +0000907026 00000 n +0000908729 00000 n +0000064068 00000 n +0000059604 00000 n +0000057317 00000 n +0000063942 00000 n +0000064005 00000 n +0000059938 00000 n +0000060093 00000 n +0000060250 00000 n +0000060406 00000 n +0000060561 00000 n +0000060718 00000 n +0000060875 00000 n +0000061032 00000 n +0000061188 00000 n +0000061351 00000 n +0000061514 00000 n +0000061677 00000 n +0000061840 00000 n +0000061996 00000 n +0000062158 00000 n +0000062321 00000 n +0000062484 00000 n +0000062646 00000 n +0000062808 00000 n +0000062971 00000 n +0000063134 00000 n +0000063297 00000 n +0000063459 00000 n +0000063623 00000 n +0000063780 00000 n +0000070259 00000 n +0000066223 00000 n +0000064153 00000 n +0000070196 00000 n +0000905959 00000 n +0000895008 00000 n +0000905784 00000 n +0000066541 00000 n +0000066695 00000 n +0000066852 00000 n +0000067009 00000 n +0000067172 00000 n +0000067334 00000 n +0000067491 00000 n +0000067653 00000 n +0000067816 00000 n +0000067972 00000 n +0000068134 00000 n +0000068297 00000 n +0000068454 00000 n +0000068617 00000 n +0000068780 00000 n +0000068943 00000 n +0000069098 00000 n +0000069255 00000 n +0000069416 00000 n +0000069572 00000 n +0000069729 00000 n +0000069884 00000 n +0000070040 00000 n +0000077514 00000 n +0000072824 00000 n +0000070357 00000 n +0000077388 00000 n +0000077451 00000 n +0000073174 00000 n +0000073328 00000 n +0000073483 00000 n +0000073639 00000 n +0000073795 00000 n +0000073951 00000 n +0000074107 00000 n +0000074263 00000 n +0000074419 00000 n +0000074575 00000 n +0000074731 00000 n +0000074886 00000 n +0000075043 00000 n +0000075200 00000 n +0000075356 00000 n +0000075513 00000 n +0000075669 00000 n +0000075826 00000 n +0000075982 00000 n +0000076139 00000 n +0000076295 00000 n +0000076452 00000 n +0000076607 00000 n +0000076764 00000 n +0000076920 00000 n +0000077076 00000 n +0000077232 00000 n +0000091344 00000 n +0000094586 00000 n +0000109581 00000 n +0000119672 00000 n +0000154567 00000 n +0000154631 00000 n +0000163500 00000 n +0000163564 00000 n +0000175080 00000 n +0000175143 00000 n +0000184152 00000 n +0000189806 00000 n +0000217461 00000 n +0000225177 00000 n +0000254417 00000 n +0000268103 00000 n +0000443275 00000 n +0000443339 00000 n +0000514176 00000 n +0000537245 00000 n +0000564934 00000 n +0000594755 00000 n +0000620201 00000 n +0000650792 00000 n +0000679554 00000 n +0000704326 00000 n +0000741652 00000 n +0000079838 00000 n +0000078492 00000 n +0000077599 00000 n +0000079775 00000 n +0000078682 00000 n +0000078839 00000 n +0000078995 00000 n +0000079151 00000 n +0000079307 00000 n +0000079463 00000 n +0000079619 00000 n +0000938626 00000 n +0000773849 00000 n +0000784352 00000 n +0000792112 00000 n +0000799798 00000 n +0000809535 00000 n +0000813969 00000 n +0000824573 00000 n +0000085214 00000 n +0000081854 00000 n +0000079923 00000 n +0000085088 00000 n +0000085151 00000 n +0000082140 00000 n +0000082294 00000 n +0000082449 00000 n +0000082604 00000 n +0000082759 00000 n +0000082914 00000 n +0000083069 00000 n +0000083224 00000 n +0000083379 00000 n +0000083534 00000 n +0000083690 00000 n +0000083845 00000 n +0000084001 00000 n +0000084157 00000 n +0000084311 00000 n +0000084467 00000 n +0000084622 00000 n +0000084778 00000 n +0000084933 00000 n +0000166634 00000 n +0000233656 00000 n +0000277599 00000 n +0000446275 00000 n +0000446339 00000 n +0000514050 00000 n +0000539674 00000 n +0000567389 00000 n +0000598002 00000 n +0000622036 00000 n +0000652978 00000 n +0000655986 00000 n +0000658093 00000 n +0000704200 00000 n +0000706534 00000 n +0000709691 00000 n +0000711726 00000 n +0000779430 00000 n +0000787828 00000 n +0000087638 00000 n +0000087150 00000 n +0000085312 00000 n +0000087452 00000 n +0000087292 00000 n +0000848057 00000 n +0000089812 00000 n +0000093214 00000 n +0000091534 00000 n +0000089670 00000 n +0000087736 00000 n +0000091156 00000 n +0000091281 00000 n +0000091000 00000 n +0000091408 00000 n +0000091471 00000 n +0000090729 00000 n +0000090860 00000 n +0000090907 00000 n +0000090979 00000 n +0000094650 00000 n +0000093092 00000 n +0000091660 00000 n +0000094460 00000 n +0000094523 00000 n +0000094189 00000 n +0000094320 00000 n +0000094367 00000 n +0000094439 00000 n +0000097106 00000 n +0000096618 00000 n +0000094776 00000 n +0000096917 00000 n +0000096980 00000 n +0000097043 00000 n +0000096760 00000 n +0000098606 00000 n +0000109645 00000 n +0000098448 00000 n +0000097204 00000 n +0000109394 00000 n +0000108927 00000 n +0000109081 00000 n +0000109237 00000 n +0000938743 00000 n +0000111713 00000 n +0000121220 00000 n +0000151674 00000 n +0000119799 00000 n +0000111563 00000 n +0000109779 00000 n +0000119546 00000 n +0000119609 00000 n +0000119232 00000 n +0000119736 00000 n +0000119389 00000 n +0000154695 00000 n +0000121098 00000 n +0000119933 00000 n +0000154504 00000 n +0000156360 00000 n +0000160784 00000 n +0000163628 00000 n +0000156218 00000 n +0000154842 00000 n +0000163374 00000 n +0000163437 00000 n +0000163217 00000 n +0000166761 00000 n +0000166109 00000 n +0000163775 00000 n +0000166571 00000 n +0000166259 00000 n +0000166698 00000 n +0000166415 00000 n +0000168384 00000 n +0000171060 00000 n +0000175207 00000 n +0000168242 00000 n +0000166859 00000 n +0000174954 00000 n +0000175017 00000 n +0000174797 00000 n +0000177358 00000 n +0000186941 00000 n +0000184216 00000 n +0000177200 00000 n +0000175356 00000 n +0000184089 00000 n +0000183619 00000 n +0000183776 00000 n +0000183932 00000 n +0000938860 00000 n +0000191962 00000 n +0000189932 00000 n +0000186783 00000 n +0000184338 00000 n +0000189680 00000 n +0000189743 00000 n +0000189210 00000 n +0000189366 00000 n +0000189523 00000 n +0000217651 00000 n +0000191820 00000 n +0000190067 00000 n +0000217398 00000 n +0000217525 00000 n +0000217240 00000 n +0000217588 00000 n +0000219696 00000 n +0000225304 00000 n +0000219574 00000 n +0000217786 00000 n +0000225114 00000 n +0000225241 00000 n +0000228098 00000 n +0000227725 00000 n +0000225439 00000 n +0000227847 00000 n +0000227972 00000 n +0000228035 00000 n +0000230743 00000 n +0000230432 00000 n +0000228196 00000 n +0000230554 00000 n +0000230617 00000 n +0000230680 00000 n +0000235905 00000 n +0000233907 00000 n +0000233295 00000 n +0000230854 00000 n +0000233593 00000 n +0000233720 00000 n +0000233437 00000 n +0000938977 00000 n +0000256550 00000 n +0000254542 00000 n +0000235763 00000 n +0000234005 00000 n +0000254354 00000 n +0000254196 00000 n +0000268166 00000 n +0000256428 00000 n +0000254690 00000 n +0000268040 00000 n +0000271113 00000 n +0000270866 00000 n +0000268314 00000 n +0000270988 00000 n +0000274466 00000 n +0000274281 00000 n +0000271224 00000 n +0000274403 00000 n +0000894655 00000 n +0000886314 00000 n +0000894477 00000 n +0000885874 00000 n +0000883590 00000 n +0000885714 00000 n +0000277786 00000 n +0000277074 00000 n +0000274603 00000 n +0000277536 00000 n +0000883140 00000 n +0000875850 00000 n +0000882965 00000 n +0000277224 00000 n +0000277381 00000 n +0000278721 00000 n +0000278474 00000 n +0000277897 00000 n +0000278596 00000 n +0000939094 00000 n +0000280361 00000 n +0000311560 00000 n +0000443403 00000 n +0000280211 00000 n +0000278819 00000 n +0000443150 00000 n +0000442838 00000 n +0000442996 00000 n +0000446403 00000 n +0000445749 00000 n +0000443552 00000 n +0000446212 00000 n +0000445899 00000 n +0000446055 00000 n +0000448500 00000 n +0000514240 00000 n +0000448378 00000 n +0000446501 00000 n +0000513987 00000 n +0000515736 00000 n +0000515209 00000 n +0000514375 00000 n +0000515673 00000 n +0000515359 00000 n +0000515517 00000 n +0000518470 00000 n +0000537308 00000 n +0000518312 00000 n +0000515821 00000 n +0000537120 00000 n +0000536651 00000 n +0000875581 00000 n +0000872865 00000 n +0000875408 00000 n +0000872516 00000 n +0000870461 00000 n +0000872355 00000 n +0000536808 00000 n +0000536965 00000 n +0000539800 00000 n +0000539489 00000 n +0000537508 00000 n +0000539611 00000 n +0000539737 00000 n +0000939211 00000 n +0000542595 00000 n +0000564998 00000 n +0000542429 00000 n +0000539924 00000 n +0000564809 00000 n +0000564182 00000 n +0000564343 00000 n +0000564499 00000 n +0000564653 00000 n +0000847994 00000 n +0000567453 00000 n +0000567027 00000 n +0000565198 00000 n +0000567326 00000 n +0000567169 00000 n +0000570064 00000 n +0000594819 00000 n +0000569942 00000 n +0000567564 00000 n +0000594630 00000 n +0000870132 00000 n +0000868024 00000 n +0000869963 00000 n +0000598129 00000 n +0000597475 00000 n +0000595032 00000 n +0000597939 00000 n +0000597625 00000 n +0000597783 00000 n +0000598066 00000 n +0000600417 00000 n +0000620328 00000 n +0000600267 00000 n +0000598253 00000 n +0000620076 00000 n +0000619761 00000 n +0000619919 00000 n +0000620265 00000 n +0000622100 00000 n +0000621851 00000 n +0000620463 00000 n +0000621973 00000 n +0000939328 00000 n +0000624612 00000 n +0000650856 00000 n +0000624446 00000 n +0000622211 00000 n +0000650667 00000 n +0000650044 00000 n +0000650200 00000 n +0000650355 00000 n +0000650511 00000 n +0000653104 00000 n +0000652793 00000 n +0000650991 00000 n +0000652915 00000 n +0000653042 00000 n +0000656050 00000 n +0000655801 00000 n +0000653215 00000 n +0000655923 00000 n +0000658157 00000 n +0000657908 00000 n +0000656148 00000 n +0000658030 00000 n +0000660263 00000 n +0000679618 00000 n +0000660113 00000 n +0000658255 00000 n +0000679429 00000 n +0000679114 00000 n +0000679272 00000 n +0000682233 00000 n +0000704390 00000 n +0000682067 00000 n +0000679753 00000 n +0000704137 00000 n +0000703509 00000 n +0000703667 00000 n +0000703824 00000 n +0000703980 00000 n +0000939445 00000 n +0000706912 00000 n +0000706349 00000 n +0000704525 00000 n +0000706471 00000 n +0000706597 00000 n +0000706660 00000 n +0000706723 00000 n +0000706786 00000 n +0000706849 00000 n +0000709755 00000 n +0000709506 00000 n +0000707023 00000 n +0000709628 00000 n +0000711853 00000 n +0000711541 00000 n +0000709853 00000 n +0000711663 00000 n +0000711790 00000 n +0000713991 00000 n +0000744250 00000 n +0000741716 00000 n +0000713849 00000 n +0000711964 00000 n +0000741464 00000 n +0000741307 00000 n +0000773913 00000 n +0000744084 00000 n +0000741903 00000 n +0000773786 00000 n +0000773148 00000 n +0000773306 00000 n +0000773464 00000 n +0000773625 00000 n +0000776771 00000 n +0000776125 00000 n +0000774074 00000 n +0000776583 00000 n +0000776275 00000 n +0000776429 00000 n +0000939562 00000 n +0000847931 00000 n +0000779557 00000 n +0000779245 00000 n +0000776882 00000 n +0000779367 00000 n +0000782536 00000 n +0000784415 00000 n +0000782370 00000 n +0000779668 00000 n +0000784226 00000 n +0000783601 00000 n +0000783757 00000 n +0000783914 00000 n +0000784070 00000 n +0000783330 00000 n +0000783461 00000 n +0000783508 00000 n +0000783580 00000 n +0000787892 00000 n +0000787643 00000 n +0000784555 00000 n +0000787765 00000 n +0000790329 00000 n +0000792176 00000 n +0000790187 00000 n +0000788003 00000 n +0000791986 00000 n +0000791829 00000 n +0000791478 00000 n +0000791609 00000 n +0000791656 00000 n +0000791728 00000 n +0000791808 00000 n +0000797700 00000 n +0000795657 00000 n +0000794944 00000 n +0000792303 00000 n +0000795405 00000 n +0000795094 00000 n +0000795249 00000 n +0000795594 00000 n +0000799925 00000 n +0000797578 00000 n +0000795768 00000 n +0000799735 00000 n +0000799862 00000 n +0000939679 00000 n +0000799383 00000 n +0000799514 00000 n +0000799561 00000 n +0000799633 00000 n +0000799713 00000 n +0000803101 00000 n +0000802676 00000 n +0000800052 00000 n +0000802975 00000 n +0000803038 00000 n +0000802818 00000 n +0000805699 00000 n +0000805451 00000 n +0000803199 00000 n +0000805573 00000 n +0000867193 00000 n +0000850093 00000 n +0000867022 00000 n +0000807900 00000 n +0000809599 00000 n +0000807750 00000 n +0000805823 00000 n +0000809346 00000 n +0000809034 00000 n +0000809190 00000 n +0000808763 00000 n +0000808894 00000 n +0000808941 00000 n +0000809013 00000 n +0000811992 00000 n +0000814032 00000 n +0000811850 00000 n +0000809739 00000 n +0000813906 00000 n +0000813751 00000 n +0000813479 00000 n +0000813610 00000 n +0000813657 00000 n +0000813729 00000 n +0000817445 00000 n +0000817260 00000 n +0000814146 00000 n +0000817382 00000 n +0000820284 00000 n +0000820036 00000 n +0000817595 00000 n +0000820158 00000 n +0000939796 00000 n +0000822449 00000 n +0000824637 00000 n +0000822307 00000 n +0000820395 00000 n +0000824384 00000 n +0000824227 00000 n +0000823876 00000 n +0000824007 00000 n +0000824054 00000 n +0000824126 00000 n +0000824206 00000 n +0000827369 00000 n +0000827122 00000 n +0000824777 00000 n +0000827244 00000 n +0000829444 00000 n +0000829196 00000 n +0000827493 00000 n +0000829318 00000 n +0000829381 00000 n +0000831528 00000 n +0000831343 00000 n +0000829555 00000 n +0000831465 00000 n +0000833484 00000 n +0000833236 00000 n +0000831626 00000 n +0000833358 00000 n +0000833421 00000 n +0000834665 00000 n +0000834480 00000 n +0000833595 00000 n +0000834602 00000 n +0000939913 00000 n +0000837735 00000 n +0000836979 00000 n +0000834763 00000 n +0000837294 00000 n +0000837121 00000 n +0000843683 00000 n +0000840057 00000 n +0000837846 00000 n +0000843557 00000 n +0000843620 00000 n +0000840335 00000 n +0000840509 00000 n +0000840686 00000 n +0000840860 00000 n +0000841033 00000 n +0000841217 00000 n +0000841386 00000 n +0000841563 00000 n +0000841747 00000 n +0000841920 00000 n +0000842118 00000 n +0000842289 00000 n +0000842460 00000 n +0000842661 00000 n +0000842837 00000 n +0000843017 00000 n +0000843197 00000 n +0000843375 00000 n +0000844350 00000 n +0000844102 00000 n +0000843807 00000 n +0000844224 00000 n +0000846842 00000 n +0000845650 00000 n +0000844435 00000 n +0000845772 00000 n +0000845898 00000 n +0000845961 00000 n +0000846024 00000 n +0000846087 00000 n +0000846150 00000 n +0000846213 00000 n +0000846276 00000 n +0000846339 00000 n +0000846402 00000 n +0000846465 00000 n +0000846528 00000 n +0000846591 00000 n +0000846654 00000 n +0000846717 00000 n +0000846780 00000 n +0000848120 00000 n +0000847683 00000 n +0000846927 00000 n +0000847805 00000 n +0000848205 00000 n +0000867676 00000 n +0000870369 00000 n +0000870345 00000 n +0000872767 00000 n +0000872735 00000 n +0000875804 00000 n +0000883392 00000 n +0000886174 00000 n +0000886102 00000 n +0000894906 00000 n +0000906476 00000 n +0000909260 00000 n +0000909131 00000 n +0000923866 00000 n +0000937849 00000 n +0000940030 00000 n +0000940148 00000 n +0000940266 00000 n +0000940343 00000 n +0000940421 00000 n +0000944906 00000 n +0000949738 00000 n +0000949777 00000 n +0000949815 00000 n +0000949967 00000 n trailer << -/Size 943 -/Root 941 0 R -/Info 942 0 R -/ID [ ] +/Size 953 +/Root 951 0 R +/Info 952 0 R +/ID [ ] >> startxref -947893 +950234 %%EOF diff --git a/LaTeX/diplomarbeit.tex b/LaTeX/diplomarbeit.tex index 808fbe4..22c2a8c 100644 --- a/LaTeX/diplomarbeit.tex +++ b/LaTeX/diplomarbeit.tex @@ -35,7 +35,7 @@ \input{chapters/titlepage} \input{chapters/introduction} \input{chapters/simulator} -\input{chapters/entwicklung} +\input{chapters/implementierung} \input{chapters/conclusion} \appendix diff --git a/ROADMAP b/ROADMAP index 7e49b8d..0904cee 100644 --- a/ROADMAP +++ b/ROADMAP @@ -1,7 +1,6 @@ Must do: pakete serialize, simulator, utils beschreiben ausblick schreiben - paket-privat vs paket-global vs paket-lokal? Warn if a file does not exists while trying to open! Literaturangaben komplettieren UML for wrapping ..process(prioqueue(vstask(messagereceive(message)))) diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java index bfbcd1d..f222824 100644 --- a/sources/prefs/VSDefaultPrefs.java +++ b/sources/prefs/VSDefaultPrefs.java @@ -268,6 +268,7 @@ public class VSDefaultPrefs extends VSPrefs { initBoolean("sim.mode.expert", false, "Expertenmodus aktivieren"); initBoolean("sim.message.own.recv", false, "Prozesse empfangen eigene Nachrichten"); initBoolean("sim.message.prob.mean", true, "Mittelwerte der Nachrichtverlustw'k. bilden"); + initBoolean("sim.message.sendingtime.mean", true, "Mittelwerte der bertragungszeiten bilden"); initBoolean("sim.messages.relevant", true, "Nur relevante Nachrichten anzeigen"); initBoolean("sim.periodic", false, "Simulation periodisch wiederholen"); initBoolean("sim.update.lamporttime.all", false, "Lamportzeiten betreffen alle Ereignisse"); diff --git a/sources/simulator/VSSimulatorCanvas.java b/sources/simulator/VSSimulatorCanvas.java index baf4b3e..d5506ba 100644 --- a/sources/simulator/VSSimulatorCanvas.java +++ b/sources/simulator/VSSimulatorCanvas.java @@ -1483,6 +1483,12 @@ public class VSSimulatorCanvas extends Canvas } else { durationTime = sendingProcess.getDurationTime(); + + if (prefs.getBoolean("sim.message.sendingtime.mean")) { + durationTime += receiverProcess.getDurationTime(); + durationTime /= 2; + } + deliverTime = sendingProcess.getGlobalTime() + durationTime; -- cgit v1.2.3