diff options
| author | Paul Buetow <paul@buetow.org> | 2008-08-10 21:43:31 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-08-10 21:43:31 +0000 |
| commit | 4c9cf79770dddfe2b2e7d25ffa61b0116568eadf (patch) | |
| tree | 3d18fc26854ad41d936677aa7f9bf1dd72a87e94 | |
| parent | 49766c20b9c73278fdf2b0078dc57cfb407f8e98 (diff) | |
spell checking
| -rw-r--r-- | LaTeX/chapters/conclusion.tex | 22 | ||||
| -rw-r--r-- | LaTeX/chapters/implementierung.tex | 328 | ||||
| -rw-r--r-- | LaTeX/chapters/introduction.tex | 31 | ||||
| -rw-r--r-- | LaTeX/chapters/simulator.tex | 276 | ||||
| -rw-r--r-- | LaTeX/diplomarbeit.pdf | 3277 | ||||
| -rw-r--r-- | ROADMAP | 2 | ||||
| -rw-r--r-- | sources/prefs/VSDefaultPrefs.java | 3 | ||||
| -rw-r--r-- | sources/protocols/implementations/VSOnePhaseCommitProtocol.java | 2 | ||||
| -rw-r--r-- | sources/protocols/implementations/VSReliableMulticastProtocol.java | 2 | ||||
| -rw-r--r-- | sources/protocols/implementations/VSTwoPhaseCommitProtocol.java | 2 |
10 files changed, 1990 insertions, 1955 deletions
diff --git a/LaTeX/chapters/conclusion.tex b/LaTeX/chapters/conclusion.tex index c607e3e..65d719c 100644 --- a/LaTeX/chapters/conclusion.tex +++ b/LaTeX/chapters/conclusion.tex @@ -1,21 +1,21 @@ \chapter{Ausblick}
-Es wurde erfolgreich ein Simulator f\"{u}r die Simulation verteilter Systeme entwickelt. Der Simulatur hat bereits 10 implementierte Protokolle zur Auswahl eingebaut. Zudem steht dem Gebraucher ein sehr komfortables Protokoll-API zur Verf\"{u}gung, womit der Entwicklung neuer Protokolle quasi keine Grenzen gesetzt sind.
+Es wurde erfolgreich ein Simulator für die Simulation verteilter Systeme entwickelt. Der Simulator hat bereits 10 implementierte Protokolle zur Auswahl eingebaut. Zudem steht dem Gebraucher ein sehr komfortables Protokoll-API zur Verfügung, womit der Entwicklung neuer Protokolle quasi keine Grenzen gesetzt sind.
-Dar\"{u}ber hinaus verf\"{u}gt der Simulator \"{u}ber eine Vielzahl von sehr flexiblen Einstellungsm\"{o}glichkeiten. F\"{u}r jede Simulation lassen sich somit komplett andere Konfigurationen verwenden. Jeder beteiligte Prozess hat wiederum eigene lokale Einstellungen, wo sich auch jedes Protokoll f\"{u}r jeden Prozess separat einstellen l\"{a}ßt. Die Anzahl und Flexibilit\"{a}t der M\"{o}glichen Szenarien wird dadurch um einen sehr großen Faktor erweiert.
+Darüber hinaus verfügt der Simulator über eine Vielzahl von sehr flexiblen Einstellungsmöglichkeiten. Für jede Simulation lassen sich somit komplett andere Konfigurationen verwenden. Jeder beteiligte Prozess hat wiederum eigene lokale Einstellungen, wo sich auch jedes Protokoll für jeden Prozess separat einstellen läßt. Die Anzahl und Flexibilität der Möglichen Szenarien wird dadurch um einen sehr großen Faktor erweitert.
-Mit dem Ereigniseditor gibt es eine komfortable M\"{o}glichkeit eigene Szenarien zu programmieren um sie anschließend zu Simulieren. Hierbei kann entweder auf die bereits enthaltenen Protokolle- oder auf selbst implementierte Protokolle zugegriffen werden. Alle Dazugeh\"{o}rigen Einstellungen und programmierten Ereignisse lassen sich vom Gebraucher f\"{u}r eine sp\"{a}tere Wiederverwendung platformunabh\"{a}ngig abspeichern. Somit k\"{o}nnen auch abgespeicherte Szenarien beispielsweise an Komilitonen weitergegeben werden oder f\"{u}r eine sp\"{a}tere Pr\"{a}sentierung zwischengespeichert werden. Mit dem Loggfilter lassen sich mithilfe von regul\"{a}ren Ausdr\"{u}cken nur die relevanten Loggnachrichten anzeigen, was die Analyse einer Simulation erheblich vereinfacht. Weitere Funktionalit\"{a}ten wie Lamport- und Vektor-Zeitstempel sowie Anti-Aliasing runden den Simulator ab.
+Mit dem Ereigniseditor gibt es eine komfortable Möglichkeit eigene Szenarien zu programmieren um sie anschließend zu Simulieren. Hierbei kann entweder auf die bereits enthaltenen Protokolle- oder auf selbst implementierte Protokolle zugegriffen werden. Alle Dazugehörigen Einstellungen und programmierten Ereignisse lassen sich vom Gebraucher für eine spätere Wiederverwendung plattformunabhängig abspeichern. Somit können auch abgespeicherte Szenarien beispielsweise an Kommilitonen weitergegeben werden oder für eine spätere Präsentierung zwischengespeichert werden. Mit dem Loggfilter lassen sich mithilfe von regulären Ausdrücken nur die relevanten Loggnachrichten anzeigen, was die Analyse einer Simulation erheblich vereinfacht. Weitere Funktionalitäten wie Lamport- und Vektor-Zeitstempel sowie Anti-Aliasing runden den Simulator ab.
-Durch den objektorientierten Aufbau ist der Simulator relativ einfach erweiterbar, was nicht nur das Protokoll-API betrifft. H\"{a}tte f\"{u}r diese Diplomarbeit noch mehr Zeit zur Verf\"{u}gung gestanden, dann k\"{o}nnten einige der folgenden Funktionen (hier in alphanumerisch sortierten Reihenfolge aufgelistet) auch eingebaut worden sein:
+Durch den objektorientierten Aufbau ist der Simulator relativ einfach erweiterbar, was nicht nur das Protokoll-API betrifft. Hätte für diese Diplomarbeit noch mehr Zeit zur Verfügung gestanden, dann könnten einige der folgenden Funktionen (hier in alphanumerisch sortierten Reihenfolge aufgelistet) auch eingebaut worden sein:
\begin{itemize}
\setlength{\itemsep}{-2mm}
- \item Die Simulationsdauer beliebig lang machen k\"{o}nnen. Dazu m\"{u}sste \textit{VSSimulatorVisualisation} entlang der Zeitachse scrollbar gemacht werden, sodass der Benutzer f\"{u}r eine nachtr\"{a}gliche Betrachtung des Simulationsverlaufes zu jeder beliebigen Position zur\"{u}ckspringen kann.
- \item Eine Zoomfunktion f\"{u}r die Simulationsvisualisierung einbauen.
- \item Im Ereigniseditor selbst auch periodische Ereignisse programmierbar machen. Bisher kann nur jedes Ereignis separat programmiert werden oder auf Protokoll-Interne Wecker zur\"{u}ckgegriffen werden.
- \item Lamport- und Vektor-Zeitstempel als Ereigniseintrittskriterien verwenden k\"{o}nnen.
- \item Weitere Funktionalit\"{a}ten einbauen wie zum Beispiel das Anklicken einer Nachrichtenlinie, was zu einer Nachicht alle verf\"{u}gbaren Informationen anzeigt und diese gegebenenfalls vom Benutzer editiert werden k\"{o}nnen.
- \item Tiefere Schichten des OSI-Referenzmodells simulieren k\"{o}nnen, wie zum Beispiel TCP, UDP, IP, ...
+ \item Die Simulationsdauer beliebig lang machen können. Dazu müsste \textit{VSSimulatorVisualisation} entlang der Zeitachse scrollbar gemacht werden, sodass der Benutzer für eine nachträgliche Betrachtung des Simulationsverlaufes zu jeder beliebigen Position zurückspringen kann.
+ \item Eine Zoomfunktion für die Simulationsvisualisierung einbauen.
+ \item Im Ereigniseditor selbst auch periodische Ereignisse programmierbar machen. Bisher kann nur jedes Ereignis separat programmiert werden oder auf Protokoll-Interne Wecker zurückgegriffen werden.
+ \item Lamport- und Vektor-Zeitstempel als Ereigniseintrittskriterien verwenden können.
+ \item Weitere Funktionalitäten einbauen wie zum Beispiel das Anklicken einer Nachrichtenlinie, was zu einer Nachricht alle verfügbaren Informationen anzeigt und diese gegebenenfalls vom Benutzer editiert werden können.
+ \item Tiefere Schichten des OSI-Referenzmodells simulieren können, wie zum Beispiel TCP, UDP, IP, ...
\end{itemize}
-Da der Simulator h\"{o}chstwahrscheinlich unter einer Open Source Lizenz freigegeben wird, und ich mich selbst sehr f\"{u}r die Entwicklung und Anwendung von Open Source Software interessiere, werden die einen oder anderen Funktionen nachtr\"{a}glich eingebaut werden. Komilitonen werden auch herzlich dazu eingeladen sein sich an diesem Software-Projekt zu beteiligen. Als Vorbild sei hier der CPU-Simulator M32, der von Prof. Oßmann an der Fachhochschule Aachen entwickelt wurde, genannt. Hier existieren bereits einige Erweiterungen und Verbesserungen der Ursprungsversion, die von den Studenten angefertigt wurden. F\"{u}r die Entwicklung/Erweiterung wurde keine properit\"{a}re Software verwendet, sodass jeder kostenlosen Zugriff auf die dazugeh\"{o}rigen Tools h\"{a}tte.
+Da der Simulator höchstwahrscheinlich unter einer Open Source Lizenz freigegeben wird, und ich mich selbst sehr für die Entwicklung und Anwendung von Open Source Software interessiere, werden die einen oder anderen Funktionen nachträglich eingebaut werden. Kommilitonen werden auch herzlich dazu eingeladen sein sich an diesem Software-Projekt zu beteiligen. Als Vorbild sei hier der CPU-Simulator M32, der von Prof. Oßmann an der Fachhochschule Aachen entwickelt wurde, genannt. Hier existieren bereits einige Erweiterungen und Verbesserungen der Ursprungsversion, die von den Studenten angefertigt wurden. Für die Entwicklung/Erweiterung wurde keine proprietäre Software verwendet, sodass jeder kostenlosen Zugriff auf die dazugehörigen Tools hätte.
diff --git a/LaTeX/chapters/implementierung.tex b/LaTeX/chapters/implementierung.tex index 9b4379e..8d281ce 100644 --- a/LaTeX/chapters/implementierung.tex +++ b/LaTeX/chapters/implementierung.tex @@ -1,24 +1,24 @@ \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.
+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ür die gestellte Aufgabe die geeignetste Programmiersprache ist. Der Simulator ist somit auf jeder Plattform verfügbar, für die es die JRE (Java Runtime Environment) gibt und erstreckt sich somit über alle gängigen Betriebssysteme. Da an der Fachhochschule Aachen auch Java gelehrt wird, sollten hier die meisten Studenten auch eigene Erweiterungen, wie eigene Protokolle, entwerfen kö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{core} & Klassen für Prozesse und Nachrichten\\
+ \textit{core.time} & Klassen für Zeitformate\\
+ \textit{events} & Basisklassen fü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{exceptions} & Klassen für Fehlerbehandlungen\\
+ \textit{prefs} & Klassen für die Einstellungen\\
+ \textit{prefs.editors} & Klassen für die Editoren\\
+ \textit{protocols} & Basisklassen fü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{serialize} & Helferklassen für die Serialisierung von Simulationen\\
+ \textit{simulator} & Klassen für die GUI und die Visualisierung\\
\textit{utils} & Diverse Helferklassen\\
\end{tabular}
}
@@ -26,15 +26,15 @@ In diesem Kapitel wird auf die Implementierung des Simulators eingegangen. Der S \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, einschließlich Kommentare, auf \"{u}ber 15.000 Zeilen und \"{u}ber 61 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.
+Da es sonst den Rahmen sprengen würde, soll im Folgenden der komplette Quelltext nicht bis in das letzte Detail behandelt werden. Der Quelltext erstreckt sich nämlich, einschließlich Kommentare, auf über 15.000 Zeilen und über 61 Dateien. Zudem ist die generierte Quelltext-Dokumentation (Javadoc) über 2MB groß. Alle folgenden UML-Diagramme stellen aufgrund der Übersichtlichkeit lediglich die wesentlichen Dinge dar. Alle Details lassen sich im Quelltext und der dazugehörigen Dokumentation einsehen. Die Paketstruktur des Quelltextes ist in Tabelle \ref{tb:Pakete} in alphanumerischer Reihenfolge aufgeführt.
\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.
+Eine Simulation ist von einer Vielzahl von Einstellungen abhängig. Da auf diese Einstellungen in den weiteren Teilkapitel stets zurückgegriffen wird, macht es Sinn die dazugehö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 Ereignisobjekt f\"{u}r lokale Einstellungen seine eigene Instanz von \textit{VSPrefs}. Sp\"{a}ter wird noch erkl\"{a}rt, dass Protokollobjekte auch als Ereignisse eingesetzt werden. Somit k\"{o}nnen Protokolleinstellungen auch in ein \textit{VSPrefs}-Objekt abgespeichert werden. Selbst Nachrichtenobjekte besitzt hiervon eine eigene Instanz, wobei hier die zu verschickenden Daten abgelegt werden k\"{o}nnen.
+Auf Abbildung \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ür eine spätere Verwendung dynamisch ablegen und stellt somit einen Container für diese Daten dar. In einem \textit{VSPrefs}-Objekt speichert der Simulator alle seine Einstellungen ab. Zudem besitzt jedes Prozessobjekt und jedes Ereignisobjekt für lokale Einstellungen seine eigene Instanz von \textit{VSPrefs}. Später wird noch erklärt, dass Protokollobjekte auch als Ereignisse eingesetzt werden. Somit können Protokolleinstellungen auch in ein \textit{VSPrefs}-Objekt abgespeichert werden. Selbst Nachrichtenobjekte besitzt hiervon eine eigene Instanz, wobei hier die zu verschickenden Daten abgelegt werden können.
\begin{figure}[h]
\centering
@@ -43,11 +43,11 @@ Auf Abbilung \ref{fig:PackagePrefs} ist der Aufbau des Pakets \textit{prefs} zu \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.
+Jede Variable besteht aus einen Datentypen, einen Variablennamen und einer optionalen Beschreibung sowie einen Wert. Einige Datentypen unterstützen auch die Angabe von Minimal- und Maximalwerten (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öchte, kann fü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 einer Variable der Datentyp und der Variablenname verwendet. Variablennamen verwenden die auf Tabelle \ref{tb:VariablenPrefixe} angegebenen Prefixkonventionen. Alle verf\"{u}gbaren Typen wurden bereits in Tabelle \ref{tb:VariablenDatentypen} aufgelistet. \textit{VSPrefs} stellt f\"{u}r alle Variablentypen entsprechende Zugriffsmethoden zur Verf\"{u}gung.
+Eine Variablenbeschreibung wird für die Darstellung im GUI verwendet, während der Variablenname eher fü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ür eine Variable keine Beschreibung existiert so wird, wie auf Abbildung \ref{fig:SimulationseinstellungenExperten} anhand der Farbvariablen schon gesehen wurde, für die Anzeige einer Variable der Datentyp und der Variablenname verwendet. Variablennamen verwenden die auf Tabelle \ref{tb:VariablenPrefixe} angegebenen Prefixkonventionen. Alle verfügbaren Typen wurden bereits in Tabelle \ref{tb:VariablenDatentypen} aufgelistet. \textit{VSPrefs} stellt für alle Variablentypen entsprechende Zugriffsmethoden zur Verfügung.
-Im Folgenden werden nicht alle exisierenden Methoden aufgelistet, da diese auch in der Quelltext-Dokumentation 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:
+Im Folgenden werden nicht alle existierenden Methoden aufgelistet, da diese auch in der Quelltext-Dokumentation eingesehen werden können. Die Methoden werden nun nur anhand des Integer-Datentyps verdeutlicht. Für alle anderen Typen gilt fast alles analog. Für Integer stehen in \textit{VSPrefs} folgende Methoden zur Verfügung:
\begin{itemize}
\setlength{\itemsep}{-2mm}
@@ -73,34 +73,34 @@ Im Folgenden werden nicht alle exisierenden Methoden aufgelistet, da diese auch \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{keyevent} & Variablen, die Tastaturkü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}}
+ \caption{Konventionen für Variablennamen-Präfixe 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 (f\"{u}r eine sp\"{a}tere Serialisierung, mehr dazu aber sp\"{a}ter) und macht somit keinen großen Unterschied. Die Methode \textit{getIntegerKeySet} gibt alle vorhandenen Integer-Variablennamen (\textit{key}s) als \textit{Set} zur\"{u}ck.
+Hierbei stellt \textit{key} den Variablennamen- und \textit{val} den Variablenwert dar. \textit{descr} ist eine optionale Variablenbeschreibung. Es kö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 (für eine spätere Serialisierung, mehr dazu aber später) und macht somit keinen großen Unterschied. Die Methode \textit{getIntegerKeySet} gibt alle vorhandenen Integer-Variablennamen (\textit{key}s) als \textit{Set} zurü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} 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 Übersicht aller Methoden (auch für andere Datentypen) gibt es in der Quelltext-Dokumentation.
-\textit{VSPrefs} speichert alle Integervariablen in einem \textit{HashMap<String,Integer>}-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.
+\textit{VSPrefs} speichert alle Integervariablen in einem \textit{HashMap<String,Integer>}-Objekt ab, wobei der String-Wert den Variablennamen \textit{key} angibt. Für die Beschreibung \textit{descr}, den Einheiten-String \textit{unit} sowie möglichen Minimal- und Maximalwerte werden separate Instanzen von \textit{HashMap} verwendet. Da alle \textit{HashMap}-Objekte synchronisiert sind, können alle Methoden von verschiednenen Threads gleichzeitig verwendet werden.
-\textit{VSSerializablePrefs} implementiert das Interface \textit{VSSerializable} und kann somit alle enthaltenen Daten in eine Datei abspeichern beziehungsweiseladen. Auf die Serialisierung und Deserialisierung von Simulationen wird sp\"{a}ter genauer eingegangen.
+\textit{VSSerializablePrefs} implementiert das Interface \textit{VSSerializable} und kann somit alle enthaltenen Daten in eine Datei abspeichern beziehungsweise laden. Auf die Serialisierung und Deserialisierung von Simulationen wird später genauer eingegangen.
-Die Klasse \textit{VSDefaultPrefs} erweitert \textit{VSSerializablePrefs} 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.
+Die Klasse \textit{VSDefaultPrefs} erweitert \textit{VSSerializablePrefs} und initialisiert bei Instantiierung automatisch alle verfügbaren Simulationsvariablen mit ihren Standardwerten. Dort sind auch alle Spracheinstellungen abgelegt. Sollte jemand den Simulator in eine andere Sprache, zum Beispiel ins Englische, übersetzen wollen, so muß er lediglich diese Datei und die Protokoll-Klassen (mehr dazu später) editieren. Die Spracheinstellungen sind nämlich in einem \textit{VSPrefs}--Objekt als versteckte String-Variablen abgespeichert. Spracheinstellungen für Protokolle wurden in den Protokollklassen direkt angegeben, da dies mehr Komfort für den Protokollentwickler bietet und für jede neue Textausgabe nicht ständig \textit{VSDefaultPrefs.java} editiert werden muss.
Alle Variablen die als Prefix \textit{lang}, \textit{keyevent}, \textit{div} oder \textit{col} im Namen 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}
-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.
+Wie Variablen intern abgespeichert werden ist bereits bekannt. Für das Editieren der Variablen werden Editor-Objekte verwendet. Auf Abbildung \ref{fig:PackagePrefsEditors} ist die Klassenstruktur des dazugehö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 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 Basis eines Editors stellt die abstrakte Klasse \textit{VSAbstractEditor} dar, dem ein \textit{VSPrefs} Objekt zum Editieren übergeben wird. Ein Editor stellt alle verfügbaren nicht-versteckten Variablen des \textit{VSPrefs}-Objektes im GUI dar und bietet gleichzeitig die Möglichkeit alle Variablen darüber zu editieren an. Für das Editieren von Farbwerten wird auf \textit{VSColorChooser} zurückgegriffen. Die Klasse \textit{VSEditorTable} ist für das \textit{JTable}-Objekt aus Java's Swing-Bibliothek zuständig, welches bei der graphischen Darstellung aller Variablen eingesetzt wird. Die abstrakte Klasse \textit{VSAbstractBetterEditor} wurde, wegen der Übersicht, als Zwischenschritt eingefügt.
\begin{figure}[h]
\centering
@@ -109,13 +109,13 @@ Die Basis eines Editors stellt die abstrakte Klasse \textit{VSAbstractEditor} da \label{fig:PackagePrefsEditors}
\end{figure}
-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. Auf Abbildung \ref{fig:NeueSimulationVariablen} wurde hingegen ein Prozesseditor in der Sidebar ge\"{o}ffnet. 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 und bieten dem Benutzer so eine bessere \"{U}bersicht.
+Die Klasse \textit{VSSimulatorEditor} dient für das Editieren der globalen Simulationseinstellungen und \textit{VSProcessEditor} für das Editieren der Prozesseinstellungen sowie der dazugehörigen Protokollvariablen. Da diese beiden Klassen von \textit{VSAbstractBetterEditor} erben, können sie mithilfe von \textit{VSEditorFrame} in einem separaten Fenster angezeigt werden. Alternativ kö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. Auf Abbildung \ref{fig:NeueSimulationVariablen} wurde hingegen ein Prozesseditor in der Sidebar geöffnet. Für Protokolle gibt es keine separate Editor-Klasse, da sie bereits vom Prozesseditor aus editiert werden können. Dabei iteriert der Prozesseditor über alle für den jeweiligen Prozess verfügbaren Protokollobjekte und fügt deren Variablen zusätzlich in den Prozesseditor ein. Somit erscheinen die Prozess- und die dazugehörigen Protokollvariablen im selben Editor und bieten dem Benutzer so eine bessere Übersicht.
\section{Ereignisse}
\subsection{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 dem Task-Manager \"{u}bergeben. Auf den Task-Manager wird sp\"{a}ter noch genauer eingegangen.
+Für jedes Ereignis existiert eine dazugehörige Klasse, welche die auszuführenden Aktionen implementiert. Eine Instanz davon wird für eine spätere Ausführung dem Task-Manager übergeben. Auf den Task-Manager wird später noch genauer eingegangen.
\begin{figure}[h]
\centering
\includegraphics[width=13.5cm]{images/events}
@@ -123,58 +123,58 @@ F\"{u}r jedes Ereignis existiert eine dazugeh\"{o}rige Klasse, welche die auszuf \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 Ereignisklassen des Simulators bei Laufzeit 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 neu kompiliert werden.
+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ügbaren Ereignisklassen des Simulators bei Laufzeit nicht ändert, gibt es keine Instanzen von \textit{VSRegisteredEvents}. Alle Methoden und Klassenattribute sind hier statisch. Wenn beispielsweise eigene Ereignisse implementiert werden, dann müssen alle neuen Ereignisse per Hand in die Datei \textit{VSRegisteredEvents.java} übernommen- und der Simulator neu kompiliert werden.
In der Implementierung wird zwischen drei Haupttypen von Ereignissen unterschieden, die jeweils in verschiedenen Paketen liegen (Abbildung \ref{fig:PackageEvents}):
\begin{enumerate}
- \item \textit{events.implementations}: In diesem Paket befinden sich alle Ereignisse, die ohne weitere Spezialbehanldung vom Simulator eingesetzt werden k\"{o}nnen und vom Benutzer direkt im Ereigniseditor programmierbar sind.
+ \item \textit{events.implementations}: In diesem Paket befinden sich alle Ereignisse, die ohne weitere Spezialbehandlung vom Simulator eingesetzt werden kö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.
+ \item \textit{VSProcessCrashEvent}: Dieses Ereignis lässt den dazugehörigen Prozess abstürzen.
+ \item \textit{VSProcessRecoverEvent}: Dieses Ereignis lässt den dazugehörigen Prozess wiederbeleben.
\end{itemize}
- \item \textit{events.internal}: In diesem Paket befinden sich alle Ereignisse, die vom Simulator intern verwendet werden. Bevor der Simulator von diesen Ereignissen gebrauch machen kann, muss er vorher einige Spezialbehandlungen durchf\"{u}hren.
+ \item \textit{events.internal}: In diesem Paket befinden sich alle Ereignisse, die vom Simulator intern verwendet werden. Bevor der Simulator von diesen Ereignissen Gebrauch machen kann, muss er vorher einige Spezialbehandlungen durchführen.
\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.
+ \item \textit{VSAbstractInternalEvent}: Diese Klasse stellt weitere Methoden zur Verfügung, die von allen internen Ereignissen benötigt werden. Derzeit betrifft dies nur Methoden zur Serialisierung der gegebenen Objekte. Auf die Serialisierung (Abspeichern/Laden) von Simulationen wird später noch genauer eingegangen.
+ \item \textit{VSMessageReceiveEvent}: Diese Klasse wird für die Ankunft einer Nachricht bei einem Empfangsprozess benötigt. Sie kapselt die eigentliche Nachricht und überprüft, ob der Empfangsprozess das zur Nachricht dazugehörige Protokoll versteht. Diese Klasse überprüft auch die Simulationseinstellung ``Nur relevante Nachrichten anzeigen'' und entscheidet, ob die Nachricht nach Eintreffen in der Visualisierung und im Loggfenster berü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ügbaren Protokolle automatisch alle möglichen Kombinationen und bietet sie dem Anwender in seiner Auswahl an. Fü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ür die Wecker-Ereignisse benötigt. Wecker-Ereignisse können nur von Protokollen (mehr dazu spä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.
+ \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ä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 dann alle relevanten Attribute in das neue Ereignis \textit{copy} kopiert.
+Alle Ereignisse, die das Interface \textit{VSCopyableEvent} implementieren, können vom Anwender im Ereigniseditor mit einem Rechtsklick kopiert werden und müssen die Methode \textit{initCopy(VSAbstractEvent copy)} implementieren. Dort werden dann 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:
+Alle Ereignisklassen erweitern die abstrakte Klasse \textit{VSAbstractEvent} und mü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.
+ \item \textit{abstract public void onInit()}: Bevor ein Ereignisobjekt vom Simulator verwendet werden kann, muß es initialisiert werden. Je nach Ereignis können hier verschiedene Werte initialisiert werden. Diese Methode wird pro Ereignisobjekt nach Erstellung nur ein einziges Mal ausgeführt.
+ \item \textit{abstract public void onStart()}: Diese Methode wird jedes Mal ausgeführt, wenn das Ereignis eintritt. Sie stellt somit das Kernstü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, worauf 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()}: Diese Methode erstellt vom aktuellen Ereignis eine Kopie, worauf eine Referenz zurückgegeben wird. Alle Ereignisse die kopiert werden können mü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 außerdem Zugriff auf folgende Attribute, die von \textit{VSAbstractEvent} vererbt werden:
+Jede Ereignisklasse hat außerdem 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 VSPrefs prefs}: Eine Referenz auf das Simulationseinstellungsobjekt. Hierü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}
-Da \textit{VSAbstractEvent} die Klasse \textit{VSSerializablePrefs} erweitert, k\"{o}nnen alle Ereignisse mit allen ihren Variablen serialisiert werden. Hierauf wird sp\"{a}ter nochmal eingegangen.
+Da \textit{VSAbstractEvent} die Klasse \textit{VSSerializablePrefs} erweitert, können alle Ereignisse mit allen ihren Variablen serialisiert werden. Hierauf wird später nochmal eingegangen.
\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, verbleibt 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.
+Im Folgenden wird als Beispiel die Implementierung des Prozessabsturzereignisses \textit{VSProcessCrashEvent} behandelt. Da die dazugehörige Klasse keine Attribute besitzt, verbleibt 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ührt. Hier wird obligatorisch überprüft, ob der Prozess bereits abgestü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 (die \"{u}ber \textit{prefs} bezogen wird) in das Loggfenster geschrieben.
+Der Task-Manager überprüft bereits, ob der Prozess abgestürzt ist oder nicht, d.h. ein Ereignis wird bei einem abgestürztem Prozess gar nicht erst ausgeführt. Die einzige Ausnahme bildet ein Wiederbelebungsereignis (\text{VSProcessRecover}), welches vom Task-Manager ausgeführt wird, auch wenn der Prozess abgestürzt ist. Mit \textit{logg} wird eine Nachricht (die über \textit{prefs} bezogen wird) in das Loggfenster geschrieben.
\begin{code}
package events.implementations;
@@ -198,7 +198,7 @@ extends VSAbstractEvent implements VSCopyableEvent { }
\end{code}
-In der Datei \textit{events/VSRegisteredEvents.java} muss in der \textit{init}-Methode f\"{u}r jedes programmierbare Ereignis ein Eintrag existieren. Die \textit{init}-Methode wird einmal beim Starten des Simulators ausgef\"{u}hrt:
+In der Datei \textit{events/VSRegisteredEvents.java} muss in der \textit{init}-Methode für jedes programmierbare Ereignis ein Eintrag existieren. Die \textit{init}-Methode wird einmal beim Starten des Simulators ausgeführt:
\begin{code}
public static void init(VSPrefs prefs_) {
@@ -219,7 +219,7 @@ Als Resultat kann das Prozessabsturzereignis nach Belieben via GUI programmieren \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.
+Das Paket \textit{core.time} auf Abbildung \ref{fig:PackageCoreTime} stellt lediglich die Klassen für die Vektor- und Lamportzeitstempel zur Verfügung. Für die normale lokale Prozesszeit wird aus Performancegründen keine eigene Klasse, sondern ein einfaches \textit{long}-Attribut des Prozessobjektes verwendet.
\begin{figure}[h]
\centering
@@ -228,9 +228,9 @@ Das Paket \textit{core.time} auf Abbildung \ref{fig:PackageCoreTime} stellt ledi \label{fig:PackageCoreTime}
\end{figure}
-Auf Abbildung \ref{fig:PackageCore} ist stark vereinfacht 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.
+Auf Abbildung \ref{fig:PackageCore} ist stark vereinfacht das Paket \textit{core} dargestellt. Für jedes auszuführendes Ereignis wird eine Instanz von \textit{VSTask} benötigt, welche die Ereigniseintrittszeit als Attribut abgespeichert hat sowie eine Referenz auf das Objekt des auszuführenden Ereignisses (\textit{VSAbstractEvent}) und dem Prozessobjekt besitzt. Geplante \textit{VSTask}-Instanzen werden für eine spätere Ausführung dem Task-Manager ü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.
+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äbe es für jedes Ereignis lediglich nur eine einzige mögliche Eintrittszeit. Von dieser Möglichkeit wird zum Beispiel bei den Server- und Clientanfragen eines Protokollobjektes Gebrauch gemacht. Für jedes Protokoll kann der Anwender in einer Simulation beliebig viele Anfragen programmieren, wobei für jede Anfrage stets das selbe Protokollobjekt als Ereignis verwendet wird.
\begin{figure}[h]
\centering
@@ -239,11 +239,11 @@ Die Kapselung eines \textit{VSAbstractEvent}-Objektes in einem \textit{VSTask}-O \label{fig:PackageCore}
\end{figure}
-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 verwalten.
+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 überprüft periodisch, ob es auszufü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äts-Warteschlange abgelegt. Die Prioritäts-Warteschlange stellt hierbei die korrekte Ereigniseintrittsreihenfolge sicher. Da sich die lokalen Zeiten aller beteiligten Prozesse voneinander unterscheiden können, muss für jeden Prozess eine separate lokale Prioritä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 über eine \textit{java.util.ArrayList} auf alle Prozessobjekte zu und kann somit auch auf alle lokalen Warteschlangen zugreifen und verwalten.
-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. Anschließend wird f\"{u}r jeden Empf\"{a}ngerprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welches eine Referenz der verschickten Nachricht besitzt (Abbilung \ref{fig:Wrapping}). 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.
+Eine Instanz von \textit{VSMessage} stellt eine Nachricht dar, die von einem Prozess verschickt wird. Fü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önnen zwischen zwei Prozessen beliebige Datentypen (Tabelle \ref{tb:VariablenDatentypen}) über eine Nachricht verschickt werden. Anschließend wird für jeden Empfangsprozess das neues Ereignisobjekt der Klasse \textit{VSMessageReceiveEvent} angelegt, welches eine Referenz der verschickten Nachricht besitzt (Abbildung \ref{fig:Wrapping}). Danach wird ein \textit{VSTask}-Objekt instantiiert, wo die Referenz auf das Ereignisobjekt und das dazugehörige Prozessobjekt sowie die Ereigniseintrittszeit als Attribute gespeichert werden. Das \textit{VSTask}-Objekt wird dann dem Task-Manager übergeben, der das dazugehörige Ereignis ausführt, wenn die Ereigniseintrittszeit eingetroffen ist. Via Java-Polymorphie wird das \textit{VSMessageReceiveEvent}-Objekt in ein \textit{VSAbstractEvent} umgewandelt.
-Erw\"{a}hnentswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden vor dem 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}gung 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.
+Erwähnenswert ist auch die Klasse \textit{VSMessageStub}, welche ein \textit{VSMessage} kapselt. Ihr Zweck ist das Verstecken einiger Methoden vor dem Protokoll-API, welches für die Erstellung eigener Protokolle dient. Der Protokoll-Entwickler soll möglichst nichts falsch machen können und deswegen soll den Protokoll-API ein eingeschränkter Funktionsumfang zur Verfügung 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 Methoden er zugreifen sollte und auf welche nicht. Das Protokoll-API wird später genauer behandelt.
\begin{figure}[h]
\centering
@@ -252,15 +252,15 @@ Erw\"{a}hnentswert ist auch die Klasse \textit{VSMessageStub}, welche ein \texti \label{fig:Wrapping}
\end{figure}
-Der Task-Manager speichert anschließend in der globalen Warteschlange die Nachrichtenempfangsereignisse. 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.
+Der Task-Manager speichert anschließend in der globalen Warteschlange die Nachrichtenempfangsereignisse. Die Nachricht kommt bei einem Empfangsprozess an, sobald das Ereignis für den Empfang eintritt. Fü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ügt. Für die Überprü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 der Protokollentwickler 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} implementieren 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.
+Eine Instanz von \textit{VSInternalProcess} repräsentiert einen simulierten Prozess. Ein \textit{VSInternalProcess} stellt alle vom Simulator intern verwendeten Methoden zur Verfügung, während ein \textit{VSAbstractProcess} lediglich Methoden hat, die der Protokollentwickler für die Erstellung eigener Protokolle verwenden darf. Da \textit{VSAbstractProcess} abstrakt ist und hiervon keine Instanz gebildet werden darf, muss fü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ügung gestellt. Beispielsweise darf mit \textit{getTasks()} nur vom Simulator intern auf die Prioritäts-Warteschlangen zugegriffen werden, während man im Protokoll-API selbiges vermeiden sollte und auch gar nicht direkt möglich ist. Hierfür hätte man auch ein Stub-Objekt \textit{VSProcessStub} implementieren können. Da aber so gut wie alle paar Millisekunden auf die Methoden von \textit{VSInternalProcess} zugegriffen wird, wurde hier aus Performancegründen der Weg ü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<String,Long>}-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.
+Alle einstellbaren Prozessvariablen werden von der Klasse \textit{VSPrefs} vererbt. Damit bei Neuberechnungen die Variablen nicht dauernd über eine \textit{HashMap} von \textit{VSPrefs} zugegriffen werden muß, speichert \textit{VSInternalProcess} aus Performancegründen einige Variablen als lokale Kopie ab. Zum Beispiel wird für die lokale Prozesszeit nicht auf das \textit{HashMap<String,Long>}-Objekt von \textit{VSPrefs}, sondern auf das Klassenattribut \textit{private long localTime} zugegriffen. Vor- und nach dem Editieren über den Prozesseditor werden die \textit{VSPrefs} beziehungsweise die lokalen Kopien auf den neusten Stand gebracht. Selbiges gilt für weitere Variablen wie zum Beispiel der Uhrabweichung eines Prozesses.
-\subsection{Beispiel f\"{u}r die Erstellung von Prozessereignissen}
+\subsection{Beispiel fü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:
+Anhand der Prozessabsturz- und Wiederbelebungsereignisse läßt sich wie folgt sehr gut demonstrieren, wie intern Ereignisse angelegt werden können:
\begin{code}
void createCrashAndRecoverExample(VSTaskManager taskManager,
VSInternalProcess process) {
@@ -276,7 +276,7 @@ void createCrashAndRecoverExample(VSTaskManager taskManager, }
\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.
+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ährend das Wiederbelebungsereignis bei einer globalen Zeit von \textit{2000ms} stattfindet. Für den Fall, dass das Wiederbelebungsereignis vor dem Absturzereignis eintritt wird es nicht ausgeführt, da der Prozess noch nicht abgestürzt ist.
\section{Protokolle}
@@ -289,9 +289,9 @@ In diesem Beispiel wurden zwei Ereignisse (Absturz- und Wiederbelebung eines geg \label{fig:PackageProtocols}
\end{figure}
-In diesem Abschnitt wird auf die Implementierung der Protokolle und das Protokoll-API eingegangen. Im Protokoll-API wird in der Regel nicht direkt auf den Task-Manager und auf die explizite instanzierung von Ereignisobjekten zur\"{u}ckgegriffen. Das wird alles vom API automatisch gemacht.
+In diesem Abschnitt wird auf die Implementierung der Protokolle und das Protokoll-API eingegangen. Im Protokoll-API wird in der Regel nicht direkt auf den Task-Manager und auf die explizite Instantiierung von Ereignisobjekten zurückgegriffen. Das wird alles vom API automatisch gemacht.
-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. Im Prinzip besitzt jedes Prozessobjekt von jedem Protokoll seine eigene Instanz. Bei \textit{10} Protokollen und \textit{3} beteiligten Prozessen werden also \textit{30} Protokollobjekte verwendet. Jedes Protokollobjekt verwaltet sowohl die Server- als auch die Clientseite eines Protokolls auf einmal. Dabei merkt sich \textit{VSAbstractProtocol} anhand eines Flags ob der aktuelle Kontext server- oder clientbezogen ist und f\"{u}hrt dementsprechen beim Eintreffen von Ereignissen die Server- beziehungsweise Clientmethoden des Protokolls auf. \textit{VSAbstractProtocol} \"{u}berpr\"{u}ft auch, ob ein Client oder ein Server \"{u}berhaupt aktiviert ist.
+Auf Abbildung \ref{fig:PackageProtocols} sind die Pakete \textit{protocols} und \textit{protocols.implementations} dargestellt, welche für die Protokollimplementierungen zuständig sind. \textit{VSAbstractProtocol} stellt lediglich gemeinsame Methoden und Attribute zur Verfügung, die von allen Protokollen verwendet werden können. Jedes Protokoll hat im Paket \textit{protocols.implementations} seine eigene Klasse, die von \textit{VSAbstractProtocol} erbt. Im Prinzip besitzt jedes Prozessobjekt von jedem Protokoll seine eigene Instanz. Bei \textit{10} Protokollen und \textit{3} beteiligten Prozessen werden also \textit{30} Protokollobjekte verwendet. Jedes Protokollobjekt verwaltet sowohl die Server- als auch die Clientseite eines Protokolls auf einmal. Dabei merkt sich \textit{VSAbstractProtocol} anhand eines Flags ob der aktuelle Kontext server- oder clientbezogen ist und führt dementsprechend beim Eintreffen von Ereignissen die Server- beziehungsweise Clientmethoden des Protokolls auf. \textit{VSAbstractProtocol} überprüft auch, ob ein Client oder ein Server überhaupt aktiviert ist.
\begin{figure}[h]
\centering
@@ -300,91 +300,91 @@ Auf Abbildung \ref{fig:PackageProtocols} sind die Pakete \textit{protocols} und \label{fig:Protokollvariablen}
\end{figure}
-Es ist bereits bekannt, dass Protokolle im Prozesseditor editierbare Variablen haben k\"{o}nnen. Da \textit{VSAbstractProtocol} von \textit{VSAbstractEvent} erbt, was wiederum von \textit{VSPrefs} erbt, werden alle Protokollvariablen einfach in die Mutterklasse \textit{VSPrefs} abgelegt. Zum Beispiel kann mit \textit{super.setBoolean(``test'', true);} eine neue Protokollvariable \textit{test} mit dem Standardwert \textit{true} angelegt werden. Diese Variable erscheint dann automatisch im Prozesseditor.
+Es ist bereits bekannt, dass Protokolle im Prozesseditor editierbare Variablen haben können. Da \textit{VSAbstractProtocol} von \textit{VSAbstractEvent} erbt, was wiederum von \textit{VSPrefs} erbt, werden alle Protokollvariablen einfach in die Mutterklasse \textit{VSPrefs} abgelegt. Zum Beispiel kann mit \textit{super.setBoolean(``test'', true);} eine neue Protokollvariable \textit{test} mit dem Standardwert \textit{true} angelegt werden. Diese Variable erscheint dann automatisch im Prozesseditor.
-Da der Simulator daf\"{u}r ausgelegt wurde eigene Protokolle zu implementieren, werden im Folgenden alle verf\"{u}gbaren Protokoll-API-Methoden etwas ausf\"{u}hrlicher als gewohnt beschrieben. Jede Protokollklasse muß die folgenden Methoden implementieren:
+Da der Simulator dafür ausgelegt wurde eigene Protokolle zu implementieren, werden im Folgenden alle verfügbaren Protokoll-API-Methoden etwas ausführlicher als gewohnt beschrieben. Jede Protokollklasse muß die folgenden Methoden implementieren:
\begin{itemize}
\setlength{\itemsep}{-2mm}
- \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 anderen 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 Weckerereignis eintritt.
+ \item Einen ö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ü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()}: Diese Methode wird jedes Mal ausgeführt, wenn die Simulation zurückgesetzt wird.
+ \item \textit{abstract public void onClientStart()}: Diese Methode wird nur benötigt, wenn der Client immer die Anfragen startet. Diese Methode generiert in der Regel immer eine Clientanfrage, die via \textit{VSMessage}-Objekt an alle anderen beteiligten Prozesse verschickt wird.
+ \item \textit{abstract public void onClientRecv(VSMessage message)}: Diese Methode wird jedes Mal Ausgeführt, wenn eine Servernachricht \textit{message} bei dem Client eintrifft.
+ \item \textit{abstract public void onClientSchedule()}: Diese Methode wird jedes Mal ausgeführt, wenn ein Weckerereignis 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, wobei lediglich \textit{Client} durch \textit{Server} ausgetauscht werden muß.
+Für alle hier aufgelisteten Client-Methoden sind auch die korrespondierenden Server-Methoden anzugeben. Die Server-Methoden sind analog zu den Client-Methoden aufgebaut, wobei lediglich \textit{Client} durch \textit{Server} ausgetauscht werden muß.
-Jede Protokollklasse bekommt folgende Methoden von \textit{VSAbstractProtocol} vererbt, welche allesamt vom Protokollentwickler verwendet werden k\"{o}nnen:
+Jede Protokollklasse bekommt folgende Methoden von \textit{VSAbstractProtocol} vererbt, welche allesamt vom Protokollentwickler verwendet werden können:
\begin{itemize}
\setlength{\itemsep}{-2mm}
- \item \textit{pubic void sendMessage(VSMessage message)}: Hiermit verchickt das Protokoll eine Nachricht.
- \item \textit{pubic final boolean hasOnServerStart()}: Hiermit l\"{a}ßt sich bestimmen, ob der Server- oder der Client bei dem aktuellen Protokoll die Anfragen startet.
- \item \textit{pubic final boolean isServer()}: Hiermit l\"{a}ßt sich bestimmen, ob der aktuelle Prozess das aktuelle Protokoll serverseitig aktiviert hat.
- \item \textit{pubic final boolean isClient()}: Hiermit l\"{a}ßt sich bestimmen, ob der aktuelle Prozess das aktuelle Protokoll clientseitig aktiviert hat.
- \item \textit{pubic final void scheduleAt(long time)}: Diese Methode stellt einen Wecker, der zur angegebenen lokalen Prozesszeit eintritt. Nach Ablauf des Weckers wird, abh\"{a}ngig ob der aktuelle Kontext Client- oder Serverseitig ist, \textit{onClientSchedue} beziehungsweise \textit{onServerSchedule} ausgef\"{u}hrt.
+ \item \textit{pubic void sendMessage(VSMessage message)}: Hiermit verschickt das Protokoll eine Nachricht.
+ \item \textit{pubic final boolean hasOnServerStart()}: Hiermit läßt sich bestimmen, ob der Server- oder der Client bei dem aktuellen Protokoll die Anfragen startet.
+ \item \textit{pubic final boolean isServer()}: Hiermit läßt sich bestimmen, ob der aktuelle Prozess das aktuelle Protokoll serverseitig aktiviert hat.
+ \item \textit{pubic final boolean isClient()}: Hiermit läßt sich bestimmen, ob der aktuelle Prozess das aktuelle Protokoll clientseitig aktiviert hat.
+ \item \textit{pubic final void scheduleAt(long time)}: Diese Methode stellt einen Wecker, der zur angegebenen lokalen Prozesszeit eintritt. Nach Ablauf des Weckers wird, abhängig ob der aktuelle Kontext Client- oder Serverseitig ist, \textit{onClientSchedue} beziehungsweise \textit{onServerSchedule} ausgeführt.
\item \textit{pubic final void removeSchedules()}: Entfernt alle gesetzten Wecker des aktuellen Kontextes (Server oder Client).
- \item \textit{pubic final int getNumProcesses()}: Gibt die Anzahl an der Simulation beteiligten Prozesse zur\"{u}ck.
+ \item \textit{pubic final int getNumProcesses()}: Gibt die Anzahl an der Simulation beteiligten Prozesse zurück.
\end{itemize}
-Bei der Implementierung von Protokollen k\"{o}nnen zus\"{a}tzlich auf die vererbten Attribute \textit{VSAbstractProcess process} und \textit{VSPrefs prefs} zugegriffen werden. Verf\"{u}gbare Methoden von \textit{VSPrefs} wurden bereits behandelt. \"{U}ber \textit{prefs} lassen sich alle globalen Simulationseinstellungen abrufen (zum Beispiel die Simulationsvariable die Angibt, ob Prozesse eigene Nachrichten empfangen: \textit{bool recvOwn = prefs.getBoolean(``sim.message.own.recv'')}). Folgende Prozessmethoden d\"{u}rfen auf \textit{process} aus dem Protokoll-API verwendet werden:
+Bei der Implementierung von Protokollen können zusätzlich auf die vererbten Attribute \textit{VSAbstractProcess process} und \textit{VSPrefs prefs} zugegriffen werden. Verfügbare Methoden von \textit{VSPrefs} wurden bereits behandelt. über \textit{prefs} lassen sich alle globalen Simulationseinstellungen abrufen (zum Beispiel die Simulationsvariable die Angibt, ob Prozesse eigene Nachrichten empfangen: \textit{bool recvOwn = prefs.getBoolean(``sim.message.own.recv'')}). Folgende Prozessmethoden dürfen auf \textit{process} aus dem Protokoll-API verwendet werden:
\begin{itemize}
\setlength{\itemsep}{-2mm}
- \item \textit{public float getClockVariance()}: Gibt die Uhrabweichung zur\"{u}ck.
+ \item \textit{public float getClockVariance()}: Gibt die Uhrabweichung zurück.
\item \textit{public void setClockVariance(float clockVariance)}: Setzt die Uhrabweichung des Prozesses.
- \item \textit{public long getGlobalTime()}: Gibt die aktuelle globale Simulationszeit zur\"{u}ck.
- \item \textit{public long getTime()}: Gibt die aktuelle lokale Prozesszeit zur\"{u}ck.
+ \item \textit{public long getGlobalTime()}: Gibt die aktuelle globale Simulationszeit zurück.
+ \item \textit{public long getTime()}: Gibt die aktuelle lokale Prozesszeit zurück.
\item \textit{public void setTime(long time)}: Setzt die aktuelle lokale Prozesszeit.
- \item \textit{public long getLamportTime()}: Gibt die aktuelle Lamportzeit des Prozesses zur\"{u}ck.
+ \item \textit{public long getLamportTime()}: Gibt die aktuelle Lamportzeit des Prozesses zurück.
\item \textit{public void setLamportTime(long lamportTime)}: Setzt die aktuelle Lamportzeit des Prozesses.
\item \textit{public void increaseLamportTime()}: Inkrementiert die Lamportzeit um eins.
\item \textit{public void updateLamportTime(long lamportTime)}: Erneuert die Lamportzeit. Siehe Kapitel 2.6.1 wie die Lamportzeiten erneuert werden.
- \item \textit{public VSVectorTime getVectorTime()}: Gibt die aktuelle Vektor-Zeit des Prozesses zur\"{u}ck.
- \item \textit{public VSTime[] getLamportTimeArray()}: Gibt die gesamte Lamportzeitstempelhistorie des Prozesses zur\"{u}ck. Kann jeweils nach VSLamportTime gecastet werden.
- \item \textit{public VSTime getVectorTimeArray()}: Gibt die gesamte Vektor-Zeitstempelhistorie des Prozesses zur\"{u}ck. Kann jeweils nach VSVectorTime gecastet werden.
+ \item \textit{public VSVectorTime getVectorTime()}: Gibt die aktuelle Vektor-Zeit des Prozesses zurück.
+ \item \textit{public VSTime[] getLamportTimeArray()}: Gibt die gesamte Lamportzeitstempelhistorie des Prozesses zurück. Kann jeweils nach VSLamportTime umgewandelt werden.
+ \item \textit{public VSTime getVectorTimeArray()}: Gibt die gesamte Vektor-Zeitstempel-Historie des Prozesses zurück. Kann jeweils nach VSVectorTime umgewandelt werden.
\item \textit{public void updateVectorTime(VSVectorTime vectorTimeUpdate)}: Erneuert die Vektorzeit. Siehe Kapitel 2.6.1 wie die Vektorzeiten erneuert werden.
\item \textit{public void increaseVectorTime()}: Inkrementiert die Vektorzeit an lokalem Index um eins.
- \item \textit{public int getProcessID()}: Gibt die PID zur\"{u}ck.
- \item \textit{public void setProcessID(int processID)}: Setz die PID.
- \item \textit{public int getProcessNum()}: Gibt die Prozessnummer zur\"{u}ck. Dieser Wert unterscheidet sich von der PID. Die Prozessnummer gibt an, um den wievielten Prozess, beginnend bei 0, es sich handelt.
- \item \textit{public int getRandomPercentage()}: Gibt einen Zufallswert zwischen \textit{0} und \textit{100} zur\"{u}ck.
- \item \textit{public boolean hasCrashed()}: Gibt \textit{true} zur\"{u}ck, wenn der Prozess w\"{a}hrend der aktuellen Simulation schonmal abgest\"{u}rzt ist.
- \item \textit{public boolean isCrashed()}: Gibt \textit{true} zur\"{u}ck, wenn der Prozess aktuell abgest\"{u}rzt ist.
- \item \textit{public void isCrashed(boolean isCrashed)}: Hiermit kann man den Prozess abst\"{u}rzen (\textit{isCrashed = true}) und wiederbeleben (\textit{isCrashed = false}) lassen.
+ \item \textit{public int getProcessID()}: Gibt die PID zurück.
+ \item \textit{public void setProcessID(int processID)}: Setzt die PID.
+ \item \textit{public int getProcessNum()}: Gibt die Prozessnummer zurück. Dieser Wert unterscheidet sich von der PID. Die Prozessnummer gibt an, um den wievielten Prozess, beginnend bei 0, es sich handelt.
+ \item \textit{public int getRandomPercentage()}: Gibt einen Zufallswert zwischen \textit{0} und \textit{100} zurück.
+ \item \textit{public boolean hasCrashed()}: Gibt \textit{true} zurück, wenn der Prozess während der aktuellen Simulation schon mal abgestürzt ist.
+ \item \textit{public boolean isCrashed()}: Gibt \textit{true} zurück, wenn der Prozess aktuell abgestürzt ist.
+ \item \textit{public void isCrashed(boolean isCrashed)}: Hiermit kann man den Prozess abstürzen (\textit{isCrashed = true}) und wiederbeleben (\textit{isCrashed = false}) lassen.
\end{itemize}
-In der Regel werden in Protokollen auch Nachrichten (\textit{VSMessage}) verschickt. Folgende Methoden d\"{u}rfen davon im Protokoll-API verwendet werden:
+In der Regel werden in Protokollen auch Nachrichten (\textit{VSMessage}) verschickt. Folgende Methoden dürfen davon im Protokoll-API verwendet werden:
\begin{itemize}
\setlength{\itemsep}{-2mm}
- \item \textit{public VSMessage()}: Der Standardkonstruktor f\"{u}r die Erstellung einer neuen Nachricht.
- \item \textit{public int getmessageID()}: Gibt die Nachrichten-ID zur\"{u}ck.
- \item \textit{public boolean equals(VSMessage message)}: Hiermit l\"{a}ßt sich \"{u}berpr\"{u}fen, ob eine weitere Nachricht die selbe NID besitzt (wobei es sich dann um die selbe Nachricht handeln w\"{u}rde).
+ \item \textit{public VSMessage()}: Der Standardkonstruktor für die Erstellung einer neuen Nachricht.
+ \item \textit{public int getmessageID()}: Gibt die Nachrichten-ID zurück.
+ \item \textit{public boolean equals(VSMessage message)}: Hiermit läßt sich überprüfen, ob eine weitere Nachricht die selbe NID besitzt (wobei es sich dann um die selbe Nachricht handeln würde).
\end{itemize}
-Folgende weitere Methoden von \textit{VSMessage} k\"{o}nnen bei Erhalt einer Nachricht verwendet werden:
+Folgende weitere Methoden von \textit{VSMessage} können bei Erhalt einer Nachricht verwendet werden:
\begin{itemize}
\setlength{\itemsep}{-2mm}
- \item \textit{public String getName()}: Gibt den Namen des zur Nachricht dazugeh\"{o}rigen Protokolls zur\"{u}ck. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
- \item \textit{public String getProtocolClassname()}: Gibt den Klassennamen des zur Nachricht dazugeh\"{o}rigen Protokolls zur\"{u}ck. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
- \item \textit{public VSAbstractProcess getSendingProcess()}: Gibt eine Referenz auf den Senderprozess zur\"{u}ck. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
- \item \textit{public long getLamportTime()}: Gibt die Lamportzeit des Senderprozesses zur\"{u}ck. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
- \item \textit{public VSVectorTime getLamportTime()}: Gibt die Vektorzeit des Senderprozesses zur\"{u}ck. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
- \item \textit{public boolean isServerMessage()}: Hiermit l\"{a}ßt sich entscheiden, ob es sich um eine Server- oder eine Clientnachricht handelt. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
+ \item \textit{public String getName()}: Gibt den Namen des zur Nachricht dazugehörigen Protokolls zurück. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
+ \item \textit{public String getProtocolClassname()}: Gibt den Klassennamen des zur Nachricht dazugehörigen Protokolls zurück. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
+ \item \textit{public VSAbstractProcess getSendingProcess()}: Gibt eine Referenz auf den Senderprozess zurück. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
+ \item \textit{public long getLamportTime()}: Gibt die Lamportzeit des Senderprozesses zurück. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
+ \item \textit{public VSVectorTime getLamportTime()}: Gibt die Vektorzeit des Senderprozesses zurück. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
+ \item \textit{public boolean isServerMessage()}: Hiermit läßt sich entscheiden, ob es sich um eine Server- oder eine Clientnachricht handelt. Diese Methode funktioniert nur bei empfangenen Nachrichten richtig.
\end{itemize}
-Wenn \"{u}ber eine Nachricht Daten verschickt werden sollen, so werden die von \textit{VSPrefs} vererben Methoden verwendet.
+Wenn über eine Nachricht Daten verschickt werden sollen, so werden die von \textit{VSPrefs} vererben Methoden verwendet.
\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 Folgenden wird die Implementierung des zuverlässigen Multicast-Protokolls \textit{VSReliableMulticastProtocol.java} als Beispiel aufgefü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. Da ein Protokoll auch ein \textit{VSAbstractEvent} ist, muss auch hier im Konstruktor mit \textit{setClassname} der Klassenname des aktuellen Protokolls angegeben werden:
+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ür \textit{HAS\_ON\_SERVER\_START} und Serveranfragen gilt Selbiges analog. Da ein Protokoll auch ein \textit{VSAbstractEvent} ist, muss auch hier im Konstruktor mit \textit{setClassname} der Klassenname des aktuellen Protokolls angegeben werden:
\begin{code}
package protocols.implementations;
@@ -404,7 +404,7 @@ public class VSReliableMulticastProtocol \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 (siehe Abbildung \ref{fig:Protokollvariablen} unter ``Reliable Multicast Client'' ganz unten):
+Das private Klassenattribut \textit{pids} wird für die Zwischenspeicherung beteiligter PIDs benötigt. Hier sind alle PIDs abgelegt, von denen noch Bestä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önnen (siehe Abbildung \ref{fig:Protokollvariablen} unter ``Reliable Multicast Client'' ganz unten):
\begin{code}
private ArrayList<Integer> pids;
@@ -412,13 +412,13 @@ Das private Klassenattribut \textit{pids} wird f\"{u}r die Zwischenspeicherung b Vector<Integer> vec = new Vector<Integer>();
vec.add(1); vec.add(3);
super.initVector("pids", vec,
- "PIDs beteilitger Prozesse");
+ "PIDs beteiligter Prozesse");
super.initLong("timeout", 2500,
"Zeit bis erneute Anfrage", "ms");
}
\end{code}
-Wenn die Simulation zur\"{u}ckgesetzt wird, dann wird auch \textit{pids} reinitialisiert:
+Wenn die Simulation zurückgesetzt wird, dann wird auch \textit{pids} reinitialisiert:
\begin{code}
public void onClientReset() {
pids.clear();
@@ -426,7 +426,7 @@ Wenn die Simulation zur\"{u}ckgesetzt wird, dann wird auch \textit{pids} reiniti }
\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):
+In \textit{onClientStart} wird geprüft, ob eine Clientanfrage gestartet werden soll. Wenn dies der Fall ist (wenn von mindestens einem beteiligten Prozess noch keine Bestätigung erhalten wurde), wird ein neues Nachrichtenobjekt erstellt, und mit dem Inhalt \textit{Boolean: isMulticast=true} verschickt (intern wird hier für jeden Empfangsprozess 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) {
@@ -441,7 +441,7 @@ In \textit{onClientStart} wird gepr\"{u}ft, ob eine Clientanfrage gestartet werd }
\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.
+Wenn eine Serverantwort eintrifft, dann wird \textit{onClientRecv} aufgerufen. Hier wird überprüft, ob überhaupt noch Multicast-Bestätigungen benötigt werden. Wenn dies der Fall ist, dann wird geschaut, ob es sich bei der Antwort um eine noch nicht eingetroffene Bestätigung handelt. Gegebenenfalls wird die jeweilige PID aus \textit{pids} entfernt. Wenn \textit{pids} leer ist, dann wurde von allen beteiligten Prozessen eine Bestätigung erhalten und der Client entfernt mit \textit{removeSchedules} alle seine derzeit programmierten Wecker.
\begin{code}
public void onClientRecv(VSMessage recvMessage) {
@@ -465,7 +465,7 @@ Wenn eine Serverantwort eintrifft, dann wird \textit{onClientRecv} aufgerufen. H }
\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:
+Fü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();
@@ -474,7 +474,7 @@ F\"{u}r das erneute Verschicken einer Clientanfrage ruft \textit{onClientSchedul \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 \textit{false} gesetzt:
+Die Serverseite des Protokolls speichert im Attribut \textit{ackSent} ab, ob es bereits eine Bestätigung des Multicasts verschickt hat oder nicht. In diesem Protokoll werden in \textit{onServerInit} keine Initialisierungen vorgenommen. Demnach gibt es für den Benutzer auch keine serverseitigen Protokollvariablen zu editieren. Beim Zurücksetzen der Simulation wird lediglich \textit{ackSent} auf den Ursprungswert \textit{false} gesetzt:
\begin{code}
private boolean ackSent = false;
@@ -485,7 +485,7 @@ Die Serverseite des Protokolls speichert im Attribut \textit{ackSent} ab, ob es }
\end{code}
-Wenn der Server eine Clientanfrage erhalten hat, so \"{u}berpr\"{u}ft der Server, ob es sich um eine Multicast-Nachricht handelte. Anschließend 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:
+Wenn der Server eine Clientanfrage erhalten hat, so überprüft der Server, ob es sich um eine Multicast-Nachricht handelte. Anschließend wird gegebenenfalls die Bestätigungsnachricht mit \textit{Boolean: isAck=true} und der Server-PID verschickt. Je nachdem ob bereits eine Bestätigung verschickt wurde oder nicht wird eine andere Nachricht geloggt:
\begin{code}
public void onServerRecv(VSMessage recvMessage) {
if (recvMessage.getBoolean("isMulticast")) {
@@ -512,20 +512,20 @@ Der Server benutzt in diesem Beispiel keinen Wecker. Dementsprechend hat die Met \subsection{Erstellung eigener Protokolle (Schnelldurchlauf)}
-Hier werden alle Schritte zusammegefasst, die f\"{u}r die Erstellung eines eigenen Protokolls \textit{VSMyProtocol} durchgef\"{u}rt werden m\"{u}ssen.
+Hier werden alle Schritte zusammengefasst, die für die Erstellung eines eigenen Protokolls \textit{VSMyProtocol} durchgeführt werden müssen.
\begin{enumerate}
\item VS-Simulator Quelltext beziehen und in das Verzeichnis \textit{vs/sources/protocols/implementations} wechseln.
\item Das Template-Protokoll \textit{VSDummyProtocol.java} nach \textit{VSMyProtocol.java} kopieren.
\item \textit{VSDummyProtocol.java} editieren und den Klassennamen dort anpassen (\textit{VSDummyProtocol} $\rightarrow$ \textit{VSMyProtocol}).
\item In das oberste Verzeichnis \textit{vs/} wechseln.
- \item Die datei \textit{sources/events/VSRegisteredEvents.java} editieren, und in der \textit{init}-Methode folgende Zeile hinzuf\"{u}gen:
+ \item Die Datei \textit{sources/events/VSRegisteredEvents.java} editieren, und in der \textit{init}-Methode folgende Zeile hinzufügen:
\begin{code}
registerEvent("protocols.implementations.VSMyProtocol",
- "Langer Name des Protokolls", // Langer name
+ "Langer Name des Protokolls", // Langer Name
"Neues Protokoll"); // Kurzer Name
\end{code}
- \item Mit dem Befehl \textit{ant compile} die \"{A}nderungen \"{u}bernehmen und mit \textit{ant test} testen, ob der Simulator das Protokoll \"{u}bernommen hat. Hierbei wird der Simulator direkt aus dem Quellverzeichnis gestartet. ``Neues Protokoll'' sollte nun im Ereigniseditor programmiert werden k\"{o}nnen.
+ \item Mit dem Befehl \textit{ant compile} die Änderungen übernehmen und mit \textit{ant test} testen, ob der Simulator das Protokoll übernommen hat. Hierbei wird der Simulator direkt aus dem Quellverzeichnis gestartet. ``Neues Protokoll'' sollte nun im Ereigniseditor programmiert werden können.
\item Mit dem Befehl \textit{ant dist} das Archiv \textit{dist/lib/VS-Sim-Latest.jar} erstellen und verwenden.
\end{enumerate}
@@ -533,11 +533,11 @@ registerEvent("protocols.implementations.VSMyProtocol", \subsection{Funktionsweise}
-Das Paket \textit{simulator} (vereinfacht auf Abbildung \ref{fig:PackageProtocols} dargestellt) implementiert die eigentliche graphische Benutzeroberf\"{a}che des Simulators. Ausnahmen sind die Editorklassen in \textit{prefs.editors} sowie \textit{utils.VSFrame}.
+Das Paket \textit{simulator} (vereinfacht auf Abbildung \ref{fig:PackageProtocols} dargestellt) implementiert die eigentliche graphische Benutzeroberfläche des Simulators. Ausnahmen sind die Editorklassen in \textit{prefs.editors} sowie \textit{utils.VSFrame}.
-Beim Starten des Simulators wird auf die Main-Methode, welche sich in \textit{VSMain} befindet, aufgerufen. Sie instanziiert ein \textit{VSDefaultPrefs}-Objekt, wo alle Standardeinstellungen des Simulators abgelegt sind. Anschließend wird ein \textit{VSSimulatorFrame} erzeugt, welches ein Simulatorfenster (wie bereits schon auf Abbildung \ref{fig:NeuesFenster} zu sehen war) implementiert. Das Simulatorfenster erstellt f\"{u}r jede neue Simulation jeweils ein Objekt von \textit{VSSimulator}. Jede Simulation hat im Simulationsfenster einen eigenen Tab. Auf Abbildung \ref{fig:NeuErstellteSimulation} wurde bereits eine neue Simulation erstellt, wo auch unten links der dazugeh\"{o}rige Tab mit der Beschriftung ``Simulator 1'' zu sehen ist. Jede Simulation besitzt dabei eine eigene Simulationsnummer, die bei jeder neuen Simulation um eins inkrementiert wird. Jedes \textit{VSSimulator}-Objekt greift auf \textit{VSSimulatorVisualization} zur\"{u}ck, was die Simulationsvisualisierung (Abbildung \ref{fig:Visualisierung}) implementiert.
+Beim Starten des Simulators wird auf die Main-Methode, welche sich in \textit{VSMain} befindet, aufgerufen. Sie instantiiert ein \textit{VSDefaultPrefs}-Objekt, wo alle Standardeinstellungen des Simulators abgelegt sind. Anschließend wird ein \textit{VSSimulatorFrame} erzeugt, welches ein Simulatorfenster (wie bereits schon auf Abbildung \ref{fig:NeuesFenster} zu sehen war) implementiert. Das Simulatorfenster erstellt für jede neue Simulation jeweils ein Objekt von \textit{VSSimulator}. Jede Simulation hat im Simulationsfenster einen eigenen Tab. Auf Abbildung \ref{fig:NeuErstellteSimulation} wurde bereits eine neue Simulation erstellt, wo auch unten links der dazugehörige Tab mit der Beschriftung ``Simulator 1'' zu sehen ist. Jede Simulation besitzt dabei eine eigene Simulationsnummer, die bei jeder neuen Simulation um eins inkrementiert wird. Jedes \textit{VSSimulator}-Objekt greift auf \textit{VSSimulatorVisualization} zurück, was die Simulationsvisualisierung (Abbildung \ref{fig:Visualisierung}) implementiert.
-\textit{VSSimulatorVisualization} greift auf Java's Grafikbibliothek Java2D zur\"{u}ck und ist aus Performancegr\"{u}nden mit dem Simulationsverlauf stark verzahnt \cite{Games}. Klassenattribute, dessen Wert sich nie \"{a}ndert, wurden stets als \textit{final} deklariert. Attribute, die von Konfigurationen oder Einstellungen abh\"{a}ngig sind, die sich nur nach Konfigurations\"{a}nderung oder Vergr\"{o}ßern beziehungsweise Verkleinern des Simulationsfensters \"{a}ndern (Werte, die f\"{u}r die Berechnung des Sekunden-Gatters notwendig sind), werden nur wenn es n\"{o}tig ist neu berechnet.
+\textit{VSSimulatorVisualization} greift auf Java's Grafikbibliothek Java2D zurück und ist aus Performancegründen mit dem Simulationsverlauf stark verzahnt \cite{Games}. Klassenattribute, dessen Wert sich nie ändert, wurden stets als \textit{final} deklariert. Attribute, die von Konfigurationen oder Einstellungen abhängig sind, die sich nur nach Konfigurationsänderung oder Vergrößern beziehungsweise Verkleinern des Simulationsfensters ändern (Werte, die für die Berechnung des Sekunden-Gatters notwendig sind), werden nur wenn es nötig ist neu berechnet.
\begin{figure}[h]
\centering
@@ -546,32 +546,32 @@ Beim Starten des Simulators wird auf die Main-Methode, welche sich in \textit{VS \label{fig:PackageProtocols}
\end{figure}
-Die Klasse \textit{VSMenuItemStates} wird f\"{u}r die Synchronisierung des Simulationsstatusses, der Toolbar und des Simulations-Men\"{u}s (beide Letztere auf Abbildung \ref{fig:Toolbar} zu sehen) verwendet. Abh\"{a}ngig davon kann der Benutzer bestimmte Aktionen durchf\"{u}hren oder nicht (beispielsweise kann eine Simulation nur pausiert werden, wenn sie aktuell abgespielt wird). Alle hier m\"{o}glichen Aktionen wurden bereits in Kapitel 2.1 im Abschnitt ``Die Toolbar'' behandelt.
+Die Klasse \textit{VSMenuItemStates} wird für die Synchronisierung des Simulationsstatusses, der Toolbar und des Simulations-Menüs (beide Letztere auf Abbildung \ref{fig:Toolbar} zu sehen) verwendet. Abhängig davon kann der Benutzer bestimmte Aktionen durchführen oder nicht (beispielsweise kann eine Simulation nur pausiert werden, wenn sie aktuell abgespielt wird). Alle hier möglichen Aktionen wurden bereits in Kapitel 2.1 im Abschnitt ``Die Toolbar'' behandelt.
Die Klasse \textit{VSCreateTask} wird vom Ereigniseditor verwendet. Der Ereigniseditor (Abbildung \ref{fig:SidebarMitEreignissen}) wird in der Klasse \textit{VSSimulator} implementiert. Hinter jeder Ereignisauswahl verbirgt sich intern ein \textit{VSCreateTask}-Objekt, welches definiert wie das jeweilige Ereignis anzulegen ist.
-\textit{VSLogging} kapselt ein \textit{javax.swing.JTextArea}-Objekt, wo alle Nachrichten geloggt werden. Hier werden alle Loggfunktionen (inklusive Loggfilter sowie tempor\"{a}re Deaktivierung des Loggen) implementiert. Die \textit{JTextArea} wird dem \textit{VSSimulator}-Objekt \"{u}bergeben und dort dargestellt. F\"{u}r den Loggfilter wird intern auf das Java-Standardpaket \textit{java.util.regex} zugegriffen, womit anhand von regul\"{a}ren Ausdr\"{u}cken in Java-Syntax die Loggs gefiltert werden k\"{o}nnen.
+\textit{VSLogging} kapselt ein \textit{javax.swing.JTextArea}-Objekt, wo alle Nachrichten geloggt werden. Hier werden alle Loggfunktionen (inklusive Loggfilter sowie temporäre Deaktivierung des Loggen) implementiert. Die \textit{JTextArea} wird dem \textit{VSSimulator}-Objekt übergeben und dort dargestellt. Für den Loggfilter wird intern auf das Java-Standardpaket \textit{java.util.regex} zugegriffen, womit anhand von regulären Ausdrücken in Java-Syntax die Loggs gefiltert werden können.
\subsection{Threads und Zeitsynchronisierung}
-Ziel vom Simulator is es bis auf jede Millisekunde genau simulieren zu k\"{o}nnen. Jede simulierte Sekunde soll relativ zur echten Zeit fortschreiten. Die Simulationsabspielgeschwindigkeit l\"{a}ßt sich bei den Simulationseinstellungen unter ``Abspielgeschwindigkeit der Simulation'' (Float: \textit{sim.clock.speed}) einstellen. Damit dies gew\"{a}hrleistet wird, muß folgendes ber\"{u}cksichtigt werden:
+Ziel vom Simulator ist es bis auf jede Millisekunde genau simulieren zu können. Jede simulierte Sekunde soll relativ zur echten Zeit fortschreiten. Die Simulationsabspielgeschwindigkeit läßt sich bei den Simulationseinstellungen unter ``Abspielgeschwindigkeit der Simulation'' (Float: \textit{sim.clock.speed}) einstellen. Damit dies gewährleistet wird, muß folgendes berücksichtigt werden:
\begin{itemize}
- \item Das Zeichnen der Visualisierung ben\"{o}tigt pro Aktualisierung einige Millisekunden. Dies ist der Rechenintensivste Teil des Simulators. Hier werden st\"{a}ndig mathematische Berechnungen (wie zum Beispiel die Gerade einer Nachrichtenlinie, die automatische Skalierung des Diagrams die sich automatisch an die Fenstergr\"{o}ße und der Simulationsdauer anpasst und vieles mehr).
- \item Das Neuberechnen der Simulation ben\"{o}tigt pro Aktualisierung einige Millisekunden. Hier wird insbesondere der Task-Manager beansprucht, der \"{u}berpr\"{u}ft, ob Ereignisse auszuf\"{u}hren sind und sie gegebenenfalls dann auch ausf\"{u}hrt.
- \item Jeder simulierte Prozess sollte mit selber Geschwindigkeit fortschreiten, und dies auf jedem Rechner wo der Simulator ausgef\"{u}hrt wird. Da Java-Threads nicht komplett platformunabh\"{a}ngig sind (Threads sind im Betriebssystem implementiert), kann das Verhalten auf verschiedenen Rechnern minimal variieren. Ausserdem \"{u}bernimmt das Betriebssystem die Entscheidung, wann welcher Thread arbeiten darf. Ausser man synchronisiert Threads manuell so, dass sie den eigenen Anspr\"{u}chen entsprechen. Letzteres bedeutet aber auch mehr Programmieraufwand.
- \item Die Simulationszeit ist stets in Millisekunden angegeben, welche in einer \textit{long}-Variable abgespeichert wird. Somit kann eine Simulationszeit immer nur eine ganze Zahl sein. Berechnungsrundungsfehler wegen \textit{sim.clock.speed} m\"{u}ssen ber\"{u}cksichtig werden.
- \item Der Simulator soll nicht st\"{a}ndig die komplette CPU des Anwender-Computers voll beanspruchen.
+ \item Das Zeichnen der Visualisierung benötigt pro Aktualisierung einige Millisekunden. Dies ist der rechen-intensivste Teil des Simulators. Hier werden ständig mathematische Berechnungen (wie zum Beispiel die Gerade einer Nachrichtenlinie, die automatische Skalierung des Diagramms die sich automatisch an die Fenstergröße und der Simulationsdauer anpasst und vieles mehr).
+ \item Das Neuberechnen der Simulation benötigt pro Aktualisierung einige Millisekunden. Hier wird insbesondere der Task-Manager beansprucht, der überprüft, ob Ereignisse auszuführen sind und sie gegebenenfalls dann auch ausführt.
+ \item Jeder simulierte Prozess sollte mit selber Geschwindigkeit fortschreiten, und dies auf jedem Rechner wo der Simulator ausgeführt wird. Da Java-Threads nicht komplett plattformunabhängig sind (Threads sind im Betriebssystem implementiert), kann das Verhalten auf verschiedenen Rechnern minimal variieren. Außerdem übernimmt das Betriebssystem die Entscheidung, wann welcher Thread arbeiten darf. Außer man synchronisiert Threads manuell so, dass sie den eigenen Ansprüchen entsprechen. Letzteres bedeutet aber auch mehr Programmieraufwand.
+ \item Die Simulationszeit ist stets in Millisekunden angegeben, welche in einer \textit{long}-Variable abgespeichert wird. Somit kann eine Simulationszeit immer nur eine ganze Zahl sein. Berechnungsrundungsfehler wegen \textit{sim.clock.speed} müssen berücksichtigt werden.
+ \item Der Simulator soll nicht ständig die komplette CPU des Anwender-Computers voll beanspruchen.
\end{itemize}
-Es wurde folgende relativ einfache L\"{o}sung gew\"{a}hlt, bei der lediglich ein einziger Thread fuer die Visualisierung und die Berechnung der Simulation zust\"{a}ndig ist (alle Zeitangaben sind in Millisekunden). Der Algorithmus verl\"{a}uft leicht vereinfacht in folgender Form ab:
+Es wurde folgende relativ einfache Lösung gewählt, bei der lediglich ein einziger Thread für die Visualisierung und die Berechnung der Simulation zuständig ist (alle Zeitangaben sind in Millisekunden). Der Algorithmus verläuft leicht vereinfacht in folgender Form ab:
\begin{enumerate}
- \item Die simulierte globale Startzeit sei $s$ und die globale Zeit wo die Simulation aufh\"{o}rt sei $e$.
+ \item Die simulierte globale Startzeit sei $s$ und die globale Zeit wo die Simulation aufhört sei $e$.
\item Wenn $s > e$, dann $s := e$ setzen.
\item Neuberechnen und Zeichnen der Visualisierung zum Zeitpunkt $s$. Die dabei verstrichene Zeit sei $v$.
\item Wenn $s = e$, dann Simulation beenden.
- \item F\"{u}r einige Millisekunden den Thread pausieren (schlafen lassen). Hierbei sei $p$ die beim Schlafen verstrichene Zeit.
+ \item Für einige Millisekunden den Thread pausieren (schlafen lassen). Hierbei sei $p$ die beim Schlafen verstrichene Zeit.
\item
\begin{verbatim}
for (i = s; i < s + v + p && i < e; i++)
@@ -580,15 +580,15 @@ for (i = s; i < s + v + p && i < e; i++) \item Bei Punkt 2 mit neuer Startzeit $s := s + v + p$ weitermachen.
\end{enumerate}
-Hinzu kommt noch die Ber\"{u}cksichtigung der Simulationsvariable \textit{sim.clock.speed}, die wegen der \"{U}bersicht im Algorithmus nicht dargestellt wurde. Intern hat der Simulator die echte Zeit und die Simulationszeit abgespeichert. Es werden st\"{a}ndig die verstrichenen echten Zeiten gemessen und anschliessend anhand von \textit{sim.clock.speed} die neuen tats\"{a}chlichen Simulationszeiten berechnet. Rundungsfehler werden pro Durchgang in eine \textit{double}-Variable (Fließkommazahl doppelter Genauigkeit) abgespeichert und wenn der Betrag der Rundungsfehler $>= 1$ ist, dann werden davon die ganzen Werteanteile in der Simulationszeit ber\"{u}cksichtigt.
+Hinzu kommt noch die Berücksichtigung der Simulationsvariable \textit{sim.clock.speed}, die wegen der Übersicht im Algorithmus nicht dargestellt wurde. Intern hat der Simulator die echte Zeit und die Simulationszeit abgespeichert. Es werden ständig die verstrichenen echten Zeiten gemessen und anschließend anhand von \textit{sim.clock.speed} die neuen tatsächlichen Simulationszeiten berechnet. Rundungsfehler werden pro Durchgang in eine \textit{double}-Variable (Fließkommazahl doppelter Genauigkeit) abgespeichert und wenn der Betrag der Rundungsfehler $>= 1$ ist, dann werden davon die ganzen Wertanteile in der Simulationszeit berücksichtigt.
-Jede Simulation besitzt somit seinen eigenen Simulationsthread. Bei mehreren parallel laufenden Simulationen laufen auch mehrere parallele voneinander unabh\"{a}ngige Threads. Des Weiteren gibt es noch den Java Swing-Thread, der f\"{u}r die GUI und der Anwenderinteraktion zust\"{a}ndig ist. Der Anwender kann zu jedem Zeitpunkt in die Simulation eingreifen. Anwendereingriffe werden deswegen synchronisiert, da es ansonsten zu zeitgleichen Zugriffen/\"{A}nderungen gleicher Objekte kommen kann und somit eine Java-Ausnahme geworfen wird die das Stoppen eines Threads verursacht.
+Jede Simulation besitzt somit seinen eigenen Simulationsthread. Bei mehreren parallel laufenden Simulationen laufen auch mehrere parallele voneinander unabhängige Threads. Des Weiteren gibt es noch den Java Swing-Thread, der für die GUI und der Anwenderinteraktion zuständig ist. Der Anwender kann zu jedem Zeitpunkt in die Simulation eingreifen. Anwendereingriffe werden deswegen synchronisiert, da es ansonsten zu zeitgleichen Zugriffen/Änderungen gleicher Objekte kommen kann und somit eine Java-Ausnahme geworfen wird die das Stoppen eines Threads verursacht.
\section{Serialisierung und Deserialisierung von Simulationen}
\subsection{Funktionsweise}
-Der Anwender kann eine erstellte Simulation im Datei-Men\"{u} speichern und/oder eine bereits abgespeicherte Simulation laden. Hierbei wird von den aus Java angebotenen M\"{o}glichkeit Objekte zu Serialisieren gebrauch gemacht. Im Paket \textit{serialize} (Abbildung \ref{fig:PackageSerialize}) befinden sich Helfer, die bei einer Serialisierung und einer Deserialisierung einer Simulation unter die Arme greifen.
+Der Anwender kann eine erstellte Simulation im Datei-Menü speichern und/oder eine bereits abgespeicherte Simulation laden. Hierbei wird von den aus Java angebotenen Möglichkeit Objekte zu Serialisieren Gebrauch gemacht. Im Paket \textit{serialize} (Abbildung \ref{fig:PackageSerialize}) befinden sich Helfer, die bei einer Serialisierung und einer Deserialisierung einer Simulation unter die Arme greifen.
Der Simulator serialisiert nur notwendige Daten, und nicht jedes existierende Objekt. Alle Serialisierbaren Klassen implementieren das Interface \textit{VSSerializable} mit folgenden zwei Methoden:
@@ -597,7 +597,7 @@ Der Simulator serialisiert nur notwendige Daten, und nicht jedes existierende Ob \item \textit{public void deserialize(VSSerialize serialize, ObjectInputStream ois)}: Diese Methode wird bei jedem Deserialisierungsvorgang aufgerufen (beim Laden einer Simulation).
\end{itemize}
-Die Methoden \textit{serialize} und \textit{deserialize} erhalten neben einen Dateistream auch ein \textit{VSSerialize}-Objekt. F\"{u}r jeden (De)serialisierungsvorgang wird ein \textit{VSSerialize}-Objekt erzeugt, welches dabei Hilft die ben\"{o}tigten Aktionen durchzuf\"{u}hren. Eine zu serialisierende Simulation besteht aus vielen voneinander abh\"{a}ngigen Objekten. Jedes Objekt kann dabei Referenzen auf andere Objekte besitzen. W\"{u}rde jedes Objekt komplett serialisiert werden, so w\"{u}rden Objekte, auf denen mehrere Referenzen existieren, in mehrfacher Ausf\"{u}hrung behandelt (in eine Datei abgespeichert) werden. Bei Kreissverweisen (Objekt A hat eine Referenz auf Objekt B und Objekt B hat eine Referenz auf Objekt A als Attribut gespeichert) w\"{u}rde die Serialisierung sogar in einer Endlosschleife enden. \textit{VSSerialize} hilft hierbei dies zu vermeiden und merkt sich Informationen von allen bereits serialisierten Objekten, sodass jedes Objekt nur genau einmal serialisiert wird. Bei der Deserialisierung werden alle Objekte wieder automatisch mit den richtigen Referenzen ausgestattet, wobei kein Objekt doppelt deserialisiert wird.
+Die Methoden \textit{serialize} und \textit{deserialize} erhalten neben einen Dateistream auch ein \textit{VSSerialize}-Objekt. Für jeden (De)serialisierungsvorgang wird ein \textit{VSSerialize}-Objekt erzeugt, welches dabei Hilft die benötigten Aktionen durchzuführen. Eine zu serialisierende Simulation besteht aus vielen voneinander abhängigen Objekten. Jedes Objekt kann dabei Referenzen auf andere Objekte besitzen. Würde jedes Objekt komplett serialisiert werden, so würden Objekte, auf denen mehrere Referenzen existieren, in mehrfacher Ausführung behandelt (in eine Datei abgespeichert) werden. Bei Kreissverweisen (Objekt A hat eine Referenz auf Objekt B und Objekt B hat eine Referenz auf Objekt A als Attribut gespeichert) würde die Serialisierung sogar in einer Endlosschleife enden. \textit{VSSerialize} hilft hierbei dies zu vermeiden und merkt sich Informationen von allen bereits serialisierten Objekten, sodass jedes Objekt nur genau einmal serialisiert wird. Bei der Deserialisierung werden alle Objekte wieder automatisch mit den richtigen Referenzen ausgestattet, wobei kein Objekt doppelt deserialisiert wird.
\begin{figure}[h]
\centering
@@ -606,9 +606,9 @@ Die Methoden \textit{serialize} und \textit{deserialize} erhalten neben einen Da \label{fig:PackageSerialize}
\end{figure}
-Alle Klassen, die \textit{VSSerializePrefs} erweitern, k\"{o}nnen automatisch s\"{a}mtliche Einstellungen komfortabel serialisieren und deserialiseren. Beispielsweise speichert ein Simulator (\textit{VSSimulator}) alle seine globalen Simulationseinstellungen bei einer Serialisierung automatisch ab. Bei den Prozessen und den Ereignissen (und somit auch Protokollen) gilt selbiges analog.
+Alle Klassen, die \textit{VSSerializePrefs} erweitern, können automatisch sämtliche Einstellungen komfortabel serialisieren und deserialiseren. Beispielsweise speichert ein Simulator (\textit{VSSimulator}) alle seine globalen Simulationseinstellungen bei einer Serialisierung automatisch ab. Bei den Prozessen und den Ereignissen (und somit auch Protokollen) gilt selbiges analog.
-Abgespeicherte Simulationen sollen auch mit zuk\"{u}nftigen Versionen des Simulators kompatibel bleiben. Deshalb werden alle Objekte derjenigen Klassen, die \textit{VSSerializable} implementieren, nicht komplett serialisiert. Bei der Serialisierung werden nur relevante Klassenattriute, die der Simulationsprogrammierung- und nicht bispielsweise GUI-komponenten angeh\"{o}ren, serialisiert.
+Abgespeicherte Simulationen sollen auch mit zukünftigen Versionen des Simulators kompatibel bleiben. Deshalb werden alle Objekte derjenigen Klassen, die \textit{VSSerializable} implementieren, nicht komplett serialisiert. Bei der Serialisierung werden nur relevante Klassenattribute, die der Simulationsprogrammierung- und nicht beispielsweise GUI-Komponenten angehören, serialisiert.
\subsection{Beispielimplementierung einer \textit{serialize}-Methode}
@@ -628,14 +628,14 @@ Der folgende Quelltext-Ausschnitt zeigt eine Beispielimplementierung von \textit }
\end{code}
-Vor- und nach der eigenlichen Objektserialisierung wird jeweils ein boolsches Flag serialisiert, welches auf \textit{true} gesetzt wird, sobald in sp\"{a}teren Simulator-Versionen (was relativ unwahrscheinlich, aber m\"{o}glich ist) weitere zu serialisierende Klassenattribute hinzukommen. Eine Deserialisiernug kann die Flags dann abfragen und separat behandeln. Somit bleiben \"{a}ltere bereits abgespeicherte Simulationen stets zur neusten Version des Simulators kompatibel. Wenn ein Flag auf \textit{true} gesetzt wird, dann kann unter den neuen Attributserialisierungen ein weiteres Flag gesetzt werden. Somit k\"{o}nnen beliebig viele Erweiterungen in die Serialisierung Einzug halten.
+Vor- und nach der eigentlichen Objektserialisierung wird jeweils ein boolesches Flag serialisiert, welches auf \textit{true} gesetzt wird, sobald in späteren Simulator-Versionen (was relativ unwahrscheinlich, aber möglich ist) weitere zu serialisierende Klassenattribute hinzukommen. Eine Deserialisierung kann die Flags dann abfragen und separat behandeln. Somit bleiben ältere bereits abgespeicherte Simulationen stets zur neusten Version des Simulators kompatibel. Wenn ein Flag auf \textit{true} gesetzt wird, dann kann unter den neuen Attributserialisierungen ein weiteres Flag gesetzt werden. Somit können beliebig viele Erweiterungen in die Serialisierung Einzug halten.
-Das zu serialisierende Objekt besitzt hier lediglich zwei Attribute, die serialisiert werden sollen. Alle anderen Klassenattribute k\"{o}nnen vernachl\"{a}ßigt werden. Mit \textit{serialize.setObject} speichert \textit{serialize} eine Referenz auf das aktuelle Objekt ab, worauf andere Objektserialisierungen zur\"{u}ckgreifen k\"{o}nnen. Danach wird ein \textit{prefs} und \textit{someOtherSerializableObject} serialisiert. Die Deserialisierung folgt genau den Umgekehrten weg. Wobei hier zuerst die Instanzen der Klassen auf normalen Weg erstellt werden und dann nachtr\"{a}glich die relevanten Attribute deserialisiert und den Objekten zugewiesen werden. Hierbei werden auch mithilfe von \textit{VSSerialize} mehrere Referenzen auf das selbe Objekt korrekt behandelt.
+Das zu serialisierende Objekt besitzt hier lediglich zwei Attribute, die serialisiert werden sollen. Alle anderen Klassenattribute können vernachlässigt werden. Mit \textit{serialize.setObject} speichert \textit{serialize} eine Referenz auf das aktuelle Objekt ab, worauf andere Objektserialisierungen zurückgreifen können. Danach wird ein \textit{prefs} und \textit{someOtherSerializableObject} serialisiert. Die Deserialisierung folgt genau den Umgekehrten weg. Wobei hier zuerst die Instanzen der Klassen auf normalen Weg erstellt werden und dann nachträglich die relevanten Attribute deserialisiert und den Objekten zugewiesen werden. Hierbei werden auch mithilfe von \textit{VSSerialize} mehrere Referenzen auf das selbe Objekt korrekt behandelt.
-Wenn der Anwender \textit{Datei $\rightarrow$ Simulation speichern} w\"{a}hlt, dann wird zun\"{a}chst ein \textit{VSSerialize}-Objekt erstellt. Ausgehend davon wird \textit{serialize} auf \textit{VSSimulator} ausgef\"{u}hrt (siehe Serialisierungssequenz auf Abbildung \ref{fig:SequenceSerialize}). Das Simulator-Objekt f\"{u}hrt \textit{serialize} wiederum auf das \textit{VSSimulatorVisualization}-Objekt aus. Dort wird jeder Prozess inklusive alle Protokollobjekte serialisiert. Anschliessend folgt der Task-Manager inklusive allen programmierten Ereignissen.
+Wenn der Anwender \textit{Datei $\rightarrow$ Simulation speichern} wählt, dann wird zunächst ein \textit{VSSerialize}-Objekt erstellt. Ausgehend davon wird \textit{serialize} auf \textit{VSSimulator} ausgeführt (siehe Serialisierungssequenz auf Abbildung \ref{fig:SequenceSerialize}). Das Simulator-Objekt führt \textit{serialize} wiederum auf das \textit{VSSimulatorVisualization}-Objekt aus. Dort wird jeder Prozess inklusive alle Protokollobjekte serialisiert. Anschließend folgt der Task-Manager inklusive allen programmierten Ereignissen.
-\section{Helferklassen und Klassen f\"{u}r Ausnahmebehandlungen}
+\section{Helferklassen und Klassen für Ausnahmebehandlungen}
\begin{figure}[h]
\centering
@@ -647,14 +647,14 @@ Wenn der Anwender \textit{Datei $\rightarrow$ Simulation speichern} w\"{a}hlt, d Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:PackageUtils}) sowie \textit{exceptions} (Abbildung \ref{fig:PackageExceptions}) vorgestellt. \textit{utils} fasst lediglich einige Helferklassen zusammen, die vom restlichen Quelltext verwendet werden.
\begin{itemize}
- \item \textit{VSFrame}: Alle Objekte, die ein eigenes Swing-Fenster besitzen, erben von der Klasse \textit{VSFrame}. Sie stellt sicher, dass neue Fenster an der richtigen Position der Bildf\"{a}che platziert werden und dass Unterfenster (Fenster, die aus einem anderen Fenster aus ge\"{o}ffnet wurden) automatisch mitgeschlossen werden, sobald ihre ``Erzeugerfenster'' geschlossen werden.
- \item \textit{VSAboutFrame}: Dieses Fenster implementiert die ``About-Anzeige'' die im Simulator \"{u}ber das Datei-Men\"{u} aufgerufen werden kann.
- \item \textit{VSInfoArea}: Ist f\"{u}r die Textanzeige in \textit{VSAboutFrame} zust\"{a}ndig.
- \item \textit{VSClassLoader}: Diese Klasse wird f\"{u}r die automatische Instanzierung von Ereignisobjekten ben\"{o}tigt, wenn dem Simulator lediglich die Klassennamen (aus \textit{events.VSRegisteredEvents}) bekannt sind.
- \item \textit{VSHelper}: In dieser Klasse befinden sich statische Hilfsmethoden, die in keine andere Klasse passen.
- \item \textit{VSPriorityQueue}: Diese Klasse wird f\"{u}r das Verwalten von \textit{core.VSTask}-Objekte im Task-Manager ben\"{o}tigt. \textit{VSPriorityQueue} passt die Priorit\"{a}ts-Warteschlange aus der Java-Standardbibliothek den Anforderungen des Simulators an.
- \item \textit{VSRandom}: Wird f\"{u}r Zufallsereignisse ben\"{o}tigt. Jedes Prozessobjekt besitzt einen solchen eigenen Pseudozufallsgenerator. Diese Klasse setzt gleichzeitig einen eigenen Seed basierend auf der lokalen Systemzeit und anderer Berechnungen fest.
- \item \textit{VSTupel}: Diese Klasse ist eine Implementierung eines sehr einfach aufgebauten 3-Tupel Datentyps. Alle 3 Elemente k\"{o}nnen von einem anderen Typ sein, was mithilfe der Java-Generics verwirklicht wurde. \textit{VSTupel} wird von den Editorklassen f\"{u}r die Generierung von GUI-Elementen ben\"{o}tigt.
+ \item \textit{VSFrame}: Alle Objekte, die ein eigenes Swing-Fenster besitzen, erben von der Klasse \textit{VSFrame}. Sie stellt sicher, dass neue Fenster an der richtigen Position der Bildfläche platziert werden und dass Unterfenster (Fenster, die aus einem anderen Fenster aus geöffnet wurden) automatisch mit-geschlossen werden, sobald ihre ``Erzeugerfenster'' geschlossen werden.
+ \item \textit{VSAboutFrame}: Dieses Fenster implementiert die ``About-Anzeige'' die im Simulator über das Datei-Menü aufgerufen werden kann.
+ \item \textit{VSInfoArea}: Ist für die Textanzeige in \textit{VSAboutFrame} zuständig.
+ \item \textit{VSClassLoader}: Diese Klasse wird für die automatische Instantiierung von Ereignisobjekten benötigt, wenn dem Simulator lediglich die Klassennamen (aus \textit{events.VSRegisteredEvents}) bekannt sind.
+ \item \textit{VSHelper}: In dieser Klasse befinden sich statische Helfermethoden, die in keine andere Klasse passen.
+ \item \textit{VSPriorityQueue}: Diese Klasse wird für das Verwalten von \textit{core.VSTask}-Objekte im Task-Manager benötigt. \textit{VSPriorityQueue} passt die Prioritäts-Warteschlange aus der Java-Standardbibliothek den Anforderungen des Simulators an.
+ \item \textit{VSRandom}: Wird für Zufallsereignisse benötigt. Jedes Prozessobjekt besitzt einen solchen eigenen Pseudozufallsgenerator. Diese Klasse setzt gleichzeitig einen eigenen Seed basierend auf der lokalen Systemzeit und anderer Berechnungen fest.
+ \item \textit{VSTupel}: Diese Klasse ist eine Implementierung eines sehr einfach aufgebauten 3-Tupel Datentyps. Alle 3 Elemente können von einem anderen Typ sein, was mithilfe der Java-Generics verwirklicht wurde. \textit{VSTupel} wird von den Editorklassen für die Generierung von GUI-Elementen benötigt.
\end{itemize}
\begin{figure}[h]
@@ -664,7 +664,7 @@ Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:P \label{fig:PackageExceptions}
\end{figure}
-Im Paket \textit{exceptions} befinden sich lediglich einige Objekte die f\"{u}r Ausnahmebehandlungen verwendet werden. \textit{VSNotCopyableException} wird w\"{a}hrend einem Kopierversuch eines nicht-kopierbaren Ereignis geworfen. \textit{VSNegatieNumberException} wird geworfen, wenn intern negative Zahlen dort auftreten wo sie es nicht sollten. Wenn ein Editorobjekt die Benutzereingabe einer Integer-Vektor-Variable nicht parsen kann, so greifen es auf \textit{VSParseIntegerVectorException} zur\"{u}ck.
+Im Paket \textit{exceptions} befinden sich lediglich einige Objekte die für Ausnahmebehandlungen verwendet werden. \textit{VSNotCopyableException} wird während einem Kopierversuch eines nicht-kopierbaren Ereignis geworfen. \textit{VSNegatieNumberException} wird geworfen, wenn intern negative Zahlen dort auftreten wo sie es nicht sollten. Wenn ein Editorobjekt die Benutzereingabe einer Integer-Vektor-Variable nicht parsen kann, so greifen es auf \textit{VSParseIntegerVectorException} zurück.
\begin{figure}
\centering
@@ -677,33 +677,33 @@ Im Paket \textit{exceptions} befinden sich lediglich einige Objekte die f\"{u}r \section{Programmierrichtlinien}
-Die Programmierrichtlinien \cite{Richtlinien} entsprechen in den meisten F\"{a}llen denen aus der Vorlesung \cite{OOS}. Die Main-Methode befindet sich in der Klasse \textit{simulator.VSMain}.
+Die Programmierrichtlinien \cite{Richtlinien} entsprechen in den meisten Fä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 großen Buchstaben, w\"{a}hrend alle Variablen-, Methoden- und Attributnamen mit kleinen Buchstaben beginnen. Namen finaler Variablen und Attribute sind komplett in Großbuchstaben gehalten.
+ \item Alle Klassen- und Interfacenamen beginnen mit großen Buchstaben, während alle Variablen-, Methoden- und Attributnamen mit kleinen Buchstaben beginnen. Namen finaler Variablen und Attribute sind komplett in Großbuchstaben 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 Alle Quelltext-Dateien sind vollständig mit Javadoc dokumentiert worden.
\item Der komplette Quelltext inklusive Dokumentation werden 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 Eine Quelltext-Datei hat eine maximale Zeilenlänge von 80 Zeichen. Eine Ausnahme stellt die Klasse \textit{prefs.VSDefaultPrefs} dar, denn hier befinden sich auch längere Texte die in Strings abgespeichert werden, wo manuelle Zeilenumbrü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 Für die Einrückung des Quelltextes wird das Tool \textit{astyle} mit den Aufrufparametern \textit{--style=java --mode=java} verwendet. Hierbei wird eine Einrückungslä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.
+ \item Namen aller Klassen und Interfaces tragen als Prefix stets \textit{VS}, was für Verteilte Systeme steht.
\item Namen aller Protokollklassen tragen als Postfix \textit{Protocol} (zum Beispiel \textit{VSPingPongProtocol}).
- \item \"{U}berall wo es Sinn ergibt werden Java-Generic-Datentypen verwendet (z.B. \textit{java.util.Vector<Integer>} anstelle von \textit{java.util.Vector}.
+ \item überall wo es Sinn ergibt werden Java-Generic-Datentypen verwendet (z.B. \textit{java.util.Vector<Integer>} anstelle von \textit{java.util.Vector}.
\end{itemize}
\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 ausschließlich 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.
+In diesem Teilkapitel soll ein kleiner Einblick in die Umgebung, in der der Simulator entwickelt wurde, gewährt werden. Für diese Diplomarbeit wurde ausschließlich Open Source Software verwendet. Die einzige Ausnahme stellt Microsoft Windows XP dar, worauf der Simulator zusätzlich getestet wurde. Der Simulator wurde jedoch hauptsä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 sowie OpenOffice.org durchgef\"{u}hrt. xPDF diente als PDF-Anzeigeprogramm.
+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ählt und für die Quelltextdokumentation kam Javadoc- und für die automatische Quelltexteinrückung astyle zum Einsatz. Als Built-Tool wurde hier auf Apache Ant gesetzt. Für die Erstellung dieses PDF-Dokumentes wurde LaTeX in Verbindung mit dem Built-Tool GNU Make und Rubber verwendet. Eine Rechtschreibüberprüfung wurde mit aspell sowie OpenOffice.org durchgefü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. Mozilla Firefox diente f\"{u}r das Betrachten der Javadocs und der WebSVN-Oberfl\"{a}che.
+Als Versionierungssystem wurde SVN (Subversion) verwendet. Für den Zugriff auf das SVN-Repository mittels HTTPS (Hypertext Transfer Protocol Secure) wurde der Apache-Webserver mit WebDAV-Plugin verwendet. Zudem kam WebSVN als Webschnittstelle des SVN-Repository zum Einsatz. Mozilla Firefox diente für das Betrachten der Javadocs und der WebSVN-Oberflä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.
+Für schreiben von Java-Quelltext wurde GVim (Graphical Vi IMproved) sowie Eclipse verwendet. Eclipse unterstützt bessere Code-Refactoring-Methoden, während GVim mit seiner Flexibilität und schnelleren Editiermöglichkeiten und mit Vim-Script, der eigenen Script-Engine, glänzt. Es wurden außerdem das JAutoDoc- (für die Erstellung von Javadoc-Kommentare) und das Subversion-Eclipse-Plugin verwendet. Je nach Zweck wurde zwischen diesen beiden Umgebungen gewechselt. Fü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 dem zip-Programm wurden alle VS-Simulator Distributionen verpackt.
+Sämtliche UML-Diagramme wurden mit ArgoUML angefertigt und die Screenshots mit The GIMP (GNU Image Manipulation Program) sowie ImageMagick nachbearbeitet. Mit dem zip-Programm wurden alle VS-Simulator Distributionen verpackt.
\subsubsection{Linkliste der verwendeten Software}
diff --git a/LaTeX/chapters/introduction.tex b/LaTeX/chapters/introduction.tex index 5cd6eb8..0ff4fd1 100644 --- a/LaTeX/chapters/introduction.tex +++ b/LaTeX/chapters/introduction.tex @@ -2,19 +2,19 @@ \section{Motivation} -In der Literatur findet man viele verschiedene Definitionen eines verteilten Systems. Vieler dieser Definitionen unterschieden sich untereinander, so dass es schwer f\"{a}llt eine Definition zu finden, die als Alleinige als die Richtige gilt. Andrew Tanenbaum und Marten van Steen haben f\"{u}r die Beschreibung eins verteilten Systems die Folgende lockere Charakterisierung formuliert: +In der Literatur findet man viele verschiedene Definitionen eines verteilten Systems. Vieler dieser Definitionen unterschieden sich untereinander, so dass es schwer fällt eine Definition zu finden, die als Alleinige als die Richtige gilt. Andrew Tanenbaum und Marten van Steen haben für die Beschreibung eins verteilten Systems die Folgende lockere Charakterisierung formuliert: -\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''} +\cite{Tanenbaum} \textit{``Ein verteiltes System ist eine Menge voneinander unabhängiger Computer, die dem Anwender wie ein einzelnes, kohärentes System erscheinen''} -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. +Der Anwender muss sich nur mit dem lokalen vor ihm befindenden Computer auseinandersetzen, wä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 relevante 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önnen. -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. +Um dieses Ziel zu erreichen soll ein Simulator entwickelt werden. Der Simulator soll insbesondere für Lehr- und Lernzwecke an der Fachhochschule Aachen entwickelt werden. Beispielsweise sollen Protokolle aus den verteilten Systemen mit ihren wichtigsten Einflussfaktoren simuliert werden können. Der Simulator soll zu verstehen helfen wie die gegebenen Protokolle funktionieren und es soll viel Spielraum für eigene Experimente zur Verfügung stehen. Der Simulator soll nicht auf eine feste Anzahl von Protokollen beschränkt sein. Es muss daher dem Gebraucher ermöglicht werden, eigene Protokolle zu entwerfen. \section{Grundlagen} -F\"{u}r das Grundverst\"{a}ndnis werden im Folgenden einige Grundlagen erl\"{a}utert. Eine Vertiefung findet erst in den sp\"{a}teren Kapiteln statt. +Für das Grundverständnis werden im Folgenden einige Grundlagen erläutert. Eine Vertiefung findet erst in den späteren Kapiteln statt. \subsubsection{Client/Server Modell} @@ -25,15 +25,15 @@ 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. +Der Simulator basiert auf dem Client/Server Prinzip. Jeder Simulation besteht in der Regel aus einen teilnehmenden Client und einen Server, die miteinander über Nachrichten kommunizieren (Abbildung \ref{fig:ClientServer}). Bei komplexen Simulationen können auch mehrere Clients und/oder Server mitwirken. \subsubsection{Prozesse und deren Rollen} -Ein verteiltes System wird anhand von Prozessen simuliert. Jeder Prozess nimmt hierbei eine oder mehrere Rollen ein. Beispielsweise kann ein Prozess die Rolle eines Clients einnehmen und ein weiterer Prozess die Rolle eines Servers. Ein Prozess kann auch Client und Server gleichzeitig sein. Es besteht auch die M\"{o}glichkeit, dass ein Prozess die Rollen mehrerer Server und Clients gleichzeitig einnimmt. Ob das sinnvoll ist h\"{a}ngt vom simulierten Szenario ab. Um einen Prozess zu kennzeichnen besitzt jeder Prozess eine \textbf{eindeutige} Prozess-Identifikationsnummer (PID). +Ein verteiltes System wird anhand von Prozessen simuliert. Jeder Prozess nimmt hierbei eine oder mehrere Rollen ein. Beispielsweise kann ein Prozess die Rolle eines Clients einnehmen und ein weiterer Prozess die Rolle eines Servers. Ein Prozess kann auch Client und Server gleichzeitig sein. Es besteht auch die Möglichkeit, dass ein Prozess die Rollen mehrerer Server und Clients gleichzeitig einnimmt. Ob das sinnvoll ist hängt vom simulierten Szenario ab. Um einen Prozess zu kennzeichnen besitzt jeder Prozess eine \textbf{eindeutige} Prozess-Identifikationsnummer (PID). \subsubsection{Nachrichten} -In einem verteiltem System m\"{u}ssen Nachrichten verschickt werden k\"{o}nnen. Eine Nachricht kann von einem Client- oder Serverprozess verschickt werden und kann beliebig viele Empf\"{a}nger haben. Der Inhalt einer Nachricht h\"{a}ngt vom verwendeten Protokoll ab. Was unter einem Protokoll zu verstehen ist, wird sp\"{a}ter behandelt. Um eine Nachricht zu kennzeichnen besitzt jede Nachricht eine \textbf{eindeutige} Nachrichten-Identifikationsnummer (NID). +In einem verteiltem System müssen Nachrichten verschickt werden können. Eine Nachricht kann von einem Client- oder Serverprozess verschickt werden und kann beliebig viele Empfänger haben. Der Inhalt einer Nachricht hängt vom verwendeten Protokoll ab. Was unter einem Protokoll zu verstehen ist, wird später behandelt. Um eine Nachricht zu kennzeichnen besitzt jede Nachricht eine \textbf{eindeutige} Nachrichten-Identifikationsnummer (NID). \subsubsection{Lokale und globale Uhren} @@ -46,20 +46,19 @@ In einer Simulation gibt es \textbf{genau eine} globale Uhr. Sie stellt die aktu \label{fig:ClientServerProtokolle} \end{figure} -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. +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ö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äter genauer eingegangen. -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. +Neben den normalen Uhren sind auch die Vektor-Zeitstempel sowie die logischen Uhren von Lamport von Interesse. Jeder Prozess besitzt zusätzlich einen Vektor-Zeitstempel für seine Vektorzeit, sowie einen Lamportzeitstempel für seine Lamportzeit. Für die Vektor- und Lamportzeiten gibt es hier, im Gegensatz zu der normalen Zeit, keine globalen äquivalente. Konkrete Beispiele zu den Lamport- und Vektorzeiten werden spä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. 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. +Eine Simulation besteht aus der Hintereinanderausführung von endlich vielen Ereignissen. Beispielsweise kann es ein Ereignis geben, welches einen Prozess eine Nachricht verschicken lässt. Denkbar wäre auch ein Prozessabsturzereignis. Jedes Ereignis tritt zu einem bestimmten Zeitpunkt ein. Ereignisse mit selber Eintrittszeit werden vom Simulator direkt hintereinander ausgeführt. Den Anwendern des Simulators hindert dies jedoch nicht, da Ereignisse aus seiner Sicht parallel ausgeführt werden können. \subsubsection{Protokolle} -Eine Simulation besteht auch aus der Anwendung von Protokollen. Es wurde bereits erw\"{a}hnt, dass ein Prozess die Rollen von Servern und/oder Clients annehmen kann. Bei jeder Server- und Clientrolle muss zus\"{a}tzlich das dazugeh\"{o}rige Protokoll spezifiziert werden. Ein Protokoll definiert, wie ein Client und ein Server Nachrichten verschickt und wie bei Ankunft einer Nachricht reagiert wird. Ein Protokoll legt auch fest, welche Daten in einer Nachricht enthalten sind. Ein Prozess verarbeitet eine empfangene Nachricht nur, wenn er das jeweilige Protokoll versteht. +Eine Simulation besteht auch aus der Anwendung von Protokollen. Es wurde bereits erwähnt, dass ein Prozess die Rollen von Servern und/oder Clients annehmen kann. Bei jeder Server- und Clientrolle muss zusätzlich das dazugehörige Protokoll spezifiziert werden. Ein Protokoll definiert, wie ein Client und ein Server Nachrichten verschickt und wie bei Ankunft einer Nachricht reagiert wird. Ein Protokoll legt auch fest, welche Daten in einer Nachricht enthalten sind. Ein Prozess verarbeitet eine empfangene Nachricht nur, wenn er das jeweilige Protokoll versteht. -In Abbildung \ref{fig:ClientServerProtokolle} sind 3 Prozesse dargestellt. Prozess 1 unterst\"{u}tzt serverseitig das Protokoll ``A'' und clientseitig das Protokoll ``B''. Prozess 2 unterst\"{u}tzt clientseitig das Protokoll ``A'' und Prozess 3 serverseitig das Protokoll ``B''. Das heißt, dass Prozess 1 mit Prozess 2 via Protokoll ``A'' und mit Prozess 3 via Protokoll ``B'' kommunizieren kann. Die Prozesse 2 und 3 sind zueinander inkompatibel und k\"{o}nnen voneinander erhaltene Nachrichten nicht verarbeiten. - -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. +In Abbildung \ref{fig:ClientServerProtokolle} sind 3 Prozesse dargestellt. Prozess 1 unterstützt serverseitig das Protokoll ``A'' und clientseitig das Protokoll ``B''. Prozess 2 unterstützt clientseitig das Protokoll ``A'' und Prozess 3 serverseitig das Protokoll ``B''. Das heißt, dass Prozess 1 mit Prozess 2 via Protokoll ``A'' und mit Prozess 3 via Protokoll ``B'' kommunizieren kann. Die Prozesse 2 und 3 sind zueinander inkompatibel und können voneinander erhaltene Nachrichten nicht verarbeiten. +Clients können nicht mit Clients, und Server nicht mit Server kommunizieren. Für eine Kommunikation wird stets mindestens ein Client und ein Server benötigt. Diese Einschränkung kann aber umgangen werden, indem Prozesse ein gegebenes Protokoll sowohl server- als auch clientseitig unterstützen (siehe Broadcast-Sturm Protokoll später). Alle vom Simulator verfügbaren Protokolle werden später genauer behandelt. diff --git a/LaTeX/chapters/simulator.tex b/LaTeX/chapters/simulator.tex index 6a0f20d..6a3e162 100644 --- a/LaTeX/chapters/simulator.tex +++ b/LaTeX/chapters/simulator.tex @@ -1,6 +1,6 @@ \chapter{Der Simulator}
-\section{Grafische Benutzeroberfl\"{a}che (GUI)}
+\section{Grafische Benutzeroberfläche (GUI)}
\begin{figure}[h]
\centering
@@ -9,16 +9,16 @@ \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 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 anschließend 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äßt sich mit dem Befehl \textit{java -jar VS-Sim.jar} starten und präsentiert sich danach wie auf Abbildung \ref{fig:NeuesFenster}. Für die Erstellung einer neuen Simulation wird im Menü ``Datei'' (Abbildung \ref{fig:DateiMenue}) der Punkt ``Neue Simulation'' ausgewählt, wo anschließend das Einstellungsfenster für die neue Simulation erscheint. Auf die einzelnen Optionen wird später genauer eingegangen und es werden nun nur die Standardeinstellungen übernommen. Die GUI mit einer frischen Simulation sieht aus wie auf Abbildung \ref{fig:NeuErstellteSimulation}.
-\subsubsection{Die Men\"{u}zeile}
+\subsubsection{Die Menüzeile}
-Im Datei-Men\"{u} (Abbildung \ref{fig:DateiMenue}) lassen sich neue Simulationen erstellen oder die aktuell ge\"{o}ffnete Simulation schließen. 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.
+Im Datei-Menü (Abbildung \ref{fig:DateiMenue}) lassen sich neue Simulationen erstellen oder die aktuell geöffnete Simulation schließen. Neue Simulationen öffnen sich standardmäßig in einem neuen Tab. Es können allerdings auch neue Simulationsfenster, die wiederum eigene Tabs besitzen, geöffnet oder geschlossen werden. In jedem Tab befindet sich eine von den Anderen vollständig unabhängige Simulation. Es können somit beliebig viele Simulationen parallel ausgeführt werden. Die Menüeinträge ``öffnen'', ``Speichern'' und ``Speichern unter'' dienen für das Laden und Speichern von Simulationen.
\begin{figure}[h]
\centering
\fbox{\includegraphics[width=6.5cm]{images/ss-datei-menu}}
- \caption{Datei-Men\"{u}}
+ \caption{Datei-Menü}
\label{fig:DateiMenue}
\end{figure}
@@ -29,29 +29,29 @@ Im Datei-Men\"{u} (Abbildung \ref{fig:DateiMenue}) lassen sich neue Simulationen \label{fig:NeuErstellteSimulation}
\end{figure}
-\"{U}ber das Editieren-Men\"{u} gelangt der Anwender zu den Simulationseinstellungen, worauf sp\"{a}ter genauer eingegangen wird. In diesem Men\"{u} werden auch alle beteiligten Prozesse zum Editieren aufgelistet. W\"{a}hlt der Anwender dort einen Prozess aus, dann \"{o}ffnet sich der dazugeh\"{o}rige Prozesseditor. Auf diesen wird ebenso sp\"{a}ter genauer eingegangen. Das Simulator-Men\"{u} bietet die selben Optionen wie die Toolbar, welche im n\"{a}chsten Teilkapitel beschrieben wird, an.
+über das Editieren-Menü gelangt der Anwender zu den Simulationseinstellungen, worauf später genauer eingegangen wird. In diesem Menü werden auch alle beteiligten Prozesse zum Editieren aufgelistet. Wählt der Anwender dort einen Prozess aus, dann öffnet sich der dazugehörige Prozesseditor. Auf diesen wird ebenso später genauer eingegangen. Das Simulator-Menü bietet die selben Optionen wie die Toolbar, welche im nächsten Teilkapitel beschrieben wird, an.
-Einige Men\"{u}unterpunkte sind erst erreichbar, wenn im aktuellen Fenster bereits eine Simulation erstellt oder geladen wurde.
+Einige Menüunterpunkte sind erst erreichbar, wenn im aktuellen Fenster bereits eine Simulation erstellt oder geladen wurde.
\subsubsection{Die Toolbar}
-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.
+Oben links im Simulator befindet sich die Toolbar (Abbildung \ref{fig:Toolbar}). Die Toolbar enthält die Funktionen die vom Anwender am häufigsten benötigt werden.
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}
+ \caption{Die Menüzeile inklusive Toolbar}
\label{fig:Toolbar}
\end{figure}
\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 und noch nicht abgelaufen ist.
+ \item Zurücksetzen der Simulation; kann nur betätigt werden, wenn die Simulation pausiert wurde oder wenn die Simulation abgelaufen ist.
+ \item Wiederholen der Simulation; kann nicht betätigt werden, wenn die Simulation noch nicht gestartet wurde.
+ \item Pausieren der Simulation; kann nur betätigt werden, wenn die Simulation derzeit läuft.
+ \item Starten der Simulation; kann nur betätigt werden, wenn die Simulation derzeit nicht läuft und noch nicht abgelaufen ist.
\end{itemize}
\newpage
@@ -64,7 +64,7 @@ Die Toolbar bietet vier verschiedene Funktionen an: \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. 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.
+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ü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}[h]
\centering
@@ -73,31 +73,31 @@ Mittig rechts befindet sich die grafische Simulationsvisualisierung. Die X-Achse \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.
+Die Prozessbalken dienen auch fü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ä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.
+Eine andere Möglichkeit einen Prozesseditor aufzurufen ist ein Linksklick auf den zum Prozess gehörigen Prozessbalken. Dies muss also nicht immer über das Simulator-Menü geschehen. Ein Rechtsklick hingegen öffnet ein Popup-Fenster mit weiteren Auswahlmöglichkeiten (Abbildung \ref{fig:RechtsklickProzessbalken}). Ein Prozess kann über das Popup-Menü nur wä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.
+Generell kann die Anzahl der Prozesse nach belieben variieren. Die Dauer der Simulation beträgt mindestens \textit{5} und hö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.
+Farben helfen dabei die Vorgänge einer Simulation besser zu deuten. Standardmäßig werden die Prozesse (Prozessbalken) und Nachrichten mit den Farben wie in Tabelle \ref{tb:Farben} aufgelistet dargestellt. Dies sind lediglich die Standardfarben, welche über die Einstellungen geändert werden können.
\begin{table}
\fbox{
\begin{tabular}{c|l}
\textbf{Prozessfarbe} & \textbf{Bedeutung} \\
\hline
- Schwarz & Die Simulation l\"{a}uft derzeit nicht\\
+ Schwarz & Die Simulation läuft derzeit nicht\\
\hline
- Orange & Die Maus befindet sich \"{u}ber den Prozessbalken\\
+ Orange & Die Maus befindet sich über den Prozessbalken\\
\hline
- Rot & Der Prozess ist abgest\"{u}rzt\\
+ Rot & Der Prozess ist abgestürzt\\
& \\
\textbf{Nachrichtenfarbe} & \textbf{Bedeutung} \\
\hline
- Gr\"{u}n & Die Nachricht ist noch unterwegs und hat das Ziel noch nicht erreicht\\
+ Grün & Die Nachricht ist noch unterwegs und hat das Ziel noch nicht erreicht\\
\hline
Blau & Die Nachricht hat das Ziel erfolgreich erreicht\\
\hline
@@ -118,7 +118,7 @@ Farben helfen dabei die Vorg\"{a}nge einer Simulation besser zu deuten. Standard \label{fig:Sidebar}
\end{figure}
-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.
+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öglichkeit ``Alle Prozesse'' auszuwählen, womit die Ereignisse aller Prozesse gleichzeitig verwaltet werden können. Unter ``Lokale Ereignisse'' versteht man diejenigen Ereignisse, die auftreten, wenn eine bestimmte lokale Zeit des dazugehörigen Prozesses eingetreten ist. Die darunterliegende Ereignistabelle listet alle programmierten Ereignisse (hier noch keine vorhanden) mitsamt Eintrittszeiten sowie den PIDs auf.
\begin{figure}[h]
\centering
@@ -127,7 +127,7 @@ Mithilfe der Sidebar lassen sich Prozessereignisse programmieren. Oben auf Abbil \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.
+Fü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ügen'' wählen, oder unterhalb der Ereignistabelle ein Ereignis auswählen (Abbildung \ref{fig:Ereignisauswahl}), im darunter liegenden Textfeld die Ereigniseintrittszeit eintragen und auf ``übernehmen'' gehen. Beispielsweise wurden auf Abbildung \ref{fig:SidebarMitEreignissen} drei Ereignisse hinzugefü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
@@ -136,9 +136,9 @@ F\"{u}r die Erstellung eines neuen Ereignisses kann der Anwender entweder mit ei \label{fig:Ereignisauswahl}
\end{figure}
-Mit einem Rechtsklick auf den Ereigniseditor lassen sich alle selektierten Ereignisse entweder kopieren oder l\"{o}schen. Mithilfe der Strg-Taste k\"{o}nnen auch mehrere Ereignisse gleichzeitig markiert werden. Die Eintr\"{a}ge der Spalten f\"{u}r die Zeit und der PID lassen sich nachtr\"{a}glich editieren. Somit besteht eine komfortable M\"{o}glichkeit bereits programmierte Ereignisse auf eine andere Zeit zu verschieben oder einen anderen Prozess zuzuweisen. Allerdings sollte der Anwender darauf achten, dass er nach dem \"{A}ndern der Ereigniseintrittszeit die Enter-Taste bet\"{a}tigt, da sonst die \"{A}nderung unwirksam ist.
+Mit einem Rechtsklick auf den Ereigniseditor lassen sich alle selektierten Ereignisse entweder kopieren oder löschen. Mithilfe der Strg-Taste können auch mehrere Ereignisse gleichzeitig markiert werden. Die Einträge der Spalten für die Zeit und der PID lassen sich nachträglich editieren. Somit besteht eine komfortable Möglichkeit bereits programmierte Ereignisse auf eine andere Zeit zu verschieben oder einen anderen Prozess zuzuweisen. Allerdings sollte der Anwender darauf achten, dass er nach dem ändern der Ereigniseintrittszeit die Enter-Taste betätigt, da sonst die Änderung unwirksam ist.
-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 (Abbildung \ref{fig:NeueSimulationVariablen} links). 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.
+In der Sidebar gibt es neben dem Ereignis-Tab einen weiteren Tab ``Variablen''. Hinter diesem Tab verbirgt sich der Prozesseditor des aktuell ausgewählten Prozesses (Abbildung \ref{fig:NeueSimulationVariablen} links). Dort können alle Variablen des Prozesses editiert werden und ist somit eine weitere Möglichkeit einen Prozesseditor aufzurufen. Der Prozesseditor wird später genauer behandelt.
\subsubsection{Das Loggfenster}
@@ -150,11 +150,11 @@ In der Sidebar gibt es neben dem Ereignis-Tab einen weiteren Tab ``Variablen''. \label{fig:Loggfenster}
\end{figure}
-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.
+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ührt. Letztere werden später genauer behandelt. Hinter den Zeitangaben werden weitere Angaben, wie beispielsweise welche Nachricht mit welchem Inhalt verschickt wurde und welchem Protokoll sie angehört, gemacht. Dies wird spä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.
+Mit dem Deaktivieren des Logging-Schalters läßt sich das Loggen von Nachrichten temporär ausstellen. Mit deaktiviertem Loggen werden keine neuen Nachrichten mehr ins Loggfenster geschrieben. Nach Reaktivieren des Schalters werden alle ausgelassenen Nachrichten nachträglich in das Fenster geschrieben. Ein deaktiviertes Loggen kann zu verbessertem Leistungsverhalten des Simulators führen (z.B. kein Rucklen; ist vom verwendeten Computer, auf dem der Simulator läuft, abhängig). Dieser Umstand ist der sehr langsamen Java-Implementierung der JTextArea-Klasse zu verdanken, die schnelle Updates nur sehr träge durchführt.
-\"{U}ber den Schalter ``Expertenmodus'' wird der Expertenmodus aktiviert beziehungsweise deaktiviert.
+über den Schalter ``Expertenmodus'' wird der Expertenmodus aktiviert beziehungsweise deaktiviert.
\section{Expertenmodus}
@@ -165,17 +165,17 @@ Mit dem Deaktivieren des Logging-Schalters l\"{a}ßt sich das Loggen von Nachrich \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 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:
+Der Simulator kann in zwei verschiedenen Modi betrieben werden. Es gibt einen einfachen- und einen Expertenmodus. Der Simulator startet standardmäßig im einfachen Modus, sodass sich der Anwender nicht mit der vollen Funktionalität des Simulators auf einmal auseinandersetzen muß. Der einfache Modus ist übersichtlicher, bietet jedoch weniger Funktionen an. Der Expertenmodus eignet sich mehr für erfahrene Anwender und bietet dementsprechend auch mehr Flexibilität. Der Expertenmodus kann über den gleichnamigen Schalter unterhalb des Loggfensters oder ü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}
-Der erste Unterschied ist in der Sidebar erkennbar (Abbildung \ref{fig:SidebarExpertenmodus}). Dort sind nun, zus\"{a}tzlich den lokalen Ereignissen, auch globale Ereignisse editierbar. Wie bereits erw\"{a}hnt sind unter lokale Ereignisse diejenigen Ereignisse zu verstehen, die auftreten, wenn eine bestimmte lokale Zeit des dazugeh\"{o}rigen Prozesses eingetreten ist. Globale Ereignisse hingegen sind diejenigen Ereignisse, die auftreten, wenn eine bestimmte globale Zeit eingetreten ist. Ein globales Ereignis nimmt die globale Zeit- und ein lokales Ereignis die lokale Prozesszeit als Eintrittskriterium. Globale Ereignisse machen somit nur einen Unterschied, wenn sich die lokalen Prozesszeiten von der globalen Zeit unterscheiden.
+Der erste Unterschied ist in der Sidebar erkennbar (Abbildung \ref{fig:SidebarExpertenmodus}). Dort sind nun, zusätzlich den lokalen Ereignissen, auch globale Ereignisse editierbar. Wie bereits erwähnt sind unter lokale Ereignisse diejenigen Ereignisse zu verstehen, die auftreten, wenn eine bestimmte lokale Zeit des dazugehörigen Prozesses eingetreten ist. Globale Ereignisse hingegen sind diejenigen Ereignisse, die auftreten, wenn eine bestimmte globale Zeit eingetreten ist. Ein globales Ereignis nimmt die globale Zeit- und ein lokales Ereignis die lokale Prozesszeit als Eintrittskriterium. Globale Ereignisse machen somit nur einen Unterschied, wenn sich die lokalen Prozesszeiten von der globalen Zeit unterscheiden.
-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.
+Des Weiteren kann der Anwender bei der Programmierung eines neuen Ereignisses direkt die dazugehörige PID selektieren. Im einfachen Modus wurde hier immer standardmäßig die PID des aktuell (in der obersten Combo-Box) ausgewä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}
-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.
+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 Übersichtlichkeit nicht leidet, kann der Anwender nur jeweils einen dieser beiden Schalter zur gleichen Zeit aktiviert haben.
\begin{figure}[h]
\centering
@@ -184,15 +184,15 @@ Weitere Unterschiede machen sich unterhalb des Loggfensters bemerkbar. Dort gibt \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.
+Der Anti-Aliasing-Schalter ermöglicht dem Anwender Anti-Aliasing zu aktivieren beziehungsweise zu deaktivieren. Mit Anti-Aliasing werden alle Grafiken der Visualisierung gerundet dargestellt. Aus Performance-gründen ist Anti-Aliasing standardmäß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.
+Je komplexer eine Simulation wird, desto unübersichtlicher werden die Einträge im Loggfenster. Hier fällt es zunehmend schwerer die Übersicht aller Ereignisse zu behalten. Um dem entgegenzuwirken gibt es im Expertenmodus einen Loggfilter, welcher es ermöglicht nur die wesentlichen Daten aus den Loggs zu filtern.
-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 wird anhand dem dazugehörigen Schalter ``Filter'' aktiviert und deaktiviert. In der dahinterliegenden Eingabezeile kann ein regulä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äre Ausdruck passt. Der Loggfilter kann auch nachträglich aktiviert werden, da bereits protokollierte Ereignisse nach jeder Filteränderung erneut gefiltert werden.
-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.
+Der Loggfilter kann auch wä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äglich angezeigt.
\begin{figure}[h]
\centering
@@ -203,14 +203,14 @@ Der Loggfilter kann auch w\"{a}hrend einer laufenden Simulation verwendet werden \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 sp\"{a}ter 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ä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ühren einer Aktion aufgrund eines Weckers, worauf spä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, außer wiederbelebt werden. W\"{a}hrend eines Prozessabsturzes l\"{a}uft die lokale Prozessuhr, abgesehen der Lamport- und Vektor-Uhren, normal weiter. Das heißt 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.
+Die beiden einfachsten Ereignisse sind ``Prozessabsturz'' sowie ``Prozesswiederbelebung''. Wenn ein Prozess abgestürzt ist, so wird sein Prozessbalken in rot dargestellt. Ein abgestü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ürzter Prozess kann nichts, außer wiederbelebt werden. Während eines Prozessabsturzes läuft die lokale Prozessuhr, abgesehen der Lamport- und Vektor-Uhren, normal weiter. Das heißt es besteht die Möglichkeit, dass ein Prozess einige seiner Ereignisse gar nicht ausführt, da er zu den Ereigniseintrittszeiten abgestürzt ist. Wenn im echten Leben ein Computer abstürzt oder abgeschaltet wird, dann läuft seine Hardware-Uhr unabhä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 somit die Auswahl zwischen f\"{u}nf verschiedenen Protokollereignistypen:
+Es ist bereits bekannt, dass ein Prozess mehrere Protokolle client- und auch serverseitig unterstützen kann. Welches Protokoll von einem Prozess unterstützt wird, kann der Anwender anhand von Protokollaktivierungs- und Protokolldeaktivierungsereignissen konfigurieren. Somit besteht die Möglichkeit, dass ein gegebener Prozess ein bestimmtes Protokoll erst zu einem bestimmten Zeitpunkt unterstützt und gegebenenfalls ein anderes Protokoll ablöst. Jedes Protokoll kann entweder server- oder clientseitig aktiviert beziehungsweise deaktiviert werden. Welche Protokolle es gibt wird später behandelt. Der Anwender hat somit die Auswahl zwischen fünf verschiedenen Protokollereignistypen:
\begin{itemize}
\item Aktivierung des Clients eines gegebenen Protokolls
@@ -220,19 +220,19 @@ 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 Anfragen. Es gibt kein Protokoll, wo der Client und der Server jeweils Anfragen starten k\"{o}nnen.
+Ob sich das Ereignis für das Starten einer Anfrage auf einen Client oder einen Server bezieht hängt vom verwendeten Protokoll ab. Es gibt Protokolle, wo der Client die Anfragen starten muss, und es gibt Protokolle, wo der Server diese Aufgabe ü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ö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ängt wird zuerst überprüft, ob er das dazugehörige Protokoll unterstützt. Wenn der Prozess das Protokoll unterstützt wird geschaut, ob es sich um eine Client- oder eine Servernachricht handelt. Wenn es sich um eine Clientnachricht handelt, so muß der Empfangsprozess das Protokoll serverseitig unterstützen und virce versa. Wenn alles passt, dann führt der Empfangsprozess die vom Protokoll definierten Aktionen aus. In der Regel berechnet der Prozess einen bestimmten Wert und schickt ihn über eine Antwortnachricht zurück. Es können aber auch beliebig andere Aktionen ausgeführt werden. Welche dies sind hängt vom Protokoll ab.
\subsubsection{Callback-Ereignisse (nicht-programmierbar)}
-Ein Callback-Ereignis kann von einem Protokoll ausgel\"{o}st werden. Das Protokoll setzt einen Wecker, der angibt zur welcher lokalen Uhrzeit eine weitere Aktion ausgef\"{u}hrt werden soll. Zum Beispiel lassen sich hiermit Timeouts realisieren: Wenn ein Protokoll eine Antwort erwartet, diese aber nicht eintrifft, dann kann nach einer bestimmten Zeit eine Anfrage erneut verschickt werden! Es k\"{o}nnen beliebig viele Callback-Ereignisse definiert werden. Wenn sie noch nicht ausgef\"{u}hrt wurden und aufgrund eines anderen Ereignisses nicht mehr ben\"{o}tigt werden, dann k\"{o}nnen sie vom Protokoll wieder nachtr\"{a}glich entfernt werden. Wenn ein Callback-Ereignis ausgef\"{u}hrt wird, dann kann es sich selbst wieder f\"{u}r eine weitere Ausf\"{u}hrung erneut planen. So lassen sich periodisch wieder-eintreffende Ereignisse realisieren. Beispielsweise verwenden die ``Commit-Protokolle'' (mehr dazu sp\"{a}ter) Callback-Ereignisse, indem solange Anfragen verschickt werden, bis alle ben\"{o}tigten Antworten vorliegen.
+Ein Callback-Ereignis kann von einem Protokoll ausgelöst werden. Das Protokoll setzt einen Wecker, der angibt zur welcher lokalen Uhrzeit eine weitere Aktion ausgeführt werden soll. Zum Beispiel lassen sich hiermit Timeouts realisieren: Wenn ein Protokoll eine Antwort erwartet, diese aber nicht eintrifft, dann kann nach einer bestimmten Zeit eine Anfrage erneut verschickt werden! Es können beliebig viele Callback-Ereignisse definiert werden. Wenn sie noch nicht ausgeführt wurden und aufgrund eines anderen Ereignisses nicht mehr benötigt werden, dann können sie vom Protokoll wieder nachträglich entfernt werden. Wenn ein Callback-Ereignis ausgeführt wird, dann kann es sich selbst wieder für eine weitere Ausführung erneut planen. So lassen sich periodisch wieder-eintreffende Ereignisse realisieren. Beispielsweise verwenden die ``Commit-Protokolle'' (mehr dazu später) Callback-Ereignisse, indem solange Anfragen verschickt werden, bis alle benötigten Antworten vorliegen.
\subsubsection{Zufallsereignisse (nicht-programmierbar)}
-Die Eintrittszeit eines Zufallsereignisses wird vom Simulator zuf\"{a}llig gew\"{a}hlt. Es besteht lediglich die M\"{o}glichkeit die Wahrscheinlichkeit, dass das Ereignis \"{u}berhaupt eintritt, einzustellen. Ein Beispiel ist ein zuf\"{a}lliger Prozessabsturz, dessen Wahrscheinlichkeit unter den Prozessvariablen konfiguriert werden kann. Diese Variable wird im Abschnitt \"{u}ber den Prozesseditor noch ausf\"{u}hrlicher beschrieben.
+Die Eintrittszeit eines Zufallsereignisses wird vom Simulator zufällig gewählt. Es besteht lediglich die Möglichkeit die Wahrscheinlichkeit, dass das Ereignis überhaupt eintritt, einzustellen. Ein Beispiel ist ein zufälliger Prozessabsturz, dessen Wahrscheinlichkeit unter den Prozessvariablen konfiguriert werden kann. Diese Variable wird im Abschnitt über den Prozesseditor noch ausführlicher beschrieben.
\section{Einstellungen}
@@ -243,21 +243,21 @@ Die Eintrittszeit eines Zufallsereignisses wird vom Simulator zuf\"{a}llig gew\" \begin{tabular}{l|l}
\textbf{Typ} & \textbf{Beschreibung}\\
\hline
- \textit{Boolean} & Boolscher Wert, z.B. \textit{true} oder \textit{false}\\
+ \textit{Boolean} & Boolescher Wert, z.B. \textit{true} oder \textit{false}\\
\textit{Color} & Java-Farbobjekt\\
\textit{Float} & 32-Bit Fließkommazahl\\
- \textit{Integer[]} & Vektor aus 32-Bit Integern\\
+ \textit{Integer[]} & Vektor aus 32-Bit Integer\\
\textit{Integer} & 32-Bit Integer\\
\textit{Long} & 64-Bit Long\\
\textit{String} & Java-Stringobjekt\\
\end{tabular}
}
- \caption{Verf\"{u}gbare Datentypen f\"{u}r editierbare Variablen}
+ \caption{Verfügbare Datentypen für editierbare Variablen}
\label{tb:VariablenDatentypen}
\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 (Client- sowie Serverseite) f\"{u}r jeden Prozess separat eingestellt werden.
+In diesem Abschnitt wird genauer auf die möglichen Konfigurationsmöglichkeiten eingegangen. Zunächst gibt es globale Simulationseinstellungen. Diese beinhalten Variablen die die gesamte Simulation betreffen. Zudem hat jeder Prozess seine eigenen lokale Einstellungen. Darüber hinaus kann jedes Protokoll (Client- sowie Serverseite) für jeden Prozess separat eingestellt werden.
\subsection{Variablendatentypen}
@@ -269,14 +269,14 @@ 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}). 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.
+Der Simulator unterscheidet zwischen mehreren Datentypen, in denen die einstellbaren Variablen vorliegen kö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äter) angezeigt. Der Variablenname wird vom Simulator lediglich für die interne Verwendung benötigt. Im folgenden bedeutet \textit{Typ: varname = wert}, dass die Variable vom Typ \textit{Typ} ist, der interne Variablenname \textit{varname} lautet, und standardmäßig den Wert \textit{wert} zugewiesen hat. Vom Anwender lassen sich lediglich die Variablenwerte, jedoch nicht die Variablentypen, Variablennamen und Beschreibungen, ä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.
+Beim Erstellen einer neuen Simulation erscheint zunächst das dazugehörige Einstellungsfenster (Abbildung \ref{fig:Simulationseinstellungen}). In der Regel reicht es, wenn der Anwender hier, bis auf die Anzahl beteiligter Prozesse, die Standardwerte übernimmt. Es besteht auch die Möglichkeit die Einstellungen nachträ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, Namen und die Standardwerte an, in denen die Variablen vorliegen.
+Im Folgenden werden alle in den Simulationseinstellungen verfügbaren Variablen beschrieben. Die Klammern geben die Typen, Namen und die Standardwerte an, in denen die Variablen vorliegen.
\begin{figure}[h]
\centering
@@ -287,52 +287,52 @@ Im Folgenden werden alle in den Simulationseinstellungen verf\"{u}gbaren Variabl \begin{itemize}
- \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 (siehe Prozesseinstellungen sp\"{a}ter). 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{Prozesse empfangen eigene Nachrichten} \textit{(Boolean: sim.message.own.recv = false)}: Standardmäßig können Prozesse keine Nachrichten empfangen, die sie selbst verschickt haben. Dies trägt zur Übersichtlichkeit der Simulation bei. Wenn diese Variable jedoch auf \textit{true} gesetzt wird, dann kann ein Prozess auch selbst verschickte Nachrichten empfangen und auf diese ebenso antworten. Die Zeit für das Versenden und Empfangen einer Nachricht an sich selbst beträgt jedoch stets \textit{0ms}. Diese Variable sollte mit Vorsicht verwendet werden, da bedingt durch den \textit{0ms} Endlosschleifen entstehen kö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ängige zufällige Verlustwahrscheinlichkeit. Wenn diese Option aktiviert ist, so wird die der Mittelwert aus den Verlustwahrscheinlichkeiten vom Sender- und Empfangsprozess gebildet. Ansonsten wird stets die Verlustwahrscheinlichkeit, die beim Senderprozesses angegeben wurde, verwendet.
+ \item \textbf{Mittelwerte der Übertragungszeiten bilden} \textit{(Boolean: sim.message.sendingtime.mean = true)}: Jede Nachricht die verschickt wird hat, je nach Einstellungen, eine vom verschickenden Prozess abhängige zufällige Übertragungszeit bis sie ihr Ziel erreicht (siehe Prozesseinstellungen später). Wenn diese Option aktiviert ist, so wird der Mittelwert vom Sender- und Empfangsprozess gebildet. Ansonsten wird stets die Ü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örige Protokoll nicht unterstützt, nicht angezeigt. Dies verbessert die Übersicht.
+ \item \textbf{Expertenmodus aktivieren} \textit{(Boolean: sim.mode.expert = false)}: Hier lässt sich der Expertenmodus aktivieren beziehungsweise deaktivieren. Alternativ kann dies ü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.
+ Lamport- und Vektorzeitstempel werden spä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ä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äglich via Rechtsklick auf den Prozessbalken den jeweiligen Prozess aus der Simulation entfernen oder weitere Prozesse hinzufü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.
+Die weiteren Simulationseinstellungen unter ``Einstellungen für neue Prozesse'' sowie ``Nachrichteneinstellungen für neue Prozesse'' geben lediglich Standardwerte an, die für neu zu erstellende Prozesse verwendet werden. Die dort verfügbaren Variablen werden im folgenden Teilkapitel genauer beschrieben.
\subsection{Prozess- und Protokolleinstellungen}
-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.
+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önnen. Auf allen drei Wegen kommt jeweils der selbe Prozesseditor zum Vorschein.
\begin{itemize}
- \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 Fließkommazahlen 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{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äuft. Ein Wert von \textit{1.0} wü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ückwärts laufen könnte. Bei allen anderen Werten wird die Einstellung wieder automatisch auf \textit{0.0} gesetzt. Da der Simulator intern mit Fließkommazahlen doppelter Genauigkeit arbeitet, kann es zu kleinen, jedoch vernachlässigbaren, Rundungsfehlern kommen.
+ \item \textbf{Prozessausfallwahrscheinlichkeit} \textit{(Integer: process.prob.crash = 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob der gegebene Prozess während der Simulation zufällig abstürzt. Die Wahrscheinlichkeit bezieht sich auf die komplette Simulationsdauer. Bei einer Einstellung von \textit{100} Prozent und der Simulationsdauer von \textit{15} Sekunden stürzt der Prozess auf jeden Fall zwischen \textit{0ms} und \textit{15000ms} ab. An welcher Stelle dies geschieht wird zufällig bestimmt. Wenn der Prozess nach seinem Absturz wiederbelebt wird, stürzt er nicht noch einmal zufällig ab. Dies gilt allerdings nicht, wenn die Prozesseinstellungen nach dem Zufallsabsturz erneut geändert und übernommen werden, da dann das Zufallsabstü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.
- \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.
+ \item \textbf{Nachrichtenverlustwahrscheinlichkeit} \textit{(Integer: message.prob.crash = 0)}: Gibt eine Wahrscheinlichkeit in Prozent an, ob eine vom aktuell ausgewählten Prozess verschickte Nachricht unterwegs verloren geht. An welcher Stelle die Nachricht zwischen dem Sende- und Empfangsprozess verloren geht wird vom Simulator zufällig gewählt.
+ \item \textbf{Maximale Übertragungszeit} \textit{(Long: message.sendingtime.max = 2000)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht maximal benötigt, bis sie einen Empfangsprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{max}$ bezeichnet.
+ \item \textbf{Minimale Übertragungszeit} \textit{(Long: message.sendingtime.min = 500)}: Gibt die Dauer in Millisekunden an, die eine vom Prozess verschickte Nachricht minimal benötigt, bis sie einen Empfangsprozess erreicht. Im weiteren Verlauf wird dieser Wert mit $t_{min}$ bezeichnet.
-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. Wenn die aktuelle globale Zeit $t_g$ ist und die Simulationseinstellung ``Mittelwerte der \"{U}bertragungszeiten'' nicht aktiv ist, dann wird die Ereigniseintrittszeit $t_e$ f\"{u}r den Empfang der Nachricht wie folgt berechnet:
+Wenn die Übertragungszeiten von Nachrichten immer exakt die selbe Zeit in Anspruch nehmen sollen, dann müssen alle Prozesseinstellungen mit $t_{min} = t_{max}$ konfiguriert werden. Wenn die aktuelle globale Zeit $t_g$ ist und die Simulationseinstellung ``Mittelwerte der Übertragungszeit'' nicht aktiv ist, dann wird die Ereigniseintrittszeit $t_e$ für den Empfang der Nachricht wie folgt berechnet:
\begin{equation*}
t_e := t_g + rand(t_{min}, t_{max})
\end{equation*}
-Das heißt, 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:
+Das heißt, dass die Nachricht nach einer zufälligen Zeit zwischen $t_{min}$ und $t_{max}$ beim Empfänger eintrifft. Für jeden Empfänger wird hierbei ein neuer Zufalls-wert gewählt. Für den Fall, dass die Einstellung ``Mittelwerte der Übertragungszeiten wählen'' aktiviert ist, und wenn $t'_{min}$ und $t'_{max}$ die beim Empfangsprozess eingestellten Werte entsprechen, 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*}
-Das heißt, dass stets der Mittelwert der Nachrichten\"{u}bertragungszeiten des Sender- und Empf\"{a}ngerprozesses verwendet wird.
+Das heißt, dass stets der Mittelwert der Nachrichtenübertragungszeiten des Sender- und Empfangsprozesses verwendet wird.
\end{itemize}
-Im selben Fenster lassen sich auch die Protokollvariablen editieren. Die Protokollvariablen werden jedoch sp\"{a}ter bei den Protokollen beschrieben.
+Im selben Fenster lassen sich auch die Protokollvariablen editieren. Die Protokollvariablen werden jedoch später bei den Protokollen beschrieben.
\subsection{Einstellungen im Expertenmodus}
@@ -340,20 +340,20 @@ Im selben Fenster lassen sich auch die Protokollvariablen editieren. Die Protoko \centering
\fbox{
\begin{tabular}{l|l}
- \textbf{Schl\"{u}ssel} & \textbf{Beschreibung}\\
+ \textbf{Schlüssel} & \textbf{Beschreibung}\\
\hline
\textit{col.background} & Die Hintergrundfarbe der Simulation\\
\textit{col.message.arrived} & Nachrichtenfarbe wenn sie ihr Ziel erreicht hat\\
\textit{col.message.lost} & Nachrichtenfarbe wenn sie verloren ging\\
\textit{col.message.sending} & Nachrichtenfarbe wenn sie noch unterwegs ist\\
- \textbf{\textit{col.process.crashed}} & Prozessfarbe wenn er abgest\"{u}rzt ist\\
- \textbf{\textit{col.process.default}} & Prozessfarbe wenn die Simulation aktuell nicht l\"{a}uft und \\
- & der Prozess aktuell nicht abgest\"{u}rzt ist \\
- \textbf{\textit{col.process.highlight}} & Prozessfarbe wenn die Maus \"{u}ber seinem Balken liegt\\
+ \textbf{\textit{col.process.crashed}} & Prozessfarbe wenn er abgestürzt ist\\
+ \textbf{\textit{col.process.default}} & Prozessfarbe wenn die Simulation aktuell nicht läuft und \\
+ & der Prozess aktuell nicht abgestürzt ist \\
+ \textbf{\textit{col.process.highlight}} & Prozessfarbe wenn die Maus über seinem Balken liegt\\
\textit{col.process.line} & Farbe, in der die kleine ``Prozessfane'' an der auch die \\
& lokale Prozesszeit angegeben wird, dargestellt wird\\
- \textbf{\textit{col.process.running}} & Prozessfarbe wenn er nicht abgest\"{u}rzt ist und die\\
- & Simulation aktuell l\"{a}uft\\
+ \textbf{\textit{col.process.running}} & Prozessfarbe wenn er nicht abgestürzt ist und die\\
+ & Simulation aktuell läuft\\
\textit{col.process.secondline} & Farbe in der die Sekunden-Zeitgitter dargestellt werden \\
\textit{col.process.sepline} & Farbe der globalen Zeitachse\\
\textbf{\textit{col.process.stopped}} & Prozessfarbe wenn die Simulation pausiert wurde\\
@@ -363,18 +363,18 @@ Im selben Fenster lassen sich auch die Protokollvariablen editieren. Die Protoko \label{tb:Farbeinstellungen}
\end{table}
-Im Expertenmodus lassen sich zus\"{a}tzliche Variablen, wie beispielsweise diverse Farbwerte und Anzahl oder Pixel verschiedener der GUI-Elemente, editieren. Auf Abbildung \ref{fig:SimulationseinstellungenExperten} sieht der Anwender alle einstellbaren Farben. Die fett-gedruckten Schl\"{u}ssel in Tabelle \ref{tb:Farbeinstellungen} dienen nur als Standardwerte f\"{u}r die neu zu erstellenen Prozesse und sind auch jeweils in den Prozesseinstellungen f\"{u}r jeden Prozess separat editierbar.
+Im Expertenmodus lassen sich zusätzliche Variablen, wie beispielsweise diverse Farbwerte und Anzahl oder Pixel verschiedener der GUI-Elemente, editieren. Auf Abbildung \ref{fig:SimulationseinstellungenExperten} sieht der Anwender alle einstellbaren Farben. Die fett-gedruckten Schlüssel in Tabelle \ref{tb:Farbeinstellungen} dienen nur als Standardwerte für die neu zu erstellenden Prozesse und sind auch jeweils in den Prozesseinstellungen für jeden Prozess separat editierbar.
\newpage
\section{Protokolle}
-Im Folgenden werden alle verf\"{u}gbaren Protokolle behandelt. Wie bereits beschrieben wird bei Protokollen zwischen Server- und Clientseite unterschieden. Server k\"{o}nnen auf Clientnachrichten, und Client auf Servernachrichten antworten. Jeder Prozess kann beliebig viele Protokolle sowohl clientseitig als auch serverseitig unterst\"{u}tzen. Theoretisch ist es auch m\"{o}glich, dass ein Prozess f\"{u}r ein bestimmtes Protokoll gleichzeitig der Server und der Client ist. Der Anwender kann auch weitere eigene Protokolle in der Programmiersprache Java mittels einer speziellen API (Application Programming Interface) erstellen. Wie eigene Protokolle erstellt werden k\"{o}nnen wird sp\"{a}ter behandelt.
+Im Folgenden werden alle verfügbaren Protokolle behandelt. Wie bereits beschrieben wird bei Protokollen zwischen Server- und Clientseite unterschieden. Server können auf Clientnachrichten, und Client auf Servernachrichten antworten. Jeder Prozess kann beliebig viele Protokolle sowohl clientseitig als auch serverseitig unterstützen. Theoretisch ist es auch möglich, dass ein Prozess für ein bestimmtes Protokoll gleichzeitig der Server und der Client ist. Der Anwender kann auch weitere eigene Protokolle in der Programmiersprache Java mittels einer speziellen API (Application Programming Interface) erstellen. Wie eigene Protokolle erstellt werden können wird später behandelt.
-Im mitgelieferten Verzeichnis \textit{saved-simulations} befinden sich alle Beispielsimulationen zum Selbstprobieren als \textit{.dat} (Java-Serialisierungsobjekt) abgespeichert.
+Im mitgelieferten Verzeichnis \textit{saved-simulations} befinden sich alle Beispielsimulationen zum Selbst probieren als \textit{.dat} (Java-Serialisierungsobjekt) abgespeichert.
\subsection{Beispiel (Dummy) Protokoll}
-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.
+Das Dummy-Protokoll dient lediglich als leeres Template für die Erstellung eigener Protokolle. Bei der Verwendung des Dummy-Protokolls werden bei Ereignissen lediglich Loggnachrichten ausgegeben. Es werden aber keine weiteren Aktionen ausgeführt.
\newpage
\subsection{Das Ping-Pong Protokoll \small{\textit{(ping-pong.dat, ping-pong-sturm.dat)}}}
@@ -386,7 +386,7 @@ Das Dummy-Protokoll dient lediglich als leeres Template f\"{u}r die Erstellung e \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.
+Bei dem Ping-Pong Protokoll (Abbildung \ref{fig:PingPongProto}) werden zwischen zwei Prozessen, Client P1 und Server P2, stä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ähler mitgeschickt, der bei jeder Station um eins inkrementiert- und jeweils im Loggfenster protokolliert wird. In Tabelle \ref{tb:PingPongTasks} sind alle für dieses Beispiel programmierten Ereignisse aufgeführt.
\begin{figure}[h]
\centering
@@ -395,9 +395,9 @@ Bei dem Ping-Pong Protokoll (Abbildung \ref{fig:PingPongProto}) werden zwischen \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.
+Wichtig ist, dass Prozess 1 seinen Ping-Pong Client aktiviert, bevor er eine Ping-Pong Clientanfrage startet! Wenn die Eintrittszeiten für die Aktivierung des Protokolls und das Starten der Anfrage identisch sind, so ordnet der Task-Manager (mehr dazu später) diese Ereignisse automatisch in der richtigen Reihenfolge an. Wenn der Ping-Pong Client nicht aktiviert werden würde, dann könnte P1 auch keine Ping-Pong Anfrage starten. Bevor ein Prozess eine Anfrage starten kann, muss er das dazugehörige Protokoll unterstützen beziehungsweise aktiviert haben. Dies gilt natürlich für alle anderen Protokolle analog. Anhand diesem Beispiel ist erkennbar, dass die noch nicht ausgelieferte Nachrichten grün eingefä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.
+Werden die Ereignisse wie in Tabelle \ref{tb:PingPongSturmTasks} abgeändert, so lässt sich ein Ping-Pong Sturm realisieren. Dort wurde ein neuer Prozess 3 eingeführt, der als zusä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örige Simulationsverlauf bis zum Zeitpunkt \textit{12676ms} dargestellt.
\begin{table}
\centering
@@ -466,14 +466,14 @@ Werden die Ereignisse wie in Tabelle \ref{tb:PingPongSturmTasks} abge\"{a}ndert, \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.
+Das Broadcast Protokoll verhält sich ä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.
+Der Server und der Client unterscheiden sich in diesem Fall nicht und führen bei Ankunft einer Nachricht jeweils die selben Aktionen durch. Somit lä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ä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 \small{\textit{(int-sync.dat)}}}
-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:
+Bisher wurden nur Protokolle vorgefü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öchte, so schickt er ihm eine Clientanfrage. Der Server schickt als Antwort seine eigene lokale Prozesszeit $t_s$ zurü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
@@ -482,7 +482,7 @@ Bisher wurden nur Protokolle vorgef\"{u}hrt, in denen die beteiligten Prozesse k \label{fig:TimeSyncProto}
\end{figure}
-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
+Hier (Abbildung \ref{fig:TimeSyncProto}) stellt P1 den Client und P2 den Server dar. Da die Ü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})
@@ -490,7 +490,7 @@ Hier (Abbildung \ref{fig:TimeSyncProto}) stellt P1 den Client und P2 den Server 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.
+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ä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ückzuführen ist. Nach Simulationsende ist die Zeit von P1 bis auf \textit{15000ms} - \textit{15976ms} = \textit{-976ms} synchronisiert.
\begin{table}
\centering
@@ -511,14 +511,14 @@ Der Clientprozess hat in der Abbildung \ref{fig:TimeSyncProto} als Uhrabweichung \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.
+Dieses Protokoll verwendet folgende zwei clientseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``Interne Sync. Client'' konfiguriert werden können. Serverseitig gibt es hier keine Variablen.
\begin{itemize}
- \item \textbf{Min. \"{U}bertragungszeit} \textit{(Long: 500)}: Gibt den Wert $t'_{min}$ in Millisekunden an
- \item \textbf{Max. \"{U}bertragungszeit} \textit{(Long: 2000)}: Gibt den Wert $t'_{max}$ in Millisekunden an
+ \item \textbf{Min. Übertragungszeit} \textit{(Long: 500)}: Gibt den Wert $t'_{min}$ in Millisekunden an
+ \item \textbf{Max. Ü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 große Fehler auftreten k\"{o}nnen.
+$t'_{min}$ und $t'_{max}$ sind die bei den Protokollberechnungen verwendeten Werte. Sie können sich allerdings von den tatsächlichen Nachrichtenübertragungszeiten $t_{min}$ und $t_{max}$ (siehe Sektion über Prozesseinstellungen) unterscheiden. Somit lassen sich auch Szenarien simulieren, in denen das Protokoll falsch eingestellt wurde und wo in der Zeitsynchronisierung große Fehler auftreten können.
\newpage
\subsection{Christians Methode zur externen Synchronisierung \small{\textit{(ext-vs-int-sync.dat)}}}
@@ -530,19 +530,19 @@ $t'_{min}$ und $t'_{max}$ sind die bei den Protokollberechnungen verwendeten Wer \label{fig:TimeSync2Proto}
\end{figure}
-Ein weiteres Protokoll f\"{u}r die Synchronisierung von Uhrzeiten funktioniert nach der Christians Methode zur externen Synchronisierung. Die Christians Methode benutzt die RTT (Round Trip Time) $t_{rtt}$, um die \"{U}bertragungszeiten von einzelnen Nachrichten zu approximieren.
+Ein weiteres Protokoll für die Synchronisierung von Uhrzeiten funktioniert nach der Christians Methode zur externen Synchronisierung. Die Christians Methode benutzt die RTT (Round Trip Time) $t_{rtt}$, um die Übertragungszeit von einzelnen Nachrichten zu approximieren.
-Wenn der Client seine lokale Zeit $t_c$ bei einem Server synchronisieren m\"{o}chte, so verschickt er eine Anfrage, und misst dabei bis zur Ankunft der Serverantwort die dazugeh\"{o}rige RTT $t_{rtt}$. Die Serverantwort beinhaltet die lokale Prozesszeit $t_s$ vom Server von dem Zeitpunkt, als der Server die Antwort verschickte. Der Client setzt dann seine lokale Zeit neu auf:
+Wenn der Client seine lokale Zeit $t_c$ bei einem Server synchronisieren möchte, so verschickt er eine Anfrage, und misst dabei bis zur Ankunft der Serverantwort die dazugehörige RTT $t_{rtt}$. Die Serverantwort beinhaltet die lokale Prozesszeit $t_s$ vom Server von dem Zeitpunkt, als der Server die Antwort verschickte. Der Client setzt dann seine lokale Zeit neu auf:
\begin{equation*}
t_c := t_s + \frac{1}{2} t_{rtt}
\end{equation*}
-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}).
+und zwar mit einer Genauigkeit von $\pm(\frac{1}{2} t_{rtt} - u_{min}$) wenn $u_{min}$ eine Schranke für eine Nachrichtenübertragung mit $t_{rtt} < u_{min}$ ist (siehe \cite{Vorlesung}).
-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}.
+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ü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ä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 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.
+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ührung alle Nachrichten jeweils eine neue zufällige Übertragungszeit zwischen $t_{min}$ und $t_{max}$ haben werden, die auf das eine oder andere Protokoll wieder andere Auswirkungen haben können.
\begin{table}
\centering
@@ -576,11 +576,11 @@ Auf der Abbildung \ref{fig:TimeSync2Proto} ist ablesbar, dass nach Ablauf der Si \label{fig:BerkeleyProto}
\end{figure}
-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.
+Der Berkeley Algorithmus zur internen Synchronisierung ist eine weitere Mö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ü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ässt.
-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.
+Wenn der Server seine eigene lokale Zeit $t_s$ und auch die lokalen Prozesszeiten $t_i$ der Clients ($i = 1, ..., n$) synchronisieren möchte, so verschickt er eine Serveranfrage. $n$ sei hierbei die Anzahl beteiligter Clients. Die Clients senden dann ihre lokalen Prozesszeiten in einer Nachricht zurü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:
+Nachdem alle Antworten vorliegen, setzt er zunächst seine eigene Zeit $t_s$ auf den Mittelwert $t_{avg}$ aller bekannten Prozesszeiten (seiner eigenen Prozesszeit eingeschlossen). Die Übertragungszeit einer Clientantwort wird auf die Hälfte der RTT geschätzt und wird in der Berechnung berücksichtigt:
\begin{equation*}
t_{avg} :=
@@ -595,9 +595,9 @@ Nachdem alle Antworten vorliegen, setzt er zun\"{a}chst seine eigene Zeit $t_s$ t_s := t_{avg}
\end{equation*}
-Anschließend berechnet der Server f\"{u}r jeden Client einen Korrekturwert $k_i := t_{avg} - t_i$, den er jeweils in einer separaten Nachricht zur\"{u}ckschickt. Die Clients setzten dann jeweils die lokale Prozesszeit auf $t'_i := t'_i + k_i$. Hierbei stellt $t'_i$ die derzeit aktuelle Prozesszeit des jeweiligen Clients dar. Denn bis zum Eintreffen des Korrekturwertes ist inzwischen wieder neue Zeit verstrichen.
+Anschließend berechnet der Server für jeden Client einen Korrekturwert $k_i := t_{avg} - t_i$, den er jeweils in einer separaten Nachricht zurückschickt. Die Clients setzten dann jeweils die lokale Prozesszeit auf $t'_i := t'_i + k_i$. Hierbei stellt $t'_i$ die derzeit aktuelle Prozesszeit des jeweiligen Clients dar. Denn bis zum Eintreffen des Korrekturwertes ist inzwischen wieder neue Zeit verstrichen.
-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.
+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ä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ält neben dem Korrekturwert $k_i$ auch die PID des Prozesses, für den die Nachricht bestimmt ist. Indem das Protokoll die PID überprüft verarbeitet ein Client so nur die für ihn bestimmten Korrekturwerte.
\begin{table}
\centering
@@ -620,7 +620,7 @@ Im Beispiel auf Abbildung \ref{fig:BerkeleyProto} gibt es die 2 Clientprozesse P 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 gar nicht 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ützt. In diesem Fall würde ewig auf eine fehlende Clientantwort gewartet werden.
\end{itemize}
\newpage
@@ -633,9 +633,9 @@ Dieses Protokoll verwendet folgende serverseitige Variable, die in den Prozessei \label{fig:OnePhaseCommitProto}
\end{figure}
-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.
+Das Ein-Phasen Commit Protokoll ist dafür gedacht beliebig vielen Clients zu einer Festschreibung zu bewegen. Im realen Leben könnte dies beispielsweise das Erstellen oder Lö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ätigung erhalten hat. Der Server muss dabei die PIDs aller beteiligten Clientprozesse sowie einen Wecker fü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, 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.
+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ünsche verschickt, stürzt in der Simulation P1 nach \textit{1000ms} ab und nach \textit{5000ms} steht er wieder zur Verfügung. Die ersten beide Festschreibewünsche erreichen dadurch P1 nicht und erst der dritte Versuch verläuft erfolgreich. Bevor die Bestätigung von P1 bei P2 eintrifft, läuft jedoch der Wecker erneut ab, sodass ein weiterer Festschreibewunsch versendet wird. Da P1 und P3 jeweils schon eine Bestätigung verschickt haben, wird diese Festschreibewunschnachricht ignoriert. Jeder Client bestätigt auf einen Festschreibewunsch nur ein einziges Mal.
\begin{table}
\centering
@@ -657,7 +657,7 @@ Die programmierten Ereignisse des Beispiels auf Abbildung \ref{fig:OnePhaseCommi \subsubsection{Protokollvariablen}
-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.
+Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``1-Phasen Commit Server'' konfiguriert werden können. Clientseitig gibt es hier keine Variablen.
\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.
@@ -674,9 +674,9 @@ Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesse \label{fig:TwoPhaseCommitProto}
\end{figure}
-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.
+Das Zwei-Phasen Commit Protokoll ist eine Erweiterung des Ein-Phasen Commit Protokolls. Der Server startet zunä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 überprüft der Server, ob alle mit \textit{true} abgestimmt haben. Fü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ä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.
+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übersichtlich ist, liegen in den Tabellen \ref{tb:TwoPhaseCommitLoggs} und \ref{tb:TwoPhaseCommitLoggs2} Auszü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ändig der Inhalt der verschickten Nachricht sowie die dazugehörigen Datentypen aufgeführt. Hier stimmen P1 und P3 jeweils mit \textit{true}, d.h. es soll festgeschrieben werden, ab.
\begin{table}
\centering
@@ -696,17 +696,17 @@ In dem Beispiel (Abbildung \ref{fig:TwoPhaseCommitProto}) sind P1 und P3 Clients \subsubsection{Protokollvariablen}
-Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``2-Phasen Commit Server'' konfiguriert werden k\"{o}nnen:
+Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``2-Phasen Commit Server'' konfiguriert werden kö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 anschließend gegebenenfalls festschreiben sollen.
+ \item \textbf{PIDs beteiliger Prozesse} \textit{(Integer[]: pids = [1,3])}: Dieser Vektor aus Integerwerten beinhaltet alle PIDs der Clientprozesse die über eine Festschreibung abstimmen und anschließend 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.
+ \item \textbf{Festschreibwahrscheinlichkeit} \textit{(Integer: ackProb = 50)}: Gibt die Wahrscheinlichkeit in Prozent an, die der Client mit \textit{true}, also für das Festschreiben, abstimmt.
\end{itemize}
\begin{table}
@@ -835,7 +835,7 @@ Und folgende Clientvariable kann unter den Prozesseinstellungen unter dem Punkt \end{table}
\newpage
-\subsection{Der ungen\"{u}gende (Basic) Multicast \small{\textit{(basic-multicast.dat)}}}
+\subsection{Der ungenügende (Basic) Multicast \small{\textit{(basic-multicast.dat)}}}
\begin{figure}[h]
\centering
@@ -844,11 +844,11 @@ Und folgende Clientvariable kann unter den Prozesseinstellungen unter dem Punkt \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.
+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ür den Empfang einer Nachricht. Es werden keine Bestätigungen verschickt. Wie in Tabelle \ref{tb:BasicMulticastTasks} aufgeführt verschickt P2 alle \textit{2500ms} jeweils eine Multicast-Nachricht, die alle voneinander völlig unabhä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.
+P1 kann jedoch erst nach \textit{2500ms} Multicast-Nachrichten empfangen, da er vorher das Protokoll nicht unterstützt während P3 von \textit{3000ms} bis \textit{6000ms} abgestürzt ist und in dieser Zeit auch keine Nachrichten empfangen kann. Je nach Interpretation könnte P1 einen Server simulieren, der erst spä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.
+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 auf einmal erreicht.
\begin{table}
\centering
@@ -874,7 +874,7 @@ In diesem Beispiel ging die 3. Multicast-Nachricht auf den Weg zu P3- und die 5. \end{table}
\newpage
-\subsection{Der zuverl\"{a}ssige (Reliable) Multicast \small{\textit{(reliable-multicast.dat)}}}
+\subsection{Der zuverlässige (Reliable) Multicast \small{\textit{(reliable-multicast.dat)}}}
\begin{figure}[h]
\centering
@@ -883,41 +883,41 @@ In diesem Beispiel ging die 3. Multicast-Nachricht auf den Weg zu P3- und die 5. \label{fig:ReliableMulticastProto}
\end{figure}
-Bei dem zuverl\"{a}ssigen (Reliable) Multicast verschickt der Client so oft periodisch seine Multicast-Nachricht erneut, bis er von allen beteiligten Servern eine Best\"{a}tigung erhalten hat. Nach jedem erneuten Versuch vergisst der Client, von welchen Servern er bereits eine Best\"{a}tigung erhalten hat, womit jeder erneuter Versuch von allen Teilnehmern aufs Neue best\"{a}tigt werden muss. In dem Beispiel (Abbildung \ref{fig:ReliableMulticastProto}, Tabelle \ref{tb:ReliableMulticastTasks}, sowie den Loggs in den Tabellen \ref{tb:ReliableMulticastLoggs} und \ref{tb:ReliableMulticastLoggs2}) ist P2 der Multicast-verschickende Client, w\"{a}hrend P1 und P3 die Server darstellen. Bei \textit{0ms} initiiert der Client seine Multicast-Nachricht. Die Nachrichtenverlustwahrscheinlichkeiten sind bei allen Prozessen auf \textit{30} Prozent eingestellt.
+Bei dem zuverlässigen (Reliable) Multicast verschickt der Client so oft periodisch seine Multicast-Nachricht erneut, bis er von allen beteiligten Servern eine Bestätigung erhalten hat. Nach jedem erneuten Versuch vergisst der Client, von welchen Servern er bereits eine Bestätigung erhalten hat, womit jeder erneuter Versuch von allen Teilnehmern aufs Neue bestätigt werden muss. In dem Beispiel (Abbildung \ref{fig:ReliableMulticastProto}, Tabelle \ref{tb:ReliableMulticastTasks}, sowie den Loggs in den Tabellen \ref{tb:ReliableMulticastLoggs} und \ref{tb:ReliableMulticastLoggs2}) ist P2 der Multicast-verschickende Client, während P1 und P3 die Server darstellen. Bei \textit{0ms} initiiert der Client seine Multicast-Nachricht. Die Nachrichtenverlustwahrscheinlichkeiten sind bei allen Prozessen auf \textit{30} Prozent eingestellt.
-In diesem Beispiel ben\"{o}tigt der Client bis zur erfolgreichen Auslieferung des zuverl\"{a}ssigen Multicasts genau 5 Versuche:
+In diesem Beispiel benötigt der Client bis zur erfolgreichen Auslieferung des zuverlässigen Multicasts genau 5 Versuche:
\begin{enumerate}
\setlength{\itemsep}{-1mm}
\item Versuch:
\begin{itemize}
\setlength{\itemsep}{-2.5mm}
- \item P1 unterst\"{u}tzt das Reliable-Multicast Protokoll noch nicht, und kann somit weder Multicast-Nachricht erhalten noch eine Best\"{a}tigung verschicken.
- \item P3 empf\"{a}ngt die Multicast-Nachricht, jedoch geht seine Best\"{a}tigungsnachricht verloren.
+ \item P1 unterstützt das Reliable-Multicast Protokoll noch nicht, und kann somit weder Multicast-Nachricht erhalten noch eine Bestätigung verschicken.
+ \item P3 empfängt die Multicast-Nachricht, jedoch geht seine Bestätigungsnachricht verloren.
\end{itemize}
\item Versuch:
\begin{itemize}
\setlength{\itemsep}{-2.5mm}
\item P1: Die Multicast-Nachricht geht unterwegs zu P1 verloren.
- \item P3: Die Multicast-Nachricht erreicht P3, aber P3 ist abgest\"{u}rzt und kann somit keine Nachricht verarbeiten.
+ \item P3: Die Multicast-Nachricht erreicht P3, aber P3 ist abgestürzt und kann somit keine Nachricht verarbeiten.
\end{itemize}
\item Versuch:
\begin{itemize}
\setlength{\itemsep}{-2.5mm}
- \item P1 empf\"{a}ngt die Multicast-Nachricht und seine Best\"{a}tigung kommt wie geplant bei P2 an.
+ \item P1 empfängt die Multicast-Nachricht und seine Bestätigung kommt wie geplant bei P2 an.
\item P3: Die Multicast-Nachricht geht unterwegs zu P3 verloren.
\end{itemize}
\item Versuch:
\begin{itemize}
\setlength{\itemsep}{-2.5mm}
- \item P1 empf\"{a}ngt die Multicast-Nachricht und seine Best\"{a}tigung kommt wie geplant bei P2 an.
- \item P3: Die Multicast-Nachricht erreicht P3, aber P3 ist abgest\"{u}rzt und kann somit keine Nachricht verarbeiten.
+ \item P1 empfängt die Multicast-Nachricht und seine Bestätigung kommt wie geplant bei P2 an.
+ \item P3: Die Multicast-Nachricht erreicht P3, aber P3 ist abgestürzt und kann somit keine Nachricht verarbeiten.
\end{itemize}
\item Versuch:
\begin{itemize}
- \item P1 empf\"{a}ngt die Multicast-Nachricht und seine Best\"{a}tigung kommt wie geplant bei P2 an.
+ \item P1 empfängt die Multicast-Nachricht und seine Bestätigung kommt wie geplant bei P2 an.
\setlength{\itemsep}{-2.5mm}
- \item P3 empf\"{a}ngt die Multicast-Nachricht und seine Best\"{a}tigung kommt wie geplant bei P2 an.
+ \item P3 empfängt die Multicast-Nachricht und seine Bestätigung kommt wie geplant bei P2 an.
\end{itemize}
\end{enumerate}
@@ -1041,7 +1041,7 @@ In diesem Beispiel ben\"{o}tigt der Client bis zur erfolgreichen Auslieferung de \subsubsection{Protokollvariablen}
-Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``Reliable Multicast Server'' konfiguriert werden k\"{o}nnen:
+Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesseinstellungen unter dem Punkt ``Reliable Multicast Server'' konfiguriert werden kö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 Muticast erneut verschickt wird.
@@ -1051,7 +1051,7 @@ Dieses Protokoll verwendet folgende serverseitige Variablen, die in den Prozesse \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.
+Bisher wurden alle verfügbaren Protokolle anhand von Beispielen aufgeführt. Mit dem Simulator lassen sich allerdings noch viel mehr Szenarien simulieren. Daher soll hier auf weitere Anwendungsbeispiele eingegangen werden.
\subsection{Simulation von Vektor- und Lamportzeitstempel}
@@ -1062,13 +1062,13 @@ Bisher wurden alle verf\"{u}gbaren Protokolle anhand von Beispielen aufgef\"{u}h \label{fig:Lamportzeit}
\end{figure}
-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 eines Prozesses der aktuelle 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:
+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 eines Prozesses der aktuelle 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ügt. Wenn ein weiterer Prozess $j$ diese Nachricht erhä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))
\end{equation*}
-Es wird also stets die gr\"{o}ssere Lamportzeit vom Sender- und Empf\"{a}ngerprozess verwendet und anschließend 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.
+Es wird also stets die größere Lamportzeit vom Sender- und Empfangsprozess verwendet und anschließend 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}[h]
\centering
@@ -1077,7 +1077,7 @@ Es wird also stets die gr\"{o}ssere Lamportzeit vom Sender- und Empf\"{a}ngerpro \label{fig:Vektorzeit}
\end{figure}
-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 beigef\"{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. Wenn $v$ der Vektor-Zeitstempel des Empf\"{a}ngerprozesses $j$ ist und $w$ der Vektor-Zeitstempel des Senderprozesses ist, dann wird der neue lokale Vektorzeitstempel wie folgt (hier in Pseudo-Code angegeben) neuberechnet:
+Mit aktiven Vektorzeit-Schalter werden alle Vektor-Zeitstempel angezeigt (Abbildung \ref{fig:Vektorzeit}). Wie bei den Lamportzeitstempel wird auch hier jeder Nachricht der aktuelle Vektor-Zeitstempel des Senderprozesses beigefügt. Bei $n$ beteiligten Prozessen hat der Vektor-Zeitstempel $v$ die Größe $n$. Somit gibt es für jeden beteiligten Prozess $i$ einen eigenen Index $i$. über $v(i)$ kann jeder Prozess auf seinen lokalen Eintrag zugreifen. Wenn $v$ der Vektor-Zeitstempel des Empfangsprozesses $j$ ist und $w$ der Vektor-Zeitstempel des Senderprozesses ist, dann wird der neue lokale Vektorzeitstempel wie folgt (hier in Pseudo-Code angegeben) neu berechnet:
\begin{code}
for (i := 0; i < n; i++) {
@@ -1089,20 +1089,20 @@ for (i := 0; i < n; i++) { }
\end{code}
-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 anschließend 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äßig wird der Vektor-Zeitstempel nur inkrementiert, wenn eine Nachricht verschickt- oder erhalten wird. Bei beiden Fällen inkrementiert der Sender- und Empfangsprozess jeweils seinen eigenen Index im Vektor-Zeitstempel mit $v(i) = v(i) + 1$. Beim Empfang einer Nachricht wird anschließend der lokale Vektor-Zeitstempel mit dem des Senderprozesses verglichen und für alle Indizes stets der größere Wert in den lokalen Vektor-Zeitstempel ü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.
-Wenn w\"{a}hrend einer Simulation Prozesse entfernt- oder neue Prozesse hinzugef\"{u}gt werden, so passt sich die Gr\"{o}ße der Vektor-Zeitstempel aller anderen Prozesse automatisch der totalen Anzahl der Prozesse an.
+Wenn während einer Simulation Prozesse entfernt- oder neue Prozesse hinzugefügt werden, so passt sich die Größe der Vektor-Zeitstempel aller anderen Prozesse automatisch der totalen Anzahl der Prozesse an.
-Wie bereits beschrieben gibt es in den Simulationseinstellungen die boolschen Variablen ``Lamportzeiten betreffen alle Ereignisse'' und ``Vektorzeiten betreffen alle Ereignisse'', die standardm\"{a}ßig auf \textit{false} gesetzt sind. Mit \textit{true} werden alle Ereignisse, und nicht nur der Empfang oder das Versenden einer Nachricht, ber\"{u}cksichtigt. F\"{u}r eine weitere Betrachtung der Lamport- sowie Vektor-Zeitstempel siehe \cite{Vorlesung} oder \cite{Tanenbaum}.
+Wie bereits beschrieben gibt es in den Simulationseinstellungen die boolschen Variablen ``Lamportzeiten betreffen alle Ereignisse'' und ``Vektorzeiten betreffen alle Ereignisse'', die standardmäßig auf \textit{false} gesetzt sind. Mit \textit{true} werden alle Ereignisse, und nicht nur der Empfang oder das Versenden einer Nachricht, berücksichtigt. Für eine weitere Betrachtung der Lamport- sowie Vektor-Zeitstempel siehe \cite{Vorlesung} oder \cite{Tanenbaum}.
\newpage
\subsection{Simulation langsamer Verbindungen \small{\textit{(slow-connection.dat)}}}
-Mit dem Simulator lassen sich auch langsame Verbindungen zu einem bestimmten Prozess simulieren. F\"{u}r die Demonstration wird das Beispiel aus Kapitel 2.5.5 wieder aufgegriffen, wo das Protokoll zur internen Synchronisation (P1) mit der Christians-Methode (P3) parallel simuliert wurden. P2 stellt den Server beider Protokolle zur Verf\"{u}gung. In diesem Szenario soll P3 eine schlechte Netzwerkverbindung besitzen, sodass Nachrichten von- und an P3 stets eine l\"{a}ngere \"{U}bertragungszeit ben\"{o}tigen.
+Mit dem Simulator lassen sich auch langsame Verbindungen zu einem bestimmten Prozess simulieren. Für die Demonstration wird das Beispiel aus Kapitel 2.5.5 wieder aufgegriffen, wo das Protokoll zur internen Synchronisation (P1) mit der Christians-Methode (P3) parallel simuliert wurden. P2 stellt den Server beider Protokolle zur Verfügung. In diesem Szenario soll P3 eine schlechte Netzwerkverbindung besitzen, sodass Nachrichten von- und an P3 stets eine längere Übertragungszeit benötigen.
-Die Ereignisse sind so wie bereits auf Tabelle \ref{tb:InterneSync2Tasks} dargestellt wurde programmiert. In den Simulationseinstellungen ist hier die Einstellung ``Mittelwerte der \"{U}bertragungszeiten bilden'' aktiviert. In den Prozesseinstellungen von P3 wurde ``Minimale \"{U}bertragungszeit'' auf \textit{2000ms} und ``Maximale \"{U}bertragungszeit'' auf \textit{8000ms} gestellt. P1 und P2 behalten als Standardeinstellungen f\"{u}r die minimale und maximale \"{U}bertragungszeiten jeweils \textit{500ms} und \textit{2000ms} eingestellt. Die Simulationsdauer wurde auf \textit{20000ms} gestellt.
+Die Ereignisse sind so wie bereits auf Tabelle \ref{tb:InterneSync2Tasks} dargestellt wurde programmiert. In den Simulationseinstellungen ist hier die Einstellung ``Mittelwerte der Übertragungszeiten bilden'' aktiviert. In den Prozesseinstellungen von P3 wurde ``Minimale Übertragungszeit'' auf \textit{2000ms} und ``Maximale Übertragungszeit'' auf \textit{8000ms} gestellt. P1 und P2 behalten als Standardeinstellungen für die minimale und maximale Übertragungszeiten jeweils \textit{500ms} und \textit{2000ms} eingestellt. Die Simulationsdauer wurde auf \textit{20000ms} gestellt.
\begin{figure}[h]
\centering
@@ -1111,7 +1111,7 @@ Die Ereignisse sind so wie bereits auf Tabelle \ref{tb:InterneSync2Tasks} darges \label{fig:TimeSync2LongTransferProto}
\end{figure}
-Als Folge (Abbildung \ref{fig:TimeSync2LongTransferProto}) ben\"{o}tigen Nachrichten, die von- und an P3 verschickt werden, f\"{u}r eine \"{U}bertragung immer mehr Zeit. Bevor P3 eine Antwort auf seine vorherige Anfrage bekommt, verschickt er eine erneute Anfrage. Da P3 die Serverantworten immer stets seiner letzten verschickten Anfrage zuordnet, berechnet er die RTTs allesamt falsch und seine lokale Zeit wird bei jedem Durchgang zus\"{a}tzlich verf\"{a}lscht. Die Berechnungsformeln der \"{U}bertragungszeiten wurde bereits in Kapitel 2.4.3 bei den Prozesseinstellungen behandelt. Konkret bedeutet dies f\"{u}r die \"{U}bertragungszeiten alle Nachrichten von- und an P3 jeweils:
+Als Folge (Abbildung \ref{fig:TimeSync2LongTransferProto}) benötigen Nachrichten, die von- und an P3 verschickt werden, für eine Übertragung immer mehr Zeit. Bevor P3 eine Antwort auf seine vorherige Anfrage bekommt, verschickt er eine erneute Anfrage. Da P3 die Serverantworten immer stets seiner letzten verschickten Anfrage zuordnet, berechnet er die RTTs allesamt falsch und seine lokale Zeit wird bei jedem Durchgang zusätzlich verfälscht. Die Berechnungsformeln der Übertragungszeiten wurde bereits in Kapitel 2.4.3 bei den Prozesseinstellungen behandelt. Konkret bedeutet dies für die Übertragungszeiten alle Nachrichten von- und an P3 jeweils:
\begin{equation*}
\frac{1}{2} (rand(500, 2000) + rand(2000, 8000)) = \frac{1}{2} rand(2500, 10000) = rand(1250, 5000) ms
diff --git a/LaTeX/diplomarbeit.pdf b/LaTeX/diplomarbeit.pdf index 185bedf..b3e2acc 100644 --- a/LaTeX/diplomarbeit.pdf +++ b/LaTeX/diplomarbeit.pdf @@ -1409,20 +1409,22 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 412 0 obj << -/Length 1853 +/Length 1856 /Filter /FlateDecode >> stream -xÚí›YoIÇßó)æÑ–ÖMßÇ#Y`¥½AÄÃ.ûà$g„3F>Xȧ§z.·Ýî‡YB‚V‘ÈØS®ªù—êc–Qøa™‘DR§2ã\0–]ÞžÐl÷~9a”šH¥
¼8pwÒÝž€3«´>hÕšf‰’Ry«Óó“g¯¸Îü[ŽŠìüºKHÃÔdçWÎÇ–Ž¦ù|ž—cIGóåÝxÂè(/.Çðë¦,VãÎ=yyÞEÜ:Ä9«eÅ@´ôI)HÀr^ÛÀQÙr–µ—¯Ö€F—M4SD2-¶2lf‰ÓZzUgäEpÂÈx¢½+³¼s:š—7ùx½(®¯ÇD-óò®È— P6嬾ûqÌÕhQÖ/Ζ‹»1ÜÍW«¼ykS^ÕN/oêÏ‚ë5ÜÞ+Œ†pNyJˆ¾¯ÎªG©–Háö´z¡ÚÔ¿ôΫãßüÚÏù_{’£Ä:epÉUäØ[õõÒ(*;{ --… ”(43Äqs•3DZÇP;£BÞ@øÖÿMåËëwÂÈÙÅtÙB8dÖŸ?´XU÷—õu~U¬ËñÛ±ñ ×°Mkžcà8$à´Y˜nT‡ÎªG• šPëô®®ï
Üo¦˜D«²e¯Jìú¶]’I4ê>“â>LG”fg²5ª™{1/ÊÕº=4¿'ŸXDFŠ$tV= 1ÈHO»)=œ¾#°XÝ`ѺÇÞ|Ý…L‹EÔD5#ZHÛÕÀÊX‡g~²ôÿLoo«Q&(ë¦Ažålræ©^´ãøËe^Ì`¾²Ê£>©4á”ÁöÉÖª'q®1ÂÉÝÔ°“db…ÈD{«È4i2±¨ƒÈ”ðR#q2[£šLõŸY½~G}³ÞøÁ_nወµ–XÊYfÛZõò3 -U2ºŸÉ¢œœÝL»îŸ`Ó?Et’(*m¦v`Û±±êQÐ-Nv4<ýÅ Zœ -Ãôâ:C¡ “=±±i dÇAø×¿ãêÓW((%Âj›Ùů5Â5tÛß¡Š'¼™ˆ•$À+Iä«‚/½õ…4,ÃàřF
}¼¦ï¹Ÿ mVw›f/f -#huq•7kß³¼;›^äíÕ‘džæÅêC‘ÏãAÙPnÏÂÔc2[«…Âk»Èf’1L] -¼çµ6
‰ê8_çóîìÂ=€´ŠEE$vàÉGc„§¼ðwã<9“ " +xÚí›YoÛFÇßý)ø(Õfïã1n’½`$FZ÷A¶i™ˆL:ÒÆŸ¾³¼´Òj‡rØ8vPˆ)q43ÿÑϳ7,£ðÃ2#‰¤NeÆ ¸`,»º;¡ÙîýtÂ)5‘Jxqà=gVi}Ъ
41Ì%¥òV§ç'/Þpù·ÙùM—†.¨Éίÿ-M/óù</Ç’Ž>åËûñ„ÑQ^\á×mY¬Æÿ|òú¼‹¸u$ˆsVÊŠhé“R€å¼¶¢²å,k/ß:¬.›h¦ˆdZleØÌ§µô*«ÎÈ‹à„‘ñD>z3V gy9æt4/®nóñ„;zUÜÜŒˆZæå}‘/A¡mÊY}÷Ó˜«Ñ¢¬_œ-÷c¸›¯VyóÖ¦¼®/~Ÿ^ÝÖŸ×k¸½W!áœò,”}_UR!-‘ÂíiõBµ©éWÇ¿ù¥Ÿó¿ö$+F‰uÊà’;«É±·êë¥QTvZ÷Z +A(5Phfˆãæ!*gˆ´Ž¡vF5„¼ð½ÿ›Ê—7ÂÈÙåtÙB8dÖŸ?¶XU÷—õu~]¬Ëñû±ñ ×°Mkžcà8$à´Y˜nT‡ÎªG• šPëô®®o
Üo¦˜D«²e¯Jìú¶]’I4ê>“â!LG”fg²5ª™{1/ÊÕº=4¿'ŸXDFŠ$tV= 1ÈHO»)=œ¾!°XÝ`ѺÇÞ|Ý…L‹EÔD5#ZHÛÕÀÊX‡g~²ôÿLïîªQ&(ë¦Ažålræ©^´ãøëe^Ì`¾²Ê£>©4á”ÁöÉÖª'q®1ÂÉÝÔ¿°“db…ÈD{«È4i2±¨ƒÈ”ðR#q2[£šLõŸY½¾ о[oüà¯FwðŠEÄZK,å,3‰mzù€f~d%=b“TbÅ ¨D‹{룋:h€çŠK{&QM¥>’ÊÓåbz}5]û{¥"L± Ðá^ÙXõ$½í•aÚßy¯Ä +P‰.öVQiÓTbQõJê/¸Ã©lj*Í‘Tî7ÆûM³ *Êu^·Ç²]/½û\Âò{Öá +>Z‚KÂ¥àY˜õ%xcÕ#N×nOÞ¡7‰¦<ÀU{óÊ%Kã‡E‚,¥à# †_gTãgŽàôC»ô®–ï³y^\ÝÆ4îí å~_éŸýÛG±*©‚Qf7¡Ä¸vUO%$«f¯b·_{FS߆§{«`IØð‚
¥a~KŸvF5lî‹{Ý]347ˆ|ð»<ù<÷¿>×·^Îg‹fh}{ço¢íXÁ,1’ê,L>nyUFÁ¡zÜÙ]•OrÀN2‰Õ!`CìbR¥™Ä¢j€JjÇ™lšýp +U2ºŸÉ¢œœÝN»î`Ó?Et’(*m¦v`Û±±êQÐ-Nv4<ÿÅ Zœ +Ãôâ:C¡ “=±±i dÇAøÇßãêÓ((%Âj›Ùů5Â5tÛß¡Šg¼™ˆ•$À+Iä«‚/½õ…4,ÃàřF
}¼¦ï¥Ÿ mV÷›f/f +#huq7k_³¼;›^æíÕ‘džæÅêc‘ÏãAÙPnÏÂÔc2[«…Âk»Èf’1L] +¼çµ6
‰ê8ßæóî쀴ŠEE$vàÉGc„§¼ðwã<;“ " 8Ä -ùª(L?+ÆBjˆRÃbÑàg:£C=|äÅMOî”"†Z“…YÇ£lkÕ#Nh@ÙîŠ{xD“ŒaÈP‰±· +ùª(L?+ÆBjˆRÃbÑàg:£C=|äÅMOî”"†Z“…YÇ£lkÕ#Nh@ÙîŠ{|D“ŒaÈP‰±· ³ôf -ugÜŸG¤ø‘„ΨáÌ<g=“;
ÍLÙ,ÔS×õ(íV;ZÁŠð†ª‹½U¼é4oXÔ-oø°Î݇7˜AjGñ•kgT=âë³¾(Úþdî´Þ^¯ÖÍ…÷þ +ugÜŸG¤ø‘„ΨáÌ<g=“;
ÍLÙ,ÔS×õ(íV;ZŸÀŠð†ª‹½U¼é4oXÔ-oø°Î=„7˜AjGñ•kgT=âë³¾*Úþdî´Þ^¯ÖÍ…þ endobj 411 0 obj << /Type /Page @@ -1662,8 +1664,8 @@ endobj 470 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222722Z00'00') -/ModDate (D:20080810222722Z00'00') +/CreationDate (D:20080810233611Z00'00') +/ModDate (D:20080810233611Z00'00') >> endobj 471 0 obj @@ -1713,18 +1715,15 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 476 0 obj << -/Length 1352 +/Length 1358 /Filter /FlateDecode >> stream -xÚWmoÛFþž_¡]ïM:ißÖõei‹aE³
è²r|µo–¥Ô’À¿~äñ$ËŽÒ"ŠÇ#òøðdqø‘ÑLó2‹L©@"ºß_ñhko§§¶éhœÎ_Þ^½x“«¨`ežëèöK$3øäÅÉéíúïø}õàz['©4E,X’fœÇ¯]S[×Í&ùçöÝÕëÛ)X&9+ò\þ2s¦³ÜD©,Ï3·^Ào3Jê ¿Ìgø§šd%3ÆHÿC»«jKè‡fM¦nW“öíÁ6—iœ|f -©¾ƒkfE¸Š%\R3Î3ãqÝ4IªÊ"¶®±?¹}"x<ÔUïÚ°¼q«¥2¶b¼HYÎJ](ÀƒN7I -lS
'ça×P&XfL>n‹; IÆcF1?¹ î êžä5)˸Úõ¨Öw#GιáÜ~?&¼KD·‡ƒÝõK0ó’ÉR›°ï3ô[ -ž
-{~¢zw§ò¼i¼^ÇlƒÍ¨¦Ò t"o° -ã–ª†pc*Ü_hm›à…왥¶ôK‰6Lj>¥vôƒôy».ÜñŒÏìéØÍ<m|Ç -U¹ßÒÔ‚¥ù÷ŠW£ãËMéÒ鎞Ìxù¢T5×ábOOòPCÉR¼ÁÞrµaLÝå•sÂuº‚‰¿:KÈ ¢äÞ§J÷p§´îítoáå.¦i%ÙØMÕøÞÙH¸¤dFÙüfWž,…‚ÞBã1fñ>ð®P§@ì~%¡T
ÕoõáϤ€´1Ë›Nrÿ€ß†~c‹ö8šN{êvã:*ÔY(Is½
úÕþi÷¤9[¾iO -ƒ #c-ݻЩ žÒ‚φ0¼‡Î—öX;$qª!ñ¹LqíË2:Äè϶ŒÓã:Øœ*sežô¸)]¢á)¾–§øZLñA½äŒÑÒ›ÙêLPÎR$}ƒÉ’'Œ)@ò7Xo±{¡û¯Iíç<g“pò£šN„‹6D›Ï¾fÇìì8í‹ù¥owŠë¯ƒóí‚Ú~l••ñû’h›ÝîY2 3ôÁYdãTz€0O>%•/ -O˜v•a &/3ÞâkÕl«Ñ ±…,ŸÌM øÊâF[÷Ï~”Â7)×¹ü±_€3ã…±R2øvÊ'—Jègâ}#òÿ3x·fendstream +xÚWYÛ6~ß_¡G X1â-õiŽæ@Ñ ÛH·òš±YËÒÆ’À¿¾3JÖzµI°Àj8œã›áÌæI<±Š©¢Ò‰$œ'wû«"ÙÀÞëéË£l> +çséç7WÏ^™”¬2F%7Ÿ¡-+DQžÞ¬ÿNßÕ÷~pM–[¦œe¹.Šô¥oç‡c»Éþ¹y{õòfr¦EÁJcÄ!SÊ0¥MrÁ™1¥K/à·œY)Ô„_˜þ)'ºbÖZà¿ïvuãý±]±iºÕÄýc{píeg[–ÙRÈïàšI®r —P¬(´
¸Þ´Y.«2u¾u"?ú}Æ‹ôØÔƒïâöƯ¤ªÔõˆñ"dÎV©R4ºÉr0àÚúx6µæ€4gÚZ3*É@
HF¦‹”‘Ï>²{¨€f zMÌ*wÃØO#󻀎ňîü~?¼Ë¸N»ÃÁí†%˜¦b¢R6ê}‚z‹ +´õw4<Fô9•cdÀ7Uêû(p[èb&OÇnçaã*(nàZ¤WîäÝÚ±G¼ñHzG›±,ìEìh$š³óØ@¯#ŠºŽ¿ë¨Ô{÷0XjEèCrLЂNß÷õ1xv´Œ’—òZw$bã¨.¯iÙMv{ïF‰ +Oñö…ƒÃXÒ”é»âèÚÝn[Òx“ôÒ€@Bg©O˜§ 'VLY8èQ‹&Ãa²2k`\Öí¶Ð<[ˆõÑ +΄^e•`ðˆ2“IÅÕ“¿õ¾áù~¹†endstream endobj 475 0 obj << /Type /Page @@ -1758,8 +1757,8 @@ endobj 479 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222722Z00'00') -/ModDate (D:20080810222722Z00'00') +/CreationDate (D:20080810233611Z00'00') +/ModDate (D:20080810233611Z00'00') >> endobj 480 0 obj @@ -1910,18 +1909,17 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 503 0 obj << -/Length 1704 +/Length 1709 /Filter /FlateDecode >> stream -xÚXKoÜ6¾ûW証EŠ¢Ô›'EÒGšÚ@qZ‹–Yk¹ÎJJ -Í¤ÎæFÌB4¢^S{"
ÕB$ŠIS¶qD·ööž(gzƒT_’ø‰vçœÅfßBò6ÃÞ]…‰‹Te
åCׂ>js#³ìîΙ.,_‰Å(€WB€åZ¥Y!€@kÛÛûÆÂ~©ƒk"Eÿá
”’‰[É@\ô9ÚAÎyª+]Uî«íLS”jkZ°j¬3["1{½JËÍ*å1#o[Zz@]nTUBXö•uuX.ûAµ+zÊéþÇ¢½[pã Àû•âñ9Ü4…À‚†èïÖø€'*î·Ä2¶6Î/ËÑÖ––6¦µÝÓ -ÀÆbr„¡¤%øŽòÂ+CÛÀ#}d¼w„üŒÚÇèø…¹á\¸ -„/x;äYî#MÔ·&‘£ÊâD쇂4MÛáÁ¹ -
ù½+7÷žUCˆwP†ÌÂ.NŽ?ÛÄuk;úÚÈµÍ û›5Í¢HãŽ=£L},÷ˆÁÀº^H8û¶6wXƒîñ~ðÃ]Ìc -@*¡@„’¡éöèUmhÇòF -ÊiøHÏ ü«G1õ—iwÕaó1h -zègÿYõ‚æá?Äæendstream +xÚXKoÜ6¾ï¯ÐQxŠE©7NФ4µâ´-³Ör•” +„/x;äYî#MÔ·5&‘£ÊâD†‚4MÛáÁ¹ +
ù½+·wžUCˆwP†ÌÂ.NŽ?Û=Äug;úÚȵí û›5Í¢HãŽ=£L}(ˆÁ€¼—Hömmn±Ýáýàq‡üä8¦ô%WBÉ‚Ðtôª6¸BŽ9
éá‘ù` ¦þ +°Vû8KŠBD»UR$Œ‹L
œfu¹ú4JÏ™”Ô!—…ÑFÂ9n9&ðdõ,Ïs}:×ih##éU IBéùæýNE{}š´(ÍDʱ—’ÿ›¡ÐJ89ÿÿâ˜&LÈ,ñã‰XNN”
&3tLdi¦ÔrCq#s︇‰J°Ÿæ‰%¹bJùL•œØ2¢^±åTš†Ž&¹*1@-ê?‰ÖLq +.8o+ÛY,»OÓ²kÓ”®ÆòÝ¿v;ªdnä<öAµC=onPØüä +\ëÛ{1ÖÚ€K2}‡¶
0¬çÄÛÂøb[wèÏÞ+´Kâ<öAøÇAÜ-„Ђï]°èotð®é‚]Þ3 ÎÝf©·Lã,tWû±¡à'¶RGäÄ&b@Âï³°±t8ô0"yȨ¤|ìks‡@š6|‡)1àèÞO*ŒÖÎq~ÁsÄ{èãâqs·0ßìƒÞñ¤—NÓ8:tQ:t:_T1¼À¬Å¥£÷ÒSæâÒÖ©u„÷Ó)2[Ól½Y@|&[„| #–†›ý¾Ù–ã@V=¼VG0»£_‡îÜÜµÝ ‘öCâ,æëýô¸Åá+„ÚÀŸYR·ôÍJ³\(šèßZGÃÔCVûÆ)Åã‡ÞÝwa±µØ¦‘ )œåرŸ¼Ãåo޾Ð7ü
C½ ìw“IÕ3 œÛµAwr^¾t„ðóçâù7~à 8ôp=1ëžìUú•gåôü{œNÃ[}|à^ó1ž17fpì/Û0E=_®•1MÛñÑçƒÌEÜXw߉#s9û_šLáþ;<òÙ¸ë(³ýÒ«d I‘Nm{ý‘<îÙL7-4ÔÙôH>m£2ƒáO̘÷ñõšÚiÃ#™Q˜h8ÏÅB¼Œëüã×q€Vô^ºPV&1aÞÑ‹Wd‚I.sþ¸©ú[¿£_¯ªÇcCyñ5ÃaîlÝ…k2y\<“¤yÎxš‰ûïÖ¼0‚e +¯P@¡‰~ö_V/hþ
Åendstream endobj 502 0 obj << /Type /Page @@ -2345,18 +2343,20 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 541 0 obj << -/Length 1835 +/Length 1842 /Filter /FlateDecode >> stream -xÚX_Û6¿OáÇhTý³,÷Åu[»
èz‡
X¯ÎYuŒsœ«í´Ã}ú‘¢ä8q®wÀ†=™¢HФÈ#ÿD’i¦yž&Y®`!Dr»½àI{?Eà]EæÕ”ûÍõÅËŸŒJ,ËÑÉõ—Dꜩ”‹ƒÐëòÓâ×â¾\³\ÉÌ.$[®RΗ®#ÂU½] -¾Ø7Ű떟¯ß_¼½§’3kŒ|ž•#÷ÜLi'fŽWOs–e™ôV>,Eºp}¿.š»¥äׂ}Z.nxÊ_¯ÑÄuÝ”û¶:µQø‘â ÎÛÿXštU—'–ŽgVÓCsKç²ÑTÉÌ̲̈T¦§Fœ8häzJíLªOòÉ]Sߢ&ŽR‹}[Òn q\i¾ˆ~#¥úmwW4®§ý·««¶îiÛÕí—•éÊ-Å¢fMôï7JëMãÚtjWúŒñŠ×mŠfÔEz”;k׬ÐCpc®™©Á»³\†›4n¹R:Eݸ0“\ìû¥âˆúd"HiXš ù%˜ÕyþŒDϬ¦‡æ™Ë¦DÈgF¨œq¥³#NaäzJíLZL„äx¼ÞeA€äcC[Mí*×–Ñ}×KÉ‚Žýgø‚\SÒVY»ã0@\’WCO/³Æ˜ÁD¡¨¢hÌ<жÑÌÈTG»Ø¾,ó™x£”^ûŒIÛl'Y‡,•Û¸–Ñú«ûûÚ5”¨Žö¾ï;ºYfò˜JÁS†ÿ’L*°MfÏÈŽñÌjzh¦¹lÊ;3B[¦áÔ‰'Ù1r=¥6…¤È”<V[BÉ1œä4³ØÔíþrô܇WÑiý°ïˆ£-n7hóI_F‘1mTvX!Õ¶'öã¬5,ç™…Ë ×ê3Õ*T·Æª…òôGT暥B© CIq^SÎŒá:pQ™c~í‡ØæÆkþ@§à–©,:9çg•*Hr
%ØJ_VAè‡n{X$mñÑࢌf¼»¤¿‚¦FlŠÆJ–rÏeF.™´ðº8S¹M‘ãëŧÏ<)óýE ~Ǭf"Ïe²½R)ÍÅÕÅ£<¹Æ9è5öqatƒ°°SLA2&Põâ’¯ Õr(áqÖ^™Ö(“EâËw[!“ˈM’ej™à&‡<…ÿ7[WèëÿÑ—*e™áðf¥`\ -y)Íû -lj7ÿޝWK‹-ÏmiùÑÝn†þ€¿<Ñ7 \ø–¤e~h¤e=ì ÃuDn -¨
-ñö5Ô :Þ ò4¨ŽwCí~‹¬Ó:îíij‡¾¬ ÅÁ4Ë.žñp
›2?^7ʘþ6tYˆÜrS7ˆâ¥*0÷jèªá†¢Âî -h[ß|á³Øã5{ë6è'òQëïªqp߈$ê* ¨ån¼2qÓí°Ã#}zy¹ˆ>VŽDÌ®©ü5¯î‹ÆûO¥ùÂ7<¼SjÖâß„h`åÛ†ßóÊ,Ó¸ˆÃ] -R±}+š‘ˆ¡öþgô}µÛ’»X;ðÞ&hÃd¢më]!{ᛣÇÇpðwôµ×AHž )À)ØAìÌÅâ¾ÛUè=‚hÛí!™hÿ(0ðMà‰Ëh’ -–G&ÌæÀô„RWòìHeS·w=Ž©Œ¼tyøI=4í!il€¸q>buþ—‡_$¨L
OËÆQ<¸•y4 +xÚXKoä6¾çWøèvT=lYîm‹lÛíh› ºÙƒk=F<žÔöt‹üú’¢äñŒM€9D¦(’")ò㈈߈²„%<O£,W°"ºß_ñ¨†½ï¦ÿÂónóvÎýÍíÕWßj–kD·Ÿ"™äL¥\œ„ÞVâ‹Çf´íf+3K¶Ù¦œÇ×¶'ÂM³ßÛb<ô›·?\½»§’3£µ|•÷ÒLiffNWOs–e™tV>mDÛa(‹öa#yl;°/‘ñOùÛM,›¶:võ¥BkƵ'qÎFøciÔ×QXþ6³t:³ZZº”¦J¦Fd†¥2½4âÂA×KjÒP-xBOÚæ}4s”Š]E»Äq›ðx$ú”ê§ÃCÑÚößõ¶©»f mÛtŸîT–Ôv#☢¾SI²km÷†N*—1NÑhû]Ñ–^] ¹cQÚv‹‚ó„ ‘j¼;Ë¥¿Ik7[•¤¨zf’‹ã°QüdQ_L)5K3¡!¿3Iž¿"¦3Ûù¡eD–²)ò…*g\%Ù…‰0q½¤v!-$Âr +<^çÀª€ Àr±¡¶±µíªà¾ÛÀdAÇþ3~¶h«jìy .#ÉkÆq —ÙŒSÌ`¢PÔA4fE['LËTžG»8~¾œ»LÄT+]Ƥqgw{ëSNå"®íÎvŒÖߨfxllK™€ú€`IÎçcOׂµ.â/¦†R)K„‚’#&³W¤Ætf;?´ŒÑR6¥†Y‘dÌdúÒˆ‹Ô˜¸^R› +¦²Lœ« ‚ä˜KršˆwM÷t¬-½õñkbz[ã±"Ž®¸ß¡ÍMº„†ìâ
©ö±Ÿ§,0ó,‡Ë ×j24Ê”[bÉÂ9ú3*ó„¥BI/CI±®)gZóÄsQù™SrÇÐã¦k~A§àü™œóU¥ +2<zFl•«© ô—þX íñÅࢠ+f¼¿¦ÿ‚]¦FèˆÚH–ò$YËŒ\2iàiq¦r“"Ç_W>ò¨Î®<õ3f5y.£ý•ÔP4 `Ò^Ý\ý:Éãkœƒ^mžF9óËéȹ0Å”ÉTÑ'.ú´uÓ?®ÓÚ)S¸¥³@üêý^Èèú +ÜHµné²L +U7APÅò<]½Õ„šä4Iòe8ª¾¦š@óÏøzi°ßÙ=-³÷»q8/Gt
®%%2?uѪ +›/^¹÷v׃~"Ÿµø®[÷
0¢©ýY¦+7Ý;¼7Ò¥—“‹ÐAamIÄâšÊ]óæ±hÿTšÇ®ááRãÿ$8+×6Üž»8P~Á2‹0Ü¥€!Û‡·¢ˆjçFß7‡=)0qiÁ{;¯
“‰V´½s}Àë…kŽÃÁŸÑ×NÁ|¸RÀR°ƒÀ™‹ø±?Ôè=Âgûý)™hÿ,0ðMà‰Ë`’ +áj¥?B €>¼#enÎYµ~ßd@ðNÙïFG¾ohžqæ6v õ—¢|V–M_{Ó鹆K®ø|Ž×°L»·ŸžÃÇW<ŒGÛ¶D…vGNéªÂêCÞ§T%g C>ô-^3‰„#ÛÙ™•‰àR2Í!B-„+0Už™°˜C<ÓJXgg*Û¦{pFeä¥ëÓïè¡yICÄõlÕÙû\îZ 2Õ<=/gñà&TæÉ ++Qendstream endobj 540 0 obj << /Type /Page @@ -2411,7 +2411,7 @@ endobj 545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [335.0373 720.9315 349.4929 733.0693] +/Rect [334.4172 720.9315 348.8728 731.5137] /Subtype /Link /A << /S /GoTo /D (figure.2.8) >> >> endobj @@ -2434,7 +2434,7 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 550 0 obj << -/Length 2364 +/Length 2362 /Filter /FlateDecode >> stream @@ -2446,13 +2446,8 @@ xÚ]oÜ6òÝ¿BZÀËŠ¤>Û'çì\“&E/qZ u´e¤ÿú›áZi%»î Kg†ó=C™{üã^²0È"/É$,8÷ e¡ëÉÁèðÒÄíU¨Ú¨Ì˜’B8»u†?Œ'>Þ·‡µ´íA+E˜Uûh¤Å5JK`¬>iE…¶8òúÐZù¶=hQ8ìŸ7)\ÿÓØy‚™êNoˆ”Jõp'“pRÓpVÃ3”š+Hy:Ó‡ƒáw2MøIÎýR5ù‘6ôÜç`ÙÊð…ý÷àAwfp£*x=ß9Žç7Ð^Åa_Úc£ª¹M÷ªãÈõ–ä½kNûrÄ+ëû=Â(òkmñ„´¦“wÍ>¯ìá_¾î Fê{Œ™GKýtùiI>YcôÓ4Ô§×– ,¢öw2Žg.é¼T5Èjì »kˆ%¹`Ø›\@Ú“KVtmZS Óç
z‡ÖFS`óÆRÙ=„zÆZè”–;ômÄý£±‘†×*ô_@FþÄ£ž˜ÔÐ2¶ŸïÑ `EW(ý”‰eÕk”XÂݦò9JÇn7sO:ú¶C¶òcoj£j&ro׬æt Õn'1ÎòÎŒ_mrÃq£ŽêUkµïU7-gõO¡öäj7*ðcNF ¡IÏ
.ÁWtš˜=”|¦ -ÒMØž‹ùÃÜ€LžG¼Û# )u‰£"#è5ÔÇãKÝT1`ceŸ\Ñ›6œ¡zõy®!È{Ô<ÇÿŒvùö]}¨TšÁx•c™,×´,Ü—…÷·ŽÖÄàù{¸êT¾ýÁÄ$?'£ñм!ã›1k˜¶ˆj2¡»/‡"”}ú4ÆBö>«
¬lD[ŠâØÝïÏšæJ!„úîœì…«¤.åhw'„¼ùû0ÆcS·Å±hHçvº1,ÉÝÖòY‚l§žµÚc`Ÿ5Dx%,rнôÁCJÁÂ8H_¼M±Ü×Ó.çñôõ¯H‘ÙAÚ}>²Z‰‰V/H#àq#ã@¾.Íëå§$¼ÐX¹oA¦¾¦‹DAUiGG„<[kÒn2ÀXhj$‚?¶…E€éwRÞv*·ŒxßôtPêÝ@ì–4ÃôÐl Fƒ:<cÉÕ6Z–^Y2MÎéRgÿ!wqf¤I|“ûyWÔ®=ë’PuM¿3‰æ£»ñÒrm¡ôvMm=µÑèWÍXô¬È`IYšô•úO5´ªhlþÛcóˆO›¼Òƒ™‡Ìíô!Ä¢¢#ÌPÄ]ê¼r@ÒqízŒÍtoï hF -nòZ—tªÕ¸ÃO(8ìÖB¦„d1±YhkË÷ärÛ–úó§8›{¸SßWÊû”ëy-§óYAÀé£ -n^û¨fø½.–ÇZó¯ø¦2’l'4ËÚ»àl¿¨ðÅß -üôÆsÎ -þˆôú¥‡Kg7bšo!dn˜áGÓ•¡ƒ/¦& -£õ/
íFî/±0•Ž0íe
Íl~CäÛww—¶™±Ûãø°ZJ -šŽaD ®Æ—„žvƒÎŒxÛÓìq|øö¥Æœ¦,cñuwš ¯}Ÿ,Žð¯7Ë„ˆ|ñI¯Üü_-ýæmendstream +ÒMØž‹ùÃÜ€LžG¼Û# )u‰£"#è5ÔÇãKÝT1`ceŸ\Ñ›6œ¡zõy®!È{Ô<ÇÿŒvùö]}¨TšÁx•c™,×´,Ü—…÷·ŽÖÄàù{¸êT¾ýÁÄ$?'£ñм!ã›1k˜¶ˆj2¡»/‡"”}ú4ÆBö>«
¬lD[ŠâØÝïÏšæJ!D„“½p•Ô¥íî„7Æxlê¶8ö +ëÀ¶ƒ ÀLÕ³kÕ‘zØþ!žy/v£/,¬ð«õ›@èF`ÑâærXÙË#鿨ôë¼#¡±O’j‘XW-SPÇÂ,#÷EY)P¸Ék]:ЩVã?¡àd°[=š’ÅÄf¡-ßrÚB×’BþÇ`swêáJyŸr=¯åt>+08}TÁÍkU¿×ÅÒãX+cþßTF’í„fY{œí¾ø[A€Ÿ~Ãx.ÂYÁ‘^¿4âpéìFL@ó"„Ì
3ühº2tðÅÔ ¬vø»Þ‰¹D8}Ca´þ…B¢¡ÝÈý%¦Ò¦½¬¡™Í¯sˆ|û.㮢àÒ¶ 3v»cVKIAÓ1Œ”ÃÕøÒƒÐÓnÐù‚o{š2Žß¾Ô˜Ó”a,¾îïNäµïÓ‚ÅþõÆb™‘/þ1é•›ÿT æqendstream endobj 549 0 obj << /Type /Page @@ -2626,18 +2621,14 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 566 0 obj << -/Length 1708 +/Length 1705 /Filter /FlateDecode >> stream -xÚXÝoÛ6÷_¡GˆY‰ÔçÞR8íšu@‡d{hÓÚbd.2ZòÚûãwÇ#eÙ–Ó˜Ôñx_<þî˜8ˆà/ò„%Q™y)`ÇÁr=‰‚ÖÞöcìxgžy6ä~}?yõ&AÁÊ,K‚ûÇ€'%i„ÞWŸÂ_ä³îT3ñ¼9›ÎÒ( -çjK„;½žÆQ¸kd·ÙN?ßßNnî{Å)X‘eüǬì¹ÏÍäÅÀÌÞõ´dyžskå{¹~fIv3D¸P{V;S·S…_ÑL¥[E‹Lø|£÷Ó8……ŽèÚÐX©cÔíN6ºÕH -Cá˜Å9+¹óíICÑ®|د
ùczбÇà>þT¨Æ¹Ü´DTÚ(/G«Öo\ bG¿[®dÓù•½WƒqË•gúhÍÇ™|êô_60¢m%ʰÓLèÏŒ,Jx:LÏSrÆ8ýˆ‰²°_&Ÿ>GAœ·Gý -‹Ë’ë ÏbV@˜<¥™ÜM~ëåAyG/£sÓ~˱0ÁD‘‹€³²( -| b‰L¤Ä1˜[e<É@ £ðL°<É¿üêÝ:Nƒù<-Xe%ØÝ«ùoVÏ0BI™üQ)‹y‘hp™Ç|ìJŸ]mHø f ÏX‹büj_Ð3aö_/0º©ìÕ#Š9ûé4ÇxV¢Ee0ÔqnŠçúž)gÒИ9Þk½J-¤»€v¼ùö¬)³ÞT»öÔFÈ–¦Ù¨g¶ŠlH2˜Å¬,G/ÍÛž€Ä¢x4E™³8OXůM§g×–6õl€°fÇ4\?ˆ,«,.bÀ¢µß|„E§âˆ´ßÑ.L€~¤›"PuØÆŽRXG~ED‚üwš§qØ+G*‰ÝZ˜ÃoÙ4 ADeøv‹Kò!Š8!³ã°® Ã(ü#GÝ -Åálå y‰‰õDK´)o‘&ñç¯)ZÎîþ6üFLÒ`j.”Sp¸³˜Ìi¾†šô¬UsZ¤Ž™I‘}à†ý<ye%Šzl{Aôúû¹íd°€»…£¨<Dð"û‡Ã“°#Œ‹U‰¢“%?¤,ô6iú b@‡î®ˆF8 -qóDB«o·\ÍHˆUh„x·|‚‰ÈxЕóBŽá”Vx9;ôÞnº
5!MÓËsµ… --UY[$ª§‡}ÿàwh
æQãí›ÓA)3jçjXgêÀ¼¯aЇÕoöŸìÿ±ÿ0
˜GÞTðÄÏRl†…§ÿmô‚æ§äÄcendstream +xÚXÝoÛ6÷_¡GˆY‰¤¾ö–Âi׬:$ÛC›>È#s‘éÔ’ÖÎØ¿;)˶œØÀ¤ŽÇûâñwÇDAQJ&Ã<Ò\À$Š‚Õf¬½íÇÈñÎ=ó|Èýú~òêM"‚ŒåI"ƒûǀ˜‰8ŒBïËOÓ_Šgݪz6çi6ål6ÃpºP;"ÜéÍ, +§]]´ÛÝìóýíäæ¾WóeIÂÌÊžûÜLž
Ìì]s–¦)·V¾/6Ï`À\†ÓvŽƒ˜.Õ^«ugªf&ÂéW4SéFÑâ³>ŸÀèý,Ša¡%º64–jçuÓµn4€ä9ŽbW©"S·Œ(‹bãÅ”ÚéyB.ծѫu[ÃÏÓŒ‡mÉ4•.U{…!„pÌ£”åÜùöTCÑ.}د
ùczбÇà>þT¨Æ¹\7DTÚ(/G«Æo\¢bG¿[‹ºõ+{/®ãVkÏôÑš³â©ÕÙÀˆ|êhëb©;Í„þÌxÆBÉãa"xžœ3žÁé‡Lä™åø2ùô9Jà¼8êWøY”ç<ØLx±Âä)õänò[/¢ÈSÈè(|AmA˜›ö[Ž… &²TœåY–¡¸àK±P$"&ŽÁÜ*ã2ŽÂÁR™J¿üêÝ&ŠƒÅ<ÎX&9ØÝ«ùoVÏ1B2—ÿcTEÌ"ž% \æ»ÒgW›‡ ~‚¹ä Ë#‘_mâz&Ìþë%¦ñR×¥½z„Bg?æOr´(†:ÎMñ\ß3åL³À{M¸Wªeáî` o¾=+‡AÊl¶eלÚ(Ùâ8µñÌV
2YÄò|ôÒ°]r ³ìeÐyÊ¢T°Š8^›Vϯk]4ÚTó +ÀšãéæA$IU`qmüæ#,:G¤}G»<dX0úE>l +AÕa;FHaùÕ"RÆÏ4‰dîã2° ®¼ÝáRñ†œ`Ùü€É(ö£Œª' endobj 565 0 obj << /Type /Page @@ -2864,20 +2855,18 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 578 0 obj << -/Length 2192 +/Length 2197 /Filter /FlateDecode >> stream -xÚµY[oäº
~ß_1 ö‘ïvß²›ôœë›v6}cíÆ–¶gƒÍ¯/)Jßf¦z‡¡)J$?‘¥¸;î.œ€¥á.N} \w÷Ò|`»Æ~]-ka{*ýñéÃü]â¤Qìž;/H?dîyѧüŸÖ/üX
¢ÞÛ^œXž³·CƬÑãKÕì]fj>´Ýþ_O?x|‡s’(òþ;+Géµ™^21st=L8Ž=ee!Ê, -=+}Éë?|ëÛÞ-´Õ
ºí„tHè¡$ *ù^‚¸÷{\é%/=œUu.ô J̯•ÈE—‰Zd{&È¢{×êDUȪ߃*‡Íž úáÙƒî}Pèÿs×¾£¼è{ÒñÊ¥DÛÔÓîÉê¥ÔÒw ¥?=û~¬Ö¯·³Eƒæà®ˆ.'£ÄúúìA ä$ -T¥¡mèã£48"ëûï
Mä§—r+`M°™H[T>S£¢0p(˜¾uYžJQ½‹6ê]äÅNœœ÷¯CõÔªÃ*[x|9ö
÷¯•ôñ¹Ãxn‡öAjëZè¾EÆ›Êo,ìÆ!ˆF`¶Ì½<t1 -al½Ô•XÀP€¶CŠêU¦2s,AØŽ(
±DY1VIk¢‘¦†«D¬7ëÉK© -ZÎ
#ź¤Ì•fT®8œ[1Oç’êxR”ÊW$î%¥‚9\–\Õî¹â`n˜‰R•ux„ÚÆ‚|˽ÙÜ\¬f‹±ŠªHt-’•ÏŒyÅÉä¶n -%¤ c(„è -í|*" -}ªÆdÔ÷5Ö6eÄ27^b«³®£‘Qä^…gŽ -…¨B5H s˨ˆ -7Þ(ÁWhû~€¶ªG?Ô½Ñ¡à™ 1ŒŒžá,‰M´CüÐ"+Q/{F\dâà@Ò™¨´*Õ“ƒÌ³çùŸ+YØŸñ] ÅBƒã3ß@&0Ó´©ŸÌÅ× Œ–ËoxÊ>µpËì9x’Txø¢¥œLØF@Â(xnHºù +xÚµÙnä¸ñ}¾¢Õ€¥•¨;ož±³‹='$΃d±%ÅÕÐ1ÆøëSÅ"uwwdá‡.‹¬ƒu±ìløs¡gyvìÂØÀq/õûÃÚ㯣hMMlΩ?>}øá¯{ˆ¬8¼ÃÓéÀ¼Ør}Û™}Êþiü’œËžWG“…‘Á¬£éÛ¶ñÀ[B|)ë£cC•ôM{ü×ÓÏŸFÆ>³(Ø'åH½“E31GÕýØ +ÃI)s^ô ‘ÏŒŒwER¥øáߎÌ7PVÇ7ª¦åÂ"¢‡’/Å{™sÂÞ]P¥IQ«å´¬2®RB~-yÆÛ”W<=2Ø òŽ£åe.Êî¬,"|Ô;’4ÞõÏnèµï½´à?·Í;Òó®#¯‰hE°ˆé„VÌ”z¢|)zyô±‘Ï®Êsàëm’¨W¼Þf¤q_Ÿ]Ï+À€6¼#p&E’výЪ/ZpãpRçfÒpˆn^“ŠoŠöèÛ£”iŽ–éxÁ…ÚÏÛ¥~®Ôïפ>ƒÿ˜žmôæÑt#Ìš!ÀŒ¿#PåüËü*pG뢑F4ê¤":R¹ìÑÒR‹ðIG@ÁK4ZOû¹Â¦p-Òy)ÕCà·g7ò +ÌþŠwÇÞy–t: +ÖžŸ
¡Y(ʾïH^ˆkEˆ5z'¡Ê®GBD|ŰàB‘BÀÃodpNoÿ•§D«ì¨û©©Ïù}èf#3øF“MK ÉDp/ã0oe›ÝY†á!‘s¯ÐÈ‚øSÒfo¨]ÒrôÚ8ˆ$-p‹ÈËœejhjúøÈ{ežvÝwðˆš6&ÃK±ç°ÚÙ´§2ŸÎQïY60˜'¾mZžSQ¾vò]ÀB+ŒÉœ÷¯}ùä-äÊÃ2ZxàÉzíÞ_#èãs‹þÜôÍ+©©*®ºo2¾1±÷è‡@Úk‚Å1÷âÔ&hà–PègÛ·ÏÄ!o“º.e0¦IÎE#1FšQ]. +~ìY‹Z鱣ܮL@Ê! z‰
á³mGK×Qž¢UvDÍ!ÿ´|\E#¢ª%ÂÐx©J.0!] +F(òuA+õH:Ë\¡¿”¢'œŠ?ey’ŒWî…‚1‰(™»—Œ½¥`ÚKeÔa 5µÙžz‹½ßìæc•žèD+žm›åƒŽmÕ +€l€æ–P= åïÌ(À7Öv]e•C×W½Ñ)ORNkè)áM´EøÐ"žK^{F<d¦`OÔ)/+Ù“Í3cîçRäægœ4˜hp}¡Ðxz›õ“~8âd£õñ;Z#³O
¼²{si<A,N´¤’‘½ã° +šk^> endobj 577 0 obj << /Type /Page @@ -2900,19 +2889,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 585 0 obj << -/Length 1955 +/Length 1953 /Filter /FlateDecode >> stream -xÚ]£Fò}Åä
KcøÞ6;“(‰"nçinÛÀ
4
i~}ªº -hl¼»§•f‹êúîúj‡wüïÒØƒýî.ÝG -¼jÄåªS‡R«žNˆðŸ&ɪ&é¹2}Õ4¤Ž(zs,à‹‚€9”Õ]ze
UÉR0†ùhJ_zY?êþ
3¯eéZJ -²r¯%eKOÅ6å~,s¢d¾íþeŽ“d³`ïVáup©¨ø’•âKâÌÏö‚ZÄ'¨‹\R˜·ª -]£È¨—`h¸iˆEÙoϵ¸èdÓ@¶æ²ƒóð¦ÅqZ _·Ø¡ºÝ.’`ç‹][‹+¸»8ë¦ÓÑ«j„(îü Ù yŸ±Ð·€X›5¦—é‰e‘Hò YÇçKv¬ïgU¬•R‡ìÄ?»À»§C[›H½]Ë¢¢ÊÄ -ͱÎMOX×I+»›¬TLáö*<úˆîf²ÄÞqÁlnI ÷¹–z -Ä—–cS²ÆLft{¬ „VoÙZ»µÅ¯N|H%à÷Þbfƙ۶|¢[£AFöË07×.aµMjDÛU¥½}jaÞöÛE®(8ˆ‰‡4%¬å”ﱚ3&pœÒ—nݪmÆ=ÍØl¯,Ðó¥.x/pz’vÖ›‹„øe -âõ°¨ÙLš;,þ -ÓðÌgÝoÙ˜m{«Ø /׿ø©[[Ê´B•¢ÖëbçE%ç!l¾X÷®v‘›ÕÁ:'âû~‘uˆ¯«J@5%;Ü'˜Ê–xvógÖ¯hþ çAendstream +xÚËnã6ð¾_áÞd V)J–äÞ²›´hÝ´Òô@Ù´¤FC” _ßÎH¦m9ÙC±@v4΃󢃅€Á"‰üHlÖ‹d‹mýA,r ý4ý0ïjd^¹Ü>|ÿc.RÇÑâa¿ÑÆ×"8ú°ûËû¬e¯«åJ&©'ýåj-„w§;B|-ëe ¼¡R}Û-ÿ~øåÃýäx-…ŸÆ±ü6+'îK3eê˜9¹¾ÞøI’Hk¥AƒBáý»”kOwF—}™&½¡éÑ?…IÔ¿. 7Hˆ€°#ŽËn« 7Ê+ŸH.áPݰ„ª*mˆpPÆô7„Þ)b½=j)À”Hx=e@»¯{<M5¹9t-™bø¸]éÐÖ„ýÒµ}û¼”Âk« +£‘Z‰¿‘ìöN? !›R³JrMx·Ï}Ù.¯j0¨Ï§¯ŸK¶É÷›ÎñŠ—éNo‹F÷DaóÚâ˜]N§gÚôe]“z QÔœ0ˆ1ØÂ3ۢܢKϬ¡,øŒ]6Z„§ŸzZo›þ3®åÓµÅxƒaå¶Àãµ÷:txiA—ãØ»7D{~‚¯†,‡OE +¶A™®JÙôA|!ÐÛ°e“ëó¼µOw;ݰn +Gµ-ø¸l¶Æ”–™{-žÂ(jòžŠlÊ ü8Í ‹RÙ´ûçå7JœJ?HÅÆ¾ËÞàrQÑÅ3EG©Ÿn$µ†OP™¢0¯î;]æMiŒ&£žÄZ4pÓ‹¢_:kqÞ©º†lÍTôàªÅQZ o[ìp]o±XûrFÖâûî. +ä¼éDz¶ÕŒÅ?0!k¡,¡²No±6*L/Ó“ÈI" Ëb_ÎÅ%t°þµ?ªb”:d'þl]¶6PÍj.‹ò2³' +¬È$LEFTí³ª¬6±ñ~/:ªñ’ål:‚0 :FP-<W G¡ÂµÓÌjÀaÀ{jÂ}Ô¥9”ºb‹ ³NÜ%%šVØ÷Qƒm3¾>”µn‡ë*J¼N«ª4 ¢›»èºdàì"“|Fây¯az÷‚1Rc˵S +07Ü•HgÏj¿Ÿ„vi6†2!ìjGkº¹FxÒsãÄ{´—†;§àÀ¾CT®™D1lôÀ¼ã¼;iÊ 9¦.X§›ïG-49m¡éI»„áYÙÕö€ÄóÉ5w§§4IÜKLbHM@ÓÚh%Çp8Ûÿ2t6¦¡«aŸ£2ºFSð
gÇ +ë@Ëoû%Öa¾¬* Õ¯qŸ`.[âéÕŸWßÐüðYåÞendstream endobj 584 0 obj << /Type /Page @@ -2938,21 +2926,16 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 592 0 obj << -/Length 2768 +/Length 2752 /Filter /FlateDecode >> stream -xÚÙŽÛÈñ}¾By“ ->‰²šÍ«jÝã\‘ÎXr/]`S0%Oõ~_¹¼>/]a“4ËžU¸J’™•í”Êöú6:Ø¿W"]âD¦Ëî=$¯Pè r2áÜÈLS -ø"È}áštàÀRH€n–¼j=:І2‰1l=Êþ¶¯N#Á c.•Zö¬Bá¼$enÐe§ò= -0Ç?ßW<[æë·«šÍ~ó‡ûÖ͈b
á)ÍtvÌíÛjŸwç¹eÀƒÏë¯#œ—¸EDèIH¥àëWeGÆó¶*Ý!ô7d~¿Ûåùmõd~ßÕÛºæó׳<+›%šégu£1ÎK<§)Ö”~Zpœo˜–<ßù¡¥ÁX˜dËúÏ -á¼K8Ðû¬"á¼ ðhðˆ8Sµh~ÿØŸ†ôA¥àºÌ>+ƒ#œ—Ô,a™UžH%#ÁOâîCˆŒå%&3Q9}ÖP5Æy‰ÉL½3ªFÄÑjÌ‚L9àÔf1®AþÏ‹¨43òù -/Tˆ°¤5]– =WžT‰L0ƒ¸¶V°‹sa¿‡ëÁ¨Àb(Ì«*+Zž¼<±H\K»ßqBJõ)§Ø†øÔÜ|Zn7yèyw®î~ܹšæ~?„0W”]éšøÓJcÒ"kÈ}%V¹“G‚|¡|Ëf¹9áJ`1‚LØlŽñÔWè,UvV,}·¡R“@¢áãÊ’—öÞ{Ó·00Ÿà$ž@šŒOX
ç
2Æ<cÅ › ‹.8žÉGCª«Ç•a;d(›PÃcÓIÃã—Z,ÙÊÂu´ôp_âBM³ƒB¹‰³AÃ/h¡…«#LQ:¸²n¡ûªPçaïŒÒýž{Úƒ<¿ëß¾¥êµ¯ÛRïp–ƒb3§rù%ÍÒ#ÿ˜ô\A[–ÊE&ÑŒb7‡þž-ší"{k<³šñÖÜdü„(¨Ù„ˆiˆP]{‚
¯A ¢LÞ»ÂÑhVê¸%–×–ÝCGp °(Ð_ó×ñѲ8®èi÷Pöw]¹_±eWa›®qÃH$tu=Bà«s%!…Èc]Ï›Îf‚LF™hJ·y]x+RzY¶¾ÍvOßû²)h¯õK9l˜®¥ýù«kA–á‹ìè̈wÞÉ`ýˆf‡1ŃÁ°ÉeÛ»/BJpMÔ'€cïRoÝà -(på¶Kh<[¤(„}n#¯"zÙŽ&Ó€ ðXQn«òú–ö!\DÇèô]¬;]¼ß'„{ıŽëW£÷vÉïv1ª~_—Ïz6éMsÀP¸Cçæºš¬áÓQzüq÷’ÎQ½¨$9ÀêOøaK¢3šñiiRÈZÌ/èl‘·m•ˆÍ8V¿—3L"m3L0È*†eS.æš^•†íq°g¤†Úm>UvÁ,f(Ä(¹T႞R$ LÁÞ•T9êéy°ä<I@iÕÇ -ÉIJíÀ5󦨡™·m¹¥e¯uÇ™9Z5 7?¦N`Ìw`ýpØ:”Ä}éÚxßmŽö)™$KF½áòÏu´hV*0‚x¨õ^‚‡FNãÙ@ûÀÁ¼üÈuèÒAhLšDK“Ç‚?\±÷îES
w„ž!á¹BªOÒg!bü -$ŠQ¼6“:ã*ÄØVað;”¢
Á3Èÿ`Å÷\? a¢/†ÃÑãø+·Ðák]8·)[䇛pwkÖ?n˜ë\YAh~köT@4‘Ñþâë$Ôø=Ìè×ÌÔånç3µ„ú¤¥/”Xó\Ã$?øP$cü¥¢)úèçŸå\@{€‘]z€¥:96há±Ö€E_Á7´Š{`^‚øvgÞžà<²õ™Zê{™‡Æ¹xqSš€òú|›Aþ¥‚Â@kòÄ_ær0>’h Žì2´º1 ºø|wãêð9;KX–cT6áØ°A5/$Ù"°-¬]¾í‹%(éÁsi5(×'Mœç¾r–êQ\ [fqÆ3öé~ÜÒ‡“ç:6<CÅ7m9(õZ~]2~©òÝnüB9UÍOMÒY¬€úÔóëLžê¡Ï:Š=b(ã¡I}<{âžžéHÏ&>ÿN"¹¾œYÆP>^ÛŸe‰‘ÂÈ(`1=½¢©áÐ ]¼5Þzô+KE¢´”Ç·þÖø'öJ¨e QK·»»É‡4Kkeœ{
-?°•ôíÜÜó43œ,>q9
?r½$4m¹Kvpu¾õ!.Ùãßû:iÜõwºù'úô?íøfi®pÖ‰d,–óý‡q Š?*”[òD!-ôóVGFz… ûQ“ -+W•Ð bù§};›ÉŒIR©øÓþSÎxæ·¢Ë0Ù(_ôÛ³ÿÓæÂÍÿ…×¾Æendstream +xÚZÝoܸ÷_±}Û²ªø)1À=\§¸\{¸^Œh’٢׺hµ®¤ÿõáúÞµƒ¼5Îçã7TØ*†l•ÈHÆF#`ÀØêf¯vðîïÝ/ó´Û@¼R¿¹ºøë;-Vid´–««Û—&*f=Ó«üÓú×ì¾hm¹Ùò$]óh³Uq¼~kkšøPì7,^ˬ=Ô›/Wï/.¯º£Tkþ<)¥Ô‘T:Ym9‹´N“!u bLEqœˆÕ6Ž„IÒü÷âÓ—x•íû?û +j¥\™UpÀóœ‚ ‹˜2Ú ©e¯`øYÚ}ð9±8§¤âãMRCžç”T<]¤ËIj |Ÿ§†*ÈXERÇr5„ÿ'¦AüK¡_smCÌ…#‰”É0œD– +îœð!¨„²•¸è½íºx„˜àdɈùþâ#á¬FŘS,ïm3Q±çË•|B°!Õü¸:^ +;¡”êõ:&žô:nꩵF°Vä¶¥©Ç‡'*zÚ[ÀÈuxêOøMþEn«@“–¶¨h¼J<sÿîÄ¡»w.CèTø]˜ÿúYh]mb‹]Àƒš¹=…ëϱŠGñ1Åò\CGYEIt£ÐÈa¼«U½[…áÃh
k¶ÃEÑ:ãMÎÀgB +M~s×ø È;a€^|‡™ÔŸèÎú½{;4·TY›6l5ègF¯‹2?bužµ7!èö4Hê–lkæF›q¦#ervãÎ +Äs¾ÀÞóªdœ¶ÂùtW
£óñ·sR€éÅÕÖ[ñ@ftôpÊáÂ"«Z—æ!͹„/(áÂà?îøpÔwë¾hÒ=†»¶Å.†¹Ú°à ]§v9–§š…áX;œÓ@9nŽTïÈ0Ó;'<÷m
v…¶m–ü endobj 591 0 obj << /Type /Page @@ -2993,17 +2976,20 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 598 0 obj << -/Length 1660 +/Length 1663 /Filter /FlateDecode >> stream -xÚÅXÛnÛF}×Wð‘¢ÍÞxÙ -ξëŸÂax1D¿»½~*/f&µwûàIm˜ -¸Ø+½M?û?&ۼ͊ùBF±/Ù|pî_g5m|Ê7sÁý]‘´U=ÿrûavsÛ$gqÊoóRëé Œ¼…,ãhˆîP¡a±Ú[p¦L äÏÙç/ÜKúaævŸágÂémfЇ,ŠTÜí³O³_{…Ü[(0…æ´2ä Ì-H<R¦˜Š#åIfâ8FuÞŸÞÞ'Šsû£{Âæë6"ò®+På
´q«òÑëûwî-0* -Ô—>ÅAlkÆåt…*- !eˆ•ÖZ1£"Ý7¤Œ
ÙãLÙ†|»ÄŽ[æEº+W][ -ÍÞŒÛOjÁtñôâ
µèQ‹!ìØ™cmèÌuÒïçŠûYÙ´Ýd¼ìè™fåѨäUÙd9‚‹‚ -þï4³%‰Cj§éç-Ž(“Ç6ÊQ-T®%Á¼i¡˜¯èGSÐeŽ4¹…mEÀP·>c{Ù-š0XÞEIl’ì€Mˆ4€yÿAL$
’âŸ0Ñõ‚NveJ»7›íeÓ:Ãýí ºÊlãÛDÀÛ²©°à΄‹V6YÛC%³Y@âûö^9Êì$—p&‘§
dìlæÈ7HÀåŽiŸwuj‡Îés-Hé/mX#¾ê_vÀñæ<KQgX²‡]bɳV{–<²:Í’V§YR‡’ZwJéewX'˜£Œuóõê'©PÄ1ƒWu<I…(9¦ÂŠ—«6ßÐo¢CD^ÑãñI¼©Xî™O‡Š˜ÏRð -bĦc:ÔÂÑ¡Ótˆ +xÚŘÝoÛ6ÀßýWèQj–_ú`<´HºÃº
6`MäHµÕÈ’+ÉI‘¿~w<J–eÙî°Cš"÷Å»Ÿ¨Ã?áEšin/2 +Bx÷›÷V°öCÿ+œì¢^¥ßÜÎ^¾
•3†Ú»ýìIm˜ +¸Ø+½M?ú?'ۼ͊ùBF±/Ù|pî_g5M|È7sÁý]‘´U=ÿtûnvsÛ$gqÊïóRëé Œ¼…,ãh(ÝI…†ÅZhoÁ™2q€"_g?q/Ñw37ûœ c¤·™)²(Rq7SÌ>Ì~ïro¡xÀLšÓÊh#enè¶Ä#eŠ©8Ržd&ŽcTç}õö†8PœÛ‡î&_þ´‘w]*o [E^ß¿so©PQ þ»ô)θb{f\NŸðÑI(HâIk˜Q‘îRƃ‚ì團²ùz‰·Ì‹tW®º²š½—ŸÔ‚éâé·OÔ¢—ZÅŽ9Ö†Î\'
¹ðv®¸Ÿ•MÛuÆóŽ~Ó¬<j•¼*›,Gᢀ @bäºÆtr3éùQ +'0Øß‚áÏD”XåŠÉxzuÍc2îS O€Ö ˜# û z1LÁÑØ±XB›õY턎ÊpX\±0ÒúÐê/y‹Tÿd3Îý6›/”Œ á5bÿ}r _×9ý¶gÍýǬ.vMû”¬kÜÞÐ"Gáä²E2,3:ž1,#¨|SÜ%!àoªªÈ’òYoò
ÛdM“¬24ö`ͯ–èÌ'%I]¡j(ÂNô32’ViÀÖ]ÚùpØ®cçÚ5—¥˜Ã1þ5iÈï×-Í¥yFbsøYÝܯ!jÈÞƒxÊë”Fë¤}A²_œÂÒèfX¼N +2èä¬îj3xÂÿ²Ò¶nû®ž1A*ÊEÕA*’åúNi]®òÑúë3ÎE?óÇ<ͱ=aT§¦ét×d;onü?©gKÚ©iœ¦_·Ø¢4NÚü1Gµpr-mÌ›ó=4 ºÌ‘&7°¥2TOX^vÊ€&–wQM’ÐD‚ ¡ùb¢b|Øþ]/heW¦4¸Ùl?cèI¹j¶ƒôÛ-«ÌÖ¼Í<¾.› +ÏÚiwA‚MAÖ6‡qÐiÙ ó¾ßýŽ–ÝÎe¸$nÚÀ(÷ÎfŽ»C.w}ÚÕ©í7§ÏUe¾´aPÕ±ßs€wsC©3€ìÅ.ò¬ÕGV§y`u:”T•8¸SJ/»Å:Á £›g8¯¾¦Pð$E3xKÇ“Äc +6py¹jó
= QòŠ~.1Oâ¥HÅr=*‚ž¥ … 1阄Z8j1MB RG "!Î}q{ˆ„83&!® qµoÆIC¢ð„vC=h4˽ bRPñþPW5žiâUç-JîP@17¹Ûšc’pðWn/ü°–ÕuF9³ºá|AzíäÞfHí=ƒûž$£{ââ“#. +#qñýXNáäÁ<B#yHü…‡&˜q¸ˆÆØÝïÞCÄ÷„‚$Ìž†$H
! CHÂÖΓ ‰„$§òl*¶KÇõ¿sQrÍ"q‹¡3Tì¤.AñœÉž‰c“ÓHš|¿så]g…ÍÅ#6`R¶¶£Éû¢•OÊŽˆ+úDa +Ë>ë†r +çØ.…è„(!ìwÄIvÚ”„–—+Ñ:ävm–Z¢LšXG–hå”N’F|º©$âõ¬Ø×¾`²bÙ´4W:RÁ´«oÛOõ±'ܱ ú endobj 597 0 obj << /Type /Page @@ -3289,13 +3275,22 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 611 0 obj << -/Length 2439 +/Length 2425 /Filter /FlateDecode >> stream -xÚÝZÝ۸߿B6³ü–”"W$9äz9´HÐîöä5׫®,o%9ä¯ï‡’)ìý@PÅ>˜Ãápf~3CjEÂáO$©fšç&Is
!’«ÝO¶0÷ãð+íª'^ÅÔý|ñç÷V%ËÕÉçëDêœ)ÃÅ‘éçÍï‹¿weçªåJ¦ÙB²åÊp¾xëøTî–‚/UÑí›åŸºx÷yØØHÎ2kåÓ¤ÔÚ2mlš¬”bVª<¦ž9‹ÉYš¦r8‹2‰,7FâarÁ2²d ó\r‘N…ÌS–I¡“˜ßƒ]{¢‡»JiPp<Õz¼ëÏûÛ¢r¤¯ß\Ù¡Õ£æ•T°‰iøÏûzûšÖÜ5û+×¶Ka¬Ú_UWî»7ôÃa… ¶2‹å†I+z¾ß庣֦|ªHÄ¿7ûo¸lI¿e .kúýXVUÙºÛC½qa¨¨ÙT¯ƒ‡JËòT©G¬Q³fOö¨5Ïíz´æt×ÖŒwý¥¸B¿iJúí@š/¾¸¦:´Ý}qÓ ÒZšte]ºÛyË«˜â&²ü‡ºs[Ä—âh1Ååb¶(¶Î{ -¸ˆ\פޯ~EîpŒö*ˆs»”|ÄOV2®™ -S!pìÛ}‰ªiÙÆíhø“8¨
ȢƻÝÝõü ¨·í]|t\:#:®AуŒeøôšˆ7ŽàÍßרv@ù–ƶ8 u«9SYšž‡zLuêÙcP?»ë +xÚåZ_Û¸ßOáGYþ§”"W$9äz9´È¢Üí=È»\[]YN-9äÓw†CÉ”-Û»‹ (Pˆ)j83œ™ßÌZ1áðOLœfšçfâr!&·ë+>Y»û_içñ<¥þëõÕŸß[5ÉXnž\ßO¤Î™2\ì™^ßý>ý[ñ¹l}5›K—M%›Í
çÓ·~KŸÊõLðé®*ÚÍvöÇõOWï®{ÁFr–Y+Ÿ¦¥Ö–icÝd®³Rå)õÈ^LΜs²ß‹2!XnŒÄÍä‚eZe“ž÷rÃ…;T2w,“BOR~GR;¢c©Ò&4wZ¥þ¼y(*OöúÍ—-jp`z´¼’ +„‘š†ÿ¼©—¯iÍçíæÖ7ÍL˜)«6·EÕ–ëÈî
ýpX!ˆÌR}„aÒŠŽoä÷c¹hitWF>U¢âß·›o(DÒo©Ëš~?–UU6þaWßù8UÔìЮ}„JËr§Ôo&Tç¼Ù‘]ôæ9©{oJ=áÍTê/Å-Füj[Òo6Ð|úÅo«]Ó>«-¡—¾¬«H÷0îyaSÜ$žÿP·~‰øR=¦¸œ®ÁÅÒ‡€hX @v»E¾E³"š7ø£N‡‚2°kö¡€‹(phêiîWäÛhn£ú«‡™äÓ¨þd.sàš pšp,—1ÈCpäj=5FM.!4^ÑP;L$œù2“fºYÓCñÐî|UÅE»¶Ro”Ö«ªõ‡ì2ðð¨,Ø<´‘9ø \1ZØAÔe¦Ý>¢Ùü²ItðDXm¶œ¥_µ!¤Á^qŸäþ€@+=%.Øh‹fú ’$B_\áàP œûöX¢ikZvç×4ýÉœæ4dÑàÝúóýâ ¨—Íçtë¸tDu\ƒªGËmäÓYz°!rÜ0ƒ4ÛÝ£ÙåKšúâ$ÔæLe·zJuê=Ù%¨Ÿ•ÚCýHê8ÔR?_Ë5åÅ\Oo”Ò‹P÷ø´Ýh´åüò
ÐÃãÝ"gF7’Øc +ëÜ_ÖËÚñy]|¥H|C´’ó“ж°É̸$˘åey˜z[ì‚þ0ìà:Ìå„ïÌ1-† ÁX‹È
€ãüO{(ÃäÝÛ#Bš9)¯Éêô°ðõ²¶-—m”¿(ZÛ$ŠØÂð$^Ývëƒ1ecHø°¦h'hCÓ³íÊÛ?gï‘Vìî#]€W¬£M×ýŠòCR€0¡©uާ‘.,‡à +=Á …¢„1ÙêIB¸ð±|ß®j´ÆÁ‰ó M©Î€¶'»Ú³R{ÐIí@êDzî@«ÜAk´®z´Àñ,h¬”
Zs³&c™36Á,ÐGÌBLu˜…!1wÌB,ÇY(áצr;Œmâ—é®úfiõ…é!d3u²ÙqICâ5Ùœ ‹3edÚ¤ZÔ4w²H!ˈöÃz¬$ÿ×ðª3Æsùd¼’å1&Ær6Óp"š$„#xF˜ÛÉáP$YÆbHJ:×°[åb¬à vÜ +u‡1Ø©÷qy>>tþÔÁŸI¹^‡†…}…öì@Zã«E†S
‹ë¨Á™Áþ»ÛMÕ~µîØ7› +"·ò1fzW„)h|o”ÓM–)èC‡…/’x…Xj°÷‚únÙ :èã…}©¡$²7Ëשߌ +…!$§gÊOò
¤À„0´æ›ú†s¹ÜEXîƒmAèØBygdÄ$xà5¹±ÿöD´¬6L¢”Qg9ÏÅ0¥ì²‡Vf&³êyUm9²]%ò,-ieƒ›’5ÈJº¨¾\D”›:
+z#¥úX¶0
B6ò‘Mv$» +aͦZÆy0±iîõØž¬`RàÓpæT¼‡zÞÖì =qŽ¿ƒHz=éÈŽŸ³Õ6{QleY`44÷ŸFòtï^0/ÞµÜ1”x0¸Hã§™R—£Å;Î.Ú| šÕœI·ð—"¡‡|a“{s
ÓVy¢¿šK¼W™š +4M½ìl•äµ{0Ø}׿(WÏæàÌù>& %Üô_>¤ Ù*acg‡ïVPý@zðe\Qû|~ÛQúªªf>¨ô:Þt€nýeÌg‰*vÚ+ò~f§WôHAF¡*¡ªƒ2¡a=hçcÏHy‚@Ž9Oéð.^Õ@'êN…"•ôÒÊXðm(¨ae_G«±ÖÙ"¹È†Lµ?¤¨øHxÍ’z¢¹Ãü®Ïµâ 2Ù… æB›ï©›Ì¥9û%è +Zn +ÑBìe/ªŽ‘¿+Ûïý=¿Ý3Ú“|†Lö7$ôæ¦Ó¯ùŒnbÄ|¡ÑœŽºw“ßôNöúSy¢õiË‘ÓÕxÅ :³oË#ª«ÔÉ?Ð8#ù?Ó€xendstream endobj 610 0 obj << /Type /Page @@ -3312,16 +3307,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 627 0 obj << -/Length 1833 +/Length 1834 /Filter /FlateDecode >> stream -xÚYÝ“›6÷_Á£=T}‚Ô·drIÓN;iïÚ‡¤yÀFgÓã°¸—¹¿¾+$°6¾&“9ÒjõÛÝß®Ö$Àð1G+ÄŠÁ!Áê~†ƒ5|ûØý%nnØNýÙïnf?|ˆX ‘Š"ÜÜ”+Ä&¡7é×ù/É.«u¾i,ç-Bñü½.íÀuv¿ x¾Ï“z[.¾Ýü<»ºé6#EôiZr!.¢8)AQ$cv;‹ƒºó Ĉ))Ì”g_¿á …©?ÏÜè¼`D”¢ÁýŒÁ!„jGòÙõì÷N †íXŒVä¼0»ƒ0÷Ø-9Ê -àC«2©6#1I‚(rRÜ<™#¸ER@(ñ½?—ÛGchÐy²–Ì’åZWµÉåc=N©¾MöùùŒ¢28Ô
SâäÉÃ)&æ -kÁ ¸#lÒ‰/s#ÙtãJÌ@Éñ¼uª=8TÿôJUaZ,~Ãë•]4Ó±#"ž°ËG iq¶Äˆñ˜ŸêD:’Ô€/3áXžÛݼnš1ÃÍ‚€ë$KˆJÝvOúqà>26íÀßb¨‰›tI‘¾¬£øÈІ"öŽ‹¾LHÄ)'Õ8¡G˜@)%NiŒá›BŠ +xÚYKsÛ6¾ëWð(Í„(ž$Ð[2qÒ´ÓNZ»=$Ía‰5M©$Ugüë» @ +"%ÊŽÇ# +‹ow¿]¬H€á1G+ÄŠÁ!Áê~†ƒ5¼ûØ}77l'‡þìw7³>D,HEnnÊb“ƒÐ›ôëü—d—Õ:_„4–sŠ¡Àxþ^—và:»_<ßçI½-ßn~ž]ÝtŠ‘Œ"ú4-9Q„” (’±?»ÅA]ybÄ”fÊ¿³¯ßpÂÔŸgnô¾`D”¢ÁýŒÁ!„jGòÙõì÷N †íXŒVä¼0»ƒ0÷Ø-9Ê +à¬[Øuù¶Ôîý:³tð2¼*]¤ÙOºóEJ ˜Ä“¦/s2Œ!~ {dÅvµ±O{ÏvÖºrŽX9?‹ÕÓpÛ•†Í¶+€Ê¤ÚŒÄh$ ¢pÈIqódŽàI¡Ägôþ\n¡AçQÈZ2K–k]Õ&7–õ8¥ú6ÙççC2Š"ÈàP7L‰“'s§˜˜DÏÂ)m]«Çú¼»z¯sGjÅÑ Öà|[·®8â6‚B6“R»/sÕ +kÁ ¸#lÒ‰/s#ÙtãJÌ@Éñ¼uª=8TÿôJUaZ,~Ãë•]4Ó±#"ž°ËG iq¶Äˆñ˜ŸêD:’Ô€/3áXžÛݼnš1ÃÍ‚€ë$KˆJÝvOúqà>26íÀßb¨‰›tI‘¾¬£øÈІ"öŽ‹¾LHÄ)'Õ8¡G˜@)%NiŒáBŠ vò<]GšCú$BF~ב`7—ŸÛ®ÍÍ%Tµ˜Ù¢ƒ"uè«Ã¡à ~(K3W®^}ß5| -õmïäݱBŸ>§¯7kˆ'K +õmïäݱBŸ>§¯7kˆ'K +pµ˜ÇÇ*ô<©›taS! q´)rS€T`kº™Ý`b)æµA¿LlW†:>° «¦µlL_ܳIkI›Mš¢ë:\ëÔ5œmë¼6%óë•÷“Œà¦„1oŽ(°Ï{À86'„$H"?ÁbÝšÐ_t‚²ÍØ0wCöb¬¯Ä ¸Y—¶eMü³ãm!Í-TE“gK‹R!j¬“J¸´„æÝmSëÛMÂnÄè½}xtŸiÆÊÚT‡v®W¸E®¹ÖÀÌJÉ㈲öúp¸‚þ£¥‡äU¿>-¿ãÓ¼m`åZÔ6v@m°SâÊ
Çà¹ÆaÑ9Þ–n}Ú ÞäæSEÂüìåfX?û«æÈÎÿZ/å–endstream endobj 626 0 obj << /Type /Page @@ -3341,7 +3339,7 @@ endobj 633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [219.4036 411.1735 233.8592 421.7557] +/Rect [218.0742 411.1735 232.5298 421.7557] /Subtype /Link /A << /S /GoTo /D (table.2.3) >> >> endobj @@ -3359,14 +3357,16 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 636 0 obj << -/Length 1212 +/Length 1214 /Filter /FlateDecode >> stream -xÚWQs£8~ï¯È#Ì,>l°ÇvÛ½iï:ÓÌÞÃõ ¸Ä[ »³ýõ'Y†’nw2“Ø’,é“%Yá«>|•Ä,3¹J²œ¯6ÍU¸ª€÷çôËl0 -sé›õÕ_T´JY¦T¼Z¿¬Dœ±H†ü¨t]þëý•ïÍ k?Iê æ2½[ÝáÉ4>½C»Îÿoýpu·žK²T)ñ{^Ʊb±TÉ*œ)•&séXÎ’HÄ¡V\°Œs…`¦ -¨Æ‚»bŒ-¹‡ànMƒÉñóèõÙœñ®ÏBa¨Ô>ϤÞ3⤲”ÆŒÛk^(ÏzNü-SˆÄ+]w¹Z—ÆvjÚÒÛaé=‰¯}§u³‡„ÒÄ›5®K[Í wGÕz°Ý -R‘úJW8>1"Ü]²û¼°Ù+ëöáKHfEK‰tý:V®-´g#¾ý¨Ò”…±¿÷a&|ž^*êEM*ÑÓH¾;õÿÂòÿgR½endstream +xÚWÍnã8¾÷)r´±Ö’-ÿÛmgÑî +L0{ØîAŽUG[Û lgÓ§_R”]Çq§ƒ +½W`³ÿ6ÎH¡;m†~Ôêw{8MHƒÑÅéÊQnÖ\8½×ï&ÀÌA:ž²\¤‘6QEðÄû‚µ]èqOmIÄïµÑíÐC@z”ºƒýF~¶jƒ˜/OQ’´íèGžç[5ÁÚíÝ~Zõ»ØzéGzg†`©¬ByªìÑA+qˆ|Œ?‰½ÀÒ i|ÅšÓ}O›^TÛ’¨ÐSásÏTÄøf4¦ÝìÅ#»? -rº¯ÉànÊèhGÕΗ:íönã9Ò7íÈÀ€%6P¨ +º40¾ÞØ2Š®ëF›þCäÜö¸ãõä }Ñu½‹ô±;PU#0—@žs& ±ç‰d¥VâæRº°±‚–Ø–Ä «jÓ·8µU(þÓ/ƒ«xo¨¢ÒP± +;_$ž‚ø,§©Wºzµ.×´¤Äò¡6zRßúvëæe¥I<Žl¤KÛÓ wG={²3ÔãNkÑä£]7øð°vFU×dã¤E{+Ý\bx1Ï߃ê¤óуľsPp£ +ú··`ÌRË¿Uµ|\ uê+]á#ŠãnͬUa«(Nã5$³ë¢¥Bº~™ú›ýÙŒï?j†,c09įýM˜)_–—ȃ~I&“i$ß}ûÿÄóÿçRSýendstream endobj 635 0 obj << /Type /Page @@ -4104,18 +4104,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 656 0 obj << -/Length 1828 +/Length 1825 /Filter /FlateDecode >> stream -xÚ½ZKsÛ6¾ëWð(͘ÞÞ’:é$é¸÷Ò$Z¢%ÖÕˆT=Ó_ßA‚Ѓ”ÝÀ¶gl\.¾Ýo±X$ †_’(Ž86"Q†Aƒd¾™àd ÷~ñÿI+›vÂi(ýîvòæƒd‰FFJžÜÞ'”Ä&½ÒÛÅ—é¯ÙßE¯g)UzJÑ,O¯óëø\lfO÷ë¬Þîfßn?MÞßúÅHKIŸ†’s‰¸*I)ARjJwR$µ[0bF+ó}òåN ûiÒö>ÂFÄšl&”*„5“]Ïzòyò»×ˆa<Ê–Œ
+sbPÖ6ý#‡ÊR¢9ÂF&©àQ…¥w5•«‰Èü c̹úϼ¨[¿b7ü%Ç>¥Ì j‡'ÒÆ<48àBcö*ÓPç)hÊðbŽ@ß|¼>Á(%†é˜;•—0* -mc1¾ßåŲ,ªc Dd”0
Pˆký¤p"1ðÙùpJ½Î4Têê)æàM“ƒ3Ä4„»EŠág˜rh`!¢2Þ«<Q`$>‚H†éކ¯g{Ÿ';Ä÷n·Íó¬j§ÒÏë"/ÛvöPÿù./
I*5bX@Æép\¦€kب:ÇH ÐÉ©i@Òaâ!ìYGèi¾,
?/c_¦!Ð9FƒUd”K,l˜†x{ÆzB„/J,H5#…:ÇhÀa
H>HCD„ž†=
!—¥A¨5ˆŠJC s„©¡&° Ú‚Ã4ÄCØÓ0ް£á -1®ø¹#—“£bóº}¥ -†‘ |`Sí弘uííŒPðá]¾^çÝ1‘D?„·G7°_Ç8â¥.@9ÕÖFì¶KK¨cu³)òŽNì( -ºs*?ËŒDL}ì hF‰}ñÉÀ“ÈqÎ0{ÌñÃ=k¶?¢XA”IoØÀk¶Î÷þÜ4k_.Q$ëN沪3u¬˜{ãºêíÃŒˆév½¶V¿ù -Ž<Ñé优
·wv:ßëž\v†è3)F3Dí<G9ÓI]s¢Í‚ &ØÑäj&–)nb¤«+ƒ"â°Ót‚mo -¡tÒ'j_üP<`C'Fm -„ÏäXµ¢°Ÿp´RÍ»A=ø%ÑÈÈÿR*endstream +xÚ½ZKsÛ6¾ëWð(͘ÞÞ’:é$é¸÷Ò$J¢%ÖÕˆt=Ó_ßA‚Ѓ”ÝÀ¶gl\.¾Ýo±X$ †_’(Ž86"Q†Aƒd±àd÷~ñÿI+›vÂi(ýîvòæƒd‰FFJžÜÞ%”Ä&½ÒÛå—é¯ÙßEof)UzJÑ,O¯ó½ëø\lgO6Y½ÛϾÝ~š¼¿õŠ‘–’>
%çq!U’R‚¤Ô*”î¤6Hj ¶`ÄŒVæûäË7œ,AöÓ¤í}„Œˆ14ÙN(Uk&»žÍäóäw¯Ãx”!,VæÄ ¬múG•¥Ds„LRÁ5¢ +Kïj*W#ø ƘsõŸyQ;·~Åo+øKŽ}J™AÔ0O2¤yhqÀ…>ÆìU¦¡ÎSДàžùx}‚QJ$Ó11v*/aTÚÆb|¿Ï‹UYTÇ@‰6È(a ×úIáDbà³óá”zi¨Ô!Õ!RÌÁ›&gˆiw‹ÃÏ0åÐÀBDe¼Wy¢ÀH +|‘Ó
_Ïö(>OvˆïÝ~—-YÕN¥Ÿ7E^¶íì¾.þ)ò}^Z’Tjİ€ŒÓá¸LÖ°!Q9tŽ‘@¡“SÓ€¤Ã$ÄCس0ŽÐÓ"|Y@^ƾLC sŒ«È(—XØ0
ñö4Œ#ô4„_”X"*jF +uŽÑ€1$Â|†ˆ=
zB„/Kƒ&Pk•†@ç
RCM`´)†iˆ‡°§aaG×¥ i ++Lc4(‚ˆ€ºÓ‚”Ã4ÄCØÓ0ŽÐÓ"|Y…b +ºs*?ËŒDL}ì hF‰}ñÉÀ“ÈqÎ0{ÌñÃ=k¶?¢XA”IoØÀk¶ÎwþÜ4k_.Q$ëN沪3u¬˜{ãºêÝýŒˆén³±V¿ù +@`Ÿ5FŽdðdÏž³aLž•}ºG•ÙÅH-Z7eRòFÚH'¶›Á8¬âJqÚô0ÚÜÝí7·”$×; éÇ Úž€B–Hûa~uJµAšC®ŠæUÉ`>ÀÉžÒbJè“%ê}ñMGŒžètr^ÌáÛ¹Îób³|(W]†!úLŠÑQ;ÃQNÁtR—Àœh³`‚ v4¹š‰egŠ›XéDÁêÊ ˆ8ì4`›Ä›B`(ô ƒÚ?ØÐ‰Q€˜±Þ&dh‚½<4ºTWA®¿2Î7XU,Ö®e{×åÆ_?¹k,ÝjzS”«ôf&@¥¥îdäúšï ¬üeï«ÅºÈ—îÎ<¯ê|]wjARWQ^ùqšCÝf®+X›”Û»· o‘@ãØ8¦Y¹ÎÊ¥»eƒÁ5—ùC]¬ h:¼›Ò×îÉmî€Ü×WNäÑFh¾Y¬swý[¶X·XëºS4‡ê»¨[@k±ë¾vºö˼DçÌr±Gˆ³—G¶Ù.›¸«Ãm@êî<X“¡ˆ˜.ÜkW2 ++“Ý58ŸòÓ=–íl|kK×#ü»mw×w^,›ˆ€®6P¡U´=Ë"¯òk°'k®ZV?ÎÝW¦øzß©›ç…k¼-ïÊ»vÜ.¶ñq\º¾C×WC+»Öšå¿4 +„Ï$V¢°ßm´RÍA=øùÐÈÈÿP¸(endstream endobj 655 0 obj << /Type /Page @@ -4415,13 +4416,16 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 660 0 obj << -/Length 754 +/Length 750 /Filter /FlateDecode >> stream -xÚUËnœ0Ýç+X‚\¿Ë¤i+µ›¨uÓtÁCÂ0Fê×÷B`ÚŒX`®ï=÷øÛÃC"ÅÇFDÊ0í8*`îËô&!7“ÓyöõæâÃgÉ"Œ”<Ú<D”Ä&¯ ›ügü-{.;[%)U:¦(IÆñm|à®<$Ç}•uÇ&ùµùzñi35#-%=唽¦IõŒæ´taRŠ,[[mm¤Œ˜øê©+µMHyßìöÈ²sCW÷Œó¶íüD[îö—~Ø»ÒÎ-Ñ}ýH4ŽmóâÖi뼯?Ø}cŸ¥ãÛæø'!"¶mkýü=x_Žó>IÀ)fýC ¼uèÛ²à—2bŒüuŃŒð 5E4¿ÏÅkÒyÑZÌ5¶S“"¢W,ˆFL1¹`±4qÌz¯ï -Íõ½tM£”s‰àˆvaÒ–`'¥2¾nŽY¾Ëœq”*°Æß¶F>ã–ø©ÒçÈ8ö+D>V¥C°¯sl»‡ŽãÎØGë³ õ‘«ú¡q6eE˜ª³ÝÞ1^ž#mQ ‡cOy³|b Ê㈬aˆDF)Œ:‰ÄÒ†‘†<Ó›20œO8mžõ¶ñ3¡0P£Æl¨ßÚ®q§¢p"ïA—a»Ð7ëO…)”f=—)`ÞdîMƒ¹˜‚`=pÝ„ãß ³‡à` -dŒg\SM:/ZÝ5¶¿2äŠìrÂ_XÜSÖ{m)A’ ó¶ó¤°põ•ŠÊ‚u^¾²+‹ øÊúmï=ZÒÿ3Z#Ì%=ï;K^/PIP9Aº0óÏßæ:ÿèæ`endstream +xÚUMs›0½çWp„[Õ·Ð1iÚδ—Lãé¥é“`9ÃG3Ó_ß„€Ûx8H¬vß>ícaxH¤8âX‹HiB¢Ýñ +Gœ}W|׃ózê}³¹úðY²(EZJmöå1É+è&ÿËžËÖTÉšª4¦(YŒã[S{Ã}yLŽ»*kOuòkóõêÓfL,(F©”ô2–£÷’&M'4Ç«”R´g™—7¦Úë÷×Omy²þMÆyWïÈŸÜŸŽeëÍÕã¼iÚ^î+¿ílÛß¶?’Ǧ~qW56ïlácæP›zðº«OXMÓ2XàC9œKx%+ù2ðͺ} »uèÛ²êáç•Äi*øë¥ûJƒDTѰý>糞-ë¹Äv¥ˆ¤$EL19c1×qðz/ïÍå]¹¤ÑšsŽàˆváДNK*ã›ú”廬W*ƾ+ŒEÞãŽø£Òû€ü½`ùX•ÆcgsolÚ,!1xp·&À>ïi·\Û}ídÊŠpd³ÝÁ1ž·RªQPÇïòæúD#@”ÁÇY‰t:¸Pê,#(ÕŒ7ä™Þ–á¤C¡š<ëLíkÌ„BÀ@
5f}üÖ´µk‰ÂA°ø +!”ž‹eStҞØãó>èÌB|õ–ˆ+Âß~¡O™µ+?ý—ç6Ö¯0£š3sTñ¶G“Ç“Qâ–€è‡Æq“ +¤¶¦ªÌ¼Yð“)f‘Âi-Ä#cŒYOƒ–»Äö#C.HÀWN8ã3³‰1z½—–$™ÐoÓ:M +C?T©¨HçËW¶e +¾ÐŒþ3×Í鿚4E˜KzÙOvâ¼¼ÕP%AåénÀô?ÿœÿÉüÏ7çfendstream endobj 659 0 obj << /Type /Page @@ -4605,19 +4609,20 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 680 0 obj << -/Length 2458 +/Length 2472 /Filter /FlateDecode >> stream -xÚµÙrãÆñ]_G²²˜ûp%Že;kWâÍ®ìTeµ‘ˆHpM€V¢¯w÷ .JÚZ§ø€A£§»§¯én²ŒÂeFIÊŒ°`,»Ý]Ðl
ß¾ïž,âæ 9ïcÿõêâõwZd–8evu—qéˆP”ˆ^>,~,>Um¹]æÜØ'Ë\Qº¸,ð¾Ú-]·E»?,?^ýpñíUÇXqJ¬ÖüeRJ©‰TÚd9gDkkúØ3g1ŒÁew®3F‰QNãa:)GŒ1ÜŸ…¿p„o6‡ªi«¢nÂIþ^¶›ýª/Çx¾rÉÔâ¿my¨Ë:žøõ-ysXrºØ×US•‡c½ÆÃ¿þÎ8P(³Ìz…:M¨¥(;r¿¦ŠFzùoM^ÕmÞ -!¹°§(°½ˆîð:4ôïoÐoªí -Ý6Æ5„êWcäÔ€LTd}.a:¬g„™RCaÞÔÏ%jQ—§ -^ÿå|C^òÏ_––.ÊÃz[V·›ñ¥Rà"fþ€“ƒ -&’lňsêéô¤æöŒ.š´(ªø¶ò)F/Ð>%dÝCÙÈÛþÝßû„³ÝÐݵ0òÖ«ÊŸZ×^ü¶ï#‡Ÿ7‡GÌDÈ$‚îŽõ}[ÁVÜ(é¢
ຠ-º0
ž…J™iµÅ‹Õ.”¸PìÂ5``GxUº½¼O0´¡áNŒÁê–Ëpð9ÅA>7’Ã1 =òϹžN19Ç^%Ì…$ÌØP …’AAr}@Ç.ámç]è·ö}YÇjíK¶2}Oñ芡A$#R£êb«HõœyáÖõÚÉζ'Ù±pVI£bÞ°\@Ká>áŽKÅKiÜ‚êf
ÛÑËû“a{
@Ǫ^Ç:oWE„¦tÏ¥ü"»ŽÔZfÖö -šæ(6o ``Ø·ÑÝêGlÏ‚*lòĦ±Ñ÷¨[¨ºÏ¾’å¨Ì{£Ëj‰`íŽÏâØ„Å–<)§'ãepcáT.öóu;òÓ–© -ÇtÃ0“¹ 7„QjÀ<gM8OsQŠ=)j`Ul’NªÃ*¬6U‚
t›Q)q<Ìðù;È'ÖNSÖôŠ\;™úäã© ÄôÑ禖"¿Teüì§MP²qê ›°µ/ ¯ªC‰µ«‡çGôøPAë[@Ćºz0Û©?èË&
-.ªÞÌ« 3ƒüä«\xq1™„ °›„P»Ì‹ÙaŠzÒÇÓìŠÁe/ Ž~“wS±þžóS±+¸9§cDƒ2v$ÂÈÏÒ3L'´ÒõÎ#„\ü-8¶€äЖÛm oY€¼FºCplhøvNó€
8oE -|6m… 3C¾øO‰<ã¨4Qö“*—%¬-ô¹¾]¬;iÇm{/ñÁa£h¦»fþ¦w “X4¼š!iO¨4ýPPiÎÒCB!’Š0÷QÂ?<œM¤=KËA¥NS+™fL©ë.z“&ÆhÐâ¦Ü†‘Ç pX÷@ÁÈ”&J¤ ù“ÑÞíÉû›fê‚ íïvÒ‰RK¤Ðc!Æãù„õÛ)µ^Ä£N¼êä„á¹)nÂà/ML`ñs¬œo¢'Þnºÿ‡öSø•MÎB ›s(ðÚ9o]ƤããWR
ý:5à +xÚY[wÛÆ~ׯà#uj¬÷ +ìæ´iœ¤IN[×VÒsjû!5 :µúõýf/ +&MÚzùÃVªÅ«ˆ/Žô¥%‚Þ²#‹/“8“Ö1«yþûi4’åœÈŽ\ +9"'A äà”(BKeQ`Ýãõhä‡__“ÿ^×›¹mŒk„êWS”¼€L\-†\N„é±žæ” óCÓù\b–Mu°õ>Öe†xéÅ<4«°@ðúóŒ¼ä¿¿\Z¾¬öw›ª¾YO/¨‹ó<¹¨²0‘.`+Áœ3§'#@ZÚ3ºHhÚ"!qTñmíSL¾¼'ûTȺûª
×û]·ûèÎf@·ïU¡÷a½ªýÍyÝåËß.¡ã]äðózÿ@™ˆ˜DÐí¡ùØÕ8J5_vÜ”P[`REn3ÊχÊ7)}æHŸŠûô™‘ê}þ(˜“1ûœª¸˜›Ñžº!°%`Ï–P¯A£î¡»«tö
ÉquÐ(¿Ùy_¢½«K½FÚŸ"¬ÞV)'#©Ã´0¹1’l§$^«‹˜Õ»çh^¤6©ù ^>åÑðZJµJFþà˜Óyçˆÿ"rØ™û›¼WJ_'íéºå”Õ&sz=gJ+Æ
hG}šÀËV7á̦Úþ[G=ܬ»}8„oùéÓ~çíYoa¦ªaɦÒ@9x¸‰Ç? £jèl®£Ïäfùͦ®š. +Ð(ÀÜÓ™b|ÿvÖsµàfxëËþ‘ã3.[ˆa´#xìÓáR,‘í_P¹iR<:C'õpøÔ©6ÅŒÃ{wfáÌ«DºO +Ä%p‡gŠðNº…^ +=XŽç΢2Åi‹RHÄZ.J]<N„'unO/MèH¸#cXÝJž9§8äóBK\éQ~ÎãðxŠÉ$u¢$!ÞQ& +ʳP|$×{rìrþÛzÄ‚ü6¾¯šòPßù‚Jû)=C56ˆL示Ø(ò|μŽIߥf²·íQvÃ,îªY!¸š7¬T¨b9Þé$³\=ǰH㪛5lO/L†”ÿ=_Ô¼N:sÞ®†©-t/µþ"»NÔ-k‡ +¹›$ºœk7Lˆ<“Ý‘÷“šVkZkxù ++\eP&q9n$~ Ά}ÝyðÍ ¤Â.,+j™iÛ|ºA
ÐoûJËI÷˜
—õ.¡Ú¾å¡
‹{ßuyH¤8žLÇ \àÅ¢™ñóõ'²ã‘SNé†Q¦p'ü^ˆÂ˜ÿé”5á<ÎqB)u¤ÐÀª\'Þ×ûUXëé>5£šÆÀã,€í[êO(¬=KÙbPäÚ“™O6‰ endobj 679 0 obj << /Type /Page @@ -4813,19 +4818,20 @@ endobj /Filter /FlateDecode >> stream -xÚµYݓ۶¿¿‚ÔØ‚ñMÀ™>\ê¦m2é¤õu:Ó8ºObŽ¢’²'÷×wR¤ís:ÏÀb±Ÿ¿]@"ãðOd…fš{“^Á@ˆìnwų
¬ýuü+"ír ^N©¿½¹zõU™cÞZÝÜgR{¦G¦7ëŸóV﫾¬KY¸\²ÅÒpž¿)[šx[í‚ç‡zÕïÛÅ/7ß_ýåf<ØHΜµòó¤ÔÚ2ml‘-¥`ÖºbJÐ¥¬PRºH› Î -ã-*3ÈxV…ºHf˜=UáÛ²}(ër!Lþ;Í\×›}[õÛÝB‚jM>"}ÕôeÛ”M4ÀïÍZ`Û"ñ¾©ºªlÍmñê»Âƒ}…ERҰŠ 0ï¸á·Ó³ÏÙzÕü8µäQ›‚)§TÊ4'™5:¹Z€Ü¹lÉ™òÎ ÉoW?ÿ³5~g?ÂgÂ{™í®¤çL*/†™úêíÕ?§Ç o™åÞ]fF90‹ÃqËœ™ -•Iæì²ßàT˹ób:‡iô¾ ßJLšaéÕßwoöÀ<;ò—cì¶<ñu/¥óÌinÿ8‹#á@)Œ.…LeËY>#™Rk„eŠs[ºIndFàõ-FîmU¯1`c‚Ãá¯OÃO -ÏŒ’E69ãL’‘èiIÎx¡$Ód\€Nùffü™feX©).¥&M>ËÏmó2ìŽÉ9ÕOk}J¿3=•u €Ñ`{æ½y¥ŒÐÀЦM1PiðXˆ‰)€ý%SàRÚ¸LƒSàTÚDÝõ4(«¦¤ÑGd[ô·qâÇwÊÚM]ÝmI¢*n©÷«:Òü{Û>"˜á¾xêêöñ°©Ëj‰F¨Q0/# ßmËðXK¿©ÊGŠ„ÁÁzÕÑ -éxÞ—ý Ø“ì@ªºä%.*ÿaöûv]5¡.ÆÕ.e‚™6Á‹oª}½©‚uMþçº*›>ÒtU³¦én¿#_Øüýªëª4} u›ïÞ©Bw9Ä¢©L>jÙ¼$êÛ*ò"Àœé‹¶mVŽÔ}ŒÄûû> -ü7ˆ¯Û²".1<OtWA÷à)¥Ý¹i•.ò -ý’((kZ$[¼o÷o@It«†Ö×åŽ&fö¥©¾¬ê¦ÄÄɧüÁ*}täĦjh&¸'fì@ûàÈ#XO8}N04W0Îû°ªß)
ž;F^²€Ú£«ÿ,`{Ù ^GËÁàÜr0ÙE'zLh-ŽÇLõ&ÿ/æ/õ(€X€dÆÈP( -Å -îcr$9¢Ôj©úA[G~ìˆlnÌ@Ë&T ÇêÌ‹jT3Ñ¢r?½:A“”°ºš/–¶JHk™‘ÚN¥-|Ì:øÀ¦-%‰áLC‰'zJmô¬‘âODaÍLhß4TF"‘ÄÏÎa¾(l¤ø²â5Äñðÿ›¤™<Tu5X©I¨?c;4 Ø’‡Â4OÚnZFÜÜaq¸Ûö¡•}±tO‡˜¿ÛVw˜8}Dõ6þ
Áªè-fä“ ÜYJEi4ãʹ't„{€ãƒý;„'<|;`~LjÃãj[Óø¶D¼¨6ý ïA– 7"t0˜´ŠA·ïç(pŒ ´JÙ˜ày«&Žªm(³rš òR&ÐŽø‡&1þ±Ç@LÀ"¸‚æ !@ø'ÃÓŽÇÃŽ§ØKÎPóR$ar»êù æ£é - 7ΓoVMOÄXiuSî°´4ÈP -Œ“Jj™àRN#ãuª&GŽOÔd)™VŸq¸‡¨óìzlá8| -Òlâ-@NÄ· -0r'vC"ã¼È$D‰Wîébh΋á4•‚š/‰Dˆ-D:G~ç‘8¥ S4NÌ#Q¦\ê™ÅGÐI½HÂ'}ŸÓÚÏ”Ì{°ï„lèpOÏ\âCŒÜXJl™¥yFüÎíb±£ŸÝ+>‡NÌ!0Ü—™#]6—RA@f€{1¶ãc`ƒU«*¡<e +xÚµYÝÛ6ß¿B63ü™âÒËõz-Zôš-¸¦ÚµÖVW–SINÐýëo†CÉ’Mo’MA°9Îço†´È8üY®™æÞd¹W0"»Ý]ñlkÿÿŠH»ˆWS꯯¯^|cU昷Vg×w™Ôž)ÃÅ‘éõú×Å÷Å»ª/ëåJæn!Ùre8_¼.[šxSí–‚/uÑïÛåo×ß]ýãz<ØHΜµòÓ¤ÔÚ2mlž¤`Öº|JÐ%,WRºH› Îrã-*3Èx–繺Hf˜=Uáë²½/ër)ÌâOšyUoömÕowK ªu4ùpˆôUÓ—mS6Ñ +´ÊU&™w.°Ëþ€S-çΊé8¦Ñû&|+‘3i†¥ÿÚAL¼ÞóìÈ_:Œ-°ÛêxÄ—I¼’Î3§¹ýë, +Œ„¥0þ¹2•-gù ŒdJqp¬–)~Ìmé&¹=’
T¯n0roªzy~Rxf”̳Ég’ŒDKrÆ%™&ãtZÜc6afÀŸiV†ÅšâRjÂÐ,fù¹mc^†Ý19§úi
a¡µOéw¦§²0lϼ7£”Ú´)*í +\J›W‚)ppb +œJ›‚¨»žeÕ”4ú€lK€þ6NüðVY»©«Û-ITÅ-õþ¾¨#Í/ÛöÁ÷ÅS‹›‡Ã¦.«= FμŒ€|»-Àc-õâuUv8R$ÖEGk +ü-Ä×MY—ž'º« {ð”ÒîÜ´Jç‹ +ýœ((kZ$[¼k÷o@ItECëërG3ûÒT_VuSbâ,¦üÁ*}täĦjh&¸'fì@ûàÈ#XO8}N04W0Îû°ªß*
ž;F^2‡Ú£«ÿ,a{Ù ^GËÁàÜr0ÙE'zLh-ŽÇLõfñ_Ì_êQ +²â%Äñðÿ«¤™<Tu5X©I¨?c;4 Ø’‡Â4OÚnZFÜÜaq¸Ýö¡•}±tO‡˜¿ÝV·˜8÷}Dõ6þ
经
fä£ ÜYJEi4ãʹGt„{€ãƒý;„'<|;`~LjÃC±i|S"^T›~wˆ K:LZÅ Û÷s8FZ¥lL𼢉£jʬœf‚¼” ´#þEë¡É@ŒpÄ,‚+h„2<íx8ìhpбä5/E&·E?ÈO0M— +€Ü8O¾)šž:ˆ±,Òê¦Üaii¡ +É…ß°R>…K¯òöIMäüHì˜=Kp °¹Ø@幞Á:äÐý…t+¨Î°Î·d.w“à¹âÌA^e+|æÉÝI_7yÏ`ÚK{BSè„‘;±ëçy&!J¼rCs^§‘¨´Ð„|N$Bdh!Ò‘8ò;Äyô(¢qb‰2åRÏ,>‚N¢èY8éû”Ö~~ dÞƒ}'dC‡{zæ +bàÆJbË,Íâwn‹ýì^ñÉ8tb™à>Ïé²¹’ + +'«æèÓHו«¡QFÜÀš>íEÞÔîP/lôxa1ñÂ"ésÒ8–C…ƒñR…¡w¸Ò +G¿ã}òTtïyròv‰ãdK‡±³:õƒ²‚!VÌü ̱1C‚~¡Ð }iÎ ºê˵ÞÃ:x×ÿ…«¹vÿOÉO«xÈÝ‰ä— n+æc9þ„ÀŽÁ3<L^øuÍA“§ü´ßR'ĉ9<þÀ?P¡Z_üô‘“ÿBî4Îendstream endobj 695 0 obj << /Type /Page @@ -4961,21 +4967,23 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 703 0 obj << -/Length 2364 +/Length 2368 /Filter /FlateDecode >> stream -xÚ½]sÛ6òÝ¿‚ÒŒ…â“ -öþÞ?EÀ]DäEŠýîæâ‡÷¹Ê+ò\g7÷™ÔS†‹¢7Ëϳ_ÊouWçiÝL²ùÂp>»ªv´ð©ÞÌŸí×e·ÝÍ¿Þü|q}Ó36’3—çòmRj3mr›-¤`yîlб„ -ÁÀ“„üÙ½ÉZݘi7Zô4)QÔ¥‚rÃlá4„°bÊ›£¤þ7·*€³.Îjî„æ„F0ë´9Rµöùì}Z¾ÞÚ©|ï0+ 3{œK>«Ö>~§ úÛº®š`åcW¯«]Õà} ZSÜ@Þ‰2½nÈ(9/ÄY
’Ð<e ‹R -)ä|ö9-_oT¾ù„[ŠÏ¾Ï¥™ÅjrË@}¹:ofLhž²*,UMuÔ2ç°·Ìiùzˤòýe¡’î„5ç4HJó”A8Ç2N‡ÊŒyE¾Þ ©| T ß*›{z®*Âi»4Ÿu'MeÍ)S9Á$È}VS%4O˜*‡Ö)‡âúŠ©Î'`oªÓòESÈwfS¥7…6å:/²´ƒüSM)6¿Z`W}®†ú\P -GϲLi«§ºúQw"0!qÉsÎŒ:¢ñ-b¡ÂoæT\ÞVëuç‚ý8rZ•%FrôH§åÑòýîn»BS’=7›ºŠ†$©b»Ù†÷çý†€óÓzµ¥Íº{ YjÔ®j¨©BÃ5q±ÑtŸV¡Á+ -3©„~ Ì¡Y6ZNë bå2‡yLä^-Ì‚ë%üá½bÀÄ€§x•1ž;/ (“„`R0qj¦TA¡Ä{B/Xà¨\ -BÕoQqlÃdÃgŒÞ®ª¦!è¶Þ¸®›nWÝßÏ!7DRý2Úîvˆ¹#®Ñ¯ZÊå -F.¥¸BZªuŠtÝ<?ÕíÝÆ÷§ºZÆŽª©öÁ_ÌœÚ.øždžÌÂÒ0ß -Ñ¡Ãܱ^ã[ -94¾1Wœ˜!p$6pkܼ«8* -é4T8=!Lx¿AÁ±]FV ²/¡S¨õ÷‡Û&*˜¸ñÝAêPRѤê¹ÁšOm‡±{f´ö¡¡çuCð{÷K¯l ðäè²¢=ê>#’q™ÔèÔ±=¬)áã¹YÙt^÷Û ˜±›5³t"ó|)$-På§òšsŒãW¤7ýWyâëX!a|Àü°µ6Gÿ?ÁùÿY¦øendstream +xÚ½ZKsÛF¾ëWðHV™“yƒÜâµ½ë¤jË»Vå°¶”QX‘ — ++v•јééîéwƒV‰¿j’[aeá&ya +{ïž*âÎò¼ýúúê‡w™™xQd™\ßM´-„qR=½^~šþ²øZµåz6×¹Ÿj1›;)§oÊ/|¬63%§ûõ¢Ýîf_®¾z{Ý1vZ +Ÿeúû¤´6Öeùd®•È2Ÿ÷±–R ©¥ŸÌ¥0…w„ó¿«O_äd ÜŸ¯âê#^¤PE¡'›+ðÊé´²¾úxõ¯Ž¢œÌ!tê4)>&A*‚ñÀ!¡¹òNh#Ídžå^h¯‹NÏ:ëéY¹>Ï'¹š1AÍÿ)«–UúY:¹ið¯:Ö§¶RXg8h„/ +óDVðëü±ÌÉyŸæPf
ãxieþðþÍ@Ä,¹ö—”0R|I@8¹’VøvWV«ºjŽ¥T…ð$Ä„?ûïr#EVwnÜæÍyŸ(êû‚J'òÂ[„°ÆÃÍIR‰?§Ím +p¶ÅEÍÝ£9"¤S"÷Ö +©NZûrvÖ>/_gí¾|¯)+)7}˜i9-×%=~ç úÛº*ë`‹‡¶úV•»²¦û Z½0Ò!ï$™^62J&uQƒôhž3ˆÆ¢Ej!!õIƒ\NÀÎ çåëÒ—ïŒA>Ò–‘Óo3í¦©š\À2¨*3—ÍŒ=šç,C„Šœ«¦9i™Ë ØYæ¼|eúòýe¡’Hw*w—4HŸæ9ƒHIeÚœ• +˜ò‚|AúòýPA¿µ¨ïø¹*§i@²rÚž5UîΙÊ+¡!÷EMÕ£yÆTZ§ÅõS]NÀÎTçåK¦:ï¦êßmºÈlVLúäŸjJ©ùµŠºêK5Ìès¡Iž•cs;ÖÕº{ˆ ”¦!$ˤpæ„Æ;´„E +¿ž)¨xqS®×ešC +ñãÀM Z3éqÈÑ!—c@+ô»»íŠLÉöÜlª2’¥JífߟöÎxÌOëÕ–7«öžg©A»jQS•Å5r±Á
ºÏÜÁ•( +7ª„n ÌÐ,;«Çu°2aSYÐAƒYpÝ’„?¼ËAL<%¨LÈÌ{p ¼ˆb\ ‚É`â´Â˜‚CIv„ž±à¨. +›f$l*\f²ˆCWÒDVëˆB=Ë(%ƒDÁ¬ê’åüø{}{¿Û"W1ïÂ?›£:ìÂw–ƒÊrä;Æ[d©'.CñwYñÜ™÷
=iH›=¸Q ææXˆãœŸ°^b; FléS“`ü£âÄá¦wŸµ”éÃÅ<è¿-äkJè£.f´FœšüØÅJJ ÚzŠzt ™v˜'%Ûûê–Üð¡}Å!Ø8vO,æ!Äh3„bô,Á.f¾ðþ6ˆ¼CÈÑú=kÐb°BŽ‘Ç=-ˆºÝÍSJí_~µ@ªœk_ k7«²YlZ~µü8S€PPöÅ1ä.%qOðá·Çd°ÄaÜåûÈIé>˜9¾×åM¸6Àe¹a~‘,3"ÓX€f\¦bX>ŒTx‡ÉÄS’ñCÝX}wH±ðÖbT<Ã…(‡1æÝ,|˜ +`çùÆËÄî:ínæÛò¨b¹±1£Íz,ØÜ„Yч:T#™'bƒ¶†»Ic endobj 702 0 obj << /Type /Page @@ -5511,13 +5519,14 @@ endobj /Filter /FlateDecode >> stream -xÚXÝoÛ6Ï_¡GˆX~ˆ¢¸·ué†v[‘ -´Ùƒl36YÎ$¹ò×ïŽ'Ú–¥46øÁÔñx_¼ûÝI"áð‰ÉXÆNŒU°"Yn/x²†½_ÿ¢çM#szÊýöæâÍϹJ -fó<Knî™Y¦4G¡7«¯³_Ëß¹jžJSÌ$›§šóÙ•kˆðÉoç‚ÏöUÙíšù_7.ÞÝkÉY‘çòuVfYÎ2›$•‚åyaN¹'|1‚%³ƒ/2OgFÛ9H[fŒ‘ÁÉ4³ç.ìëõ<\}«L×+G»·\ó·eë—°Dú}_u~Y¶úûægc!†¢Eˆ¡Ðà„[Q^àát;—%:ÇVeÄÅëh³aªPj* -Sà•Q‰ó‹ .ù´æœ6pœ®ƒ²ïX‡g%“:n½y¿•&¹Úðä(_˜A·ô¨â¿YœÊ²"ãùÿQ˜ÎµYÎ¥S51ÊzÉsÆ•%©†8X£ô1í‹ÓŽ|6LÃX£_B®S!ËŒýpž€Ò(&-“S-cc"×KÆŒ¤¡1WeK&„ªJň×Í®ÛÝc±ìªêÜ<—!¬T“æÌT"c¦ -ȵ íE„O÷ðüm.õÌ…V)¢3ðBAËÁ„’}— ³Zή%þ‹Ù*œÂO•wu¸x€+¡ÅÊ»Ömû#g×§Û®„ãŸu®ëå›ßn#ÒâÇú®Á.×n.ôì’¨HrÕrãèä╆@²¹à7þªàïI¢ÄB;\úˆ`(÷ËMG»«²ia"¨\MÏ-h`´¼ò½„qM -˜`L&†aýðª | -«÷x%ž×•ßÕ´qY]Ã.=R‡¥êé9Ƹ.1Õû7Cïš>H¤Îí˜2:ð=œÇʺ¥ÅG×=EDt¹©vm5>úfÅhyUö¢ýds{çëЬhòùìVJõqé*̬qPÐÑò2øˆ<õ +xÚXKoã8¾çWèh›Q÷6=éYtïL£w;@3™ƒl36'²œ‘ä_¿U,Ò/) +Vp«3c,„È–Û+žayóÄœŸr¿¿½z÷K©²ŠÙ²,²ÛûL–)ÍÅQèíêÙ¿êG?¸fžKSÍ$›çšóÙëˆðÕoç‚ÏöM=ìºùŸ·Ÿ®>ÜkÉYU–òmVEÉ +]š,—‚•eeN¹'|1‚%‹ƒ/²ÌgFÛ9H[fŒ‘ÁÉ4³—.ìÛõ<\{§L‘Ö+G»w\ó÷uï—°Dúmß~Y÷úûîc!†¢Uˆ¡Ðà„[Q^àá|;—%:ÇVõÄ]Äëh³aªRj* +Yì— (b²Ò2;Õ26&q½fÌHsS÷dB¨ªüXLø¥Û
»,–]Ó\š§à2„•jÒ¼‘™JÌT`Q.˜µúÇh¢¡n©^ð$±˜`Öœ8¢;¢¤½p$ðù´×»MG$çÛû9ü×Ë
mÕûûµ[ÔûÃÇmÔá|ÿè†#‘Ïoö"\¯X…px0;„ +”ûåf ÝUÝõ04®¥ç40ZÞø(a\@¼¼’!H’·òëÆ‡b€Ç{lȉ-ñ|Ø>’µeH@·ºs¿èÏmG%Ç¢•)ˆ‰zUˆPØ~ïúáNÅà×PY‰)Þ/7~‰ü$Uξ¿Ã·D¸Ø¯¦Œi +%™ºzCY¦#ùé™quŒ$SQŠQQªÒ²BˆK.4q½¦ÖH(^%Îõ(W¸‰ùO¡‘Bª
ö벋éTèÐ&V&¸mO\g¦ä ¾.Uyž +9ÔDwî›Ø€è¶Ï&º‹|¿¦íP¸¦…Upbׂˆº]¥Iòû*˦ñë4XÖ‹
&Q»N$*–rUj&4'·¤•³‡ºmq%ÀäÕ©¨-vЉàð‚Ic‹×£ %–UäzÉk×F¡ÒVšk¯‰¶ª“EdÅ¡ÛÐ3î÷´¸ÀŸ`;AîîÛ}Âäžc¡,ã…)Îoî ¸é\Àd® Ïy™.`"¥aÆêè£â/G¢²BD¶…ï§¢ZÀ¸Q¦a¾|›¨z±väY÷<ÍÔøÁè}ò"ÀüÄîhówç#½«ST–ñ=!“;"b"a±VÀc +qÖO¯*ʧ°úˆWàù±sC=ø]K˜Õ-ìÒ#uXªžÈ1Æu‰©ß½ëBú ‘:´cÊèÀ÷p6«ÛžŸÝðœHÑå¦Ùõ}Òøä»£åMEûÉæöÁ·¡YÑä+ÊÙ”êóÓU˜Yç “åuðy&ê˜ëö»°ófRoý0øïÞ 9á¯i
%ÐuG´—û,2¦¬ˆŽA]zôLE5Ñý Kc"‚ëØ¤à}„ V´ÌaØÒT*ùÕ÷Ä÷´ïÂÛ/,ÉhXŒ""O®¨Í¾žPJ½Ad‡äÀ6Ów 8µŽ‹LÁäÇ…¨;Qa^Ü+X·Qpòó:Ú`¾Ç{¥%–Í{ªbÚš‹æpDu,ËøýÄŽPô?ka.îLdP·~8¶œ(÷ÛbÿR´Žf2b–¨™W"ftÁ©ˆa#Û÷8ÅE P…ÄÏ.ç}écðà8ZJ#NÞEpgíéR¤6)gŠáé
\á%&œsQÉ74ÉéáyO»_TN„ endobj 745 0 obj << /Type /Page @@ -5952,16 +5961,17 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 782 0 obj << -/Length 1802 +/Length 1811 /Filter /FlateDecode >> stream -xÚÕXKoÛF¾ûWðV 6ûænŠb8)š>ÖFsˆs µÄX¢Š²ÛüúÎìpiJ¢ä -¬oNÚÓ¸àLx/³å‰ôœIåE:YœœŸüÖW'¼fŽçâ°0zƒ°–ìÙ‰p -ÊaWpæøaÍœ°døY‰“LH(x×ü„¨Ø8æ[dH
ij葊}©Ù¦!¢XÒï4S‘.pö„EÚ»i¦ÒÕ4¬Ó1µõ8º°áÂÏ_“þ4ƒ³øûÖz¨÷ÂTZUë&ÍšÊÙѯEœAÎŒ^Þ6å}ÙꉨÂÓhC˜œ_ϰ½ny€¸žÃhèÆ)ùh*ÂÙ+p~V•é²JòÁá\'ÝõÐT,n›M é-Ìñ)aG—ÜðírÙ-e -÷ -+Ú¦ˆT±ÀF‰t·¦½Ç¬²°,cS¯/•µ0Oê@w§m¼CýcI4•&t÷w$^-ïn°OW³ý‰Õêô]#4;Š -–ÚE.•Êáþà—
rOù44Ü,[(ô¿ˆêð2IØ“d× ÷wFÂÛµ(Xm%~VÂO6Ñ‚è§r^z_¥â·|d^4D¼&K•3çûÅ)ìƒ]³å|ÖÊ”ôûÃmé’É»€è!©ðÒÍVQ€«6èoy|@…†·rÞm«0Úå{* +xÚÕX[oÛV~÷¯à[)ltrî—,ú é¢ÙÝ¢mŒö¡îmH¬%Ê¥èx›_ß™3<%Qr],Z°†‡Ã¹~s!EÁáON3̓)\P@QÜm®x±„{ÿ~EÏ;ÏÌó1÷›ë«—_YUx¬ÕÅõÇBêÀ”áb/ôzñSùÏê¡îâz6—Η’Íæ†óòmléàC½™ ^>®«nÛÎ~¾~õîzPl$gÞZùǬÔÚ2m¬+æR0k½sOøâsJêÁi!Y¢3C€L`Î9™|‘Ìöü8S¦ŒàXÉ‘7±Þ=ÔqØrLpmŸ±jÄEVùQ„Y± L²éM½[a4•æåÓc»ˆ
ÑÕlIÔ§™[Û7ÊéåmÕfŽoÛm·½ŸI^nÞªYUÍbôܶg~3ev1kxü¸ŒIê +ôÃAÇð†(ÿ]wıˆ"ÆiA½¹ëj·ËÂvõÝ*>ÇB`æè¦t*ù¹Ží¢n–;Ð$BÙl‘©O5‚©MLv +Z-ç>$Ž1”ilA&]+¡™4ùÖ˯7Ñ·[^ìåK
N)Ñ â¿³x.}`^sû¿‹¨“L!S戉–}‚f)Ñ<„³òà¬Ìtÿø6„óë[,¦Ûzu˜ç`ìÕ1 +z•1SFäôžsŸ3è\RirÜö˺gÓcðJ ](Flˆî)ÕšYå5 +a†"1Aé“ýêÙðå”$µÉ¶ˆ)!ûLÏð·É²ã #d5›ê?SRD +ã·”ýK"›êvw¶‡}Ï|)ò°(k+ÿØÇéóô˺5Ò"Ñ,ãÎ~q¾ ùw +“pendstream endobj 781 0 obj << /Type /Page @@ -6122,20 +6132,19 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 787 0 obj << -/Length 1929 +/Length 1921 /Filter /FlateDecode >> stream -xÚÅYÝsÛ¸÷_ÁGjl"ø&piš^ÒÉÝõ&=ÍL/÷@Y°ÌX¢‰Š;¹éÿÞ],I‘¥8svü °»X,~ûZ$þD’k¦¹7IîB$·ëž,aí/ݯhx³–9ës¿º¹xñƪÄ1oNnî©=S†‹ƒÒ›Å/éÅcY‡Õ,“¹K%›e†óôû°¥‰ër=<ݯŠz³ýzóÃÅë›nc#9sÖÊçY©µeÚØ<ɤ`Öº¼ÏÝråŽ î\’q¦¼3Èòéâ—_y² -9uçGw/¥cN8˜1n8ï*]¡-[Ë… -'ôÄq²ëÛûbUÇà‰'t|Ø.Zbµ -´rÍþÙsíS-C£pY“ànøðG³™Ðà¨ÎôèĤI¶Ë¤%ÿÞÏ'LÖ:öʱntBèÈ -i™ð1Nc
Ó×vëÂMÁ‚‘—Þ—|3%Í4n6éOÅú’-03´1É”‘Lä -A\q‘>•ÛR2-ö·÷DÝ—x§¸ú1,ˆ”éÏÅí= £¼½¯i¹[´ìC¼oœ>ußȹ;bºU#ž>n7dÜnG«Ï¹wT®—5#Wpt8Þ‹79xÀoŒD×ñá)+âx×3žÇ¼ŠóP‡r`C*mÓw½Ýã”IÖÈB NiÂá3®¶û<aƒÀsÍúowX"à· |P*Sªµ`ÚÙHNÔ0Ÿç¶a`¤øz³.›ã,ËyCE?ÃI£‹›3âe7>9Éô4yèÜ3k jhçrÂ4¨èŒ–+º/y(+ÚC`Ýà- cØø×ÔvNCKË3»Aí•J÷!R𫞇í”B¨$\o,×}ÃTwe˜Ÿ&¯‡YåÌШ¡–UÞ–çÌ{ÃóPT?ÚH²q¢Øß±ëysµy(VíàuYÕ[X±Ä ž~ÙÞBy‡^Uô‘LßÓ¨št’±ÌsqÙÊÑB»5¸<” 4‡„j¥†î°6ÄèÛñzý@ÕjÅTƘ¤ÑŒ -Ì€À·÷U¨g"=êÅÚVDÏ0@žÑuv}¼Æk¿¥+nEÆ}¼Â -á -®ÀÞo¢žY ﮣùŸ¶<™p²ÎTÑ†ÆØŠÿ“Qܤ—ÄkÍÀ(ˆ9ëÛ>A<£éFx¿ša?»¦B¯²¨–¸oOàc£„^-]Ð ¨ -Òå—²U +xÚÅ]sã¶ñÝ¿‚ÔØÄá“ +™lÎdÁ™T…èvÖg—g?ôy’‰B3Ç<ÎŒ90‹`$fŠ)gU"Yá@G`—ü +RsÎ]0†p¦`Ö„µšIÓ½z·Q<ùzÌ“gþÒ¡‰”õ"þœÆ™tsšçÿ=‹Úœ)A¯È¥so~ðöR:攋cà…mï¡Ò
=´Cë°ÐAÿzƒxS—ûzÕ¹©´ì‹©;Ê"g\ 25é>¡É”jò¯…ã©€Høm!Lê«v×úÍ#ÏD•Ã;j®ç4™ÑH‚(^€£²¢0³Z÷nŒb‚Œ~¨t‡eài¤p*(ý}Õ‚ÑœIˇ¶ú¸ wzæ:Ùåí}¹nCðÅÞ7ËŽ \¯=<“f?
Ì@rê•W-^sÃÇÏ81¨Í„Cõª+ Oš¤Y%øÏa>éh²!Ñ¡Uy£YÐ…´93¾c%¦i,"}Jê” +;FVú±òd›_ÑN4³Iÿ^n!ÙÂÓ6C“LÉ„E–r²›za¦´KŸªfIP¹¿½'脉´¡Å¿ôüGy{ p©nï[ÚëÁ_ö>¼8®Ž½¸ÒHv„ték"çéc³%õv»înºòw×ÊêUËhë5\.øêÛ‚û#Ñx||ÏšpFöu„ÌÂo}µwC*%Ó÷éqë¾l
8r¥}DÚ(]$îã¬>ðtÂE|Ó\C.¸VÊú9¾ +ŠìÙÎ]Ó°ÂÚ<"0bz¹ÝTñ.«ê&@*
F†`ßxA|éxûSš½1âÜ +%W3ªAA‡\¤°ZÑc‘ûª2ŒÀàã‚§ïÀ5àÿžç40(òÒÐRJüñª7¾™cÑg¥ã³zˆb˜â."`‚š} –+gÆj¹ŒôÂøžÑÝ2 €PÊ:Z§‹C°Íð1ÂY¹¿#`×›“§ëíC¹îlû¦ªÛ3j¹¢ßö+\6¾ºC3û:éGZÕ³V2–å®P'ýZÙ=LTXC‡”æ˜ t1Üqm°Ž2o6AM(»qª˜sF}¦³]œ|˜Q3‡ªhŠî¡v-IÙ×ËÙk/ºäñ4ÃNp¦s;º6ò;Zö†W;žñt»ˆÁ¢”ML²§€þC9è Æ‰Ðï=!’/Lµ:(Ä=âƒo׫hôy(ñjUÔåýÎï—ÛìoÛe¤Âr¾ò7¾Î¶@
øüí}Å¥=hǺnD‹‚aˆ¼ ñìG„£¼Æ“<ÿœÆ¸#™¶òFˆ¼B3®¥<=_á@.ÌÌ9Üy_ò¡EWg!V³Vë¤GÃ7»ÃRcA°wEà¡þ%ýÇí¯è¯îvÏÏÉæ¸ø=ø¤5áŒG"gNhCî~w òÿð"úQÏÏ¿$÷›Åûqòë +?3Ýå©ßþLUƆzfsZÁOœM‡Wˆq›H[`«¯ÿ¼O…—'?gØ:íóϿĊ¬ £<ÙúK˜`òpáΗmY/Ëf¹¹VZcRA€ù2&Hì”ÚpëXjó:|ˆˆUýÐø¯Û:°G½ˆLô€9
cÝ¢ýi“‰{4‡4»Ûûêv!yú +„é +éV¡ùFàä'á ê0&}¥Ü>Yô4Ùè0›ò>öÉJ+Pµ˜40=Ö'äJ®Äl1–&g´Çû0£¯ÊàˆQvÆîBð‹üÈ,è®èì"2–3Œ¡>[©Íó“Œ53y?ó"k5§3®hŽ k÷"Ö%f{d}´d¢Ý¬üîÑWÝ÷¡˜ÓÏ£2¹-ÄZŒv¬yvÚÓ\¾ìóÿ endobj 786 0 obj << /Type /Page @@ -6502,15 +6511,23 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 809 0 obj << -/Length 1925 +/Length 1920 /Filter /FlateDecode >> stream -xÚ…XMsã6½Ï¯Ð‘ª!A€äqfåIeœTMlï²ÞeBbŠr‰Tœø×§? -s^ÇË’Yä:ªxónê|·À^,t»ëÙº?m†~ƒ1kL–êhË´d»§ÕÖ«c…ŠQ`4W -o9©Çb¹{>Ðz"N6ÅÏÕ3œä–üöÙG¤cj‡Eò ~"JEÛú9ñßß~],]yrÔ!+À!ž¢T-e°¶ãÓ›_ežrA€è˜îf[Å-C„ÖÆV®ö;¨üizOe@#ÇìáeÈÏÏçào¼.r!xv<]…óÕyžwL«’[ >Ï{T´¸§`ǪòíPÛ
²¡ßJîWð9Û6T!Lí†I=˜—eô
qZr!úΟd Â}×Mä”|k€œó0—nʵ;1TC¨8-øNBÏöõ,ˆwS7äñ˜ë7äÁ˪„<Ï 7"Ï’óÎnåÁé1óB(£åiÌÀãeóüC§Ñ64°D`÷;ë`+Øû1 -Iæ(¤Iÿà9<ö€‹L'À•y.à™? -/JUˆB}–ÄY=¯…M¡ã4;
ËGE~À²pV%b(×þ¨Ã附ÉþôŨq„8R¥ò©ᮺön'‰$‰ÈR¸ +xÚ…XMsÛ6½çWèHÍD uL*§“ºIm7‡Ö=PD!¦(
IÕ}÷ (‰rÆ3Ò +»Ø],Þ> +f™Ì…NSVŸÞ}ø¬Ì‡æq2yX÷ Tg“‡Õ_Ñm±w¦3•åQ"¦?ü^gFA¼¹$“…³¬þ²ÝWvkëÎÙæP—hûîæ¡O¤÷gà_§o';´âdóI.æÆ¤Ã\µÎ…Ñ©¡D¾Ô‡J£•³Ý²|Ì_%Ñ‹kV<\Ö½-Ãä§3©#\›Ø–§ß»íTÆÑ¡*º]Ó²Òºº´eµà‘ÎGáÄœ‡^ÍÊÇs!Y6O¢¯Í®Dû?Ší,”Zfb®2E+ÜBríž-ž6èI›è—©‚ŸøñÏTihVòâžpô?lÕ V|²ŽŽL#]pÙñª‡Ú?|bT–ýÞÇõÕé¹*š©Ž£÷~jѶo¥¶~L²Ô{çúƒ +1ãì²mÿƒý¬à§`õ¢ày…7§RâÀg¬lÕf÷´mƒöisÀ¨*GqOk–‹f‹Òð`´´•Ý@4Ž:A¿g±Ý!ô¼§
± +ÊyØâòýŒ›æe€zJ±õûÙžÌ6à¸ÛQ÷î°Èà +Ñ$|sŸðmšRÝÎkaH)ÌqæúhJ©c޶ Ü}ß™`PSÓÃЊW›GwÅfË20Á¾±u4/Ô«ãæd„#Vº-|&V¨`Rï‘—:Þ^<{:¢/Ðý~`„IÿúLjhC/.OÔù„€my +bUŽü?¤qs°?«ˆ\”&ÖY^?7“ÈHþ^u´Â4/:ŠÄïhA]Žöb -Ï^sRÙb÷| %tDt6ÆÏ«Ý#=œä¦~ûä#ÒQµÃ"ù?¥¢n}‚œŠøã·_gWœwHÇ àÏRªVb°¶Ã3œ?É<å‚ +£€~â +—¥q6à‚#àyø&·]Ëâë¡Aðù¯²#á¹õñ¢†áÖâ¶à“/Þͽ«Ã¥#¼l¯1 +¨n=}ùðˆD9™Ç–ƒ×²Ì5TH#TÿàU<´ê‘‹LÏO+ó\Àk¿GîvÛÝò»}î®r‘Dðq½ÏÐê:J¥6B' çãŸuøFÒÑÇ%–féªÕÈ?d"Å\ô~þy±Ÿ3NºLíÒ÷f”),Bšó$Î +Ò[ý(ljD«ì4,PÿèÖ¡HËâ-§§&ûá³I†b%r¥RÈ]ÃmuíÍNQJ¤Y–{«W¦?A¦ÿ¦h‚‡Ú®¨_ÏråK%Í…6¹òA¾Ý½’L¢Eš¤ÒÛõ
… ñ
+ôSøF.–XË*…79ÊÖ/í¹™)x G3VMØ¥ñÕu±ÅóÌGô¾Ëà/^èþÑáeÿ²ö½éO»zv7¡»ãÔ¨!¯·èÀøj®„Ñ@"Á ++i.š@«XäÔoDþ
žP”endstream endobj 808 0 obj << /Type /Page @@ -6530,7 +6547,7 @@ endobj 812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [126.4971 153.5425 140.9527 164.1248] +/Rect [130.9575 153.5425 145.4131 164.1248] /Subtype /Link /A << /S /GoTo /D (figure.3.1) >> >> endobj @@ -6551,18 +6568,23 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 817 0 obj << -/Length 2002 +/Length 2005 /Filter /FlateDecode >> stream -xÚYMsã6½ûWð(U|Ü[¦f’õ¤’ubïlU29PÆBL‘ŽHÿút -ÉÅDëÂPŠð´žUå!>å×T6Ö[™§á1Œpðå¢ðôtŽÀ£‚òy<=·ìW#ö×Â>¾>ZÃUvQ|z:ÇðIa*ÓãÌòúaW…ÝÌí*/—…îl7öóˆûŠóÓ‹k_ç˜ûJC’ 3îþ2¶yï]YCøeîc¾Ø¥kªÍ"%™ü¢PôtŽA!9ô -g#Ñ:ò:ª¦ZTňóúbcäEïésž§-œŸQZnÐìôª¢°_âÿ«*…ÞIBzILz:Ç0aÐ¥8ùê܇çñQÅ./œoñN‚¢2I€³Ì%AéëEe0)¨çËÛ¢í·‚å/fÍmÏǺT<ÆñÖñX±-Ú -
ðþ;çÛM<윈¸7$^¦8º±;}å‰o”äéån ã':¥ˆQJ„LåÐ}Èѽ‡s1M¡a™))I€žÀ3ÊubèÝ”3ås‹Ô®rù×!€Üb “þǦD©—L9Òæ÷6Xp3•xß”i›º ±üÐl’W¨€ÔlЬó`óÖ¸cÌ3èÃî¢T‚ô‰~:ŠA$C@…vºÉ]‰(XÚå®`ã§ßåxo‡Ë|3UtBü¯ëÒËZP±ÈZ&¡’–¶K}¼½‰-äe6Päfÿ™ÿa¿FýhÝb…ÀM°-|»Ç’íTÞJÕh–ŸÜoù¼Üw,8òëvÊ@këF²“,”ŒéŒ§¾¡˜ÛÚ5ÏhÕ“?ìÒÖ~ػ̨¢Ý0Ý2Ýh<~ôå:Ìa\Tyk=ʘLwQDfÃøóòÙÿˆåçx3$cKp–xq3ÃŒrÄc"%°t—û˜Ü>~R¶Ç,!õäÉmÐi '®j±òsÉ¡dØÅ7^h ¼ç…öú
Žõ2ù6*Ê‹ÚOõ®ü - ªßxþ„!a7K[/p[]㇟„Öe{DÑþº³ÖQôgñÂîoÏh0‰gN˜~„†¢Ÿ5R“}iô·kÍÁµƒÀ•÷|DÁ[[ÌëðÒáZ(¾Ù†1Dûsдjo¼¨vÙW*eû㯽6÷ñ÷Æÿj-«æÖùŸ^ý^ÅÞö:%¨Š‹•[àxò,—±“´ƒC„¡°÷Mo‰Öyÿ»ÛTrȵ‘ñ O&&|ˆ=Ÿ€¤ æ·U>ó›ü å.•@#TÜ–ÌÝ…{;ñÍõ”¿« 0&»ÚÈ E!e8šaÔ™¥(<ržqªˆâ§È¼“ëÄp_¾#6sW,»†t¸6¢«gI‘c[¢ÔK¶ikkc^ÔÆ!f‚# -Ó,Äÿà5ƒÐ/Èù ½ESšQhsØ¥Æk&‡4U‚½P3´¿µü -AÝ`=k|EЇƒHË8õmyý›wă?¾¦¯gþq(¤ð(ÿ+> -àM‹Ë|¢Š>o×^øuõ£³ÅÝÖ˜FlWÈá<Í3Ôï]”,½è5¸zo7{fx¡ç'˜žô84Ò<ÍbœÓJ`ðÛ¢ èø@U1ØNF‡Ô0E€ñbÛ¸°7Þº'ô/¯½PW.œDüc쫎WL!™˜8(c¿ØØäºÝ€)d*Û•µSÜ}5•šŸ÷Ñ·'<DCœh…Ÿû‚®«ùÉO¸#+ÿÉñ6¡endstream +xÚYMsã6½ûWð(U|Ü[¦f’õ¤’ubïlU29PÆBL‘ŽHÿút EI-Ϩ|06ÝݯK(ü±ÄH"iª“ +0–,ÖW4¹‡wßwÿY”µÂ³¾ôÛ»«o¾Ó"±$ÕZ&wŸ.á–³Ò»åo“²G_»|:ãÆN™Î¥“wÞ…‰ëõcîÖ®¨½ÛLgLM¶Åýô÷»Wïïºõ§ÄjÍÏ3VJM¤Ò&™qF´¶¦/ÝJÑdF‰H—^ýö;M– ôá*Î>Á%,My²¾2%©d¼É¯n¯~î«âÔÍ̈²ð!eqØ}²¯lµÒœÀ¶Ps݃ÚjµN£,áB¤o¦‚N²WÙÚ‚ÈRM +acÏÚ-a ³L
ïÖ¬U9ëë<Žå`)ˆ°Dhò¢ÜŒà*RB•º(¬;•U;ˆjßÄò¬ª\’ëó'aä&Œo6åóòËÁë0³-–aðS¶X…äó‹U
ƒ‹pÌÓDs.aî +MOç6&%ODZùÕùú3&O‰j²Îjw>¿üÿ¾«N£ÀÀ7-.›w=c( ¢ÔļË*_=œ‚â=dã}á1H¾ +šÀ/sóÅ-}]nF †¤Bò‹BÑÓ9…äÐ+œDãÈë@(ërQæ#Îsè‹•u¾§sÌyn [8?£´Ü Øé•yî¾ÄÿWU +½“„>ô’˜ôtŽa !38ùê܇çñQEÅ>Ë}hñN‚¢RI€³ì%AéëE¥0)hàË»¼é·¢å/fÍmÏǪT<ÆñÖ¯ñX±Í› +e +¦1A1^qú]†ñf¸Ì6SE'$<]AÖŠõ@Ö2©e´´YêãíMÛBX&`¥åQnöŸùî¡kTÎ/Vh! +Í +“û-_›ãŽEG~ÝNhm|ÀH¶p’…ò€1rй«|ýŒP=ùÃ-]†½ËŒ²µ¦¦;m}¹sçåCÖX²&ÓC‡Ù8¾Á¬xmù9ÞÉäœ%^Üä0+¢ ˜H lÝå>&·Ÿ„”Í1KH=yòtZ‰«\¬Â\Gr(wñMZ~# ã‚L¶mey¦z×aU.ì
¼Âp›¥+H¸-׾ÇOBë¢9¢hÝYã(mgñÜíoOi4‰§N˜a„†¢Ÿ5R›~iô7kÍÁµƒÀ•÷|DÁ[—Ï«øÑáZ(~Ù„1DûsÔ´j +o{'Pî<r1®”aû߯_smâïMxj,+çÎ‡Ç ~¯â?o{TÅÅÊ/py˶“ˆ´ƒC„!w÷uo‰ÆùðÜm*9äÚ–ñ O&Ö>ÄžÀO@RPó›*ŸŠMþ„rg$ÐH#Õ7%swáÞL|s½åïJ(ŒÉ®6rBQHŽfXufi +7@Î3NQü™wrîË·sÄfîóe××Ft5å,é/rlK+õ’-GÚšÚ˜Uµqˆ™àˆÂ4‹ñ?xÍ 4År>hï@ÑÔ„¦Úv©ñšÉ!M•`/ÔL†n-? +×Õüä/¸#+ÿÂ7xendstream endobj 816 0 obj << /Type /Page @@ -6595,8 +6617,8 @@ endobj 819 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222721Z00'00') -/ModDate (D:20080810222721Z00'00') +/CreationDate (D:20080810233611Z00'00') +/ModDate (D:20080810233611Z00'00') >> endobj 820 0 obj @@ -6630,20 +6652,27 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 825 0 obj << -/Length 2788 -/Filter /FlateDecode ->> -stream -xÚÕZëÛ¸ÿž¿Â_г5+’"%E›\s‡´×ì^ -\·ä5×VV–’|yüõ7ÇDÉ2µ84- -»9äóàcHüè"‰Ieb‘d -”.î/¢ÅÚ¾ïþSK»vÄkŸúÕí‹?¾‘|‘’LÊxqû°`\–2Úz»ý×òÇü©hU¹Z³$]r²Z‹(Z^ÊT¼=<•ê ª¶PõjMÅòTíVÿ¾ýáÅëÛŽ¿`I¥d϶£>—–¥ž´"#I’0#l™7
ˆÆ3±,¢ÅѲ5õŸŠzK°(—×¹©:ä•)lTÑ<ªlV<Z~ZÑh ªk3…Ÿêã×L†6ª¨pÎc8F²(Ë`Z(ÚÉ`”A9·§j;âô®(Kàÿ-ª -ñ¢QB¸Ž×¡™b&H"âØ’ì‹ªE\pÌ-€~ %Dp.kšŒYP?¬’h™õùfÅ¢eiÕߨ= -†Å×ò~ß*„æÊÔ=æ•m}¸ãI\›òGµµÝ#ç§û½)áŒuáøÔÇ*/•çuQíØfµ¾iqŒxY€ñ™Þ›jžTq¿ïuõF¥5 IôŒ£Åš Ó$Ö3…‘=XƤdÕF5÷ûZúû¤™-–’~–P»-ìP×yÝ€•}q0ÔßÿüÖTüºb ØÚªn¯ìÀw<Ž_µµCê™CÏiéªü`Yª½²RŒ%²“6êåzÒÖ@=ù„ÂðiäÉc‡z-çñ`>n`Ð~*óöX{íþ<Lµu82ÿr²½_YG3_ûܒдS–qnøœÅ„Ó˜9ÃWM“ï´ ’§ú¸YêÉñÔbݹG¤)IEäœæ.‘¹f[žšvmý‚rB¥ C¿ø„lò}
66Z‚±=¢œ`’0‡”¢áj`S¶ü[vc&.œ¨!1ó‚gÛtºcŒ'ü§ïœ<Ð#&†Ñ?1²)í–0TgТŒñ§ð{Ó1Øñu?)—¯V0é3‰¡A!ÓÏEã‡b&Ų9šv´+Sõ©°ƒå§Sórƒö´)ÊíÄÚÂ2X¨Ì°b)¢Ô¬-ð#bQï®øÞ[aº>k¿Óù -s>6Ι*ÆRpä)ÚÇPŠÑÊÖQÍð{&,#¾yµÏu  -gúˆa‡Êd–…õÑQͱM`k‰‘€îl[4ÿóÕB-'Q&GׇPÛÃÔN -CÛt6¸û}8Ɉd”Í -ÁãÈfá qíás½ +/Length 2789 +/Filter /FlateDecode +>> +stream +xÚÕZmÛ¸þž_á/ÅÙÀšI‘’Š¢@‚M®¹CÚkv/®Ûòšk++ËI¾¼üú›á‹DÉ2µ84- +»9ä3|f8|¥‹~t‘Ä$Ž2±H2 J÷‡Ñbeßwÿ©•];áµ/ýêöÅßH¾HI&e¼¸}X0.Kí½ÝþkùcþT´ª\Y’.9YE-¯e2ÞžJuPU[¨zµ¦byªv«ßþðâõm‡/XDR)Ùó”í¤Ïµe©§mÇ€ÈH’$Ì([æMªñL,‹jq´lMþ§¢ÞLÊåun²yeU4O…*›–ŸV4ZB†êÊLâ§úøu]…¦M†**ìó˜Î„‘,Ê2èªö#2è¥DPÎĩڎÞe øP¢ªÂ…pX‡f +LDıÙU‹¼`›[H€üHJˆà\.Ö4!³¤~X%Ñ27æ-òÍŠEËÒš¿Q{T“‡;.åý¾UHÍ•É{Ì+[úpÇ“¸6éjk«ZÎO÷{“ÂëÄñ©-ŽU^*ÛÎë¢Ú+ðÍj}Óbñ² +-"<xƤfÕF5÷ûZúû¤Á@ +SIßKÈݶ©ë¼n` +SžqîøœÅ„Ó˜9ÇWM“ï´’§ú¸YéÉñÔbÞùˆHS’ŠÈ
š»HD¶ç¶<5íÚŽÊ •‚ÇÅ'„É÷5øøh Îöˆz‚KBRŠŽ«‰MÙòo9øé@¢FÄôžíoPéŽ1>lÆ Xú;å?}çô11@ÿÄȦô°„¦:÷€eœ?
ß»ŽaÀ¶¯ëI¹|µ‚NŸi +A?Š™ËæhÊÑC®LÖ§Â6–ŸLÎË
úÓ¦(·sË` 2[ÀŒA¤ˆR3·ÀˆE½[¸ä{o†éê¬ýJç3ÌyÛØgF¨kÁ!§èC-F3['5ƒþLX,F¸yµÏu  éÍJ ¥6ùÏ\È}¿?V¦ +F´‘íÄB°e.´Ó3ž‘”ƒJ“kåŒ-_Vf,v:ƒ;wDzq¥¶Næ:·m¿<™l3÷A¶-çÁ‡‚gÁ†ÌÕ«¦+VV1×1t¼ _¿]Qh*ß@$WcûÓH€õ2¹L’$Îæ½°«³ö+{ÃyÛ¨
'ìL š’˜³d¤ÄÈ ;©9XF‰”)ÂæÕNíÔFUš5Ia-¤î¢ˆ}Ö‘àè…¡ +çjœfµØËRÛ_vs„v´Ý&¯]C†Þ/Oî[{¦NÃØWQÚÆƒ +Óöˆ%Œ´GîóíÑÕ™!æ¼mÎìà +•É,Û£“šƒM`i‰‘€¯î,[tÿóÙB-'Q&Gׇ0ÛÃÔv +šŠ¾<!ºÝ»/¥¸ƒÌ„`¨dq)æiߘYÔÒdŒš%vùqÕ £Ž6žœÈ$އ¨f£PlÝ&±µvÁ%¶Ù«‰~¯f‘øçxcäöŽSšµM©Î8Œ³Œp™ñ0‡¾T€ÃNlŽÃ jÇáê4‡ÔoÅ¡-:k†û}$8Ɉd”ÍìI…vb³‡P{‚ǨöQÿUû|°žN8áÏ“ +ñçÄfù¡öüQ/ðç£~þ~¿sÆ¡,ÎfÈõ¤Bä:±YrC¨=¹cÔäú¨ƒ‘»ë¸ýûæã½A–XDx"Ó–<©KNl–¥jÏÒõK>jç>»g{_ž(‚ð&3ôxR!zœØ,=!Ôžž1êz|Ôy.@NmQ’ÕþÙcç/cö~Ä3Cˆ"—!¾x‘öBa¾|© +àuáM›ÇÃ󌋰qâxÒ8ºZkžqàkT]Ͳ´Õ·3Cl۲ёӚe„IØ
+ºcµ6Bxi3õ!&\Hwªféž‚Ž Kcú<h{Œ‰ôí!nsÍïÔÁ78-lóû^¡IÏ`‚ ?¡¢±ÍÚûL÷Bй;Z{UÌÁYžP¸ëP²ZÇ4]¾nÌÿî?¼…¦uOûÒˆü€5½uüwØåÆÈ»ƒYتÇîáÖÊK+bŽ£çz²:mÑÝ"c%‡àÎh§nà…À +Õšç<Ý
WÚ½ü€¼÷ªØÛ¤±Àô#5˜É2J»1ÚÍãø1ódŽƒµÃ*TWF2Ê{ÞæÕX¯†ÛªI}bÕàÎ**¬,Å´:Û|{ªØ:[Jd–¤Co;Ù¢ +¨…ÊCðÝæMcR~ô"Ðð‚Û~\zEæÞ®¶•ÌÅä(¤aÖ×S÷ŽQÇ™eªFànì(ÛnuÔdbÊÞ™ŠH[IÛô_’ˆÈ>Žj.-KÓ”D±dÏ{¶ê O½ÒÁG2LvM"Ý’_|„@þ
ô&‰èendstream endobj 824 0 obj << /Type /Page @@ -6682,27 +6711,23 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 832 0 obj << -/Length 3215 -/Filter /FlateDecode ->> -stream -xÚZmÛÆþ~¿B%ÀÚî;É -äœÖ1œ:õ!ù -JZSÌQäE¤rŽ}gö…ZJ¤îÜ -|Ôr¸;3ϼ“lFá›%’Hš©Y’ ¸`l¶ÞÝÐY÷þÑÿežvˆ—1õ7w7ùN‹YJ2åìîãŒExÊÙqÓ»Í/ó·ùcÙ™j±äI:d±T”ÎoKãÞì+³3uWšýbÉÔüP‹_﾿y}ן¯8%©ÖüeÌJ©‰T:™-9#Z§IL¨èlI‰ÈR…7¿ùåW:Û -›ùËþ‘áfGUk™ÁÓLôªÚ£ªSM¸ÖÙ,Q)áB8Mÿ´ÐtžïË|µ`t^™zù~oî)åŸN5ÊTFÒTáó‚¤Y&¾„sàPªô”ñ~Ëe¼ç9çL#ë|Èù7¦]#ÏÛ½)WNǬ@pÀU§üŠ<÷[>óœ¤RŠS¦Ëö±Ë>a4¥à™°|‚§/21.A+T›Ø2l¹Œ÷<w@ÆÉ™‚w"R0}äsÝTÓø‹ŒP¥® -ÿqK§Étý˜Áï -íÖÿÇ‚+¸¶¡ -zòz¸[0¸‘·]ÞíýHäÞéÊW›j(.YÅÕÄŽ¬âTì «ˆå±ŠK0’uÕ´C£x»üuOöÓÛÿ|ëMJ™°th*U~ž{üt¦HÂ’«ÆóxÏ&A)DM(W¾Ô$¬’>unieÊz›WÝø¯'âþ3'àeüÐyùê£È|ݹh˜wC°ó¸Ñ[6F¨d'`gÚ6/Ì4À)#X½*ÀÑžÓ -ˆ¾ÞÀNMʾ„œ0[åØÄžÃ.¡sÂêÿ¬ê«º)ÃÓX7³ƒÑ—]ì¡§½L>Þgî/5tõ^ÊbC‘°ø:*ÛY<®Û$Š>6°®¢mv zLH–ÐY%^y7^FCm-øÐÒl U¬ò½N¨6––Ô9\”ÛããÀä&ßo† ÀZ%ܽmŽî?1¹+_Ó œ -·ztÙ¬¿á¡ -; ix²Ua*St~ãÑæüÍìr«dÃ¥.c!í;!®¬â_ç£HjG\xÁXùÊQ|ƾo÷oýV»ÿº†tÚÆÏ¨9ê‹]ÓóW¾dªÜÜŸ…älo8F¡DN<{w¿2›²XŽùfp¬ßÛYO–ÙhTºUgs4„¸ù~ßt+Ì«j鼫v4XpïÌvïŸÈ?Ü#½W»ZoC÷û6l? $R9À«wÜ9îñ1רâ9UÚr
µi_E](»a2
!âÂr_ÆÚÌÚºÖbüíX•°ñ‹åÄË2KŠ&:,ë}34mØÇž&Œìޏxžû¾H†dEOS‡µcåH¡’á&=¶HRîàH…Q·0+g~x/wëhBnÅ[ò¯D0̹®GŸÆ›ÿi ?•N«¶ËCÊUi:ãYqö9Ø*7Þ˜1c¯ÍaìME~h‹|åïÔÇÆ²íÐÈjp±¢Cw$¥œN8ú-?¾/dì4Éçç}ÐTQ~RmÜO»Â”ç -IÈ~,L -ö¶2Eiû*«l ]ƒÒ8³‹#ê®!ŒûNÀ¾UtQÕ
°×þÕCé§Ö£ -ï#–š—?½ˆz;¿ã×uß›…ÚÙ'_Ê®xާ›aÆÈÁ Ï”—ç•1UøÌ -Rb_Ä–,³#Sg‘T ÷Ÿ
z“Ä`ï»ß vXŠá‡²ËìÄTÓãS¦4Q¿Vø¹ô÷”B±Ñ/ëîØU!ñy¾v„ù…œ—mç. ŒôZGµ2Ø#†iB˜!™mZqñu(üºM~°>Ê%9~¾Óïr¬8:ŽŽåÿpÒë}khØÏWeµùš3AtñÕÚ!…/<Ôl_ÌÂå¿ã·á™eüÐÈ[‚³½ñ3& ²c -_Ô˜8}9¨ž;–gÊD5<ÖA -êØ[L¨Î|»õ`¿ˆ±$¶ Â(†³ÅÑŒÇεpë=VH¹‹LiG“‘&’©P‡>öå…±èŽU® -:G®£!%„èå”oá8“ö‹¾ŽˆG4–q¢~jé©ðt-'¿ÿ½pòâ[endstream +/Length 3218 +/Filter /FlateDecode +>> +stream +xÚZmÛÆþ~¿B%ÀÚî+_‚¶€“sZÇpêÔ‡äC.((iMÑG‘‘ŠÿúÎììR¤DêÎ`À·Z—3óÌ;)fþ‰Y¬™æ©™Å©‚…³õî†Ïr¸öî¯ð´Ë@¼ìS{wó—ï#5KXEzv÷a&•a2‘âxèÝæ×ù›ì±hm¹XÊ8™+¶XÎç·…¥×»ÇÒîlÕv¿X +3?Tùâ·»n^ÝuÏ7’³$Šäó˜Õ:bÚDñl)‹¢$îS*>[r¦ÒÄàÅßo~ýÏ6@ôÃßý?8i*g»"Æ%—a§¼yóSÿ(OJµŒ¦£9æ—Ý-ÃÃŽªŽt +wÕ©hªN"&£(Å&aR)ÒôÏ‹ˆÏ³}‘‚ÏK[-ßíí=çòó©F…IY’¼_±$MÕ×pj“œ2Þ¹ìŸyιˆu9äü[Û¬‘çíÞ«…äcV $à%òŠ<wG>Á³R’%Z«S¦‹æ± +…c”ÔA¡ÄÇg‚§ KQä´@«~¨œˆöŽÎ1ºwcnÓ1ìmé¡ÿ„Dù6{ük¯R~áõ÷Ž—,Úø»Ãh„xuù÷ýø„a»†V~’*aÑ{ÎBÌ—¿8/ˆ¼éŠïçx8/D‡i±Îˆ:è·~#²Á㌠+ñú0´]#ç߇ðk*¨`óÐÓYèÙ¬ò×Á½6pǘca’28Öÿ‡(,Àq¶¶ +¡7_N¼+s¤h¢Ã’Þ7BÓ†}ìgÂÄgàÓaßÈg<:)›ÄÛº‰‡‡<tØ"I±w‚#†ÝÜ®ÈüðZFûhB´ãÀø7"5æÜ…×£OãÅÀÿ4/?¤U×á!媰õ¬}ŽŠÁ7vÌØ+{{Q‘š<[ù+Õ±©lZ4² +\g¬nÐi}!à<êcv|>àý0É'ò‰.è
+)?¨vî‡]aH‰3…8¤?€.0òù¤Ñ©àÓÈ´³dXô¿.9˜',N»ê8¼´:o‹RÝõ‹/Æò.3FõXcoIOýQCÍ%ÅsO÷/ÚOYÄÙ¤–ON:8W]ÿ½ÅùA2‰uW‰’ +tÍ¥[¶äº9×ïrOÀu7¬BvÁÏ}n U24zŠK©£ù+00t@\;‡%º³/ì)GÂÞëpËçÇcbÞÕ›CCû^Xm]%æXÁcúgL +£}‰‹]1Z7Ô)ž0¶”E*2½úhl°ÇD$þW{‹Y™`o+›®µrÊÖ<…)=©ÍÏp
aœšz©HQ•æ×kÿæ¡ðCëQ…w‘ +"\@1œÛ-Ng<vTÔÂ¥wX!e™ZÛŒ&£ˆiaBúؕ֡;V¹euy˜ +¶å”oÓpLÚÏú`¸G<¢±T²Èà—–ž +ŸéÉÏ/<ù¿‚„â]endstream endobj 831 0 obj << /Type /Page @@ -6784,8 +6809,8 @@ endobj 843 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222721Z00'00') -/ModDate (D:20080810222721Z00'00') +/CreationDate (D:20080810233610Z00'00') +/ModDate (D:20080810233610Z00'00') >> endobj 844 0 obj @@ -6837,17 +6862,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 850 0 obj << -/Length 1611 +/Length 1608 /Filter /FlateDecode >> stream -xÚXKsÛ6¾ûWðHu,$ssÆIóhfšØÓꨦK"Ru«_ß],@‘mg<c.€ÅâÃb÷ÃB"âð'¢,a /Ò(+BDßÖ<ªaì×þ+¼î<(χÚon/^½Ó*ÊY¡uÝÞGR¥LæRÞVÅŸÊmÓ™Õl.³<Vl6O9¯CÖÛ•YÛ5f7›‹4ÞÛzö÷íÇ‹··ýú©ä,×ZþØ$Ñ,IuÍ¥`ZçÙP{bK™`™’I¿%©#!Y!„Æ=õ~J–e™t[RLú}¼Ý™¦¶MÛšSÐljš<I§Pðh.8ËòT¿€¶$D^Œ0ÂÄ´cKErÄ(<Êw{ûÐ5ÛÎÀÁ¦i½óÿ™)o,5Ž[±OîEdLH®^@;Ð"´ù H‚SÊA}w§²N_ 7•iI€°•ƱþÛ´( ;Ò25$Uåa_›åÒšB©©ýȧU‰']—dìq&xlVß–ajã…rßö÷ˆg¹3¶W¸î+ç>jÝQÌ"æ#ð;ØŒ2£
~°mWÚøY"Ì™äàz™’ëáûØì*¼÷®À^Úö¶Û;•$Ù¹B_ì[³O2oÖ$ÜÎàâ²}˜.mYoç,Ì®6ci’¹û0߃šœ¯{¬éÕxË~vómIqU[îÝlhÀžjS—ð"Ê´‚hÁ0žˆ2%Xž9ä¶VŒÊ%Nô#‚dà*ÑNk(ÃèAº¹ŽWÖ*‰®7_.¢/ý`à‹YaäéÇœÅ¼ä “LR©`‰b:æƒZ¯…ºZ`.šUEgçØQ±×§n‘ZCVÃN‡kœ# Z/A9³†Xz:þ}á\>`„šÎÅò Ç')Ë9p*wó\RºP†lhI}¼\Ît–xí½&,BÔ$I®¦-Bd³_N=¢ -Ί,Ï&=ræHL–êBB| §Ïs—J -°˜‰ç¹H€éX$Æ’¹Ž·»M‡ºÃåz
ü°(]Òæé€ÎPu*û;¥²K^w¾Ù‘N0KkÒ»ihêªì‚¹kG¤¤Õ‘&µw”Ð öPZ{IbcI¥2ÞðS×´À‡~À3æùi¤ù7_M
¤ÔT½}.rôX’ûSÞ¹Iž¥|.³j$U™Ç×%}ÛUˆA¸²‡r¹¢a·ìôÞpäX£û-)ÿ?¸YoÊ]60:rkKƒÓ8j›ð#RÿÜß0@Mƒ/ÒØB/"3Ú*ìì’:ëfá‡ÝÉ—xšáž@£–ºÂ=1‘7ÀXP‘ïÒŸ? É’¢Ï`FË\VÃgÓ-7UXSÖ ¶ì©-ú¾ó³Ú†rˆ(çLfi>Ž“¥;eYð>Ò5ÿĨ7Ö-'Ðãí¶1«{)¨X)P‚KÃ˃²ËµÏodê?Ó%-P•´×Ø,½xlÍ>tŽ«»ÓØß†Kí}é¼Rãk©*ðéuÙQ^®Y&dúüÙ!ù}?VåÄa -±Ð…7ä/wX¢q³Ì Ç> ¬èS.Ø9 .,7ëm³ú†ÉéN[ -â×ÁEÕÏ™'ßTç¶éM ΪxGä <-Æ N«‹ õ²çÖ\TòT¼~ªÚ(h!ž¿—‡ZçËBªjš^Wg&&¼N“ç—JçKŽÙ*›d¼æDõÒSSI/°ó†Gm.’Àã¯!ß´t)„_Ü+z”G!G]sǹ¤‡ -¶é’D‰
¥‹ÑÈÛ%a³´^òIAÏì¸ÙšCS®fI©0HG÷`i}«†¥Š:/UpÜÕÿ鵇5 -¶ðõf‘ˆ}c®Ó:~ƒÉ÷]–;Z°jvæÁ[n¼fؽ©šÕi"Ôi“‰î‹7Êe¼Þž|¯ä9ãடûe <‘>…d:…Ç}ÐB Z?ù{È3+ÿKÔj9endstream +xÚXÝsÛ6Ï_¡Gy³ü%õ-½´ëÇz·6¹íaÙƒ\1²›v-iÙü×$HY²”¤—»$A +7}å܇#;ŠY« +ñ[]ÀwîbS’ó
ü`š¶0Gð3·j.8×ó]ßÇúPââ½w…EËìl³¿R¶ú qåÊú¢k¼ž}Ú x½Eâv—ÍÃòsaŠJ{©vÏJ*½Ò† 'Š»û½R³ûU¯krÒjl2†ŸÙ}[c\UÚÛ
°©ÒUÿàð'¢L ˆÆ3Q&ɲ<ƒÜV‚Ð\¸Ä‰~DTH帆4¬þ¤››xõa+dt½»ør}ésP>O-jX5²dc&1Ï©$<‡M"aD2Îæc>°õ\ÖCW+„«zSâÝ9täõ¹[¸RÕ`éðŒ©&ë%U&Ò¬.=ÿ¾€p.l„êÖÅòÆË„d0•º}.)](C64È>>.#*•ž»3åŒDˆ)31/"›ürî‘S’§Y:둉g 1I¢rñ 7œ<]Bæ 1eÏc€ +c.‘¬
²”Ú‹ +ub&o +,GÂ…ån»¯7CÂÂ09Ým3€bÆs ÷ž–Pîû‹"i€—t¾Ëw+¾ +®Gê}ÑíÛö¿}X9uN06n¢3àESkÃ,¾ôâÜ… +ä×A¡ê÷,‡›¦•j*ßbÒ]À;"“ð´+qÞ]®ŽJsQIöú©nYB1ö|]rM… zšžËžÊ&
& +9œZé;Jyx¨°P$Y endobj 849 0 obj << /Type /Page @@ -6888,8 +6915,8 @@ endobj 854 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222723Z00'00') -/ModDate (D:20080810222723Z00'00') +/CreationDate (D:20080810233612Z00'00') +/ModDate (D:20080810233612Z00'00') >> endobj 855 0 obj @@ -6943,18 +6970,20 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 861 0 obj << -/Length 2608 +/Length 2592 /Filter /FlateDecode >> stream -xÚ½Z_Û8ï§È£L<¶lÙÖ½Ín§‡nw÷ÁÜÃÍ=8‰â¸ãØílùôKŠ’ü7N -´E‹”HþH)õWüñWq膞à«X@øþjwúà2˜û§ý×ײ#¼éKÿôüáþS¬WDQ¸z>¬XÀ]–0¿[ôyÿçKzÎ[Y¬7,NœÀ]o¸ç9sIŒÏ§s!O²lsY¯7>w.e¶þïó/Ÿ~Î<7‰"öcƆ~ìúÂOV› p#ˆ¾´•ò=˜ŒÃöÄ…Ç1³{ -øÊ÷]Á9ÃMù°‘XY9ÜÔ«çÇc3}¸<ùª¿âT±‘š*¦Ï„²˜õ¾<ýQW;Ù4?×kßsÒæøøçšq͹ÿÄ’ÞÂw£Ä@1~û:q8úF6D?Ö2ÏÊ\Š× ›¦¥Ñ^–šHß/™<¾QD.Ê33Ƽ¯#Ý6ík‡5±KwrHæÜcØŸYpË;=±Eï¹ÛÞYTÜyg¬øŠwúzw¾Ê]…@¾©—|ä{ܱHþNúžË½¬·²ÛYd -~&-!Ó‹R éœÉ,ŽžŽœCô|~#ûbK iånfä²b›’Åó99Ðûòôå4“Ð/ÈœÒp¹W]ÏKD¯&%̤#’&‘Ö>I|GeWM\Š Ê·K©9A@…h,¥–ù°YÍî¨%¶ ¢EKUø`ÝÇÓù€Þ6¹h͹—õœó
‰’~bý‰—¤©·ôÜHÄäî
WbOӪĊҗrO“¸éÕ£C{G2Õ–D¨¸aw2gìL&îSÜ×ÉÄÄ”PÌöd$
-Y[©Ž¡* -béú
zTÇÁ=ãX\Ê8Ùs£]^¹§Ï,£|m¤Îцv+T`‚;¯Œ¿«Á †>Ѷ)dG£
S)Çy
šà)X%$.ùDPóÞË¡=¹#Žr,Gcr‹µ
Üy„¾§–‡dtæåÂì
º¼äÍe‚}8AVG¤þýµÊ2½rÓšÏá¤ñˆwè¬7ìã¨f¨>ÚÖ7äL *«½Ä/®£Z -—ñ8ºj}±%T³r7QmY±Eµ‰âyTèU· ¶ÚU‹E…›'qÊñHZ(:<@· Ä„“X·L™Î3’þSIA—S»#ÞxJ½Zט͸ÞÃ[›k,3æ
²W–åýG™‚
àÃPU0Õ -9ƒBã‰c‰Ë äóáËWu¶2ä×þoXæ›Mÿ£ièMצè&FD¡›$áȆñ/gZè–RèC>Vªj€rÄQªèÐȺqñ¡µWf* -ز4.”Ku‰ƒ›#fÜ\ý-€ÙžÃEev)Ì'„’lrIT<]ÞîhD7 5¥.'ÆÊIõ¦‚ ©,DÈÇûžË#@™¹SáåA5¡Ø$ÑšHÒ>Òò@!«·àñ|îžp0ÿ õ£_üazöµ^÷{RàMOdê¨Þ;3Õ{2„(5#㎈~’E{µH×ïþØÿ‚è OÑ‘ æFÐlÚ%Ñ€(¾ú4ÿ莓üendstream +xÚ½ZKã8¾÷¯ÈÑ*nëá×Þj¦«==3;èjÔ¶öà$ªÄ]ŽØÎ4P¿~IQ’Ÿqz°À¢¡hZ¤Dò#%[ðÇV±ôe†«8@0¶ÚÞ«<ûÅý2#»±Â›¾ôO_ß½ÿ‰Uâ§Q$W__V\„>O8ë&ýºÿ·÷9;ç*Ö'žð×›0¼¹"ƧӹP'U¶¹ª×z—ò°þÏ×_ß=|uúCøIñ3V²Øg)KV!üˆ‹´/í¤X +µñC0Œ±œÝ§zRz›†øBЍ›—È'*ÓØØË*ÐTåÐ3.Àú:ÕZžõBƒ»áçe‹¬2+f&0OÐ÷Lñ©¤ß=úçDôŸk ™øºæ§ZbmÕsð’¼ã&߉ʊBeÝÚ(4çÎÍK„¶µ2ófû¥ÈÚª&VÏúÞªþŽ‚ +4Kh\ï£W»¬
dNÊ
¬üÔí*‡È2ÄH¹ˆ˜, n…¡»5Æ/jK@uÁ
@Î)Ûé)ó^³²¼3l#GV·±èhÇ*/!®]gõ–gÅvÍ<µÑkì¢(Y¹/ œ¸¹Ô»ã¢Ó±^B¦H@pCýX¦žÔ.Y±›°´¨Õ¡ÒXë<(õ•>=Þ&“ví§~Ð/–ŽÄiuÑiL¨„dè}.²ÆÒ
”÷¢%šâ
+~mþ®Úc¥Go—šˆ§u‚q©Ýq +û˜¶À(%ÆÄFà]Ê=¸ÞÁ +Ý6»JA㆜ Tµ·¯—øÆu,“2õyG7°¬/¶„eNî&–-+vX6Q<e½úÐÓV»j±Ÿˆ \‡Iܘx$mÄ#î ¹ÆªËSïP`µ²Å9?ô_ZJt-0„pJ3[×XYCóÝ¿¶¹/kÞ CpfU¾ÿ 2¤¼(uÝÒõÈG“™V÷ûŸ‹\1†‚1¾®ŠËd -æ2Åöƒ^°v«}N·ÔÑ©vÇÙt.±ã‰„œÄÆ—hj,€0æQ»µÍh%‰š¡Ì—¶:~4ºeG†{tBp;h4.‰ó?Õi›—]_ +Œ.Æ×Åaä'Ð4˜íü»¾Hü8özf«š¼}kiDú!øfBÀ¬Px_•}HŠ7âdúôJÝ÷iŽ…k8dÂaÚ}4„t¿Œ|‡ßØÃPʵmÓ;Z‚¬öˆ8t|œ%oƒJUŽjݾÇ6³åsæ|Y„n÷ÀfÉ¥íñ‘Mº!neº®‘I)’7ÓU%Á3Dú,æ|Ášì<pö3O)!·†û¾»¯ÞkrÆå[ÍNæú¦‘A•âêæ‚2wŸ9R6›ÙÓv6ib®1m³Dÿ•Ã#½` Þd +ÆÝM¦`l|“)4u7™8¦›L6•xƒìÈg>èø$÷+„y3óJw‚Ôf¼i +mâMÙN¨!°%ù@yšºc°é¦Rhñ\ùŸt: Ž—àe75¥.:HLÏ5#À¹ßbÎnób?ó±J† +M®8O|%‡œ~¸ª+K~é²²ïlú/MCo:7EŸ˜I?IäȆñ‡2#tK)ôÆ2+Õ5@;â¨ttä•~GáЇÆ+3 endobj 860 0 obj << /Type /Page @@ -6985,7 +7014,7 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 869 0 obj << -/Length 2266 +/Length 2265 /Filter /FlateDecode >> stream @@ -6997,8 +7026,9 @@ xÚYßsÛ¸~Ï_áGjÆBA Åκiò½ž’ä, ;|¤9I\vÙ鮆€{néãZåe€Û¬vˆBjÄÿ <Ð𮳢*´Û„ÞåÚ¢ÆY5†MÜ“W’IþyúRKwbïz|Ikïñ±ÖûZ}‹”óîõ ¸˜õ·bi$’Þß8×ú›¿ñC×U¥¼ÏJð!ø”{”hæ™ÈÀ–¡2LÎmUŠ}†e*ÚÆåÅ›a}o-øþ'MATõq‹¾]êž÷z¯ŸMŠ#HöŒš¶>VܯÍ7•ÆŠOTf
”W´ªA*ŽŸ¨»©ìÂ&ÐUˆ¥6æ=KÕ6–f¿£ÚŽ°Âˆgª@àÿ̲¼)êà‹Rhxƒ/8
Ó²OíÅ6°™`òP2.”+A¿-þ ‹§®Æ÷ïÝ; ù×Z‡.¼µ¦aAJõ,°‚Y<—ʹKÇ||6GˆÿPÕj¯G÷Žs‡Ú.M™Î“Ï pms)-šþ¿[ýj(C™=n:¿ü½j§ü6‰>ÉTÖ±í^£¤…ƒÝÿ,¹É(ci(Âeró¥È{ܵväv¥ušÜZ×YÍ“ m\óŽE R~úZW[¸åhWú˜‰?L?’$öøç¸ûšý}j{þáþ¥ -><þÃÏûÚ^]‚AvX‹RCÄ §“ë"¾ŒÒk¾„>HY+S‡@›’EhìÌÓ4þ'AE”•jº5<´[uvvŽ/muðçø†zµ›ÿvÙëõ°~’tºé’FC·}¾¹t“ªìÏzç¿ý¥}q¡¾CÞº ‹SdÜ3uüë²ÇX°ùÄË‹{™KM'^£ìúÀ_ÈLÓŒ)þ©é8©žMUEt£²lÛ¾Ô¶;±÷°½¨µÃö•Öil´[½m5榡ýµÖ/ˆO õŸi^Ÿb3•DÒ&ßSŠ kŒ -„Ä4<"sÏ9(H•‚ +><þÃÏûÚ^]‚AvX‹RCÄ §“ë"¾ŒÒk¾„>HY+S‡@›’EhìÌÓ4þ'AE”•jº5<´[uvvŽ/muðçø†zµ›ÿvÙëõ°~’tºé’FC·}¾¹t“ªìÏz7zû¡ê;ä«‘°8EÆ=SÇ¿.{Œ›O¼¼8±—¹Ôtâ5Êž¡ü…Ì4Í˜á˜šŽ“êÙTUD@7*Ë–±íK-`»{Û‹Z;l_iÆö@+`°ÕÛVcn*Ú_ký‚ø”Pÿ™æõ)f1SI$=`‚ð=¥˜°Æ(€ +(D7.ôŒRKsW´ÛªžÑ„¿Âýˆø³yN€‰î ÛMaž2@Ì<€š¸v¶
0=¯Í!ãY¿ú°Àé‚§L…ê=¿{RK~wbïú}Ikï÷±Ö¿ûZ}¿'ñBK'Ž¥§îÈHÀ§ÂgèÄ,: +£@H\ @Ã#2÷œƒ‚Tù'øÐ]¼º8{bñÄŸ§bÊIMƒ endobj 868 0 obj << /Type /Page @@ -7096,8 +7126,8 @@ endobj 882 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222723Z00'00') -/ModDate (D:20080810222723Z00'00') +/CreationDate (D:20080810233612Z00'00') +/ModDate (D:20080810233612Z00'00') >> endobj 883 0 obj @@ -7148,23 +7178,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 889 0 obj << -/Length 2063 +/Length 2061 /Filter /FlateDecode >> stream -xÚ¥Û’ã´ò}¾ÂNÕDèbÉ6o»pÎÂÂNAgyp&G;Žl‡-òõt«%ÇI<çòV«¥¾¨¯ ‡ŸHòŒe¼ÔI^* -ªÑ¹3æ¦`Ò”áØòÇÕGû4 -wèp¡½_ £«ÃbûAãÏÄk×ôÆnú#¾u£Í_Ow--¢Z¿¯yZ€Ñàá?¹nMÐñ°%à+ëú½ÃÐF±VÖ…ÛÀ„¨1?ì÷žOéÉ»%,Tá¾&àëÆ¡ˆ´jÉwj| -Ü¢àóà»n7ì¼`»¦Ù¶¾µ+:wðVS -Þw[=l¼ÆJ§ßÐ[øh÷Ë …OOÐÚ†w-ùG‹˜å0f¥¡˜Eÿ0Eú¼_©·Û+Z®\M‚í,mÜ)˜}·«Cèíò£moé —eç
ޤÁË<ŒšÑäJÚê;ô´Áp>¤=8cÚsMÉeCćÅUxÕÑJ¡ÑkØe>™×hÍ2“©i:4…`Yi KUÄ
%$œ™Üh婦0ìþ1ˆ/Þl•I^ín~ºI~:ÝÌ™ÈÊnF1 -=WL®ŠŠT½ZgÉR•‚i£å|QéF2´ÙÝ -ͲrÍ:¤,„š}yiYBjšò¸%ý“$—wùòV…çz·ÈÀ3(‡™”ž)¦„!û>ì:{)«‚²)!¥Ï -{-t‘±Bp°º`e©g»U”Lç\¾\·•á¬Ô†¼ò;ïö™Ì®Âq+Û»á8Ð"¬:H™¡±¼àÂûò®«t`Ô<Åuí…e¦ÔkfÊÑ”YhÌÍsœc"Føû*p ‚Ðmš ¿¯PœªZ,0`•_ÔØ±âe†CÜwͽF@ö»Â{ÀØEtÕ4³Õ^B@fê_õQY,E-qñ -;ïˆ Y$®Zês -˜–ZÂãa4œwã€&™Î:|êZTj&4§k©±‘%?56(ûó-•)XQÊSGõŒƒ#˵yµ`Beñ£IÌÒÈ*Ä#ðù¾9`ò£ÝÐôÜÅyÉG‘F·Øþ,u²û¬èÐ-žÂ½4Ûx’8[":æ@û!NÚ6>…äŒË<? -J -ڌӣÖ׊è8‚ãîÆM‡éÝä8íŸl¯ñ3Nv¸¥=ikMìç¡`ï5Õ_Ç̨
¹) ®âÇßo!Ù«j …ÀOV¸Eq=“Ñ òÍuLr)?Ï! ÄôóB×nX™O\ì]gû¹-O)b€Â&SÜœJ -OÍ|Mq´šÖÙ@‡~KK2H‡¿ö‘qHt@Ü\ÍZY.ÑmÊD¨‚nÍO8뤫“þ<™¦Æ3Ëé¡ëqêúnT^2y%Œp0ˆ_ -q1ÄTÿÄöê6dêšä4
c/Ÿû†PŒgF~Þçë ñÜÀ,a,f¼Êų£_àü76Šendstream +xÚ¥]“Û4ðý~E™‹Ð‡%Û¼´@B¡70åÁ¾èõ'ØòëÙÕJŽ“¸G&YVÚí§Å‚ÃO,²”¥¼Ð‹¬P +ã—Öµ¶G¹.TÎ5œM5pÆÓ¿¼½«ú¡[ +ž”ÃË¿–R' ;cnr&MŽ~¬ÞÛ§x^®=ñÜÎðÌàlž™‘çýRH`Ø?ÍðQ‚I¶8c®'{7塊˜~ ˆ[Z¬Ë>ȳŽ6ƒTvF ¡2f´1sVX!ýbÏÀ$WÅb%2VÈ`ígM$
ã|”üUÛe{D§1ÉÖn@x8¹-›QYRi¬XBº-áF^—mY£æˆ®í¾)·§ý€òÚnm[Ú|*Û–øã¦µD¦èã鉇àVýN¥ieƒ=ý?¾SYÚ‘ ‚>Á +Þw[>l¼ÆJ'_Ñ[øh÷Ë …OOÐÚ†w-ùG‹˜å0f¥¡˜Eÿ0yò¼_)·Û•-+WÅ_`;KwgJ#fßíjÄz»…ühÛ[:èeÙyƒ#ið2£fD4¹’¶úÁ=íApœiΘö\SrÙqùÄaq^u´Ò@hôv™Ïcæ5Z³Ô¤jšÎ#M.XZHçR +¯eŒFŸ›êc|TÆÇ`S¦H6ñMpƒa +kª¿®ì±C‹a¨2P¤<m\0=¿A/at‡ŽŽUv5W§ëWÓ\au§°óN˜å@â²¥>S×'Ÿ°!l[ß|àšÒ«`{„±÷¸fGˆÐ´ÔÛ}IÉ0¤e<øÌcòO{Dì¼gû3 «[B„¹A“ÍzC'Z„†È£{R†¦
('þÙú—Æ>-Ì)›r#Ä«0UŒãEÙ*>.®Ïu™U7*è{Stß:§Ñ] +Fà²È)%YfR}îì§±® µÍÖaùÀõXXdAùn.Ýq-‡‰ƒüû#ÜûPɃkØ]G>‹/ü÷÷®Ÿ›X3hH¤HÃäYÀŸR7BWþdI¨ãö}¥@€&„úÝÖ
DEOåo¼¾z|h\g3 öÒ—}Á)`Zj ‡ÑpÞšd:ëð©KhYtR©™Ðœ®¥ÆFüÔØ ìo©LÎòBž:ª×`Y®Í«*Mb–FV!Ï0ð…̓톦ç–((Î>Š4ºÅ–ðg©k”ÝgE÷€nñî¥ÙÆ“ÄÙÑ1 +s endobj 888 0 obj << /Type /Page @@ -7201,8 +7226,8 @@ endobj 892 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222722Z00'00') -/ModDate (D:20080810222722Z00'00') +/CreationDate (D:20080810233611Z00'00') +/ModDate (D:20080810233611Z00'00') >> endobj 893 0 obj @@ -7231,7 +7256,7 @@ endobj 891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [471.0316 135.6153 485.4872 146.1976] +/Rect [465.0447 135.6153 479.5003 146.1976] /Subtype /Link /A << /S /GoTo /D (table.2.2) >> >> endobj @@ -7247,23 +7272,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 900 0 obj << -/Length 2251 +/Length 2277 /Filter /FlateDecode >> stream -xÚ¥YÝsÛ6÷_¡Gj&B‰~Ý›oìtÜ^îÒԓΤ¾J‚%Ö¥ŠT3ç¿þ~‹$Q¤O3ÎÄ v±Xì÷®å$ÆœdF˜¸H&Y¡±r²Ø\Å“`?K;ȳsìÞ_ýð>Õ“\ij&÷¥¡r%ODï—¿G?—»ª³õt¦²<Òb:Kâ8º©,oÜmvµÝئ«ì~:“IthVÓÿÞÿtu{¼?Q±ÈÓT½Ù#ö[•Ÿq{”@Rˆ,Ë”c¶[:Ë¢—‹5óS-Öïý5UId÷íb]-¦*ŽžüþשŒ±¿´àë8ue´Îl³ôXÕÞ¯tfö¼þÃâ/o7;@ŒiV$ G»ýöy -lÛ2Ʋô‹Æ¬[¦ÑíÞV«¦j·ó?l`h !Ä1“™(”ÛÏuÙ¶– —z+D®ãø„öù׸±\ÙOva+~ô-ÿj:>Ý“£ŒSQhŽ—à¿¶«îxQ©N½X;†±a+'c¬>ÙÇ©&ÉÙæ™w–îåXEí¤È@1؛۶êžýÇCœÄ×sºu^Õ#ÆtT»ÒÊØ–ð#’É~5 ËO£ævæƒ -X$-ÒKòT䙺äàŠÒ7îТ;!I¦Ü”
FæT$}T͈d heæh÷S Ñ—íÓˆÒµJÂÇwöŸ`} ^5mW6ÏΟu9CÀ¶3„-¯—äýÄÒ… -ë×ób"[t¯Ý˜Å"Ke°²ÃªRÎ!‡fik/:X -–›lD‚Ïíþ+e±uâ-ÉÜw°w?-4ôMÁ‰¶œRiñb–’¦iüã¯Ýa>òŠ4Y±½câ§lÄß/N©òÂF.I”I,=æS¹kxí;6b}á[9‘õ`ØCHŸ§9IiæE«¤È¤Ö}'l»@DyS–ÎÀ+öG||°Ýz» §ã‘ƒ»Â^·u$¶u=»þx÷Ž÷{™š6BâN;k—äsà¢v‰Õ_¿²M¸¾GÚO6$Zߌ"ÎÆ<ñ¶é¾úÜ_»SEÈ\×¼ÚP$YÕ¤$HÚi¨hyí\¡˜lKy´A -t2ì‰N6Møt‰„K{f¬« -ZR´ß[¿¡kÚ‚IÈè¼}ãO _ Ѻœ -ívSy0“©š -Šž2çQ'tö,épЗæE"LËrŠ}àMø)2vr,½¾ip™ˆñ²a)-¡€šÔè+hôŠ[WËXçÌêpYXñIX2úÍYJ>Ñ'yw¢8ç5^ËÝ—ò:×{ÙŠ›S¥=uÕÏ ø`×Þî (Œ•‘)œv6\²|•´á.x}ãê|`„_w–{ºcG÷…°a–—NP5Ííú¬žë
âJa=Ö¡AmaôsôMEæ&¢yÌ4ßHžÖ€þy<ì7~¸Ûèlr³½úåjòË (R0%(CF†ƒvQ%ŒJ$ÕbRht -ãýâïˆFb9öËKŸghP“Š\ÊE¡M
ZýóK¼±¾ÁËñò£õeÔ¨o¡àÒ@Kô„…+•ž²×ˆ£JQ$J~_a~é¸"3à8OâtTdÑé,G~–¤P¤Áqñ§ -©Jë,y}¡tŽø’³ý»L§f¬Ÿ£íËæT§ðÏÁ4ˆ. -â÷2œ\ÕÛyY[¿ý›KžUC5…ü×üƒp”ƒ`z*…ЏµCè|´Ws#D32¢=Ž›ÿœÛŠYÈn´÷ú¼0Jм´hémK^sÅR§Î•¶C±ìPHáŠcqgxøuêTÓy~’«§A¢r¯Ùïa_$;mÆÇ¦€h¯ ü«Üì¶^3Þ☫CmùÔm÷³/h•QRnv4¢%˜¥ EÃIOl0vÃ^yè¶›²«\M~´‡“½¹NïAúTVi&AªrŸbcxæôŠSÏïxÖˆŠöêþñþÙÀ'`¸
Á†Ï)Ís îR0ƒ¾z¬À9hâíˆ0ýìñR—Ž9а½LÖ^ÎBkïu@ËKÐ7ÐnøÐ¸nšrc¤
´|#OEA]qø'å<º˜Vý°×ð;S{Ç“?úP¯”À„…”§ -øŽÊ
šBEMYƒ—9àÈX"ðÖÐÐïíÎuXm¿ö$6|]IL´T¢B›õ…!úÜ8¸vü¶Â£GËvTy’Ëïc:´nnôAÕúuGŽmP@¾éo2gÈ#9¶P"M±‘©ÿÂòÊÍÿ©fÌoendstream +xÚ¥]oÛ8ò½¿Â2Psù%‘º·’.²{½Ë¶Aèå䘱µ‘d¯$oqùõ7Ã!e[RÚŠ
Eg†ó=±àð#F3Íótar!õ¾ØÂÙÏÃo`Wxuý÷»7?½ÏÔ²<Ëôâîq!Uʤ•â„ônóïä×âPö®Z®¤±‰bËUÊyrU:Ú¸©•«]Ó—®]®Dš›íò?w¿¼¹¾è§’3›eòuÌÐSn¥=ãv@š3cŒôÌþ³xØåîS“üµ”iâÚîaW>,%OžÂþץిq
£w
ÀT¥»Wʸf Ê6¬ï•Ñ-ÿpp–×õáq©xR4ÛîÐ@ÜunаhÜÑ…åõR$+·MÙí׸ÈÎÆÜ¿VE×9âH?|±†å2¼õó§@§ØºîÁ•ôÊkúÕôtýB`‚¦dn^~]å¶ýÛåJ¤Q=ìMeDâÊÆÑÑGçèZ×<ӎ禲E± ÈX¸·v]Ù?÷tõž§üÝ©®Ëj3g6\ÂcµMfuž“ÙÀKív—Ï'ÞY_šÏ7ŠD±l„H™²&11¶Ùõ=²lH$!^¬´æ,7V_júªh@š 6aƒ=*aPA3F’fA¼AÉŸ?Ý-è¥èžf,B &xÁ®þ¬É”M×àÕàç`˕扷ä +ȰTú¾#eOÀEÕð»>Â¬ÑÆ}@²uÝÁu» ºvVì +^6Õ“’’ÉŒÛR`ö€+š†ö6®&9©"¨1QNÊ_>€]m}ØKÝ֮ݺµkÞÒÖ&(߯}$ó‹9ýÈ3¡ÒWqì|ÄܬGâAN=²rt÷%… œm]ßîÉÔBXv=9Ï8<–¥¨_Piþç£U±º]¦`ÀÕë=F1žv1›…`oȧJR3ËE:(íÿÀšqnó±‘`ÙÐïy¯N!niºïÖˆ $Y<ôߢh83™È½c
ª’>Öƒš«‚èÀPàaVƒ¥HÃŒJÝ~½WZï×t(ò`ÚÑÚµÔ(}\(P7F(Üò:Å™ÐüWŒ¥ø©?®gÞeÌX…ö–ˆœÒÑzAlÑ39QבTBn´‘¥§âÐyáxZ7Þ„añ…¨R¦½ßûî|^ZRˆT +« ,\¸`×G$2²ðæ]’7ÂÇ×ïö›xä5¼GèÝ~ñ°ß{ûªZ½»½yKû©7†ÊEDèqÀEUaâ
ä·®‰ä/P»áfƒ"ÁõÕ,àjί›þk(*+Ï!,WjŒ#Û +¢( +w¬:ZSaUuhZP¹$5¤A/8{›M?}"ÁÅÆÙê6Ÿ(nâÖD|´í¼'æ–Â
nѨlÚ¹ç½?ÂQ¹oºcË@ÊVÏÇ–Z0¯„í1j–S‡¤ÇWt Ö2gB›×zPά±*@—5‘ +ƒ¤OÔ6$¼Çžøß¡
n#3'+!YÊ<e\@h¼°ÈÒëÔ²«i‰±¾ua¢ëMB$ç\(gD´<Ù눡Û×e8&4e¾„Ç‘dýcX@é™ÜËz¨¢"XÀLYkÖ Ÿ¨ô"t&ÀÁ¥4G1!ɉ‡À7›î3È×éPw}×àãð²i9
µdS¡ßEè÷TÏ‹uJ¬–„ÅOÂÉïÞRÊø Tp' ¥!·v”^<*-Ay½oÎ\é
·»–Tq‘¸ÁR%ÉÄ^i#ª¯„=Íw°7%`†ÀÎèóÊWûZÎaªZ$sÀðûBð‘GŸT rZ»ÝYMsÞÄÅQ¶‚e +áL—as,Ñ•lÊln<ÐâOè0ÎÓ<t›§5œþ9\?ÝÔÊ,®öo~{³øítÈ2`T…\Øtnø1i(…–LK(‘àeG•LçÊn +–§RüXq>vß‘È4plSžÍŠl":e,ÓZ BYžÏ‹wÎIHXJ™ôÛã.© v†&ÞG3=×Óáö¤?Í PO¹ÐÇBø½‰7·Õ~]T.lÿîSF@ƒ5Q…Ó£pÅ÷Ô€ørâ!õl0æB{Îgû5?RTRL'G°÷´„ endobj 899 0 obj << /Type /Page @@ -7299,8 +7320,8 @@ endobj 903 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222723Z00'00') -/ModDate (D:20080810222723Z00'00') +/CreationDate (D:20080810233612Z00'00') +/ModDate (D:20080810233612Z00'00') >> endobj 904 0 obj @@ -7322,7 +7343,7 @@ endobj 902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 720.9315 87.8688 731.5137] +/Rect [501.9286 738.8587 516.3841 749.441] /Subtype /Link /A << /S /GoTo /D (figure.3.6) >> >> endobj @@ -7338,19 +7359,23 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 909 0 obj << -/Length 2328 +/Length 2321 /Filter /FlateDecode >> stream -xÚYmsÛ6þî_¡Òœ„$ïmÆI|mš¤ÉÕ>gæê~€D„â™"U’Šïܹÿ~»X"eÊãÌtšŽ€åb±»xöp0ãð_0‹S< gQ"a³Íî‚Ï2øö]ÿxÞUǼr¿º¹øãßµœÅ,ÑZÍn¾Ì„™ˆEpz“þ<göyk‹ÅJDñ\²Å*ä|þ&·Dx»ÛvgË6·õb„óC™-~¹ùáâê¦ß?œÅZ‹—)Ûs?ÕVÄm{„ ‹¢H8e¿.D8¯v‹•Läü:ß->?¦j"åe‹zS‰Elý€Œ¶LmkKâü`Ûm•v³Çƒp»ˆ±þr'#•Kóp'•ÚÖ Øl^¢N,yÀ"žh0•½½¾\7m[›Mû©®6¶ihÙÈÒ˜³D‰_UØ4ÏŠ|³è¹ÂU³•ŒÓ*€ƒ"–ï2‚‡ói—4JñøÜ -б(d: -ÔØYM…lÄÓŽ#ð¯.?½%2åœæ¢f–ÜÇhúÊæÍ>·Eƒ¨!gæõ;!˜Üh—·Sîˆ$Kâ¨Ë™mo¨cšû掇þ&Ü¡ƒÕe¨ÒAÔ«|Ì09Í@çV ˜ƒ×ó9/ˆU8ŽÅOT9òÊÿ¶˜LÛfõy¡@_ ÂOk›Í¶0eæ¢A&àÉÌf¨‚_ôÅ…–ûªø -txî|ÐX¿Ý=šP–>îµOèpþR³ TÉØ!fM.Õ.ŒDͳCK„×g -Õpê8¥b`@Ú~™,f!C)<ŸppÆîðÆ`~uõÍI—íÜh7[Ê>)¡^¹·ûvAêòõ–à)žÔ×§fKÍûœ 1Ã: -nI¡RbøóôhÈE//zp…pºƒ§µFG1}hŸ˜ðÏCÓ@»ÞgQW!apU£žÇç¤}u ·ìlrÍ8ܬÑ
`Xmó¬Ì1`Ï'"èc!¶ž7nÀuþYI&\€öbCSn ,JûƒRÑÐéøšp¨WÄAaŸsÜk[Ø®³XA¼¶ðXóZš7®íÇÅ Q*²–èÝÖôºd AWÐgÁ‚ -ñúM”ââúâ½Dl+…b/g…ÑBÂü°_2ÇÉ,Hb*zþÁ݃w|8àNâ+qŒp’E‘R³žÍµRUç¯!6µ…Úðº†ByY¦?ÙMõÕÖWÿ1xcÂ;øíõ
\Ç?˜Òdx@¸¤=–î°„ÀPñ. Y¨pØêº·zOw·w„ß(a 4JZªS!î‰ÄlÚ«¯pëtmó¿ÒOihÐ__÷ŒÝsŸ{t6Ai-UÅ~úT4~CiÞ†¯PD»
þ ->íBÁ :ŽÇ{õ;ñ»÷_¼8-àŒú%hÄÁ‰€ÿMý1Aé(‚Ž,v#ü2à -³ñ¾íÿ™+ä,Ô\½ì3qÌ8Ýé’$hwB(Á:&’gÿÌ2vºóÿSiÓendstream +xÚksÛ6ò»…>JsŽ@¼×Œ“øÚ4I“«}ÎÌÕý +X„ál³¿f|û®ÿ
îÊ#¯†Ø/n.þøw%f K•’³›O3."ƉÞlž¿Ñ‡¼5ÅbÅãd.ØbÁüUnðz(ÌÞ”mnêÅ*Œæ]™-~¹ùáâꦿ?âK”âÏc¶Ç~Ê-OÜöˆRÇ1·Ì~^ðh^í+‘Šùu¾_„Á¼+t[ÕÊËù¤’˜úM¹5) óiwÕÖï;Gàv‘ +ô2¸†h®Þ¯ÿmP‰y#‡°»¡}¾Í5}ù°ˆÐ-þ»¯HÇu)@yÈë-Àˬ ˆ?¼£ÔàûOE劳8Mä·ç*v§º}fо¨h
Z¸KÑ)(Æâˆ©8”ce5¢…O{ZŒœuùá5)Àâ443¤>FÛ&o¹)ôRfÞw:“]íóvJ±`iû¬‘™öf;º¹oî‚(€ÿà uHÉ AùUZu,s+lNs+€Æ¹ +ºùJ¦kçÈÄ{)ÐPÝû÷þN(å3<ŠÖ?¨ù÷¹óG`gպȱ"!š½˜Â1/iqÝvk¨S¾ADÇÔêÂOMøˆŠ @§¡Ã΀q×Ý£eéâ^¹„öŠ…‘LÇ +ÑkR©²aÄ£xžu-lŸmK‚Z×{—ÄÃ}Wº«ÈåðÛ6wèÇ:Ž`ŸÉ't r>F™ò|þˆc€XîØ¼ÒJSo—ÄÈCÎIP*3VÈ®qz‚ŠùI˜`Î4TB*烺ܸûÐ-œ -³uíýmgí¿¸+—‹L½F÷‡dÿš¦íˆwÂ9Ô†¶N0ãÂ’yç µÈé%KÙKlF[kë”1k
í(j{{áÑFÅS¥ƒ¬¼x°xSh¨†Sæ’´bàÒæÓd1‹X îð\€ƒ*0æð†Wó«]®MN¼üh:P£Ùì(?º¤„|åNîÛE©ËÕW8‚V<©¯OÅIÜçXnuç+b2°~¶ö{*x(B*Ÿö¿×Íî>L%z™8M†rOư¡úºS<_d}h[ÜS)¹"^’ ÍÁ€¼Mq%±ûçü[£Êwe‘Ÿf ®q=ë3cL +
+xºpÄ‹ê^ûFø
Ö¶ê@4à¬qïÚßu{‚úúO`×|¢W#ꃣ_taü@î5*J®¶µ:ààuÍTóÍX'{Õ_®['1ÌAo«2ûÛ„ÆSÉR)â'Í"\uÞédÂ"™D_w:Î’$ñN·$²MUnH ÆÂÙåR·^J}“®™$‰€ƒ;@¹ËÖ^ WT4áj£‹›|o¦t0)¥Â·ßpApuÒ%LÆ&%HÖ6cƒ†ó¨é€…mŽ!c§ÔŠ"èj›ûÚŒðc€o[€_¹ï£,ŒDóÉd›Bε_H¶ +Ë?áÍcnvXlNú[“eüºô
ÌJž¤Ò>˜Ë4r]@9ñ`cTÓÒFA3¤º +aÁN__ü;‰„ù(’’_ž¾
±èÍEÍ€ÅXwðè"y +SPBå'ÆÝÃÐ@4à®×Yìk#,®jäóøp€°Ï6á–^&Û†ÃLj +ÔCVaìñIû¾µÿÓ9[î“ýzñó/Ál6ùáZÚ<æ6Ó”Ïö™Œpü&Hqq}ñž"¶•\2ŽÃÆYbt0 +‚aS¨/k(——åö'³©>›úê?'&œÁo¯o`§K¡ðH{,±8Ç€ŒpP, e4lx½Ž=} í-à7J›aª˜Ež±O$zÓ^}†ùÍóÜö¥ŸÒ<Т_öˆþ9áϽw.Aé,ÕÆ~û”4~CjN†¯PJý€³IJ:šï(ÉrHŸ½}ÿòòí‘ß3Êiõ}ãÁôvë9ëE ,4¿éy¥ÖÎôÏPëOÔg+6+ªõó4˃iò€ƒW'ÉøŽ!ßc%~÷öý‹‘§ œÑâ‘ß!ÅÂ$<!ð¿©?&HÇЗ¥ÐtD¿CfXa +"œ·Ýáß#sE‹T Ÿ÷‡™$a”ÞéÂÄShz"(Ä‹³f;½ùÿéÒÔendstream endobj 908 0 obj << /Type /Page @@ -7370,18 +7395,14 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 915 0 obj << -/Length 1872 +/Length 1878 /Filter /FlateDecode >> stream -xÚX_sã6ϧð£|³â?‘êÛö¶{“ît&m3½™kîAŽYµ,¥’ÜÜøÓ@ZÉVrÛ?$A -?¾2Š©4×+“K 8_=oÒU kÿÿyàÝDæÍ”û»‡›o>ereYžejõð¼R3aÿ"ôa÷[ò¹x©W¯7ÂØD²õF§iò±r4qw|©ÝÑ5Cåºõ†ëäÔ”ë?üpóýÃx¾)³Y&¾NÙ‘ûZ[a'ÚŽÐ93Ưì]jIì*×»#Ñß¹ª©¼0z=u;ç¹Tr~]ó4q|ß¹ªlª¾w4~Luúaۧ™S³#⟕۹nëj·]‹ÔÛìç]Õ¸žÈÒ•nëºïÚóÜã@|’9iP4%)†>û7ܰ\c>(ËÚ$há÷%ia ŸWÀc“l½-°°ÃÛ@¢8'W×^
Öí¡è¿ -b^êS -]ÆG¦6=Q=ˆƒc`›]Œ€ûP#¸ä–Ž{}”Jí;çˆ:’yfÁ›½ë6Þ#‘+fñvƒgdJ>2'›‘@çwD–u»%;¥J“yÃpþϵÐIÛ,ØÆeÆ2aò µHß0R„状~(†á1ME³sp‡þŒOÒ¨ŽNö‘æ'×:MŠº¾¥!˜Þ‹N˜ÚIºwÜÞ?Üpf…˜Îr¼@¶‚‹f!S¯U·‹©©žöa±8õ¥{Fƒö°
niaW„gfKAJû´¿–·-]?¬yâ}t³UOñ?ÅŒ˜Ý™5s©œBÆ5®M¹)²,ç<›BE¦%Ë
¬¡“ -êÛc.¨Êƒ²ŸNÍa¨Ú¦G]_Ú\¼‰>ÞÄ…5›÷wý›Á9&ãù Δji\Á(½RT{žÕ+0E¤Y4¬þ1‘ì'¾¹;J»úØÞüt³úi\Ì2¨BR‚`ÔÑê¥jqå_µÂ*ÐòN°T˜å¢1²E.J,ÛªÞû:gØ·—>:c©¶ùjrÄ•"#ÓûŠ\Éò€«êýr8àEºÁ-À•Ò̦ÖzéຟÚz°rÄìȉlüSÊÊ+i?ìo—^€ŠÌ”„ûYð•7¤0À—¼á,Ïõû©ˆÉR)Þ/÷25JMʽœ”{‰à÷´oß`ð
¨âô<rSõ›@¤iÿâ Ú€ý¾óÉ„I…ÐàçB' C»ä”£i@\è°Ì7ŒfîŽK–ê? Éy´¨ª¡RˆŸ¡Í¨‰Œ8‹ËUç&³ýž°ùa
X™ýaócÑeE6ÍvxGáÖ2MþóRWgh£&PüšóÜm0K¬Ä–ªÝþú¸fn%Õòó©Ãjð„ž8€¯0Cz~ÆsÉsÔÍj”Ôˆ{tð‘ä:_Á†öXU«QéŽøil¸dR–çäp<W2»@…‹$àØ*c -•1r -æ0¿®-¸¶ó-Á·4M^bDô.ArŽ±Í„Ùut]ØaÓ4é‡ãã̲¦ñ0¡¬J~p¾ºKSû‹Iu<ÓÐ^*µBBUÊòi0§ŒK³¸ø‘ -m«‘y,Î=¾`ðð)!.ês]à›$ÞÎbT¿÷œÍ¤ÈÅÿMªlx»u[|Õà™Xµðÿ> ÿ)±u}5œZþ=ø~öâŸr “µjîPàY£Õ—ðÀÊ:yq8œ…dtÒwT–ð-¦ýÓéËshXEt;O—0D²R2°\…'µ]ðFΊÑ"—|Ì2áohZÕU9D¡Óïajï8.ê¾]8x#ö t¨yŠÊ7¬ãÆ.ZJ5•êëD¿¦YL1dYØ|¹WƒÊƒÓ ;>\Pb»¯Iœh\üÅ?àÓ¸wC³`0ñ'3œwü½® Á Hå,|‚¡·q°ro3}Q.œä$`ó±¨
>ôiÈc@vo›€àCT]ÂðÞvÚüå¬ã¬&ößE³/ƒB.(ù©.Ê@‚“-‘¾ô6„=4úŒ Ö65nMö—Þ}ãMh!ŽT&¾î“â„yá•“–ixáF.´Ï¨7?¾sò¿¼K°endstream +xÚXKsã6¾ûWèHmYñ"ÀÜ&;™-g*UNâÊVm¼Ê‚)FéT¼¥_¿Ýh€CJ´w²åƒF³_èþº!¾Jᯌb*ÍõÊ䜯žŽ7骄³ŒÿyàÝDæÍ”û»‡›o>ereYžejõð¼R3aÿ"ôa÷[ò¹x©W¯7ÂØD²õF§iò±rD¸;¾Ôîèš¡rÝzÃurjÊõ¿~¸ùþaÔ¯EÊl–‰¯3vä¾¶V؉µctÎŒ1Â{×€YR'»ÊõîHëï\Õ¿TÞØ½žºó\*9¿®yš¸ŠN¾ï\U6Uß;Ú?¦:ý°í‡SwÞåÔìhñÏÊí\·uµÛ®Eê}ötW5®§eéJ·uÝwíy
áq ¾Éœ,(š„”ØÿnX.‚3”em¬ðß#é` ˜WÀ{“l½/p°ÃÛÀEqN®®½°ÛC1n&6Ñÿ*ˆy©O=t™™f\ØìDó Žmv1îC\’[R÷ú(•ÚwÎm$÷ÌB4{×m|D6"WÌâí†ÈÈ ”b eN>ãƒßѲ¬Û-ù)UšüË;†ô?×B'm³à—˄ɃÕ"}Ã9(ž+Øú¡†Ç4ÍÎÁzŸ¥Qiö™æ‰k&E]ßÒ\ïÇ-ƒ0õ“lî ¹}|¸áÌ +1Oœå|j…ÍRH¯U·‡©©žöá°8õ¥{F‡öð84ÜÒÁ®ÿ}ž™Y.)íÓþZÞ¶tý°æ‰Ñ9P«žòбº3k çR9…Œk\›rRd+.XÎy6…ŠLK–8à ¶0»ï0âíÐЃªåMk@€å|Ñ,^@.H¡÷MU`—sSS(67Ì·9æ\0•c?šÃPµM¶¾´¹x}¼‰o6îïú7==&ãù ΔjéBÁ½JT{žÕ+pE¤Yk8ýc"Ù¾¹;J»úØÞüt³úi<Ì2èBR‚`´Ñê¥nq_½Â*°êN°T˜å¦1²E.*lÛªÞû>gØ·—1:c©¶ùj¢âÊ‘é}C®dyÀ]õ~
µVð"ÝààJifSk½tpÝOm½X9bväĶ +*c<"ž^uå*.ž"Tübóå“€ºKðŸ_©W†e†Û™úKHŒ<ï+Ôœi«ùTa_a*`|(iþ7"e†ižó¯@$¨rrõ>"Y¼¾ˆHU¬Ú‚ú൞ZÆ_˜‚qzAgh쯟ö޼|#ÛÜcT¦P ]RäúbÌŠÅ[-¼°ÖPÊùÔ8÷6»ª$\¶ä²¶Ìp'Ð_Á)®CK‹§á>D`ÁY+˜ûƉý$ݵ¥u…‰[H|@£¾8¯tþÝECOtå&ù0Ä‘Ñ8ˆ+ÎReø¼v
s`
Óâ×µ…Ðv>¢%Äá–ÈUXŒè€›‚&¸œƒl3av]ŽØD¦==ãpx”YÖ4&”UÉÎCWb‰´/¼‘TÇÀ3Mí¥^+$´¥,Ÿ&cÊx4Ë‹¿©0·™ÇîÜãoßbBá¢>×>JAâí,Gõ{ï°LŠ\ü?Ùġ͆Ç[·Åg
êĶ…ÿïCr4çꅌغ¾Îÿb?{òŽo9°ÉZ5Vè
ð®ÑêKzàeiyqH +ÁÂe®©/ñ1¦ýÛé!Ës˜XE;O—0D²J2°\¥'ªZ†.x$çFÅl‘K1f™Šð·4ꪢÐé4ÍwÜuß.(ÞH€=hj^¢ò
︱‹Þ…V
ªR}]×4‹%†,_~«ÁäÁ2ØŽ/”Øîkçñ/ø4~»!*8L|Å ÁIã¯+(0H29¿ÁÐã8x9Ë·™½(4ù‰ðñ±¨m>ôÛ,Ù½o’Qu ÃsxÜió—«ŽC±š8€Í¾@4¹`䧺(ÃB˜lié'AïCø¥‡vŸÔÚf Ém bÝ7…òHeâë~Sœ0/<srÁ2
OÜÈ…þõæ/„ïhþ/À€LKendstream endobj 914 0 obj << /Type /Page @@ -7417,8 +7438,8 @@ endobj 918 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222722Z00'00') -/ModDate (D:20080810222722Z00'00') +/CreationDate (D:20080810233611Z00'00') +/ModDate (D:20080810233611Z00'00') >> endobj 919 0 obj @@ -7469,17 +7490,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 926 0 obj << -/Length 1680 +/Length 1679 /Filter /FlateDecode >> stream -xÚXÍnÛ8¾ç)t´˜IQ¢º§d“.Ò¢@‹=ìf’ÍØÜÈRjÑ-Чß%K¶œ9˜âç3ßãþx”%,‰se¹„çÑr{Gk ýÕÿòÀ»è˜Cî뇋wRi–§i=<EB*&´à¡«fŸŠëL5_ˆLÏ$›/TÏn¬¡»íKe¶¦vÖìæ®fûz=ÿ÷áãÅíC¯_‰˜é4¿glÏ}jÐkû¨œeY&¼±Í -Í2™-+V•æ×ŒjÖ¦Æm9³#ú¾^ÑâéQfÉN%ñ,ÐVàÑœÏj×¾ìÌrCg“Yiì–V·¶v;óô4—ñ¬£þ˜PÔÜîŒ]×¶m;ê -†‹{o`Lìf· ~°Óš
Ä®E‘?çäÚÖ`$!*ž±\ÿôŽmÛ€³(]Ä`pžÏ¾ì×<Ïa«©ª–ˆÅÞÛÉPØÑóD0¥… -7ÏŽ3³Ï¡XÁapq˜øšä)$¦ÐŽZútŒ¾G1Ëb×p
ÔïIì·£î6ßÝmeÝ4_/¢¯½ô$fiC²4E«©Ò8)ž§L¥JG™kK.¦K¤çëÙ08W%^pi«Öj(kÍÞG(Í2-’h¨äÄ–žë
[N¥¡-£|õW]ŒØ¢ÄÝ -3ÜßÞ–~ုh¥µ²®Ù[â3>ió‰í‚.】³<W“þõØ)!˜±LÅëh$Ó˜I®È»[¨@¡3¡S(sÀvKó\Ôµ»¤¯UцýQLôîíÈ}¿kH÷²Øþoó,ž%0oв[>?Ê4kS3ú¾)&@Bê„Èæç@bA•س*ñ‚Á´V2Èì°s¡2–pžLê¾%l¨Ý„üªVu -¤J=–Ë
´A¶ÂÃ$ƒn˜‹qÏø¼w.8ú\A¢™ ÿ”d"ËÞvO±$í“¡(צ2k‡ù£òÙßF\\C÷z±~j€/ÌsZm›ºd‘3Áy³vÿÆ*hYq×MS™¢~ŒUü`ïLëà7¹$y.Üž:ÿcÂ\.8ãIÚù4t²6û°z;ú&C×Î=4š7ed±êƒ‹A€‹R8gÐâÞõªØBŠ„¶uªUçLeI—ƒ½óÓóLv-jº&ÒvHDF0͵†–“ÀA$³ka²ug<]*¬Š½k¶…³-f%nØàÖ)Z©0‡@Ô„b -$÷¤¢—ØtS›·y +xÚXKoÛ8¾çWèh1+’¢HuOÉ&]´E zØÍ$›±¹‘¥T¢[ ¿~gø-[NŠLrFóâÌ7ÃÐ$…?šÈŒdi!YpXPš,·i²Ú_Ã/
¼‹È¼8ä¾¾¿x÷!ç‰"EžgÉýc¸ L1ºz¿úgö¹|6V×ó“jÆÉ|!Òtvc´?ø¸}®õV7Öèn¾ b¶kÖóï?]ÜÞúK‰Êsö{ÆÜ§Ö2u`íQ)%sƶ+4ƒ)9[Ö¬ªôËŒj׺Ác53½õô]³ò‹Ç.³
|•¥3ë™VΣþ¹ÓËŽ|•6[O¾5íôã㜧3/WÎ~Ψ ›ÛN›ucú>j]¹på̓ϻîQô‹Ñˆ\"Í)È5½Æ8BLT’‚ÿtnmµÝ€« ³ÌíaA‹Ù×®µíÓŽÚºî=±Ü9; +;ºoš1"c E¿»ªzÛ¡öri¬e[ûïF‘WÒ„Òð†¯ +n=w¸{´Qõrsé-k+¤M°ÙûˆîÒFä£8y¾ iS͂1¹ÂyŒw•OÖütù®Tº{'Çy9dP*àcpñ -#øš9¤%SŒŠ»dL~$)‘©’žëp
ÔYꎓø‡ï>ny‘Ü´ß.’oƒô,%yžBª34E‰©Â8)ZäDäB%^(’rʦdàØ08W^peêVj(jEÞ‡ E¤bYr¨äÄ–ë
[N¥¡-£|uW]z1e…§µ«¼½ÿ…\=k(•±mwl5Š—tÒæÛ9§)À"%E!&ý“C0Sž³×±ˆç)áTxïn{_Ýrr(sÀÛÇš*›Æ^úݪìÃù(&ÚèGN¸ïŽq
é^•]àÿ>—éd(ySVqùôÀó¼itCüþ¦œ +"dspp~Zc!yŒhÙøkòÚö‰HüÌr½öËIàð$Ýõ0™&ï/VåζÛÒš³LpëD˜C jL€^†( ¬œ€?àz6[ùðÙˆcwué°ÎÑJ7¯†r×G×økny +`ºÑþøR‘þ²ó4s0¿êæÒkÕ3ùóX}m
’R9HFº‰©ÍÙ¼F€ÆŠ-Žj~qõõãâË~¤º¶{¨*0Æý0¦Âqmà*º@ªÏZ£8gz»q£V®%ܧ®Ü•ãñ'q:1$ ƒ#øÈ?p.ý>ḇgã`“Þ{â[÷a€ßŸ›ÁXJIZòõ.|Èåº0 …î-°åHS¢2®öÂÜ|šRy¬µÞ9ÙëZ#Ó©Öq¥œä2ËÆZáà" +zÉŸç +5zÅ 3åæøÑñÉ&oxËÖU€ÑùåAÛ3î_ + Áuº¡p˜}Îæ³‚·O–³ßûÐóÄ«`$,Dbä¤8ûÿW4ÿÃï¯endstream endobj 925 0 obj << /Type /Page @@ -7585,16 +7607,25 @@ endobj /ProcSet [ /PDF /Text /ImageC ] >> endobj 930 0 obj << -/Length 2642 -/Filter /FlateDecode ->> -stream -xÚ¥ZKsã6¾Ï¯ÐQª²¸Àææl›d'™Š]ÙÃz”KS¤K¤fRþõÛ@€¢(om¥&£n ¿~f‹þc‹<‰’X¦‹\ -h0¶Ø?Ä‹=Ìýä~™¡][âµOýÝㇿý˜‰EÉ,KÏ.Òˆœ
›>îþ½üµ|zU¯Ö</–"ZÓ8^~_)øùøZ«£júJVk–.ÏÍ~õŸÇ_>üðèø§<ŽŠ,ãïÖQ_JËOZ‹(Ë“d‘§2ÊóœkinVk‘ÅËŠƒ?Ô…[~[±x©N;eh•%ú|jûöeÅãe[×_W<]–tšªÜàhm—œ›Þ®ùsUàn´i³Ãsk.zyÛà%Œï7ç+‡s¢¨>|>©çŽƒ£‰,yaéÎÍŽ8Þ÷½‘JuîUpVc/Ö".¢4•ÉbÍòHrsM/uÙu¨ÂT.«¦ê«²®:}I¼ì#š %Cƒ.jšogÞu…H¨9›vWmÔ¢[;Rç;˜gxÀ·làx'‡}vUßšéÒW —fN*ôI¿(äNZªêj¯Ypý]:ÂÝà\ª‰ÆvÖ'O¹ß #ˆ4jEº`,’)n%‹ŠDn+”ñ)fù˜¥Ì#0Åd–¥¥¹`Àn0e¹é -ÌüÕ©þ)NcøÇ& ËÖp#ì~¤½¾W6Üç“êíÎt¾U§|Q¨>¢(kj”çn¯žŸDžÖîˆØ˜\Cd»Êìö -ÐéIlÑzÙ”Ûƒ±ží¡Ÿ@v‘FŒeØÇ«°2Š3fé6ª"ž;u¤†sß«Æ&PÏÏýU¦¹ -͍¤Æ³´'Õ½¶ÍN—†vÙ(¨ù›âVÍÛy¯6„)IÏ%:é×7I˜0’%,íʺÝÓèÛ™~
Yry*œÕ§ß”gt¢Ø×—Úêðˆkj(u÷5ÚÕ„D ®´bèD¶‘G †"ÛO“»ñ,bÂ"lœ L"’auBôÚTŒSODú$+ÂìÊ,½÷ìS9ø$DÙÛçi$¨öùEiSTvkFpb£hôxìià]C[ï4â©z3O?œE ÿŸÍƒE\HÚ‡:mth~tàâ4õѺÒJëžTÜ!Ý“‡PÊÐ·Ø -ž qª3O3÷:Õ®-aôy5©Hd$“àÃwe»ð5ƒ´ÙSs††h.]ViŒoÕHG‘oç‘—Í^é2ˆÖCÝѾ”µ{·+t‹1ú% ³ñ£Ã$†Z÷ô¶uõéE$2`w»bÒHH6Ó¦øÆf¹9 4{Ei§´ŽSz¿® +/Length 2646 +/Filter /FlateDecode +>> +stream +xÚ¥ZKsã6¾Ï¯ÐQª²°ÀçÜœÝ$›dLÅSÙC¼J‚%Ž)Ò%R3[þõÛ@€¢(§¶RáÑ@7Ð_¿@óEÿñE³8*’EVHhp¾Ø?D‹=Ìýè~¹¡][âµOýÝçû!•‹œi/>?/„L˜È6ý¼ûsùKùZõª^E–/%[“(Zþ£R4ðÓñµVGÕô•:Ö<Yž›ýê?ŸþðýgÇ?ËÓT¼OXG})È=iy$YšÅñ"K +–e™ÐÒþÔ¬Ö2–;¿«= +/S¾ü¶âÑRvÊÐ*KôéÔöíËJD˶®¿®D²,é4U¹ÁÑÚ.97½]óÇ*ÇÝhÓf‡çÖ\ôò¶ÁKßo&Ϲ€s¢¨<~:©çŽƒ£É”É,·tçfGïûÞH¥…:÷*8+±Ækå,IŠx±æ+„¹¦—ºì:TaR,«¦ê«²®:}q´ìM’¡A5M‹7ƒ3ïºB$ÔœM»«¶jÑ©óÌs<àÛ +6p¼ŽÃ>»ªoÍôNé«„K3'•ú¤_r'-Uuµ×¬¸þ.
ánp.Õ°1‚µE1‰ðñ;ad‘FLœ³"!ÐmÁYËÜm…2>E<³,2¦Ï²´4,Ø
†â±,7€ .¥Üö +õ§›eM¤å¹Û«ç'™Å¶;³Œl®¡Þ®2[?B6uÙW™|;;p‚vpÂÝ·xî—=žì'( `WQ¦)K“xÑ +,Õ-̱t(³œFÏ2DHÓ +&мðLÖX +?ÚÃn6ÚÃVC´‡Ž‰ö@a£=RèhéhÄ^´O´Û¤á#@yüø¦“õFªÀ}©jßTÝú@=T@bqÕ,ÙMÌqp0æz>W_ëq/í`éGrÙ·ÞÐŒÖáLQæ)73JǦS:îYu=º¸Ž£í+¦heͰ›,ÿi +Œå±ê‰ÀV ¸’ªÕчþÕî÷¡!b©Ýk#fà•‚2!C¡Ò¼jn»±–ÆL9€¨*3üN4ì]MÆÄnχëÐ.îh®k‡¡©j¦ƒ¼Ä`ïb"!HXž…N9OÈxÊmV0„íAOÔx8÷½9ƒ)/Ùò¨`"™ËCî=Ÿ£ïeÛÖä+"»ÊÄ[Q+²Lˆ/yÊr)Sl1‰4Rÿ€®B–‚RÝ25=ŽŸáš+¼1}Ñ0DnÍÓv•®¯õ +͍¤€ió'Äæµmvº>tkG‘m´sÙ¼÷jCÀЍžtJ¹¾IÌ¥/æ1lWÖížFßÎôkÈâˣᬾ‚MyFOŠ}}³Ž‘¸¦†‚w_£qMàHÆLrðo¤E'RŽŒÅgˆlw>Mî&RÆ¥…Ù8˜„%Ç…èµ½Ïs÷qš‡7Ø f”^z¯<اšðIÊŒÙÛ “T +ŽTRìMBň8ž>èÿ…H3QÜBˆG5‡Kv!s\„Œ¹^AˆÏÕÆ'{ñ)x,Ä©Î<ÐÜë`T·ºÂ„qÐçÕ¬".X±ÿ}&¾ÏHÿûLŒåf]÷ÔÆœ¡!šË§—U-"4ÞÎ'"/›½Òu‡Â£})k÷o%×écôK@æã§=†Iµîé… +êÓ»&4HdÀîvÅMY‡½“™6%86ËÍm¥Ùk,ÆqÖqC„Þ/+€hÛô +9ü×HiÊ1³[ùH!jO”ƒ¾@õz7UœeLfî;rø\7õFšA•ÊØ½‘¾UêpnöJl¾ŒNVõ¸.ruX{‘øMqLYœ§™_ÁO{W
™ÃJÅɼ!ûT3†ìÈnò,WgÈ\§
9àj
¼ä`ÈQä2ôNêØ®l±¦ì½v³× +–dÒO1aŸï›^W§ö‘Ý8ûÒyoó‘“^(ø”!“CWƳ{™ vGX·T(çÅ#?Nh䛯mFÞ + |®^èeŠ`êö#Å^õ¿žàÿ¶úOf1ãgVˆ?V›þ"I+†OÙŒž÷Æ_Íßùu¼ûðíüªöòŸkÄûþ:É#¾üsQàsÖRᑳôêßÍpþéj>ýendstream endobj 929 0 obj << /Type /Page @@ -7611,20 +7642,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 934 0 obj << -/Length 2655 +/Length 2658 /Filter /FlateDecode >> stream -xÚZÛŽÜ6}÷WÌc7àfxÓÍ€ì8ñz³›ë‰H&ênδvti´$Ïî|ýER¢nätð¨©O©Î)I‘Ü`øGn"Ž8N‚›(apAÈÍ¡x…oàÞÇþ/Ѷ;c¼³ßß¾úîÇÝÄ( C~s{CY€hLÉÐéíñ÷ÍOé9kD¾ÝÑ(Þ0´Ýo>dB5|*ι(DÙdâ²Ý‘`Ó–Û?nÿþê‡Û? ÅaH_ælo=÷–Æ–·}‚EQD;gß‹l»c<Þ¥;òbÑÁîη-
6U©~|¾TMõ¸¥xSå¹è“ÍãÃ²Úæ¹ïçÍsžNª)mï5žHß«¸ˆË¾1Ͻkí%@Û¡IðY€å‘ƒ|‘¯_ÞíkxŒàMzhÀ»ƒ¨kÕÝùRíd7»þ™‰PBu:Ë`/Jd¼¨î¿-N@7a„iïÃ狸—¨˜ª¼œwÄ(º}nătZ¿ðýý–áMèãIÞ—£(‘jøºeÃý‹8<¶Ù§¡îüS4§êh4T-xGˆ3—ç~‚¶ãFÚôï¬é^“ÂSZEÞhïã`°€¼c Ô“ÀDŸu=¯Å‰2Ękü<ëR¨Vj‚«¤§®òjŸæÆâKVÈȵ9„(m²ª¬EVÖ”9ˆÙ¥{ï!äÐz‡üÜêdG}Îd.Ë_J²v÷ªï.Ø©&0í$kÜÒD›w¥– y‘²}óÝT{ù—ÈüzÞB‡ M¡îˆ\êîÏéá¤'•7Ò¢8wï’Ê—|³@Å®¹!u_U¹zò"ß~y*UçoU›" ЃhÞƒ©HK;JY¨ -3‰¦¨IA ÜjŒæ¨ãˆ‚ªÂˆó1ê¹U™Tî0fUªãŠú>¯Òàñë6ÂCú”щlY@D!ahhy£zûé£é1eöד*{yÈ’®ŒÉ[ÏíEjE£U:Tɤê¦Ã²rÑa̼t¸P:¦¨+tبS:T…ÈŽêWíçÃbïà2]¤-l"8ÓöE4ÏWðvõlj€Z%ä‚ ö‘hY¹H4f^]¨‰SÔmÔ)‰ye‚ õ±+·YáL œ ÅÞüI›VtÕ•ÕUÓ6®~ŠŠ¬¹*¹0Ìà ,zx±¬\¼3//.Ô—)ê -/6ª“#1L ¸’‘¼zì ±òáÏÓÄå¤ÀI†må £7ó‘áDíɘ¡.“1BõŽt†¥Fµ,&‰QDó]W´ÎFˆQ˜ØÃ†eåbØyÙp¡lLQWذQ©ñ´8WP>8ÞøÒ„˜¶Ê®Ìaœ+åäšÄ‘sVû¨²¬\T3/U.Ôª)ê -U6ª7q–èøÌçw‰ŒD’˜\›PW3éš°¸'<ðQgY¹¨3f^ê\¨uSÔêlT7uYy¸ˆ´×¤¬ÔFc–>•—aoHv3¡l¤V¯›äBÜM
&ˆE4ñPcY¹¨1f^j\¨5SÔjlÔ5Ɉš$Ú´çcÚGbÍ‹*‰‰½6¸àA -_6ꈯ8 -pñÐøOå‹(¼à -ˆŽÇÜw؉óØìÀ¼Ô
-[_X3GØ÷‘Ö2rÉC[yÕá€Ä1\ц9’¥ÝÑÍb(ƒ<©¿W+¶ú$ŽÎO±˜Û6è«SÅ‘ -£E?ãÒçæZ±LM&|‰š× -BŸZÑþª -šíBÙÉS}§‹$lK³‡TªŸã/Ū
$Z•ýÞ„.šl-©>:™îaAÚtÇz̧X}®ªˆD!b8ôléÛVõf>!9Q{%ÍP—¥4B3ƒ–º@¼PJ8„§KÓ¼)1`¡Ÿ:¥#ÆÁš”úµ”YÓMKiØuüsŒÃ$*`ÌǸeåbܘyw¡ŒOQW·QGkxžØkx¨'3Ê{AHÛéÝE1„‘”—µ§(ûý[¦×Ã…\vu§x»½y¯0Ý«³ŸÐ2"PÞI÷†±®Y›Iÿ+H‚X@Ì4rZu÷V=ï¼EÀ#û¡>B1Åáx4iÍDf@ ½ÈÅÞ”Ô'c˜þ3Ζ}”ϽUt=®}„÷äIhû¨¿‘Êc¬«ŠŽc„yH_v6Ý2žö¦ Ea@þKéGž4w ÿ+ÐSäendstream +xÚZ]“Û¶}÷¯ØGiÆB‰ gü°Žg›6õÔw&Ù<PVbW¤4"ém÷×÷‚ +ƒz‘¯_n×<†£E¶©Á»¬*ÝÝé|\©nVÝ3+ÌQJLZË`/‚QLhbúoÊí„Ð
,é|ø|– +|?µ——ÝÆq*Ì/ÍNî”Ïæ}—4Z´q€ŸÏêŽ<oe‰TC²øºªáñr¶[gg©›ÿ.ëýq+—xQêËԄÂ#AH:òøÒMvʹ1{n”Ú©5p•וZË}Vnå¡6*ÇÀ`xE!žª.ö´íy.J„¢XDÌಪjñ!*%¸Ê@xújw8®³ƒµø’*pÍ’Õù±¬d^V’²5ÊÖFÝ}Ä¡õ!Š£—¦Ð? 7ªS®2YýÒ‚u»×}·±ÎY+Xë–y„/nK#@ûZýíòuý)Y×ê/VÙõ²„A™Rß‘9¸.õÝŸ³ÍÞ +Þ¶²º¨R¨YA.ŽB$:V>YDjOâu†DuLâáhƒ õ©ïó›@QŠÁüÉžêF¶£+éGWCÛpôÓTäõUÉÁ,†Å +|mB]ͤobÃR³8Dcå£Îš©ó¡öÔQg¨sQýÔååæ,³J^“n°R‹£„Yº+ŸÎýÎêfDÙ<IY7©…¸Ÿš#ÊI ƱòQcÍ‚ÔøP{jƨ3Ô¸¨jÒ5)_4§mVKObÍ+‹ +M•ÆÿGE4ˆ¥)õ«Èµò¨¨3©È‹Ú©èuZETWET¸3*ìÌãr¹Œk÷l×öKûìÜ<$(¦‰£3ÕÁÔ<Dµë/$àO/4gBEjg!ÊØÎBôDÃâ*“›p;7qǸKŒ?aBi„xšâ€l+Ÿl¬YP6>Ô^6cÔÙ¸¨¯[K¼~BRÄâ_¹’¸¤ÊLSJw¥°½m¥*ÿ¹rAˆ$!ê+uÖ,Hµ§nŒ:C‹:¦./ûï-æƒøÝGW +ܱòÜšîCí>F ¸‹:x’YÃE/럛ÂûÕƒ#Š9qBOeÕŽ,\8S—²ýÈQíÈ +fD1q̇"*ºfæ$]#g˜IS2ÅÌ[
aN²wubÃ:¡íÔ9¿ýY××Òî+µ=ðÑ×cm +ÕGÕÔvCŒáÂWdæ,e¶†µiÝžô±ƒ"¬Cg5„y‚h”vù]+Š:³Œ¼¨Ž.P§…4@™^Im ^)¤('S³¼I%¥¤›z•$ID<§$>P·úàc%õ‘Œq˜CÅ”†w¬|Œ[³ ã>Ôžñ1êã.ê` ÏRw £Éå ”íøî¤®äål3ª~ÌÍr¸P«®öXo»+£î¶{}Zª;ÙÚ2Ö63åßäø‘"c[ØNëîÞëç}⃷ˆwšS…P†I”«Ic§10ÿ®åA®í€:㤀Ù?etÚGõÜ{ýÇŒÆÕ¤ðž,M\ÍgSu²uVÑB ˆ%äu‡ÕãËÓß$%(‰IÒu©üà|öè¹ù8÷Yendstream endobj 933 0 obj << /Type /Page @@ -7673,13 +7703,15 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 942 0 obj << -/Length 1596 +/Length 1593 /Filter /FlateDecode >> stream xÚµXioÛ6þî_!ä“ÔœxH"wé±5½–ÕF´) Ùb.²”It²eØßËK>¢C;Iê=½|ÇÆQ8Êb‰H£\PX`-V£$Z³ŸûOìe'Ax²-ýt6úæ§ŒF‰,cÑì,"4E„¼1:+?Ư‹K¥e5žœÇ'i’ÄÏ•tG«ËJ®d•lÇœÆëz9þ4{5z1ëý§$A<ËÈãÀ2–!–fy4!%Œq#ýÇèã§$*AúÕ(ATð4º†M‚°$Zz%R¦£_{› Øb%œæwsŠ óK¯’í£(ÅXD3$ˆ ÷>Ì`A" ¨…Àsá‰D`yNQž3õb&ð—Åâ¢XBœ3øeÛèfÑTR!â…VMÝ}g¢mÞR”§ "M«âïÅUÖZUè°m‹¿Þ¨N÷*8C³ô¹ÐMû ÂÝÉôpÞé¶Xècö ò¢i%轕]¯;ô>—ëy¥^º*ºÎ-O¦ïe¥Šy%ß®+E×;ò)ÿÔ².{Ý}œîüo«I2„9æ»úÛ(îq}š¤ üãíuëKÙéÛXÐËÃéç_Þ}~öæèÅ»ÙçéìðýÌØŒ¥µƒ:©Ÿ™ÐÔÅJ£îtéO(¤›©nU½«“Aÿ3Ëò‘œd_^Q¶ä“”“hâ•¿FÅãÑœóíú¼ÝÓ¬ˆ”öu ï³iˆAŒåЉRì"ò¬RP|„¦èZ`);·8nÇ$‰á/ÆÐ›ªêöƒ·1Šô~pÛRÇÂ,³Øž -i›±º“4.RsúÚ¤‚¬ýã¹¼ÖæÞ,À#ÂìõÙÜWeç¤v0`rŽƒÐµjKçèì”æ¬uëRyï®U·8—uw)|nÆ<eñ\j©*µÔÒë=÷/3—õ)Í2
‘;y©œ‹;5Æq]ºMQUrKÙf5¦s4a6!$¬…ZÌ—²’Kýd<aIÛ05µÛ”²–~Y7‹s³Jã§²Ó§à@ +i›±º“4.RsúÚ¤‚¬ýã¹¼ÖæÞ,À#ÂìõÙÜWeç¤v0`rŽƒÐµjKçèì”æ¬uëRyï®U·8—uw)|nÆ<eñ\j©*µÔÒë=÷/3—õ)Í2
‘;y©œ‹;5Æq]ºMQUrKÙf5¦s4a6!$¬…ZÌ—²’Kýd<aIÛ05µÛ”²–~Y7‹s³Jã§²Ó§à@ +ø6ÍhúX~޳Æç_^ÿ?ß\ÓÜþý$S`3IæXîocjXGíéwø)b +ãÂÌÊ~1vg7ëÖPÑ…i\K _’n|¿2dõ‰·P[ŽÁšU±æw{(›Lô\àîYŠEØH+·¾›Vw¶Bn~óÈÈã~ÎÙ¾:"ÊCRK.îüqæÏÿ'R’—endstream endobj 941 0 obj << /Type /Page @@ -7707,19 +7739,23 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 949 0 obj << -/Length 1830 +/Length 1835 /Filter /FlateDecode >> stream -xÚµXKsÛ6¾ûW°9d¤i„âIéä´ië¶iÓØ“’h ’S¤KRñL:ýïÝÅÔÃtìLÒñx.÷}`÷EÂáO$™fš[“dVÁBˆd¾9áÉ -Þý8üŠÀ;‹Ì³}îgç'ßüª$g6Mur¾L¤2LæR씞/ÞL~)®ÊÞUÓ™Ìò‰bÓ™á|ò}éˆpº¹ªÜÆÕ}éÚéL˜É¶^Mÿ:ÿùäùù`ßHÎò4•÷Û¬Ö)Ó&Í’™Ì×:Gî¿OÞüÅ“pÿ|™²¹I®á3aL6'ƒP T'g':y2Ë-ËŒ·ë"9ºÂ2JªRÌa“~mž}<ê³RhX(Ë$©õ<Og–[aÜ2kR{äð_m/ªr>¥í÷M¹ USW•íW®sý[n8üzõ†=‘)¹È“™HY.´!]å¢cóÊmùÖ3ó¶b±xZUÈ×m¯\ËV®íæ}ãE ËT°S25ùïXè4Ë’43,åJ~v*|¥p“Ëdd?»Pv'w)¹Î†œÉ|ï¤D¶TgLˆŒ2vZ£ÏGg -ò,µÔ YbúÎúN‹æ“žD”Þš q]¶zÅóÉÊ]µoU¦—ý#$ØIsA/\Y;Z‘ò¢^¶SÁ'ÅÊãÊuýTL¢I×ù™\»p5IwMU1zõçTÁ«:¼X”®+<äÈðÃÔ€ª"rÙõ´À!µQöýTp›¤6e=£šI
³6ƒ³!ðdÒûº€}ºMYã½ÚÐòÂõ®¬Ê:á7´—móa -íÆu¿nækZ]N%AÇg õÒº/WØ›€¦ÁëuQõQ×õ‚€ý(<SÌiA»Ûú€ìoÅ|M®œ¯AGsñÎ]öÃyòþ(ïkÁŸªÂ|I« 3.p¡!=Qè!.NkÜÏhùäLI›†jxÖ4pŠëÇ$Uv/¶U_΋®Ò‡îëF -JpèVܪ ħö6_CP]†Ý`òʺÇCM{¥Xàëµïð¸Zb¶ôþóõƒä盫%º^Q•L®ös„Λ>Τ,W¹=¬†×g/@Šø•›»’6ýœ~ê~ÔKh?*•ÁK×’íí -û¤À†ÇåX”dùpâ .n±ÜÓ1#pÞåêðpŠX("
'‡âêë°%†¥§wýÊUnåO0?l[’¢3SåšÞTÍeQŇ½Z§_rÇ3–æÂ#?›¥š¼pýºY¸1‡a kc»Rð|ÄïLBóìÅv¹ŠÃžÜªÉÞ~CÁgl(´ºYZRÆÒ’CiÉÛ*D¤9˜çyØÀë3ˆHßÌ›*îøãu‘±LÁà‹ÇÇs*¶v#ž£Í/>0QÚ@ï?ó‘Qü—)Îåý -ÎAî3ÍF%Éâ®u L°y -©ôÎ!p¡€"ì6^ž~O‹bÛ”œ‚»}ÎeœÑØådž±&1Ìâº'?.€Íú²ÐÚ$×G¸fÈèMã¯L™ºÓ¶<ŠÊQz¦Þ'•yt% åpƒAœ,Ã$ö`šì”M|yœ!ÿv¸… G¸ˆX7<\çˆx#T!R0ŒÒ,?Ôfä -èOz +xÚµXKsÛ6¾ûW°>d¤©… ’éäà4iê´nÓØ“âh ’hS¤JRöL:ýïÝÅÔ‹ŽÕq2Àå>°ì~ 8ü‰ ŽXÄSÄi!‚ñâˆ3x÷¦ûŽwä™G›Ü//~øY‡AÂR£àrÈP1™H±Vz9ù8ø5[æ)†#'ƒ
GŠóÁ«Üál±,Ì”mnêáH¨Áªœ
?]¾=z}ÙÙW’³DkyØf£H³Hé8É„ñ(Jûx0î·Gœ…i¢‚{xàL¤©G£GGv:y0JR«P<¬‹ä8èrK/±*dJˆ4Ðð›&ñ—£³TŠaÊ$)õ$ g)O†]ð”¥JCØ=†}¹º.òñp¤!ÚwU>¡UUþTäí÷¦1íWþ½úÃHÍD"’`$4KD¤HW>iظ0YíE~´Ì¼‡-›LN‹ùšÕÒÔlfÚfÜVVôYŽQÁZɨ×ä¿}Eé8t¬˜æ¡|r*l¥p•È`ädŸ\(ë“‚»”<Š»œÉdã¤x6ÅLˆ˜2vV¢Ï;g +ò,#vdñé»h38-´$²¥\)ðV9‰û¼†Ô‡<Ì̲¾ +ãhÚž !T×ôÂ䥡)ÏÊi=|Í1ÎLÓÅÀ›4-‘ï‘ÉÔS’tS£W
CxUº“Ü4n…‡~*0PDΛ–X#¤ÖËÞ
¥·Ij‘—#ªXšÆp6’XZ_'°OS¢©TY¯´¼6É‹|†NØÍí]]}B»1ã/«ñœV·CÉ}Pàñ%h½ +£¨ÍgØ›€×ó¬h½®ûúÄ=SÌiN»YÙ€ìïÙxN.ÏAGu}cnÛî<YBë©ÁŸ¢°ù’ØQ«Ô†–(ë!PÎJÜOoù@éëXºjxYUpŠËç$•7ç«¢ÍÇÄ¥i_´®›žš<b<QÂé±YíçÐb Z·nC˜¿¼l1ËðT’ Ìm“GÚ+±&ê¡‚åëÅrŠ¥“•³f¹•!Á`î{8’"d‰’áv-|¸8A(á÷flrÚïkú)Û^¡ù„ÚÊÔd{5Ã.)°¬áñ<’`ߟ7‰™¬ +sÚgN{šòpûh +_&B»sC!µUXƒ
+ÔáÌff눟W5Iщ)ÀrIoŠê6+üÃF¥Ó/9ã1Ó‰P;‡ÈNfÎM;¯&¦ÏaÇ‘Jw{’ó¼ÇïXBëvìÙj:ó£žÜ*ÉÞf;Ágl'´Ú«*)¥‹¾¦ªÂU…€yž¸
|¸€ˆ´Õ¸*üŽ¿\1‹C;½uñ|wJùÆ®`Às´ù5°&*RÁÃ'^'Ò‹>`ܲsyüP¡¬áx~t|Ü_‡Ã|J,(`1F“6ÛÒß½ ßÃ6rdjó…©V-=8nù
Ø,jq\¸X‰b<å;Z¿'qè[c8k¨àä¶Ó¨W’,®[Ê8›[`+™–év#£‹ÍçGiîiÑñ~½9€¡Ö÷nH4íñ‰Z½2ªq¾˜r²atÑ-}ÿ† +¡–O?ßâ6Áî#ˆ0”€%§$oÀ¨8ò$Vƒ‚Q~[°V¶¶Vz7Õó)á>žd^£í¡=
3‘ +h°¼ +µF0ˆÐÒÖ³‡ay|" +(‚ngãÝÙ+Zd«¦§äB¸Ù'\ú]¾o§À$ºY\¶ä‡Ã°Y[ +†‘Ž“í@-zA®€þu ®6‹ +7K
È㨾°A_€9|{€ endobj 948 0 obj << /Type /Page @@ -7736,14 +7772,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 953 0 obj << -/Length 1398 +/Length 1401 /Filter /FlateDecode >> stream -xÚµXYÛ6~÷¯P÷IFc–—(²Er4EH»Ûh’Ù¦½DdÉÕ±6Èïð’mEn6Ø$„93œóÒ$ÁðG’œ#ŽU–äŠÁ„dµ›ád{¿
# ´‹H¼8¦~|5ûé™`‰DJž\mÊ2D%%¡Wë7éËbo:]Î4—)CóE†qúÔh¿ð|·/õNWÑÍ|A²´¯¶ówW/f¿^
çg#)½›²œÄ3‘'*æ\ZêgoÞád
Ô/f1%³ä|`D”¢Én60…•rv9û}‰AÏ‘";/Ì3b¦…„¼™ JÞ”2!)¬ˆu'‘e˜@Œ¸Bœ0áܹ7ë5zWßè·8Ãð ùÅú´ˆH"“Hž9]¶ÚmOî6ºë›jÌÏT9‚¶ßë•õvkÏ»xôäå|! „7uå'¯›úV·ÿ¸ðÃ~ -þºñâÄ‘oÊÐÅÀÿ™“}X/W×zÝ—ºöþ_p?Ýgo\d\äyrœ•÷Ìt[U8“4Yæ{WâiñМ°¡x¨<‚¢HÆœÁrŸÏÞ²œÊ0ŽÓuñgL¥vh–Vºï´ßúk.mäÚÕµYÍ)NßÛÿlD¹©tñ¤4€[EµiæÒgØ-Œñ´ßtÖÃc„$ÉœŒBuåeĈ{ŽSC` -â2öÓ®p
ÌÙš¥u
!>:°²‰=æÞTØ|bÓäÖÖ‚ÛEÅ+Ÿíç k¶QÖ‰gER±p¹XzBœÞö~„jÞ8§ŒËbØù§o¬¶>ÖÚUQù&ÞS½í¡òÙšR©«Ø›µŸúõç¡Uð:LÝ2è,;jÉ\‰6í~ˆek{kÈ®ã&z:€Åñ"âZ|Þ £³)A,c$PnµuLw¶/SÀ%0ëÛ<ºæ¶|M3X&;³íº˜³»uf -ÍÚ0ÿRgè\gnÌMañÔ½#êºÔE|_¬|týãÅëó©÷Ϲåã«~ÜÜÝðé«Eýaã9qQ˜lî„)„îþñø>Ý=Ã(˜ßí·itºƒRE‘ÈlßTÖ“’œýeâHØøäÿ +xÚµXÛŽÛ6}÷W¨ûd£1Ë›(²EriŠ$v·-Ð$²E{‰È’+Q`ƒü{‡É–#7l’BŠšÎçP& †?’dq¬Ò$S&„$ëÝ'[x÷Û0’(»ì…—ÇÒ¯f?=,‘H Á“«MBYЍ¤ä`ôªx3™ïÕåbI39gh±L1ž?5:,<ßíK½Ó•5ºY,I:ïªíâÝÕ‹Ù¯WÃþ)ÅH +Aïæ,çñTdÉ’J„9—NúßÙ›w8)@úÅ#¦dš|€ŒˆR4ÙÍ¥¸RÎ.g¿61ØâR¤çEÆâ4ªðc‡l¦„’C6¥LF ++âÒI¤D)&P#®'LøtîMÑ¢Fïêý§a ¿¸œ—Id²$IÂS¯¡ËVûדom»¦:Õg ª¼@ÛíuƒÊz»uû]<zòr±P›º +“×M}«Û6<\„áÇ0€w£çøV7×yiuõÃÅÁw<ÚÔl‚d±E¹õñ:…ðêáÃ0-}œ +Sœ‰¢= #/K§+mµ)ÍÖöCTÎ~F‚ã4^ŒrÑëMºô?Kr(ëåúZ]©Û>Þÿ+î§û¼;=d\dYrÜ•÷ìtwªp*i²ŒÊ÷>‰ãÃC3†ÃCåõb\Á,=ðì-Ë8 ãx^äPÆÔÜÁMç•þZHW¹v}mÖŠçïÝ®¢^ÜT:šxRÀ¼Ú4í³êÆø¼ÛX—áS„$É’Œ½Culôã@` +éW4£^¦èÑüƒÑEã»°äV…)丟þílê£ô6a}_æƒøû¼ª~>mÓ¡°#,(ý&àžQ¤˜ülï5Ʀ V„(ð
e’R]úwe€øÙYÀ +©Tdó$Ð z +RcQ˜?¯Â¨Øê]˜–>8ÖÐM¡£¸©¦’F œ:Æü>)ÞóÊLB8 ´ÒÖg&øg¬ÉKÓ]¹{'¼Ùºçz·òÑS½[ÆD9>ÊR5NT•{F·¶feÃ̧ÆMOº0/‹b(Nå¢ïì;>$Fæù‚Ì»`‰;í4ÚÏ›Öl{s£ìz‰<¶cîû±ìo»è\a܇0øã;fÿts8Ô»ÕÑÁª÷¿éïª!üxúAÙESæÖÔUÏ„MfÎþ¼¼ +¾PSw;)°KÊŽh9LÜñϦÝõl¿Æ;&úñî endobj 952 0 obj << /Type /Page @@ -7767,13 +7808,14 @@ endobj /Filter /FlateDecode >> stream -xÚµXKsÛ6¾ëWpr¢f"o’Éä`ÇikgÒI#O{ˆs )H☢T>ìi:ýïÝ@š’%Ë©“ñAËÅîbñ-ö³€Â"I$MT%Æ‚l5¢ÁÖ~é™—t“¡ôéåè§Ÿµb’h-ƒËyÀ…"<æìÞèåìsø>Ýä)ÆÅ¡ ㉢4<Ëcœ¯6…Y™²ÉM5ž0¶åbüåòbôî²ß_qJbùÓœ•R©tLxL¨”1Jÿ5úü…3¾Q"’XwðA K¬F½’ç£éè÷Þ&«Š$Œ‹Ã¶œ[žì4¶M
°d ‘RöPÆqÀ(IhÂK&4a"J P _Ë4»™Vã‰ß¸ŸyZÔæ5b'¥˜ÅÁ„i3©¬Ò¿ûð”:Šç‚Hž*Ī˜¯ûlÌ·¢RÝ#ÅãÁ¥ëÄt‰ˆ¤=ñŸcACS–pÅ´gx³˜"+·c®ÂŽiòÒ8êm‘¶i9¯ÆŒ†é³MµL‹ÆxcË´yé¨zí~¯`×koySá×¼9²±¢¡7²¾ö›ÔÞhž-ÕŽY¸ÚuñC[4y–ÖÍä·4[º„ÆFn)‹HÂ#nAX¦åÌ€ãc¬L‡'e-á”WBD¦œ9æ]^yjaæÚ”¦œ#~iQÔŽ?ÃdEâÔÔÍ•²É¦u .n»a¥V¹õg§8 -a†}ÁMôît½.LZ¾r*y}’9
oÞ4¾ -gb+Ô± ‚&Ú[h»X˜‘ØyârB€\rÑ¡#¬öÇó3ª`rçBƒ` ^˜73+'‡‘Â_µÉ›ÚÉ¸È {·úд“½k«™q"kç<0K ®»ˆlÙÇ`V^éxì¦X/Í«ÝÌï“ -—’—ÒÈÁjÄxô
U¤WÙ6&ˆb, ¸Œ‰R±x¼'áq™°'ñ¡BJ’(Í‚^Ú´×ÅÐÛu>sÔº„+tkªO&»½¢Šþ1ý`êÚV\®€í°Êó‹ÿÞ›Ϛ蒅iüõÇ•yݧõ´û$Û;®†¾1”æÎ½,n‡Ö_÷wf`Ñ› õ®w'ÙÍ‹—ÎRSµæ)ÎËjIe
lòY§¾©Ö! -"5ÈY–À‘…v8ÃÄGº§æ» -'àž …ÌÜÅ‚áÁŽèÀùXaê›õ
J¯‹Â¿O1ÓS|Y‚…Ykå£HÛ¹Ó›Îb|€òäñó
¥—$aQB¸ãýš»‘W„wèˆq²tß©u©i?#6g}mëtµ‚ÆìæûºÆ§.ø_„s|¾T[L -%jh¨äPÌl04Ú¿CÂ#Ç,žpY;)t2æÿ¹ñÈÎÿK^D endstream +xÚµXKsÛ6¾ëWpr¢f"o’Éä`ÇikgÒI#O{ˆs EH☢T>ìi:ýïÝ@š’%Ë©“ñAK`w±øö ³€Â"I$MT%Æ‚ÙjDƒìýÒÿ2Ï;é˜'CîÓËÑO?kÄ$ÑZ—ó€ExÌÙ½ÒËìsø>Ýä)ÆÅ¡ ㉢4<Ë[8_m +³2e“›j<a*lËÅøËåÅèÝe¾â”ÄZó§+¥&Ré(˜ð˜P)cäþkôù
2à¾Q"’XwðA K¬F½_)FÓÑï½N +ZI‡u99 +º<ÙIl«`É"¥ì¡Œã€Q’Є!–LhÂD”€£€
¾,–éìf +X'0|ã~æiQ›×ˆÜ„b¦I̤²BÿîÃSê( +œ "yþ?ªbL¼ì³1ߊJuA×±é„I{ã?Ç‚†¦,!Ä´3Œ,$¦HÀÎ혫°[4yiõ¶ÈÛ´œWcFÃtá—MµL‹ÆxeË´yé¨zí~¯àÔk¯ySá×¼9r°¢¡W²¾ö‡Ô^i>[:ª³pµk⇶hòYZ7“ßÒÙÒ%H4Öû¥," ¸a™–™ÃÇÀY'˜OÊz¶„[^ ™2s‹wyå©…Y˜kSšrŽø¥EQ»õ“‰SS7WBÊ&_@šÖ%˜¸m†åZåÖžâ (¸Î3ѺÓõº0iùʉäõÉlÌixó¦ñUÀ8[®Ž4Ñ^CÛ]ÀÂŒÄÌ—Ä ÈE‡Ž°ÒÏÏPˆwÌ +$ãÑ7Ô’^d[™ б$à2&JÅâñ΄×e2ÀJHhœÄ‡Ê)MH¢4z>hÓ^à[Fo×yæ¨u tkªOfv{EýcúÁÔµ¸]Á²_€]æÿ±øï-¿ùܱ ª,Y˜Æ'î¼Èë>¹_ Þ'éÞ1m5üðí¡4wŽèyñ8Ôþº™F¯‚Ô»ÖÌn^¼tššª5OQp^6PQ*«`“gø¦ZÏ€ øèÈó³Î¦ƒjëvc*PZfƒ[¬îÝÐ A4O ï;çTõà,ÌkúÉÛ÷NÄT¥i}ó…ø@cŒsÖãí× C—>êÏC'ï;m }£:êèdð÷öNB1¢Sϯ?t¤@3¡=>Q„f.&ΰBK&¸]g†¶ùÚ¸…¼Ä_…³ÆÞk§&¯79NÂøuƒ½ +2Ȇ&ò𳥟ë%D•ZìμÖx¼µ„èÜ·O®¥†ŽJ9ÍzCó§ýWdÀüÐu<Áê ÑÚq¡•1?ø?ŽGNþ,òEŸendstream endobj 957 0 obj << /Type /Page @@ -7793,28 +7835,29 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 962 0 obj << -/Length 2780 -/Filter /FlateDecode ->> -stream -xÚZK“Û¸¾Ï¯P|’ª,@ -„qÈ;¦Ÿ·¿-?¤YmòÕ:ÔñR«µblù:34ñî𘛃)êÌ”«5W˦Ø~ÿüþêÍçV¾ -YGQø¼ÍJREz±"ˆB‘ô©'ޤ’@k¶G -ãÞ‘)¢EK…'âÁéÀ¹å¢Ïl$Ò]Él[K9”ùåf}“Vœ-›<%iï—ÆäymV‚-ÿUÓÔÆ<efo -zjŠ-
27±M+|YÅliʧèÜdwû"«ðT§&
E „NซoÕuulÊ;S]?–ÇúxwÌ«ëÌ›0³cḤ qè¸|Çc˜»}eòb¤ÊÖ1…DÕóÖëQÍXÏS¡ôð¼õæDvÖ›ÙY¯/óµ×úçáì ±´6ëO¨Ã‡Ìó|Bû‰;}¹yÝh®rº¾¦¸øÛ*TËtBïIDR+Ç HïöS&æA"¸j¥||6{
*QÒ-¤c<B›£2XÍ.EdG4cRG„¢Åy‹ÎÈëz"o Ξ=ÿ)tÀ™W²ÙfµUÔj-„‚[?ó!O«ÊEzð3[yÉ–5=¦Å£¥ §[¦Ø„eycÍÃóD‹„Zpp¥BkÕ$¼õ‡?MñE·TaÏcÖH ¬&a²Xs$¡K]Ca`†VÒg8?ë:Q¤%µž÷>Õyçi©Pª<ë=³"[÷™ÙúÏ@æ»Ól|ܘ²ªÍIÍœiP6“]jžÌ¼â<ú#‰7’,à´4¯èÕŒ¢=JWç='²Sô¬ÈNÑ}™g‚¦k“MhQ$…Ó¯m¶ ÚP†ªV]¹ùÕì20Oi¶oÚi´Î¥¨çQˆ(‘§qÿ’6E¬Îv— -Jl¤´#Z4õþ¸u‡¿Çóó)üÌ?L–»á>+|ø2D¨é~ô>5÷·BKXûç³Ã’ Æò†ùçÕo¿³ÅÌøþ -œ ‰Õâ;<€I’$\®Ztæfò«›«_ZŽ<,„r«Îò¢ux¹¡_1d%B -b.•åùâ§´Ø!$Ž -¸Ø™ëkúí/Äbe°î?›fÄéæß¿™}hʧÁ.& ¹Œ «)ì“DÿÏv³ø)ð¦µ[ûÿðªPRÈ`2eÀ"}L¶T¨ÈèlNë3;ŸÓæE¶9m óc† @)p†
^áfÅ—û)A‰}EO·üîxxÄ,0Î%2<ðÜÚ -n“ŶëÓ,üPr‰ùaƒÓ³'Ì¢”Ko08øŒ5,` -2×£}Õ¦šJp—2$¢< -+ޝ’vtÒ*Ùwiå³\$§@JÅHu<б`~ŸÖŽâå_!™o ¬ØéïY¹¥mÞŸnße¥y¨iœ6Ñ‘!aÆösTa†åß¾ÝÁ™S
ív -E³s{*1>PJÕÑvv\Ø:<ûµ¿oJ“í@.,ßkBNÛ!m‰ÿ¥‡ƒmØ ‘âkÂåÖwž·"ŠŠb¦ûÛøÐèSÊ– -OÏå¬È6(çE¶A9iƒÒB:ãtèƒr:"Àñdàúvq6íúPÛYä]¿?”wûìÛw‰§Ûøêë<Û\ÓÂú§ƒ K9# -û{îô¶)è*c ÏîXh¶ŸßOjìÏ-/¨‘PŽãîÂBˆdùi!žÚbêiW“,jô áMW¼‘kû=æÉd…–ôn_“à´¹ÇxùYn²|;a¶ -sÌA
|k£ÄÒ[Âàc -ýœïþ`Ë/iš2uNƒç -|‚FÓºÁ÷T"º;žÔÓ@™Ò^¡sËXå ~Ùnoçñ"UÃ"ðÇ2^<€š¶åI 9ÞÝZÐl€5"pë©=CÂ!»Û.*Ài“ן¬oŒ·AÙ‰¥?åúo›¯ -é0°#Ñ3VŸ‰]Љ3Õôõ’O)F]tˆÑ<yjJ̬w˜)^’TÊï=z§Fî÷¬íGØXVgŠb +/Length 2786 +/Filter /FlateDecode +>> +stream +xÚZK“·¾ï¯`t"«D,0 +o$Øð„IÄàÞjÑe6é‰.ˆŽ)Õ—ùùf}“V‚/›<%iï—ÆäymV’/ÿUÓÔÆ<gfo +újŠ-
27±M+|^Å|iÊçèÜd÷û"«ðVC“’i%p<Å×êº:6彩®ŸÊc}¼?æÕuæM˜ÖÙ±p\úWÒd8.ßðæ~_™¼©²uL©Põâ‚õ:T3ÖóT(=8o½9‘'ëÍŠ<Y¯+óµ×úíJpwÐXZ›õ'Ôáã +fŽy>¡ýD±„ÇNkŸo^7‡šëߟœîÙ—7]z™Nè= Y¨"íéý~ÊÄ‚%RèVÊÇïfJ´réOÆfƨvóKy"š1©#BÑò¼Egä:×ÓÎÉžÿ)"&¸W²ÙfµUÔj-ƒ„‚[?ó!O«ÊEzð3[yÅ—5}¦Å“¥ ¯;®ù„eEãHçˆ6I½àZÖª “¢õ‡?MñE·ÔAÇcÖH€Ö ’ Y¬EÄ’ÀAW_XO+ˆÐZytkˆ³®†šiEó¾Ó¥:ï<-JUg½gVdë>ó"[ÿéÉ|7DããÆ”Umþ4²¹:Aó$ò2-DøG€7Tœ ZšWt‡jFÑž +¥ëóŠžyRô¬È“¢»2m!!&_ÞfZâ@H±>¹ÙŒjcÒZuýùæW³ËÀ>¥Ù¾i§Ñ<—Â^„!ЇÃÀI§r‘ÚôŒ[¨‚ƇŒ¡ìQ¥³"«§DAŽ
uäˆÖM½?nÝíð>Ç|g +š —ÿ0Yî÷Yáã—Œ‡ +ãÈ‹b5_4b0‰”¾Ö ìîÒzYƒo!ô«e!—‰\´t¨¢Ò¹Ç›¯àˆÆ/Úòˆ
Ê#ÖͰ/^ZÅ'‚……‹ÅBiËóÅOi±Ã¢8„zùgÈ4ÚšŠT<@áP;s}MGQpÿÙ4#N/ÿÒgö¡)Ÿ‡Ì†Å¹ +×´öIýÏv³<×àMk·÷ÿáUfJªå$`%@t¡œl©P‘áYTë2;jó"[TëÉü˜a .4xelˆ›•Xî§*ÉP1ûœžnûýñð„00•€Ç‡·EaÃäªØž:5[€hµD|Øà4ÀIaöTµho08xÈê§0
5²ˆFçªM5…pÒ^Âc)ÂŽãÆ+¤¤
š%»–V'˜“‰š*SÚbˆ¢þµŽºÌïÓšá(^þÐ|‰ÅNËÊ-è°><®e¥y¬iœ6Ñ‘!aÆvt”bú€]ÝÁSW:œš4ŠfçöVr|+ TTbTGÛ7ÚqaOè*8¯ýû¦4ÙäbÆòÝ&`ÚiKü_z8Ø–jR\¦ê¢ÜúÞóñN†aQÌ´Ja‡_(5ºT烲¥Â[GgƒrVd”ó"Û ìÉ´Ai‹:ãtèƒr:"!ÕŠ¤çúvs6íúÜyè]¿-(ï÷Ùש²›Ï(hã·ª¯ólsM¯ëŸR¨]Ê©:‚,Ê}!aëÒ<=(8%£&ÌXY +(TÕ#ŸˆHá!4 ֮ؓ82À}¦"º¶O»×¤ÿþλ5†Ì7ÿ¸„ÑPôaêýšUMšgøíÄ+ÓI†f!˜fê¼\|$Ðó·‘±Ç\‡³H'ýëhp8ìðýu„»ÐÛ¦x¤Ç¼Ž0<{Z`i°ýüy:TcnyAŽ„tŸž,¤L–ŸVâ©…SO»¸ÒWÐ=À›H,®ø&×v|Ü9’É +-éý¾&Áió€ðò
²ÜdùvÂlTØ1dþÓé&°4Ћr·ðÃ_;zi÷¬»›ÆŠó&C%£C`ÓÌãhpˆ9ZªKbcÈO +Æ=±Û´DøÇ?,ÓHGYïùÔ½ÈØel +
ÜTEJ‚ØÌÊÖGí—r`ßcî^9ÜæÄëUÄO_©<•æ$RâšzÔøÖÑvS'Ș`®YyÐmê,'ÖŸoÞ®”öipª|Ò +ʨ“S-Š‹¯ŒM¹±XÞœR{A3¤Q\êk渫6pÕŠ¥·*„ÁÇz:ß‘_Ò4uNƒï +Ü‚FÓºÁýtÒyèI=ݨ.Ó‘WèÆ€gê—íñv¾d¤„X0-ãÅC]Óv¡"a +ç~yVgÝr# Á³§ÎgÑ¡:½f¾¦œ6yýÉúÆøø!džXy +úОB¦ï/ +¿Ã»Û=ëÃy“‡ËÑ!" +ʱà‹yV<V4k»v;HŸ›ÙcÿJyLL+}í×Á¶|îÙÖμ2€hnÏC6¶ÓØ¢¾…iárÚà‡¿>ø)4m˜‚ˆ¼ÚÎMèaÐðoL•ÕÏèÑ"€‹Ðãb…tK³}~•€‡\Gs¬,“Ì;^ÒÂBIsˆÅ/škôŠö‚ºËQÅ +˜í
ñºS¿xð¾¥/C„†–KµÅÀÚãP •+ƒ
‰¾1ûL4éÓ\žÉ¦Ÿ©|nM1j¤ü%Í×EÏM‰ÈzHùø’¤¾WôAÕ›¹Û¶¶ÿBÂnÀ´:(šC¡) 2:dZÊïéÚ=ëî¦qdy èÑ!Àfq̇‡ endobj 961 0 obj << /Type /Page @@ -7939,8 +7982,8 @@ endobj 983 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222721Z00'00') -/ModDate (D:20080810222721Z00'00') +/CreationDate (D:20080810233610Z00'00') +/ModDate (D:20080810233610Z00'00') >> endobj 984 0 obj @@ -7992,19 +8035,16 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 990 0 obj << -/Length 2536 +/Length 2545 /Filter /FlateDecode >> stream -xÚZmoã¸þ¾¿Âm f%’z;à -ä.»Ûî½àp›nmúŽ[,¢”àòë;áhI–åí¡8`Cq†œápžy¡/\ð_¸H$“A-’LÀ ‡wÁb´þoèx×óºÏýÃý»¿|ˆÅ"eYËÅýÓ‚‹ˆñ”‡§Mï·ÿZþ¤Žy£‹Õš'éR°Õ: -‚å]®iâï‡c¡ºlr]¯Öa´lËÝêß÷ŸÞ½¿÷ò#°4Žù·)+eÌd'‹5Y§IŸ{âHIÈÁ¥?aÀ’(‹ñLÞNQÆ’$áöH‚ÁAÝIî÷µV[C§iË-
¾ê¼1”«0Xîë–U™8ãÄñN"&R!®èÛã"}ÓÞø½xÄ„L…U÷knÍJ¼¬x´¬ôñ9? zm¡š -lÏÃl™"i÷wÓM¨ö‰ÿÑ[M£_ò¢È~†3kZ½Ó¥j‰hº½áȺ¤¹7G{~q\–ºdôýÉoÙ_µZË`Ù8Âg/¹ª¢ µÝó4(Xi&,ãîŠÞZØADéR?îÔ@D™½š}Z ¸'Ä<‚¢BÈf¹zʫҨ9‚)w¼æå6ß=ãÍúM‹!僉û6ùãžvÜ蜦¶¤ÊÙÖ:/
€¤ -Ä€‰ÀʆkaEõˆž™9j½¥E׋Áõbº5°H’º£‘yaâN¼š9zNî4îþŠÜS (të"¿æõöÆÚà•°ˆGQgòq:%Ÿ -: -`Öä/Ĉùò~Zôio^ÄÀ^UmV ##Ú߬ÎÈ~r¢˜½±EôƒjöþÉsNàÝÀ„vs‹\;‹ØzÍË[{èxs‹Y§Ð'`þ”ÍÆ:‘Åh?«U¹
i˜VãAnˆ¾ÍÝÕ6•SíL“ŸŸU1¼\b
ƒ»\íP. ?˜ÑŽ.ö¦‰Òñâ%Mé"Qc¨IúUr¦½uŒbãVµE•GeL3ZøVí@~Ðûc»„ãy†˜rŸkÉží”g¥z,ŸIó@ªE3—bù«n7äŽ6áÂTŽ“ -Á¯¼Ü áË`ex˜¦WÀÔãšSÇvLsRO`K½ -¤‡®ÝÓǾ²¹º—8LãŸuy~.p¿,‰:5^þt +xÚZmoã8þ>¿" ÑÙ’ü¶ÀÐÙÎÌÝìÛî0×û 4j¢«ã–ÝbûëeÇvgvqX`"‹”H‘|HJÝhÂÑ"•L†y¼Hsƒ(Z<ìß…‹-Ð>u¿‘ç]µÌ«>÷û»wû˜ˆEÆò$‘‹»Ç1㎛Þmþü¨žM‹åЧY Ør‡apc4Müsÿ\è½.k£«å*Šƒ¦Ü.ÿs÷ù݇»N~ÌC–% ÿ6e¥L˜Œ“t±âK’,ísO)X*¸ìŽÄ“E²4Î<Sg§8gišrw$Áà þ$w»J«¥Ó4å†_µ©íåÃ2 +ƒ]µäap(…3Nï("e"₾=.Ò7ë¹ Û‹ÇLÈL8u¿g~)‚—%ƒÃ?xpkö¨^S¨úPÝØšÚÒïÚXbVÍ#ÍüWo4~6Ea¬~‚CkbÚêR5D´íæpf]ÒÜ›§=Ý‹$)K]2úþ¬Û
ú«–+µ—u{{Š‚ø+]¨ÚŒ´ŠR–sï¡Ú¼ +»S…kÆ‘Fö‡;¼®Àe<Q]}T¿d‰hðst²™×ÐÝ6q]£YšÉ¦Á•ŸÊ¹›Çá1u ³ß×4í´æq4mÇá2>”jÚl Y^ÑÔ+Æ3åú‚ƒÀSÑžä"ªjí‚´[92ú¤cÆ4³W“W¼oî*ÏlC
Ñy[¤‰[Œ!¢‹‚¨ö°Ö+¢bWÖ³º¼çÜG¾ÀfdÛ:ì‹éØuÒ»v +bæ4N0Zñ“®ß òk¿å<Û`¼@C?qµî*}—7±¢Ó’Ä M1¾Uj½7gsªÈBÆ£ðBNísÍäÔŽíRN•ÚåÔ©Ó9u Õ]M¥Hǽ%QL…H¤^Z`#«këçJúpšR¥/pWô}ŒÙáRjIO¯‹T…q{õ+ôÖ1>PÊ$pz¦Õ—evðUkÌp…—§Öp¯}ÆËIÏîæ'xÄD»
b§M¬" +n{º‹‡>ᵦÑY›áZ€?ôÔAE_„•j¼ÃV•´Š¸¾ª]A¼À3o¶í¥0CX‡o½+´C–±þÖ?2ìèßvO0pSoç=ŸòOÜÏ£ ´áQ–]@SkM-ÛE4ÍI=¢i,õšúRo&n?å›`Ôbœì_ñêÒ>gö+´Ÿúá×ßÛû¿£\—dc@^µú¸ÈžF/tHêy)©íõ^Y@?Êx"s8p'‰;Èxm*z,“ƒ"⣽QOOÍ,ÝhaÁOx-°]Óß)\Cí.†˜»+F¡Á=tÑ¶Ä +ÿq[+Oí•\
ÑîòköX$2”ÔV2;‘ƒSÉ–~|ç0S¿vâü}cÈ{r…w=ÒãÁz¼_Ì(›ƒ²<ã^=¡lÌD˜yúÙÔåœeYÈçC£Ïu>6:.”ÈÏǬÈ.:æEvá1ù/zš*§Æc– ’ç&yŸ%ƒ¥m·ó÷I«ÃPv5ø’ѯ¼ÏÕ qв±FñYü‹~*û‚ u˜8¾ÿk:ƒÉðÓC{´œo¢$f©žÜú\31ÓrÑßáÎÆÌœÈcÌÌŠ<ÆL_æè™môG¿Þt—z§kZÚ>{ì?7åS=ˆ!Ø[ò™4#Y‡²ƒ®Û³Ë}EÕúX8lݽ"ëò$ýœK ~y·j¼üåY3 “äB0ô¸f‚¡åB‰ò|0̉<ìÈc0ôeþé2ã endobj 989 0 obj << /Type /Page @@ -8036,24 +8076,21 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 999 0 obj << -/Length 2516 +/Length 2519 /Filter /FlateDecode >> stream -xÚkoÛ8ò{…?-l4f%’zõnH‘¦E±‹MnØË}mFæF–
Inïòëo†3”%YN‹ -‚ù54ñiw(ÍÎT5õbFócU,þsÿùÕûûîüH"cùcÌjÅÉl©”ˆ¥ÊúØ"E™H’Dv"É´'R¥U<ë°P¢HŒ9ÌrëYŸØÙ‘é;G†°h=<óöA%4$ÓpnleÔ_̿ز´y:VSÑrÜok“o>,Ây~l@Ë~õ!ˆ‚f½-óÇ… -æ~¶Ì›ÆT° -šø[VÆÒi
-EEYVˆ¦Tr"¯ÂH• -i°q·ÄðŽ(ßqòu!£¹©›–ìÂ.‘*\j%SPc˜ˆL²zÖ[S±Eýil{vA¹‡JH¥ÓïØDë›ðXÈ@|Ù&&޼h¼'³¦}ŸŒ¤ÏÄãtƒ{áÝZ¦Oó7úòìßy–>¯éóu0:Ðç§Ÿ¦6Oîõk´w52q&Gs]–†Pßׯ•ó¢ñÆðéxa‡cõÔú >jk«ÌÕV9Ø6&üˆž°E3¾pÇq#/ÞqëòwX(KrñŽ_<²»Ó—ì®tpæ;çz`Ö¿¡†”ôÙYWæˆúAð®ÍÒÁ¼}^€Ó€f§ü5”J¤¡ŽÙ‰£>N"À«CÆxËTôÀëÁ•fŒŸ'ÏPGÉð˜!pæ0Èãõ$‘ -»Å%Hû§Ùmîawؾš°ƒiço?h@±ˆ‚X÷Ò»3 ÚfQ:´WîöÂy›·
ª¹Eyiö‚úý2è£2 ñï 7¸OCÕö$C†š¼C½'àæX¯·EއCËëi¦J¥]äCáf8ß@"‘ -<êòELú,¨"’Äà4P
æí[¸8ðÄÇ‘ü9ßbõfpöá`Jò -¾<`q5úOñ+¨0¢¶é³Ù` -æ`ŸñŠN&’³¸ßlU,‡B’ë˜<cö(¹mS1[N~øç'œ?º%]±kn¸v5°SËß>`=ûYgÀ
A7Ó¤ð”'ô&@ß¿ÀÈvvU8áÚjJHA«s›„9¸¥'¡dçë´Ðç¤C"é “ðúª´t‚ -`5ÿ«ÖÛz„õyE+›œièiMÝotBYï‘Ei(éL˜ìŸÇ .«7*ÐÝÕ@@DÒR“ªiôëê/ó„u|÷¨t ¹ÛG€ýWûä ±ý-¯‘‡cSåÛ£€ñûX¾¯;Õo¶fÚîÆ7S7z×bNᆧ7z‡r.MHêºrør‡ƒº¨þ^ì¾úXÔ -ÅЕˆ,câи»…öˆ_îLmóÒ€«›‘GÊm -G!gØš•ô–sXÃbÏÃq¨À9|õÁïM™tùÅT&‰Î©n¡"Ñànßì»3O'a%hÛ†çE™4ø1;RA‚Ú¸`¥¥>½wáû@]€¡È±‡Aà<[¸eˆ«}KY'¾<€IXëú¢æOCRœÂïOl˞ФŒ€it"vAS@êÖ>á[’Í[hL"îØv¢ÌMb‘è´{èMñr¢S`²Iê+1¬]¯WÈØÊ–›‰g\
sJ0®úÍXñ+)ü‰hV3þÞ3Ûnϲ¿éÜnÏi“…Á,;†þ}ÈÅÈ]:¬ï{FU’öWæ!$¿ÍÂ-`ÉG+MùÈU%”W´Ì£¸ÏÒ{ÍO¤#{èžË"Å¿4èv$…BÞÃϧa ànÔœŸLOtÒ3Ÿ¡xÛúå®l¾æ÷_E«A™+O±Eªó¶¦š3¹•µÊ!;DûÖ&z-ÕÁ¤uzj -ÿ¦ƒac”Ê_Œ*ô“ÓcKSèXþØ”=䉀IGPƒy,”;/þäøÂÉÿ»?icendstream +xÚ•koã6òûþ +*llÌzí]ØEöY,¶hÒèå>È6#³±eÃ’7½üú›áeI–³=ˆ†œ!93œ'-'üÉIj„‰òx’æ +—*¡Uj”©È«g¹¶[ÔÖ5gÔš»ÔBi“}Ç&:TÏØD B’Ë61räEã=ÙÈ…,ëjüd$]&îw «ÜïÖø#}êЗgÿɳôyIŸo½Ñž>?ü0¶Ð†í^¾D[ñW£2‘äjp1o6K¤ïÖ••ó¢ñÊòéxaûcõЄ >jíªÌÕUØ6&|ž°F3¾pÇI’#ÏÞq—êò·T(KzñŽŸ=²½Óçl¯´wæ[ïz`Ö?£†TôÙ:WöˆúAð¦) +ðjɯyÓózðCm˜âÇÑs +òj/ï;”.ÎX}JÊ0®›;mLµr%ŽS>Ã|çS/ò|3ŒŒœNK(0_† ¨0±;W”ÚÓäº 8¥³vÕˆùèîNIùÿÙO…J/»{;0‚mg}CÀhå/ON›¢©QÈ,ŠK³´Ð`s ŽÊ6‚Æ¿€Øà=5ë
ÙAÔW<Ðí;®‡åº,Ðápè‰fÌŸtf ÎÅA!«Ý±ç{==(D: +¤óßfi4ê² H +cSO5˜¶ßó½…0R<k,žegï÷vC +ª©*ÞÖoÀ[¶˜¢$²1¢bRTÞË^wÌà_c‘:‡!ï§Œ~ÚPCTe9¢dЗimÍÕÍKQTUÐQ–ë¾?öÌ2åª@½G ©Ð”€qÕ1âw/7ë²€ä6LéÂÒ6_€\ŒþSôÀúIÆÔ4}¶+¿&lsqûÔ®yjˆ ÞùBÀƒhÃLÅÅóMêÆ7‚}…D[Ó‡°~_-@ý¶!ü¦8r¾ß—J²a <-£5ÅÑ'D8‚¤éîy<Å—sª +ëwCÎá›~¯È¤ó/¶Â0IûœÊ*ñ‘îöÕ®=ót‚®©ip^óØQƒ²% V>X™(=½v!‚ý ¶LÀPØÁ pž-<"Äb×PƉ/w`R%–º¡f£ù¯3&
c¨ÂïMÈlÎaŸvAI3éHø‚®€œÔ¿¬}¶4Ÿþ<3˜GüÉÍH¡›Bo²öM s6…Ì‘RLƒÕ¦Y¨Å°z}³@Æn³yÇUÐ1GR}ÅÐp&šŸIáOÄ“C9 à/Ëm×Ì»‹ÎM÷|or%qaÀ¸hàû\<¦¥úÞ¹g»±*$iaï¢Hñã,ÜV}„ùh7÷\WBåqEh~ÅuŽfÐÞüF:°‡ö½ÜRÌ¢vEšS4ä5ü~*ÓX +ÑûÙÊ‚r¹ ô”éYðµ(èUP?ÑúXìqŸ:N]'Yÿ°áõT,ÇÚP)ñ‰Ý„wßnº<<—{Ò$‚ž4=iûfèÚmJ[µÑ?{Ñè‹mÖu«×—ŽŒký§ô.•÷Ýk÷r|—lKFÞ#ÓK/ÏžÚ¾´žÚ×exiíºçÆÞ-±PŒ9æ»Îã!†»Á5Pœ¼@ÿ®‰fµl¾¡änn(µ¶4¿ÛÕá5}fR)Ú‡Ô×D}ílͧñeÑ€ÒBjíâ¶ÒðÆr à-{&:_èíqwà70héÊ€?ýhT +ÿ¨ƒacÍŸ*ô›ÓcË2™Dý½_);Ä#;W"‰¡T(w–\üÍñ™“ÿãšiendstream endobj 998 0 obj << /Type /Page @@ -8093,17 +8130,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1008 0 obj << -/Length 1960 +/Length 1965 /Filter /FlateDecode >> stream -xÚKsÛ6óî_Á#5!xÙ›=NÚ4í|iíiu”K´)Ò%¡æ›üúîbš”è6éd&^.ûÆ>$ÿDb2–ñR'¦T - ™<†\ -Àž^ -+òÉ™ˆg9'æI;•ñ‚D!ÙÁˆ‚ºú³f àÒ¹G~8:B/ûO>éŠ_¾f _ªZÙYA¤Ó¡ÛU=ÝÀÐáßÐ|×n›nî÷Ɉ@ÒúÈœ×Ì“mÍ,YÁylSûPør
í© æZ4Ú—+ø² -ŸV§ŠÂìªP¦˜‚éí_Màšé<3“ ÜK:ÍMÕ‡…öc¯–Æ®©2ˆÎE¹è‡3(͙В6QÈ«¿Ý`qI2yñŠË",Â,ç`‰½ÕRGußÐ6‡s·ÿ·Ö×çÝO½}¼7y•-î¡/»P›£Ø'^[ª³ð9+ˆp.<¸Ûa`D…³i ûâ0påŸ,€M`1Ñ9Ô_‘IVE>¯J4Þ‚zEÂ
ÀII°}˜9ÖÍá&ÛÅŽcÝš7dÂQù`28ûf(œRÜ/sÅŠ,Ï_ü?»zîuH“‹&
ÈŸ*´×Œ4`×t›ª±çZAãâ’% yKq²dÙ“H–y -•§j«¦Û±È!(ÊX*OG3qâkŠ -j.$=,åÆ˜X¤êÉÏŠ£Ä Re¾áárÏgDNyhdF™¥Þ_Œg¹üºR'Ä]®”,×2Y¢E…yõgÑ¿‘ü³ÊµBendstream +xÚ]sÛ¸ñ=¿‚ÒL„à“ïÍ'm.í4W{®u(–hS¤„.üúîbš”èk:ÓñŒµX,ö»ŠŒÃŸÈ +Í4/MV” + +ÙU÷iÿqøÊµ´žÉGZý¥Ú¥
W·x +ˤ¶ÉÜÅ4\TÌ(žÞ`>{Fr>Ý«B÷$ý)eˆ²Ps¤ó áT\…8ßà=?–4ŠË”›pú
ËrHÊÂü?,‹bz:uÚû÷QL<×<Ü@$»Šî €®›Çxp’è!b÷*Ï}½÷Éò«gÌZÊCHYÞá¦<sÓ©8|?=¢c½kÑÑÚ¬>BØÒ«ï'œ;ϵ»H1¿$D½uƒwOÕi ìïµk‚r€$Ÿ·àß +8õDPm÷°Ùîë}¢#/Šý%bñdˆ +†$oÊR®ž«¶%(:
Á¿;ºþ 9ù:’@@@¬‚ŽQ*-À˜ÚÇ3ŒPÿ‰¸‹OA©ÉÁ¨Öê»›˜Ë„RçI<x¶ï#q7·“ö-J—2e0Á€&QĶå©Xt9ÄþnxˆnäVO8„cddO¸+\Ÿ†˜;cë{[w@6ž–x +G¹P¨(KFVÛ½^\M²ÐG¡ålÔÌOŒ×áZ +_×§ŠÂìªVLÁôö?Mà†™\“ <H:ÏmÕÇí—n-]S?hˆÉE¹è‡(Ù0’^¢Wø‚ÅGR‘Û7\–Èà!Ìr–„ðÑ]-MR÷=°9\º
ø—øj}{ÞýÚ»ÇaÁ{p’çPÙÒ;#öeksûŒÃkKu–³Â€ˆç£o°½FT˜1›²/Š×X¾ñÊ endobj 1007 0 obj << /Type /Page @@ -8139,8 +8177,8 @@ endobj 1010 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222723Z00'00') -/ModDate (D:20080810222723Z00'00') +/CreationDate (D:20080810233612Z00'00') +/ModDate (D:20080810233612Z00'00') >> endobj 1011 0 obj @@ -8178,19 +8216,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1017 0 obj << -/Length 2366 +/Length 2346 /Filter /FlateDecode >> stream -xÚËrã6òî¯Ðæ$U™‚ @p÷ä){²“TÊ•ØÉâH S¤BRãÄ[ûïÛ(Ò¢œ™Í–ËF¿_„ðÇIÌâ0•‹$0à|±Þ]„‹-ì}=|sxà`ýþþâÝ%š¥JÅ‹ûÇE$$‹tÄHï7?/¿ÍöeoªU%z)Ø*a¸¼.
-|Üí+³3u_švp¹<ÔÛÕ/÷ß\ÜÜ÷Ë(dZ©èóˆ O©ôˆÚA2eI’D–Ø;GE™Ue7&) -2 -xÂÒÈ1üõƒ§U.›Ý¾©A–7PLVoMñ ”jM}IK݉pâpÙ³×êE¨ˆ‰¶fLjEJR2ЊkI¥Si˜X¢S,r–ôÞ«åÈHa@±)k è{÷!IÇhyÊY§H"Ω`DE¦tÄK-|ðé‹fcα”²(UúmÖÇPçíSÉ„ÅJ¤öâkk%ÀÙ#j¶©¶¦Þ8Oúþ`ªª·&ø{\á÷¡ëÖE]ö=A¼ Ý™rÛ…C£9Ž, ¬Q75Ifêô ˜Tóø(ÉÁFè>'Í1kB°0‰¼ðÿ~VбdœK+Ÿß.~þ%\l@šß\„L¤ Šg˜„Œ§i´Ø]ıb±T‰_©.î.¾0‚ÑG!ˆQÆÉydt0dn莨WÈ“œƒ5iÎDŠ·#'º'PÙ‡‘×µÖh^i6ˆö¦,•àJfÈ«r½ -Øy÷G½.Ú¦._̆V>5¥yó5¡º»óÓW»—6 -—æ…C¬¸TŸá(Pp8NÝQ;÷À!©
o~Ê<1¨í[·mÜÈï^ÛØ¹øb^37²r´9P8'ZMÍÜ ªÉ#Ù‰5UŒœ}à𠽫®}Or.M^úš´ÄŽËoÚ#:a¯tßßrŽ{<P}wRìÞ [¹q‘9ÖÌ@”0jl¯1jÄÍ¿å?FŠØ•kq–œ\ª2›Ò…Üxq<ÑæÕi .A-o5µioܽZr›ª²BÇÉUU9è«BgLþpƒ‘¶O©gð!ÒZ…Îý Db;1$%§z\ø®ìçZŒP2©Bq¾Å€cå5ã4‰b‰ŽµG0 "3Š”©ÊÕ/ii$K¡G£ÔY!C?Û¨¡@_H* -ŸÝj!/Ùº;m†irxŒ¢n¼ —õ. -Wë†üx—U~RÝ–öñj|~ ÙäLºJ7\^‚%´ž¾Åˆà"žÝ&õé[ZM -€þ HI|_qž,_0‚|V”ùa:ÿž" 1J°ã!û³ÝüŸ‡ŸXCŸúúa6d# -;J²ˆs=õÒ8¦KÌnôêWå.sú(dS³-ÚvXðe^?›,…‘HR×Û@ùuU“Ô0bÍC+&uâñuÖƒ¬-ô œ³TBPÁÈ3iÏýßæâ†dB*ÿH5-‰¤cR°ò©ˆ5pjâM·¨lC„Q¬Cª5‹®§…ùèÈz'ò’¡§&ò^ã|‘9=kгL§~áž·šJôƒŽõ† K ñrJq*˜”RazLbî5t¦–Œ‹h$‡q >ƒSb¾ˆ”ÀÌ#&±âèæ)µxàú…!ŽÎ½ïCÈûí`s4"'€ÁUŽäeµ™ùY"NÌùjÁ…†zA)z Äç¹h·?üaô8œ ƇNŸNqÓ»7'O%hÚ_·'T¼þQÄCýɽ§Øð^ìhÏ>ókÍÂXEŸ÷Òøôr|JV2RJ¼[ë³?½qóQÕendstream +xÚYÝsÛ6÷_¡ë“4c"A|ðîÉ™¤½4ÓÉ´v{MH–XS¤JRqë›ûßoP¤D¹Éõ&‹ýüíæ‹þñ…NYgr¡3Î÷»«x±µo†ßÜÓF8S¿¾»zõµÃ2¥ÒÅÝÃ"’%&áG¦w럗ïó}ÙÛj%Ú,[E2Ž—oJKïvûÊîlÝ—¶]E\.õfõËÝ·Woï†óe3£TòyÂÔçÒ&f$í`™1uâ„%ʼ*»±@Q’ÉåÓŠÇKÛ®mMß5~ZüPËÖVv%âå§U"—yÝ[¢y_å]gë¼ï=çb•À&X†k¢Y—žxm=³ÛrçxWy_6u·o›
~·ø#ßíF’E´óP¯½Låý¶§aaËn_ÚªC±Hö²³h[°SÄ5˯ô7?¾‹Þ¯ÒxÙìöM
¾p‚sòzc·…R¯iª³§&‚}=;uÙ`Ü$AgL<6V#*r”Zð˜gÔØS*K˜Êbí„L±ÄGÓk¯j9 +&rHlËÄù^}³1[žq–¥ŠƒA3TêÔSц©iÂ2m¤§¾³ý¶YÛKªƒ¤œi^V}Lu9F•Ô,U"s¿qaš= g›jcëµÏ¦ï¶ªzˆ¿÷Ñ
þ>tÝý¶.ûž(ž1ðl¹éơќ
Gñ.´›š,3M|pLfxz´ä#tž·æX5!X¬“`ü¿_´b*çÒÙç·«Ÿ‰k°æ·W1¸â >bƳ,Yì®ÒT±T*fª«Û«ïŽôIf”©¾ÌŒ6ÆÀÌýuÂL0É9D“áLıx=1ÕÀ8‘â¨>Œ‚¯ÁðÊbˆAŒÇ8c™„,èÐ2ûCQ•÷«HAœwÔ÷Û¶©Ëg»¦™OMéG!|íÇXÆ?ÝކϓÕk +“»ëèöaÒÇÃÄwe?w½ÀjMñåëü8v]3)£¶Y`0™EÆ@ýE×ÉT2\güµ +4úÁº[Ú󙌂ùï–Ö¹O!
3B½ü±ÇÛœC¸lˆç^Ö¯éÃÙ°!ðEÎŽÀ9p¼ñ¥TF*ÀÇB§÷èÍGzl°%Iî)×"†«bŸÚ'ƒë3p„0gÏš™xë¸wƆ‰ +‡+Yp<ãýñƒG”ퟱ„z±Æ"a¸ª÷DvÏ´BHs?î6ÖU»
Å&J“?Ó˜¦@TÀm¸ð|€RÖ{ü
JLBŠ +>…WüÎN/A9Û–åqºü˜"àV¤ñºCñç®òŽ?©KJÚ‡ÄC +"GÊDb‚ö›Ã
É„Tá…jÚ/’HǪ€ÕjÆÄ´‰M`ñ„¡»ð.ä¢6ÙÄ5‚jD÷Û®§‰ytä ½JµüB‡ƒeD¤‰†ú€Çø\dÞÏü,³i^ø·Á…¥{;F‡£GC`”&]Î%ΓRš/¬:åÁCz`ɸHFvwà3<%Ö‹t` Ê<`ÛÓ<£Û¤þÖ’F·` ï·Õè,Àn +” («õÌß%Ò*à.Ï…a*VŠžñí@.ÚÍ"={¢ñ¦ó÷‚sÞôèÍÅÙ; †¶Á§í‰§ Trî97</³ßøaqª’ÏûÒˆøüp|GV2QK<Û˜‹záäÿ9Š?endstream endobj 1016 0 obj << /Type /Page @@ -8218,20 +8255,19 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1023 0 obj << -/Length 2174 +/Length 2172 /Filter /FlateDecode >> stream -xÚ•YYsã¸~÷¯Ð#U5Â}óÆždv³µ3+Gyˆó@™°Ì5EzI*Næ×§¢fÆU64Ð>¾îÆÐU?t"ÂT®â”ÀÒÕÓñ&\`í¯ý_ji7ŽxãSÿôpóÃLj¯’F‘X=<¯—„%Œž}Èÿü’½*×''ëÃà®PfâÓñTGUu…jÖ*ƒSuXÿûáç›û‡ž¿d!I¢ˆ}›°=õTZ–xÒö)‰ã˜iaï²åJƒmq\Ó08•YW7›ßö¨×ά<?òX¼€°":u¤&D0ÁA<±µ÷*²²øº†2{²€âd,™Ýò^¨Üiãh˜f§g3ÈAÀ)Ï.ÊBj÷ï¶éwE{BæYWÔÕs†„Q*ìîÁe³S‹2óuW»këÏ÷¢Éa”„ÁF`œüÜÔd²Úp“ˆƒEàoʬ‚ -ÚÏaAQ½–§¶øÏš¡^ôTV–zăÏk4uW¿®YÔeYk¹ì¢¯ÖVûÊEÌ·UûôRÀFU¹¡^s<äЊÜì`ÁÚÂéYûºù5«²ƒ›¾ Xe†oM}@ý6ø+;šû†î¢\_ôØ…»ÐÕïUª…"cï1$¥,ö=|&=*ãØÑŠ2˜¢‘ïÙQL‰”VNb{Så3 -®š×2CiŒx'T~ñgµ·7f|‹:<µUörT{õ’Uy‰ÑºÁ³ªK7Š¢„D‰ˆæn*c’ðHʹÕ(&œ±Ô*$‰àþ\…$–I”h*«zGë‰>[ÝÕ7_nV_úÅ”)€é†¡‰˜Ã“‰ö„Å1È# ܘp¥§ëÉPý·{Tù¾(s2ƒ…”’Çzã!%"Nã•Ïe"LOuE˜éiÊ%bà ™05‡e‚N#‡+§®(Û‰¼QHÒ4Nfå*1‰ˆLF…]rÙÍø/éü–$æÒÜì/&xð~jríÂ0®ê§;* -öf´ÌCBÏÙT!ý÷I½a.›Ó¶@N±øVm -ÒïP¶ÛråΓ“ªÙD„˜aòç˪±œ6TµÎhusP-ÔdeGf4¾áiBh$“aæ^ðï(οuž…pêÀ”*/e¡>UQ[ùé4Ä1
éD>ÈE_Omv„ªðƒùÌ]µh¤?šî€G»M_Nx#ã!G¯šwîª\Ùió
Å
r1OaÈh¤|*m.W€ë©„r´“RÀžœ3æ ñ˜k(Å2WG4å:*A9‰b!†\wÛk!]Ñ2[†<D}¬ýÊ’2¸Õ“Qð›-ÀÀZÌš1À°†JU©ÖÌnß‹ê°ù¨\Ã5fz¯Ú¢3… ¶0nköÚŒ°jllË݃ѳø -Ù5fæ>ã©5(uŸœ?~A-&07KoPÜí‹L3çÛ¨kº¡Œÿ¨@&xàþÕ¨v5¡nM•&@ý»˜[ãŠ1=°EÐðu´sk6(|íïï8¨GEÏÏ•L˜0iÛ¢•¦ìê#ô-˜8@÷µ‹4ñ.ýaö2õ>+mi[¼4Iã÷qÂÓÁiD KÂ
YÅ>«Ë¨A‰´ŸË¨áQ-¡†#»ŠK\Ϩ1æz5|®»íí¾>u×¢JWœzÐý"´`Ê–šC/€ÅbÐù»®²ûT›HóÞÜVÆP)gãôt…̓¦×ÍËÞ1Ì]Õ{—uªØü -ŽË&ÔøÏ¦ûàúpëc70߯YuÙ!X‚6)_vŸjÁ!z²k±Èµwˆ ×y‡pÝm?U¦›¾mT6_‚E”2ß’à“«ü†²Ï릷©;;[ÛFm5ûÌ‚ÂAS~—›r“Í&(3:ÄÔ -Š”ËöºE~¥ð©–ìçÈ®Úo‰ëÙ~c®ìçsÝmÿ‚¹ôïu†ÉeVE,åÙ|Brˆd¬•ZL=’¹d¬ÇæGβ8֖Ňàvæ` -…œ#œ©zS¶ªñé4ù†¬ê¡»í^éÜT·'EùÜU÷RçÓ>¤pÀ¯_ î1Ÿ¦ì3ƒ·lñÑâ ¢Ë&óˆ,樮l‰eo¯1Ëysù,wÛ϶®íßîЖf¡8&Œs¿ÙH…©p(Ï -„iûÒ³}úH…Mè0¹['¡iód•æÁÖ¢Ì$(@ã®ixªe#µž‘XBtRžßÉ„ºQfÞ“qÙ"—}ÇW0–Œª
D52++D—}žû
C€ÐÐÉûf»rnÑ™qLÎÂlص›ê·/÷~EpVél̙޹}CÇS~Æ(Èð—Öx¶ÙÀçY“ï‹=ΖEݽ¨W·«2ƒ[[E˜6Ü%«¡DâÓjè zHog ½uAx1аºÉ—Î#žyäM‰$‹ú#Q¾$½ø?Wœÿ|£vendstream +xÚ•YKs㸾ûWèHU
±xƒÜ›7ö$³›Y9Ê!Î2a™kŠô’TœÌ¯OãE‘EÍŒ«lh ýüCV~ÈJqÄq*V*e0 dõt¸Á«=¬ýµÿK<mˆã!õO7?|”l• TJ¾zx^Q&M(9úÿ+ú%{+:]®cª’ˆ¡u,0Žî +í&>ÞJ}ÐUWèf«ýúß?ßÜ?ôüÅ(‘’~›°=õ¹´4HÛk@¤H)E°wYkäJ£MqXˬ«›ø·Ýúµs+ÏLñ–ã¨3¢N´@p‚8å¤1'¶þ^EV_×0ÐnÏHPœP‚ú-ï…΃6Živ|vƒ<ç©à¢¿»I¿-Ú£ažuE]Í0'#J÷»G—ÍŽ‘¹¯»:\Û~¾M£G8Íä禎
“ÜB’EàoJ½‚ +Z£eI¢¢z-mñŸ55z±SYYúœÔÕ¯kŠ£º,k+”]Á#¶ÖqŒPÈm»Ú§—²ÐŒ)]ånòyÍÌ1ûÎ}:iað°&p~־ƿfU¶Óäªû·¦Þõ6æWv8€îÊ8ܕٻvv8ù}£‹}U´®ÐÔ¹{7Ä¥„ª¡oÏà€Ê¹´\ +SD}Z*‚„ðb0¤|ÔýM—ÏFfݼ–™‘Ɖw´Z‚Á/ÃYëçßõÛ*{9è~ɪ¼4q›³ªK7’2A2árîF )*“BÌJ…¥)h“$áŸ!Zý¹ÂH‰D&–j8†Õ?GÛ‰>8]ÝÕ7_nV_úÅ”"ÁiL ŸË$gÚ§Œ#ªÈÃ!Ð(ç2JOדõßîŒÊwE™[•¹,Húqª7† â*U«!—3azª+œŸ6ÈoIôy
!“ÙèÒsYŒ3ĈåØe{&¯Ä(MU2+﹉D’00*ìËnÎÁ)O¯dn`‰îf÷æbœEïÇ&·.ãª~zñ£bM¢§—Î}å¶úÀàäðfÖF?FºÑs)^¥(á\Mµ3M¬ b +ätTXà±/Lõ ¹C$˜îeud\]¬šý*zCØ7ÍxÃÙÙ.3r&Ô"ÆšH1õÂ@uïÙi^Ä©ºM=€‚7£e†9ÕQmRПô›©bsÚæ†“âߪmÈÈ$ÒïPvØråÎg'{UÓ35eŸ-«º§ºÆöì´±ªm1«›½n•šÑxÌÒ)’qÍ^ðo™òàß¶ÄB8u.Á”:/öea>uQ{ùlb¦Ù*>ªE_-TT]}pŸyÀ‰Núƒûhàæè°éËÑÜÈyH7 ×Í»-wU®ý´ûØB¢…ZÌR$B.'©!•5+Èë© +ÕÈhÌÍ}6§Ö ÑÇä?AþzĘ=2ο›|dÿµG¾n.øv8Óº±˜ÿ¨@,{Õµºh÷ÖRØæÐáuÜÅÍŠKbû;n nèP7.4ñX£{@èR>?W.6±¯Ü>a™sŽ]}€¦¥u9G‡¢‹!}º¯C Ã[oîBõ.+=Â-^ŸP)e÷óÅã>hÅ + +KÜM¸
u|9yŽ$…þs9y¨–’G »š<–¸ž’Ç”ë…ä1äºÝÜîêcw-¸,ddALÃXèV{Ä9ñ„4*Fh+ûœŸZYÞñmås2NOWø²0êzýÐÃìÃ<€ß»¬ÓEü+8,»ˆâ<ºî}hĽLÝÀ}¿fÕe‡ +ט‡²à5”óØÆÆÚë>¹·3ɽ
Ax1а:ãåË7 žyöM)’‚ÊþH#_’^ü_¬Îÿ2=¥üendstream endobj 1022 0 obj << /Type /Page @@ -8269,8 +8305,8 @@ endobj 1027 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222721Z00'00') -/ModDate (D:20080810222721Z00'00') +/CreationDate (D:20080810233610Z00'00') +/ModDate (D:20080810233610Z00'00') >> endobj 1028 0 obj @@ -8373,8 +8409,8 @@ endobj 1039 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222723Z00'00') -/ModDate (D:20080810222723Z00'00') +/CreationDate (D:20080810233612Z00'00') +/ModDate (D:20080810233612Z00'00') >> endobj 1040 0 obj @@ -8462,8 +8498,8 @@ endobj 1050 0 obj << /Producer (GPL Ghostscript 8.61) -/CreationDate (D:20080810222721Z00'00') -/ModDate (D:20080810222721Z00'00') +/CreationDate (D:20080810233610Z00'00') +/ModDate (D:20080810233610Z00'00') >> endobj 1051 0 obj @@ -8494,20 +8530,16 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1056 0 obj << -/Length 2499 +/Length 2505 /Filter /FlateDecode >> stream -xÚYYÛ8~ϯðÛÊ@¤©Ø] ƒÎ53IzÆdí}mÚæ´C”¶“þõ[Å"%Ù–í @§H–ªH~uÒlæÃ?6KB/ô³h–dŒÍVå¶…µ·ýÿÌðº–Ùs¿ºñË›8˜¥^Çáì~3ãAäñ”³Aèýú?Îoù^¶¢˜»<IÀ›»‘ï;·RÐÄûr_ˆRTÍÜe‘ÓUÛùï}ñú¾×qßKã˜ÿÜfÃ0öÂ(Nfnx1²1÷Ä‘¢ÌK’„÷G -¢c^EÏ”1/
ƒtÖ³á‘|–o2K<8z8Ë;Ñj™Nµòtt‘̇'ax¨õµ¬àÒB;t¢(Z1|ç{ëÞæ´°Ë[$Gô¼eþ]–yaFß„,DU<aXmÍÜÿæ<rꊩO€qµ•G£Aõ
*íT•ïJ3£ZÜÑki&+r¥ÞÑ‘ø3—%^ÆÍ™öب9Àî}YÜŠ
-Ï»¢½ÓÓú냋I#/Î)øñ:oæ‘ï¼K -@·¨*¢vÚ–ZŠßç,ÑXÁ¡ˆÊ;KÙËhïçŒû޹\3§Ï…„Ô‚gÑ’µÊj«ŒÀåV¨½¾5X -}§¥ù§9i
lá%hæÚ3˜{ôQ4WM.QæŽcã$„šž,—ÍC„ …–H|%·4\H} @‰f+–à‘ZÃ3 °Å‹Þ1æºà=Û5︨µ÷ŽÓÞq õ5âÀøè¾iü܉FµD“Uš…¼3_¬µµ -¤N0PCâÁõ>ñà ìCæÃ¡æ36e(Yx%š¹.ØtÏvͦ/jímúDë´Mhýè›KÈÁëÉ É`n'00«[;†„Ü*"ÉŒ€„Š™ðû¤g^±ÄÒ—ÅM¯pÕNXIzP–Ćý<"‰ïñ8`Wq]BIJ]Eä’Ö‘cgk#‰y -ˆ®2.𾤨˜Y 5R^C3ï%p¨yÜ£4^\ÌÇË>€³U)þ2O1QPî€ú¢5N¹ø[(E¿›Ý§¡.g,½ñˆëÄ–í*Ä—´k=ñXë4ÄwMÝÖÂê¢x¼äx¤X–Öª=ëriæ1ˆ„*aeSÌÁFƒØcabüÈîJRòJHµ—b*1E±Ç³Œ÷¶re*í þ?¯,
=?Œ‚A;= Ä~|ú×%è-ÛUè/i ?ÖzúA.áY@¯€×Øšiô ¦¾Ö3ÍV.Û§©9q|RH¾•ioåJ÷kUûcOÜái–#!lïJñ&0|h¶!a´Æ©ÝëZYxäà+¨&ÿ‰ñœO`Áß÷[Eä•KMJè‡ =Š»Ýê%ïÓK±e?±±‰ýD “eײK˜p/ýä²ý¹È⃲‰±uõ‚ȋüâ|àeæâuÕ>Iª] -,^ºŠHÄH7ïƒ<îAÚ®lnÄuj¦–-€'ñÓDïí=ZLʱÊUØ: mÚUY<Úw–
Uk+†u!ÍGVf
43-
f‰ÕTÑ8ñ¹Üö§}9æ1]“fsæú°‰!ýÃ-âO8ÿÔ5øeä¹PÂòˆ;ÛÑLtAãþêÕ¤¯þ‘Ö÷BäÜu™cÚÒ)›¥V»B -pû¤ÐoÈñ‰\¨EÝ5+aéMKY´13S1é4pÑÏrk”¼˜œhäT¸Ç,u>ÈUS+PˆÃÄù*«uªŸÿuGÃËÎR ¢àÕm‡†'KO µçNá5·ÏæèÀµ…^Kbè±Áƒe™s+Ì—'ÂÒþZaõo±®Aàj»¼Û·Z)^»~yÑõR_ÐR'¬³š}YK¥t-Boæaä4B¼ZÜÒt€S5޶w$ê}_4‘þ\Éïî
Æ–tëœ8RµFྩ·xNÓ‡•}íÙÃñÌ#F -5u&Dä¦zFá’ÍqÌšUÚÌ‚(9pqÄyäž&æ"—8‚òå#Í¡Û/ºå|¸qBQ +xÚYëoÛ8ÿÞ¿ÂßN*H½»R¸¯Ým›]§é¢—û Û´†H]Òüõ7Ã!eÙ–í"@2$Gr~ódØÄ‡6IB/ô³h’dŒM–Õ+²µ÷ý_fx]Ëì¹ßܽúå]LR/‹ãpr·žð òxÊÙ~Ó»Õœßò]¡D9uy’:7u#ßwf… ‰Õ®•¨U!Ú©Ë"§«7ÓÿÞýúêí]/?â¾—Æ1ÿ¹Ã†aì…QœLÜ ðbdCî‘+E™—$ ï¯DƼ,Š8Þ)c^é¤gÃ+=ø,9>d–xpõp2ÜïDªe:•ÊÓ"™'OÂðPêÛ¢¥…<vþèDY*1
|çY¹³\‰‚¶¹B"qDÏ[åÏE•—fô]¥¨Ë‡ ë™ûß”GNSÓ õi`\nEíÑh/ú…v²Î·•™‘ +Côª0“¿•¹”utd#þÄe‰—qs§]+Ör +°{÷ó™XãæyWª[=¿>PLyqÆ8삯òvùÎk°¤ +¹+ÄXbŠbgïmåÊT:ü=/,
=?Œ‚½0vz@0ˆýø +ô®KÐ[¶«Ð_’º‡þXê褂c,áYB¯¬¯Éƒ€;èÅ8Gõµži7ÅB
8M͉ã“Bò½¨M{[,u¿V«;av:ÎrSæ(ZÑx{op#oæÀ<?
,ÎÃìîuª(=òñ%”ÿÄ=οG`‡øÏ"naÏk—ú”Ð=èè£ÃFEw{GùûôdàU,dÙOlä<Q + µ43Pæ›>fÆÞw¥Ü™þbk¸†žŽ€[tp^]PÝ®ÀÛo}ЯšÇÅäJ?zÌ+b<V+˜¨K+ÝEyçŽÝZAPQ…Ô‡}vô”púîB"1oš_WpH@–¹zÁ7VŸ;7¥$Þ7TãîþáAóöFÃÌó&RÚÕñ“›]Þç†,ŽR¥P/Êloƒ$²ã
GÂÐÛV"}è€3g`8•4¼½sgFÍv®¨¾ó{nòÐ_´¤³Œ)- õ;W‘}rzœ9¹4®¾ÿü•V?å”9hZ£†Óv´£…ŽM^Ѻ糆 Õ!çý›6l#–[x‚ë.l!èš;äš@Ü_6´@"—;yiIº0<è‰_ÖØ,)’6Ùh޹ÝmtÛ>®èS=ƒ–
Sz6RJ9v'Dä¦~ÁÍ$›ã˜5ª´™QràâˆóÀ=MÌE.p1äþ3Í¡ÛÏ»Åt¯qÜ„¢ endobj 1055 0 obj << /Type /Page @@ -8527,23 +8559,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1060 0 obj << -/Length 2510 +/Length 2519 /Filter /FlateDecode >> stream -xÚ•š]sÛº†ïó+t)ÍBøäGïrj;“œøœ4vÜΩ;J‚d&©!);õE{)C ¨“ID‘‹Ýû -™aøCfG'b%.™÷ïðlÏ>œ>IgôÆiýëý»åMÈf1JÂÏî·3Ê¢1%oNï7ÿœÿ–²Fæ‹€Fñœ¡E 0ž_eRßø¸?är/‹&“Õ" b~,v‹Ýzw}Š/(FqÒËÄž¬‡jil¨=e@$(Š"ÚŠ½yd!ŒÓy½~ªd¶’…þú¼ b^v_>-(ž§êŸövüí(󼑆ç?eCæ/Çj#µù‡‡l¯¯±ÀªÖ‡§læúöC¦??ÞªrihÝÊ
˜“NM{û%“Úùõ:ϵ4¤ÉêE¹•ÅF6HÝgÚhAæ½Ý±hd¨ôBª¡„vý®ÕñæµQTø|%ëZV-"1ÿ+DžodðUnU÷ÒuSjTY±neóTndñ‹¶}ydœCÚŠv¤;®®öYç»–Y¡X+ó›\g,[eyÖ¨¶Ñ±w -È,ˆ)ôëM¦Ç -tyÿÈÂp—gë'«S¬íÔÅGÂàSMyNÜuÁݺëÍ¡ùEßÝ´îÁNf;Yô
»àºØA'®É.Wâ‹W•yÕòºÖ÷Û1Pè{éQ%u#÷]”´³iÇÒ{•‡cS^•ë@›«‘²í†ckßN¸¸®j˜O£s5{Æ„1ZŒÖ
ùmÁñ¼Ü«©—6²gLè$©‹VŸº¸;®NMeUget£/ø’!:Èè „æŸ¤þ,Òõ“¾úSÛ¬•×úV?WÀÏëKÐ!i#ýƒÔz Ä0F³Mým¿“Hèo'Õ.ÔS-ó–
<è縺Öàâaƒ]¥Gx} -²‘ÝóÏéý‚¨áôàªüqTiëuÚÕe?Ü£±ltý¡uîÔ¨Ù7j«Þ‡|þíösp•¥;ÕN/€H=R9‚y¨‡“úÚbÕä}µ+¡™þ’BÚN¨1„›l×h{Õºe×íXRæ0¨¥,ê§²©õΫ˜ß÷Š>|¼ý¢¯Úµë÷oúËÇ} -at›ÙᘧM¦†gáüKUšýÑc³È\Ó”]ëò6ÝeýÈP6jجdZÔDVÕÍ[¥R]´³Iµ}ͧ{ÒOAežÂJ¢ï>ÜwÀ -•TXÐFÖ«¬nº9¯—êR?2:À<?¤Z±†l¾ºú—Lˆ”0›o®áëÕ´Ò/¬pä…%â…ÄÏYñ#™²®Ý¸~†¡×»^î]¹m^ÒJN TNEHÆôAVE8¢Ô^¸Šã7õLÌA‰TÉOŠ9‹g'3¥ÿ“È–”DŠ>3ý
¢öFèg/y‚äŠóó¨ïØS—²¿·“eUw(OXÕ³À–Fâ…á@üAbVífýåWCé©ÍP*\ :WZŸšæð—åR}lPÚ -Ge5¨‘˜ (ä4rg
:…(cP‘¬pâ! -ÆQâ#Ú›y‰þDí¨Dͨ§5pO Vx74Ýb¨ÅBf96€¥ è¸Ï,ÀUV"£1ŠáUäNU<)<¼HÀ0ð물ÀÞ¼9xY!'p!OÅë- «õyt®®É@ŒÍËrm -31Žpx)Aë8…]‡`oæ%høs´£N4£Ž™L¾ø w‚KŒçÅ×µj³_|¶sƒâ÷ô9Eõ±@ër¿üNkÚÞQJm–”% ìßœù¢ ³1T6—œ -¢zXžÌ|,MÓ,QÇYžE½-_³<O»ÓŸ¬Ò$e{ò895¡6O ´?W噚]›¡H{jÚΩ¹×‚×á¦!D†œ3]vƒ4aÑ…Ó’E "!öíóNf^”†?J;êJ3êYü±}Ę®Ûã×våš@QÄ h´Ô¸öm†â,„çB-t›åÔâ²8tgŠF¢4!—R -½ÓQy ž|9øÇ› ÷ïëq¥ÎÛVÓ§+°;KÔ!”Ý»ïk[Øb†Û>Ó±Åêp¨Ñ÷c]gòˆ¶Õò¿+¹Ý¦UÚ£Ëê¸RŠ-©<DœNƒýl).Æ"I’ø6ƒ'3/Bߢu£õîØ*Ú/IÇÖCñ®È»3TM†ú†Ã3ׯÇA}CuÄHìÎ…£oÛyß‘b‘˜ùöf^‚†?A;êA3ê}ú©÷'6„†/-ž
a×f¨ÊÞÚÎí
a¶?Œn,Ô–AmïœÉÄ ³KwóC«Nâ<àz3/8ßœuœµ;¾R?Þ½_Dxþ09çàÝ! ü?×â™t]›¡4{ÖÙÎ'ÕK(Hë%Ex¹/7êï¿7é3zjöù`Q…’&â¾üq -l¹”- ŠDèÛ4žÌ|lMÓlQÇÙžEíØÞ=üîXG)±¥Á»¶m†’†+é¹ssFÊUý\8ϲ1äwzÀ?ìCÞv‹žõ”†PÅFÂw˜}2ó¢3ü9ÐÙQ'ЙQÓú ó|òtF ¬N«Îã{Žgº6C9öùŒíÜü
¢•…êòXå°ITÈfÀŽ3„cAÜù¡°i ì¥ÓŽSX§¹¯=™yÙþìì¨į̀iÝü'—^vgñ/egË™bgê9±S².gçÊÏÿËŽ2ØÜ0ßvðdæegøs°³£N°3£þüruã>%VôKEɈ˜ÑSQr®Æ(_¶e™§«º=™ùyØl‡ëeõ'ݹ¡Â?—rƒÅÌW~öV^joÞЬ̌¯ÙaФ‚`NÏ#»õMB,^¶kû,´Ø–ÁJ%¯-Zþ„ϱ…‰p¦Gý̵¿²¢8L.ûß•PÚNÿ.GŠ`g½•êBÂ&ÿ¯¤áÌŽü?ÔGZåendstream +xÚ•š[sÛºÇßó)ô(ÍB¸¼ô-§Ž3ɉÏIcÇ휺ӡ$HfL‘^ìÔýì]$
$ N&E.vÿØ +z™ØÁz¬–FšÚ!<FaÒVìõ}Â|º¬¶¥H7"W_ŸW”/‹îËçÅËDþÓÞN¼¿5"Ëj±bxù³–6dùÒ”;¡Ì?Þ§Guõ€9þX®´>=¦Û$S·ïSõùéæT+HCëVìÀœtjÚÛ/©PÎ?l³ôT Mš(_¤[‘ïDä}¦ŒVdÙÛ5y-JO¦Rå‘Å´ëwUˎׯµ¤â/7¢ªDÙ"âË¿BäåNxßÄ^v/ÙÖ…B•æïFÔÅNä¿(Û—æû¶|§©ŽË«cÚù®DšKÖÒü:SK7i–Ö²mgÔô +drBóÏB}æÉöQ]ý©l¶Ò듺ÕÏðóú’vHÛDÿ •Jh£4Ýõ×ßÑŠ„þ÷÷BÞèB=V"St¢a–ËëB´¼_E`Wª1^
Av¢{þ%¹[9 þá]OL[ÿ¨Ó./ûNe£ëåˆp¬ús+Çͱ–cXö>ð—ßo¾xWiríÔBˆä#˜]
ÌD5 ä×vË&ïËCÍÔ—ÐvBŽb \§‡ZÙËÖ-[¸nÇ’4‡a-D^=u¥nt^ùò®WôñÓÍWuÕ®^¿W_>Èð£›$OOM–Ô©~>–_ËBïk>õUMÚµ.o’CÚi#‡ÍF$åFNe‰PÞ¼‘*åE;›dÛ×ôäqº'ý$”æ ¬%êîýw¬ÀPJ…%mb¹J«º›õjpÉ.õ#£ÉÀËS¢+ÈúË«Í8F1ã‘þî¿`u+õÊ +&^Y< +PÐIü’æOÈýpíÆõ3½vØõro‹}ý}N tÊ2¥²Â(Â!¥võœÃU½©g|AŠ9§R~LPä³h1˜Iý˜„¦¤8DPFøÝß(jo4Žzöš'˜A®|ÿ<ê{ +Ã80„عõmƺp#ç¹Tj<JOÓ%A4ÂÄž% +31 +qp)Aë8…]ƒ`oæ$¨ù³4£ÎÔ£šG|»b;ûâƒÞqF1Ž_×f¬Í|ñ™Î5Š?’çUM޶ÅqýƒV´½#•š,C(KbØ¿YóEc(f#¨l.[9D8t°Ì\,uó,GQ§YžE½)^Ó,KºÓŸ´T$E{ö8;5¡6¡´?W嘚]›±HsjšÎ©yT‚%×ñ¦!@!†œ5]vƒ4fá…Ó’…1"víó3'JÍŸ¥u¥õ“ÈÿØ?`L·íl»rÍ )bP4jìû6cq‘s¡ºO·bnq
XØ3EÃQ“K)òÎ騌œ_~çñfè½ÅûÖläyÛfþtvg±<„Ò£;÷}mSÌxÛ§;6XNúÑTU*´/×ÿ݈ý>)“¶]—ÍF*6¤ú!x$à|¢ì7`Kq1>IâØµÌœ5ˆfÔŒzÔÛ¦;T4_’–¡Åÿ¹"çÎP6ëoÏ\ϼGõiÕ#‘=K¶Œ¾mç]oDŠQH"æ"Ø›9 jþ,ͨ3õ¨wýé§:ÜŸÙR¾~`Èpl»6cUæ†ÐtnnÓãirc!·r{gM$±ˆ]º›gj]yç endobj 1059 0 obj << /Type /Page @@ -8678,19 +8705,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1084 0 obj << -/Length 2068 +/Length 2063 /Filter /FlateDecode >> stream -xÚ…XÝoÛ8ï_‘Çh<;¾·m·ÛÝ€âZt@¯÷ 'ªÕ–s–½Üú×)RÎGÝ:†¢(ŠüñCf>üfYìÅ~žÌ²<"fëæÌŸ•°öé,`™8N½8I3ø1±º—— l•¤é¤”;h™+/‰ã¥>Þ}¸Ó²r?šÝ=¥€·ù{þ‡Øª^Ö‹e˜æ±·øçîh]¦‘—&AjE.‘?L±üy֋П?£ÜÙÕÝhĨÛϽlxßÐC)2t5[yyšÆ‡v&Iè¥y[#®Ìb…É|7tI¤ìžÐ²¶.ѲNªuÅJq«\jÑ·±ž£,fz£ä+9ÕòÞ{Äbûó^.‚¹ª{Éoš^6ÎÝïœWà¬{Òùå(¾WzæVðË…Û{¾_à»™—‡EI5ÛÔ½Ú[d#vÓµ}kÏmëšy/x8ü»[É\TgpP)1 ¥øûaØÈ†H¸XÕ9ò>ɢÈa]ÉnTD67²b™ÑPPØLQ ³–fÂÜåñMCÛÍï'·¸_¬|Œ5®tyNìZÔ6j4–ůöá¨Aš˜Zn}Êcÿ¨ƒKÀåxåS'õúNjb”ÒÈþ¥ç»+½S&L¼<)e.E‡æY4¯”ƒ!šE÷鉷q‚§ˆÖ‘"²©{%ëÑQ©…nsHì^ß$Æã?Åдp¥4DºF™æ1JÓ2»âË÷R{$ví²èïo"b§É˜×ÂÉ´±y¢].\‘à - ºgŽÐàIôÀN«Áú°z¨ÛidZHئ=ÒÿE2 -"È©^ªZ•=k„¨S!†Í>$vŠvÁâÐLåžT¥´NãyÝ>‹šéJ}N<%Ò ß¹˜7D¡
‘G8$ÖX›XR’{Û‘aäV°Wè(ɦ¸õ#ü}Œ¢Ì–"`\*6úB[ÌL„qÐBøuíìQÓiŠ}ã²â–sD#•ãïTÇZ7b3t„:Ú'¹/#TÍ[4ß-^/¸ì³M »cUÙÄÉ<üjñ–F\Ë€¸‚Z[jeäF‘:à•ª`1[§R—fH½WÔHâë«ôq:7HOúø/ý¿íZ¸ÝܶiàbNj`ÛbuB›uU+9YAÉqàöÈí‘-]Åyj5{Äÿ? -©HøYhMö4ëa*L (†'Z¢¦ ľmцJ@ƒ´ñDÆq™]’’–ÕÅ{uFÖ…é‰>ìrË©TìmËõ_Õð(ÈᦥdZ?ÙYsBŸSvT+qAº°Ü#+$ï.ÝÆ£,'–Í<¢v2nÎn3ƒÍðQ®,âf[&ÂG•#æ¯;/\ÉU \gœ×lm¦R …•oÊÅî´\RS‘-Tì× BðТ¨P•.UIªEa¶8\I³Õ¶ßr5‰gôœ¦\†ªw–*Êiî5ò0Ùd– ¿Àè(³…Žç†Ì3ÃÛ‹Q×h°jQ¯@&Ë‚c -Øb»!³NRM½ô3ê®á9[a8˜¼œh¶®,¹¥¹öIã*öªåÖGx(lÝûÊ´xÑâáòг¼¨ŸnPuXÚ¸Ö7'“!² Ó(7Û<f
@´ÅwI=”’«?ªW(Axx‚—þ!¬Ì¤£#âÔ -` ?èÇ·™Ñí3°€Ä†F~NÊÇ £˜F„09¢vÇ/|%LĦ¾±úÛ·MÌ?Û€Ú90
÷ÅV -K!ÞDïöá:L -Ó•—~÷@[îorö^™Êœ¡Úiw¿ºŒ˜)ï†*±·
Šh„ç`àeY|œ|˜`¼›u̺ƒLÅ”‡Ÿˆ
¼Y:Óªi7 -~”„ßžZëÚÃqOu¤°Ûô¶-ÓÓ„d?bI¨üÛüDQz„Áªu
´ÅÉ…ƒ6~jœ[±y÷‘‚þÿ.ÇÇ‘¬þ
–¼Ö(÷8¶_6öýÖl93õ¸ÇpïÍT‰V^êÿêKà¡Ô{©âÄ~™*ïºO•ÓSßH•ÃS¯ÆO--<³¸°g,ÖØ]Ó<I©ŒçÃ1Ì•$¨FòmO®Vž§áá•Þvèðë›…yè¥ t^'…ËãÓƒ“Ð÷V),¿sòÿàÒñwendstream +xÚ…XKoÜ8¾çWäè2®ßöì-E’v»[ Ø)Í4±b«±åYËîlóë—)Ï#NŠ)MQE~|hÂÓ +2»æËRû$vå²èïo&bÇɘõaŒdÚØ¼ŒÐ.®ØaP=0Ghp‚$ú`§Ó`}T=Ôí4²-$lÓ>éÿ"1äÔ U£ª5BÔ)ŒÆÃf[E»`qlçrOªJZ§'‰×tÏ¢azÏ…RŸ@‰tÊ÷F.æ
QèCCä‰5Õ&–Ô“äÎvd¹ì:J²)nGó +¶Pœ÷ÍЧ†Öi,î¹ÍOŒ2r1=‘¯ÆuëÃZRU¦¶bŒ}Øh¶ØvÂ߬“EE¯FýŒº„ëxÎV˜f/'ÚkKîi®Ò¼ŠÍjy%^ +÷À2^t«xº<ô,ÏÓ§›T–J×û&âh4Dô!°`~ån»JXÝú»¤&JÙ5Ö- <<ÁÓ +` ?ècÏÛÌèw¸†Ì†N~Fʧ £˜F„09¡v‡O|&ÌÄÆ¾©ØÇMzŸm@í ˜ESvã + +ý"‰‹2;a~|ê*÷‹(LÞ?Õ ½>õàÇŠ0ˆý,O’ÃSyÞŽJ•)…}‡ÆIP…Ql=å¡™jÕ(3õUŸ¾q\a)Ä›14"}¸Êâ=“¢¬ðÓ0HàhËÝÍAÎÞ)3B™3T;íîW‚3ãÝP%v¶!@ðý<O“³Œ·ÒÔ<ö©˜òð‰ØÀ›
´¶k{g´jºR +/¶JŽN£À/2X~çäÿ<Ãòõendstream endobj 1083 0 obj << /Type /Page @@ -8710,14 +8736,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 1088 0 obj << -/Length 1471 +/Length 1464 /Filter /FlateDecode >> stream -xÚWßsÛ6~ï_áGé.R%ê÷cÒ&[Öné-îv×e²EÛ¬%Ê'QÍ.ý -õ(•Ê„/]«Ú-"©kï^*m‘8’“þo„7PcèÖ_†î)ÊbR¬¹9…Îßj¥÷È£3À
!7G@Š1?J‹ðü&VçàgÍ.Âï\Ô=üŽ£¾¿iÔÏe³kÍ[x”ˆAV$üåæ‘-ÀÑûÆ…êov¶ÒËÚ<õˆ[!•É«RýÖŠ«6Ë?\x3ÞQ²åøàÛ§(M¥äg0?Ïsv!ñ«s‰·f.ê>ñÇQßHü4*á„›ÎÝ ·J´²¬…zŠâXan"È
dvQôU8Ï‚ÓòËÐÐÊ
ýNàÃàWUö¤¿–Û‘zÁõàMW;ˆ - -æ§ KG—˜×"yó'ò™Èÿvûëendstream +xÚWßsÛ6~ï_áGé.R%ê÷cÒ&[Ömí-îv×e²E[¬%Ê'RË.ý +"ç¶çb+…â•Ð]{±£x³Ršôå°®iwÏA&Žè*¡Ö5?þ^qkÕw[7œÿ+ÛVð~UödÛ–ð™ôÉðF¨š[Å®”’v%~6Øíï¼âŠöoÝÐé=LÜÝ3¿`ö"žp ø¾¤Àš6ΜÆõâÀ±ê'Üæ}Å%» +õ(•Æ„/}§»"©kï^jc‘8’“þ/„·PcèöŸ‡þ1ÊbRl¹=…Éßfc¾‘'g€BnN€0c~”áð›Y]‚ßhö&ü.E=Àï4ê+ð›Gýµl÷}1ÈŠ„?Ý2²8z߸ÐJóv?VzÙØ§žp+¤¶yÕZíFqÄê˜å]x3ÞS²åôà»Ç(M¥ä0?ÏsöFâgV—?š½™øKQ‰?úJâçQ ¯˜ ,جpî¹Ó¢“e#ôcÇsAn ³«r Uá< NÛÏCK;7\¨½À‡ÁUU*Ò_ËÝD½Œ`ŽzðfªÄßìó¬k
°ç²üÃΕ†2y, ¢u¦ÆË8ñé±<¬4œ$ûú¬È-Бy~Ø¿—¦;*é¶Ä<¢Ëg< ̺#|‚P ®¬c(l¾âðñÕ,`×Ò↫irØÓ.`kFGGWŒÌ߯jg> î5·º€ÕÉì-¬^Œ:aõEÔóX=Šºœ¨²·dû°®ñyÇê5Ý…Ï÷Þ“|nÈ›‘)”hMúÁûueIXð‘¶[èÆÕòÃ7V²æ_?-ï˜G¾oÞhá±Âgi\€ûaD·úXœÁ¶ëáa<`It5žo]+M…P÷Øp”‰iÆ`0P#BqVYŸ÷¦Ü`ó¡ú5'ùWAÀ@›õ©“€;Öv_]~+¦H-I`fÇ‚3Õ§8_ÄrÇ”˜•+C ÜJýd)¡ä7‰!aŒ¬lu–;I{)¦Kyc“cˆ +L W +‰Äé'6aÅQ›?:¦ÎîQëG©„öpvÒ ô¤áD™´ ä£{$Ï-½oHq9h²9œÁ'ý' +¿ƒ‘x÷àêh"+¿Pª‘(ûçC€ªDbœB5e5:Á¦He›ÎrŠ¡2ƒøà(£Œ=ß¡£&4Œ+®9wKw +;[·/_½Ì£þ·ˆ]‘Ád9á +æ§ K'—˜×"yõ×ñ…ÈÿPÅendstream endobj 1087 0 obj << /Type /Page @@ -8862,7 +8892,7 @@ endobj >> stream xÚ¬·ctæßÒ-ÛvžØ¶mÛ¶mÛN§cv’ŽmÛ¶t¬Žuóßûœóž±ï¹_Î}?<c<«ªÖ¬Y5kñ[dDŠ*tB¦Æfâö®tLôŒÜ -5303˜¸¸¸`È +5303˜¸¸¸`È fÐ/…Ï8׈õ¹^”ÝÓfgT?Ú›TRÖ/y‡ÀŸî`q†º~¢ $q/D#}tDð7ùYŸ€Þ‰Ô„R[tvNžòçé‘bpldx¨ç¼ï—&7šŒÇž<&Ð)W@[Â'Š "£ ÷¶ýú“P£ÛG?ŸŒ‡4ÚNöUÑ¢`ݾ]ö=<£]€7EÎY²õ°Rãf~:†W(ešk.ïkÃLÌ“· o*¤ÿnÖ†4d&²ž`øä†²ß%Ò§Ö®šúµ!oadF©³´Þ£âŒ‘n$ÊA¤ÕÑ…Ì[wEXÆÒìýwN¤}ÂÁÇE
c¾ŽÞ9›šsYÓ<=çÚ,,Eú³æˆSôÓ&ö"£Æ[Ñ)Ùá¦mù I’âs%¯ÿ«÷~\Ò¤2O¨G¦Mتô¿¥j-²ªO©£ÝÅmˆm–¸K¡9b¤þ\)p‘¤‰$ÆÙã:_g'™žÛö(é§AÞ§ánƒÄ0³EfWԘ夶Bvš¿†:ÈË4Yjâ¹ËÒˆâjŠÞFÆ×¦³#yƒø0bõÃ;^atìÙèÇ󟈜‡ÀmÞtÆm^†@½D-`âx;3±ï½Æã`•¢cݬˆpFàįækŒ‹Hbf»P–A™]†OB΋îN2RÚü£9Ÿ%Sü$à¾Û›#Iª±©·"½>"·™þ€ÂS¥{ú¼ ÛÆÞŒ
Ô°ä#¢DÍAsŽ.¢ Ù›3 ~¾a%ž©Y=“M^ïÙE0Bê,ÊRë„°–<äh‚ˆ\¿³Â¹ôw5ÔÛÉFX°9TU«~!н§©!ÅÚ%ÂÒPýÄÒôy…Mišš\ŧìÞ&ž*¹¢g¦%ˆûn¯lôž6®ŠB?ñµ Œf˜ÄOùôð6¶òò˜"ÃÿŽ“4ñ%Á¦S¿I_ßÇÅÔçËÑœ¦¦M÷Õl‡¯U³S`È£®+fD¡µ÷Õ©•QúªÁ.þåÕAÿ @@ -8929,7 +8959,7 @@ mËâaÞwqrHøYµ¤Á¶-D1·v»ƒyZ<ƒÉ§œP_¿”稄+ýmrµ_+Ž“8·JöUXØM†LÔ¶ŸD*k'—¾æ…$ |±4çÔÕ˜
Å={F°•žUVÏ+*®ró Ú Ä$*¬Û^;Ë‹ç€Aªë3fUN³Eý[eÜùönÍË8TèÚÖ$ýÈ¡b4±êJkK‚FÑ]t‚&§•æK^ÝÁ‰o©iS¨ztÞC„û=xâ JâXùÐê#÷T×Z/
øÑ_zÒ’40 0
hü¶F(óüåÙŒâ(0`Oˆ¤PµiTžŽ<
wI¢ݨ«ªû×ÚOæÎ_ Ÿ„ô¨õ²ØWÇïWïãnbœR!ÕÁ·@úÅÿm¨æm¿~ù2‚ÞJÊGH÷Ü,´à Ó׈©þ4\¨!öJé GhZ®î%Njò†T"§w,¥qŸÊ¢FÕéHuÔ«Þ~)Öxtd=ûYµ:«%°µ—|5£»´&bpOÇ¿ùХܮ²Aï_%|¢ é~øÎ1£T86TY„¡B?ÜŠ0„öÓÚÕÇÙêïr˜´œŒö&O®ã—~½I[TWµu;O´xoeËNúØJ«£?¯eSùcÿáõ*†¦wpü²”¬7òØ·Žâ5öëPÈã,,ÙÎ₲3 لêd®¨&BßDn(¼ÝNN”°W³ŽCÎ(F—™Òl7€¤Ž0¾V¥Ã)û´Fsà"È8Í(oóln -3§w¡r˜›˜æU•C -bŧTÇðOÿÏØu:Å÷LHafNjù7QÆõC‚ž‰Î‘9ñ]§¦K,W—:ü‹#00QºRÙ-3ÚÕÜÂ¥ÀLíñŸâF÷Íß¾›6ñ¿,b>x'CÍ>f{â‰E1¼Æë
m¼[ðyã&‰É3”Yþ1LýÖö6>|M7ÇœºUZ)é<Ó7É{<þöû÷ÍIÍ[šä¤eöl¿ÀwrÒ„Ã+º¶ó\_YdÒrÚÿÇ-]ûœÖþ\Å|ÀÎùÛËFñ'ÿŸ/¹µÿÞ¹u®ç¤Óž°Í60
Ü^Ì!å½ÇßóZÉ;Ŧ§§Ž)G|:7óëíïyëLîq[ϪÜX:Õ€BÀ5jÀ°0 9'5±¨$?7±(› +bŧTÇðOÿÏØu:Å÷LHafNjù7QÆõC‚ž‰Î‘9ñ]§¦K,W—:ü‹#00QºRÙ-3ÚÕÜÂ¥ÀLíñŸâF÷Íß¾›6ñ¿,b>x'CÍ>f{â‰E1¼Æë
m¼[ðyã&‰É3”Yþ1LýÖö6>|M7ÇœºUZ)é<Ó7É{<þöû÷ÍIÍ[šä¤eöl¿ÀwrÒ„Ã+º¶ó\_YdÒrÚÿÇ-]ûœÖþ\Å|ÀÎùÛËFñ'ÿŸ/¹µÿÞ¹u®ç¤Óž°Í60
Ü^Ì!å½ÇßóZÉ;Ŧ§§Ž)G|:7óëíïyëLîq[ϪÜX:Õ€BÀ5jÀ°0 9'5±¨$?7±(› endobj 792 0 obj << /Type /Font @@ -8938,14 +8968,14 @@ endobj /FirstChar 33 /LastChar 252 /Widths 1115 0 R -/BaseFont /XOYAKD+NimbusMonL-Regu +/BaseFont /YGDVWM+NimbusMonL-Regu /FontDescriptor 790 0 R >> endobj 790 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 -/FontName /XOYAKD+NimbusMonL-Regu +/FontName /YGDVWM+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 @@ -8965,15 +8995,13 @@ endobj /Filter /FlateDecode >> stream -xÚíT{Tgo·46ZŸ°ðÉCy%€ZÀ•WÄH‚ TaH¾$S'3ÃÌ“R—Š`u¡ZP¤+q-.жˆ ]ø -‹ÚªE—à~ ZZvÿpOýkÏæœää>¾ß}üî½n³¥2Ï%• -Ã)’ó{‰€ŒÃH%Æ(em4‰N4ŸçæÆ@ŒÃ)R‚q0 -ˆE£z¥Ž~nK‡Œ¹A‚g!Dy`JŠ$@ U<ïŠCQàXõzy¤¾J_ -¡/…Î_GæxBÆZ/ø¯6s<N¸Ž b0-¢öù] -»¯çœ^èÞ·É{m¿¤?þýŒ»íÑ7,ˆVõýeeìÚCÖ¿m=íËXßýQ˜å’^‘õ¦ë#ÚfƒbÏñSÏØÖ¾2ùØ;ýs>¸õ㣹_\ln:ßpBc¯½û¾¯»¦[ðçäg¥í³JŒ;ay}Öã’‹®Q›é‘$¿Í÷rêvmˆéúK¾/Ù±‹j_÷Cöþ;æuýÃX^}J:³lˆ3ò¯v~˜ì˜‚ªtœÈ›¼5bKK ƒëÅ&ëo¬çvi¿»:@¹DÑ·ÕÛg–,Ç*¦ŒwJ7¿©ïu˜x¦áÛýwòålò‡V77êÓv¶åðôö3‚Žˆ»>ÊÍkQ”ùå·7Þ)½ï0\öp[OßõÉ»ÒjØÅ¯‡.KÑ$/™ÖØp®H“³&2Ñ(Ñ;ô÷]>j)ì»å~äñéº)‰³>~êVÓ›{i¤j’U<±Þ¹¸úÚû³üÃowO|ßeß“¿Vå”ÏyÃ#ûÍ?µÞÿçÈïJc>˵žëýì@T…ZÔí^øue±æR‡ï\»^Y›hc¿ÿZë^}ÞH©ï¾©XíÉ œÛË0©|¦wTnìjë¡úJg››;BŸ$îùª8°mÂRÕRªÃÁ#v%VN±)" -¬ø6'—ù -AI«‚ÛIÏ›îúð^ÑÛ-ÍN™,à¼M›jùé{#CSc}„¯‰¡$‘•éW—®ò\鶪f·pQ¦]ò—훃þžíŸrÕ¢»îé'k¾ÈN‘o
rrî -ûfVšß»xÛŒm¯fMZvò7“f3îïÎíÈ]’5% ëí¡="Ê®L;t¾ }uÉ…„@§cg°fç?ò%[WûùgÈfw[œp=p0´¹ï'y¨}ê—B]½QZ°Ëè½dA»v‹îTyäàšïoQãr¿ý¾¸»M•øUIXžmÔ¦»±vé·C·®´+YÑUqÓcð‡c¬ÄÁñt
“óê⺪+QõŽA…d`SÑÚ¡ÙIÔÐd×™-,Tïél;jè¾²añ¡Æ<á=ç…ú:‡—‡»8n_¨Lpʵ“?Öe4ë£Ä‹Rjjë:…+-3ßsØöôFØÞ¬Òéñ°®þr«>Y̼r¡£(¹ [f©—X9è&$q×~w;d“åðƒüì¥å›RîtÄvÊkÓÏæz%%WöÚ¿wɸÎöºÚçËNpî|Ú_¨y¢º4‰»xÒxt†V¶×Š~å‡÷€ÿ +xÚíT{Tgo·46ZŸ°ðÉCy%€Ú€+¯ +’b +fXÊqôêä6™< +ÀQ +³]2*²ßt}DÛlï9¾cêÛÚW&;p§Î·~|4÷‹‹ÍMçîOhìµwß·ãu·€þœ‚ìô}öIñ‡#,¯Ïzl¸èu°™IöÛ|/·nÕ®
Ñ]©Õõ¥8vQíãÈÙ¿s§Õ¼®Ë«O Bf–
qFþïÂÎSNP•Žy“·Fli pp½ØdýàõÜ.ÍwW(—(ý¢bú¶jûLÃr¬bʈpgŒà¦õ7õ½Ï4|»ÿñN~[#IùÐêæF]ú\~¡Î~Fàq×Gyù-ò2¿‚–ãÆ;¥÷†Ënëé»>yWz
»øõ¥©ê”°i
犹¹k"“ŒRCÏpOà壯à¢Ñ¹Ð[îGŸ®›’T1ësá§n5ý±y—Fª&Y%ÒëKª¯m°?Ë?üv÷Ä÷]ö=ùkUnùœ7<rÞüSëýŽÜù®4úó·\ë¹ÞÏDU¨DÝîE_W–¨/uøÎµ+䕵‰6¦óû¯µîÕå”ú՞Ìݱ½‹‰›é•»Úz¨¾ÒÙææŽçÆ'I{¾* hÛ¿j‰r‰GÕ€þà;C¡•Sl꣈B+¾ÍÉ¥~‚"A`rBPÛ"éáyÓ]Þ+Þb»¥ÙI/“ùŸ× ³iSwúÞÈÐÔèFáÇÇk¢)i¤EeÆÕ% ž+ÝjveÙ¥|Ù¾9ðï9ž‰©W-ºëž~²æ‹œÔ¸ACNŽA]¡ßÌJ÷{o›±íÕìIKOþfÒŒ ÆýݹyaÙS’±ÞÚ#ÒªìÊ´CçÛW.¬ +p:vkvþó!?QŠuµŸ$S6»Ûâ„ëƒ!Í}|?éCÍS¿TêêÒÂ]Fï°íš-ÚS呃k¾¿E-ŒÏûöû"jàî6eÒW†Ð|Û¨Mwcí2n‡l]igXÑUqÓcð‡c¬ÄþA‰t
“ûê⺪+QõŽEd@SñÚ¡ÙÉÔÐd×™-,Tïél;ªï¾²añ¡Æ|á=ç…ú:‡—‡»8n_¨\å”k'3~¬ÍlÖE‰¥ÖÔÖu +7VZf½ç°;ýéн٥Óa]ýåV]Š˜yåBGqJa·ÌZ]/µrÐNHæ®ýîvð&Ëá9KÊ7¥Þÿèˆí”צŸ-ôJ
WöÚ¿wɸÎöºÊçËNpî|Ú_¤~¢¼8‰»xÒxt†F¶×Š~å‡÷€ÿ endobj 700 0 obj << /Type /Font @@ -8982,14 +9010,14 @@ endobj /FirstChar 229 /LastChar 229 /Widths 1117 0 R -/BaseFont /OTBRLX+StandardSymL +/BaseFont /VFNREK+StandardSymL /FontDescriptor 698 0 R >> endobj 698 0 obj << /Ascent 504 /CapHeight 687 /Descent -228 -/FontName /OTBRLX+StandardSymL +/FontName /VFNREK+StandardSymL /ItalicAngle 0 /StemV 0 /XHeight 400 @@ -9016,7 +9044,7 @@ stream xÚíveP\m¶.4x‚<¸»œàÒ4ÐÐt»Càîî$¸»·à hÁCòÝ™9õÝùuÎüºu»jwíw=k=KßU›ŽZM“UÂf’…AX9Ù8ª`;sg¸¦T™U±Pp2ƒ qX€,1ÙUaN.Œÿ³.³ýçšühñ¤Áÿ‘öþïšû÷ý·Kü¿½Ï§–u†@TÍìà¯%xÜ2p€2à÷žü^4`àÿebf†¸ÿ£¿+ê‚þ ô7×ß±¿¨% VaåäbãøK†Ë‚Ý@j`' 5ÀÒòX¬?rm¨È†‚›ú§žFœœÃ´¬Á@[èïêó -ü@P‹¿Çþا?‘³KJª)ëé³ü»ÕúGSíqœ´ÜíA€ÿš® +ü@P‹¿Çþا?‘³ëÈÊé¨è²ü»ÕúGSíqœ´ÜíA€ÿš® Ì⟇ß<’’07€'+'€•›C òüª`¾)aå¦wÕÁlõã‚÷Íîsö¿v™¿u=‡0t&Nr)¼_2uçá¯Ò·ò±| `7.ÆN=Ôô<U^GÑçåÐù²9¦®a\t‡J9ÞÊíˆ~zÅä÷Ò%Ïïí¥=Ž0¹6š¨
¯ &ÿà>~ÿê’¡oxp ¿óû“îr–¬h:!lú?‡,r1}írÏÈFÎý£ÆŸdS¿ìn€ÆW™`ïO)ùy-™CH“NÜ~eÒ<> È•4þÂ]eg´òÇ!Òã1N•Ê<-
@€Ôukš{¹bΤgžÞQ#™Á9‡,hœö%/ú±ûda10<1|ïÜÈJŠ©>µã6žÜÕd¶ö«ÓÀËpÍ’¹™—;œØÂ²ÇZæ2Ç֌Ҟ‹ºÓwFì^„<Ù‰·Ë߆@÷„^º¨Sl|:=[Žl›ñ+ÍzŒNì—ÈÓ×+ñþCEñ}<‹\`ÊläÙì<ˆÕ¸åC„dÿDj‚è÷½+$òØý"ŸV£jŒ—”e
p‹QsŒ‰1(Se܇RbÞù²¹29°¯~’³“ q&× Îa¢qSÀôÅØÆ¿$‰fî£/ @@ -9049,7 +9077,7 @@ b€W6òÃÀ–‚²óšÐbBߣœ/^ž†ãŸÍ«I)—ðØhÎöoÐOåµ7µIy»ÈÅËo½vµ•ž+赺ÝWáׄbµ£Eî}ž(É È¼€û¬žö]€=ì|Ò¬Ûpãb„ûŒÊO/'΃÷SmÉÕoÆZ¯¿~w%™×ÍòDRÅ^Ò ”–ѧ·?O½5ñJÅÆA z†VèêßJ:¤ÿ&/“ÄÓÓ¤…òÆwT9t—Ñî&j[^}±k,ºÁ0“E_áЛµ.f|‹¦™O“_4ˆžØxèz_ð"M)ÚJÉÿ«1-ËQh$TÒXÉ#…fˆ³¢zX¿7g˜•(r9ºµû"nÓ<BqD–J—¼¤*š™)#ðŸ}›º¹î”B&hywA¹¯ªî¢ª˜k’Ðw®×âÞñ³Ë•S(Q.\ÍNweF¥%´hûÆ/'f™–Îc]ª•B—ÝäÛÁj3Ñ—r¿¤œi¹›³¤Ç¾Æ`¯2PmšÜú±;/øaÞÏeC¾nÿR4C&þºñÄü›ó3Éà{ãYÌ)©œH\ä°=Œ°¼Ó‡qerÖ`1¢ÆÏ”ã¨ü(¨žøû ;u„}õÚÌÂÉûldŠ~3
t§û¶ì–ûø5up“¾íxÍC=Û¥Í;‘‰Î•³Òl€Ø’À::¨¾SIÓ2¸D–Vו9“šàÑã±_gv1$¹àÍ‘œ7Ç0W´›[•–~»¨èÉP©í5ò}9°¹ÎLj-•Ρ b®ô5ñ9õ\ixÇl¥~Æ·9|ã´Ûb~;ËÐB:Ié㷮ᰨè)Õ˜¸h¹p,2¶Y7‘5E0kWH;—nÿ9i¨Æ.î§jnã±;)©›·íŽ>UÆfn:e–ÑÍÓš¯)’|#º3»Pµ¯œ ù”Ïjxœ§æQs‡ÝÚóíòÈåòú8E$GÄ…/Š›ú:Û½JÓ:_
ð{g¥sdݩ–ŒàÊ—‰,“F¤±\
NÎùŸ¸#“QÆpu¨érëãmLúX)rÚc-) ó‚ -iR-<EZˆýöÄiq†økø‰uÔJ_CóÉ“ÉÕŸ¢çÌð`6ÎêÐÐ1ÒUå§Ò]µôúHw¯_8GÌi×n^ÈIo=WÙ¨hCbCž~V"kNÞCEvW—ë®c‘OÇŸqom[·†ÝEE½+ô7Dª
^µ/±jóÙUÔóã
¾F©Ð^ª†Ù±«û‡>¨&Üî±,ÅŒôRâ$’Q”ÛÑ•1Çt«£ÏŒN…ÝîˆØŠÒï’ Ø5x)Æó—F
É‘-Ìì¯~Óê-曈›ào&$òÞ¤•%ÐÝòm”ÌKeq@:Mrú~ö`øsü/˜ÿŸàÿ dæè³3s´Åü/8ɹendstream +iR-<EZˆýöÄiq†økø‰uÔJ_CóÉ“ÉÕŸ¢çÌð`6ÎêÐÐ1ÒUå§Ò]µôúHw¯_8GÌi×n^ÈIo=WÙ¨hCbCž~V"kNÞCEvW—ë®c‘OÇŸqom[·†ÝEE½+ô7Dª
^µ/±jóÙUÔóã
¾F©Ð^ª†Ù±«û‡>¨&Üî±,ÅŒôRâ$’Q”ÛÑ•1Çt«£ÏŒN…ÝîˆØŠÒï’ Ø5x)Æó—F
É‘-Ìì¯~Óê-曈›ào&$òÞ¤•%ÐÝòm”ÌKeq@:Mrú~ö`øsü/˜ÿŸàÿ dæè³3s´Åü/†âÉÃendstream endobj 631 0 obj << /Type /Font @@ -9058,14 +9086,14 @@ endobj /FirstChar 40 /LastChar 122 /Widths 1118 0 R -/BaseFont /BBPLYZ+NimbusSanL-BoldItal +/BaseFont /VFGVMW+NimbusSanL-BoldItal /FontDescriptor 629 0 R >> endobj 629 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /BBPLYZ+NimbusSanL-BoldItal +/FontName /VFGVMW+NimbusSanL-BoldItal /ItalicAngle -12 /StemV 145 /XHeight 532 @@ -9081,21 +9109,16 @@ endobj /Length1 808 /Length2 1320 /Length3 532 -/Length 1904 +/Length 1905 /Filter /FlateDecode >> stream -xÚíRiXSWFÄVÙǃd‘lBÀˆ¬‚–%*»\“¸%¹7Þ$4”ÍRq7Àà(R`¡ƒ²Œ«@ëŠ -Ä -ˆDqC@‘BmÀ:>CÎüšgÎùs¾÷{ÏwÞó~Ñ< ØÞ‡m…½1TbO%Q›íK¥ -Ç (<Éåc€ñæIERñ0.V‹Ö32m€Z$C €ó äÏ1õk°ZËCÖìâÞRàsH8]~Æ©¿ä!!"Hø“ ER Œ6ƃqt6u3ü^æ!Rá쬯 \74F -UMTï§ÈYy¡\Œ‡ 1€FwŽC õ©#:H¤åÁ2 -XëKLçÀÕMaµè»TÕiqÕ7i¬ÃTQ]1(z|ŠøÊrŸÖHäÛ·Ý¿½Ë4mä&šk˜|¯¹ÙÎé¨k¼µÝs›«Óy·w7›‡B±‡ú%n®>ݺë2¯¯»ö&5Œ±Aóîv£ö²ÝJá©ó¸0ïÄ*v˜Ý?ê›FxÉ4˜¡?¡kz‹†žýÔ˜y”åíÞ}ŽÓa×Ryæb±§aå.ÈæzoïbËzm¬³Ï}±ùZC3ã…n*ˆÍRþØ&Ûÿ"ö|’}b|Y…³ã±¶I—G7r76×
”:.K™÷èÛ¥qY¤ÛD§—s/øUF'Ütª¬in]´2ÇI²Ì‹«Pø)v -†™:9åÌê!êÜIçGÜê/óðý ÊÚ/õÍâ–Ÿ+‡%÷¼-Š&á¡®ç›PU}?žO;÷źKDÌïmkKƒN–$f§w8,Û³…à¬ÛÛÙÇ4y}›ònÇhçz©®¾WýÕp%Ú_.ïj}€0û¾=R_jÁ -9eµ¶Ñ´êâñuö4}>'‘"µË˜Ó;Aä5 +ˆ<#U‹;c4if^ò1A›D™;½%Äï¦jŠs7‘STëN;šKüÇŠœÑ`+ßZ†f—ÖØë\Õü›c·}gNdñ\ï„N°znMH·þ<qí׳«Ù|ö»ðàœèÅümÅ®—ƒ×]Ójêöžú†Ü´mIúc#÷ŠCOŒ¿ŽfФZ¥ÖÄó#ïÝ?Õ–Z½*ë®ÇÃy‹îeV}µ#ÝâòÎÃäÈÐ:Ί“«ÞìÚJ£}F6ã¼ -î†ÞZò•Ør"Õ÷ ìæËÁÈÇãÉ@™—ÏÁáõéI‘û/ÑwIÇ´õü³ŠR+|i0xhnmƾm,<Ç‹ZãÛ¥Ó?Çæ85DåOZ›GÑE®ÅrÒŽ±_JZÐå¹· .4lM—±6õF±¥žzqnÚ/¾Ï£OëXeŒî-N±22ÆV¶8úô…FæV5]oª·²¹s}cëHtµvÉwÒÑg†ŒœšÛ%1Ÿ¸Š{¡ãã“Õ®wFÚ¢·¬³žº$5[ú ¿GÕÔ ¬žâÙ -Ãþf9’¯z8ÿÙÊãéÞøã
-Üflùý“þk†Ïsµ
jOäµ¹ËV CZÉ£Ïö§íZ4Ö4Þ³)‚]œM¾ôTz@Å8Þ·`¯G ëÝ#‚Œ€%ùÕg+ûê‚Ìoènwß9õ‰‚\¶'ùâß¿’_:’P¦ÕËy’õº²œí›*Ø-pª–F0J³? …[m}Äy&±ÝìC¯{9±U¡m{w¸ù®!°r†ºmwmQõ”Qtö´‡—†—^ïÐ;írëÀ¡m¡Ÿ-ˉV…¶¼jP
z[‰h
ý 8Rð+òéórëÕUÆå\Sÿü½5”ÿpþ_ࢠ+xÚíRiXSWFÄVYTPBD²I#› Ò²DY¯É
Ü’ÜoÊf)‹‚â +EˆA¬tT–qÁBh]QX‘(*" @¡6`Ÿ¡?g~Í3çü9ßû½ç;ïy¿hîhçÆÇ¶Á^*µ£’¨NÀƒÃaS)@s¦PD¢CRC×CRØ P™LØ(Ú@qp¢¯q¢;ˆÀÇáHT´X{ØL‘€›Æ„$†Eš<H1KãHÀM(S7$ +ã +TØr"•}@þN{¾œeoìíñ¬ï¤§÷Á
þi aûêi„{ÒQ]}ßì¢äß +_öœ]™¹gû~‹õcEM±-ÀÒñŸ£³kÂó'¬ÍÃéb¥‚”:$ñIJ ¸º"÷nÔŽ¦œ\Û¾P—zKi©?½2;åvSoä¹¹V™~#»•‰bVf–ýèÊF†wwpXî™ã›uÕ–6÷nnjЬÐ-þN6òÂÈ!çìÝâ¨O\$]ᦱ‰ +‹{CÍáþ®Ö“õ2³¥z:ÕumÀê9¾·Ô¨S°Eä«Ï{±ò˜Ešþtc)n3ºü‹ž ßµƒµ—xº†•ÇóšÝå+ûÄ‘zR2oëÜÊQî%×?—í×g9ëž¿ÛÃßåþaa¦ß’üŠóŒòîª endobj 624 0 obj << /Type /Font @@ -9104,14 +9127,14 @@ endobj /FirstChar 58 /LastChar 62 /Widths 1120 0 R -/BaseFont /GXTEDZ+CMMI10 +/BaseFont /VHQJER+CMMI10 /FontDescriptor 622 0 R >> endobj 622 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /GXTEDZ+CMMI10 +/FontName /VHQJER+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 @@ -9135,35 +9158,33 @@ endobj /Filter /FlateDecode >> stream -xÚíteTÔýº6
"Ý!0‚tw Ò 4HK13Ì%Ý Ò]J‡€€t— -(ÝCIƒt¼èsöÞg=ï9_ÎÙŸÞõÎZ³Öÿ®ëŽëþݬuôyåm¡6 (É+È' лظ!ô .ZPI
^=½àN/ŠÏʪY#ÁPˆ’5$0Ù”@@€@PRRŸ …yÁÁöH -sAwÿã@}€t -x -ü¥·uƒýÃæ‚ÿÇïá¼+ÂÚ -qöØ‚ìðùµ È»” -{_ó¼ / ÚæŸ±$YjuUÊWûUê¦Ñk|v½úŒÕßNåÌÞ–ÚÍ}àËÂÙ‘G:ÏÖ$Î -â·xO˜úÓ(Ú{oLcËTLÀµüYWÏâÝÃ×&a8ÞÞ)g -ÿ·mk9ž€Î E°Z¡uùk>ö‡{g…°!a|¤Y¼sDV{²~çdlÕ`✪¡ç‘O°£_6bѹo:%EåRÜyȿբÎJ"†Ö5ÅÇ t’¡&2vï“æ"^‘"_þ -ÛûÑÁêàœfAª•ØÇÔŸf¾ÙÙ†*à ->¥Ñ}S´˜Yó¹RC7ky©6\6ûfÉR%ƒ ’vRÊ7÷s5b…ÈÝèF¾,éë”ðA$B˜XÌKhB½™õ½†]^öQÉfLAȪqòZ…&8ùãFÓɃ·8›TãàÐ!îoÉeWa^æÀò°“s]HKègÀ'ŠòïͲ¬³oÈ4ð‡™71_îkt®¦2ƹ}ãªÛ% -IAÓYë¦îµ}4bðt–ïü ¡ºƒ[E´³Æ SY06ÿé®®é$zü‰#‘wQ#=†á°H$ðžrÄŽ‡Å(iú6ÏçH³X£ú¬¨B+qeú›LÇõAažÐ}©‡Ç§^LÙH3Ô¸-Ì6‡Ø›ÔÌiÊÞ4y»ÓfY&u”õuèëâ(ßÚQEZ×OØD‹
‘‹dL›_:j½g¾åhUfîº÷zÎúùn•Ñ¡ö{J -qÕ…0dÒä¢?>`¹¬¾ïá낉9eϧ$o L"üuÙêüõ¼…ÝÓ)ü>+ÜÒZT'@u:¹è¹Kv´P»"ó%É—Ê/zTݰ…p;‘`}F_ùÚÞ×y[o¥çd×,Qõ9 <õ½yk;ÞxœÑ%¥©MÑ•Va]@_æH ÷Ù¤ÈÅÍÉÉ\ £3&ìW#‡Å&¹†ý ñâÍ* -¹Ê)š‚˜S=(稚@S¯^–'$Ѻ/Ä¢‡oy¼èÆBSF{v<é"²æ8ÿèŠO#PE]ìJáHãò‘ñIŠÅÞ̤ڊYަJ€‚Ñ4"Îý§€ª¯òßCÖhLGu¡š§ô¾Z¸‚è|ÇØìmø9—ÃyÁbV8‰J÷ —Tû{Q‘ò$W}°eö¶ƒfd§F;tª.=—Ç^§øƒ8À{ ³n²®éòxbß´„bÂDÏCY0‡¯2Ö&\só¶%ö½“8I8Ðq8P¨aèI«9fÆ£y·¾‚}‰nBRÀîµc8"f|Êb¶ÂÊêxóXäãˆài“qÓ‹væ@…taw¬”~·
¼}³iÌÌ‹M\ݪЖ“_%i@u³åmYj`ZÄ3™v¼}U¢ÛÉÉl -Ëå'P îLá«/›b.³ï€"ðĶ‚{™Y›Oš{Ù¹~=mééú̲|’Eà·Þz‹õcà -H¹(B¿yO2fV¥Ìë™x3Öôf—+J·§ˆà\¢4BO¶0Õ$düÆÂ䑣߱9$YÝñ9áÓ6J°X§=Ç'âÄ™Ç%vºKïüý9W832æÓT?ãº4æ¥òrù½ñ6qôpý’Õ\=NAÃ[r–€¬L-5ža8Fâ J§f‘¶<wq;¼»r.bü`ï]üÈ©ÄÏ^‹Íœ’ö)VéGZëªg°Uór9Æô©¶²DŠ·0ß
è8pO®sÎi×REEnž™Ž¹côK'yÓ-`§ä³Þèеl5 -ùqÚËíϧ+Xð'.~‘b~AKBë§J÷(¹ø,(%iÜ8¨‹ªsÁjs!1áöÎh÷}UöéúâʽÚ}™DÅ¡B8ÂO.Ê"â4^üfä~ÅÃ">^å1³Œ
¥qŠe–릱ìÇ¢×ç¨7¸ý n"º;ìMÔɨ:§ûL -E§m©%"ÚÞÕ·oÕmè¥^y~N¼é8L»Ö¢ia}µXUÛh¸›/ã‹SO=]Ž?}SrERÜÜêÝq]›ƒ¾`OOjºév -ŸU¯î}KkG†´r0(‘5XµÄgC¼<<Óiwƒ{šEÛº_Gƒ$½|˜D2¥÷JÞ„çÅ®r²2ñœ˜Éá -êé->g¾ÎNÅäPÆ»ø€AýRŠ~óÀÞˆâ@™Åq}]_'ÜØ¹ñ
xÜX—Ïzd"ͤØ÷£N,Ò¸odh Šm˜ÕWqL³§Z6ʪãGFòLû3žÞ²n¯oYa.{æÎ÷µ%3¸jîþtŸùF-¼`pÝY?º¦3Š{”EcÜæQùÈM!ðæI ½Þ$yVò—ÞNÎw8Ó
_Nο׿pÿuhaOn]&²ø!?×åá*f¶nB÷kÕêâZfŠ’YÛÕQ+§\ÏR`Û…žî³HòÆ„¯T =qïÑ¢[iðéKqS—n5dúóŸ ~w ‘”ÍG)Q›By¥.LþÛ{ã'¤eØß -GL²~É=¯â‹ÕÌäÜH¯Õ =¹÷ªyçÇ8tŒ0z¯ ,~ÕÊñ@ÉCMJ„Î$·Ñ"/t@;··rkÁHEsü(kP0óöa©aýñŽ'zk`ˆê¾S?ãØÅŽ*}ÎöUÉN.\¸„ó—Bã_Øh¬¦$Ol,{^œQ#_×\òæ%Ë
H#1IÓm¹ŒUq#”ìúÃàý£W91¼Q†÷4ìRTáð##Zã¦W¦7“'q€^’Û»r\Ô1eL½9Œµ…|”
ß÷D©)L³~<83âã¾O3üAX;·j8¯Rw˜N©$üeQ¼›¸•÷ZY]z¿ª¸ˆôÝ·‰°|N¡¬ÁUøl”©cüåUð±0—yýmhÙҡŰ@þ -\Î
y1èi¸óâŸåÎkV®ªrŽi º.·¯&)ˆÇNwãxÍ=Ñ•ºÁsÄžj>%-¹¥º9`†§CR,søsß• -þ[¥=µõOWsO'¤JÔÞ¤#å¤»ÙæC -˜<K?±Ë1ú™G/kÏ–•X®3[CpÙ^Ï*§ÅåH+[¥ŸSWù’ÔëÖŽDL›»ºXrö5;ÓÆJ7ÍÖñ›P ‰³•'Y}&“eš]Þ,:©3ŽZoçh¬ìµ9‰Ä®cLg
¸»ª[þÈÜÚ»_¢â#û PÞ¥F¿`[6<D2c©ßiW)F1™'›FÔÒß*‹r€:ÎàRµ™ËzDQý ôa—ö3¨ñwƒ¥V0Ð<K ›æSÍÒ`7N•šG‰¤h`ž„,â”ölL¡›{Kôú’5ûBÇ”úZb›íòWóX -šÄm™2.G><¦·`Ául1E9¶‡’ÿ@rd×; ¥CìÆQa=¹ ¸¸Ð“J‘ð˜©:é³ ï²¦Š{ ->ò³ôŽm{˜öD»%%,
Ó:Ì~fÛKkûõTÖ¶Õ49.JCYl‚ý”qdFMHeßß.lrÂÂ~“÷¨Èp©^ -™”Â¥<Ù€S¥—…NIÑÚ
ƒ)¤qUé>j,?¤-»Aî‚§&·Ÿ¦+儈²ÂÖ,êðÊD( -OŸÀáûePñˆ4–ÄÒ¶{Xè¿I) ›\®Vœ]Á‘"‚SÜU—ÉtÏfÇØC{Œ†ÚÖÛ—XÔ0‰÷¡m_íAÀØOø;óZ.tÙròž³°^o¢Ý€-Ì#ÊOýD"h›‡Kâ|KZmñ:™ü:åWÄXáòPÍJMÌHrˆ!ÌTRhÕ6ïÊ9ÝÝyÔ|+ú4”›¸â2è|Ûó¿è’3*dE57nN3ÞŒ'°³”<ù~ûJÕ6Ô@£ûaûMé—ç~´y‰³Ì=záúÒ[Ž›Û¡´t“é?5í„öè¶(yš‚Þ6}›}¹Szƒ‘ªT¥[${cÃ_ÁïN„â³Ô7TG“OFp>y¡
Ñþ9¿Yé^6¶’+ÀMÂq0<H.ƒÂûÈÉ®6ú¥ÒÎPšÙ¥$ª;» -“‹c™Á|+¯êb/h’QQxû,Ðrò—èÁΖ2xl‹?Ýïç§hÛ.žœ2À-üÉÛ(Þ‹9Z×2L;z¸6½ÖÑÄŽë¡8ÌH"¸†7:NÃ'ÉâCüA54Ÿ’߸»eÚÊ¿ˆ«[¬‚L$¯kÜÄô+Tñ ³M@”Ϊö6½ôÎ2aÂ×.ľh±ð™Ÿ>“!QJÓª^|دw",šðôÍãŒnWwÃTW^BòÌÝU-áßxô–àÄuCíA5cŸ«üXóýÈi=ñ?¤›&tëbª“§ÏôÓñÑXˆ D(¨†¨ˆ$€¶;ƒÑ: ¤/dÚ‚Má‡Sè0ŽÀ¨›¹~5“€\ÿ’~×Án—8çÁ½æ¤§.¬Ì=9¬qn|1ûºC¨ƒ¢UmE‹y·†þk<Õ†Ü":v¶š„>;áF]Ô*&×{ítç¾GD4¦³Ó;ª<gA ç|¶>›H¸5Ìá$®sÓŽÈ.N„¥™¤DÙH¬UíÎUAŒx²F9ƒ•’ù‘?øˆF*Ξ½õj¸É*‘_m)Œ`"a¿þÅÃo\¾Ô·ŽîšAyƒË©{Ç+<T˜qœøÝ¦CeÖÊ\q«ß_,¶›ARBE©žÙ®!m«1|‰Àª±ï|¥ø„‘ˆEøÙpÞô¥H‹^£áW¡5¯®ôTê1Öq¤³;¸Ï]£]ØNÊŒg/øhV8/hB9ÒEÚÍc'C¤shÌéÄQq_ØÕ“'e‹)bqÎKž×œ2( Ü·gøæTþ0ŽÌ=ú‚Ü6¹šÁ‘×Âr]~vm^×ë-„Áß™F_¾%;A°×\rчøW¾í¿ÉîÖy>ÖÒKJ¾Ð<®;ü}Ë9æÀ"Âd‘w<‚U™ÞvÍhR¢—ÌcÙí®Ý;È•(Û:2 -‡Uwwì%óSkå»gí”ßV™Qzjк½|À4Ø×nOš‘6½ˆ±‰q¤öV:8m°ÂTD{UIô°áo±–W’äxŸâ=9?Éä„ç&ð¿üáÿ€ÿ' +xÚíteTÔýº6
"Ý!0‚tw RJƒ´ä0À3ÃÌPÒ
‚€ Ý¥tHw©€Ò]C§ /úœ½÷YÏ{Ηsö§w½³Ö¬õ¿ëºãº7ëCm=^y¨5H +Aò +ò H4ÁÎÖ®]¨³&TRWdç +¸Ó‹â³²*ÂAVH0¢d…IA6 +¿a +‡ß‘üç +ä7ÿ@˜²måµ?ª¾€e"&`€Zú¢£kþþ +‡á[£0oÿ”ÓŸÅ-ןâÑ ŒÈ˜ô1†²‰¤¬2ok›-~ãô„½«¿·§»õ»}•ž;3æ«´![¤¿K&ýý¯hJ.9T¬|ܳŸ«VÆg(5½Gö+`P^¨²]eÝIÞ†Î5É@~êB;J™ÿûŽ•ö,„VW@û„"HµÀªì
ûÃý³Ø °2>Ò4Î)<«-I¯c"¦r aÖUßýÈ•'È’Ñ7±`‹ƒ<0™”¢r.j‰øÉ¿Õ¬ÆJ$†Ö6 ÅE“ t¡ÆÓ÷î“æ ^“"_-IÀT“›¬MÕz**¥=K̦u"åóß‘2pQ·)Zûž+ +iÝ0Ç[h9FF¾-O¨ÖÄ“{-²]úô©\V–õQ¨ïæ÷Xû3FEø±Êý½šñ–=sƒ–/u~Á±¤^Ì/]û%vñÍo›$>–D¦_Ž :–9SeÀÏôê{Ò¶4:ƒ>\óÝèûîÃy ï.ûäFå½Ó}çú·ë‘ëÍöÑ$Õ³©½Þó*Å};eØv^Y‚trËõX'Ä63Ñ›çÁ†Yq{;Ìjv†{³6^è7Úšs©¯7¤Cc®¢ÈÏ'rn_eXœ–*JÚy>HC‹ÎÅ’QýD^)ˆU¥`qÏÎT?=_€qƒ‘ÞvMÂÒªÅtÞÆÁgüåC‡%iýâ§ïéY½ìq×ëc“Ñç1Ÿ õÔ%Ó_„š—„ç.Ž÷v©éË–R"ÇÌ=aH
•¸ÛËÙµKEPs'¨‘/szjqûà`FÞd*0éWyÐT/‰¢áºÛ†¤aïÓˆ EqLWtI•“ðû0”ƒ”œºõ˜Wp‡¿z±Q°¢ ÙlÿgùçîËrú/Ãù‚Møg<‰¼Þþm×âçØ„ÙœÍ·±¤–Z#¯0ÚÃ-+C÷G—ÛYíRÍI5z™úRÍ6»#ZQ¥XþC§T"º ïŠæÓkÞWªè¦mѯTǃJgÞ.Z(§DÐNH™áæ|©B¬¹ÙãÞÃÈÇ—%}k•Ü>Ì…„kƒy ©73_¡W³ËË>*ÞŒÎ^5JZ+× +2ÄËPvôvª
nùøLQö£I–uæ-™:þó&ÆãËõ.ÂÁÆX×ï\µ{DÁi"hÚk]Ô=6‡õŸÍðý‚ÆWµs+‹vT!aÊóFfÛöqajŽ¢ÇŸ9xÔÓѪyö; ‰2ëÉGìxXŒ’&ïr½4ŠÔ«Î +Ë5V¦¾Ë4rSä +}Ô“zx|qúà夵4CµëüLS°qõÜçÁáÆ¬@Aãwë0-VE¼P{io»€žÎÓ[[ª«ºqëð!±~$rŒic³ák{ÍO¯éïÙšý„{n=3¾>[¥t¨ƒîb@¿júI«Ð÷¼ñæà\5#!Yÿ4¹È†OX®«î»û8cbNÚñ)Éë?%þ¶dy~‰zÑÌîávŸîn)¬ ºŠ‹XðØ#;š¯Y‘ùšèC囂 =ªªßÂô¿·:£¯xcç‹ë´£;ŠÒu´m’¨ü’žüÑ´µg4Æ€è”ÒТïL-·Ê§/u „{oRä`ŠfggÌ“ÑöÅ)ˆ‘Ãb]B—I<y3ó—nMáñ°lÐÀárÌy D1¡µÕcc3ÆÔ®2ŠÆ@æwÊYªFÐäëWeñ‰´nó±«èa[î/»°Ð”‡ÐžO8‹¬9ÌÀ?¹àÓTR¹Ð‡;Ð8b|’l¾?=¡ºbš-dŠ©ì¯ O4…ˆuÛPñyúÒç'k¦ƒšPõ3zM\At¾clöVüìË¡þÜ 1KŽ¥{‹ÊˆƒýÈy’«^Ø{7Ûa²žS½
:YšˆMŽe/‰U\&ö÷êï(€¯k8$?0)¦7Öu*˜Í€Wc¦±yÛœŽ@ûÑÁFœ(à0 T?ø¤Å3ýÑœkoþD»97>Ñÿ-÷Ú1³:e1[bf¶¿Ñ~,òiXð´œÉ¨œées€Bš°VrŸëÞéfÆÅ&®NeHóɯâT šéôÓh-Yj`$Zøse™6¼¢Û‰‰zl +íd‹¥'P î]L᫯›bÎ3ï"
ð„Öü{™›Ošzع~=kîîü²tœŽEà»Þr‹µ¼a ¤ €\¢ˆß~ 5|Êë‘p3Úøv+R§»à%\¢$\O¶ Å8dôÖÜø‘ƒß±9$é)&ºãÂ5 +¦”`‘v[¶wø‰sÌ<tÞéÇ®|qfdôçÉ>ÆuiÌ˧ȥF;ÄQCu‹–Wp5ôXu/ɲRÕ”8†¡ ´z‰'(íêÚ²Ü
ÄíÐÞʹP°Ñƒ ¼÷qçÛ=æ»›Ùõ$m“¬Ò4×ÕUÎ>b«äæpŒêQmeŠma¾ï×¶çžXç +˜Õª¡ŠŒØ<3uÃè“Nt?¦›Ç*JÑÏc'¼Ñ¦kÞjòå´“;˜KSÈ7çO0Xø*Åü!œ–„ÖW…î^|ñEPJÒ¨1`@U)æŒÕêLbÌí•Ýßæóºô9Òåå•[•Û‰:ŠC™p˜Ÿ":L”EÄq¬èíðýò埅|¼OGMÓ7”Æ(–X®G³V +ßœ£ÞâöÅ»Š|ìj·3V#£ê˜ê51¼*^ W#.ÀE·–-g!‘ÝØ±™øAuÀP‹«JÍØ&^?¼úBm¸á€
Æ'@.9¤žn—z#J„n¿Ä=¼ šþÕø‚D#<"Ú+ktRº½‡¦šÍRáNêÛuxŽH[•›þ¬ÉéÊ™€Ý7²¶¹9œÿStÊÚ€Z"¼õ}]ëùVíÚ†nÊ%g{ümûÏÔkÝAšfÖו5
{y2>8uÔSeøS÷0%W$ÅÍ,ßO×¶Úë vw§¤™ìø£zt5’ž…º°ŠÅ~ª’–è(®&_=£Åyèwu_Ò¦¸¨ý¹ÃiåæÍ|Œ“@®wg¬Ëõ×¶Ãô7!ƒßpu3³J'é¥Ö³U²€r>–חп$Ë¢(¿ÏŸ×¤»p&á7èèÙ©EíV8¨ü
ë0²I´âcóJ‘~GÇŽèLYFÊ;¨„ÜÛ›sãë¤Ð¼–˜*£uüNÊ=Cp]`‹¾Ïm»»u,غ}$WÓK~»ÌÐPCqB&¢kÃ|*ÁŸí^ŒÈ¥}µ€®ÇÖXcbB*4É×RZÚKó+Ö<TcL=Ûz‹é=v/W¯ìɃL¯†[}S´ÀŽ=ÐŒ¼q?$H$É×oC!—2‹;=ÄÏà„€³$RÞ—×2;g¶;Ú!óa ›b~§ƒU€†|ugm<¢²àyÕêþ÷ÔæqdpƒY½es\ÆÑ1ÄÓÝ#v/¨»I´µëMÔHÒ³Þ›I$Cz¿¸þmXnô¡à*'+Ïù°©`³Bs#jù4ë*)ÂÈŽ´Ç¬ÌdúÆØ/ó³ÝO›Œ9¾l‡/nEúšÛ¢CÓªÞ‚*̈́ɣÜëžVµÙ-TÉM¬Ë@¡¾…C×ý“ï+ï=é‡r¾©õ÷.LRFüx¥³á‰Àl•mµÅóô5µåº`—ƒ<$)52 +âFµì¹VöÆìJÜWèÌàB!í²ùŸ`ó¹l¬èÍ?l'O+ÓˆèL#ÙKsd{/ÂÚvŠêƒõc4ËB°2ûùäÖž¡U-½dÒ©¹PEÁ舚ùåÛ°Ö®«›oùµ®òŸßà”ç—áÃY«#Wm‚ÙEv’±u\¸×7è¸,$)8û6: Ï®]õiìßÔBOÖ×™8—òÔn_Hk3Ge%|NTؾx| _FXœìpènÞ«wÓ²|‰ùDnN Rb&~š ‹Àük¿…ÐϨºšG,«èIy¢›»bÊ +,,MÏWîhÞ«ÛÜ“»ÝíÀ¸Ò5i• #BŒìZ¼A…´êH¬JÖÂÌ"Â~ðTã¬wAT>ô˜WW$³¾ë¦ÉÆ”“xg?†ÅGü„œoJ)¡‰&®Ñ>Jëgäþ&úµm¶#pR‚ÚÂ{bþŽJ0,’†ze[½ãÅeãlBÊ›}¾BÖ•F®½Ò¶#<¹Iy´y¶ÐƇ%pXEýëî\¿xÒ€½îíZïpãEìòË,}³F5×!çå!0Ó!–jÑ ã4Ï—ÝÑNOÙ#†¸tãµêÜ´D
¶¶?s°¬‰5[<õiy%” n‰„'¡Q«¨ÈŽ€™…ëK¹ÜÍÆ1$äN2u@÷Yz/.xª$ݸó¿c9±Ì€™é8ªã´`%Ô1›qkw±/Ó°¿]¯…ß”‘u¸¡D²LL¼é)B÷1»{Š~ŽŒ±ßd¥`r<Å»øˆAýJŠ~óÀ¥Ö€â@™Ær}['ÜØ½ññÜP›Çzh,ͤػ\+aÔ;<ÔWÁ6Èì-?¦ÙW)aÕ¶Ï¥#yô§üOoYwVжÌ1ç=ræz[ ヘü]4ö¶Ý¦¿SÏë_`wÄl iàeÒµºW<rU¸yRÌG¯;AÞŠ•ôµ§ƒó=ÎÅTýW†“óu/Ý~ý4·#7€.™/ËÏvº»†š®[ÓýZµ¼¸–™¤dÖòeuÐÌ.ÓµØq¦§û"’4‰1î# dGÜsô„èVD|úJÜĹK™öbÄï$’²þ$%j] ¯Ô‰É{ïpì„t£û{Á°qæ/¹•|1œi5ê´'÷^7Íà,AG £öóKãV-•Ü0T¥DèŒsÌsCúµrz*¶æ}T4Ço€²úùÓï–èÖïz ·d©î;ö1Ž‚m©Òfm^ïæðÈ…I8}-0ú…ÆšoBò¬ßÚ¢ûå5òuQ +e¬Âg"Mâ.¯‚Ž…¹ÌênCJš äõc½ñ#4Uwÿn²òà¹ks”o%;óô›uð„”×4¬üäF´Û +稦 ËRÛj¢‚xÌT®¿çì©L0GÌ©úPÁ3ÒÒá[ª›Cfx$Ù"›¯!ç}I?£Rxµr‰ÿ`©Âý˶צô–#Ë¡1ægél_Ýsß3Çû5õÍ6ù'9ÇÓ?(e+y‡D=\¸‘ J Dl™ŸíaòáHœÌ®Ò†Î¯à¿SÚ×W]ÿüp5çTðq|ŠDÍMRNº³m.0©u|í,¼ÌL*¿½Ra…:˜çˆ1â0T°ªIíK5Ò8¸4‹õJÞw äåU~N’S¥.|q^Õ?š&ç•<•†IýÀD(ŸÉ£xà3»Óª¯YÔ‚‘ÖLi±Åš³—í
ð¬bJ\Ž´¢Eúu¥INÍpø”©‘‹³9ù +‘°èÉZé³À²&Šû +:òµðŠi}˜úD»)%,
Õü™!üܦ‡ÖæÛ©¬M‹IrL”†²Èû-(ýÈ”šÊ®¯MØø„…ý&÷Q¡Áb@j)…sY’>§r’¢•;SpêÒ}Ôh^pkV½ÜOunMgò e¹iäÏ+c!T&Eû‰ºvÔã€&KŸJ6×Zù"ÇRŒA¶Á•5^,’iÏϵ3‹¯är+#s£µ¦Q’µ«˜Ùî/›*Â[=5? ¾ïäѽžq¨z1½žøˆ»1,m‡ï—~ù#Ò;ØÞÏ¿MJ¤2Õ¢¬rŽdœ¢ÎÚ¦{Ö»FÆ’Ø£4Ô6^><ÀÂú ¼
hªòF·áï½Íj¸ÐÕgvËÈ»ÏB{¼ˆöü·0(?Sôù? +§m*Žõ)yh¹Åëh¼,:xʯˆ±Âå®’™’žhM˜¡¤Ð¢eÖ™}º;²û¨éVôi(7qÅe6Ðùvæ~Ñ$¥—ËŠjlÜœ¦¿>Žgg)~òãöµŠMˆ¾z×ö›’¯/|i>ñgš¹÷Àõ¤·6&´Aié&ÔÓ¶5l…öé¶(yß4~Ÿyµ[rƒ‘¢”©S({cÍ_ÎoF„ì½Ø;XK“GFp>q¡Ñ™ÚžÛ¬ð +]Éà&á8 —Aá}âdaWùZak 7ÅìŠRÕž]…ÊŲLc¾“Wu±ç5Ȩ(¼¼çéôI9ù‹uag‹é<6EŸï÷q‰S´ŒîäMLêãló6ˆ÷`ŽÔ6ÑŽü\›ZòOmodÇuWâÿI"°†72FÃ'ÉâMôQ5$’ߨ«yÊÒ¯«K¬œL$·sÌØäTñ ³;¤öªÖ½·ôîK2aeÂj—NÄh‘𙯓;!Qrãªn\è¯÷",åð´ÍãeF׫»áG¨=DòÌÞU.}åßxôŽàÄeCõAc+Ÿ‹üXÓýˆ—©ÝqËRŒã:µÑUISgziøh,Ä"Ôƒ”EâA;õÈÝ(ívÒ2eΦ°ì2„#0âj¦WÅ$ ×·¨×y¸×)Îyx¯)ñ™3+sw6k¬+_ôÎÅ ê°pUKÑ|Nû_ËOU¾·ˆ¶mƒ¡÷n˜a'µ²1Ãõ>AݹÏÉÌÔ® +ÏY È)×:n³?‰íØ´%r‹ai$*Qg4kV¹q•Ó!ž¬QNc%g|â:¢‘еcoCk¹j´LàW]%ÏDØu÷“/ñ©¥»fxºÁåØµë¢ +õ§h«XÒ™]Ü.QÎl'¥†Œ3|4«†œ4ó!NœÛt¶sØIél3:qTlÃWv5ÄÄIiûB²X¬Ó¢Ç5§JG çݾ•Œ#cŸ>?§šM®z`ø°\§o»m«çõz3aЦ‘WïÈNìµ+—\ôÁ~ïÚÅo²úžwœ…M©6÷’Ï7éýØrŠ>t¥7^à§GU¤µ^3ë&ñXt¹iõp%ȶÃ`U]íû‰ë¼AÔꆹÇn™»e·•f£”ꇴnB¯0Íô¶Ù‘¦§N-`«B¬£¨½”NNë…0Ñ^W½lø™¯å':ܧø@ÎG29â¹ +ü/øÿàÿ +Ž„:[ÁñÿâŒýendstream endobj 621 0 obj << /Type /Font @@ -9172,14 +9193,14 @@ endobj /FirstChar 48 /LastChar 58 /Widths 1121 0 R -/BaseFont /DNVEPL+NimbusRomNo9L-Regu +/BaseFont /NCIZCG+NimbusRomNo9L-Regu /FontDescriptor 619 0 R >> endobj 619 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 -/FontName /DNVEPL+NimbusRomNo9L-Regu +/FontName /NCIZCG+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 @@ -9195,21 +9216,17 @@ endobj /Length1 807 /Length2 1423 /Length3 532 -/Length 2001 +/Length 2004 /Filter /FlateDecode >> stream -xÚíR{8Tëf‹4É]Sj³¦ -3®¡b\¦-ÆhCb.‹1kŒ™i%6vE‰ˆ”{F)mÇŽŠ$—Úê´9*Æ¡„¶]Ôlí…]ç9öŸçüuž³ÖzÖóýÞßû½ßû¼¿Oãåm‚gÀ4 -ç†ÎF$ -Ñ S™€7L‡@n¬)€g2òÂŽ€Æ€>È0Eáp -bÆþI€£Ø<.Ȉ0ä°–SýÀ%oDñ¢–wݸT&Ddz˜ €]‚ $ -k8åyío}·W'?Í’e–t¸GÖú¬i(Kä%º¥bŽ5Úû0™}*÷ɼ„"Å5nð'"ÆŽ°7}H~r«þñÌ+YRïàƒòÊ¥¶ü©»¯‹¼]|FWþ‚‘i ä×µä¥XÛøDLß´ïk
,0dÕÜèòtË´ƒª9§W<JNŒHS¼±õù4ÜÄSÿX¬X˜=¿ÿƒÖI5z“®ù¥±&yÔáMÙ¥4U•«Ÿ[ï‹ó€0o ‘ÿ»"¹Ã-¹@#Uœ§íÜ3…îrM'ò'·56ùc~×·,¶Ø~iÏÓËØ©ÓÅpUÆ–9Ÿùqàì¬íÅ&÷ìÃzCG&©ds‹2öí7 -ǬiŒØŒhåukÆá”gÎûjãQ›Ø9ŸãyŽ¢ |BI -z¥ú1ÂÉHšH¢Vi½»Ãk¬ -PÆ©JñTßÔhìNIµB™²§«2Zϗܪ3éU5íªéˆ³Ÿ/#MØv~Šò ¬mj-8°VÈXY™ŸãË|<¥¨7é—.Sÿ‹8eµÃÝ£†ëL{'î€B‡µø$вÁù§SÏ̳ͽ_6#º¨ÔC”3!“}ùè73ÄSÝ-îrßËÞ¨WSɵ9;’4 é¶÷¼æ±¿_çl¿>*4®lÙ¬P¨}N:».?úÆó™3^7ÇÏO7j¾×yÖ-³3û¸6Zµž
&Œm.¡<OóÓŒ×D}§c8újîNºôÚ”Sβ®JCMZoÇe†O<¤§ÿ*Ýñ½`R±Hqbåu&jÓW²×4èË5ݪѩšicТzî¥ŒÂæuÇ*Ú}iñZß~à8j7¥$Bm—m{bDK½e@óœ²û¾ÐOúøÜ
[¥BÕê÷×Qǯ[âîÕõéÇÐd‚" éo×6Ϥ8¶| -lKßµec¥aÎÉÓ˜gê¦f6^=EÕÁ¿¼|ûú}žkÆLAqRÂYõ‘ö†’ÜÑ`?¸Þ{P]XÖŠ¦œCÏõ9möô©»:vºàXWqîÚgÒÊ"i
ÏŽ4<{ô"0¼ô‰ÃLüiÔµ‡¤ù–›¥r‘kŒýÕU9úwE†
›tÂ¥±)'~×3…½:-߬)Ï]«—é6o`k 0‘¹v9z/_Cnþ¢KÚlpc½ä¾½üµãö¥³h~ÍQÀC΄ŸÅ»’ج²qËZ·Ÿ&.$©µÑÙèÝ«˜;+ì¦ÙAï’¯?\@û1¡èJFR_Hæ?éä‹3nÄñ»<`x4?ÍpeâãGyá?§µ_ÚÓµ*ùÌѨ£6ÖËøjæï%“ºí9nc¢'=ê¼ÏY¤û¡·Œ €oíå“;½ =µ!Uc
Y
vkÆÞ ÖE!öÂŽ®·}Ÿˆó|uFt¿¢êÜ^”_Íž;Cmî!˜žÛäU·†Æ\jÖÂ7Q¬°›Ì¬iĨ|¥;SzÖOEûå¥O):n¯óØI¡î}7»E¯úÝšà>ÚL<nü$Kcħe0t9‚Q}X™&ì·¿€5¡Mô%ñÕì(òz -’ÑÈJKH(|ži;-”ZiüFÃk_*}4™vþ4ý•ÜÆŸcÔå
ŽX(ï9<DNù˜àBÕj•dªÊr]§{"ÝïYŒÓªJ]£¨éP²~¶ÎeJ‡æ¡;aÜ]¦3ì¡kÓ¸ÊÕ®o[ò$áʃ“Û”ä2zGÝ)ê¤òvH>ĽòQ¼ÔÛíÞàëWõá†oa\wnÖœû>¨ÿüOЙ •Ã…£¨œHÔÈá»endstream +xÚíR{8Tëfi’»¦ÔfM.‰˜×P1dÚ.ã2ˆ!1—…Ř5ÆÌ4ˆ»¢\2‘K‰ÈH"¥íØÑE*—Úê´9*Æ¡„¶]Ôlí…]ç9öŸçüuž³ÖzÖóýÞßû½ßû¼¿OãåcB`À4³¸&xS¼-àD"ãq +ë#§ˆ—ÿ†åâD“éA^_ê/mj4ÄŒû“ +X!<0†‡ŒpùkŽŽ° ÁÄÌ ?ÄgØXÙ$þ“Îã 'qï’å—:B’AHG=û¦Û¥F +Óª’œË»/ÊÉ:†7ô¸ò·¾›kRžfË2+:ÝbŒë>V‹Ô•$rÒ±G[z? N&Çœ,x2/á‡JDñÍÞ‰Hq#ìÍR^+ßh|<óÆRÖ³wð~Uå\GÑÔí×¥^†»}GWý‚‘iâ7´¦ZYEL¿ôïë
Ì1d•‚˜ª‹ô*y9+¥$E¦+\3~>
·ðÔ>–+”äÎïû yB•Þ¢cN~i¤AµSy.]Eùòçö»b‡B ܇Häþ®@îtI)VOÅk9‡ôL¡:gø“Ûš[0¿ë[V‡˜‡Dœs}z7•S×dn™SˆŸògmÊZÜré
ž<¨œË-ÍÜ»ok fms¤.:°CTØWš9ã§EHBmfÛç}Nà9ˆ‚ ‰±(è•ÊÇHÇÒ$OÚåöÛ;¼ÆŠÑÅWµÝÝÚÉhV;Ëaú…cVœ©xh_ Wßq²*IÚKòýæ`«¾Ú€*¼’>è@¾pɧ‘P–”<œœ'H}h¶ÑEÓ¾´e”¦˜@õK‹Áí”ÔÊW*y8+¡åù|É#‘^MË®ºÎ„x»ùJÏ ›®OѾAõ-íÅû× «ª‹òü˜§ô&ý#d±§®±¿}Äc•eçÈï´Ÿ Û6:Ýátéaí0ÛÜúe3cJ/¸‹ò&drÏýg†x*{Äý@Á›rÙkµªÊÖù#ÉÓò.Þÿâ4+Ãý^~•¸ýê¨Ð¨ºMW¾Dë´tv}Q̵ç3§¼®Ÿ™n>Øz§+ß%«+÷˜Z¥‘
&ŽéVPž§ûk$h ¾“5}5w+q}F}êI'Ygšͷã2ÃÇÐ3~•îø^0)J†Xžñb¥Díõ&ªAÓ—r70ìË55VïRɲ6hS9ýRF^wýÑ‹÷~}iþZßnàj¥"Ru—<m{Bd[£E`뜒Ûþ¾ÐOú„‚ÆR¡Jíû«¨cW-ðwú÷cèÅ2ÁQÄŒ·ëZgRFï| +êÈØµeS…aÞ‰Ì35S¬µWOimÈoDŸýß¾~_èœ9S\žœ˜¯6r¯¤©¢`4ÄnôTV¶£)§ÑsýÁŽº¾
—Çò¡ë
1N÷Zİ´‚<5‡gGšž=zqá‰ýLBŽ=êÊÏù¶ëVDQ¬0v—Wwæéß6mÖŽÆ¥ÿY\Ì–ôj·}³¶ª`^R”˼ÀDfäÊùo¾úŠù²Ýé³!Í’»vrWŽÙ]˜EóëŽ +ªš'wzA®õ¡5cMYuv{¦÷«Lˆ;»ãáÄ›~ÏŽÇ{¼:%º{±æ´7ÊÖ¿ÎõÖP‡[(¦ç&yõ¡1çº
Ÿ-KÜf¬]¤ xkê~φñ©H#_RœÔü)e׃í
î;)Ô½£ïf·HT¾[RÇGcÅãFO²ÕGvã5
ƒÏG2j)Ñ„=ãvg‘ &´H~ž|U[Šœž¼d4ªÚ +ŸgÙL¥–ê¿ÑZÃçJÂM¦ŸÉ¡¿Z±éÅçX59ƒÃæJ®‡†(ÐI_|˜j½¢LMeótO”Ûƒñ£êC5ik4ì+6ÌöÏížÒ¦¹ëLuWj»ëØÀ4®RóÛ¶B E¸êÀä6Å™½A£n5Ϫ{\¨[õA’x¯go·[“ŸÍ‡k~%ñÝÙsbÜø þ/ð?!@g‚Tަr¢P endobj 618 0 obj << /Type /Font @@ -9218,14 +9235,14 @@ endobj /FirstChar 40 /LastChar 61 /Widths 1123 0 R -/BaseFont /OFVUNA+CMR10 +/BaseFont /WJBNAU+CMR10 /FontDescriptor 616 0 R >> endobj 616 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /OFVUNA+CMR10 +/FontName /WJBNAU+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -9252,28 +9269,38 @@ stream xÚíwePœÝ².® <èÜ‚„ ‚»|€Af†ap44¸»'¸Kpî® ÁÉwöÞ§¾{ÏŸsö¯[wªÞ©w§ûéîõôꪗžFUƒ]Âb”€áìÜ\ 4=º]ÍÐß „Ùƒß G€Ì<8 -<΀"à÷°±3…~ùÿájj²sûïœÿnü+ëÿäü;üW °Õ£BìÜüümƒe@®@UÜÜ`ij÷xxöµÀ@˜|ùÏù>:qqý
Ó´™Û‚«Áÿ[ü½†GÝþTÀ©&'£#§ÈúßLÛ?ƪ]×tƒÿIG bñÏÅo*IIˆ+Àƒ[@ÀÎ#Èõx¯£Ÿ×ÿ%ì"î•Lá0+À€‹ƒ‹‹ðøÿç_«w£‘›C,~÷‘ÜlñØzÿÜø
›;Á`Šÿ™•ÿcýç -·ÝX8ˆù¶ò“ëPùr샂¨‚÷÷`&I~AN,h?þU ÙÍ>±ÁÇkü!2D1Fjl>7« ;ë2E ôãбSh”²¢¥|êgrë›ÛgÜë>í®ûŸÛ+3~:–~ŸikU2;*]åk¾5È4ìÄIã ‘rmægm7@ë3¸‘O”ŒêeÁ)¸AÄ%§Å7®o·7Ѧ¼jtÏ_¼“+¯{B")Ih’¾$‘DÈ½Ž‹ä¤2Î7\ÕÄ‚Òf[ì¾¹ÔªWÏç Dá„äË®©ÞåI…mü‚}7ã¨üèùLüƒ >ÕIÙ!ù@×yàmÙjèî;²TßsR‡Åãcª²÷Ý!ܤ ûJi|†Œ½é[Fo5ªQg_¬«œ®43=§º@OÀ×ÛIÇÏšÁ˜‘y©[¤áç”Ô•z¾¸T‰™åzoÒLQ’qnC—„Z«¾ÑÛJn’ê2ÿR8›4=4(|R¢!VoÂó=/;¬*%ƒ¥Bò›¼Ñxá9vÎ.n³´´‚ÙëPOæÒ°v/ѳ£=<nAS?Ö+ñÍì‘ÅÜ|ê§«ü¬£šd½Ï¬k¸c=«»7‰O#ÎV[±½ù—N+ypmf·F*Æ--ÝÚ…«ÓA¬Ï¹IKêT¿ûšUŽ¿ÙÄñ~«¦Å`íE>´ºŠƒˆ:¹$N“ù’ ötéTV×–jŒ³Yù"ûuoS*f2ÌÌþû(ú)]êõ›aWb¯[\'€üÓg×Õõ¯¸¡}õ¿„$^êîMÈñgÁÆRá9Åß×ö*•Ñæo§v?y¿ÜG¢÷òáYlŽuA?~åsÆ_ŠÐ|*ëdGâÅùPäß,váfð,ÇWdJ8øý,33 Ì<†ªµŸSÇ5Ù,SÙ"Ž@˜\äîçïc®ò<ÂÜD;e³®oUJùÞž7ÞNëu-¨.eºŒj„¼GqÈ–ŸàµºMá¡ÈªH¿¢yx‚Q/]}ÒƒøìÊØˆWK³”kßzòñ‚Üw„‚Yñƒ–cçtá1§•_Àƒ®”eˆf”“̧R²Þ˜f¦ÛÜz:øÂrÇJ€4º˜[G~´§LD‘ì¢ôëp‚|Ò§¾ÁûߪØf[Õ¦×ëu:K‚Ù¸ljHÇZ„R«"‡OÙ”‚ÔKº©ü<üSºäK·–Û›<'šâ¶µ*Ú]fWåUЪNo俘ùšPJaÜðngß;¸cÚlD¾ô¦§íL›û9äƒá¤³›¢ZYbc63,z(€†ý•^ªÞõ¼7£Ïœ×ˆ8ç2}7ÏŽ¸%»€:^+ -PßRY››œ+GFÜøD[“)o´N?Ö5 J+•6lÄûk?6Þ¡ °@³„®u´õ«ñ:¸¯n½Ïtgô¤ùzíõ`ÿ4Ñ=ÖÞ× 7Ð7ÿØí³Œ'½| -ó…äûuÕ—Tñße½Ç¾ñ²¼ªæävåÞú±=I]ôî9³üŒ™¦Kq4/o°Ù-PêŽ÷*pU^ógž¼Ç¾I^¯w?¥‘o?á0ŽEë}T@ðZYZ8Š¡³ïžnÛ¼µîÅ‹B¾Y&WÊfuˆ5Sâ¦gÌØvÊý´—®^|u
eØßþª¤I“36ˆ>¾Øª¾æáäê¾CUÆ7;·KA{®«ÒúT𢤛mª¨c8[Jux>˜ 8I$ˆû,´›â:ËN¸X¡ÔÞmsè-æ_gµ±k
P)‹q -™2pr+ˆ+D]ØÉ¡¼ò•‡ øøÞ&KA’ˆ˜.7CS*ÅÄ–dæ÷»Û5"œÚßÌ”~%}ûpêÚsÐn·—9T5êÁ…› ÙU?ב¢RÈYÀʬQÒú—Ú\•=•JêÐa¯–Ç™+ü³Í ÿ‚Œ¦].<WöšÉúK©7¶ÇûµÊ7.˜®Ý=k}‘…¼&ïûÀÜO¬²DüœçÙó
Wš¤ÀÝRÛgûHÒ‘\(ãvj‹Zš†ó¶ÿ»0ùó+QD~®_Ê÷ÓA\2§ÊO¹šîXmä²¢úAï¿“öÆN6»öœ¨ã¯2š3Ò®±Ï•ÝB÷ìÊb©x¢ÜD,õ"]ÈuÛðhe -ß—áeæ‘¶QP,mÂÅúCëc5¿d|ø4t©#÷Ó£ÊéÉ©®U+ñuõ7©J›†úƒsÎ\] -5
Ô(NÔµ(±¡þÁ^ -ö¾Z²Ó·õ0ž1IK¹³—/ùƒ¾ë«y²ßÓžûãÜÏ‚R=Ѫ~ÒÒW -½ƒó.Õ›|©WjhÐySçŽ#ž¬dD²W™?n“†[»Çæ¯Á:⤶ýšB°:Önœ/žxU\vKUq‰ñ|ñB"+=ËðöUt2¡&!ÂbâàÙå bëGGÃÌnèÜeœIÄ[Îl†j§JL˜äZœ[ža‘ñ€>jE*#PÁ‰±±u,*ņºú0ó,]M¥ªu\]Ôš+5÷ÊîÞ÷H/ûa…ÏMzÐë¡Ìúi†Òj†Tªó˜sˆrÛßÐ]ì5z¹˜§Š¼9~Zô]i\ë“Z'¡À!YÔ¹äu˜Å§‚_´ç€¥øàú(“8Ÿµ±ù‰Jãæ“çïP ú¦ú¢<騲¹˜ž”å߯Qý¢ÓÉFf±:RšBgzÚ6ÕäÎnÕç;lõ*vQ?Jl$=õ -X4›-u—Ód‚O`¤£K=~@]IhB˜ÿ/S](‘@Gµe<¦?G¶‡Ûš´Î1;”-*ÈÓð瀔50!€yæ¹ÀRkhrÖÈ ,6YójÞNi¯$žiûóLï!VFÔÒ#Æò½‘-c±Ç(¿7åq&Æè”_Pö8Ìsò䡉Œ†@ÕKÿøŠ¿ÛkÅÊ:Ù1dý•©ŽÊWÜóL}®†BvÌ]ì<xþXõI)7ȃÅNòÎÆ>3 -FÊç¾ ¡Ù8%á£^x›ÏUõ‹ŸrO°1z¤ßÙçQí~.ĻعŠ[ï©8ɿ̱þ,±´ôꇌCmäOEûƒÔw`šŠÒMB¤þ£œ_RM -Þ¬46Ü1Üò‰£rPÛÛà'oÍ‹“êÇŒ¥}=®ZšŠç¹[ÓÍê®›<ö¢– Gˆ¤©E>[;xÝÆäV&þ(çý(-“¡Üø¶â™>/²¼ì€«—[wÇàNí'*2Š(Q#*k9‡`§,2Ë×úŸ¯l¤=”“Öä£«ŠŸ+åýºÀ*Ì=ç5®
Íi«{}ôÎx-:‘|cc¥Ò‹õ‘Ê Zr•d€/&_‡±ªiAXÙþ+‰·µMq¼§ºöí80@EñtEâ”pù2ìzQª–H㣫žœ
áË*œ¦Ï¥Ô]Ö™‘þO¥örÂÃn«¿*Ó:r1Û°è¥S+d)´í}Aþ¦#oFÔ† ÓKos'mÁwÄĬñ’Ii÷1^…ãqÈÎã¥e-‘ò`~¾~Ýö5¹ÆEXÓ*m=¨öYŒy÷þèO=Ô‹¬l¥¯´¤Œ½ÁKE
Œd®• pÅ·…S'惱 ¥c]÷ÜÅ‚N]ÞsµkyI§G®Ç -gsã$¼Üq¬¾R¾šÎ|AwˆCÑ’´ÛS6ëϼèE-uuø]”ÏZ/»¯'P©&FÞ´5hî8ú.°Ó¼¨H5ôæ{ù¡jÂbI[`þ‘„³®s±êŸùbyu©>¤¾mt‰ -ÎQ^ûCKøG[Ô×è ¦ëKa,Ëóª -8¨b¡X=™¢hÓüw¦-¡ÎÛôî…5e-,sñv’«¡`Á5µî¹HNº®ùÁ–AèÞòwÑ!ã@mùbÈ‹«¦)ÄÔ»âsª×½ïKŸB[ÂEù›€‡¶.Sžu\¾t¨~è’&O1Ã1™_4%úæµÒÕ|ªìS##£Õ‘êÔ”ß|XçéYV!{Þ6ç~íŒDxq]]iW&g«2Ròâ0ðõ¢’Ëâöôʼ(J辋’š²;ƺk.>|3ù)R¸¤|Àá…–Yf8JîÔùs›è(²5NôÉ®¶WPÕÔÖFjÄSÅeC¢Î/u
Dn }{sV᫜]r³$\øµçîè×RîÈeÕ€ïlEžmÄ:IæñΕŒ/ÚZPÞi1†fècrQ¼1|õ^®Z=¦’Œ¿9«rš—éHVÈR:«W¸„ŽdÃHaûJƒÆ[I›°@Ë•?‡Ûf‰hÑò»[/r·ËPÆ€³|™#k†zÛ,8Ë8
_Ê[èÔ
½\ªÄ³¢èZ¾qÕxLwä”»]ý£¯)9ç,õj{žSÛö½\çÞ+ÝWdù7ýî©y¨ûË3'5…‹_¶
µ•Hrñw4XØÒ(MĵóÁ?ö߃N`S²¹¥îµGħ¿*té $åøœI±‘ªO@Å5Lžá±ëúgà1“†Î»åˆ´úÜ÷Ù]aÓu“˱ۉ‚Rø?/iõåÜ;ml/'xi‰j‚m„•=œ5׳¯xdcÛÏP\£¼¸jÉÊY·h̆k)Âw³w—{¤l?»j¡;I3°_½˜Tr²ôi•1}æô
üÂ>UP¿\í?ää…κ֘ûƒî0ɤ/jÔ›Õ4tP\g/@¹G5ÊíÛ'Ëì…
CÜì¤ê„A6©ÆÎžhœÙÏsüàÕ‹¥+€bÌêNËþ3Ìaj«&¢(çFU
;(æ-å•<åP"Ç`o•1¨Î M³í×l»·&zuFþÆMÁlwHDè 2îÖ]GQ“G©ƒðµaÃJš{Ò¬î/±[Ýo6Â$¬‰~1)Kl†öOèV3Ö ÖžJ*“ð$æ(Ž8äU¢d!|,Y…!ÉÔÓ[P¶oÚ}å«qÂà5kœø€¯2¹ìð5ïÍ[Ø_¶l¡’'Ú*7â'¥'øIyÑÅIy”afñ·T×ÜÆ¾uön²ÇW<ŒXâ–-¶âqOM¥ZúÐ{äøÈ.h¶{é2‘Þ
c&_ºm€ë¬h§óp5_%‰CÙUi¶Jï=ÇÔ}±®Þ4Lpv·ô%ÐONp(˜B—ÒÙê;Ç>õ+ʦԾEnûº1å¼ûY5®w°‘ŠtèmßäE¬U…g„Q>Û -½¾ç¼yØÙŠÛdhõmñ²6–_×ÏtP‹zåÆÐ :žLr˘«jKѳգfMJƒh>Så¾Ô&Ì>6¬4<Ñ#)jx¦®lD¯Î5úTÑì4XŸX«ÐRéB™JM (ˆ)É,^Ð 2k¢$¶#Q£õÿÆpN(Uþ´£‚“™¯Á»‘ %ËvÿøÉ©L˵MÞÓ6Õ Ã²]6þ#!<G½ðé´=Kä•àŸ£ÚÛ;Ñ>û ûÏÕ1||'×À®›R?*U'ð«û1S›9¾çÜê 'ûo‰øxz}´ñÏ'ñ ùÅ(qÁA“¤ZYâgqWrg±ïÜ|ÐËj(8åI È&ªfƒÔ‰úŤ´Ÿ^t#ÕÜáÅÄΓ¹«H@ýx]fQ”è‚1´>ŽßY,O©„AÕŸU_+ø"¬Ö¼¢‘˜½Y}vϿ⥫ªÊ•Äc«(|$!.Ç@X~“Z=™þºMÂ7i(G«‡Å¹†Ò§a¯J;_'Œ0sq¼üxºÎŠ@KÁ´}W¢uÓ“xàƒîY–¹Hc`sàAÎS*™ºCgˆí%¾’¸^Ÿ¬Í¾vÕýåX\a0Š|ÎìûÐ;™¼O)UÆk¦¿2u+ux)&”?B5¶:€‘yÓZááÿÅG¢OÞ,^ðÙÛOPtgãá".¦Î@Ê¥ó$¡h&ÑVTˇ㚔!šÞØ=a89&OzÚë`Û7üÖ‹OØg-ÄrÒÕefÉ×øœ(¢íÛ†t?¾7Cæ+áˆOiò¯Â[‹çÚ´£åÞ4¹!—b¡-=q±Ž!Ñ5®e0³Û -XË -ÜÕSáK-yJÐzš€º\"PÓµ•˜ª/·›o.ùZ,ðË0aáT0%$+¼Wt»šSÈ!,´¦–›Ì‘œ_ýh~:âik¡âZ¥Ä˜žÝ·úŒŽŽÔëãȵèpœÃ"J*‰¨ÈP^F‹8cU>°ã¡ ’ÇTeZ8/nïM\x:—ž‚×§[EgÞ®Ó£`PqÈCs0‘ƒ7i ÏQH‡‹ç‚^"“Uk®â\iUäˆv$x<€þMyEuÍSVŽ:ê¤ ¥Ë æëìJ¶½ÙæÿÌYÞÕM.Æ%;”_6ú}€!”ÇŠyû¬±ÁˆKô¬(9óµpó»mŸ/{Ôo)ÇîÝ~ªD‰+Æî'hŸ2&@ lãEC™\baZ|8,tfIùj¦$ŠA¨©VÂúõsZþHw$¸~lp׎&û™\ªÈaÒ+î=CLü»®^'±½ŸÁ‰!R÷Î Ô”y…¼ÌL:_VC DJÄÍN§åüª®£ué4\zk,ÈÏ¢>Ï"Óo¦ÂBÎÒC -–ˆmjÉÞ‡ö!S_"[Ù}w¾e)BÃ៯ıóÐNŸ7½køŠK/ÐñvÂ^3iV¡VÓE+°±…UDÙKŸ‰µàp?^k|ãž/7ª'ÜåñɤÒ÷r÷)f¿ÍÃKnáþ©li„«\·ÚÃ,v6æ¦ä²×RŒžò!Ã÷öáÝÊD¹×ŽohˆhŸMËåJ*l -ÝtpÉ$ùºÃoµ -„^&cmÚsi– ד}ȺªiÝIòhç¼ì6XC#ÀvûPŽ6ôžÃÜmÊ8ÑãMõQHǹÄùfAj’ɽ‡nßvT†<˜pç¸;f&yçX‚%)wÎÀ S)”C!™OÁƒ¢QÏd/ÐjãejÍc$)î@~–7C39µG^KÏn9Ç$*½nöC4,ƒTjÇ(=R&mÀd«×“ß³“+Y[_1þåݧ+¼„‡ÞoMƒèt‹e™Ä$Œ'’S¦è2®Ž¢”/kì£×BeF)—Q?Õoø‹W–ŠHÖ}£YY¹,Žyß´°*²¼ù¼‡¶Šqžïhwƒ›ô3sÕ‘/=Æ?LöaþøÂ½X!w<–(#`܈so¥|GlƒN·õÊï\Ã2¸½D1È&¬æ’¥^¯tÑntY¡ãi*zq³|]¬bبJdv‡¶/P;r¼e¤Ý,ßõÑXÄ]c.‡WUg(°~P$,„à;ˆÐŠÙ?<PãÔçœ*¹Bµ•íTÅeq]^s|úJ8¸°!e¬mª7¿|{}ßÌ‚Ì+N½j%™4—#ôÃäôkÕzIú"m¼ b¸j\‡âp|’@. 𘊠質;ÆyVy·ä–¿šXž{«~Ëöp£àñ½rC½Ï4
\ý%³qzql»f˜M§à`Ô8â‰hUÒ‘Š‚ó;)•pñJÜÏÜp·œÄfB
¢¾èÍUûçi•>òöéFMßaÅuÄÑ Û|?úÔ\ÁÑöD¿]èhÀÍ&š,.ÛçÎXkV’d:ò»;÷-¡÷—â
,‚9¶«¥c’¤Ÿx «D–®÷oc“Þ ò«K‰/n Ú[ZâŒ)ð4éEqÞ8Õv=íkìkw ØøÍTêU™°âd¿Ô à4
4¿ï6¹OKž0“MI4êDFÞJ©Eáâfﯳðzü¤Û+¨ÉãXÄ`*ëÓÄ›ä÷¤›¦+Í4Áw£’Ùٌ"= T˜›ôï©=(=Œ3ªÙ;:
¢ŸÐí©í§[§äô޾Oñ“%¬<m7NDãÑtJÑ(µ/ÕÞML˜m9LºùBœÿæåà+&ãDçFE¥6Û…Ì£ks.'ü»ÒYè92_STtý&ËŠÜ -Ê–#®þÕÏïewß~á•__ÓѦc
<–ÿ©*„%‹¥KhÅ`ƒ”Éh©=lþCë©Ú„êhÚìóèýš®þ+³ëRô……×aŠäýÈq«þ$œhÞ…?ÖøEœÐ‡²&:¸K¸„Œ/Ø’F)ÚÊac,€ªz}}SƒÚ]˜õ\2žœ¹zDÏÁíØ¡CÞk®ÿåëÿü?A`n4…Á!ö¦0[¬ÿ +<΀"à÷°±3…~ùÿájj²sûïœÿnü+ëÿäü;üW °Õ£BìÜüümƒe@®@UÜÜ`ij÷xxöµÀ@˜|ùÏù>:qqý
Ó´™Û‚«Áÿ[ü½†GÝþTÀ)þVQIšõ¿™¶ŒU»®éþ3’ŽÄ⟋ßT’’W€;·€€Gëñ2>^G!>¯ÿKØ?DÜÿZ+™Âa W€7àñÿÏ¿VïþF#
6‡Xüî#
¸)Øâ±õþ¹ñ6w‚Áÿ3
+ÿÇúÏ% +’ôžÁ7mÜÈ=Ðü*Íœ,ß2H«OBðŠP±Émy Gõ°ð}ƒÛÔônCže³¯ØŽ±5x”IáEËÜžõl‘¡Quó=§QþÓÄ}pãIÅe}.íÍÕA5u£¼[4ÊáF^Æñ%³/s–/!ÝÇÛüse$Q^5~EöÞ>CÌÎåcWoOwë)jû9kZ$&½ˆ3ÊS†0_‡4ò×úZÅJŠ5ÅÃI=üsT‰|í ù×
‡LFI+(4˳{Ù" +Šï +<Ò/ö·bó°~N{J6k»0ò«{X¨~p¬x}gZ®ãÓ:‰:£Ã8´àj€“XÿpGv%¿{€U8ü\TEgÙçϵÜEGÎûtËÜ/íºi²ü%¥lãÄdTkÜXwŒ²®Cöí@¨yÔÙañ«}\uo@D¸5 ù±w¾cPù ˜c¡*Ÿöæ1œ,²ùA,,3p_ï&¨ +hYî +ÛøûnÆQùÑó™øA}*ª“²Cò®óÀÛ²ÕÐÝwd©¾ç¤‹9ÆÇTeï»C¸I<ö•Òø{%Ò·ŒÞjT£ +ξXW9]ifz>Nuž€¯·“Ž'ž5ƒ1#óR·HÃÏ)©+õ|q©3ËõÞ¤™£$ã܆. µV}£·•Ü +$5Ôeþ¥p6izhPø¤DC¬þÞ„ç{^vXUJK…ä7y£ñÂsìœ]Ü"fii ³×¡žÌ¥7`í^6¢gG{xÜ‚¦~¬Wâ›Ù#‹¹ùÔOWùYF5ÉzŸX×pÇzV!woŸF:œ¶b{ó/VòàÚÌnTŒ[ZºµW§ƒXŸs“–Ô©~÷5«~³‰ãý&VM'ŠÁÚ‹|huurIœ&ó%AìéÒ©¬®-Õg³òEöëÞ¦TÌd˜™ý öQôSºÔë7îÄ^·¸N +¸‰vÊf]ߪ”ò½=o¼ÖëZP!\ÊtÕ0xâ0-?Áku›ÂC+U‘~E=òð£^º8ú¤ñÙ•-°¯–>f)×¾õäã¹ï³â-ÇÎéÂcN+¿€])ËÍ)'™O¥d½1ÍL·¹õtð…厔 +8‚$1]n†¦TЉ-ÉÌï+(v·kD8µ¿™)ýJú÷áÔµç Ýn/r¨jÔƒ7A²«~®#E5¤³€•Y£¤õ+.µ¹*{*•Ô- Â^-Ž3Wø#f›AþM»þ +\x®ì5“õ—R
nl÷k•o\0]»{Öú"yMÞ÷¸ŸþX5d‰ø9ϳç®4I»'¤¶Ïö‘¤#¹PÆ/ìÔµ4
ç9lÿvaòçWþ¢ˆü\¿”遼¸dN•Ÿr5ݱÚÈeE1ô ‚Þ'ílví9QÇ_e4g¤]c7ž+»…îÙ”ÅRñD¹‰XêEºë¶áÑʾ/ÃË"Ì#m£ XÚ„‹õ‡"ÖÇj~ÉøðièRG<î§G•Ó“R!\«VâëêoR•6
õ眹ºk¨2Pœ¨kQb
Býƒ¼ì;|µd
¦oëa<c +’–rg/_ò}#ÖWód¿§=÷ǹŸ¥z¢Uý¤¥¯:zç]ª7ùR¯ÔÐ ó62¦ÎG<YɈd¯2Ü&
·vŽÍ+^ƒuÄ'Hmû5…2`u¬Ý8_<#ðª¸ì–ªâãùâ…D4Vz–[áí«6èdBMB„ÅÄ5À³ËAÅÖŽ†™ÝиË8“ˆ·œÙÕN•˜0ɵ"8·<Ã"ã}ÔŠTF ‚ccëXTŠ
uõ1`æYþºšJU븺¨5Wjî•ݽï‘^öà +Ÿ›8ô ×C™=ôÓ¥Õ©Tç1çå¶¿ !ºØkôr1Oy-rü´è»Ò¸Ö'µNBC²¨sÉ)ê0‹O¾h5ÎKñÁõ=P&q>kcó•ÆÍ'Ïß¡ôMõEyÒ±!es1=9(Ë¿ÿŒ£úE§“Ìbu¤4…Îô´mªÉݪÏwØêUì¢<~”ØHzê!þ +`côH9¾³Ï£Úý\ˆw±s· Þ-Rq’~™cýYbiéÕ†ÚÈŸŠ6ö©ïÀ4¤›„HýG8¿¤š¼Yi&l¸c¸ÿäFå ¶·Á/NÞš'ÕKûz\µ4Ïs·¦›Õ]7yìE-AIS‹|¶wðºÉLüQÎûQZ&C¹ñmÅ3}^dyÙW/·îŽÁÚO<TdQ¢FTÖrÁNYd–¯õ?_ÙH{(&¬ÉGW?WÊûuU8™%zÎk\šÓV÷úèðZt"ùÆÆJ¥ë#•A´ä*É +ÇãÇKË>Z"å9À"ü|ýºíkr‹°¦UÚzPí³[óîýÑŸz¨YÙJ_iI{ƒ—>ŠÉ\+AáŠo§NÌcJǺº¼çj×ò’N\ÎæÆIx¹ãX3|¥|4ù‚î'†¢%)h·§lÖŸyÑ‹Zêêð»(Ÿµ^v_O RMŒ¼+hkÐÜqô]`§xQ‘þjèÍ÷òBÕ„Å’¶Àü# g]çbÕ?óÅòêR}H}Ûè6$/½’vû›‹¶ÿîÝ;Æ‘P|>
v³O…ÔÄ’T&y*ÐFÂÌ2ÙVÌéŒÃ6üùYÃ<ÈQµy¢Ñ%ø¤¼pOm´AÉ“Æ6g:£›Æ&W)ÎŽÛ&™kìqÝŽ³_
ÉœAšÒ$·îN"´¬3ã½|ú"ü,=np”djT€xïDUk煎뀢:¼ÃÂJQ%Ã9Ì'«®‹kuSN31 s²!m,ùKÆóã/ßXäÍ>1óh‘·;¯[ÛÉ*Yf¦¦1J#—Œ&FË}=¿ÊP=í6¯¾õϹ@b³—¨JŠHF6jï+Ë–Vöû¯ÌÓü«³ +ñKzf,Þ +¢rÎ¥g¢Ì=.¢¡£xгÐ+1ŸÛBÙÄi þÓœ£¼ö‡–𶨯ÑAL×<–ÂX,–çUp,„Q-ÄB±z2EѦùïL[B·'èÝjÊZXæâí$W/B%À‚kjÝs‘œt]ó9‚-ƒÐ½åï4¢CÆÚòÅWMSˆ©wÅçT¯%zß—>3„¶„‹ò7'm]6<¦<ë¸|éPýÐ%Mžb†c2¾þhJ,õÍk¥«ùTÙ§FFF«#7Ô©)¿ù°Î=>Ò³¬B +ö¼[+l ÏüÚ‰ð⺺ҮLÎVe¤äÅaàëD%—-Ä-ìé•yQ”Ð}%5ewŒ)t×\|øfòS¤qIù€Ã-³Ìp”Ü©ó-æ6ÑQdkœè“1\m[¯ 6ª©Ôˆ¦ŠÊ†D_êˆÜúöæ¬ÂW9»äfI¸ðkÏÝÑ0,®'¤Ü‘˪ßÙŠ<7ÚˆÝj1;t’Ìã *_´=´þ ¼ÓZcÍ>ÐÇä¢xcøê½\µzL%!rVå4/Ò‘¬¥tV¯p Ɇ‘Âö•%¶’6a–+Z·ÍÑ¢åw·^än—¡Œ5 +¿lj+[‘äâïi°(°¥Qšˆkçƒ&ì¿À¦dsKÝ)j$ˆ%NUèÒAIÊð9“b#U34ž€Šk˜2<Ãc×5ôÏÀc&wËiõ¹ï³»Â¦ë&—/b·¥ð^Òê˹wÚØ^N"ð(ÒÕÛ+{8k®g_ñÈÆ¶Ÿ¡¸FyqÕ(’•³nј
ÖR„ïfï.÷HÙ~vÔBw’f`¿z1©ädéÓ*cúÌéø…}ª ~¹ÚÈÉu1÷Ýa’I_Ô¨7[«iè ¸Î$^€rj”Û·;O–Ù
+†¸ÙI)Ô ƒlR=Ñ9³ŸçøÁ«KW +C’#¨§· lß´ûÊ)Vã„ÁkÖ8ñ_erÙákÞ›·°¾lÙB%ÿN´UnÄOJ#Nð5’ò¢Š“ò(ÃÌâo ¨®
¸'(Œ}ëìÝd¯x±Ä',7ZlÅãžšJµô¡÷Èñ‘]Ðm÷Ò+d"½ÆL¾tÛ +Ï£|¶¬\…7ÞOªâ.ƒ,{ö÷!rBÓ9%l2™åMº„×àbOŠ#ð>ER T‘<\Z]£†u7ꓦˆJÅ–ÐB"bMŽÀW ë%öÏÒe“TCè^‘¨‡
!hŸ)HÕŸ†Ü,Ï‹”=$m¼ìx¦c±z}Ïyó°³·ÉÐêÛâem,¿®Ÿé õÊ¡Au<™ä–1WÕ"þ–¢g«GÍš"”Ñ|¦Ê})¨M˜}lXix¢GRÔðL]Ùˆ^kô©¢Ùi°>°V¡¥Ò…2-”š@þPS’Y¼ dÖDIlG¢Fëÿáœ4PªüiG'3_ƒw#AAK–íþñ“7*R™–k›¼§mª†e»lüGBxŽ8záÓi{ +–È+Á?Gµ·+(v¢}ööŸ«cøøN®]7¥~TªNàW÷c(¦6s|ϹÕANößññôúhãŸ;OâAò‹Q₃&Iµ²ÄÏâ®äÎbß¹ø —ÕP pÊ“;MTÍ5¨õ‹Ii?½$èFª¹Ã‹‰!&sW‘€úñ*ºÌ¢(Ñch}¿³XžR)ƒª?«¾VðEXyE#1{³úìžÅKWU•+‰ÇVQøHB\ްü&µz2ýu›„oÒPŽV‹s
¥#NÃ^•<v¾Naæâx=ø-ðt–‚iû®<Dë¦'ñ6ÀÝÝJ³,s‘Æ4ÀæÀƒœ§T2u‡ÎÛK&|%q½>Y<š}íªû˱¸Â`ùœÙ÷¡w2yŸR ªŒ×LeêVêðRL(„jlu +ÀõÚ†9N’õî#R®”c8ÅñšŸMF³“¦÷M½Zþj÷D^Ú’ +[?£DŠûBrÙ¥Ó¨ÿ¡ –Òaàûk.‚ë1·ŸX«¾;ä^Ù`ý¢É>,Ýòᤃu•CwÎ1Ö +¦i£wÇ…CõÌ[¿6÷ÛeDˆ˜gŸÝ¡U ['„ÄwkJGµøñÿzë- ÝT•xjgzЗ9¶#âm›;ß +^`ï}æÝ +‘V–ßÅ¿ÖïùÔö=´«…ržRtHZæ‰Ò½Ïà «¢0¾ý¹Çvyw ýN̺Èω.§÷ö¡þêöƒ£øÊö{Û5!<Ÿù¥†Ï÷M£f麄`Ã0ÌÒù”²6&iU!÷-_þãຊ“0MÏ]¬–Cu‰‹¹ÙÒ®ŒŸ‡Orõ”åû„'¼²
Ôm¤¤?Gíu1X.úø
„óm>¾óЩ*ðGéæ¼~ãÄÕ»¨pô;Dꋸ«§Â—Zò” õ4u¹D ¦k+1U^n7ß\ò!´Xà—a©`J8HVx¯èv!5§CXhM-7™#9¿ûÑütÄ1ÒÖB!Å5´ K‰1=»oõ©×Ç‘kÑá8‡E”TQ‘¡¼0Œq:ƪ|>`ÇCA%©Ê´p^:ÜÞ›¸ðt.==¯O·ŠÎ¼]§GÁ â‡æ`"oÒ@Ÿ£Ï½D&« ×\ŹҪÈíHðx +?x™™t¾:3¬þ†ˆ”ˆ›NËùU]GëÒi¸ôÖXŸE}ž?D¦ßL……œ¥‡ +îœA¦R(‡B2Ÿ‚E£ž[+È^ ÕÆËÔšÇHRÜü,o†frj¼–žÝrŽITzÝì‡hX©ÔŽQz¤LÚ€ÉV¯'¿g'W>:³¶¾büË»OWx½ßšÑé&Ë2‰IO$§L3Ð-d\!E)_ÖØG¯…ÊŒR.¢~ª5Þð¯,‘¬ú„G³²rYó¾iaUdyóymã<ßÑî7égæª#_zŒ˜ìÃüñ…{±Bîx,QFÀ¸çÞJùŽØnë•ß¹†ep{‰b"MXÍ%K½^é¢-Üè²BÇÓTôZãfùºXŰQ•Èìm_ >växËH»Y¾ë£±ˆ»Æ\¯ªÎP`ý :IXÁ'v¡³x þÆ©Ï9)Tr…j+Û©ŠËâ0º¼2æ$øõ•ppaCÊX=ÚTo~5ø$ö8ú¾™'™WœzÕJ2i.Gè
†Ééתõ’ô
DÚxAZÅpÕ¸Åáø$\à1AÑgUwŒó¬ònÉ-~5±<÷Vý–íáFÁã{å†zŸh¸úKfãôâØvÍ0›NÁÁ¨qÄѪ¤#çwR*á╸Ÿ5¸àn9‰Í„D}Ñ›«öÏÓ*}äí1Òš¾ÃŠëˆ£A¶ù~ô'†)¹‚%¢í‰~»ÐÑ:›M4Y\¶Ï#œ±Ö¬$Ét(äwwî*ZBï/Å(XslWKÇ$I?
ðV‰,]ï߯&½AåV—_Ü@´·´:ÅSàiÒ‹âþ¼qªíz:Úר×î8@°ñ›©Ô7ª2aÅÉ~©AÀih~ßmrŸ–<a&›’hÔ‰Œ¼•R ŠÂ'ÄÍþÞ_gáõøI·VP“DZˆÿÀTÖ§‰7Éï5H7M/Vši‚ïF%‡3³Ez@¨07éßS{*PzgT³wtD?¡ÛSÛO·N#$$Èé;}Ÿâ'KXyÚnœˆÆ£é”¢Qj_ª½›˜0Ûr˜tó…8ÿÍËÁWLÆ=ˆÎŠJm¶™G׿\Nø w¥³(ZÑsd¾¦¨èúM.–¸”-G\ýªŸßËî¾ýÂ+¿¾4¦£MÇ x,ÿþSUKK—ЊÁ)!“ÑR{Øü‡ÖSµ ÕÑ´Ù+æÑ3ú…5\ýWf+Ö¥è +¯ÃÉû7ãVýI8ц<¬ð‹8¡eMtp'–"p _°%R´•;ÂÆX +ƒCìMa¶Xÿe]iendstream endobj 615 0 obj << /Type /Font @@ -9282,14 +9309,14 @@ endobj /FirstChar 97 /LastChar 120 /Widths 1124 0 R -/BaseFont /QIFWIL+NimbusRomNo9L-ReguItal +/BaseFont /ERHLME+NimbusRomNo9L-ReguItal /FontDescriptor 613 0 R >> endobj 613 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 -/FontName /QIFWIL+NimbusRomNo9L-ReguItal +/FontName /ERHLME+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 @@ -9310,7 +9337,7 @@ endobj >> stream xÚí{UXœÝ²&îîNCÐànÁ=¸;Á§'ÜÝÝÝ‚Üî,8døÿ}öÙsö컹›gº/¾µêz«ê]µžî¾hZ*U
q°Praá`e(Û8˜¹:k˜‚YÔV®ò.¦ö€7€Ç…–VÓÆÅø]Þ@IÐÔÅ’2uyóÑ´v(™B -lîê +lîê T;ÛüuÅßBx8þ
Ó´¶1·ßåo²ø·¤Ò s°…
È áò6¢¦‹ÿ6ü›»B o:ý}Ro±ÿÜ[Ú¼•z è–`JÇ«s=8% @@ -9350,7 +9377,7 @@ p£‰‰€3žâÒ¿œËÜ(hî–‡ð†xJ¿rÒ^f`,MÇ1öÄû¡ÿW·þ¤ÝÖ%‡j÷íþÚ-Wä¯áãvýÔŽ-ÏdolÙ™š ˆ¬Ý ¶{{U"FRUóUÏ?g&Ÿ³>ôP@~ÚÔ,ô§á\ÐêëÞÊðo«5Ût¶Y¶Çw’e¿„ÅP³q‰ˆ>£ ÑÄ]Ku°Jãíú¦ÞëãwÏ è"±}ï'Û7uM®Ý\wˆ*_KZqI'ù¸n¨'¼| -b¸öÀÖ8ÐLH㉂!¾SÈu9oÝBè~SÉd®s=š<ª©¬›ËߨTÕ÷çä/騻Í$2Àe“[ööôù—e;)jˆ}mÁ‹ƒä'Š!üÑût—|ŒE¢åüçWÛPŸÓåêÅûÿååÿü?A`n4…¸€L!v(Ÿ!@g0ä¯? ü/«”ƒ³endstream +b¸öÀÖ8ÐLH㉂!¾SÈu9oÝBè~SÉd®s=š<ª©¬›ËߨTÕ÷çä/騻Í$2Àe“[ööôù—e;)jˆ}mÁ‹ƒä'Š!üÑût—|ŒE¢åüçWÛPŸÓåêÅûÿååÿü?A`n4…¸€L!v(Ÿ!@g0ä¯? ü/±ƒ¨endstream endobj 272 0 obj << /Type /Font @@ -9359,14 +9386,14 @@ endobj /FirstChar 2 /LastChar 228 /Widths 1125 0 R -/BaseFont /HWPNYP+NimbusSanL-ReguItal +/BaseFont /ZPOHUE+NimbusSanL-ReguItal /FontDescriptor 270 0 R >> endobj 270 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /HWPNYP+NimbusSanL-ReguItal +/FontName /ZPOHUE+NimbusSanL-ReguItal /ItalicAngle -12 /StemV 88 /XHeight 523 @@ -9386,16 +9413,9 @@ endobj /Filter /FlateDecode >> stream -xÚíRXuO{’œ©(ÈÄD¿¸– -±Ýcnþ¨ *dþ -j"v æþYõt÷ϽŸ÷ó¾ïç>ïËwWxÉ0J‰Q$ã`)+¢`ÀˆÃçÐ8Â9ap)€%Èj -=ˆÀõ8mÄ1†F Pâj‚ä-$U?1ƒîYʈÓzV˜ÁŠœ X‰EjÌ -ϧ{L†#É,5ëp -¶vWŦâäÀºƒ¯G>¨)ûµÙá›H[ò^KRˆö-qW3Öëíå[«¹qõ¡³?t¢¿pµ„nY}÷€SiyÆþ¢ÈìTQ•àG×¼1#gt¿çôë«ß[þQîûí¯K«è+{>à½Õ|——RóÚ>ìštá±{mG÷ˆØî1m’¸ùS‡Öa.\sëÕ†©·m)»NÍE»Î^ -YÎÕeL¯WÍ¥¼‹ôÚ91*c}½ç’NÙñÆkíñ±>ǰ-U+M¿¹¥OÛÌï>¡(2õd$¿žØtZçÀ=Ÿ~ÃRг.l$§ÊÍÿdk]uÚ©vaVê‚cn!“k®øÄ>œTãšã¬†Ú|†î´¹þ°Ö¾ìÐgðæÇ×&}œ|¿‰Ë=²Ómþo ï}R9÷Þ2®%I°¸â£¨ß•Õ£.VN€ÞnlÈz?2ô̈o¹¡¼7Ç»õ†ÛqÓ÷ÌźÖ+©Ú—^sÍ[·$æÇ†õ°ïhË<©óiÚíJ¬[/‰Y¹³ú`ɸˆ&‰ØvßkžÀ(/øüØô9•iöCÛr_ˆÔ¸÷öñªÜ6´E[þ˜—µŠ¯ô(ÉOˆ|ß»~Ž -2×<L»×x¾E˜VÕu§w0ElùtÁ‡
¢†ÜÒhÓ¾Œ øíΗG -{&óżG£
S¦ægu>î’º´üÜ>‹Û%ꋜä+¾{ëþvgSÛ¸óü¼3Ó•)’±>’h×_ÏÙgóç'ºFkÞ‰±©sɦâ7‚=d»Ì¼øÔ×{ŽÖVö›V𢊱¯f8¸§,îîP˜u`ñµn£“.»fùúóS.”îù©%ål£Qwn„‹}LÅœ››Eñ»ì)»“»3ùo6Üáû%,rqöGçöl8™NÏ[¹Ø¥ÐŒ«j™÷¡S‡û׆9ç¤_ž É\%Œ{N™<ܺ-)/³Çú]‘?ÙCÙÇÔTÒû~È;ÚqùrH‰íÕÀîm—ߺϽ)¼lþͼ´õJèÇ5¶ÀGne‘Óª-Ê&ë¢;ë;¥ãïçn˜™\~¥ŸUžºfMˆ¬àŠ‹Û{[vØ=öD©Ãu§oAwrEòÕÚËý«½6•†×z«2—öÕuLvº¡YŽ!±.ï~ÉÛ¡9Q«@r#¥Áŵ<AEÙUÇÝ\Åø†µTßÒ’
³Â²cýF&çU'éÑr|÷ŒŽa $çìa̬ð;Z¯Êíþ$»å¬Ôþí÷¿ó -CôÌíÅSgwîå _ýâhYuÚäd]Ô!ºX–ýEÉÆ¦hŸÎÖoFܺšÔ{º(ÁV¨q˜KÕššü¯-¶®‚c’¥¥©U¾ó¶„Í„þáÃù¿Á¢ªÁš¡´ÇùØÿcendstream +xÚíR}\uOû$9ßH‰‰þp-b»ÆÜ|Éñ&*d¾ +)©ã *Ë/;îâ*&6ž«£ú——nšž˜à7:%$¿&YVx¸gvŽH$‰xgcV¥ßÁJ,dM^Ïg9§¥öï¼É+ +Õ3·—NŸÛõ1ýöWGËš&'ë’þHÑ òœ¯KßiŽñéj;<®ðÖåä¾Å‰¶†}M#\ª×Õ|g±u’,/K«öíZ°5¼xvôÎÿ
þ
P
ŽÐ¥EèxÎÙcendstream endobj 245 0 obj << /Type /Font @@ -9404,14 +9424,14 @@ endobj /FirstChar 0 /LastChar 48 /Widths 1127 0 R -/BaseFont /PYGSKS+CMSY10 +/BaseFont /ZHYRDP+CMSY10 /FontDescriptor 243 0 R >> endobj 243 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /PYGSKS+CMSY10 +/FontName /ZHYRDP+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -9429,61 +9449,71 @@ endobj >> endobj 224 0 obj << /Length1 1166 -/Length2 12789 +/Length2 12627 /Length3 544 -/Length 13613 -/Filter /FlateDecode ->> -stream -xÚí{U\_¶%Ü-8înÁÝÝÝù€ww÷àîw÷àîn!XÐàîLþÝ·»çvßyš·ùMÕC³×®µÏ^g‡z( -%Ua3{ „½#3@dkâê¬jl'Ç ´pü rÃSP¨\l€ÿÿD€Æ. {;1c—?¸š¥+@ÞØ ÀÊ`aæaþÂÃÁògÌÌöD{'€’ÈÖÞ t:Ù€ìþ@bö¦®¶@;UWÐLèlïêd -tæ˜ÿYÙVˆÚ;x:,,] -”û¯ä?!øÅ,€. -8Öåøìw_RrÄ”&,jt!å!ÁÃâñÅc¹Ü¹EºaÐ1BÑ!¤"ñNùx/a©g¯˜ðbpÒòŽE=‡¥.H*ïµ)D§ÐUÃì±ü u¡ñ‰*‹ªá–i¸±ŸƒÎ¥lü”y Ǿ‹1[…§!Èô´Ì=QÉè ´œ>`Tw£--Š qø/†I»4\šàk—sñ|Ÿêa}¶¬è4®s(âaÓwØ *D·¬X6ǬuÑYû¡A'
•ÅZ"8Åo ã¦îµŽÖð‘a:<ö¬#««8 \þ’#Õl²¨^ZRº'qÃdKÚn”Wï6kŠ3$ž³Ãn·PÆÛQco}Pï¾ÖNØø¡
jîðÝèæóðxU*¡ö^2iÂÙ—°ÎQ&.ô‰yo0•T$Ü$kw¢sÜk~u8MdQ·<×íÑRë÷¸Ú›”Ô3a?X`§ŒÞg‚ciþÊÌ¸Ž¤©Ìçí§ºÁÔ’$Ú]qä'u _=%®ê,ÁÑO¹©óBIÃÁ¸œ8‰ ó©¶¡0&z§oÑqBÎ=å…pߤÊ=f"VêìŽÁ0']¦U„wc]—G6è„z±ÜÙ¹ýæDSÙ’½ À‡ëîUê8Þ¼Ûç9gúÁ¤jWy4õ¼¨Ó›Lš„$1ß"AÞÚwÝK…3æÌžš•;%E°øvÌ^ª2¹d_Ómå¬^*½ðuì2*à5~¯e*KRdŽ@ò jáÒ—1Õ3ÂÝÀ=hÄCqJàò¬1YÞˆ»ƒÏÌ£sv¨<(pÎÈ&Sdo^W'¶‹”GZÃâÎ#jÿ -%hÏ
5yËõ¸SÐíÓ\Å3ìr -™~³¹8¢°Ëêôk3§-Õ“
jÞ ÷Ï#Õ_㵺¦\Ô|Z—5T{ó¼7ÜÄEoõŽÖJFCPŒ^žz.¼ÍÝ|ÈXíM´=²Â„C
"ºÆku0|Ñc‰Oˆ—'Åš½Ô¨¬ÞøíK·;þ‰&è㈲Ë!´Ú›)_û½§# -N•æ -Ðê£ÏXu_ÐBDýVh=‰$»¤;ðr&a¿šÖ«`KZ‘-ãÊè&£bÐgb®Ã̺xo}žè×ÄäŠoâe:ÈÁÀWxÝ«'¥–&Û¨g_rd¨ÿ’”Û`a«ÉZn¾DýÐô"Òð{ 5¡#I ±ð£þfŸ">ƒÉæžÑ[ª¥;¦á8¸˜t—…¼¼`Å}ÏC9è0úòðŸDút€«Æ¡i=ŽrÅ·Ž`~ÊìØV/TªøBëZøÀ}/ݲñÍ\mWrM÷ÓoÍy¦ŽlE°4Áѳ²ý…©z›=H
ÑD7Ýß¡šì²y³Cíz=\Vâ² ‚лW<•졤¤©èâõÌCôeÅ7OüXXZüÙê{–ñ\HëƒWÕ—ý
³Ÿ!-§}:œýS&—Ü6–K›z]–jÎQÏÞíc¶CtjTeÍàÞ)Æagˆ·ªë܉¼§ÕUΖRz~X3O¤ƒ•ÉýhçIòC&V-ÎB>Ÿ[yäЇyv±¼!ñ«3ZËø-Ú*¿º®TŽ»•.Æo¿
rë -PÏB®äEßu9ÊŠ¡0Û„”ì’ýМ9]TñO‡†QÕø0ƒîÛå;Xar1TPÂ-û|éQUÍzƒçs½^ý(~ÃãÌ(Ç%<g'Fs…ìíÅOŸ-
†'U~›ö ÞŠÚbá\p5föÙÎWSú‡=Á‚›ÄpG®Ð'…ª^@‰àD‘†+AÅ0Spƒ{KÔ¦äùVš‘Ñ´‹¾‰2n„ÜýäZw.r™¬á³Úè’*#³-µ<μWÿÍnÏÚÜÅL2¨tß"ôY•%YÄÝp¸ý2·¤ªì©/Œ¥rÒÏôu8´[qâã#Xžr&µÌÍÊ‹RÑìwœ†Ç'J^}~öE¸õ-Ì6ð¹›YLfªQÁ䲞ù<LF8ª¢
ç)ÞÚ›44ÜCÅÄeþ˜Û}õÐHnÔMsvÞÛp|%„äc-ç•©qùÛ)4‚â4C”fG©{bÑ3'43?Š ú%Cû¥MlgàÓ;ûšnF\Ôê‰öG’bÄ[$é7¯¹gø¸:¬øüÈÖC)¹Û{¦Ê‚o*IûË›7ìŽÒDDÙ÷Å:{Sí›M¿å×EIÐ1Øx -{÷½‚!=Ÿ‹œºdCSr|°CóC\0;ìtºwÆ×&ôàxÄ çÙ¥W"Ê6ûWº‘~ìÊ›Œ®ÂüþùÒªžÜƒ<’ÊC¶¤èÆx%µòÜ‹Ã7Bh¤j¥LôÈ…¡Ñ4Ǧó.FÈÖ( -™žzR;P±0p³ÂodMAB²ˆùmÂ*”â…ox›<Õ€o“flöÊŠÂJßÒ°ŽŒ•€aóFÙZ;°Z:Š|¹¦´>s”îÅq>™Å9õ#d<µðÕðÑdõá+¢Î'”½„;F…¬Þ7ðJ3ä -)¯Vø”9W
¹[‘N5~HY¼c‘¢VÞl<óR¦·ùÜ+÷Rfl²Bè©sjþ’o™kb³ßßoiê -T—Ýî–*Çt¥¾BMÕmñ$Ãy³ùli]¼¬
†ç˜ãâ¿>v@bÿr -êŽ=ÌŸ–\æFuêïÂ9ž'QÚÚC
Īuûºœ_ýp¯·ÌD®¥hõÍHBEÝ—
GÆäµOhN>Z¯2ØZ;Ïkµ>ˆ¶‹ðsäu>ãAáõú
»¿~‚M·p‰ªÁÔkû+æž±Üpø/yõ¾á³09ª¯MUØ`z#’Q{…s…®4®˜‡&½kI0Ý|P®©mIUÞ—) -/¹¬Ò¯fž¡+5zŸÎÛ [þújkrcð^Û0mðô¡¯œ$«I„]->ÔPÂy—ONãM«çé Q]§¤ÖqE -^¤øàfá<éŒáÕ¨òÝQÓb‘T.Oª{‹=G©,ÒG©²dÖ=M
*pûÑy`6SØÄA–àW«beËþ:ô5õ&êlöüÃÒ§¦ ³K`U*W£xz>„“’ʨâ‡Y¤Ž.Êd!7¹ Ç饙ô×ʲ¦+a©’œ)Iý—Æ‹jŸ=+ºa:߆Žj=ïÅü\ìQ¸¯%zÄø? §ðÍÒuI Sš™dG×¹—•£é6USÚbÕˆm—Å>õKsþ¼¼w„ü‘›828B\±Yo|$$û–·Óò!é@ª*C$±Í´ÂbNÂ\ð…•OÏ -ˆk±éz¾r…E“»€ ->™ª4Çø“§ìB -` PGÇxµ‡y´°`ò<År$_`?t»Cúö¾1˜Ôzz×O–ŠåyXÕ)8Å6ðþfÅkñ‰[õÉÄB:*šŒáà`ïø±¨#íy°ªÐÈS»jå1…O-páZýÈõÈkF€½Ðú‚Úæâÿîéêß1roЈˆÃõò£ $²0ñu3c:U €ÃâNMFU%ykbÔŠ4ñËDA[ÿű@®;SÕÎ"팎{‰ö!‚*ÉY‡:çÄ:c7L¸ýI„™ËŸ¯z¨òÖ”^Ý_ÐI£–‡ /ƒO¼GòÕuÚ—_Z¯vûÞÌi&{Ü«;{’ÖÓx»)h´y;‡‹pò›síà¶r•ƒÿsÜ•ýj(!¬vwé¥nÕ‰ÜîÌìÈÙ ª’áêÃý.ÙƒTMý™:ó=.ßkE3è‰7an;“: ®²ëÂý&²ô¶õà%&è;
¡Šõ³“ÎBy’ëø>8XPªwð•7{'å-Þ•SË<ì"[.ûqÈŸ`F¯ªp<Úb0¼ùå—7ÆŠÕšÚÏ´J
¿Êš€à)àÍyβ -]‘•3\DàÝí?"ûyÁ;%Ø,-ӷ"…p(&ïnø¡m¿Ñˆ™V¼àF»‹ƒê¸‹ë‚Á{ØöW7êµÕ¢–!bX›£áJ$‹Ñs,Þéu¾« -QqÕ@XÍãDÝ$ËRvõޝEDÅœbI`¯:ŒMåÛpüä(jÁ¼x„ÀÁú >=aà[W¤Jçt•VIpM‹ ç¯Tƒè¯24XQŽ9ÃDàÈúp>Qh2 yN(‡. Ÿq«º°×
E¬
¥¦…ýú=þqϱ÷Ýøb~™Z¬ŽT¾)L-:…iOMå8΃–ñ5™À4šµj~%Œ¿z6¹5“+9”®.þ ›×šÁòX/¦Xí¼ÊiíÞaÏ2, Ï•¬ŽùbûaÎÂÒ'ÁF[¿÷ÅÕ»_ hž=Üw§¶éK°þþÈ…
fþ‰…¢,w‰x€4ׂJsãŽClÉ PÇBf{&=(ƒ}FIà%ÞubËkµ
ùný>!ÄFÞž›œÃ.îѯDN!~HÜýSixk£Ù_˜!€\P‡RnÓµHçk‰jûˆ:ÿ‹$ñ[oÅ4ØpGã}dÿÅÂÅÐ#rPtåg”Í;à¥äÕq»¡Ìñð·–Ö3Y1Û®¼‡+$UpºîÞ`ì…-ÔõJ3ß¼Uc4žâŸ3ï -:5ë~ÐcâQ7ƒßª3bïÎÓ¾BÙ?€&Jõ2§A4]‘ŠÖÎþîq9s‘¡:Vˆ>Ýò:¥ßyÄ -Nä'·Z²Ö
ýHå§~'¤»“dºŒSú¶hÄ#AgëPãÔŽ»µó„¡F#©§¶¾ç#•"b—öš÷Ëiåm£Å¿êÃÃM\\©Ò!wšPî—vçœWVë¼~îE¢0ó;íü!¥k‹ÑÀ€/•o2̸ÂwIÖk0!Jh/õœOhö]ÄÇÝz½ï샙Ïà¦üˆHƒªÀ¥Káø=‡áoq…€'Sð‰.Ô¯¦#í8:"ø(ÿè9Üó ÆúÕÚ -u%È%ô‘ׄl¢vÌ3ëÃ*T< Q1Ü/èìº-
+Šœ/Ï#*?j -ºOC«¸©|öâ…HÅÉÍÙ2ò‹‚‘à˪2_¨Å(£ÆñwÁ/½¦f•ó¡ƒD¶3fù%3¢ë‡¦MÚê§V q1Œt%n5DztöG<onøœ÷H_“•å{“:xÏóùãÊÚš[R˜|"ñÂæŠ®ÁA*Õ_>ˆNœàLôÀ ëþÔý$Ý¢V¼Õë0ŸÄãÍdÄÈ_ʲÀhО³BjrµøTñX0†X¦›ñ"cµQ𣿵H['¿ÜÏ˱©8‡Òdí‚Å*&‹=±ïa=Ñ?àIÈ`›¹…¾)íŒù¶èÔà=¡ØÅ<Úÿ|I‹éF$œ ÏìåÀ¤2¯BÆ… -£žrù{ž)çkíRLÉ·†/nIºÝš‡ÅÓ•ƒ-H?)\|+ÎŒÒfÎnêÙ“HQ'~Ì4|P#njjDî~ºÿz)4ü»}a›.¦ÆÌ9œ|C…+îõ`+ÞDv’Ùê|êâ)ÜBŽ/%w{½6Z²w*ȦãÞd•¶]hŽnØ5¦I‚áxD#Ž -NstžæÞÓZlàGohT“®Qgü0ê‹ÜÛ3ÏðLN:ÁÒÒN'îàY}¶/+%ç3¶b’ -Ÿ¹Íäç8˜#ÌV.Ï5ÎSGØ‘¡ˆf6·AÓˆ(íÓ·ŸãÐи"ƒÎpft[j¿ªÜ,˜ -ÚÁâ^Ÿ1JßÃ<uz;û -™—ØC `D
ÛŠ(÷ 6".–²UØ¿´·Ä³R—/Ü’ -ò8Ww”›¸uúצxJàª7ä«Wè‹îæmâ9‚>³Ç\fíDR$ÀÇqý6Áí!Òï…x¯ze(nÞ7DÎ…#šlc£èÅõ,òWjó<ÀòD1sxh5^P‘Y£xY -¥CzX¡NÑÝßKs'"…<ëµÔ˜7Ô7cÝ¥ž cÅs*y¥|ô¥h«ãd¢“‡lA†KÈpôâý>n£±rGå,ºC%Î#»Ís˜$,1Ø– -$¸Õbguü^|Ñ0–Tö´3:…SÈŠä0Ä\Ç…¼$ Ösoýyb{:ª=åË0£ -ú‡±îih¢‚®åÅ‹s4o<¢Án>M'†8„G¦]ZÏŸƒ}{ŒÃ©Åi"f‹L5gnÚVd>ÐiÚÝ>á~П‘µî‚ÜüN0½¥ìðêHÍb…˜Mhÿ]Bœ¶cPEë X;Gj$¶yæ{«&¾™-ô•‹$M”ú¯×¡µóhŠ„á½t‹æe²™oEØúsÚ:˜÷¥P\‡,Lì4Íñ€¢šâ´_×tH–»‰RïïÂé÷Ò€³£¸‹D‡Áê»,áåø\øU’uƒÚu(•‹$˜ôôRßÄl×
8EZr¬ó)ØrµŠ8~ðHe{z‡¯Ç˜ÐÜÎkÞ1PãÛóå%ˆÝ¾Ã¬ŠnZ»1€äS–î§Qžl³{Ñ«¦á¸áÈéV Q´ªÞï…¹k2Ð$ݾ&ó÷b%æ¿7UÇÎs¬Ž÷7níA'’%¬ÙT!“!‹?I¾CþÐûñªt·½e(Ë–:ƒÇ:k¦©¤wÚ»c!‰ýÉbP¶˜…fÞ?~»»šecè K›U–èû‘pÛ÷>\±TÖÌ{x¿Ml‰™®í ¦iïÌÃèÀ{s4SÚrœpŽ
ËKzi|Å¥y.|ä0ß„¨Þ{ ;$—_ϘÖÙ ˜Iìë¶Þ<«&îÔH‘ú Z ‚o©P’å-ŠË(F°N¢[x"Ô3NEØ2,Ú¢`{b<"~Þ|\Àꡇ“'D²8Žp3/"6qφûf5…¢ôЉ'æðíT“vÐ,ra`7S`ò-îŽQK°'ÔKùÅë'–IÁ½ËEoBö,G¬mÍs‰ø§+HŠ&íⶸ\4Ÿáìpº4L Pêä=’cs<—ð…ôì^½IxNaMµŸŒäÆ@Ͳ—o¶;lº6G¬½k¥Ÿ#µ&0ä1‹¹ŠÏeÜ£ã
àb$p=‚3¡r„Ë´¦+i§kÜb¢ß´¾¿„ú|ž•G72š²§ú±,zo‡@==3vFÆ‘ü;`³ÛäœÙ¯qTJ«udÊ«7~þsá -þ*Ï1i[jãó×mpƒwPîj¡Ý1~|iùUô„¹²Ž«j]¯Î6D'm.F•l,?B¾Ûºþw%JðÝh¦|5ë_¥L‚Hyà?6¿Õï°#úÅ1°²‰>HÂ3H¶ªpª¤ªyºA
èR*ŽrÄ©´u˜t!`¸—(Ý›œµm¶ùãÎŒàé“k<h‹ÝÇ„ÒM[hXH¢[Ùcmø7WFp|Zì×âè9sÖer“8’ˆø -Õ Å]¯°(Ãöó²ç"ìi]j‚)¢æñHOë»J2M•ΖÁ¬WÅ®ÁÜ•†1ƒcKó/þäÝÅM^{”KØT‚^ÊL-5T}øÊ’8làªyŒ{Ü•{ÂO_£ -RÉÔd®u¦‰€gÒp±=T×KÂÇáT5·çü¤µÇ¯yÞ»¢”ƒPÕokòÔ -3Sü'µ,ö|Nv¹m*Ž!Ѝpó~2dÿÚ >לͤ^'†’a›?±Lx(gëC”¹–î/$Nò?þµ5øQ|Ûð™]ŸšeÇÀ…i"ÖÓ\ûk“¯£ojÌOÓ]¼Óg#[5· T™è¹J(šÄ[ÏTùîFÞµw¢30;jµDÃ1ŠfÀÐs¸2¼Ølõ™Ý†c„tˆƒŸbšnEÚ9üÝ”Vº¹j[ߊWÆCí݃#BYHÂSfXŠB.OóÐ Q E© -÷±8vy¥N©ÔèÁÒ¼¥A©í2lë„U_@)uó;#9X8Ïüšy$çÏ"¡e £À÷‹Ðop¢¥«C6ƒý!²½Â -‹9š{ñ:=:k¿A5X;2DŠ%¯ˆgoà—}ý‚$ao8Oé=€0™üÙ=4Èû{`}ä-ÌfcýJ…¥úT ;¨.(wßÚïªeb£{5%Zó%ZQõRòUåvÒ5â§ -ÿqé¯ÇŸ‡2§XGG HÔÏ#zY!Ñüx -†é¾Nº¾0:?!çöZf5šH5\Ý€+@ƒ¾ƒB|V%wO9"…´Dz¸l¦ö -©/—ç¸Gè,_mÇw¼Üß²‡>qYÄ)XÍj/Z\9_E(y\ÍÍÞ‰‰‹ß ð`bt·¶J‡kJ§[2-÷ãèz=Ïé/f=MFêÓ3ªƒ•.;to+îÏ4”î§ ×ÙæxíWŽÛÙ®ïÏ;>ÐY*Íò |Þ† - =pò£,CïðTëcëc\‚“‹ÎÚèägKŽüàK¢Ø0(dà~NN`6¶p¥‘ƒm¤ ú®Wà™æœÏNq©|·K"
8
îûåË,Â{fô1a¶Í¹.Az0_Ô>À8³iÚ¬ûv¥XEÆWí¿–"æí¥Î[nŸ'öÄyÓ.ˆŒô`™¦§ë1»ðK{/ìdy™eVl‚§Ý™¦./ôyG7V¼ cëaPMº4bÆ_U”{k™ƒtÈäqß²QV[ëª:‘Æx_¶Á=+¦%O_‚~.Q_Ÿåìt™ÎƒÓË Ó@@ïqzÈ“‡§‹ _ëxŠ6mƒSâè¦õr_^AoM„ÏÔ#á=_6«ñ
á5É‘Þä†àt=‰¡Ûi9¤ÚÂ?ØXExd"Äon’óäJ»:™0édÆåGR$ßn“&~òNúp‚âE_DGºQZo‹šˆTùBN‰¼Äý|¶ “ã¯Ð2ÀB¬ˆÙïAÙñ.üèÄ”€Þ"£Žè„1¸Q‰œ¸eXœ·lÊ"Må;ezŒvO€úQˆ´Ýb¶’~0¶f’Kî·ÍÑ@‹kä…ÜY<Nз"&¿l{YBfŒuÏ“÷ -p ¢B(¸u4 õ9VieÅý6`i½c°Ò8ÎÂ?VÙe䆨"”%ô…L°/}³{-ÓˆíŒ=\¿lúÝjR¾×Ö§Úb¬Êâç0¤÷ÁAqv\ŠS³
åW…í·óqÛbäŠ\Yï:x>K°×÷Ÿ?ý¨»¼¹¸ïx%N*r¤ÈŒâ—Ý÷š%Iø¨¥ý']B¯åN´« M[÷ HÆÜn*.éC·ÀnEilYÎP%Bu›«Ú÷6êCÝb,-rêðÌÙH[ÙhËp©µš›«z5†ð·öŸ9 -^SÅëÀ1¤mEžÍ#1î‰Ì%¤Kà Î ùÄ×Ré¦ÌCî}[É_Æt¹s–(o×{ý ˆë¤¡ý‘,,´Å±R#AUÄ2ÿ>ÞÊ׿OX²
áõi݆h§!³ÁÀ1á+,ŒÆœÜÛy,Ûð^¬ø²ð-¸›Š”˜—É7tÕ“R=kNrX»QÅo°ë$å‡`ÐËÐÕÖQ£Ö,·$‹lydŽø›Z%ú~ëŒä¡–ˆkb¶}þ sOÅý‰5Ú+¹Í4¼Lµ çìdÓ(—:•ÑÃ.Ï+%b¯œÌ§YÓ=7Æ„:ËdKkšK¼_c^{°£ýôKt®z ¹“_Ê®bШnÝ#ý4λ!Y8˜‹¥¢Â -ç·¢ß
Žˆ¤ÓPø(!‚p_>7!aI*^M’Ìš¡ªÈ¾dJuûo¨µ/)—Q)7Éõ7IÅ -}šðOBŸ«aIƒâ˜ÿ//øÿOðÿ©
ÐØÉÅÞÖØÉÞÛ èìbïô×ojðÿ¶Ñ”endstream +/Length 13447 +/Filter /FlateDecode +>> +stream +xÚí{SxemÖmlÛÙ±í¤bÛ6vlÛ¨Øf%³bÛ¨ bÛ6+§¾î¿»ÏßýŸ«swž³ÖÅzß1æsÎñÎõì«MA¢¤Ê læ`”p°we`adæ(XÙ™¸¹¨ÛË1¨ + +5+W[àÐQg ±«•ƒ½˜±ë^ÍÒ
oì`e°0ó2sór°üY3³ý#ÐÁ™ äleçà
PºmìÿPb¦nv@{WU7GG[+ ™ +ÐÅÁÍÙèÂ0ÿSÙfˆ:8z9[YXº¨ÕU4ièèèÿ…°ððð +õßí +M5Ü3€ðYçèØI +Ÿ¨²¨Vñx‘†ë5øRQÊÖ_™j~¬[ŒÙ:8"^¦§yö…JF¾ùü ½ºÍhaqP‘#`>\εþÚ_»œ‹·{ª‡õÕ²¢ÃüµṉˆC†Mßq~¨Ý¼dyÔ³ÒIgã +•<Tk ††›¶×2Zó…Ã9ð¹gy^X]Åùz_ŽT³Ñ¢zaAé‘h@ƃ-y»A^½7Ú¬1ÎxÖ«ÍBoG½åI½ëVS8qo`]%Úª©Ýoë‹§ç«Uõ‘jaï5“&ô±C ë,eRЯ~`1߆’Š„»díNt®»`Í~»óD·ºå¥n–Z¿çÍÞ¤¤ž û±À/6qÊè&X–¦xfÆUDMeö8Õù¯LÍÉ¢]ÇþRÇ +º}šËx†ŽV€!üaª%7]\=øê`Š’»Óíâ×ãZÔÎáÜiÃÖÜèí݃ßþ__µ˜ìÄýÚÀꘔdóá‹E#îKaÆ
"äó¥ŠH²0®~QeàŸú˜ÐøÜæã\óSËö+ó er¡ÅÜ´ÐgEëQß›Á´öðyÀ@¥íØç¢H_ +‘Bß CNøy ÚØ›½sÂ%ršÑ:> û>8§mp>/1&rY†úê׉ú3<W½Á¸ÂÕ¿¾†¾a’¡{ŒsL
aw;8‘•óQ-g-½ãåzU$§|Ô´™F&L
±d0«by Ay,yBÍgJ“ßLj¶'àvöLå9mÍ>"mW +Ü0ÕÁhÈñ=CÂbæ(X¬0™$ A|‡«¼?ÿ0åø²²ŸÕNÕœÍþ³`
iJg°zœ¢\%V™-–Ú6Ëi +9:°øîˆí‡—W^
逰‡×ÄQÈôtÆæè2ŠÌ.«Ó¯=Ìœ¾ðƒlPóž +J¼bôâÔká}^íÆSæro’ݱ5,J0Ñí0þG‹£á›KBb‚<)æ\líµFÍ`õÁÓ–c,Ýî8$Mðç1e§c’Õro–|mwO{ ¼HkØÆŠªD(‡G"60s©]+,ÁS“U€ ަ%DSz"œbÝ2¯‰r!š\Ÿ[ÓwbFŸ3\R4§³J•îJÝÎeêøÉ·æ»”oén|à÷ãèþŠÉÔF¢Š¹Uç÷hÁ’¹Êˆ0å]æ½€]ôàÖ¥+ÏלܺŸìÅ6“T݈Z*ƒ•^ ïç8!ö>bѾ +P꣯˜uܨ¡¢‚þK´ž„D’RNíøõ¹“0ñ¦?T°$/ÈqeôŽRPÐé³0V¡g\}¶°§ú51yâxYŽrÐpÞêÉi¥)¶ê9×™êû’rk,l5Ù‹M×(Ÿº ƒÞDºÕþO¤&t$‰$þÔß-R…A§c0Ø<2{KµtÇT¿:
Î'ßâe#-þ²f„zä¥t}±ò˜D„<DUãд‹@½ù² +o~ÆìÔúC¨TÁMëVðÄs…/ݼöÝ\mWrEòLsŽéGŽŽ¢Hºà7Ñ‹S²ƒ_S?l÷À5D“ÜuÏÂ4Ùeóg†Úôz¸¬Åe¡vox+Ù9ÂHIÓÐÄ'~´3Ñ—ƒß½ðcbjñç¨ïY&p!®ÞT_÷×Ï`ƒ[þômwv +H\p_[,lìu8\¨Q¸D¹øí³ª3P£*kû›bfšx«ú¨ÎƒÈ᧺ÊÅBjϺ
óDH™Üz_M²?±jq6Ò±øìÒ3§€>\è««å‰i…ÔJæ™xX‹üòªÒ·Ü¤¸1~‡m+÷Î@õl¤J>´]×ãì +³
pÉö`ÙO-qÁéóy•€tP(hE«_f«Å6ùVè<täÄË>?zU³Þ¹<oƒwŠ38üc€å¸ä7¯™‰Ñ<!‡ñóWKƒáI•Ã3Ó>Á{Q;Lœ+®†œÑ>Á¹jÊ€ð§!P“žÈ%úä0Õ+œ(Ò%ˆf +ÎaP‰ÚÔ|¿ÊB3!š6ÑQƵЇM®U—"×Éš/ÖkòQeDxv¥–'Yêgì¬MÌd¡ƒJÍBت,iH"†Ãm×y¸%Ueë¤~ЖÊ}ˆ›«°¨÷➇Å'‡F0¼‰äLjY•W¥¢9¿qêŸ_(ùôùÙçaW·0ZAgïf0˜©FSÊzæòy1a}©ŠÖ\¦øjïÒQ9p“ùcîXWÂ"yP6ÌqØùî#ð•àSN´\–¦Æåï?§P ŠÓ
‘›œ¤‰I¬ˆ^9¡˜ù‘MЮѡڞ(]ib;ú +©ïÖø”¹7õyí™[‘`Î5þˆŸÙ|kc‘¢Ö>lž¼sR¦÷<KRfl²Bhi³j’Y+b3Ý¿ïi꾩.º?,TŽéJuALÕm +ü”\äAuîïÄ9™#QÚÚC Âüæ¿XPýô¨·ÈD®¡hƒùÝDBEÝ—KÆä}@hN>úC?t°åGìŸõê È.üæÈû\æ“ÂûíVÿ BTÝÂ1DªzSïíxŒ=c¹áˆ}yõ¾u†ˆ™5è\ÕwŠÆ*,½É¨½ÂÙB77Œ#“^‚•dèÌ®Š/niÉðU>ש +>ŒD#/6–½¿"œû`Ù¸zsöqH;ÆÑM¿ƒrM% ‚bd…RÏÐ/·>¯å3,Ô91š±0Ç;|™3›
ÅgÚä ¤M:‰÷Öry‚O®•·
¿VúÚÅÙÆ¤ø3·åG¦]×b$àä~{®†ÊEÌŠ5(œ@ð#¹=Õ¾ù.löМNÖx8¸öÓU¨c¡ +ŸlàÞÞã¤262òæL
DçÜ4ý¶¹†xùã‹Yï[†pfÀϺJÄú8ç˜YÍ×,ЇIH]ž…ˆ8)±Dý\7÷;HIžÕPnÚÄÎÏè™dzÑ̦šW`ï +-FGú@©½üoØu^£ÌtšŠžé+×Þ4—xžoSêµoÌ) +û7Áfĸ!ŽdÒáµ×Š×_goWn÷×õË7ί]ŸQê¦Qg螤–¯fÅ\X¿!Â߯þú²}Vø=èF¹ì6„}ا'¾Û¨ùIÒkW•ó[ô³¢wÕ¯haÊ}éõëP¦íЇaË}õôm.‚\Ê„£1 éÁŒ`
cVH÷§&¨¶8=´¼O—ÞèÆ’5%s¸ÅÖµ-’»\sû˜ÆYÌÜä[ÕmŸ¦\þYÏ!ÕÖ»}BÛàðOãòêüÒ„Å‚†…ò]ÕäÐ + +« 7œ@ß~(zˆrâ‚”¿IfÌšx¨Íüá5"i÷Û”žä'¡YÆ~hÃü±¬üÏ@ +1ÛIw´GÿšOsÉ~” +ª"G$Ôy'«Ç/äå¨PÔN0 ¾„MãÀÝôºµlÄ{`Û&%X ï€#Ëø¥É¿Ú™ûÊJ©ÀM²USDv×À>K‘¡[E>c}™ÓÃ×™¥Im1ÒËϪŸÖO“é–O¤Ð"ôâ}?!z¤§Êö¦m§É8žH„OÛ É.æ;x8›{…ò4 O`þ¾|Ía“ÁÊ„i@–N‚Þ+s +G¡Õ"ïZ˜*ØfÍï%Þj²éIÌ¥$àÇãÉÔÌKU1ZAä¤âÔH™èNP§áÓòd˧íývªÚÇÅeºjœ·zÎSóÉ‹d¯ùþõžè1Èy{£ÜT¹ç¸=⌤¢~0eøñ“Jû€sr&6Rɶj™•¯ëøê§¶Ç·¯0š`/¬¼åGi6[õ¤vå<ÞD–DMÄÊN•XON ä÷8>CÊ£{p’'ˆN¢ÚwÖEìkh¹°Ûžz[]jêÕ +oH?aOKn¨¢[*mv,¨¦+´ø.ÔMßU ã<6ƒÃÒH}Ïå¤ÙLEäÈ1›´9î‰~ËË”¬ð›£)[~py¿Ò; +F%!~E©Œ\+~Ò§=¦µÇØ’þ4›œ’Yžó(èRMÑæŠ¿àÔÛê»ÌÀ +
aÄJùƒe +Š“—®+Üâ:äw®eÁ^¿ +•>YÒß2.¾[½¤vß%w0^qøždµeù²)Ô1·t„iñùwpJG!ËËÚ#Èödt•KLŸGc' ™Wj£yp^6£ª~Îʈœ 4ÀôeZ˜Ôûuæ<ə̷¤Œ>ñ/ÙoN«3¡Ð ]øèqú%þVVaÝ9Ký¡µ½Â˜@_}à^ç¡ê˜níÆœéÞvÉ+÷ŒmžØK€ùKņÝýƒ“xƒ +’ÏÊkNŸ‚wÍñÇ>Ç‹.HƒÊ¯`60Û¹äûtqjw䜔0"<Âdò£Šr_õß{óƽñöxãCmëªóÆ€| +2T9[l&ðY±uç=ûί&Ù©òdÍ—Íw{#»!œäÛ(ŒâÌà²¬n9#¥yÀºu©øa?xU–è¼æ+vRÏŸp!Ïm„_¶"Dýíw“snu«YlŠåjOÍ›žßé³ùWw/¾íø^qI«µôXzmí :êÍuu~k•㦲ùvýaµÉc~Dqà°â^\©t£sõ`a÷žm¤’ò®ó´ØÔÎú›ƒ›ô”Qgêƒþ/™5ª°QlDÄÕ¯rßý=éP€Ñç£`rhUÇ7ÐDÐJKŽèr½ GÃÒ°¯‚µ£y
§s‡–wjÙCYË]½dìˆOõ¶ÇDf›ô’òPH8 o4 ð} (ùO„ü oRÁZ)…’mÉWÝ\Y6úmd5x†˜õ^×׳dß5c2’t'X¥t%—‚Su6g¨™b‹~1c³'ØÎ¢óñ8ÇcØ ùçÙò‹(Ljå1[›™Þ*|)§À¤Ñaë‰ißwMx¬Õ%Ô/ÀO÷k]61ßä¶Z3ëˆÎÙÌ†Ž„¨ƒºÅX3«¹*±,Dδ«âޥȇÆéþ`Ú™›9G*ö( põOün|×~õtñ¦ ÝiÚîˆÖô¡Ú–˜¹ƒM·•‰kðVfYiÁ\ôÊ;hÄA, 3”¿÷%e#ìQ-ZuÏÔÂü‘/º%úåÀÎ,–ËòN¨î0–èæt81¸ÑmØ8ûñ1%º{©„›‘1àå6”] t=ŠvbëV\qÙ„9Ï
wIrh$±f‘h¶Se2‚Âw~æOâ -¢@úARN”¼46Ë€ädͺ£àÚÕ¬ñºÐ‡‡±Zt½ÿ=«PÙg¯ŒÛ2ë+ÚËXp-k”›(í¸ÿ¨ßÄn=}Ô["ÒÙÚ¦Éo]ò+*rmöõRICübèÆ> õ†×Oë~àçJ·^þ‡PMi»ãØwY¿%ŸÃ‚|¹ïï¸Öfß-h*‚äd*Ýæ¼#¬]Œ~2«”uâ_ãNà#¬"'ê6Ð.|§Îª´c7·täzݙ֞¦Iշ峞S#7Ø¿Dækå@£Öv¤Ào«îQ·"óŽuT.Eðˆ9O€îØÄù_4˜tÆ©·ã›€óËüzoÚ¶²=ä‰ß¤žo´po¾\—ˆÈöÖ•t +•Âúõí©ï^é8·v¸÷a˜N>&{Ú§£µ°sô̦V½d‚*´Šã{ݲ‹†øf,vþé
—x欬”ÌAw%šVÌ~³Ô%EÁ¢Ì²òðÜâ¿™n—/d°\§ÉåFˆ+उSJ/Ì”{gF`ª/²qª†â!¿óWúqF6€”%ʳ¡s–.ÅFÄe!{t„DpÉ‚6&Õ+8h2V+rIgõÅ;âàÛ¬#™Û][DÌÕ +é&ò…ôãôÀMjàšë òåçe¥n~ÅOYaüE½£4å7Ç›³ºxfOùœQ¦NNêIËsàǺ±Xp½"¦+I4¥%6§ÙŸ)µ¤v±Ö–$&3+z!›3Åa(<lãà‚Ÿë>$𲦛^ÒÕˆ³ç£t‘Y?dêŒ$Û× ó*³Ì€ÊÒ +Áü×1ž-GÊŒÙS÷!1Z*°J¼Ó¼÷ˆ¯«·ôætÉ (™©¶€ˆæ|0Sÿ–©ŒèduÆŽ|ðÏoºúÈÐ÷ +<c)Eèþ¦Q²GÓüÑ©ºšç
¡€·j²RL/eR•Ö<âÍykíØÆ¸¥Š‚TX¬@§Þ¬áú¼ÔÝïÁÀúÊ@ץƺ½%j)MNkÒËéÈe®ÌJÃèæ"‚F…=Šàúü¡ÒMäÌ—E¢âa!Hµ9®£ñfãú\~%3$‹Öߦ%¶¨<$~ƒöµ2ôsÚ¬2©™Ðæl‰)yjRgÞç-‘Bßúís»ôMÆJ†®li§½gÃzFùŰÂ>§[)|ùεˆnÕΩ`"àëñ‹o†¤]¼R0± À³{Rçef‚à"h”ðdz”L³ÿÂ×íÅiŵ´¬ B‚ª +LDU§ô{o9…üÒñ\.ž[ék©H©·Uྮ¸–æý;<–ÝÙÑ+T±<ßsùU9ufÈï‘Ü6óobêà…&ƒF^‚á!We€"à÷f”¯II‘Ú +¡‡8ÃÁCˆ;¢ï¿õµRjÖ²›•ê‡s[µ~NlæÆÓ[•ì¾Ee9—BÜê}Mï˜9Ƨs´@Þ¹í!0¾¯±®ø¤ÇaØ»Ÿo‹º°P!dÝî€Â÷äl&_‘.ˆðÊKw6ræA¹‚ð]+ºáÑÆš<s¾äÕóRøÄmtoåE +åÐÓçÄjÁúJpÄ·HEÿä¹Ï@küzuæa•[âø…1‰èùD¹A„aƈ½Ç<-ëoÔþýº}ám’ªÏ,&²ëk±†…fè„ßÒ>nA–¿(õ…³»CÜXD„…@ÇgIkjb6]±~fÒ]‡•]œ£Ô ²)‰¥—ÒÞG»kí—à'iÃ#£±3{…wïCê·’bFÒ«Ð$kD‰òŽ`ÉaEªaKŸÈ“ÉÁ‡t¹ivk‡×K îHÛçÓ*¥FÚ/ðo0ô¦Ô½%?òa@ÎZu,Ž +47…ÍÚžÝãKtGÞXPË–Ïáóoðä›íd¹oPo0YJ«åÈx„æêPWQŠÒy0ª9ÚêðýŠŠ¸¡¢¥a 4ãWŒOÊ܇çí«[ˆ'TwÐN©È7µ#›6˯l¡–}FDƒÂäXîe·InfrÊS\¼\3þû…N”ÅÆ¿Òš:6_ï¸#ØŒ¿‡Øµ@ŸõYÌiªªåÚǼ.Ä3Ó18WB<KÝ/bKÉIJ$ÿЂ +#wÖ¼¾Ml¬Æî);‘jº6š»°˜y¦ÒtZ¦BXäOŽóC!r§&×A^ñ²ï¿Y“‹àÎBká¶ÂšŒvLÿŒv¥Äë‚1³±R`ÄÑÝú½45ìòQ·B<mýv~°»OíÒÝwu¥s\q§¸nkÊ`°B—‰õQ@©¢æcWéÀ¬Y³Þá4û5x YÏ_¨¹%S¿sXUb!®:ý…ÁÍ3‚Å@–Ä=®GŒ£!ýDÈ&èùqÓ0ï[¼“›Õª-1ÛÎðÄÈÉ;1Vø-ê’îí‡oø¥Sø½™Ž¤Ì,r‚ÄDõú¢+b‹}iŒÉ&÷ßí¿ž*‡±£VIúFn!W‹Y•½e”SkØþ<j·ÛÍš#øl[‘K þekªªò®åjd‹üëØÅ.óvzóš[äK\êíüøJSp‹Þ“™ŠOºÛPM¿#ùF>`È8èK +áþ¡¢.Ü5Ì ¿ö<Uÿ(Û08Ëí×èMÿ]ðrj8Cìv‹}@».œþìUM:äqÉgsD$&•J¶%4üxÂ1{!·³UrB]™B¨Ñòa +ÃäNèaÿîÅšÐF’S +ÕLÕœÞ=Ã2²ËÛÁ¯Ü»D,ž^ˆ0ë®4,¶ù¬ám§™}¯'xqÍ•£òZ~ €
,èþTÚ’'K3ÄøõUè`}å¹r±Õàì‘6]¬¨öù#ÌÌ2Ô½\uÕà
ÑrXOäy±r*Å>Œ¬ƒ¶‘'W4\:¶X5gvs4<]•Eì`õ¶!Y¼ wˆ=àã¬t8ÐZŸö†¢!‡s +=Z¼]–^é¡w”?ònèÕü<L»8ÌG‚¶®Ë6hÉz@D +hÆ{@Ô”e£#ì*ñ~!òýeX +Ì3oSpÞ/Ž&å«^«5k“:
¸Õ@®ï¹1Ä‚ÿ µŸwÚ¬üÉ1]F\Þ"ÄÓ==wl’ÄsÂ+uØ*æËX]‘‹²Ÿ¤ýWTÌ+mŠ^ŒÊB–<P]u˜?+VžÂ˸R½]4B\k\ø[ØÄPŸH(„ßß2ßï~J…JC¥¯çâ1öõYYç$|Ç'XܘZjÔm[©!"¸6‰\¼åŠ–’[ìlÏ] .çkÜ'4†?¦ùp:‰ÓË£*$¤|^ÂÐ
ÅÒ,U0ƒB`à"íYoª1yIÛå3ã/¯ +ÎñDÞ'ëx&AIzÐþóÎðƒåŠŒÁ»ë{d/hõpš@R?)v÷5W#v§)‘MY׿J^N“WDaÚÜ™ðeâF=(<¥øùÖú½Ð³/È6ÞäÓ^0Œ~˜n:@LšDèèë[‹zHUÍQ^æd(u~Ì8Ú±‘óˆl¡Ò‚ØFáœq>³ý.Í+4U;cZIXŽÔjÖáš*GÓQÛsh"0ÚÃü:9kð©aüàÛSÐ'~eÊu§hcNÁõÕt~&yT‚k%¯EýQ±þí”±}•¼ÙÀ“¤nÞ9"{&#œÀcÎ5‚º1Ù„¹¸Žc„Ë,Ïs5_’ùA2\¡×ãrýq>US“z;FR—_7Tdhz6 +<°!Ë”¥fÝ +ñŠó6$0‹*cœ&ñ£ÖÁê·† Ñ‹TÞ!ÆEcrŽÔ®Ó{vjCCA’n>òÜú+Ñžòî(Fýkë›®ú@MÞ,¶Ø¬Ý»6ÔÅÇð܈6$UOÇÙöW¬wæÂŠüÖm(ÁšLÓ4q1j<ì)ï&½
Á}4H+¯N<ØCù'*ƒTUfsÁ+¶//}éÆâòtf³²§Y¿óƒÉÌA¿z/ðê°NAÃr>¬qp«ÁB™ÑÚ³mÅN"žbZ÷ +œ'¯‹˜¥À½º`ÆD²]ÏíÅ©ÂO—D•În¹¢Sû,é&Ìg]r0nü¼ÚÀÊ2¿¹µnuÝ.KžÕßÀ Ï‚¯ÑƒÛmæÿò¸bì +ßXÔ嬿O b)àób4œ(üëœE‹<‘ÒƒN7cõ‹ó´…Ì#VK¹Q¢R+S™.¼~v0
×qÒ΄7¨'¬“å Ö¿O-z«Ïô0?cú²eèîÑúÙv«%eLŒcÝ>–cµ+ÕÚUòe•K¥¾²×FŒ‰ßÃ3ã®s){ø<ý[1Íy›ô;A×ÕK·;O©’™ËH]¯äz|žA:Ëtè¶ŒƒÚK!lÀz#ÕV_ß§ª,îÂUXé…ÂG#}[MTq«ŸQ'ˆÜ`+ýV›|2®ºäˆLµâŽŽ).ˆøáå65Ó‰ƒÇ]£á˜PU#Þi]¾•-©aœè <%ƒ°êtüÙ,R TgH¶õ©kX*`Zƒï´…쎒¶“@*òÔJNwY½œßê€À!¶Òòl0¥g!IÑò=º¡ðgá“H(I{"‚‚’ͦ×y?%¬ lZëÐdryy¯;Ú
Aé(F¯ +þ‹:RöÅT.H#ƒk‘½gäÈÔ°«<ž¥cÍmÎw[B6zU›.([hèÐD¿EȲ PϨh*í.±8m¿ü—œ€·tIÝߘîÓ\{4é”]ûÕLÐG½‡ +“Œ-œ¤Üa“Å‘Õg<W‰B‚§S<†úÖ€SÛYõ×M×+=ߥ4K;#%« +g¶†éãbD7÷ÌÜA¢w<LJȧc¸+i“ÎÔ¥}Ï:edHš»pïõ8Œ€„Dé
Œ9P+diñ\2G,Åï°ñKºfuÆ@(tÙ´>5v -é0ðɺ-EçI©'sš$;,¼LfQÁ| +H:… endobj 225 0 obj << /Type /Font @@ -9492,24 +9522,24 @@ endobj /FirstChar 2 /LastChar 252 /Widths 1128 0 R -/BaseFont /FTYHVI+NimbusSanL-Regu +/BaseFont /BWIHWW+NimbusSanL-Regu /FontDescriptor 223 0 R >> endobj 223 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 -/FontName /FTYHVI+NimbusSanL-Regu +/FontName /BWIHWW+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/underscore/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) +/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/underscore/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/Udieresis/germandbls/adieresis/odieresis/udieresis) /FontFile 224 0 R >> endobj 1128 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 556 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 ] +[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 556 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 0 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 221 0 obj << /Length1 1608 @@ -9523,54 +9553,63 @@ xÚítePœÝ–.î®Á·à .ÁÝh ñи‡`Á!¸»»»{p·àîáò}gfÎÔ¹ókf~ݺ]ÕUï’ý¬ggíMK©¤Ê"fjg’ -„è¶³•:‚š S€$ÈÀÉ à@¡HØÙ»9€Í-ê*šŒÌÌïÿéù+`ìöï‘·“°¹-€îíÃdmgo²u|ƒøoT ½ØƒlÀÈÛ7 2CaS´s|+ `øï©Ìú¿'òÿ‚Äÿ+ÿ¯Èû?÷_5úO—øzŸÿZÚÉÚZhó¶ -vVö8Ái°+ÈT ìhb0Z¿Íèo¿º)ÈÁlzÓòï1X8xxþ%¦f6±²ýk輇@¶¦ÿÊüMž¿y³ÉjËê(È3ÿëkúw–Ò›êŽjnöoÄþ;Óÿ0þ·sx°pðqX¸ØùÞ.;@€[À뿨÷7Ç?m £Ø ûÖ4;ÇßÿÛÿŸ–þ¿ÀHؙٚþµ'ªŽ@[Ó·ÕúÇ_a'‡7Eÿ¾ío-ÿ»ý÷’ƒ@® ”Å9;¡ -ë>#€Ç’îÇ”á`‡ñ*„ƼârÑ" - -fluâÔ!®{'†¡df‹ZAa¿to¡“•xDH[ -"ÇŠlŒ™×^¦ú0huŠÃ›¾"–‘d”öss³¸,³><ºØÞëfÍ\Ài.²ôÇÏ™{Ùj²4·k%6˜¯OhŒÞlÜO©¸.~¦v¦‘.PΆ:1c‡ô°\"àw´ÆÞaJz?Ø/µÖ&Ë'ÞŒ}-D"ä€|l(kQsša)œÒħd#Bÿ^„ˆÓø%Š«EßÉý0A‡(”9P rJrÎg6(K‰„ÜA…åxôþ@â8YÈÌŽ™ûð‚ÊpŸÎX*¤°ìšÿ](Æaœ;§i³¾^l+E"9|¢£^²éKéKšûFò/ -–Љ>r²mÑìqSHCÓX´¿§d°å&4“añûØ>dµvave6=…ò•³u£aÎ(PvW@¼q¥ ¢«íšÂàˆ"’šéo¢?¾cQä×|Ë^Ðú^…—žìl]{…\û»9;üâ~§·*ë\z<±îã‘ZÆa„õ®‰fo”¼çMÕ8ìÄVZ¢UêPö|&Áý&Ùp˜ð¦Ùåp!vó"ãÖÖMä'„¨ñþ…;¤ :‡[¶!«/óƒ2’h*….E¬fxÕý¶«‚ë³2X§©;¨ÈWQ>o’îðOV|ªÞÌ8ú˜e¦p*éɳ>£~9¡³¯Í4ˆ~mû*}¶ïƒƒúJfC<¢:»á]çf¨A,'/Ôì [äÌ´´ùCke·¦ª -lRêª-“yüu† }´Pƒ¬æ›NÒTõcâlãu¡C_•V.T&S~.›á„•»G°7Ø”€ñvÑ’OdXWIæè¿ú¡9©:È/ÿE}…x?šøÛ¬=7MJTT2Ø&¿«Uí!NŸ.îŒÓDŠjÜOmåe°×ÈÜ\²ŠÓ¢ª<YƒHbOq¡åk.ü†ÚîÚ¬«‡ZÎÆÃ½MòÓBú·^'æÃrª’éïm‹›(‹»Ÿw»ðnüPý>PqÄ*sѦðÁï¸HƒGüóÕ¿–|beù9o±°4õÞ7°RñT¤ -_“¾ËÝH†J•Ád¾‹ëÕ*‰BÌ£Ù¾joLX-)õù¡}›FN¹‹õ)4‚M°0Z[("¤@@ãh¯6*l.åÛ¸bzõ‘)ÛxAZ-¥¼NÚM>G/ô"5f7A]0÷©Íˆ’]Ê59Ër•O*¿ô¾"ÏuÙŸÓ˦N¬\ªm-õ‡OJyÀ,ötú³ø«VÊ1oªÜ½=?©È"eáz¸·UƒýW*º> -Ö*éÍc_’ØLì<uXžz˜Ë*ôOW€~L¥ -³Ñx¢Y²AŠ(a=˜q0©q¢ ¸çž·TWõ‹<ãJü£R6µ‚¡¶ÇžžZP“§ôð‚%³×ÛÖJ²©ùOâØºg¢Ëuc·çëkÏH~Â-_Yü
FWþÁ+¡¿‹í®¿ºÃWËHÅëä„Ó°Šò±@ -™{–û¿0•åÝYSï‡É§8e±k™þ4ÍwÑÖè}vTèº.¨ž -âHB›‡m>ê…£Ö-¼¯ORµ•dr‡Kwlài[à³ðEOo’|O`º×øŒTaê›È…ч‰«Ë› 3“âðˆ€äãôosØx%Âñ/^Nsòð©ÁH‚`†}°Â¸–ŠÐqâá~ h²x¬yÎØ‘ÔFc±GòàÕÏ:†›´ÞÔÞ2Lë¿wuß]ÕfvdI¬»f3x®]$¢²²ìe}P,B¢O~ ËÄõ‚ lˆ½_e2€^ÍUy^nd×¢ ÖÖ/‹Smí“ç8…‹7–RsÔΦúf/³›†kaÙQ‡`ƒ -zåæÓøXÔ‰kçV‘éÜ£'›‰q¿¥¤Åc|Ç¿>B†‰cdò«è ëov^0u÷[ïÀNÇ,* R„jP
„(Šþ:+LPxE¨©®^Å{ç·oÎýšJ—ÖÝÙ@bcH:Áƒ!Pi=£7©í€¢¤Y±œ7×è«úkŸ~º»“²sSùÓû“Ïêªh¶åËæäµjƒÔÇlg!t—œauƒÆ®C²¤JRxÈçZ½Ry²¾0v×âÇù¹â?)qÿÝOƯð¨Î‚w’€ÁGþ„ñÛn½U]§k>:è#àšEdÀÚ®Dþ·ŒÜ¥òõȈÇ×ýp¤4ô1‹Íñv‚Z_éW£(‰ïzáµ;Tuƒ^›‹N•á÷gå΄¯JÅ -¾š·o8«ø‚ƒJW/Aå"!Õø£2¡fùK?ÉG9Wh5ߪ̵ -Æ3ÆK]~+‚¹˜?s^h¯«¨Ðd°u]hQº¤Ãna;®wÖ—wúl3i°iöç@÷CÃÕhTtmÁæ7•ïBÊŸJ
kBHÉ.î:î¾¾bg»Ñ0@¹ÜÂký -N%¸„§¤#f5U¬çÛ:î6<aàLÙЄôS§äïä4Ýzñ’\{"»nf²ö÷›«‰þ,—ÙyØð -ÜØ
ç™_~ÆVÕ)ç ²9‡÷ñÌ—Øô(j‚îMúb·©µ¿£ò}*Û¾ªqN1óbÝɱÁ‹,S‘ÀaÃ$/r»t^ÇÐàØšÓ—ù<S M( -Ÿ NÒ…ŸßÿéÉpJŠì…‹ùã.yTþ56,µ ïòÒtŽëFþfÍ„¬h•÷]®v¿`éôíLŸŒ£Èª»E³mYa¼¾º(û“ƒË#=p”nÜlƒf?ðBcçJÕÃÐ×A±ä›…SÁ§Sûy0S>´ì†+^¯íúܲsL4¯ŠåøùËg-FúÝk„c/-d¸¥;ør¤e/Ê"–¸ñ·ÁKó'$ù´ª/Á -ö+VSL¿$¨ä?ÌF¡ôÎWEqôîm[R7•¤$`¢WHs¥¯‡On4Ÿ`ÁÙé½ºÝ 9ˆ)[VDEöâhQü~>~=éË5Ж—)¤Œr-Ÿx©pˆCXÍ7"[Í.,ô±Éè†u&Mß+çñ¥q0åOÙ½ñîÁ±’è’[ÏRBeB¯:Uþ`IËäÓ!H0=ï’ÔUú{¹ÉzqÓ,Ì›žãÖÜÓ™–àUSNº Ñ—D+eP–\Þ«¸¹žxi…7›æÏ.B>¬åªÚØ wm°Ù—G9zxsThÚŠÀì±Ê
ʈ7²rÖìH3Í;—z#x ¶RŽe¶ÅçSZ…¹cÀ=” -$Ÿ&Í®ëËÎñ|4W‰Ü—0ûµ -Üá¡Âñöá÷—s”òy¯×éæjõéMQAƲD¨€ŽDeÏåú }[1Q+2áiåì/²5¹¸öÈ ¥Á!B8ebJ¯%™=g‘¡ü¡Ø_˃á÷8,[‹SXÊ<`-W_<;›>ßí>¥áßîY»Re<}5EQRM`씌ñ•4àY=R{8¡Y^’}'ÇÕ¤XU?‘Nƃ9õt'†¤ -®Èßò¿Ârø÷XçgWp¾ëv˜oá0vÜT²ÛÆ4²ÓšŸcº1K¨wwФļMæNÔE"§ZÑÚÃø×–°|Î>½Á#My쾋CqCsg„"€…ÍF.Æ -,r:µ\Å}µv‹qWõ×ÊÜï×p×|ñUl
ÊÙ -©(äæãÖþˆÃžp÷±&òºê×ê®ì¸ÜÜ*j£vÙy5±ä"´Ôùdã¨Zc$?“égý¥¼’Açifj'œ<ÝóÙ:*R‰Èt‘Lj0êÏ‹· -LLP<Ûšù›3ú×4í6G‹øí¿ËeìÏèwæK?»Ü²Ró6XÚÖ—H°‡^^ˆk3ŽeèËÅiêrº>¤eÛ™MÝvçd®Àwen=õƽ‡·ƒˆgq¬á¢šWÞÁæEêVÍ"ÒÊ€o~ÎÄ¡³7ªUñ½˜L›©<ë^·*ábÞ
,lsÛ«ˆÿ™ÁÅ:@BfØ]-T}ä«ýFêdzEÓðq@/ñpdDás:e:9É*вج£PÌ—Ùg"#Zp:áûÕ6‡ù=IþJ³ÁSÅ„¶£a~÷ŠËÃKÂ<6¾Íg\¦áÇV¯;$x®´IÆŽ¯)·#“aEg×SS…ÒI]úÕ—CY+"Úu³Uõ½ÚcŽ2]6¨û)H¦‘9*¬‘½1‘)¡ñ㪿µw&O—ÿÿømõ ªž!½–=ÁR×Ðù;=½AMÕ}Þ/a/\g™4à(܌᡼?dý*W×+X¿Mù@ÃçX¿£·–¬'˜Bhf/µó‡±uÅ\O_þµ“êרöø2!¦Ÿ >gWl—ëHzoâ±T¾7ÁÖt¤çÞÝ -Mžs¥Äƒ?o}yèEŸô—Ì?¡âÛtÔú¨ûÏ%;ö“Í=B¾ë8IzB²™ÊÈ -«+ðbž³44_þ«¶$óDCht,i^’)ÂHñ{ähc?‹$µÙð¡ -ŧ/ÔÅ÷ .Ih´ÎÉ|%™¹+DºXå+Îüq}ó-_^ž -âæ{ä%~ݪ©‚çÑîôË-EP$`ü´'ñ–µkÿ,ãB˜qáË{ª•†{rÖ†AjÌ@&îàE›v®èäŰçŽS«ØYßÒLÛígi#zIc.¹;bòàp[ÿÆbº¨ÁIÈÆÖBD9^d³ƒ’ày©QÚ½ƒLŽºý“Y}ªuïãèâaQP8Ë|b<WRÁó‘O–Qþ’m=ýK¬îˆÀLÁÀãcÖ°|C9Æ´ÐÏÏ]J/U‘(ó]…η9D±œ=YþFìéŒ<i3^aJ%÷+L³K-«˜vS¯é|µâx½ŒÆNæsâ¸í%lìëÛé\Ë¥ãdáXçJ1‹©JqÚ†šÕÔHÐÊ,Ô 1{ΪdGÌÅÐØÛE ÅA»C~q$ÃÂÑrw`“=÷Ñá&éEèŽ É†ÕýÆ Â$ô“J6CÙ÷S=7˜]Ø=æåÊdIÛûå -5kù*%!£ë]=!öUß’0Š7Ö¯d2ЉÑm#9gÆßšâÆ5*F‡(è°®+ ï!“9^;’ë7K:æPâzÕ2ÌãÂV§íÔH¨â9üžŒÑ,kè;ôˆãGÁ„C”{12þ™Åa¬šºø—Ùè«èàà×Ѷç?¬–œí ?©Ø°êe‘ -ŠÇ©)…à,.ÇäËöøl©6)xŽ[òcõíÞ0jHøéÒ˜§KbïðñdXÔóU¬¸v)çf;‹\P*Fh\ý¹†•Wëé·2¶ŸCß0ñD¥¾š1Í×öùnÒy»ŠòÃÇ -%ky”ªxæÓÌ:’2Fî]ãz6*ˆþO‹À}ç0aç»:›lo³¡2ÿð
x³b˜Œ´SñpÖ:€gÿ8!Ãè½–v^}e6ÁøµP!áɰo}§–·â¬R¨qœý’ M˜„qºÜͼ±©("¯ïŠÙÊzS¹´}£ ä”,€ïP`ÊsÊ]æÔϳW^€ÉŸå8‹ -ˆ…˘‡Óú¤í–ÍH…›VVfOÔù¹û÷¾>–*Íëêµbjq:øg¿›åQ~?^š‡O{løkŠ8_HÌ!¼þ]\ç±sÑIqRŸ±X/~}ºó§œæåÿæêt#^™ýgb¡’¶{lWwÏí³:}¡šXzUågtµß -òÝ+ÅîËÔzIU„jÞ¯+ZÌ?®ÀÊo¸$¤µpØ}mPÐ,E=—ºóÒTqÔYi̼ …ÓcÃ5¿,«OUˆeËf•OUµËí~9Áu•ðÇÕŒ=ÎB-eTT`¥ë3Ž#ìW‘;ÞeÓ©Õ“ôoVG)ø4°ª5 -¢?õu!½c1X2¡éJvžTäÄåŸÊJúË•4)[©ªìoàà…y"QnÛþÖÍpmƒLûô9=_Qü¾ÌÅ[ÿ"6ûN\½Hm’\½¼ÂM=Iî3q™Òöd8ãÜâ‚s{j™W¢)1¤-ðv©ó›èþÒ¦ü>Ö”¤ÎF£&°õ B9Ü«“[y{‡ô,ú^”>êÐú] m ‡#cxç½´µW¢ø:©kTißÃ-”úd‹¼W«š²àÅE÷å\ètĽ„!Q›ªE?fkVõ)úkf2<[2ü§4òñ;ˆ_ƒÃŠWî÷H`Â]µþjãÐø2Ù9µ¥IÊbÁµ£0ßkv³˜”UåuñK½*šG¤)ËÕóν–æ~aý´Y1Âk ”¤“»Sm³Žj:Ú¥xß·yä²´¢_ÑØÖkÈ3öI<ÆO5ËrCL¶&î¢Î_ØØéÙ¡‚‘ßa¶[6,XÐŒ(YvÇörͺµ~Üðvõ³y"g–Pn[wÇJnaΫ}¶€©DDT¬?Ì£>é°b§ñú£RöD%FžMVp××I¡È9ÎKµÕv\ì|šòÀÁ—*=}÷>9Ñ?SAКœsë¡¢ËáŽj&½›ÓØ?ed~qyxA!«Uh©Žš‘«€Ù·~½ˆ¾À?4ˆ<ZdA$aO‹º,À¤ê Øßm=X®¦îÊúJ.NÂrù™aŸò_Ñó&ÉŠÛ¿òîK0¯ Jº–Y댢%W3Œ±ÀEŸÔMn¿`§/Të¦ÚQY#š¢²ôÃhÔ阺~”Vo7©lìÀŒîN¿Ù –¤åã®peEpã(qC8û”^Ëšæ½:ÑúMЯnáö U[ïÉÒh×jÝ–Ö9ní5Æ´¶Í»'8(˜ÙCµ_ˆÎriu´ˆ×+ù öÞŠï¥Öî’IÜ0óìfÌ1î—¹ð¶Ì¯¡¾ò -mE?} ök)#¾j×¾¦-ˆ@]\ÿí(RÞXÒk2U½•žôn¢æIòNñJ,GÏ*Bß&²Úƒ?ŒrþqÄD¼Øm(lªCÇüîʘ€»kzÕîU¦ÇL”í>ô¶•Žâ£¸–)Õ€¥HŽ®Ïî7´†¦[ÑÁh4”Ý(µBFØù^5©Êª¡e.eÃÆúþ¬6ųæy•…¤×ééCæˆï2¿ ^'ç.èctV-!#O’s¹&bxM–S¯2xè¡–xºz>]Ö0j“¸NX;DÖ(Ñó$ùíÈq]«/Ñ÷¿k-ôçKLT”Êŵ•[MöòìÀ%Yk—F -zï%9˜m‚¦vŠëë–Š•î[Ž"3ù?¸Ê\63òS -Xt¼±añ«`0Ô:ª:¶|Ц¨[ò§”/Îü¬¼Tȵ³Ù,Hù?’¯„Ñ^§Z±þÌ33Ä}I1Ô¸ƒßSš¬t"¦GÃÏ»|mÅý÷ï…ðd3ó*üB›Ä:rCzŒ³Š¸]Š·Ô7+4ë@ -D-ˆ’OÍ\9KŸAÝ)-Ô} ≫Øÿ`¤ƒAÃär‚UˆÑÍÙQ6SQ ü¬‚D.¶Ø’À¯Iõ‹D_ÔŒû>ÜÔÿ ‘"}”`í{äLT ÛÁDÌÅ| --ƪxyîåôÆI·E¥/d:ñ½uŸ¬RÆ6Oï•NSnËu²ÚLÓŒˆÜSu³ÜgÆ|3AF^œ¢TÁ9õðÜ=W©1z`wmg|Zôspñž„ì'aÏ/
KÉŠrKà *ïºR³±> ì -Fd^h°2ƒdù'ØX‚Kñy|K3ÒhÍ´¿öÈ«-6Hvdy¥ŸMöÝ9(|”Ü5ä;ÚáÓBøH‹øÖ9˜>"^Ôu¸°ªu|ÓCf˜OÞVrxºb3r‚]d5æ@lTw•vù@~ÜqH¨ðû· “ºe½ººi'þB5OàÎ
ëbÌx—h2cVÈ -Ô{œ¹š°ÀºæD>K°ôµ
©ëÈ“ÐxZ«Ðæ¥õçnA4O¯.Y¹©’î·ye·k³z¨nuèï -bãâ¤-ä«Ð)GÝv°¬wmꆎ&ìcNËPã;‘qfðK»1ØË›fÉi&)EgN5^pLçÖlÆÿ0Ú퀎rô%bYk9ª™B¥%\§Jµí¾‹@˜ùÌi“õžPîNÿbÌ“‘fI",Cƒ®Öy•9&º¼0Z -ÎÁÏ ÄÈÒfK`¶‰ý·½¸![1g Î&^"œåôH³ÿ—hG¼¾ŒÔ.±]Ù~gþªçë„HÌ ¥;C6)õèbüoK³xé«ðl÷’öezå‰Û+$»-_ì˜z£ (JÐ$tËs[9HŽd^'õ}ëämøÀüíæƒúævSì?’:IBRp©™ìëMp"_e廯N=Y´ ˜ §]hh$D‰Ù“æƒþ/jCÏÖI”ßöTª”Àd¿€sRÊb§ùe•œfÄljʼn˜¦žx˜cF´”2E¸ÍêàEÔ.¢Ü¢cP=t;;`ë›’ëô¢È×à5\š¾ûL™Úé -^”Íï&_o‹ÃÉsO|e…ð?|1Øà†0ÂüxXTïo!L׃{vɧ}Ú¼^˜NØÿš+æßÛê-éÞ¦}°ÌAÑ&)TJX–¥²<_–¨gQg•«,GÕ«KT»NU¸ß÷í:Ü`„JïhÑ—_ÊzϯÈozšNíÙ®ÛÃ74GS½ƒéóíÞßÞÀ w\Õ¤p•Ö -×€Vƒ«™-êQBF0Éæ `'ùz8ת¼(=‹k5ÑFC*¸eMÉ:
Õ®\@ú Bå‹ aAOÔª4çŠ?.ÀS׎Ê4™^o]rqlþzdº¦±û0^>B¹rT?Y€H~šm·šÁ¦MVEFådö-èSO8‡ŠŽüõ6Ô´0cŠÓcü©&Ñ+pÄÞï>¤^Ñ”@ƒ”ä— ¨St‚yQïirÁ9ür[È»½è”ÁÓð¥ñš‚瘲—A;Û-b½[Qî™.àµñuö÷ê÷ëY¢tÃï9ÇÔ™ ]?˫ӧºå@“Ò}®z/&dÕ¦©If\Í‹¹¬£~5ù¸þˆäK×Ü=^«ßà%m¨ÉÛ!ÆõÛˆ†órÕèkà‹%7BV:IÌ…÷7 õ ¼wq>‰¶‘ Å´áópÅæÑöjxã”òÓxѱƒ+#~šÃ}"ÏC,Ùºžu‚½Ø×¥ÁíŠ;%C4/Ì„ç¸ý)e´`'rÚ( 1[*âk{¢Œ£¡Ë¼y÷5ðNÄG×ÎæÜÆḬ̂˜CRË×>_G¯}o‰^U×åÊÑOÑúE¾±Ä°z[‹gLàšñý|*ž$œl™»êà<þ&ß“)“‘(´uoã_è|*O1°-Æ^mUQaìÕÏŸäɧÒé"p1IYo¶‡Yw:Ó§ü¡€NËSë#ÃŒYm.Zû¸•XÿQAe‚ 2ÓÄ¡,ÿGáÈ/#ãE›»ÇÜäVsðNi[ÝN²ÎÞ)ì‹ÑuÅ©8En5ØmYŠ¥™ùìúµE"JºL^ñ€÷ ¬e!Ó¿è=I¬Õ¼¹Ïtsë„_héY<̬’?düü´Ç'£NÌ‚©º%œ2øGøåájXû|jÉs4S/ïÑKCëT0¯Oæ´Ô¨; «wùÒ—Œi -éKö;o·»ñ'XUx>E[éFEãêõ‹CR²[= -æþ+™Øzî#/WÆ“Ž’·)kâܧ—!KŠúi~$œP~‘ nê?T¼ƒ›`…aîO?‡Êïû)KMf© Œ(do%»QÙ»Ù}ß#¡½ƒ‡€‹nAŽzÚS<#<¼ÓöãȹR‚Юsöˆ£¤Ýñ Çÿ˜^ç{‡ú„‘ÖßóŒWݳÿ(ÿàÿ +vVö8Ái°+ÈT ìhb0Z¿Íèo¿º)ÈÁlzÓòï1X8xxþ%¦f6±²ýk輇@¶¦ÿÊüMž¿y³}Ñ”V’“fþ××ôï,¥7ÕÕÜì߈ý[ +v¦ÿaü…!.nç +ð`áàã°p±ó½]6v.€ +@G°+@÷ivŽ¿[ÿ·ÿ?-ý‘²5±3ýkOT¶¦o«õŽ¿Â&NoŠþ}ÛßZþwûï%\A&(‹sv&B–?S’+ 3úG%u»;9`ûíjÔr³}Êí:¼~ß(1z®düÓä6{hÿ²-Ç´3ØI`Mß‘ +§2çðˆ.vÿî–¾wh ¿¯ã¾k›„9=™VÈ.Ìçk:‰ˆŽz‰G„q>Gloy\gP—:×êÂAÝ:@g¹¦ØdÉ㨠+TïàëçñéÉ`ù&+¯ÓõKŸwðR^< y‰dë)1Þ,‰†“tûÚlì‡È·Ý²r§>¿WÝ?åß4˱ý®äþy8<f•*Ð_x¹•ŽÐR œ`íñÉa}üÕ•(_7ú±9FO#bì²Æí+B_rsoU;›ã`öÍûãŸí‰ƒÉ|ç<‡ðò:*¶ô¢oŽÕcGw´OÃöøYßCHCù¬ÒòÅ{«ªZ®®œóç¶È/yÖ}F +ËñèýÄq*<²™3÷á9•á6>±THaÙ5ÿ»PŒÃ8w&N!ÓZg}½ØVŠD(røDG¼dÓ—Ò—4÷ä_& +Lä¿(Å0,}ädÛ¢Ùã¦8†¦4.°hOÉ +`Ë[Mh&Ãâ÷±}ÈjíÂìÊlz +å+gëFÜQ 4쮀xÿâJADWÛ5…ÁE$5Óß&D|Ǣȯø$–½ õ½ +/=ÙÙºö +¹öwsvøÅý(NoU:×¹ôxbÝÇ#µŒÃ„ ë]ÍÞ(y7Λªq؉,´D«Ô¡2ìùL‚ûM³á0áM1²Ëá8B:íæEÆšÈOQãýwHt·:mCV_†fe$ÑT> +]ŠXÍðªûmW×ge2°NSwP‘¯¢|Þ$Ý;)àŸ¬øT½™qô1ËLá UÒ“g}F ürB1f_›hýÚöUúlßõ•̆xDuvûÎÍPƒXN8^¨Ù¶È™iió‡ÖÊnMU,ëUؤÔU[&óøëAúh¡YÍ7¤©êÇÄÙÆëB‡¾*\¨L¦ü\6Ã1+v`o°)ãí¢%ŸÈ°®’ÌÑõCsRu_þ‹þ8Zû +ñ6(~4ñ·Y{n𔍍d°M~W«ÚC4œ>]Ý 3¦‰Õ¸;þ(žÚÊ?Ê`¯‘¹¹d=¦EUy:³‘<Äžâ:CË×\ø
µÝµYWµœ‡{›ä§…$ôo½ȮåT%ÓßÛ7Q3v?ïváÝ2ø¡ú} âˆUæ¢Máƒßq‘øç«-ùÄÊò[sÞb;!aiê ¼!n`¥â©H;¾&%|—»‘#”*ƒÉ|׫U…˜G³}ÕÞ˜°Z>RêóCû6œþrëSh›`;`´¶PD&H€ÆÑ^mTØ\Ê·q?Äôê7"S¶ñ‚´ZJy´›|Ž^èEjÌ<n‚º`îS9š%»”kr–å*Ÿ4T~é}-Džë²?§ –MX¹TÛZëŸ8”ò€YìéôgñW”cÞT¹{{$~(R‘EÊÂ-ôp54n«>û¯T6t}& +òá‹õŒ™ÒÉΔsPð¨1ùÀ;Žˆ€TøÊMÿMËwXÙa½AΦ»
‹¹H™X.;>?Á *
nœ¸lmB¡Ú—ÜAeAÞkÈlÄS8¦v}ž]Š]öœbEþêOírXü7è¬ói•}¹Ö{›¤ö|<çOáǬUA1ä»NÃ~†žú +UÞð³q,•Gx¢È0ðAÆjŒ><‡JSß ‹_96#2•£Ì’ š–Þ]e0.Ûù}Ìîs +ÅPû¦ +қǾ$±™Ø-xê°<õ0—'TèŸ ¯ +þjCm==µ ¡,&O1èáKf¯(¶•dSóŸÄ°uÏD—ëÆnÏ×מ‘ü„[¾²†y@®üƒWBÛ]u†¯Z—‘Š×É ¦'`
;äc222÷,÷a*Ë»³¦Þ“Oq"Ê b×2ýišï¢Ñû<ì¨Ðu]P=Ä‘„6)Û:|†UG[x_Ÿ¤j+Éä—îØÀÓ¶ÀgዞÞ$ùþžÀt¯ñ
¨ÂÔ7‘£W—!7Af&ÅáÉÇé
Þ*æ°ñJ„ã_¼œæäáR9‚‘)Àû`'„q-¡9âÄÃý@ÐdñX!òœ±!"!©ÆbäÁ«Ÿ;u7i½©½e˜Öïê¾1ºªÍìÈ’XwÍfð\»HDe)dÙ3Êú X„D=ž2ü@–‰ëAØ{¿Êd +Êͧñ±¨×Î9¬"Ó
¸GO6ã~KI‹ÇøŽ}4„ÇÈ>äVÑA×ßì¼`êî¶Þ2ŽYT@¤Õ QýuV˜ ðŠPS4\½Š÷Îoßœû5•.3º³ÄÆt‚C ÒzF!oRÛEI³b9o®Ñ;Wõ×>ýtw
&eæ¦ò§÷'Ÿ/,.ÔU/ÐlË—ÍÉkÔ©ÙÎB4è.9Ãê]%†"dI•¤ðϵz¥òd}aZí®ÅósÅRâ6þ>ºŸŒ_-àQï$ƒü ã·Ýz«Z»N×|tÐGÀ5‹È€µ]‰ün¹Kåë‘®ûáHièc#šãí7´,¾ Ó¯FQßõ::.Âkw¨ê½6*ÃïÏÊ?œ _•4‹Â”Xm‰õ¬D)JDWòC.j²²Ù½>ÇŠ°ÿ +œ-•ü@«ñÜï&½0yj_°<ŽÝ`•¹¨½âëÈuÕ…bÕö¾HUwoP$î~ȃS’8ŽO)²z=z7ÆÅŸR¹¶¤'‘c¯d$Ôsˆ½¡¾pþ¥!@Ë ˆøžã¬¬äʋڻ£3Åœo?Yœ×£ZƬ“™ÓlÂOÊ $s³éÍK¶äÐÎ[¾’‹â°)Õîw³ òÇZÇSµÆWŠ —q’å‹îzô788·l£é +àŠJ¶îµšñ½ŠX°cŽÝ~]›HÆuœ—÷H€YþìUL]—?À ÏNR° +µ\bÉð¹,Ñ+[p,CΞ¢žŽ³Ê“æMü*Z2¾¢þ¥
|r%vQ2>]"›ìšÑ‡£þi?Tv#äug´W-5:¡™œæ +sôbÃgë©
e¹Ì.
#t}‚Å_¿Ä¢±-„ÇîÊæ¶žä0ݯvüð]·â3ò‘TªÝý|5oßpVñ•®^‚ÊEBªñGeB5Ìò—~’4r®Ðk¾U™kb¶-cN¶–c•ä6¡=ÝNm£ƒIG…ØN*6,‹6_Y;Æ»Âs iŽ'#–
>ìzÏä«„v=Vh +¦j ©^c“д±í½w-¯íÔ_1†:Ü›¾yd}ý~~kD +“=¹p-Q¼‘sÞ©D“Ì%Há¿©ð[¸BêŒgŒ—ºüVs0æ¼Ð^WQ¡É`ëºÐ¢tI‡Ýþš'|]ï¬/ïôÙfÒ`ÓìÏî‡ +†«Ñ¨è.Ú‚Ío*'Þ…”?•0Ö,„’]ÝuÜ}}'ÄÎv£a.€r¹…×úœJp OIGÌ,jªXÏ·u6ÜmxÂÀ™²¡ é§NÉ1ÞÉiºõâ%¹ö<&DvÝÌdí1î7WýY.³ó°áŒG†P
%Yuº]é‰A3hÎápK¶%Ž"r1kUÇû3Ëçì´r~–0ým6,×’$+œûIýÅQÛ×P¯'¤Ž¹üƒÍ
ZÁÕz!mÄê–Æ´#h,¯©ªÉçvŽ›ÊfU‡P¢¼º<Õï më„—ƒÀ¥®mÝ—acuZôÊßg8öüÐ¬Ž˜ióÕ¸±"Î3¿üŒªSÎAdsïã™/°éQ8ÔÿÜ›ôÅnRkGåûT¶}UãœbæÅº“cƒY¦"ÆI^äv鼎¡Á±5§/ò=x¦@ šP>A¤;?¿ÿÓ“á”ÙóÇ]ò¨üklXjAÞå¥é×üÍš YÑ*ï»\ÿì~ÁÒéÛ™>G‘Uw‹fÛ²Âx}uQö&—Gzà.(Ý ¹ÙÍ~à…:ÇÏ•ª‡¡¯ƒbÉ7§‚N§öó`¦|hÙ
W¼^Ûõ¹eç˜h^Êñó—ÏZŒô»×Ç^Z>ÈZqKwð%äHË^”E,qãoƒ—æOHòiU_‚3 +o6ÍŸ]„|XËUµ±Aï4Ú`³/rôðæ¨Ð´9Øc•”9ndå¬Ù‘fšv.õ +Fñ@m¥ZË8l/ŠÏ§8´ +sÇ€{(ÂÌ¥%ö`ø?8ëf]Ø'ݧŽ/Ÿ5_ÕN®÷ó fteÀúƒåìㆺŒYýtq"%-dѯRóq²(H>Mš]×—ãù,h®5¸/a"ök2¡5°¬™Ç
-½>â%ùÄØâÞƒˆW䯈iYHRSûÍLÄlaÌšïZ¾å ×ÃìÜÊÚk(AôæOí)Ö~מGMÚ1Pb ´Ö‰ã|s]/íg\ܰ¿>é¤"Lh(puNùÎ6ÀÆTe®gÎsÈùή›^ù°ãgF<“@ +¸)£rÏÖ›±‡±Ác¥šãIúä…Ž¥
Ó$¦•~rË€çñ€6k¹o´^ºò'¸®Dy[ˆ5I³by1If˜§\Vpg|j™¹t§‡îâ<TðuÚš:K5"ú†9ÃC…ãíÃï/9æ(äó^¯ÓÍÕ<êÓ›¢‚Œe‰P5 +¥“ºôª/‡²VD´ëf«ê{µÇeºlP÷SL#sTX#{c"SBãÇUkïLž.ÿ!þñÚêAU=Cz-{‚¥®¡ówzzƒš*ªû¼_:à +^¸Î2iÀQ¸!ÂCy!ÈúU®®W°~›ò€†Ï±~Go-YO0…ÐÌ _jçcë>йž¾ük'Õ3®QíñeBL?A5|ήZÙ.‡W‘ôÞÄb©|o‚-¬éHϽ»8Fa$í`:QNeÔH满üª¾Qn3U¢b ÈÙÊÁ'LõMºÍ•T4Ôös€¨šŒÛäëŒØ®S|¡„ŽD‰Œß$$ŸÍêPL?9ü*„¤`¼€s˜®Ê×—ÄR)é"£>åUý~®
ñU(<*ر»Q×:xä¡4v; +4»,#Ö‘ºø±Ë¾”5Å={l¬F‘ää_Ï <Ùl*Ý@Hz å;[ +ý0¡Q–~p³#“à~]*ø“ýxÁ ¦ðyÏŽs—âc3_%˜UZa{LØyˆ+ñ.)ôEÇt.J„ÙÈk2<†.DëÆòòW•ÍñÙÜy>„€W-5*Ñ&±BàÇz1þ˜S
ÓEÈ—9µŸúd'Œ›
¥U¶- ™ù¨à•*:ʃ?¿ÉÃ6"ª®x¡QÒç<³`tš<çJ‰ÞúòЋ>é/™B=Ä·é¨õQ÷ŸKvì#&›{„|×q’ô„d3•‘úl®éÔ—™qA¯Og‰E‚Ûy2µ.DZ¸)V¾5F1[¾k*’V“pXí£ïÅrýÂJTSš††Ê&ײͽ¤§«“VŠë -ˆÁIçôqí“0µ%žVïH1?m¯ä%L@F8\«pÞµ9…}}J†ì•~A«*Щ¥=D.ÒºÚbɧ !È¢ã¤qw—a]©âÂÜ¢¹¯MÇqÀ~¯»…™aFcôH†[eõ*Iéyé(ÕUѽo2ªfyí;ùXìš4÷ùÙ)]‹ÚVWàÅ<ghh¾ü#VmI扆ÐèXÒ¼$S„‘âöÈÑÆ~Ij²'àC[ŠO_¨‹5îA\’,Ðhœ“ùJ2sWˆt±ÊWœùãúæ[¾¼<ÄÍ÷ÈKüºUSÏ£Ýé—[Š HÀøiOâ-k×þYÆ…0ã +—öT+
÷ä¬1ƒÔ˜LÜÁ‹06í\ÑÉ#ŠaϧV±³¿¥™¶ÚÏÒFô’Æ\rwÄäÁá¶þÅtP5:ƒ ’Z‘…ˆr¼Èþf%ÁòR£´{™uû'³úTëÞÇþÐÿÄâ &p–ùÄx®¤‚ç#/ž,£ü%+Úzú—X'"Ü™‚ÇǬaù†rŒi¡ŸŸ3,º”^ª"Qæ» +osˆb9{²üØÓyÒ0f¼Â”JîW˜f—ZV1í2¦^ÓùjÅñzÌçÄqÛKØØ×·Ó¹0,–KÇÉñΕbS•â´
5«©‘* •?X¨AcöœUÉŽ˜‹¡±·‹@Š‚w‡üâH†…£åîÁ&{î£ÃMÒ‹ÐA“
«û„Iè'•l†²ï§zn0»°{ÌË•;È’¶)öˬÇê›h}”S%ÁÊ¿ÙS%§':Œm¼ØÒ¹G KAÈ7'æHFÌÆNhGÇýLJtM†Ëæ*QJUÊÕN‚ÈYuލ|Â=#Z¬” %¾Œ™ãn¯xFLÎ×"ÄÎÃÞ7°”TkB[j#Ä<l$}Œƒ&%Ð9—à„ãv)JÂ#'ûúÚ]—¬b²¹?²/™C ¾ +jÖòUJZCF×»z6B쫾%ao¬_Éd £ÛFrÎŒ¿5ÅkTŒQÐa]WÞC&s¼v$×o–tÌ¡Ä ôªe˜Ç…NÛ©‘P?Äsø=¢YÖÐwèÇ +‚
†(÷bdü3‹ÃX5uñ/³ÑWÑÁÁ¯£mÏX-9ÛAR=°aÕË"SS +;ÀY\ŽÉ‡íñ%ØRmRð¶ä=ÆêÛ½aÔðÓ¥ 0O—ÄÞ;2àãɰ¨ç«XqíRÎ;Ìv¹ UŒÐ¸ús
+¯ÖÓoe,l?‡¾aâ‰J}5cš¯íóÝ¥ó8vå‡JÖò(U!ņ̃™u$+dŒ
Ü»,ÆõlTýŸ4ûÎaÂÎwu6ÙÞfCdþáðfÅ +0i§âá¬u +”»Ì©žg¯¼ +7¬Ìž¨ós÷ï} |,%Tš×Õk ÄÔâtðÎ~7Ë£ü~¼4ŸöØð×q¾˜Cxý»¸Îc碓â¤>c±^þüútçO9;Ì;ÊÿÍÕ/èF¼2ûÏÄB%m÷Ø®îž5ÚguúB5#°ôªÊÏèj¿ä»W(ŠÝ—?¨õ’ªÕ¼_W´˜?~\•ß„q)HHká°ûÚ !XŠz.u祩⨳ҘyA5¦Ç†k~YV%žªË–Í*Ÿ«j—Ûýr‚ë<*á«{œ…Zʨ¨ ÀJ×gGد2"w¼Ë¦S«'èß0¬ŽRðiZaUkDê9êBzÇb°dBÓ•ìZ=©È‰Ë;?••ô–*iR¶RUÙßÀÁóD¢Ü¶ý›áÚ™öész¾¢ø}™‹·þElö¸z‘.Ú&$¹zy…›z’Ügâ2¥íÉpƹÅçöÔ2¯DSbH/ZàíR1:æ7Ñý¥Mù}¬)IFM`ë„r¸W'·òöèYô½(}Ô¡õ»Ú@GÆðÎ+zik¯ZE1ðuRרҾ‡[(õÉy¯V?4e'À[‹‹îʹÐéˆ-z C¢6U‹~ÌÖ¬ê!Sô×Ìdx¶døOiäãw.¿‡¯Üï‘À„»jýÕÆ¡ñd²sjK“”Ä‚kGa¾× íf1)«Êëâ—zU4HS–«ç{-Í=üÂúi!³b:…×(Z)I'w§Úf[Õt´Kñ¾oóÈ3diD¿¢3 °×gì“xŒŸj–冘l/LÜE¿°±Ó³C#¿Ãl·lX° -P²ìŽíåšuký¸áíêgóDÎ,¡Ü¶îŽ•ÜœWûlS‰‰&¨X˜F|ÒaÅNãõG¥ì‰JŒ=›¬à®¯“B‘sœ—j3ªí¸Øù„5å#€ƒ
.Uzúî}r¢6¦‚ 518çÖCE—
+ÂÕ*Lz7§7°ÊÈüâ"òð‚BV«ÐR5#W³oýz=|h*y´È‚HÂ"žuY€IÕA°¿Ûz°\MÝ;•õ•\œ„åò3Ã>å¿¢çM’·~åÝ—`^”t-³Ö?DK®f-b‹>©›2Ü~ÁN_¨ÖMµ£.²F4Eeé‡Ð¨Ó1uý"(ÞnRÙØÝ~³A,)HËÇ]áÊŠàÆQâ†pö)½–5Í{u¢õ› _ÝÂ7쪶ޓ¥Ñ®Õº-s<ÜÚkŒi9l›wOpP0³‡j¿åÒêh¯Wòì½ßKÝ%“¸aæ/ØÍ˜cÜ/sám™_C}äÚŠ~ú@ì×RF|9Ô®}M[º¸2þ[ÛQ¥¼±¤×dªz+=éÝ.DÍ“ä"â•XŽž;T„¾Mdµåü∉x±ÛPØT‡ŽùÝ•1w×ôªÝ«L™(Ú}èm+ÅGq-RªK‘]ŸÝoh
M·¢ƒÑh(»Qj…Œ°ó½jR•UC1Ê]ʆ‡
õýYmŠ/"fÍó>*I¯ÓÓ‡0Ìße~@¼0NÎ]ÐÇè¬ZBFž$çrMÄðš,§^eðÐC/,ñtõ|º¬aÔ&q°vˆ¬Q¢ç;HòÛ‘ãºV_¢ï×Zè1Η˜8¨(•‹j+¶šìåÙ?2J²Ö. +þ%tÞ›NW’‚=OÉ5‰¤‹$‰PîœoR€QáS}ÍþÞä»M”m]'§%õŸAªŒ2ŽŸ¿‚…nO(×”ë)ôÞKr0ÛMí××-+Ý·Efòp•¹lfä¦ +¦<êf¹5Î4Œù*,f‚Œ¼8E©‚s&êá¹{®RcôÀîÚÎþ8ø´èçàâ= ÙOž_–’å–ÀATÞu¥fc}@ÙÈLã¶gàÈEÅ'!ä˜ðw¿¦ÏÑ Ä£åÚJ^õïÔÇÄÖ¦ ò)Å^öñh–qmJBÙñHäÛ…YçÅgSgÔ†›qR3zèQɳ·\¸àv*›.Sã¨.ê!§óçÒ<§\@ŒzJŒÈ¼Ð`eÉ2òO°°—â;óø–f¤Ñši~í‘V[l02ìÈòJ?›ì»sPø(¹'jÈw(´Ã;¦9„ð‘ñs0}D¼¨ëp!aUëø¦‡Ì0Ÿ¼äðtÅfä»ÈjÌØ¨î*íòü¸ãPá÷7nA&uËzuuÓ<Nü…j:žÀÖŘñ.ÑdÆ6¬8)©âM¨÷8s5au͉|–`ék"Rב'7 7ð´V¡ÍKëÏÝ‚hž^]²rS%Ýo"ò:Ên×fõPÝêÐßfs‹-ÏÊ–U¿üà`ù +Ë——t@_4[ûµnÒ5üˆ•¸€jƒ|ÄÆÅIZÈW¡/RŽº!í`YïÚÔ
MØÇ&2œ–¡Æw"ãÌà—vc°—7Í’ÓL4RŠÎœj¼à˜ÎÙŒ3þa´ÛåèKIJþÖrT3…JK¸N•jÛ5|0ó™Ó&ë=¡ÜþŘ'#Í’DX†]ó*sLtya<>´ƒŸA‰‘¥Í–Àl9úo{qC¶b Ï@œM¼D8Ëé‘fÿ/ÑŽ8x}©]8b»²ýÎ(üUÏ× ‘˜Jw†lRê/ÐÅøß–f+ðÒWá;Ùî $í1ËõÊ·WHv
Z¾Ø1õFAQ” I2è–ç¶r ɼNêû8ÖÉÛðùÛÍõÍí¦Ø$u’„¤àR3Ù×%šàZE¾ÊÊw_z²h0AN»ÐÐHˆ³'Íý_Ô†ž“(¿í©T)É~礔ÅNóË*9[͈ÙÔŠ1M=ñ0Ç6Œ„i)eŠq›ÕÁ‹¨]E¹EÇ <zèvvÀÖ7%×éE‘¯Ák8¸4}÷™2µÓ;¼(›ßM¾&Þ+†“çžøÊ +áøb°Á
`„->øñ&°¨ÞßB˜®÷ì4’
Nû´y½08°þ54WÌ=¾·Õ-ZÒ½Mû`™ƒ†#MR¨”°,Key*¾,Q?΢Î*W)þXŽªW—¨vªp¿3îÛu:¸Á•ÞÑ¢,",.¿”õž_‘ß ô4Ú³]·‡ohަzÓçÛ½¿5¼A︪Iá*$ŠzO´<´£óƒ*ÔYbÜ¥b…4™¦×„%£îÉ]¾,Å:H|Eÿ´y®‡ù³oÇSEnÅÂü{˨œXÕ`ÆÙ‹[¯|$;)G^”ãÁ”‚ts5;‡Ä最îóÞ%=cf!Z
ÞW¨qŒVUÚÜd)TX°Ä㇂g¾âP°ØÅ˜%í}ØÍ-óZaÐ_¨*Ù±#“)¶¥+4rt•vì,S%Fåpè¿J4Q¨TÂNÌ`"WÌ‘tT%†Šç‹›KŒÌ1¡®òÀuÝE¸î73ß‚ºÃâ¬WNâÔ×Áæð¼áaàn¦ˆŒüÕµ¿_«×°Ÿ!pƒø{Ys”o +³}Ú•èáEKA@xä”aOç1æ–W/^;ïæûjƒŽ(AöªKAír}`4M‘ž·UðôgÒõXå‹1½V±Â5Eã D
|*pˆÔœ\®h]cŽKupµ®mYuX +®W3[Ô£„<Œ` “ÍAÀNòõp®UyQz×j¢†TpÊš’uª]¹ +€2ô„Ê2@ž¨UiÎ\€§®•i2½Þ>ºäâØüõÈt!Lc÷a¼|„rå¨~² +ï=n@ëAyïâ|m#A<ŠiÃçáŠÍ£'ìÕð>Æ(å§ñ<£cWGü4‡1úDž‡X†3%t=ë{±¯K‚ÛwJ†h0$^˜ ÏqûSÊiÁNä´Q@b¶TÄ×öDGB—yóîkàœˆ®?œÍ¹4œ™a1‡¤8–¯}¾Ž^û2Þ½ª®Ë•£Ÿ¢!õ‹|c‰aõ¶& ΘÀ5ã/úùT<I8Ù2wÕÁyüM¾'S&#QhëÞÆ¿$ÐùTžb`[Œ½*Ú ª(¢ÂØ-ªŸ?É“O¥ÓEàb’²Þl³ît,¦NùC–¦ÖG†³Ú\´4öp+±þ;¢‚Ê>Ad¦‰CYþŽÂ‘_FÆ‹6w޹ɿàÒ(¶ºd½SØ£ë,ŠSqŠÜj°Û²J3óÙõk‹D”t™:½â +ZÓ—ìwÞnwãO°ªñ|Š¶ÒŠÆ5Ô놤4d·z +@H¬ÈôšÕÚ¶÷ÐÛäøºÊÄmÏï‚è”ꃣ/.DšÅNòt7(à|ÉÎy´tTÄØn~™NÌT*ÃnËÙ‘Ð í-}ôf•éÌ÷}…-±¹5Ø{·u•åhE w›Ì°`Ú/Ú:—K1åñÅ:!j[/—þã!sNšÔRAS§ÜEGòÎoÍ•RªœËÖV"²ÉOÃÖ[žge™§Má,‡#tú£ÎÌRt¿ÌýW2!±õÜG +^®Œ';%o3R,ÖĹO/C–õÓüZI48¡ü"ÜÔ¨x7Á +3ÂÜŸ&~•ß÷S–:šÌRAQÈÞJv£²w²û¾GB3z +åÿ endobj 222 0 obj << /Type /Font @@ -9579,14 +9618,14 @@ endobj /FirstChar 2 /LastChar 252 /Widths 1129 0 R -/BaseFont /IYIZMK+NimbusSanL-Bold +/BaseFont /OWFPJF+NimbusSanL-Bold /FontDescriptor 220 0 R >> endobj 220 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 -/FontName /IYIZMK+NimbusSanL-Bold +/FontName /OWFPJF+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 @@ -10123,7 +10162,7 @@ endobj >> endobj 1139 0 obj << /Author(Paul Bütow)/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20080810223223Z) +/CreationDate (D:20080810233801Z) /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -10134,212 +10173,212 @@ xref 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n -0000094940 00000 n -0001104187 00000 n +0000094943 00000 n +0001104041 00000 n 0000000054 00000 n 0000000143 00000 n -0000095001 00000 n -0001104115 00000 n +0000095004 00000 n +0001103969 00000 n 0000000190 00000 n 0000000290 00000 n -0000098652 00000 n -0001104042 00000 n +0000098655 00000 n +0001103896 00000 n 0000000338 00000 n 0000000438 00000 n -0000116936 00000 n -0001103916 00000 n +0000116945 00000 n +0001103770 00000 n 0000000484 00000 n 0000000592 00000 n -0000116998 00000 n -0001103842 00000 n +0000117007 00000 n +0001103696 00000 n 0000000640 00000 n 0000000875 00000 n -0000197585 00000 n -0001103755 00000 n +0000197604 00000 n +0001103609 00000 n 0000000923 00000 n 0000001038 00000 n -0000280011 00000 n -0001103668 00000 n +0000280027 00000 n +0001103522 00000 n 0000001086 00000 n 0000001186 00000 n -0000285311 00000 n -0001103544 00000 n +0000285330 00000 n +0001103398 00000 n 0000001234 00000 n 0000001349 00000 n -0000288910 00000 n -0001103470 00000 n +0000288913 00000 n +0001103324 00000 n 0000001402 00000 n 0000001557 00000 n -0000288972 00000 n -0001103383 00000 n +0000288975 00000 n +0001103237 00000 n 0000001610 00000 n 0000001790 00000 n -0000326211 00000 n -0001103296 00000 n +0000326217 00000 n +0001103150 00000 n 0000001843 00000 n 0000002084 00000 n -0000331753 00000 n -0001103222 00000 n +0000331746 00000 n +0001103076 00000 n 0000002137 00000 n 0000002353 00000 n -0000333403 00000 n -0001103097 00000 n +0000333398 00000 n +0001102951 00000 n 0000002401 00000 n 0000002501 00000 n -0000333465 00000 n -0001103023 00000 n +0000333460 00000 n +0001102877 00000 n 0000002554 00000 n 0000002756 00000 n -0000498066 00000 n -0001102936 00000 n +0000498061 00000 n +0001102790 00000 n 0000002809 00000 n 0000003187 00000 n -0000569011 00000 n -0001102849 00000 n +0000569003 00000 n +0001102703 00000 n 0000003240 00000 n 0000003510 00000 n -0000592125 00000 n -0001102762 00000 n +0000592113 00000 n +0001102616 00000 n 0000003563 00000 n 0000004081 00000 n -0000619862 00000 n -0001102675 00000 n +0000619864 00000 n +0001102529 00000 n 0000004134 00000 n 0000004565 00000 n -0000649731 00000 n -0001102588 00000 n +0000649733 00000 n +0001102442 00000 n 0000004618 00000 n 0000005047 00000 n -0000675229 00000 n -0001102501 00000 n +0000675235 00000 n +0001102355 00000 n 0000005100 00000 n 0000005448 00000 n -0000705874 00000 n -0001102414 00000 n +0000705880 00000 n +0001102268 00000 n 0000005501 00000 n 0000005854 00000 n -0000734685 00000 n -0001102327 00000 n +0000734691 00000 n +0001102181 00000 n 0000005907 00000 n 0000006269 00000 n -0000759503 00000 n -0001102253 00000 n +0000759509 00000 n +0001102107 00000 n 0000006323 00000 n 0000006725 00000 n -0000796774 00000 n -0001102139 00000 n +0000796789 00000 n +0001101993 00000 n 0000006773 00000 n 0000006912 00000 n -0000796836 00000 n -0001102061 00000 n +0000796851 00000 n +0001101915 00000 n 0000006966 00000 n 0000007264 00000 n -0000855787 00000 n -0001101983 00000 n +0000855794 00000 n +0001101837 00000 n 0000007318 00000 n 0000007669 00000 n -0000858643 00000 n -0001101851 00000 n +0000858645 00000 n +0001101705 00000 n 0000007716 00000 n 0000007855 00000 n -0000858706 00000 n -0001101733 00000 n +0000858708 00000 n +0001101587 00000 n 0000007904 00000 n 0000008091 00000 n -0000858769 00000 n -0001101654 00000 n +0000858771 00000 n +0001101508 00000 n 0000008145 00000 n 0000008301 00000 n -0000870098 00000 n -0001101575 00000 n +0000870107 00000 n +0001101429 00000 n 0000008355 00000 n 0000008481 00000 n -0000878546 00000 n -0001101443 00000 n +0000878552 00000 n +0001101297 00000 n 0000008530 00000 n 0000008631 00000 n -0000878609 00000 n -0001101364 00000 n +0000878615 00000 n +0001101218 00000 n 0000008685 00000 n 0000008902 00000 n -0000886915 00000 n -0001101285 00000 n +0000886904 00000 n +0001101139 00000 n 0000008956 00000 n 0000009228 00000 n -0000890552 00000 n -0001101153 00000 n +0000890541 00000 n +0001101007 00000 n 0000009277 00000 n 0000009605 00000 n -0000890615 00000 n -0001101074 00000 n +0000890604 00000 n +0001100928 00000 n 0000009659 00000 n 0000009790 00000 n -0000902186 00000 n -0001100995 00000 n +0000902193 00000 n +0001100849 00000 n 0000009844 00000 n 0000010173 00000 n -0000906472 00000 n -0001100863 00000 n +0000906485 00000 n +0001100717 00000 n 0000010222 00000 n 0000010323 00000 n -0000906535 00000 n -0001100784 00000 n +0000906548 00000 n +0001100638 00000 n 0000010377 00000 n 0000010609 00000 n -0000935698 00000 n -0001100691 00000 n +0000935717 00000 n +0001100545 00000 n 0000010663 00000 n 0000010930 00000 n -0000943811 00000 n -0001100612 00000 n +0000943835 00000 n +0001100466 00000 n 0000010984 00000 n 0000011300 00000 n -0000948141 00000 n -0001100480 00000 n +0000948171 00000 n +0001100334 00000 n 0000011349 00000 n 0000011581 00000 n -0000948203 00000 n -0001100401 00000 n +0000948233 00000 n +0001100255 00000 n 0000011635 00000 n 0000011766 00000 n -0000955929 00000 n -0001100322 00000 n +0000955968 00000 n +0001100176 00000 n 0000011820 00000 n 0000012047 00000 n -0000959559 00000 n -0001100190 00000 n +0000959601 00000 n +0001100044 00000 n 0000012096 00000 n 0000012419 00000 n -0000959622 00000 n -0001100111 00000 n +0000959664 00000 n +0001099965 00000 n 0000012473 00000 n 0000012604 00000 n -0000966984 00000 n -0001100032 00000 n +0000967011 00000 n +0001099886 00000 n 0000012658 00000 n 0000012960 00000 n -0000971576 00000 n -0001099939 00000 n +0000971601 00000 n +0001099793 00000 n 0000013009 00000 n 0000013325 00000 n -0000975944 00000 n -0001099846 00000 n +0000975969 00000 n +0001099700 00000 n 0000013374 00000 n 0000013535 00000 n -0000981507 00000 n -0001099767 00000 n +0000981538 00000 n +0001099621 00000 n 0000013584 00000 n 0000013735 00000 n -0000990597 00000 n -0001099673 00000 n +0000990632 00000 n +0001099527 00000 n 0000013782 00000 n 0000013863 00000 n -0000994022 00000 n -0001099579 00000 n +0000994050 00000 n +0001099433 00000 n 0000013911 00000 n 0000013992 00000 n -0000996419 00000 n -0001099499 00000 n +0000996447 00000 n +0001099353 00000 n 0000014040 00000 n 0000014181 00000 n 0000015140 00000 n @@ -10348,13 +10387,13 @@ xref 0000014233 00000 n 0000057541 00000 n 0000057604 00000 n -0001095911 00000 n -0001083060 00000 n -0001095739 00000 n -0001081757 00000 n -0001067850 00000 n -0001081585 00000 n -0001097008 00000 n +0001095765 00000 n +0001082914 00000 n +0001095593 00000 n +0001081623 00000 n +0001067882 00000 n +0001081451 00000 n +0001096862 00000 n 0000058122 00000 n 0000057937 00000 n 0000057788 00000 n @@ -10371,9 +10410,9 @@ xref 0000060651 00000 n 0000059780 00000 n 0000060773 00000 n -0001067315 00000 n -0001065450 00000 n -0001067153 00000 n +0001067347 00000 n +0001065482 00000 n +0001067185 00000 n 0000061268 00000 n 0000061083 00000 n 0000060934 00000 n @@ -10398,9 +10437,9 @@ xref 0000066106 00000 n 0000066263 00000 n 0000066425 00000 n -0001064266 00000 n -0001052015 00000 n -0001064090 00000 n +0001064298 00000 n +0001052047 00000 n +0001064122 00000 n 0000066588 00000 n 0000066751 00000 n 0000066914 00000 n @@ -10412,7 +10451,7 @@ xref 0000067889 00000 n 0000068046 00000 n 0000068209 00000 n -0001097126 00000 n +0001096980 00000 n 0000075458 00000 n 0000070908 00000 n 0000068595 00000 n @@ -10475,33 +10514,33 @@ xref 0000082106 00000 n 0000082263 00000 n 0000082418 00000 n -0000098777 00000 n -0000102068 00000 n -0000117060 00000 n -0000127151 00000 n -0000162046 00000 n -0000162110 00000 n -0000170979 00000 n -0000171043 00000 n -0000182560 00000 n -0000182623 00000 n -0000191868 00000 n -0000197521 00000 n -0000225176 00000 n -0000232892 00000 n -0000279948 00000 n -0000309361 00000 n -0000322882 00000 n -0000498128 00000 n -0000498192 00000 n -0000569073 00000 n -0000592187 00000 n -0000619924 00000 n -0000649793 00000 n -0000675291 00000 n -0000705936 00000 n -0000734747 00000 n -0000759565 00000 n +0000098780 00000 n +0000102077 00000 n +0000117069 00000 n +0000127165 00000 n +0000162060 00000 n +0000162124 00000 n +0000170993 00000 n +0000171057 00000 n +0000182574 00000 n +0000182637 00000 n +0000191889 00000 n +0000197540 00000 n +0000225195 00000 n +0000232908 00000 n +0000279964 00000 n +0000309367 00000 n +0000322888 00000 n +0000498123 00000 n +0000498187 00000 n +0000569065 00000 n +0000592175 00000 n +0000619926 00000 n +0000649795 00000 n +0000675297 00000 n +0000705942 00000 n +0000734753 00000 n +0000759571 00000 n 0000087261 00000 n 0000084438 00000 n 0000082786 00000 n @@ -10522,759 +10561,759 @@ xref 0000086730 00000 n 0000086887 00000 n 0000087042 00000 n -0000796899 00000 n -0000828586 00000 n -0000855850 00000 n -0000862529 00000 n -0000874287 00000 n -0000878672 00000 n -0000890678 00000 n -0000895237 00000 n -0000899415 00000 n -0000906598 00000 n -0000926880 00000 n -0000952951 00000 n -0000963974 00000 n -0000971640 00000 n -0000975879 00000 n -0000978555 00000 n -0000092639 00000 n -0000089279 00000 n +0000796914 00000 n +0000828593 00000 n +0000855857 00000 n +0000862534 00000 n +0000874296 00000 n +0000878678 00000 n +0000890667 00000 n +0000895224 00000 n +0000899429 00000 n +0000906611 00000 n +0000926892 00000 n +0000952981 00000 n +0000964021 00000 n +0000971665 00000 n +0000975904 00000 n +0000978580 00000 n +0000092642 00000 n +0000089282 00000 n 0000087346 00000 n -0000092513 00000 n -0000092576 00000 n -0000089565 00000 n -0000089719 00000 n -0000089874 00000 n -0000090029 00000 n -0000090184 00000 n -0000090339 00000 n -0000090494 00000 n -0000090649 00000 n -0000090804 00000 n -0000090959 00000 n -0000091115 00000 n -0000091270 00000 n -0000091426 00000 n -0000091582 00000 n -0000091736 00000 n -0000091892 00000 n -0000092047 00000 n -0000092203 00000 n -0000092358 00000 n -0000174114 00000 n -0000288846 00000 n -0000331690 00000 n -0000501141 00000 n -0000501205 00000 n -0000568947 00000 n -0000594631 00000 n -0000622393 00000 n -0000653054 00000 n -0000677139 00000 n -0000708135 00000 n -0000711143 00000 n -0000713252 00000 n -0000759439 00000 n -0000761786 00000 n -0000764941 00000 n -0000766976 00000 n -0000862465 00000 n -0000870034 00000 n -0000095063 00000 n -0000094575 00000 n -0000092737 00000 n -0000094877 00000 n -0000094717 00000 n -0000996741 00000 n -0000097237 00000 n -0000100647 00000 n -0000098967 00000 n -0000097095 00000 n -0000095161 00000 n -0000098589 00000 n -0000098714 00000 n -0000098433 00000 n -0000098841 00000 n -0000098904 00000 n -0001097244 00000 n -0000098162 00000 n -0000098293 00000 n -0000098340 00000 n -0000098412 00000 n -0000102132 00000 n -0000100525 00000 n -0000099093 00000 n -0000101942 00000 n -0000102005 00000 n -0000101671 00000 n -0000101802 00000 n -0000101849 00000 n -0000101921 00000 n -0000104588 00000 n -0000104100 00000 n -0000102258 00000 n -0000104399 00000 n -0000104462 00000 n -0000104525 00000 n -0000104242 00000 n -0000106085 00000 n -0000117124 00000 n -0000105927 00000 n -0000104686 00000 n -0000116873 00000 n -0000116406 00000 n -0000116560 00000 n -0000116716 00000 n -0000119192 00000 n -0000128699 00000 n -0000159153 00000 n -0000127278 00000 n -0000119042 00000 n -0000117258 00000 n -0000127025 00000 n -0000127088 00000 n -0000126711 00000 n -0000127215 00000 n -0000126868 00000 n -0000162174 00000 n -0000128577 00000 n -0000127412 00000 n -0000161983 00000 n -0000163839 00000 n -0000168263 00000 n -0000171107 00000 n -0000163697 00000 n -0000162321 00000 n -0000170853 00000 n -0000170916 00000 n -0000170696 00000 n -0001097362 00000 n -0000174241 00000 n -0000173589 00000 n -0000171254 00000 n -0000174051 00000 n -0000173739 00000 n -0000174178 00000 n -0000173895 00000 n -0000175864 00000 n -0000178540 00000 n -0000182687 00000 n -0000175722 00000 n -0000174339 00000 n -0000182434 00000 n -0000182497 00000 n -0000182277 00000 n -0000184917 00000 n -0000194656 00000 n -0000191932 00000 n -0000184751 00000 n -0000182836 00000 n -0000191805 00000 n -0000191178 00000 n -0000191335 00000 n -0000191491 00000 n -0000191648 00000 n -0000199677 00000 n -0000197647 00000 n -0000194498 00000 n -0000192054 00000 n -0000197395 00000 n -0000197458 00000 n -0000196925 00000 n -0000197081 00000 n -0000197238 00000 n -0000225366 00000 n -0000199535 00000 n -0000197782 00000 n -0000225113 00000 n -0000225240 00000 n -0000224955 00000 n -0000225303 00000 n -0000227411 00000 n -0000233019 00000 n -0000227289 00000 n -0000225501 00000 n -0000232829 00000 n -0000232956 00000 n -0001097480 00000 n -0000234863 00000 n -0000280136 00000 n -0000234741 00000 n -0000233154 00000 n -0000279885 00000 n -0000280073 00000 n -0000282854 00000 n -0000282543 00000 n -0000280271 00000 n -0000282665 00000 n -0000282728 00000 n -0000282791 00000 n -0000291007 00000 n -0000285373 00000 n -0000285000 00000 n -0000282965 00000 n -0000285122 00000 n -0000285185 00000 n -0000285248 00000 n -0000311329 00000 n -0000289034 00000 n -0000288319 00000 n -0000285471 00000 n -0000288783 00000 n -0000288469 00000 n -0000288625 00000 n -0000309425 00000 n -0000290885 00000 n -0000289145 00000 n -0000309298 00000 n -0000322945 00000 n -0000311207 00000 n -0000309573 00000 n -0000322819 00000 n -0001097598 00000 n -0000326273 00000 n -0000326026 00000 n -0000323093 00000 n -0000326148 00000 n -0000329088 00000 n -0000328903 00000 n -0000326384 00000 n -0000329025 00000 n -0001051653 00000 n -0001042432 00000 n -0001051473 00000 n -0001041990 00000 n -0001039707 00000 n -0001041828 00000 n -0001039413 00000 n -0001031595 00000 n -0001039238 00000 n -0001031208 00000 n -0001029021 00000 n -0001031045 00000 n -0000331815 00000 n -0000331164 00000 n -0000329251 00000 n -0000331627 00000 n -0001028474 00000 n -0001019526 00000 n -0001028297 00000 n -0000331314 00000 n -0000331471 00000 n -0000333527 00000 n -0000333218 00000 n -0000331926 00000 n -0000333340 00000 n -0000335214 00000 n -0000366413 00000 n -0000498256 00000 n -0000335064 00000 n -0000333625 00000 n -0000498003 00000 n -0000497691 00000 n -0000497849 00000 n -0000501269 00000 n -0000500615 00000 n -0000498418 00000 n -0000501078 00000 n -0000500765 00000 n -0000500921 00000 n -0001097716 00000 n -0000503397 00000 n -0000569137 00000 n -0000503275 00000 n -0000501367 00000 n -0000568884 00000 n -0000570646 00000 n -0000570119 00000 n -0000569285 00000 n -0000570583 00000 n -0000570269 00000 n -0000570427 00000 n -0000573412 00000 n -0000592251 00000 n -0000573254 00000 n -0000570731 00000 n -0000592062 00000 n -0000591593 00000 n -0000591750 00000 n -0000591907 00000 n -0000594757 00000 n -0000594446 00000 n -0000592464 00000 n -0000594568 00000 n -0000594694 00000 n -0000597585 00000 n -0000619988 00000 n -0000597419 00000 n -0000594881 00000 n -0000619799 00000 n -0000619172 00000 n -0000619333 00000 n -0000619489 00000 n -0000619643 00000 n -0000996677 00000 n -0000622457 00000 n -0000622031 00000 n -0000620201 00000 n -0000622330 00000 n -0000622173 00000 n -0001097834 00000 n -0000625102 00000 n -0000649857 00000 n -0000624980 00000 n -0000622568 00000 n -0000649668 00000 n -0001019195 00000 n -0001017085 00000 n -0001019024 00000 n -0000653181 00000 n -0000652527 00000 n -0000650083 00000 n -0000652991 00000 n -0000652677 00000 n -0000652835 00000 n -0000653118 00000 n -0000655507 00000 n -0000675418 00000 n -0000655357 00000 n -0000653305 00000 n -0000675166 00000 n -0000674851 00000 n -0000675009 00000 n -0000675355 00000 n -0000677203 00000 n -0000676954 00000 n -0000675566 00000 n -0000677076 00000 n -0000679756 00000 n -0000706000 00000 n -0000679590 00000 n -0000677314 00000 n -0000705811 00000 n -0000705188 00000 n -0000705344 00000 n -0000705499 00000 n -0000705655 00000 n -0000708261 00000 n -0000707950 00000 n -0000706148 00000 n -0000708072 00000 n -0000708199 00000 n -0001097952 00000 n -0000711207 00000 n -0000710958 00000 n -0000708372 00000 n -0000711080 00000 n -0000713316 00000 n -0000713067 00000 n -0000711305 00000 n -0000713189 00000 n -0000715456 00000 n -0000734811 00000 n -0000715306 00000 n -0000713414 00000 n -0000734622 00000 n -0000734307 00000 n -0000734465 00000 n -0000737472 00000 n -0000759629 00000 n -0000737306 00000 n -0000734959 00000 n -0000759376 00000 n -0000758748 00000 n -0000758906 00000 n -0000759063 00000 n -0000759219 00000 n -0000762164 00000 n -0000761601 00000 n -0000759777 00000 n -0000761723 00000 n -0000761849 00000 n -0000761912 00000 n -0000761975 00000 n -0000762038 00000 n -0000762101 00000 n -0000765005 00000 n -0000764756 00000 n -0000762275 00000 n -0000764878 00000 n -0001098070 00000 n -0000767103 00000 n -0000766791 00000 n -0000765103 00000 n -0000766913 00000 n -0000767040 00000 n -0000769238 00000 n -0000799309 00000 n -0000796963 00000 n -0000769096 00000 n -0000767214 00000 n -0000796711 00000 n -0000796554 00000 n -0000828650 00000 n -0000799159 00000 n -0000797150 00000 n -0000828523 00000 n -0000828207 00000 n -0001015989 00000 n -0000998779 00000 n -0001015816 00000 n -0000828365 00000 n -0000830295 00000 n -0000829760 00000 n -0000828824 00000 n -0000830232 00000 n -0000829910 00000 n -0000830071 00000 n -0000832893 00000 n -0000855914 00000 n -0000832743 00000 n -0000830380 00000 n -0000855724 00000 n -0000855411 00000 n -0000855567 00000 n -0000858832 00000 n -0000858119 00000 n -0000856114 00000 n -0000858580 00000 n -0000858269 00000 n -0000858423 00000 n -0001098188 00000 n -0000861134 00000 n -0000862593 00000 n -0000861012 00000 n -0000858930 00000 n -0000862402 00000 n -0000862131 00000 n -0000862262 00000 n -0000862309 00000 n -0000862381 00000 n -0000866279 00000 n -0000865588 00000 n -0000862720 00000 n -0000866216 00000 n -0000865746 00000 n -0000865904 00000 n -0000866060 00000 n -0000870161 00000 n -0000869672 00000 n -0000866377 00000 n -0000869971 00000 n -0000869814 00000 n -0000872399 00000 n -0000876298 00000 n -0000874351 00000 n -0000872249 00000 n -0000870259 00000 n -0000874224 00000 n -0000873911 00000 n -0000874066 00000 n -0000873560 00000 n -0000873691 00000 n -0000873738 00000 n -0000873810 00000 n -0000873890 00000 n -0000878799 00000 n -0000876156 00000 n -0000874465 00000 n -0000878483 00000 n -0000878327 00000 n -0000878736 00000 n -0000877975 00000 n -0000878106 00000 n -0000878153 00000 n -0000878225 00000 n -0000878305 00000 n -0000882102 00000 n -0000881614 00000 n -0000878926 00000 n -0000881913 00000 n -0000881976 00000 n -0000882039 00000 n -0000881756 00000 n -0001098306 00000 n -0000884731 00000 n -0000884546 00000 n -0000882200 00000 n -0000884668 00000 n -0000886978 00000 n -0000886730 00000 n -0000884829 00000 n -0000886852 00000 n -0000889028 00000 n -0000890742 00000 n -0000888878 00000 n -0000887089 00000 n -0000890489 00000 n -0000890177 00000 n -0000890333 00000 n -0000889906 00000 n -0000890037 00000 n -0000890084 00000 n -0000890156 00000 n -0000893167 00000 n -0000895299 00000 n -0000893025 00000 n -0000890882 00000 n -0000895174 00000 n -0000895018 00000 n -0000894666 00000 n -0000894797 00000 n -0000894844 00000 n -0000894916 00000 n -0000894996 00000 n -0000897886 00000 n -0000899479 00000 n -0000897744 00000 n -0000895413 00000 n -0000899352 00000 n -0000899197 00000 n -0000898926 00000 n -0000899057 00000 n -0000899104 00000 n -0000899176 00000 n -0000902249 00000 n -0000902001 00000 n -0000899593 00000 n -0000902123 00000 n -0001098424 00000 n -0000904454 00000 n -0000906662 00000 n -0000904312 00000 n -0000902360 00000 n -0000906409 00000 n -0000906253 00000 n -0000905902 00000 n -0000906033 00000 n -0000906080 00000 n -0000906152 00000 n -0000906232 00000 n -0000908671 00000 n -0000926943 00000 n -0000908549 00000 n -0000906789 00000 n -0000926817 00000 n -0000929985 00000 n -0000929800 00000 n -0000927078 00000 n -0000929922 00000 n -0000933003 00000 n -0000932818 00000 n -0000930083 00000 n -0000932940 00000 n -0000935761 00000 n -0000935513 00000 n -0000933101 00000 n -0000935635 00000 n -0000937973 00000 n -0000937548 00000 n -0000935872 00000 n -0000937847 00000 n -0000937910 00000 n -0000937690 00000 n -0001098542 00000 n -0000940179 00000 n -0000939994 00000 n -0000938084 00000 n -0000940116 00000 n -0000942003 00000 n -0000941755 00000 n -0000940277 00000 n -0000941877 00000 n -0000941940 00000 n -0000943874 00000 n -0000943626 00000 n -0000942114 00000 n -0000943748 00000 n -0000948266 00000 n -0000946845 00000 n -0000943985 00000 n -0000947637 00000 n -0000947700 00000 n -0000947763 00000 n -0000947826 00000 n -0000947889 00000 n -0000947952 00000 n -0000948015 00000 n -0000948078 00000 n -0000947011 00000 n -0000947167 00000 n -0000947323 00000 n -0000947480 00000 n -0000950796 00000 n -0000953014 00000 n -0000950638 00000 n -0000948390 00000 n -0000952888 00000 n -0000952417 00000 n -0000952574 00000 n -0000952731 00000 n -0000952146 00000 n -0000952277 00000 n -0000952324 00000 n -0000952396 00000 n -0000996483 00000 n -0000956243 00000 n -0000955744 00000 n -0000953128 00000 n -0000955866 00000 n -0000955992 00000 n -0000956055 00000 n -0000956117 00000 n -0000956180 00000 n -0001098660 00000 n -0000959685 00000 n -0000959002 00000 n -0000956406 00000 n -0000959303 00000 n -0000959367 00000 n -0000959431 00000 n -0000959495 00000 n -0000959145 00000 n -0000962027 00000 n -0000964038 00000 n -0000961902 00000 n -0000959861 00000 n -0000963909 00000 n -0000963552 00000 n -0000963684 00000 n -0000963732 00000 n -0000963805 00000 n -0000963886 00000 n -0000967048 00000 n -0000966614 00000 n -0000964167 00000 n -0000966919 00000 n -0000966760 00000 n -0000969596 00000 n -0000971705 00000 n -0000969441 00000 n -0000967186 00000 n -0000971511 00000 n -0000971194 00000 n -0000971352 00000 n -0000970919 00000 n -0000971051 00000 n -0000971099 00000 n -0000971172 00000 n -0000974306 00000 n -0000976712 00000 n -0000976008 00000 n -0000974151 00000 n -0000971847 00000 n -0000975814 00000 n -0000975495 00000 n -0000975659 00000 n -0000975220 00000 n -0000975352 00000 n -0000975400 00000 n -0000975473 00000 n -0000996612 00000 n -0000996547 00000 n -0000978620 00000 n -0000976586 00000 n -0000976150 00000 n -0000978490 00000 n -0001098782 00000 n -0000978214 00000 n -0000978346 00000 n -0000978394 00000 n -0000978467 00000 n -0000981571 00000 n -0000981316 00000 n -0000978736 00000 n -0000981442 00000 n -0000988132 00000 n -0000984274 00000 n -0000981683 00000 n -0000988002 00000 n -0000988067 00000 n -0000984583 00000 n -0000984759 00000 n -0000984937 00000 n -0000985112 00000 n -0000985286 00000 n -0000985470 00000 n -0000985640 00000 n -0000985819 00000 n -0000986004 00000 n -0000986179 00000 n -0000986357 00000 n -0000986556 00000 n -0000986728 00000 n -0000986899 00000 n -0000987100 00000 n -0000987277 00000 n -0000987458 00000 n -0000987639 00000 n -0000987818 00000 n -0000990661 00000 n -0000990406 00000 n -0000988257 00000 n -0000990532 00000 n -0000992516 00000 n -0000992325 00000 n -0000990773 00000 n -0000992451 00000 n -0000995060 00000 n -0000993831 00000 n -0000992615 00000 n -0000993957 00000 n -0000994086 00000 n -0000994151 00000 n -0000994216 00000 n -0000994281 00000 n -0000994346 00000 n -0000994411 00000 n -0000994476 00000 n -0000994541 00000 n -0000994606 00000 n -0000994671 00000 n -0000994736 00000 n -0000994801 00000 n -0000994866 00000 n -0000994931 00000 n -0000994996 00000 n -0000996804 00000 n -0000996228 00000 n -0000995146 00000 n -0000996354 00000 n -0001098907 00000 n -0000996890 00000 n -0001016482 00000 n -0001019433 00000 n -0001019408 00000 n -0001028776 00000 n -0001031474 00000 n -0001031435 00000 n -0001039652 00000 n -0001042291 00000 n -0001042218 00000 n -0001051908 00000 n -0001064813 00000 n -0001067687 00000 n -0001067557 00000 n -0001082359 00000 n -0001096347 00000 n -0001098987 00000 n -0001099107 00000 n -0001099227 00000 n -0001099341 00000 n -0001099423 00000 n -0001104297 00000 n -0001110107 00000 n -0001110148 00000 n -0001110188 00000 n -0001110344 00000 n +0000092516 00000 n +0000092579 00000 n +0000089568 00000 n +0000089722 00000 n +0000089877 00000 n +0000090032 00000 n +0000090187 00000 n +0000090342 00000 n +0000090497 00000 n +0000090652 00000 n +0000090807 00000 n +0000090962 00000 n +0000091118 00000 n +0000091273 00000 n +0000091429 00000 n +0000091585 00000 n +0000091739 00000 n +0000091895 00000 n +0000092050 00000 n +0000092206 00000 n +0000092361 00000 n +0000174128 00000 n +0000288849 00000 n +0000331683 00000 n +0000501136 00000 n +0000501200 00000 n +0000568939 00000 n +0000594619 00000 n +0000622395 00000 n +0000653060 00000 n +0000677145 00000 n +0000708141 00000 n +0000711149 00000 n +0000713258 00000 n +0000759445 00000 n +0000761792 00000 n +0000764947 00000 n +0000766982 00000 n +0000862470 00000 n +0000870043 00000 n +0000095066 00000 n +0000094578 00000 n +0000092740 00000 n +0000094880 00000 n +0000094720 00000 n +0000996769 00000 n +0000097240 00000 n +0000100656 00000 n +0000098970 00000 n +0000097098 00000 n +0000095164 00000 n +0000098592 00000 n +0000098717 00000 n +0000098436 00000 n +0000098844 00000 n +0000098907 00000 n +0001097098 00000 n +0000098165 00000 n +0000098296 00000 n +0000098343 00000 n +0000098415 00000 n +0000102141 00000 n +0000100534 00000 n +0000099096 00000 n +0000101951 00000 n +0000102014 00000 n +0000101680 00000 n +0000101811 00000 n +0000101858 00000 n +0000101930 00000 n +0000104597 00000 n +0000104109 00000 n +0000102267 00000 n +0000104408 00000 n +0000104471 00000 n +0000104534 00000 n +0000104251 00000 n +0000106094 00000 n +0000117133 00000 n +0000105936 00000 n +0000104695 00000 n +0000116882 00000 n +0000116415 00000 n +0000116569 00000 n +0000116725 00000 n +0000119206 00000 n +0000128713 00000 n +0000159167 00000 n +0000127292 00000 n +0000119056 00000 n +0000117267 00000 n +0000127039 00000 n +0000127102 00000 n +0000126725 00000 n +0000127229 00000 n +0000126882 00000 n +0000162188 00000 n +0000128591 00000 n +0000127426 00000 n +0000161997 00000 n +0000163853 00000 n +0000168277 00000 n +0000171121 00000 n +0000163711 00000 n +0000162335 00000 n +0000170867 00000 n +0000170930 00000 n +0000170710 00000 n +0001097216 00000 n +0000174255 00000 n +0000173603 00000 n +0000171268 00000 n +0000174065 00000 n +0000173753 00000 n +0000174192 00000 n +0000173909 00000 n +0000175878 00000 n +0000178554 00000 n +0000182701 00000 n +0000175736 00000 n +0000174353 00000 n +0000182448 00000 n +0000182511 00000 n +0000182291 00000 n +0000184938 00000 n +0000194675 00000 n +0000191953 00000 n +0000184772 00000 n +0000182850 00000 n +0000191826 00000 n +0000191199 00000 n +0000191356 00000 n +0000191512 00000 n +0000191669 00000 n +0000199696 00000 n +0000197666 00000 n +0000194517 00000 n +0000192075 00000 n +0000197414 00000 n +0000197477 00000 n +0000196944 00000 n +0000197100 00000 n +0000197257 00000 n +0000225385 00000 n +0000199554 00000 n +0000197801 00000 n +0000225132 00000 n +0000225259 00000 n +0000224974 00000 n +0000225322 00000 n +0000227427 00000 n +0000233035 00000 n +0000227305 00000 n +0000225520 00000 n +0000232845 00000 n +0000232972 00000 n +0001097334 00000 n +0000234879 00000 n +0000280152 00000 n +0000234757 00000 n +0000233170 00000 n +0000279901 00000 n +0000280089 00000 n +0000282875 00000 n +0000282564 00000 n +0000280287 00000 n +0000282686 00000 n +0000282749 00000 n +0000282812 00000 n +0000291013 00000 n +0000285392 00000 n +0000285019 00000 n +0000282986 00000 n +0000285141 00000 n +0000285204 00000 n +0000285267 00000 n +0000311335 00000 n +0000289037 00000 n +0000288322 00000 n +0000285490 00000 n +0000288786 00000 n +0000288472 00000 n +0000288628 00000 n +0000309431 00000 n +0000290891 00000 n +0000289148 00000 n +0000309304 00000 n +0000322951 00000 n +0000311213 00000 n +0000309579 00000 n +0000322825 00000 n +0001097452 00000 n +0000326279 00000 n +0000326032 00000 n +0000323099 00000 n +0000326154 00000 n +0000329080 00000 n +0000328895 00000 n +0000326390 00000 n +0000329017 00000 n +0001051685 00000 n +0001042464 00000 n +0001051505 00000 n +0001042022 00000 n +0001039736 00000 n +0001041860 00000 n +0001039442 00000 n +0001031624 00000 n +0001039267 00000 n +0001031237 00000 n +0001029049 00000 n +0001031074 00000 n +0000331808 00000 n +0000331157 00000 n +0000329243 00000 n +0000331620 00000 n +0001028502 00000 n +0001019554 00000 n +0001028325 00000 n +0000331307 00000 n +0000331464 00000 n +0000333522 00000 n +0000333213 00000 n +0000331919 00000 n +0000333335 00000 n +0000335209 00000 n +0000366408 00000 n +0000498251 00000 n +0000335059 00000 n +0000333620 00000 n +0000497998 00000 n +0000497686 00000 n +0000497844 00000 n +0000501264 00000 n +0000500610 00000 n +0000498413 00000 n +0000501073 00000 n +0000500760 00000 n +0000500916 00000 n +0001097570 00000 n +0000503389 00000 n +0000569129 00000 n +0000503267 00000 n +0000501362 00000 n +0000568876 00000 n +0000570634 00000 n +0000570107 00000 n +0000569277 00000 n +0000570571 00000 n +0000570257 00000 n +0000570415 00000 n +0000573400 00000 n +0000592239 00000 n +0000573242 00000 n +0000570719 00000 n +0000592050 00000 n +0000591581 00000 n +0000591738 00000 n +0000591895 00000 n +0000594745 00000 n +0000594434 00000 n +0000592452 00000 n +0000594556 00000 n +0000594682 00000 n +0000597587 00000 n +0000619990 00000 n +0000597421 00000 n +0000594869 00000 n +0000619801 00000 n +0000619174 00000 n +0000619335 00000 n +0000619491 00000 n +0000619645 00000 n +0000996705 00000 n +0000622459 00000 n +0000622033 00000 n +0000620203 00000 n +0000622332 00000 n +0000622175 00000 n +0001097688 00000 n +0000625104 00000 n +0000649859 00000 n +0000624982 00000 n +0000622570 00000 n +0000649670 00000 n +0001019223 00000 n +0001017113 00000 n +0001019052 00000 n +0000653187 00000 n +0000652533 00000 n +0000650085 00000 n +0000652997 00000 n +0000652683 00000 n +0000652841 00000 n +0000653124 00000 n +0000655513 00000 n +0000675424 00000 n +0000655363 00000 n +0000653311 00000 n +0000675172 00000 n +0000674857 00000 n +0000675015 00000 n +0000675361 00000 n +0000677209 00000 n +0000676960 00000 n +0000675572 00000 n +0000677082 00000 n +0000679762 00000 n +0000706006 00000 n +0000679596 00000 n +0000677320 00000 n +0000705817 00000 n +0000705194 00000 n +0000705350 00000 n +0000705505 00000 n +0000705661 00000 n +0000708267 00000 n +0000707956 00000 n +0000706154 00000 n +0000708078 00000 n +0000708205 00000 n +0001097806 00000 n +0000711213 00000 n +0000710964 00000 n +0000708378 00000 n +0000711086 00000 n +0000713322 00000 n +0000713073 00000 n +0000711311 00000 n +0000713195 00000 n +0000715462 00000 n +0000734817 00000 n +0000715312 00000 n +0000713420 00000 n +0000734628 00000 n +0000734313 00000 n +0000734471 00000 n +0000737478 00000 n +0000759635 00000 n +0000737312 00000 n +0000734965 00000 n +0000759382 00000 n +0000758754 00000 n +0000758912 00000 n +0000759069 00000 n +0000759225 00000 n +0000762170 00000 n +0000761607 00000 n +0000759783 00000 n +0000761729 00000 n +0000761855 00000 n +0000761918 00000 n +0000761981 00000 n +0000762044 00000 n +0000762107 00000 n +0000765011 00000 n +0000764762 00000 n +0000762281 00000 n +0000764884 00000 n +0001097924 00000 n +0000767109 00000 n +0000766797 00000 n +0000765109 00000 n +0000766919 00000 n +0000767046 00000 n +0000769253 00000 n +0000799316 00000 n +0000796978 00000 n +0000769111 00000 n +0000767220 00000 n +0000796726 00000 n +0000796569 00000 n +0000828657 00000 n +0000799166 00000 n +0000797165 00000 n +0000828530 00000 n +0000828214 00000 n +0001016017 00000 n +0000998807 00000 n +0001015844 00000 n +0000828372 00000 n +0000830302 00000 n +0000829767 00000 n +0000828831 00000 n +0000830239 00000 n +0000829917 00000 n +0000830078 00000 n +0000832900 00000 n +0000855921 00000 n +0000832750 00000 n +0000830387 00000 n +0000855731 00000 n +0000855418 00000 n +0000855574 00000 n +0000858834 00000 n +0000858121 00000 n +0000856121 00000 n +0000858582 00000 n +0000858271 00000 n +0000858425 00000 n +0001098042 00000 n +0000861139 00000 n +0000862598 00000 n +0000861017 00000 n +0000858932 00000 n +0000862407 00000 n +0000862136 00000 n +0000862267 00000 n +0000862314 00000 n +0000862386 00000 n +0000866285 00000 n +0000865594 00000 n +0000862725 00000 n +0000866222 00000 n +0000865752 00000 n +0000865910 00000 n +0000866066 00000 n +0000870170 00000 n +0000869681 00000 n +0000866383 00000 n +0000869980 00000 n +0000869823 00000 n +0000872408 00000 n +0000876304 00000 n +0000874360 00000 n +0000872258 00000 n +0000870268 00000 n +0000874233 00000 n +0000873920 00000 n +0000874075 00000 n +0000873569 00000 n +0000873700 00000 n +0000873747 00000 n +0000873819 00000 n +0000873899 00000 n +0000878805 00000 n +0000876162 00000 n +0000874474 00000 n +0000878489 00000 n +0000878333 00000 n +0000878742 00000 n +0000877981 00000 n +0000878112 00000 n +0000878159 00000 n +0000878231 00000 n +0000878311 00000 n +0000882092 00000 n +0000881604 00000 n +0000878932 00000 n +0000881903 00000 n +0000881966 00000 n +0000882029 00000 n +0000881746 00000 n +0001098160 00000 n +0000884720 00000 n +0000884535 00000 n +0000882190 00000 n +0000884657 00000 n +0000886967 00000 n +0000886719 00000 n +0000884818 00000 n +0000886841 00000 n +0000889017 00000 n +0000890731 00000 n +0000888867 00000 n +0000887078 00000 n +0000890478 00000 n +0000890166 00000 n +0000890322 00000 n +0000889895 00000 n +0000890026 00000 n +0000890073 00000 n +0000890145 00000 n +0000893154 00000 n +0000895286 00000 n +0000893012 00000 n +0000890871 00000 n +0000895161 00000 n +0000895005 00000 n +0000894653 00000 n +0000894784 00000 n +0000894831 00000 n +0000894903 00000 n +0000894983 00000 n +0000897899 00000 n +0000899493 00000 n +0000897757 00000 n +0000895400 00000 n +0000899366 00000 n +0000899210 00000 n +0000898939 00000 n +0000899070 00000 n +0000899117 00000 n +0000899189 00000 n +0000902256 00000 n +0000902008 00000 n +0000899607 00000 n +0000902130 00000 n +0001098278 00000 n +0000904467 00000 n +0000906675 00000 n +0000904325 00000 n +0000902367 00000 n +0000906422 00000 n +0000906266 00000 n +0000905915 00000 n +0000906046 00000 n +0000906093 00000 n +0000906165 00000 n +0000906245 00000 n +0000908683 00000 n +0000926955 00000 n +0000908561 00000 n +0000906802 00000 n +0000926829 00000 n +0000930001 00000 n +0000929816 00000 n +0000927090 00000 n +0000929938 00000 n +0000933022 00000 n +0000932837 00000 n +0000930099 00000 n +0000932959 00000 n +0000935780 00000 n +0000935532 00000 n +0000933120 00000 n +0000935654 00000 n +0000937989 00000 n +0000937564 00000 n +0000935891 00000 n +0000937863 00000 n +0000937926 00000 n +0000937706 00000 n +0001098396 00000 n +0000940200 00000 n +0000940015 00000 n +0000938100 00000 n +0000940137 00000 n +0000942027 00000 n +0000941779 00000 n +0000940298 00000 n +0000941901 00000 n +0000941964 00000 n +0000943898 00000 n +0000943650 00000 n +0000942138 00000 n +0000943772 00000 n +0000948296 00000 n +0000946875 00000 n +0000944009 00000 n +0000947667 00000 n +0000947730 00000 n +0000947793 00000 n +0000947856 00000 n +0000947919 00000 n +0000947982 00000 n +0000948045 00000 n +0000948108 00000 n +0000947041 00000 n +0000947197 00000 n +0000947353 00000 n +0000947510 00000 n +0000950826 00000 n +0000953044 00000 n +0000950668 00000 n +0000948420 00000 n +0000952918 00000 n +0000952447 00000 n +0000952604 00000 n +0000952761 00000 n +0000952176 00000 n +0000952307 00000 n +0000952354 00000 n +0000952426 00000 n +0000996511 00000 n +0000956282 00000 n +0000955783 00000 n +0000953158 00000 n +0000955905 00000 n +0000956031 00000 n +0000956094 00000 n +0000956156 00000 n +0000956219 00000 n +0001098514 00000 n +0000959727 00000 n +0000959044 00000 n +0000956445 00000 n +0000959345 00000 n +0000959409 00000 n +0000959473 00000 n +0000959537 00000 n +0000959187 00000 n +0000962074 00000 n +0000964085 00000 n +0000961949 00000 n +0000959903 00000 n +0000963956 00000 n +0000963599 00000 n +0000963731 00000 n +0000963779 00000 n +0000963852 00000 n +0000963933 00000 n +0000967075 00000 n +0000966641 00000 n +0000964214 00000 n +0000966946 00000 n +0000966787 00000 n +0000969621 00000 n +0000971730 00000 n +0000969466 00000 n +0000967213 00000 n +0000971536 00000 n +0000971219 00000 n +0000971377 00000 n +0000970944 00000 n +0000971076 00000 n +0000971124 00000 n +0000971197 00000 n +0000974331 00000 n +0000976737 00000 n +0000976033 00000 n +0000974176 00000 n +0000971872 00000 n +0000975839 00000 n +0000975520 00000 n +0000975684 00000 n +0000975245 00000 n +0000975377 00000 n +0000975425 00000 n +0000975498 00000 n +0000996640 00000 n +0000996575 00000 n +0000978645 00000 n +0000976611 00000 n +0000976175 00000 n +0000978515 00000 n +0001098636 00000 n +0000978239 00000 n +0000978371 00000 n +0000978419 00000 n +0000978492 00000 n +0000981602 00000 n +0000981347 00000 n +0000978761 00000 n +0000981473 00000 n +0000988172 00000 n +0000984314 00000 n +0000981714 00000 n +0000988042 00000 n +0000988107 00000 n +0000984623 00000 n +0000984799 00000 n +0000984977 00000 n +0000985152 00000 n +0000985326 00000 n +0000985510 00000 n +0000985680 00000 n +0000985859 00000 n +0000986044 00000 n +0000986219 00000 n +0000986397 00000 n +0000986596 00000 n +0000986768 00000 n +0000986939 00000 n +0000987140 00000 n +0000987317 00000 n +0000987498 00000 n +0000987679 00000 n +0000987858 00000 n +0000990696 00000 n +0000990441 00000 n +0000988297 00000 n +0000990567 00000 n +0000992544 00000 n +0000992353 00000 n +0000990808 00000 n +0000992479 00000 n +0000995088 00000 n +0000993859 00000 n +0000992643 00000 n +0000993985 00000 n +0000994114 00000 n +0000994179 00000 n +0000994244 00000 n +0000994309 00000 n +0000994374 00000 n +0000994439 00000 n +0000994504 00000 n +0000994569 00000 n +0000994634 00000 n +0000994699 00000 n +0000994764 00000 n +0000994829 00000 n +0000994894 00000 n +0000994959 00000 n +0000995024 00000 n +0000996832 00000 n +0000996256 00000 n +0000995174 00000 n +0000996382 00000 n +0001098761 00000 n +0000996918 00000 n +0001016510 00000 n +0001019461 00000 n +0001019436 00000 n +0001028804 00000 n +0001031503 00000 n +0001031464 00000 n +0001039681 00000 n +0001042323 00000 n +0001042250 00000 n +0001051940 00000 n +0001064845 00000 n +0001067719 00000 n +0001067589 00000 n +0001082215 00000 n +0001096201 00000 n +0001098841 00000 n +0001098961 00000 n +0001099081 00000 n +0001099195 00000 n +0001099277 00000 n +0001104151 00000 n +0001109961 00000 n +0001110002 00000 n +0001110042 00000 n +0001110198 00000 n trailer << /Size 1140 /Root 1138 0 R /Info 1139 0 R -/ID [<71A58B6B8F49DF593CDDFCFFF32FE92C> <71A58B6B8F49DF593CDDFCFFF32FE92C>] +/ID [<2B9C4A39BE41F33698D066C3D66F1BF3> <2B9C4A39BE41F33698D066C3D66F1BF3>] >> startxref -1110612 +1110466 %%EOF @@ -1,6 +1,4 @@ Must do: - Fassbender Programmierrichtlinien pruefen - beschreiben warum VSAbstractEvent -> VSPrefs (wg. serialisierung und protokollvariablen) Warn if a file does not exists while trying to open! Literaturangaben komplettieren diff --git a/sources/prefs/VSDefaultPrefs.java b/sources/prefs/VSDefaultPrefs.java index 851f2eb..9d6933d 100644 --- a/sources/prefs/VSDefaultPrefs.java +++ b/sources/prefs/VSDefaultPrefs.java @@ -107,8 +107,7 @@ public class VSDefaultPrefs extends VSSerializablePrefs { initString("lang.message.recv", "Nachricht erhalten"); initString("lang.message.sent", "Nachricht versendet"); initString("lang.mode.expert", "Expertenmodus"); - initString("lang.name", "VS-Simulator"); - //initString("lang.name", "VS-Simulator v0.4-dev Red Bull"); + initString("lang.name", "VS-Simulator 1.0"); initString("lang.ok", "OK"); initString("lang.open", "Öffnen"); initString("lang.pause", "Pausieren"); diff --git a/sources/protocols/implementations/VSOnePhaseCommitProtocol.java b/sources/protocols/implementations/VSOnePhaseCommitProtocol.java index 0581b74..51ac9c7 100644 --- a/sources/protocols/implementations/VSOnePhaseCommitProtocol.java +++ b/sources/protocols/implementations/VSOnePhaseCommitProtocol.java @@ -59,7 +59,7 @@ public class VSOnePhaseCommitProtocol extends VSAbstractProtocol { vec.add(1); vec.add(3); - initVector("pids", vec, "PIDs beteilitger Prozesse"); + initVector("pids", vec, "PIDs beteiligter Prozesse"); initLong("timeout", 2500, "Zeit bis erneute Anfrage", "ms"); } diff --git a/sources/protocols/implementations/VSReliableMulticastProtocol.java b/sources/protocols/implementations/VSReliableMulticastProtocol.java index b876295..06e5c7b 100644 --- a/sources/protocols/implementations/VSReliableMulticastProtocol.java +++ b/sources/protocols/implementations/VSReliableMulticastProtocol.java @@ -58,7 +58,7 @@ public class VSReliableMulticastProtocol extends VSAbstractProtocol { vec.add(1); vec.add(3); - initVector("pids", vec, "PIDs beteilitger Prozesse"); + initVector("pids", vec, "PIDs beteiligter Prozesse"); initLong("timeout", 2500, "Zeit bis erneute Anfrage", "ms"); } diff --git a/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java b/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java index 5f9e467..d4f1190 100644 --- a/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java +++ b/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java @@ -66,7 +66,7 @@ public class VSTwoPhaseCommitProtocol extends VSAbstractProtocol { vec.add(2); vec.add(3); - initVector("pids", vec, "PIDs beteilitger Prozesse"); + initVector("pids", vec, "PIDs beteiligter Prozesse"); initLong("timeout", 2500, "Zeit bis erneute Anfrage", "ms"); } |
